on 23dbfee help sign in
bridge/src/lib/router.js
189 lines 5.4 kB history raw
1import * as ob from 'urbit-ob'
3import React from 'react';
5import AcceptTransfer from '../views/AcceptTransfer'
6import CancelTransfer from '../views/CancelTransfer'
7import CreateGalaxy from '../views/CreateGalaxy'
8import GenKeyfile from '../views/GenKeyfile'
9import IssueChild from '../views/IssueChild'
10import Landing from '../views/Landing'
11import Network from '../views/Network'
12import Mnemonic from '../views/Mnemonic'
13import Ledger from '../views/Ledger'
14import Trezor from '../views/Trezor'
15import PrivateKey from '../views/PrivateKey'
16import Keystore from '../views/Keystore'
17import ViewPoint from '../views/ViewPoint'
18import SentTransaction from '../views/SentTransaction'
19import SetKeys from '../views/SetKeys'
20import {
21 SetManagementProxy,
22 SetSpawnProxy,
23 SetTransferProxy
24 } from '../views/SetProxy'
25import Point from '../views/Point'
26import Points from '../views/Points'
27import Shards from '../views/Shards'
28import Ticket from '../views/Ticket'
29import Transfer from '../views/Transfer'
30import Wallet from '../views/Wallet'
32import { addressFromSecp256k1Public, EthereumWallet } from './wallet'
33import { renderNetworkType } from './network'
34import { BRIDGE_ERROR } from './error'
36const ROUTE_NAMES = {
37 ACCEPT_TRANSFER: Symbol('ACCEPT_TRANSFER'),
38 CANCEL_TRANSFER: Symbol('CANCEL_TRANSFER'),
39 LANDING: Symbol('LANDING'),
40 NETWORK: Symbol('NETWORK'),
41 WALLET: Symbol('WALLET'),
42 MNEMONIC: Symbol('MNEMONIC'),
43 TICKET: Symbol('TICKET'),
44 SHARDS: Symbol('SHARDS'),
45 LEDGER: Symbol('LEDGER'),
46 TREZOR: Symbol('TREZOR'),
47 PRIVATE_KEY: Symbol('PRIVATE_KEY'),
48 KEYSTORE: Symbol('KEYSTORE'),
49 VIEW_SHIP: Symbol('VIEW_SHIP'),
50 SHIPS: Symbol('SHIPS'),
51 SHIP: Symbol('SHIP'),
52 SET_MANAGEMENT_PROXY: Symbol('SET_MANAGEMENT_PROXY'),
53 SET_SPAWN_PROXY: Symbol('SET_SPAWN_PROXY'),
54 SET_TRANSFER_PROXY: Symbol('SET_TRANSFER_PROXY'),
55 CREATE_GALAXY: Symbol('CREATE_GALAXY'),
56 ISSUE_CHILD: Symbol('ISSUE_CHILD'),
57 SET_KEYS: Symbol('SET_KEYS'),
58 TRANSFER: Symbol('TRANSFER'),
59 SENT_TRANSACTION: Symbol('SENT_TRANSACTION'),
60 GEN_KEYFILE: Symbol('GEN_KEYFILE'),
61 DEFAULT: Symbol('DEFAULT')
64const createRoutes = () => {
65 const routes = {}
66 routes[ROUTE_NAMES.ACCEPT_TRANSFER] = AcceptTransfer
67 routes[ROUTE_NAMES.CANCEL_TRANSFER] = CancelTransfer
68 routes[ROUTE_NAMES.LANDING] = Landing
69 routes[ROUTE_NAMES.NETWORK] = Network
70 routes[ROUTE_NAMES.WALLET] = Wallet
71 routes[ROUTE_NAMES.VIEW_SHIP] = ViewPoint
72 routes[ROUTE_NAMES.MNEMONIC] = Mnemonic
73 routes[ROUTE_NAMES.TICKET] = Ticket
74 routes[ROUTE_NAMES.SHARDS] = Shards
75 routes[ROUTE_NAMES.LEDGER] = Ledger
76 routes[ROUTE_NAMES.TREZOR] = Trezor
77 routes[ROUTE_NAMES.PRIVATE_KEY] = PrivateKey
78 routes[ROUTE_NAMES.KEYSTORE] = Keystore
79 routes[ROUTE_NAMES.SHIPS] = Points
80 routes[ROUTE_NAMES.SHIP] = Point
81 routes[ROUTE_NAMES.SET_MANAGEMENT_PROXY] = SetManagementProxy
82 routes[ROUTE_NAMES.SET_SPAWN_PROXY] = SetSpawnProxy
83 routes[ROUTE_NAMES.SET_TRANSFER_PROXY] = SetTransferProxy
84 routes[ROUTE_NAMES.CREATE_GALAXY] = CreateGalaxy
85 routes[ROUTE_NAMES.ISSUE_CHILD] = IssueChild
86 routes[ROUTE_NAMES.SET_KEYS] = SetKeys
87 routes[ROUTE_NAMES.TRANSFER] = Transfer
88 routes[ROUTE_NAMES.SENT_TRANSACTION] = SentTransaction
89 routes[ROUTE_NAMES.DEFAULT] = Landing
90 routes[ROUTE_NAMES.GEN_KEYFILE] = GenKeyfile
91 return routes
94const ROUTES = createRoutes()
96const renderRoute = (props, route) => {
97 const { wallet, networkType, pointCursor } = props
98 return (
99 route === ROUTE_NAMES.LANDING
100 ? 'Bridge'
102 : route === ROUTE_NAMES.NETWORK
103 ? `${renderNetworkType(networkType)}`
105 : route === ROUTE_NAMES.WALLET
106 ? wallet.matchWith({
107 Nothing: () => 'Wallet',
108 Just: (wal) =>
109 wal.value instanceof EthereumWallet
110 ? (<span className="text-mono">{wal.value.address}</span>)
111 : (<span className="text-mono">{addressFromSecp256k1Public(wal.value.publicKey)}</span>)
112 })
114 : route === ROUTE_NAMES.MNEMONIC
115 ? 'Mnemonic'
117 : route === ROUTE_NAMES.TICKET
118 ? 'Urbit Ticket'
120 : route === ROUTE_NAMES.SHARDS
121 ? 'Urbit Ticket'
123 : route === ROUTE_NAMES.LEDGER
124 ? 'Ledger'
126 : route === ROUTE_NAMES.TREZOR
127 ? 'Trezor'
129 : route === ROUTE_NAMES.PRIVATE_KEY
130 ? 'Private Key'
132 : route === ROUTE_NAMES.KEYSTORE
133 ? 'Keystore File'
135 : route === ROUTE_NAMES.SHIPS
136 ? 'Points'
138 : route === ROUTE_NAMES.VIEW_SHIP
139 ? 'View'
141 : route === ROUTE_NAMES.SHIP
142 ? pointCursor.matchWith({
143 Just: (cursor) => ob.patp(cursor.value),
144 Nothing: () => {
145 throw BRIDGE_ERROR.MISSING_POINT
146 }
147 })
149 : route === ROUTE_NAMES.SET_TRANSFER_PROXY
150 || route === ROUTE_NAMES.SET_MANAGEMENT_PROXY
151 || route === ROUTE_NAMES.SET_SPAWN_PROXY
152 ? 'Set Proxy'
154 : route === ROUTE_NAMES.CREATE_GALAXY
155 ? 'Create Galaxy'
157 : route === ROUTE_NAMES.ISSUE_CHILD
158 ? 'Issue Child'
160 : route === ROUTE_NAMES.TRANSFER
161 ? 'Transfer'
163 : route === ROUTE_NAMES.ACCEPT_TRANSFER
164 ? 'Accept Transfer'
166 : route === ROUTE_NAMES.CANCEL_TRANSFER
167 ? 'Cancel Transfer'
169 : route === ROUTE_NAMES.GEN_KEYFILE
170 ? 'Keyfile'
172 : route === ROUTE_NAMES.SET_KEYS
173 ? 'Configure Keys'
175 : route === ROUTE_NAMES.SENT_TRANSACTION
176 ? 'Txn'
178 : 'Bridge'
179 )
182const router = (route) =>
183 ROUTES[route]
185export {
186 ROUTE_NAMES,
187 router,
188 renderRoute