on b516e1e help sign in
bridge/src/lib/router.js
181 lines 5.1 kB history raw
1import * as ob from 'urbit-ob'
3import AcceptTransfer from '../views/AcceptTransfer'
4import CancelTransfer from '../views/CancelTransfer'
5import CreateGalaxy from '../views/CreateGalaxy'
6import GenKeyfile from '../views/GenKeyfile'
7import IssueChild from '../views/IssueChild'
8import Landing from '../views/Landing'
9import Network from '../views/Network'
10import Mnemonic from '../views/Mnemonic'
11import Ledger from '../views/Ledger'
12import Trezor from '../views/Trezor'
13import PrivateKey from '../views/PrivateKey'
14import ViewPoint from '../views/ViewPoint'
15import SentTransaction from '../views/SentTransaction'
16import SetKeys from '../views/SetKeys'
17import {
18 SetManagementProxy,
19 SetSpawnProxy,
20 SetTransferProxy
21 } from '../views/SetProxy'
22import Point from '../views/Point'
23import Points from '../views/Points'
24import Shards from '../views/Shards'
25import Ticket from '../views/Ticket'
26import Transfer from '../views/Transfer'
27import Wallet from '../views/Wallet'
29import { addressFromSecp256k1Public, EthereumWallet } from './wallet'
30import { renderNetworkType } from './network'
31import { BRIDGE_ERROR } from './error'
33const ROUTE_NAMES = {
34 ACCEPT_TRANSFER: Symbol('ACCEPT_TRANSFER'),
35 CANCEL_TRANSFER: Symbol('CANCEL_TRANSFER'),
36 LANDING: Symbol('LANDING'),
37 NETWORK: Symbol('NETWORK'),
38 WALLET: Symbol('WALLET'),
39 MNEMONIC: Symbol('MNEMONIC'),
40 TICKET: Symbol('TICKET'),
41 SHARDS: Symbol('SHARDS'),
42 LEDGER: Symbol('LEDGER'),
43 TREZOR: Symbol('TREZOR'),
44 PRIVATE_KEY: Symbol('PRIVATE_KEY'),
45 VIEW_SHIP: Symbol('VIEW_SHIP'),
46 SHIPS: Symbol('SHIPS'),
47 SHIP: Symbol('SHIP'),
48 SET_MANAGEMENT_PROXY: Symbol('SET_MANAGEMENT_PROXY'),
49 SET_SPAWN_PROXY: Symbol('SET_SPAWN_PROXY'),
50 SET_TRANSFER_PROXY: Symbol('SET_TRANSFER_PROXY'),
51 CREATE_GALAXY: Symbol('CREATE_GALAXY'),
52 ISSUE_CHILD: Symbol('ISSUE_CHILD'),
53 SET_KEYS: Symbol('SET_KEYS'),
54 TRANSFER: Symbol('TRANSFER'),
55 SENT_TRANSACTION: Symbol('SENT_TRANSACTION'),
56 GEN_KEYFILE: Symbol('GEN_KEYFILE'),
57 DEFAULT: Symbol('DEFAULT')
60const createRoutes = () => {
61 const routes = {}
62 routes[ROUTE_NAMES.ACCEPT_TRANSFER] = AcceptTransfer
63 routes[ROUTE_NAMES.CANCEL_TRANSFER] = CancelTransfer
64 routes[ROUTE_NAMES.LANDING] = Landing
65 routes[ROUTE_NAMES.NETWORK] = Network
66 routes[ROUTE_NAMES.WALLET] = Wallet
67 routes[ROUTE_NAMES.VIEW_SHIP] = ViewPoint
68 routes[ROUTE_NAMES.MNEMONIC] = Mnemonic
69 routes[ROUTE_NAMES.TICKET] = Ticket
70 routes[ROUTE_NAMES.SHARDS] = Shards
71 routes[ROUTE_NAMES.LEDGER] = Ledger
72 routes[ROUTE_NAMES.TREZOR] = Trezor
73 routes[ROUTE_NAMES.PRIVATE_KEY] = PrivateKey
74 routes[ROUTE_NAMES.SHIPS] = Points
75 routes[ROUTE_NAMES.SHIP] = Point
76 routes[ROUTE_NAMES.SET_MANAGEMENT_PROXY] = SetManagementProxy
77 routes[ROUTE_NAMES.SET_SPAWN_PROXY] = SetSpawnProxy
78 routes[ROUTE_NAMES.SET_TRANSFER_PROXY] = SetTransferProxy
79 routes[ROUTE_NAMES.CREATE_GALAXY] = CreateGalaxy
80 routes[ROUTE_NAMES.ISSUE_CHILD] = IssueChild
81 routes[ROUTE_NAMES.SET_KEYS] = SetKeys
82 routes[ROUTE_NAMES.TRANSFER] = Transfer
83 routes[ROUTE_NAMES.SENT_TRANSACTION] = SentTransaction
84 routes[ROUTE_NAMES.DEFAULT] = Landing
85 routes[ROUTE_NAMES.GEN_KEYFILE] = GenKeyfile
86 return routes
89const ROUTES = createRoutes()
91const renderRoute = (props, route) => {
92 const { wallet, networkType, pointCursor } = props
93 return (
94 route === ROUTE_NAMES.LANDING
95 ? 'Bridge'
97 : route === ROUTE_NAMES.NETWORK
98 ? `${renderNetworkType(networkType)}`
100 : route === ROUTE_NAMES.WALLET
101 ? wallet.matchWith({
102 Nothing: () => 'Wallet',
103 Just: (wal) =>
104 wal.value instanceof EthereumWallet
105 ? wal.value.address
106 : addressFromSecp256k1Public(wal.value.publicKey)
107 })
109 : route === ROUTE_NAMES.MNEMONIC
110 ? 'Mnemonic'
112 : route === ROUTE_NAMES.TICKET
113 ? 'Urbit Ticket'
115 : route === ROUTE_NAMES.SHARDS
116 ? 'Urbit Ticket'
118 : route === ROUTE_NAMES.LEDGER
119 ? 'Ledger'
121 : route === ROUTE_NAMES.TREZOR
122 ? 'Trezor'
124 : route === ROUTE_NAMES.PRIVATE_KEY
125 ? 'Private Key'
127 : route === ROUTE_NAMES.SHIPS
128 ? 'Points'
130 : route === ROUTE_NAMES.VIEW_SHIP
131 ? 'View'
133 : route === ROUTE_NAMES.SHIP
134 ? pointCursor.matchWith({
135 Just: (cursor) => ob.patp(cursor.value),
136 Nothing: () => {
137 throw BRIDGE_ERROR.MISSING_POINT
138 }
139 })
141 : route === ROUTE_NAMES.SET_TRANSFER_PROXY
142 || route === ROUTE_NAMES.SET_MANAGEMENT_PROXY
143 || route === ROUTE_NAMES.SET_SPAWN_PROXY
144 ? 'Set Proxy'
146 : route === ROUTE_NAMES.CREATE_GALAXY
147 ? 'Create Galaxy'
149 : route === ROUTE_NAMES.ISSUE_CHILD
150 ? 'Issue Child'
152 : route === ROUTE_NAMES.TRANSFER
153 ? 'Transfer'
155 : route === ROUTE_NAMES.ACCEPT_TRANSFER
156 ? 'Accept Transfer'
158 : route === ROUTE_NAMES.CANCEL_TRANSFER
159 ? 'Cancel Transfer'
161 : route === ROUTE_NAMES.GEN_KEYFILE
162 ? 'Keyfile'
164 : route === ROUTE_NAMES.SET_KEYS
165 ? 'Configure Keys'
167 : route === ROUTE_NAMES.SENT_TRANSACTION
168 ? 'Txn'
170 : 'Bridge'
171 )
174const router = (route) =>
175 ROUTES[route]
177export {
178 ROUTE_NAMES,
179 router,
180 renderRoute