@shadow-corp/nearconnect 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/README.md +546 -0
  2. package/build/InjectedWallet.d.ts +22 -0
  3. package/build/InjectedWallet.js +58 -0
  4. package/build/InjectedWallet.js.map +1 -0
  5. package/build/NearConnector.d.ts +151 -0
  6. package/build/NearConnector.js +536 -0
  7. package/build/NearConnector.js.map +1 -0
  8. package/build/ParentFrameWallet.d.ts +22 -0
  9. package/build/ParentFrameWallet.js +66 -0
  10. package/build/ParentFrameWallet.js.map +1 -0
  11. package/build/SandboxedWallet/code.d.ts +7 -0
  12. package/build/SandboxedWallet/code.js +324 -0
  13. package/build/SandboxedWallet/code.js.map +1 -0
  14. package/build/SandboxedWallet/executor.d.ts +23 -0
  15. package/build/SandboxedWallet/executor.js +338 -0
  16. package/build/SandboxedWallet/executor.js.map +1 -0
  17. package/build/SandboxedWallet/iframe.d.ts +18 -0
  18. package/build/SandboxedWallet/iframe.js +78 -0
  19. package/build/SandboxedWallet/iframe.js.map +1 -0
  20. package/build/SandboxedWallet/index.d.ts +24 -0
  21. package/build/SandboxedWallet/index.js +54 -0
  22. package/build/SandboxedWallet/index.js.map +1 -0
  23. package/build/actions/index.d.ts +3 -0
  24. package/build/actions/index.js +105 -0
  25. package/build/actions/index.js.map +1 -0
  26. package/build/actions/types.d.ts +76 -0
  27. package/build/actions/types.js +3 -0
  28. package/build/actions/types.js.map +1 -0
  29. package/build/connection/health.d.ts +213 -0
  30. package/build/connection/health.js +391 -0
  31. package/build/connection/health.js.map +1 -0
  32. package/build/connection/index.d.ts +4 -0
  33. package/build/connection/index.js +48 -0
  34. package/build/connection/index.js.map +1 -0
  35. package/build/connection/reconnect.d.ts +261 -0
  36. package/build/connection/reconnect.js +454 -0
  37. package/build/connection/reconnect.js.map +1 -0
  38. package/build/connection/retry.d.ts +187 -0
  39. package/build/connection/retry.js +427 -0
  40. package/build/connection/retry.js.map +1 -0
  41. package/build/connection/state.d.ts +222 -0
  42. package/build/connection/state.js +431 -0
  43. package/build/connection/state.js.map +1 -0
  44. package/build/errors.d.ts +177 -0
  45. package/build/errors.js +546 -0
  46. package/build/errors.js.map +1 -0
  47. package/build/hardware/errors.d.ts +36 -0
  48. package/build/hardware/errors.js +127 -0
  49. package/build/hardware/errors.js.map +1 -0
  50. package/build/hardware/index.d.ts +7 -0
  51. package/build/hardware/index.js +39 -0
  52. package/build/hardware/index.js.map +1 -0
  53. package/build/hardware/near-app.d.ts +95 -0
  54. package/build/hardware/near-app.js +291 -0
  55. package/build/hardware/near-app.js.map +1 -0
  56. package/build/hardware/transport.d.ts +94 -0
  57. package/build/hardware/transport.js +267 -0
  58. package/build/hardware/transport.js.map +1 -0
  59. package/build/hardware/types.d.ts +98 -0
  60. package/build/hardware/types.js +72 -0
  61. package/build/hardware/types.js.map +1 -0
  62. package/build/helpers/analytics.d.ts +191 -0
  63. package/build/helpers/analytics.js +304 -0
  64. package/build/helpers/analytics.js.map +1 -0
  65. package/build/helpers/base58.d.ts +6 -0
  66. package/build/helpers/base58.js +47 -0
  67. package/build/helpers/base58.js.map +1 -0
  68. package/build/helpers/events.d.ts +42 -0
  69. package/build/helpers/events.js +68 -0
  70. package/build/helpers/events.js.map +1 -0
  71. package/build/helpers/html.d.ts +8 -0
  72. package/build/helpers/html.js +30 -0
  73. package/build/helpers/html.js.map +1 -0
  74. package/build/helpers/indexdb.d.ts +14 -0
  75. package/build/helpers/indexdb.js +166 -0
  76. package/build/helpers/indexdb.js.map +1 -0
  77. package/build/helpers/manifest.d.ts +147 -0
  78. package/build/helpers/manifest.js +329 -0
  79. package/build/helpers/manifest.js.map +1 -0
  80. package/build/helpers/queue.d.ts +11 -0
  81. package/build/helpers/queue.js +48 -0
  82. package/build/helpers/queue.js.map +1 -0
  83. package/build/helpers/session.d.ts +119 -0
  84. package/build/helpers/session.js +289 -0
  85. package/build/helpers/session.js.map +1 -0
  86. package/build/helpers/simulation.d.ts +128 -0
  87. package/build/helpers/simulation.js +441 -0
  88. package/build/helpers/simulation.js.map +1 -0
  89. package/build/helpers/storage.d.ts +58 -0
  90. package/build/helpers/storage.js +190 -0
  91. package/build/helpers/storage.js.map +1 -0
  92. package/build/helpers/trust.d.ts +157 -0
  93. package/build/helpers/trust.js +340 -0
  94. package/build/helpers/trust.js.map +1 -0
  95. package/build/helpers/url.d.ts +1 -0
  96. package/build/helpers/url.js +13 -0
  97. package/build/helpers/url.js.map +1 -0
  98. package/build/helpers/uuid.d.ts +1 -0
  99. package/build/helpers/uuid.js +14 -0
  100. package/build/helpers/uuid.js.map +1 -0
  101. package/build/index.d.ts +21 -0
  102. package/build/index.js +167 -0
  103. package/build/index.js.map +1 -0
  104. package/build/popups/IframeWalletPopup.d.ts +16 -0
  105. package/build/popups/IframeWalletPopup.js +38 -0
  106. package/build/popups/IframeWalletPopup.js.map +1 -0
  107. package/build/popups/NearWalletsPopup.d.ts +25 -0
  108. package/build/popups/NearWalletsPopup.js +153 -0
  109. package/build/popups/NearWalletsPopup.js.map +1 -0
  110. package/build/popups/Popup.d.ts +22 -0
  111. package/build/popups/Popup.js +94 -0
  112. package/build/popups/Popup.js.map +1 -0
  113. package/build/popups/styles.d.ts +1 -0
  114. package/build/popups/styles.js +257 -0
  115. package/build/popups/styles.js.map +1 -0
  116. package/build/security/audit-log.d.ts +123 -0
  117. package/build/security/audit-log.js +268 -0
  118. package/build/security/audit-log.js.map +1 -0
  119. package/build/security/csp.d.ts +68 -0
  120. package/build/security/csp.js +328 -0
  121. package/build/security/csp.js.map +1 -0
  122. package/build/security/index.d.ts +10 -0
  123. package/build/security/index.js +42 -0
  124. package/build/security/index.js.map +1 -0
  125. package/build/security/origin-guard.d.ts +90 -0
  126. package/build/security/origin-guard.js +244 -0
  127. package/build/security/origin-guard.js.map +1 -0
  128. package/build/security/rate-limiter.d.ts +84 -0
  129. package/build/security/rate-limiter.js +212 -0
  130. package/build/security/rate-limiter.js.map +1 -0
  131. package/build/security/secure-storage.d.ts +77 -0
  132. package/build/security/secure-storage.js +242 -0
  133. package/build/security/secure-storage.js.map +1 -0
  134. package/build/security/transaction-guard.d.ts +71 -0
  135. package/build/security/transaction-guard.js +239 -0
  136. package/build/security/transaction-guard.js.map +1 -0
  137. package/build/types.d.ts +508 -0
  138. package/build/types.js +3 -0
  139. package/build/types.js.map +1 -0
  140. package/build/ui/AccountSwitcherModal.d.ts +53 -0
  141. package/build/ui/AccountSwitcherModal.js +239 -0
  142. package/build/ui/AccountSwitcherModal.js.map +1 -0
  143. package/build/ui/Modal.d.ts +84 -0
  144. package/build/ui/Modal.js +278 -0
  145. package/build/ui/Modal.js.map +1 -0
  146. package/build/ui/TransactionModal.d.ts +84 -0
  147. package/build/ui/TransactionModal.js +406 -0
  148. package/build/ui/TransactionModal.js.map +1 -0
  149. package/build/ui/WalletSelectorModal.d.ts +97 -0
  150. package/build/ui/WalletSelectorModal.js +481 -0
  151. package/build/ui/WalletSelectorModal.js.map +1 -0
  152. package/build/ui/icons.d.ts +19 -0
  153. package/build/ui/icons.js +65 -0
  154. package/build/ui/icons.js.map +1 -0
  155. package/build/ui/index.d.ts +10 -0
  156. package/build/ui/index.js +31 -0
  157. package/build/ui/index.js.map +1 -0
  158. package/build/ui/styles.d.ts +5 -0
  159. package/build/ui/styles.js +973 -0
  160. package/build/ui/styles.js.map +1 -0
  161. package/build/ui/theme.d.ts +133 -0
  162. package/build/ui/theme.js +204 -0
  163. package/build/ui/theme.js.map +1 -0
  164. package/build/wallets/external/index.d.ts +4 -0
  165. package/build/wallets/external/index.js +9 -0
  166. package/build/wallets/external/index.js.map +1 -0
  167. package/build/wallets/external/manager.d.ts +152 -0
  168. package/build/wallets/external/manager.js +586 -0
  169. package/build/wallets/external/manager.js.map +1 -0
  170. package/build/wallets/privileged/index.d.ts +5 -0
  171. package/build/wallets/privileged/index.js +12 -0
  172. package/build/wallets/privileged/index.js.map +1 -0
  173. package/build/wallets/privileged/ledger.d.ts +132 -0
  174. package/build/wallets/privileged/ledger.js +563 -0
  175. package/build/wallets/privileged/ledger.js.map +1 -0
  176. package/build/wallets/privileged/manager.d.ts +54 -0
  177. package/build/wallets/privileged/manager.js +174 -0
  178. package/build/wallets/privileged/manager.js.map +1 -0
  179. package/package.json +33 -0
