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