@meshconnect/web-link-sdk 2.1.0-rc.2 → 2.1.0-rc.4

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 (51) hide show
  1. package/Link.d.ts +2 -0
  2. package/Link.js +420 -0
  3. package/cjs/Link.js +424 -0
  4. package/cjs/index.js +21 -0
  5. package/cjs/utils/event-types.js +31 -0
  6. package/cjs/utils/popup.js +39 -0
  7. package/cjs/utils/sdk-specs.js +8 -0
  8. package/cjs/utils/style.js +18 -0
  9. package/cjs/utils/types.js +2 -0
  10. package/cjs/utils/version.js +4 -0
  11. package/cjs/utils/wagmiCoreConnectorsUtils.js +425 -0
  12. package/cjs/utils/wallet-browser-event-types.js +17 -0
  13. package/index.d.ts +3 -0
  14. package/index.js +3 -0
  15. package/package.json +11 -22
  16. package/utils/event-types.d.ts +152 -0
  17. package/utils/event-types.js +27 -0
  18. package/utils/popup.d.ts +3 -0
  19. package/utils/popup.js +34 -0
  20. package/utils/sdk-specs.d.ts +4 -0
  21. package/utils/sdk-specs.js +5 -0
  22. package/utils/style.d.ts +3 -0
  23. package/utils/style.js +13 -0
  24. package/utils/types.d.ts +134 -0
  25. package/utils/types.js +1 -0
  26. package/utils/version.d.ts +1 -0
  27. package/utils/version.js +1 -0
  28. package/utils/wagmiCoreConnectorsUtils.d.ts +11 -0
  29. package/utils/wagmiCoreConnectorsUtils.js +414 -0
  30. package/utils/wallet-browser-event-types.d.ts +59 -0
  31. package/utils/wallet-browser-event-types.js +13 -0
  32. package/jest.setup.ts +0 -4
  33. package/src/Link.test.ts +0 -395
  34. package/src/Link.ts +0 -350
  35. package/src/index.ts +0 -3
  36. package/src/utils/__snapshots__/popup.test.ts.snap +0 -90
  37. package/src/utils/event-types.test.ts +0 -24
  38. package/src/utils/event-types.ts +0 -226
  39. package/src/utils/popup.test.ts +0 -50
  40. package/src/utils/popup.ts +0 -132
  41. package/src/utils/sdk-specs.test.ts +0 -17
  42. package/src/utils/sdk-specs.ts +0 -6
  43. package/src/utils/style.test.ts +0 -33
  44. package/src/utils/style.ts +0 -15
  45. package/src/utils/types.ts +0 -156
  46. package/src/utils/version.ts +0 -1
  47. package/src/utils/wagmiCoreConnectorsUtils.ts +0 -332
  48. package/src/utils/wallet-browser-event-types.ts +0 -102
  49. package/tools/copy.js +0 -25
  50. package/tools/update-version.js +0 -10
  51. package/tsconfig.json +0 -14
