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