@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/Link.js CHANGED
@@ -47,92 +47,347 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
47
47
  };
48
48
  import { addPopup, iframeId, removePopup } from './utils/popup';
49
49
  import { isLinkEventTypeKey } from './utils/event-types';
50
+ import { isWalletBrowserEventTypeKey } from './utils/wallet-browser-event-types';
50
51
  import { sdkSpecs } from './utils/sdk-specs';
52
+ import { connectToSpecificWallet, sendTransactionFromSDK, switchChainFromSDK, getWagmiCoreInjectedData, sendNonNativeTransactionFromSDK, disconnectAllAccounts } from './utils/wagmiCoreConnectorsUtils';
51
53
  var currentOptions;
52
- var iframeUrlObject;
54
+ var possibleOrigins = new Set([
55
+ 'https://web.meshconnect.com',
56
+ 'https://web.getfront.com'
57
+ ]);
53
58
  var iframeElement = function () {
54
59
  return document.getElementById(iframeId);
55
60
  };
56
- function eventsListener(event) {
57
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
58
- switch (event.data.type) {
59
- case 'brokerageAccountAccessToken': {
60
- var payload = {
61
- accessToken: event.data.payload
62
- };
63
- (_a = currentOptions === null || currentOptions === void 0 ? void 0 : currentOptions.onEvent) === null || _a === void 0 ? void 0 : _a.call(currentOptions, {
64
- type: 'integrationConnected',
65
- payload: payload
66
- });
67
- (_b = currentOptions === null || currentOptions === void 0 ? void 0 : currentOptions.onIntegrationConnected) === null || _b === void 0 ? void 0 : _b.call(currentOptions, payload);
68
- break;
69
- }
70
- case 'delayedAuthentication': {
71
- var payload = {
72
- delayedAuth: event.data.payload
73
- };
74
- (_c = currentOptions === null || currentOptions === void 0 ? void 0 : currentOptions.onEvent) === null || _c === void 0 ? void 0 : _c.call(currentOptions, {
75
- type: 'integrationConnected',
76
- payload: payload
77
- });
78
- (_d = currentOptions === null || currentOptions === void 0 ? void 0 : currentOptions.onIntegrationConnected) === null || _d === void 0 ? void 0 : _d.call(currentOptions, payload);
79
- break;
80
- }
81
- case 'transferFinished': {
82
- var payload = event.data.payload;
83
- (_e = currentOptions === null || currentOptions === void 0 ? void 0 : currentOptions.onEvent) === null || _e === void 0 ? void 0 : _e.call(currentOptions, {
84
- type: 'transferCompleted',
85
- payload: payload
86
- });
87
- (_f = currentOptions === null || currentOptions === void 0 ? void 0 : currentOptions.onTransferFinished) === null || _f === void 0 ? void 0 : _f.call(currentOptions, payload);
88
- break;
89
- }
90
- case 'close':
91
- case 'done': {
92
- var payload = (_g = event.data) === null || _g === void 0 ? void 0 : _g.payload;
93
- (_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);
94
- removePopup();
95
- break;
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);
96
66
  }
97
- case 'oauthLinkOpen': {
98
- if (event.data.link) {
99
- var w = 700;
100
- var h = 800;
101
- var left = screen.width / 2 - w / 2;
102
- var top_1 = screen.height / 2 - h / 2;
103
- (_j = window
104
- .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();
105
- }
106
- break;
67
+ catch (e) {
68
+ console.error('Mesh SDK: Failed to deliver message to the iframe');
69
+ console.error(e);
107
70
  }
108
- case 'loaded': {
109
- (_k = iframeElement().contentWindow) === null || _k === void 0 ? void 0 : _k.postMessage({
110
- type: 'meshSDKSpecs',
111
- payload: __assign({}, sdkSpecs)
112
- }, (iframeUrlObject === null || iframeUrlObject === void 0 ? void 0 : iframeUrlObject.origin) || 'https://web.meshconnect.com');
113
- if (currentOptions === null || currentOptions === void 0 ? void 0 : currentOptions.accessTokens) {
114
- (_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');
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*/];
115
186
  }
116
- if (currentOptions === null || currentOptions === void 0 ? void 0 : currentOptions.transferDestinationTokens) {
117
- (_m = iframeElement().contentWindow) === null || _m === void 0 ? void 0 : _m.postMessage({
118
- type: 'frontTransferDestinationTokens',
119
- payload: currentOptions.transferDestinationTokens
120
- }, (iframeUrlObject === null || iframeUrlObject === void 0 ? void 0 : iframeUrlObject.origin) || 'https://web.meshconnect.com');
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*/];
121
353
  }
122
- (_o = currentOptions === null || currentOptions === void 0 ? void 0 : currentOptions.onEvent) === null || _o === void 0 ? void 0 : _o.call(currentOptions, { type: 'pageLoaded' });
123
- break;
124
- }
125
- default: {
126
- if (isLinkEventTypeKey(event.data.type)) {
127
- (_p = currentOptions === null || currentOptions === void 0 ? void 0 : currentOptions.onEvent) === null || _p === void 0 ? void 0 : _p.call(currentOptions, event.data);
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*/];
128
372
  }
129
- break;
130
- }
373
+ });
374
+ });
375
+ }
376
+ function handleErrorAndSendMessage(error, messageType) {
377
+ var errorMessage = 'An unexpected error occurred';
378
+ if (error instanceof Error) {
379
+ errorMessage = error.message;
131
380
  }
381
+ sendMessageToIframe({
382
+ type: messageType,
383
+ payload: {
384
+ error: errorMessage
385
+ }
386
+ });
132
387
  }
133
388
  export var createLink = function (options) {
134
389
  var openLink = function (linkToken) { return __awaiter(void 0, void 0, void 0, function () {
135
- var linkUrl;
390
+ var linkUrl, iframeUrlObject;
136
391
  var _a;
137
392
  return __generator(this, function (_b) {
138
393
  if (!linkToken) {
@@ -142,6 +397,9 @@ export var createLink = function (options) {
142
397
  currentOptions = options;
143
398
  linkUrl = window.atob(linkToken);
144
399
  iframeUrlObject = new URL(linkUrl);
400
+ if (iframeUrlObject.origin) {
401
+ possibleOrigins.add(iframeUrlObject.origin);
402
+ }
145
403
  window.removeEventListener('message', eventsListener);
146
404
  addPopup(linkUrl);
147
405
  window.addEventListener('message', eventsListener);
@@ -153,6 +411,7 @@ export var createLink = function (options) {
153
411
  removePopup();
154
412
  window.removeEventListener('message', eventsListener);
155
413
  (_a = options.onExit) === null || _a === void 0 ? void 0 : _a.call(options);
414
+ disconnectAllAccounts();
156
415
  };
157
416
  return {
158
417
  openLink: openLink,