package/Link.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ import { LinkOptions, Link } from './utils/types';
2
+ export declare const createLink: (options: LinkOptions) => Link;
package/Link.js ADDED
@@ -0,0 +1,420 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ import { addPopup, iframeId, removePopup } from './utils/popup';
49
+ import { isLinkEventTypeKey } from './utils/event-types';
50
+ import { isWalletBrowserEventTypeKey } from './utils/wallet-browser-event-types';
51
+ import { sdkSpecs } from './utils/sdk-specs';
52
+ import { connectToSpecificWallet, sendTransactionFromSDK, switchChainFromSDK, getWagmiCoreInjectedData, sendNonNativeTransactionFromSDK, disconnectAllAccounts } from './utils/wagmiCoreConnectorsUtils';
53
+ var currentOptions;
54
+ var possibleOrigins = new Set([
55
+ 'https://web.meshconnect.com',
56
+ 'https://web.getfront.com'
57
+ ]);
58
+ var iframeElement = function () {
59
+ return document.getElementById(iframeId);
60
+ };
61
+ function sendMessageToIframe(message) {
62
+ possibleOrigins.forEach(function (origin) {
63
+ var _a;
64
+ try {
65
+ (_a = iframeElement().contentWindow) === null || _a === void 0 ? void 0 : _a.postMessage(message, origin);
66
+ }
67
+ catch (e) {
68
+ console.error('Mesh SDK: Failed to deliver message to the iframe');
69
+ console.error(e);
70
+ }
71
+ });
72
+ }
73
+ function handleLinkEvent(event) {
74
+ return __awaiter(this, void 0, void 0, function () {
75
+ var _a, payload, payload, payload, payload, w, h, left, top_1, injectedConnectors;
76
+ var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
77
+ return __generator(this, function (_o) {
78
+ switch (_o.label) {
79
+ case 0:
80
+ _a = event.data.type;
81
+ switch (_a) {
82
+ case 'brokerageAccountAccessToken': return [3 /*break*/, 1];
83
+ case 'delayedAuthentication': return [3 /*break*/, 2];
84
+ case 'transferFinished': return [3 /*break*/, 3];
85
+ case 'close': return [3 /*break*/, 4];
86
+ case 'done': return [3 /*break*/, 4];
87
+ case 'oauthLinkOpen': return [3 /*break*/, 5];
88
+ case 'loaded': return [3 /*break*/, 6];
89
+ }
90
+ return [3 /*break*/, 8];
91
+ case 1:
92
+ {
93
+ payload = {
94
+ accessToken: event.data.payload
95
+ };
96
+ (_b = currentOptions === null || currentOptions === void 0 ? void 0 : currentOptions.onEvent) === null || _b === void 0 ? void 0 : _b.call(currentOptions, {
97
+ type: 'integrationConnected',
98
+ payload: payload
99
+ });
100
+ (_c = currentOptions === null || currentOptions === void 0 ? void 0 : currentOptions.onIntegrationConnected) === null || _c === void 0 ? void 0 : _c.call(currentOptions, payload);
101
+ return [3 /*break*/, 9];
102
+ }
103
+ _o.label = 2;
104
+ case 2:
105
+ {
106
+ payload = {
107
+ delayedAuth: event.data.payload
108
+ };
109
+ (_d = currentOptions === null || currentOptions === void 0 ? void 0 : currentOptions.onEvent) === null || _d === void 0 ? void 0 : _d.call(currentOptions, {
110
+ type: 'integrationConnected',
111
+ payload: payload
112
+ });
113
+ (_e = currentOptions === null || currentOptions === void 0 ? void 0 : currentOptions.onIntegrationConnected) === null || _e === void 0 ? void 0 : _e.call(currentOptions, payload);
114
+ return [3 /*break*/, 9];
115
+ }
116
+ _o.label = 3;
117
+ case 3:
118
+ {
119
+ payload = event.data.payload;
120
+ (_f = currentOptions === null || currentOptions === void 0 ? void 0 : currentOptions.onEvent) === null || _f === void 0 ? void 0 : _f.call(currentOptions, {
121
+ type: 'transferCompleted',
122
+ payload: payload
123
+ });
124
+ (_g = currentOptions === null || currentOptions === void 0 ? void 0 : currentOptions.onTransferFinished) === null || _g === void 0 ? void 0 : _g.call(currentOptions, payload);
125
+ return [3 /*break*/, 9];
126
+ }
127
+ _o.label = 4;
128
+ case 4:
129
+ {
130
+ payload = (_h = event.data) === null || _h === void 0 ? void 0 : _h.payload;
131
+ (_j = currentOptions === null || currentOptions === void 0 ? void 0 : currentOptions.onExit) === null || _j === void 0 ? void 0 : _j.call(currentOptions, payload === null || payload === void 0 ? void 0 : payload.errorMessage, payload);
132
+ removePopup();
133
+ return [3 /*break*/, 9];
134
+ }
135
+ _o.label = 5;
136
+ case 5:
137
+ {
138
+ if (event.data.link) {
139
+ w = 700;
140
+ h = 800;
141
+ left = screen.width / 2 - w / 2;
142
+ top_1 = screen.height / 2 - h / 2;
143
+ (_k = window
144
+ .open(event.data.link, '_blank', "popup,noopener,noreferrer,resizable,scrollbars,width=".concat(w, ",height=").concat(h, ",top=").concat(top_1, ",left=").concat(left))) === null || _k === void 0 ? void 0 : _k.focus();
145
+ }
146
+ return [3 /*break*/, 9];
147
+ }
148
+ _o.label = 6;
149
+ case 6:
150
+ sendMessageToIframe({
151
+ type: 'meshSDKSpecs',
152
+ payload: __assign({}, sdkSpecs)
153
+ });
154
+ if (currentOptions === null || currentOptions === void 0 ? void 0 : currentOptions.accessTokens) {
155
+ sendMessageToIframe({
156
+ type: 'frontAccessTokens',
157
+ payload: currentOptions.accessTokens
158
+ });
159
+ }
160
+ if (currentOptions === null || currentOptions === void 0 ? void 0 : currentOptions.transferDestinationTokens) {
161
+ sendMessageToIframe({
162
+ type: 'frontTransferDestinationTokens',
163
+ payload: currentOptions.transferDestinationTokens
164
+ });
165
+ }
166
+ return [4 /*yield*/, getWagmiCoreInjectedData()];
167
+ case 7:
168
+ injectedConnectors = _o.sent();
169
+ if (injectedConnectors) {
170
+ sendMessageToIframe({
171
+ type: 'SDKinjectedWagmiConnectorsData',
172
+ payload: injectedConnectors
173
+ });
174
+ }
175
+ (_l = currentOptions === null || currentOptions === void 0 ? void 0 : currentOptions.onEvent) === null || _l === void 0 ? void 0 : _l.call(currentOptions, { type: 'pageLoaded' });
176
+ return [3 /*break*/, 9];
177
+ case 8:
178
+ {
179
+ if (isLinkEventTypeKey(event.data.type)) {
180
+ (_m = currentOptions === null || currentOptions === void 0 ? void 0 : currentOptions.onEvent) === null || _m === void 0 ? void 0 : _m.call(currentOptions, event.data);
181
+ }
182
+ return [3 /*break*/, 9];
183
+ }
184
+ _o.label = 9;
185
+ case 9: return [2 /*return*/];
186
+ }
187
+ });
188
+ });
189
+ }
190
+ function handleWalletBrowserEvent(event) {
191
+ return __awaiter(this, void 0, void 0, function () {
192
+ var _a, payload, result, error_1, payload, result, error_2, payload, result, error_3, payload, result, error_4, payload, result, error_5, payload, result, error_6;
193
+ return __generator(this, function (_b) {
194
+ switch (_b.label) {
195
+ case 0:
196
+ _a = event.data.type;
197
+ switch (_a) {
198
+ case 'walletBrowserInjectedWalletSelected': return [3 /*break*/, 1];
199
+ case 'walletBrowserChainSwitchRequest': return [3 /*break*/, 6];
200
+ case 'walletBrowserNativeTransferRequest': return [3 /*break*/, 11];
201
+ case 'walletBrowserNonNativeTransferRequest': return [3 /*break*/, 16];
202
+ case 'walletBrowserNativeSmartDeposit': return [3 /*break*/, 21];
203
+ case 'walletBrowserNonNativeSmartDeposit': return [3 /*break*/, 26];
204
+ case 'walletBrowserDisconnect': return [3 /*break*/, 31];
205
+ }
206
+ return [3 /*break*/, 32];
207
+ case 1:
208
+ payload = event.data.payload;
209
+ _b.label = 2;
210
+ case 2:
211
+ _b.trys.push([2, 4, , 5]);
212
+ return [4 /*yield*/, connectToSpecificWallet(payload.integrationName)];
213
+ case 3:
214
+ result = _b.sent();
215
+ if (result instanceof Error) {
216
+ throw result;
217
+ }
218
+ sendMessageToIframe({
219
+ type: 'SDKinjectedConnectionCompleted',
220
+ payload: {
221
+ accounts: result.accounts,
222
+ chainId: result.chainId,
223
+ signedTxHash: result.txSigned
224
+ }
225
+ });
226
+ return [3 /*break*/, 5];
227
+ case 4:
228
+ error_1 = _b.sent();
229
+ handleErrorAndSendMessage(error_1, 'SDKinjectedConnectionCompleted');
230
+ return [3 /*break*/, 5];
231
+ case 5: return [3 /*break*/, 32];
232
+ case 6:
233
+ payload = event.data.payload;
234
+ _b.label = 7;
235
+ case 7:
236
+ _b.trys.push([7, 9, , 10]);
237
+ return [4 /*yield*/, switchChainFromSDK(payload.chainId)];
238
+ case 8:
239
+ result = _b.sent();
240
+ if (result instanceof Error) {
241
+ throw result;
242
+ }
243
+ sendMessageToIframe({
244
+ type: 'SDKswitchChainCompleted',
245
+ payload: result
246
+ });
247
+ return [3 /*break*/, 10];
248
+ case 9:
249
+ error_2 = _b.sent();
250
+ handleErrorAndSendMessage(error_2, 'SDKswitchChainCompleted');
251
+ return [3 /*break*/, 10];
252
+ case 10: return [3 /*break*/, 32];
253
+ case 11:
254
+ payload = event.data.payload;
255
+ _b.label = 12;
256
+ case 12:
257
+ _b.trys.push([12, 14, , 15]);
258
+ return [4 /*yield*/, sendTransactionFromSDK(payload.toAddress, payload.amount, payload.decimalPlaces, payload.chainId, payload.account)];
259
+ case 13:
260
+ result = _b.sent();
261
+ if (result instanceof Error) {
262
+ throw result;
263
+ }
264
+ sendMessageToIframe({
265
+ type: 'SDKnativeTransferCompleted',
266
+ payload: result
267
+ });
268
+ return [3 /*break*/, 15];
269
+ case 14:
270
+ error_3 = _b.sent();
271
+ handleErrorAndSendMessage(error_3, 'SDKnativeTransferCompleted');
272
+ return [3 /*break*/, 15];
273
+ case 15: return [3 /*break*/, 32];
274
+ case 16:
275
+ payload = event.data.payload;
276
+ _b.label = 17;
277
+ case 17:
278
+ _b.trys.push([17, 19, , 20]);
279
+ return [4 /*yield*/, sendNonNativeTransactionFromSDK(payload.address, JSON.parse(payload.abi), payload.functionName, payload.args)];
280
+ case 18:
281
+ result = _b.sent();
282
+ if (result instanceof Error) {
283
+ throw result;
284
+ }
285
+ sendMessageToIframe({
286
+ type: 'SDKnonNativeTransferCompleted',
287
+ payload: result
288
+ });
289
+ return [3 /*break*/, 20];
290
+ case 19:
291
+ error_4 = _b.sent();
292
+ handleErrorAndSendMessage(error_4, 'SDKnonNativeTransferCompleted');
293
+ return [3 /*break*/, 20];
294
+ case 20: return [3 /*break*/, 32];
295
+ case 21:
296
+ payload = event.data.payload;
297
+ _b.label = 22;
298
+ case 22:
299
+ _b.trys.push([22, 24, , 25]);
300
+ return [4 /*yield*/, sendNonNativeTransactionFromSDK(payload.address, JSON.parse(payload.abi), payload.functionName, payload.args, payload.value)];
301
+ case 23:
302
+ result = _b.sent();
303
+ if (result instanceof Error) {
304
+ throw result;
305
+ }
306
+ sendMessageToIframe({
307
+ type: 'SDKnativeSmartDepositCompleted',
308
+ payload: {
309
+ txHash: result
310
+ }
311
+ });
312
+ return [3 /*break*/, 25];
313
+ case 24:
314
+ error_5 = _b.sent();
315
+ handleErrorAndSendMessage(error_5, 'SDKnativeSmartDepositCompleted');
316
+ return [3 /*break*/, 25];
317
+ case 25: return [3 /*break*/, 32];
318
+ case 26:
319
+ payload = event.data.payload;
320
+ _b.label = 27;
321
+ case 27:
322
+ _b.trys.push([27, 29, , 30]);
323
+ return [4 /*yield*/, sendNonNativeTransactionFromSDK(payload.address, JSON.parse(payload.abi), payload.functionName, payload.args)];
324
+ case 28:
325
+ result = _b.sent();
326
+ if (result) {
327
+ sendMessageToIframe({
328
+ type: 'SDKnonNativeSmartDepositCompleted',
329
+ payload: {
330
+ txHash: result
331
+ }
332
+ });
333
+ }
334
+ else {
335
+ throw new Error('Transfer failed');
336
+ }
337
+ return [3 /*break*/, 30];
338
+ case 29:
339
+ error_6 = _b.sent();
340
+ handleErrorAndSendMessage(error_6, 'SDKnonNativeSmartDepositCompleted');
341
+ return [3 /*break*/, 30];
342
+ case 30: return [3 /*break*/, 32];
343
+ case 31:
344
+ {
345
+ disconnectAllAccounts();
346
+ sendMessageToIframe({
347
+ type: 'SDKdisconnectSuccess'
348
+ });
349
+ return [3 /*break*/, 32];
350
+ }
351
+ _b.label = 32;
352
+ case 32: return [2 /*return*/];
353
+ }
354
+ });
355
+ });
356
+ }
357
+ function eventsListener(event) {
358
+ return __awaiter(this, void 0, void 0, function () {
359
+ return __generator(this, function (_a) {
360
+ switch (_a.label) {
361
+ case 0:
362
+ if (!isWalletBrowserEventTypeKey(event.data.type)) return [3 /*break*/, 2];
363
+ return [4 /*yield*/, handleWalletBrowserEvent(event)];
364
+ case 1:
365
+ _a.sent();
366
+ return [3 /*break*/, 4];
367
+ case 2: return [4 /*yield*/, handleLinkEvent(event)];
368
+ case 3:
369
+ _a.sent();
370
+ _a.label = 4;
371
+ case 4: return [2 /*return*/];
372
+ }
373
+ });
374
+ });
375
+ }
376
+ function handleErrorAndSendMessage(error, messageType) {
377
+ var errorMessage = 'An unexpected error occurred';
378
+ if (error instanceof Error) {
379
+ errorMessage = error.message;
380
+ }
381
+ sendMessageToIframe({
382
+ type: messageType,
383
+ payload: {
384
+ error: errorMessage
385
+ }
386
+ });
387
+ }
388
+ export var createLink = function (options) {
389
+ var openLink = function (linkToken) { return __awaiter(void 0, void 0, void 0, function () {
390
+ var linkUrl, iframeUrlObject;
391
+ var _a;
392
+ return __generator(this, function (_b) {
393
+ if (!linkToken) {
394
+ (_a = options === null || options === void 0 ? void 0 : options.onExit) === null || _a === void 0 ? void 0 : _a.call(options, 'Invalid link token!');
395
+ return [2 /*return*/];
396
+ }
397
+ currentOptions = options;
398
+ linkUrl = window.atob(linkToken);
399
+ iframeUrlObject = new URL(linkUrl);
400
+ if (iframeUrlObject.origin) {
401
+ possibleOrigins.add(iframeUrlObject.origin);
402
+ }
403
+ window.removeEventListener('message', eventsListener);
404
+ addPopup(linkUrl);
405
+ window.addEventListener('message', eventsListener);
406
+ return [2 /*return*/];
407
+ });
408
+ }); };
409
+ var closeLink = function () {
410
+ var _a;
411
+ removePopup();
412
+ window.removeEventListener('message', eventsListener);
413
+ (_a = options.onExit) === null || _a === void 0 ? void 0 : _a.call(options);
414
+ disconnectAllAccounts();
415
+ };
416
+ return {
417
+ openLink: openLink,
418
+ closeLink: closeLink
419
+ };
420
+ };