|
1 | | -import { v4 as uuid } from "uuid"; |
2 | | -import { |
3 | | - closeConfirmationWindow, |
4 | | - displayConfirmationWindow, |
5 | | -} from "./confirmationWindowApi"; |
6 | | -import { sign } from "jsonwebtoken"; |
| 1 | +import {v4 as uuid} from 'uuid'; |
| 2 | +import {closeConfirmationWindow, displayConfirmationWindow} from './confirmationWindowApi'; |
| 3 | +import {sign} from 'jsonwebtoken'; |
7 | 4 |
|
8 | | -const socket = new WebSocket("wss://point/ws"); |
| 5 | +const socket = new WebSocket('wss://point/ws'); |
9 | 6 |
|
10 | 7 | const responseHandlers: Record<string, (v: unknown) => void> = {}; |
11 | 8 |
|
12 | 9 | socket.onopen = () => { |
13 | | - console.log("WS Connection with point node established"); |
| 10 | + console.log('WS Connection with point node established'); |
14 | 11 | }; |
15 | 12 |
|
16 | | -socket.onmessage = (e) => { |
| 13 | +socket.onmessage = e => { |
17 | 14 | const payload = JSON.parse(e.data); |
18 | 15 |
|
19 | | - console.log("Message from node: ", payload); |
| 16 | + console.log('Message from node: ', payload); |
20 | 17 |
|
21 | 18 | if (!payload?.request?.__point_id) { |
22 | | - console.error( |
23 | | - "Unexpected message without __point_id from point node: ", |
24 | | - payload, |
25 | | - ); |
| 19 | + console.error('Unexpected message without __point_id from point node: ', payload); |
26 | 20 | return; |
27 | 21 | } |
28 | 22 | if (!responseHandlers[payload.request.__point_id]) { |
29 | | - console.error("No handler for message from point node: ", payload); |
| 23 | + console.error('No handler for message from point node: ', payload); |
30 | 24 | return; |
31 | 25 | } |
32 | 26 |
|
33 | 27 | if (payload.data) { |
34 | 28 | if (payload.data.reqId) { |
35 | 29 | const params = |
36 | | - payload.request.method === "solana_sendTransaction" && |
| 30 | + payload.request.method === 'solana_sendTransaction' && |
37 | 31 | Array.isArray(payload.request.params[0].instructions) |
38 | 32 | ? payload.request.params[0].instructions[0] |
39 | 33 | : payload.request.params[0]; |
40 | | - displayConfirmationWindow( |
| 34 | + void displayConfirmationWindow( |
41 | 35 | payload.data.reqId, |
42 | 36 | payload.request.__point_id, |
43 | 37 | payload.request.__hostname, |
44 | 38 | payload.data.network, |
45 | 39 | params, |
46 | | - payload.data.decodedTxData, |
| 40 | + payload.data.decodedTxData |
47 | 41 | ); |
48 | 42 | } else { |
49 | 43 | responseHandlers[payload.request.__point_id](payload.data); |
50 | 44 | delete responseHandlers[payload.request.__point_id]; |
51 | 45 | } |
52 | 46 | } else { |
53 | | - console.error( |
54 | | - "Unexpected message without data from point node: ", |
55 | | - payload, |
56 | | - ); |
| 47 | + console.error('Unexpected message without data from point node: ', payload); |
57 | 48 | } |
58 | 49 | }; |
59 | 50 |
|
60 | | -socket.onerror = (err) => { |
61 | | - console.error("WS error: ", err); |
| 51 | +socket.onerror = err => { |
| 52 | + console.error('WS error: ', err); |
62 | 53 | }; |
63 | 54 |
|
64 | 55 | export const rpcListener = async (message: any) => { |
65 | 56 | const messageId = uuid(); |
66 | 57 | let network; |
67 | 58 | switch (message.__provider) { |
68 | | - case "eth": |
69 | | - const globalChainId = ( |
70 | | - await browser.storage.local.get("chainIdGlobal") |
71 | | - ).chainIdGlobal as string; |
72 | | - const { host } = new URL(message.__hostname); |
73 | | - const hostChainId = ( |
74 | | - await browser.storage.local.get(`chainId_${host}`) |
75 | | - )[`chainId_${host}`] as string; |
| 59 | + case 'eth': |
| 60 | + const globalChainId = (await browser.storage.local.get('chainIdGlobal')) |
| 61 | + .chainIdGlobal as string; |
| 62 | + const {host} = new URL(message.__hostname); |
| 63 | + const hostChainId = (await browser.storage.local.get(`chainId_${host}`))[ |
| 64 | + `chainId_${host}` |
| 65 | + ] as string; |
76 | 66 | network = hostChainId ?? globalChainId; |
77 | 67 | break; |
78 | | - case "solana": |
79 | | - network = "solana_devnet"; // TODO |
| 68 | + case 'solana': |
| 69 | + network = 'solana_devnet'; // TODO |
80 | 70 | break; |
81 | 71 | default: |
82 | | - throw new Error( |
83 | | - `Unknown or missing provider type ${message.__provider}`, |
84 | | - ); |
| 72 | + throw new Error(`Unknown or missing provider type ${message.__provider}`); |
85 | 73 | } |
86 | 74 |
|
87 | 75 | const msg = { |
88 | 76 | ...message, |
89 | 77 | network, |
90 | | - type: "rpc", |
| 78 | + type: 'rpc', |
91 | 79 | __point_id: messageId, |
92 | | - __point_token: (await getAuthToken()).token, |
| 80 | + __point_token: (await getAuthToken()).token |
93 | 81 | }; |
94 | | - console.log("Sending msg to node: ", msg); |
| 82 | + console.log('Sending msg to node: ', msg); |
95 | 83 | socket.send(JSON.stringify(msg)); |
96 | 84 |
|
97 | | - return new Promise<unknown>((resolve) => { |
| 85 | + return new Promise<unknown>(resolve => { |
98 | 86 | responseHandlers[messageId] = resolve; |
99 | 87 | }); |
100 | 88 | }; |
101 | 89 |
|
102 | 90 | export const confirmationWindowListener = async (message: any) => { |
103 | 91 | if (message.confirm) { |
104 | 92 | const msg = { |
105 | | - method: "eth_confirmTransaction", |
106 | | - type: "rpc", |
| 93 | + method: 'eth_confirmTransaction', |
| 94 | + type: 'rpc', |
107 | 95 | __point_id: message.pointId, |
108 | 96 | __point_token: (await getAuthToken()).token, |
109 | | - params: [ |
110 | | - { |
111 | | - reqId: message.reqId, |
112 | | - }, |
113 | | - ], |
| 97 | + params: [{reqId: message.reqId}] |
114 | 98 | }; |
115 | | - console.log("Sending confirmation msg to node, ", msg); |
| 99 | + console.log('Sending confirmation msg to node, ', msg); |
116 | 100 | socket.send(JSON.stringify(msg)); |
117 | 101 | } else { |
118 | 102 | responseHandlers[message.pointId]({ |
119 | 103 | code: 4001, |
120 | | - message: "User rejected the request", |
| 104 | + message: 'User rejected the request' |
121 | 105 | }); |
122 | 106 | delete responseHandlers[message.pointId]; |
123 | 107 | } |
124 | 108 | await closeConfirmationWindow(); |
125 | 109 | }; |
126 | 110 |
|
127 | 111 | export const registerHandlerListener = async (message: any) => |
128 | | - new Promise<unknown>((resolve) => { |
| 112 | + new Promise<unknown>(resolve => { |
129 | 113 | responseHandlers[message.messageId] = resolve; |
130 | 114 | }); |
131 | 115 |
|
132 | 116 | export const setAuthTokenHandler = async (message: any) => { |
133 | | - const oldToken = await browser.storage.local.get("point_token"); |
| 117 | + const oldToken = await browser.storage.local.get('point_token'); |
134 | 118 | if (oldToken) { |
135 | 119 | // Checking if new token is correct, if we are replacing the token, |
136 | 120 | // otherwise just inject it |
137 | | - const jwt = sign({ payload: "point_token" }, message.token, { |
138 | | - expiresIn: "10s", |
139 | | - }); |
140 | | - const res = await fetch("https://point/v1/api/blockchain/networks", { |
141 | | - headers: { |
142 | | - "X-Point-Token": `Bearer ${jwt}`, |
143 | | - }, |
144 | | - }); |
| 121 | + const jwt = sign({payload: 'point_token'}, message.token, {expiresIn: '10s'}); |
| 122 | + const opts = {headers: {'X-Point-Token': `Bearer ${jwt}`}}; |
| 123 | + const res = await fetch('https://point/v1/api/blockchain/networks', opts); |
145 | 124 | if (res.status !== 200) { |
146 | 125 | // Not throwing error here, otherwise explorer will not redirect |
147 | 126 | // Just ignoring the token instead |
148 | | - return { ok: true }; |
| 127 | + return {ok: true}; |
149 | 128 | } |
150 | 129 | } |
151 | | - await browser.storage.local.set({ point_token: message.token }); |
152 | | - return { ok: true }; |
| 130 | + await browser.storage.local.set({point_token: message.token}); |
| 131 | + return {ok: true}; |
153 | 132 | }; |
154 | 133 |
|
155 | 134 | export const getAuthToken = async () => { |
156 | | - const { point_token } = await browser.storage.local.get("point_token"); |
| 135 | + const {point_token} = await browser.storage.local.get('point_token'); |
157 | 136 | if (!point_token) { |
158 | | - throw new Error("Point token not set"); |
| 137 | + throw new Error('Point token not set'); |
159 | 138 | } |
160 | | - const jwt = sign({ payload: "point_token" }, point_token, { |
161 | | - expiresIn: "10s", |
162 | | - }); |
163 | | - return { token: jwt }; |
| 139 | + const jwt = sign({payload: 'point_token'}, point_token, {expiresIn: '10s'}); |
| 140 | + return {token: jwt}; |
164 | 141 | }; |
0 commit comments