@@ -0,0 +1,338 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const url_1 = require("../helpers/url");
7
+ const uuid_1 = require("../helpers/uuid");
8
+ const iframe_1 = __importDefault(require("./iframe"));
9
+ const cacheId = (0, uuid_1.uuid4)();
10
+ class SandboxExecutor {
11
+ connector;
12
+ manifest;
13
+ activePanels = {};
14
+ storageSpace;
15
+ constructor(connector, manifest) {
16
+ this.connector = connector;
17
+ this.manifest = manifest;
18
+ this.storageSpace = manifest.id;
19
+ }
20
+ checkPermissions(action, params) {
21
+ if (action === "walletConnect") {
22
+ return !!this.manifest.permissions.walletConnect;
23
+ }
24
+ if (action === "external") {
25
+ const external = this.manifest.permissions.external;
26
+ if (!external || !params?.entity)
27
+ return false;
28
+ return external.includes(params.entity);
29
+ }
30
+ if (action === "allowsOpen") {
31
+ const openUrl = (0, url_1.parseUrl)(params?.url || "");
32
+ const allowsOpen = this.manifest.permissions.allowsOpen;
33
+ if (!openUrl || !allowsOpen || !Array.isArray(allowsOpen) || allowsOpen.length === 0)
34
+ return false;
35
+ const isAllowed = allowsOpen.some((path) => {
36
+ const url = (0, url_1.parseUrl)(path);
37
+ if (!url)
38
+ return false;
39
+ if (openUrl.protocol !== url.protocol)
40
+ return false;
41
+ if (!!url.hostname && openUrl.hostname !== url.hostname)
42
+ return false;
43
+ if (!!url.pathname && url.pathname !== "/" && openUrl.pathname !== url.pathname)
44
+ return false;
45
+ return true;
46
+ });
47
+ return isAllowed;
48
+ }
49
+ return this.manifest.permissions[action];
50
+ }
51
+ assertPermissions(iframe, action, event) {
52
+ if (!this.checkPermissions(action, event.data.params)) {
53
+ iframe.postMessage({ ...event.data, status: "failed", result: "Permission denied" });
54
+ throw new Error("Permission denied");
55
+ }
56
+ }
57
+ _onMessage = async (iframe, event) => {
58
+ const success = (result) => {
59
+ iframe.postMessage({ ...event.data, status: "success", result: result });
60
+ };
61
+ const failed = (error) => {
62
+ iframe.postMessage({ ...event.data, status: "failed", result: error });
63
+ };
64
+ if (event.data.method === "ui.showIframe") {
65
+ iframe.show();
66
+ success(null);
67
+ return;
68
+ }
69
+ if (event.data.method === "ui.hideIframe") {
70
+ iframe.hide();
71
+ success(null);
72
+ return;
73
+ }
74
+ if (event.data.method === "storage.set") {
75
+ this.assertPermissions(iframe, "storage", event);
76
+ localStorage.setItem(`${this.storageSpace}:${event.data.params.key}`, event.data.params.value);
77
+ success(null);
78
+ return;
79
+ }
80
+ if (event.data.method === "storage.get") {
81
+ this.assertPermissions(iframe, "storage", event);
82
+ const value = localStorage.getItem(`${this.storageSpace}:${event.data.params.key}`);
83
+ success(value);
84
+ return;
85
+ }
86
+ if (event.data.method === "storage.keys") {
87
+ this.assertPermissions(iframe, "storage", event);
88
+ const keys = Object.keys(localStorage).filter((key) => key.startsWith(`${this.storageSpace}:`));
89
+ success(keys);
90
+ return;
91
+ }
92
+ if (event.data.method === "storage.remove") {
93
+ this.assertPermissions(iframe, "storage", event);
94
+ localStorage.removeItem(`${this.storageSpace}:${event.data.params.key}`);
95
+ success(null);
96
+ return;
97
+ }
98
+ if (event.data.method === "panel.focus") {
99
+ const panel = this.activePanels[event.data.params.windowId];
100
+ if (panel)
101
+ panel.focus();
102
+ success(null);
103
+ return;
104
+ }
105
+ if (event.data.method === "panel.postMessage") {
106
+ const panel = this.activePanels[event.data.params.windowId];
107
+ if (panel)
108
+ panel.postMessage(event.data.params.data, "*");
109
+ success(null);
110
+ return;
111
+ }
112
+ if (event.data.method === "panel.close") {
113
+ const panel = this.activePanels[event.data.params.windowId];
114
+ if (panel)
115
+ panel.close();
116
+ delete this.activePanels[event.data.params.windowId];
117
+ success(null);
118
+ return;
119
+ }
120
+ if (event.data.method === "walletConnect.connect") {
121
+ this.assertPermissions(iframe, "walletConnect", event);
122
+ try {
123
+ if (!this.connector.walletConnect)
124
+ throw new Error("WalletConnect is not configured");
125
+ const client = await this.connector.walletConnect;
126
+ const result = await client.connect(event.data.params);
127
+ result.approval();
128
+ success({ uri: result.uri });
129
+ }
130
+ catch (e) {
131
+ failed(e);
132
+ }
133
+ return;
134
+ }
135
+ if (event.data.method === "walletConnect.getProjectId") {
136
+ if (!this.connector.walletConnect)
137
+ throw new Error("WalletConnect is not configured");
138
+ this.assertPermissions(iframe, "walletConnect", event);
139
+ const client = await this.connector.walletConnect;
140
+ success(client.core.projectId);
141
+ return;
142
+ }
143
+ if (event.data.method === "walletConnect.disconnect") {
144
+ this.assertPermissions(iframe, "walletConnect", event);
145
+ try {
146
+ if (!this.connector.walletConnect)
147
+ throw new Error("WalletConnect is not configured");
148
+ const client = await this.connector.walletConnect;
149
+ const result = await client.disconnect(event.data.params);
150
+ success(result);
151
+ }
152
+ catch (e) {
153
+ failed(e);
154
+ }
155
+ return;
156
+ }
157
+ if (event.data.method === "walletConnect.getSession") {
158
+ this.assertPermissions(iframe, "walletConnect", event);
159
+ try {
160
+ if (!this.connector.walletConnect)
161
+ throw new Error("WalletConnect is not configured");
162
+ const client = await this.connector.walletConnect;
163
+ const key = client.session.keys[client.session.keys.length - 1];
164
+ const session = key ? client.session.get(key) : null;
165
+ success(session ? { topic: session.topic, namespaces: session.namespaces } : null);
166
+ }
167
+ catch (e) {
168
+ failed(e);
169
+ }
170
+ return;
171
+ }
172
+ if (event.data.method === "walletConnect.request") {
173
+ this.assertPermissions(iframe, "walletConnect", event);
174
+ try {
175
+ if (!this.connector.walletConnect)
176
+ throw new Error("WalletConnect is not configured");
177
+ const client = await this.connector.walletConnect;
178
+ const result = await client.request(event.data.params);
179
+ success(result);
180
+ }
181
+ catch (e) {
182
+ failed(e);
183
+ }
184
+ return;
185
+ }
186
+ if (event.data.method === "external") {
187
+ this.assertPermissions(iframe, "external", event);
188
+ try {
189
+ const { entity, key, args } = event.data.params;
190
+ const obj = entity.split(".").reduce((acc, key) => acc[key], window);
191
+ // TODO: remove hack after Nightly fixes.
192
+ // Their method wait near.Transaction and call encode() to get bytes.
193
+ // External API should not require non-serializable data, this is unsafe from an isolation point of view.
194
+ if (entity === "nightly.near" && key === "signTransaction") {
195
+ args[0].encode = () => args[0];
196
+ }
197
+ const result = typeof obj[key] === "function" ? await obj[key](...(args || [])) : obj[key];
198
+ success(result);
199
+ }
200
+ catch (e) {
201
+ failed(e);
202
+ }
203
+ return;
204
+ }
205
+ if (event.data.method === "open") {
206
+ this.assertPermissions(iframe, "allowsOpen", event);
207
+ // Open in Telegram Mini App
208
+ const tgapp = typeof window !== "undefined" ? window?.Telegram?.WebApp : null;
209
+ if (tgapp && event.data.params.url.startsWith("https://t.me")) {
210
+ tgapp.openTelegramLink(event.data.params.url);
211
+ return;
212
+ }
213
+ const panel = window.open(event.data.params.url, "_blank", event.data.params.features);
214
+ const panelId = panel ? (0, uuid_1.uuid4)() : null;
215
+ const handler = (ev) => {
216
+ const url = (0, url_1.parseUrl)(event.data.params.url);
217
+ if (url && url.origin === ev.origin) {
218
+ iframe.postMessage(ev.data);
219
+ }
220
+ };
221
+ success(panelId);
222
+ window.addEventListener("message", handler);
223
+ if (panel && panelId) {
224
+ this.activePanels[panelId] = panel;
225
+ const interval = setInterval(() => {
226
+ if (!panel?.closed)
227
+ return;
228
+ window.removeEventListener("message", handler);
229
+ const args = { method: "proxy-window:closed", windowId: panelId };
230
+ delete this.activePanels[panelId];
231
+ clearInterval(interval);
232
+ try {
233
+ iframe.postMessage(args);
234
+ }
235
+ catch { }
236
+ }, 500);
237
+ }
238
+ return;
239
+ }
240
+ if (event.data.method === "open.nativeApp") {
241
+ this.assertPermissions(iframe, "allowsOpen", event);
242
+ const url = (0, url_1.parseUrl)(event.data.params.url);
243
+ const invalid = ["https", "http", "javascript:", "file:", "data:", "blob:", "about:"];
244
+ if (!url || invalid.includes(url.protocol)) {
245
+ failed("Invalid URL");
246
+ throw new Error("[open.nativeApp] Invalid URL");
247
+ }
248
+ const linkIframe = document.createElement("iframe");
249
+ linkIframe.src = event.data.params.url;
250
+ linkIframe.style.display = "none";
251
+ document.body.appendChild(linkIframe);
252
+ iframe.postMessage({ ...event.data, status: "success", result: null });
253
+ return;
254
+ }
255
+ };
256
+ actualCode = null;
257
+ async checkNewVersion(executor, currentVersion) {
258
+ if (this.actualCode) {
259
+ this.connector.logger?.log(`New version of code already checked`);
260
+ return this.actualCode;
261
+ }
262
+ let url = (0, url_1.parseUrl)(executor.manifest.executor);
263
+ if (!url)
264
+ url = (0, url_1.parseUrl)(location.origin + executor.manifest.executor); // relative url
265
+ if (!url)
266
+ throw new Error("Invalid executor URL");
267
+ url.searchParams.set("nonce", cacheId);
268
+ const newVersion = await fetch(url.toString()).then((res) => res.text());
269
+ this.connector.logger?.log(`New version of code fetched`);
270
+ this.actualCode = newVersion;
271
+ if (newVersion === currentVersion) {
272
+ this.connector.logger?.log(`New version of code is the same as the current version`);
273
+ return this.actualCode;
274
+ }
275
+ await this.connector.db.setItem(`${this.manifest.id}:${this.manifest.version}`, newVersion);
276
+ this.connector.logger?.log(`New version of code saved to cache`);
277
+ return newVersion;
278
+ }
279
+ async loadCode() {
280
+ const cachedCode = await this.connector.db.getItem(`${this.manifest.id}:${this.manifest.version}`).catch(() => null);
281
+ this.connector.logger?.log(`Code loaded from cache`, cachedCode !== null);
282
+ const task = this.checkNewVersion(this, cachedCode);
283
+ if (cachedCode)
284
+ return cachedCode;
285
+ return await task;
286
+ }
287
+ async call(method, params) {
288
+ this.connector.logger?.log(`Add to queue`, method, params);
289
+ // return this.queue.enqueue(async () => {
290
+ this.connector.logger?.log(`Calling method`, method, params);
291
+ const code = await this.loadCode();
292
+ this.connector.logger?.log(`Code loaded, preparing`);
293
+ const iframe = new iframe_1.default(this, code, this._onMessage);
294
+ this.connector.logger?.log(`Code loaded, iframe initialized`);
295
+ await iframe.readyPromise;
296
+ this.connector.logger?.log(`Iframe ready`);
297
+ const id = (0, uuid_1.uuid4)();
298
+ return new Promise((resolve, reject) => {
299
+ try {
300
+ const handler = (event) => {
301
+ if (event.data.id !== id || event.data.origin !== iframe.origin)
302
+ return;
303
+ iframe.dispose();
304
+ window.removeEventListener("message", handler);
305
+ this.connector.logger?.log("postMessage", { result: event.data, request: { method, params } });
306
+ if (event.data.status === "failed")
307
+ reject(event.data.result);
308
+ else
309
+ resolve(event.data.result);
310
+ };
311
+ window.addEventListener("message", handler);
312
+ iframe.postMessage({ method, params, id });
313
+ iframe.on("close", () => reject(new Error("Wallet closed")));
314
+ }
315
+ catch (e) {
316
+ this.connector.logger?.log(`Iframe error`, e);
317
+ reject(e);
318
+ }
319
+ });
320
+ // });
321
+ }
322
+ async getAllStorage() {
323
+ const keys = Object.keys(localStorage).filter((key) => key.startsWith(`${this.storageSpace}:`));
324
+ const storage = {};
325
+ for (const key of keys) {
326
+ storage[key.replace(`${this.storageSpace}:`, "")] = localStorage.getItem(key);
327
+ }
328
+ return storage;
329
+ }
330
+ async clearStorage() {
331
+ const keys = Object.keys(localStorage).filter((key) => key.startsWith(`${this.storageSpace}:`));
332
+ for (const key of keys) {
333
+ localStorage.removeItem(key);
334
+ }
335
+ }
336
+ }
337
+ exports.default = SandboxExecutor;
338
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/SandboxedWallet/executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import SandboxExecutor from "./executor";
2
+ declare class IframeExecutor {
3
+ readonly executor: SandboxExecutor;
4
+ readonly origin: string;
5
+ private iframe;
6
+ private events;
7
+ private popup;
8
+ private handler;
9
+ private readyPromiseResolve;
10
+ readonly readyPromise: Promise<void>;
11
+ constructor(executor: SandboxExecutor, code: string, onMessage: (iframe: IframeExecutor, event: MessageEvent) => void);
12
+ on(event: "close", callback: () => void): void;
13
+ show(): void;
14
+ hide(): void;
15
+ postMessage(data: any): void;
16
+ dispose(): void;
17
+ }
18
+ export default IframeExecutor;
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const events_1 = require("../helpers/events");
7
+ const uuid_1 = require("../helpers/uuid");
8
+ const IframeWalletPopup_1 = require("../popups/IframeWalletPopup");
9
+ const code_1 = __importDefault(require("./code"));
10
+ class IframeExecutor {
11
+ executor;
12
+ origin;
13
+ iframe = document.createElement("iframe");
14
+ events = new events_1.EventEmitter();
15
+ popup;
16
+ handler;
17
+ readyPromiseResolve;
18
+ readyPromise = new Promise((resolve) => {
19
+ this.readyPromiseResolve = resolve;
20
+ });
21
+ constructor(executor, code, onMessage) {
22
+ this.executor = executor;
23
+ this.origin = (0, uuid_1.uuid4)();
24
+ this.handler = (event) => {
25
+ if (event.data.origin !== this.origin)
26
+ return;
27
+ if (event.data.method === "wallet-ready")
28
+ this.readyPromiseResolve();
29
+ onMessage(this, event);
30
+ };
31
+ window.addEventListener("message", this.handler);
32
+ const iframeAllowedPersimissions = [];
33
+ if (this.executor.checkPermissions("usb"))
34
+ iframeAllowedPersimissions.push("usb *;");
35
+ if (this.executor.checkPermissions("hid"))
36
+ iframeAllowedPersimissions.push("hid *;");
37
+ if (this.executor.checkPermissions("clipboardRead"))
38
+ iframeAllowedPersimissions.push("clipboard-read;");
39
+ if (this.executor.checkPermissions("clipboardWrite"))
40
+ iframeAllowedPersimissions.push("clipboard-write;");
41
+ this.iframe.allow = iframeAllowedPersimissions.join(" ");
42
+ this.iframe.setAttribute("sandbox", "allow-scripts");
43
+ (0, code_1.default)({ id: this.origin, executor: this.executor, code }).then((code) => {
44
+ this.executor.connector.logger?.log(`Iframe code injected`);
45
+ this.iframe.srcdoc = code;
46
+ });
47
+ this.popup = new IframeWalletPopup_1.IframeWalletPopup({
48
+ iframe: this.iframe,
49
+ onApprove: () => { },
50
+ onReject: () => {
51
+ window.removeEventListener("message", this.handler);
52
+ this.events.emit("close", {});
53
+ this.popup.destroy();
54
+ },
55
+ });
56
+ this.popup.create();
57
+ }
58
+ on(event, callback) {
59
+ this.events.on(event, callback);
60
+ }
61
+ show() {
62
+ this.popup.show();
63
+ }
64
+ hide() {
65
+ this.popup.hide();
66
+ }
67
+ postMessage(data) {
68
+ if (!this.iframe.contentWindow)
69
+ throw new Error("Iframe not loaded");
70
+ this.iframe.contentWindow.postMessage({ ...data, origin: this.origin }, "*");
71
+ }
72
+ dispose() {
73
+ window.removeEventListener("message", this.handler);
74
+ this.popup.destroy();
75
+ }
76
+ }
77
+ exports.default = IframeExecutor;
78
+ //# sourceMappingURL=iframe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iframe.js","sourceRoot":"","sources":["../../src/SandboxedWallet/iframe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { Account, FinalExecutionOutcome, Network, SignAndSendTransactionParams, SignAndSendTransactionsParams, SignedMessage, SignMessageParams, WalletManifest } from "../types";
2
+ import { NearConnector } from "../NearConnector";
3
+ import SandboxExecutor from "./executor";
4
+ export declare class SandboxWallet {
5
+ readonly connector: NearConnector;
6
+ readonly manifest: WalletManifest;
7
+ executor: SandboxExecutor;
8
+ constructor(connector: NearConnector, manifest: WalletManifest);
9
+ signIn(data?: {
10
+ network?: Network;
11
+ contractId?: string;
12
+ methodNames?: Array<string>;
13
+ }): Promise<Array<Account>>;
14
+ signOut(data?: {
15
+ network?: Network;
16
+ }): Promise<void>;
17
+ getAccounts(data?: {
18
+ network?: Network;
19
+ }): Promise<Array<Account>>;
20
+ signAndSendTransaction(params: SignAndSendTransactionParams): Promise<FinalExecutionOutcome>;
21
+ signAndSendTransactions(params: SignAndSendTransactionsParams): Promise<Array<FinalExecutionOutcome>>;
22
+ signMessage(params: SignMessageParams): Promise<SignedMessage>;
23
+ }
24
+ export default SandboxWallet;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SandboxWallet = void 0;
7
+ const actions_1 = require("../actions");
8
+ const executor_1 = __importDefault(require("./executor"));
9
+ class SandboxWallet {
10
+ connector;
11
+ manifest;
12
+ executor;
13
+ constructor(connector, manifest) {
14
+ this.connector = connector;
15
+ this.manifest = manifest;
16
+ this.executor = new executor_1.default(connector, manifest);
17
+ }
18
+ async signIn(data) {
19
+ return this.executor.call("wallet:signIn", {
20
+ network: data?.network || this.connector.network,
21
+ contractId: data?.contractId,
22
+ methodNames: data?.methodNames,
23
+ });
24
+ }
25
+ async signOut(data) {
26
+ const args = { ...data, network: data?.network || this.connector.network };
27
+ await this.executor.call("wallet:signOut", args);
28
+ await this.executor.clearStorage();
29
+ }
30
+ async getAccounts(data) {
31
+ const args = { ...data, network: data?.network || this.connector.network };
32
+ return this.executor.call("wallet:getAccounts", args);
33
+ }
34
+ async signAndSendTransaction(params) {
35
+ const actions = (0, actions_1.nearActionsToConnectorActions)(params.actions);
36
+ const args = { ...params, actions, network: params.network || this.connector.network };
37
+ return this.executor.call("wallet:signAndSendTransaction", args);
38
+ }
39
+ async signAndSendTransactions(params) {
40
+ const transactions = params.transactions.map((transaction) => ({
41
+ actions: (0, actions_1.nearActionsToConnectorActions)(transaction.actions),
42
+ receiverId: transaction.receiverId,
43
+ }));
44
+ const args = { ...params, transactions, network: params.network || this.connector.network };
45
+ return this.executor.call("wallet:signAndSendTransactions", args);
46
+ }
47
+ async signMessage(params) {
48
+ const args = { ...params, network: params.network || this.connector.network };
49
+ return this.executor.call("wallet:signMessage", args);
50
+ }
51
+ }
52
+ exports.SandboxWallet = SandboxWallet;
53
+ exports.default = SandboxWallet;
54
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/SandboxedWallet/index.ts"],"names":[],"mappings":";;;;;;AAWA,wCAA2D;AAC3D,0DAAyC;AAEzC,MAAa,aAAa;IAGH;IAAmC;IAFxD,QAAQ,CAAkB;IAE1B,YAAqB,SAAwB,EAAW,QAAwB;QAA3D,cAAS,GAAT,SAAS,CAAe;QAAW,aAAQ,GAAR,QAAQ,CAAgB;QAC9E,IAAI,CAAC,QAAQ,GAAG,IAAI,kBAAe,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAA8E;QACzF,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE;YACzC,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO;YAChD,UAAU,EAAE,IAAI,EAAE,UAAU;YAC5B,WAAW,EAAE,IAAI,EAAE,WAAW;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAA4B;QACxC,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAC3E,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;QACjD,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAA4B;QAC5C,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAC3E,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,MAAoC;QAC/D,MAAM,OAAO,GAAG,IAAA,uCAA6B,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACvF,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,+BAA+B,EAAE,IAAI,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,MAAqC;QACjE,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YAC7D,OAAO,EAAE,IAAA,uCAA6B,EAAC,WAAW,CAAC,OAAO,CAAC;YAC3D,UAAU,EAAE,WAAW,CAAC,UAAU;SACnC,CAAC,CAAC,CAAC;QAEJ,MAAM,IAAI,GAAG,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAC5F,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gCAAgC,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAyB;QACzC,MAAM,IAAI,GAAG,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAC9E,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;CACF;AA9CD,sCA8CC;AAED,kBAAe,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Action } from "@near-js/transactions";
2
+ import { ConnectorAction } from "./types";
3
+ export declare const nearActionsToConnectorActions: (actions: (Action | ConnectorAction)[]) => ConnectorAction[];
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.nearActionsToConnectorActions = void 0;
4
+ const base58_1 = require("../helpers/base58");
5
+ const deserializeArgs = (args) => {
6
+ try {
7
+ return JSON.parse(new TextDecoder().decode(args));
8
+ }
9
+ catch {
10
+ return args;
11
+ }
12
+ };
13
+ const nearActionsToConnectorActions = (actions) => {
14
+ return actions.map((action) => {
15
+ if ("type" in action)
16
+ return action;
17
+ if (action.functionCall) {
18
+ return {
19
+ type: "FunctionCall",
20
+ params: {
21
+ methodName: action.functionCall.methodName,
22
+ args: deserializeArgs(action.functionCall.args),
23
+ gas: action.functionCall.gas.toString(),
24
+ deposit: action.functionCall.deposit.toString(),
25
+ },
26
+ };
27
+ }
28
+ if (action.deployGlobalContract) {
29
+ return {
30
+ type: "DeployGlobalContract",
31
+ params: {
32
+ code: action.deployGlobalContract.code,
33
+ deployMode: action.deployGlobalContract.deployMode.AccountId ? "AccountId" : "CodeHash",
34
+ },
35
+ };
36
+ }
37
+ if (action.createAccount) {
38
+ return { type: "CreateAccount" };
39
+ }
40
+ if (action.useGlobalContract) {
41
+ return {
42
+ type: "UseGlobalContract",
43
+ params: {
44
+ contractIdentifier: action.useGlobalContract.contractIdentifier.AccountId
45
+ ? { accountId: action.useGlobalContract.contractIdentifier.AccountId }
46
+ : { codeHash: (0, base58_1.encodeBase58)(action.useGlobalContract.contractIdentifier.CodeHash) },
47
+ },
48
+ };
49
+ }
50
+ if (action.deployContract) {
51
+ return {
52
+ type: "DeployContract",
53
+ params: { code: action.deployContract.code },
54
+ };
55
+ }
56
+ if (action.deleteAccount) {
57
+ return {
58
+ type: "DeleteAccount",
59
+ params: { beneficiaryId: action.deleteAccount.beneficiaryId },
60
+ };
61
+ }
62
+ if (action.deleteKey) {
63
+ return {
64
+ type: "DeleteKey",
65
+ params: { publicKey: action.deleteKey.publicKey.toString() },
66
+ };
67
+ }
68
+ if (action.transfer) {
69
+ return {
70
+ type: "Transfer",
71
+ params: { deposit: action.transfer.deposit.toString() },
72
+ };
73
+ }
74
+ if (action.stake) {
75
+ return {
76
+ type: "Stake",
77
+ params: {
78
+ stake: action.stake.stake.toString(),
79
+ publicKey: action.stake.publicKey.toString(),
80
+ },
81
+ };
82
+ }
83
+ if (action.addKey) {
84
+ return {
85
+ type: "AddKey",
86
+ params: {
87
+ publicKey: action.addKey.publicKey.toString(),
88
+ accessKey: {
89
+ nonce: Number(action.addKey.accessKey.nonce),
90
+ permission: action.addKey.accessKey.permission.functionCall
91
+ ? {
92
+ receiverId: action.addKey.accessKey.permission.functionCall.receiverId,
93
+ allowance: action.addKey.accessKey.permission.functionCall.allowance?.toString(),
94
+ methodNames: action.addKey.accessKey.permission.functionCall.methodNames,
95
+ }
96
+ : "FullAccess",
97
+ },
98
+ },
99
+ };
100
+ }
101
+ throw new Error("Unsupported action type");
102
+ });
103
+ };
104
+ exports.nearActionsToConnectorActions = nearActionsToConnectorActions;
105
+ //# sourceMappingURL=index.js.map