@portal-hq/web 3.2.2 → 3.3.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.
@@ -0,0 +1,1414 @@
1
+ "use strict";
2
+ /**
3
+ * @jest-environment jsdom
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ const index_1 = require("../index");
10
+ const _1 = __importDefault(require("."));
11
+ const constants_1 = require("../__mocks/constants");
12
+ const portal_1 = __importDefault(require("../__mocks/portal/portal"));
13
+ const errors_1 = require("./errors");
14
+ describe('Mpc', () => {
15
+ const mockHostOrigin = `https://${constants_1.mockHost}`;
16
+ let mpc;
17
+ beforeEach(() => {
18
+ jest.clearAllMocks();
19
+ portal_1.default.host = constants_1.mockHost;
20
+ mpc = new _1.default({
21
+ portal: portal_1.default
22
+ });
23
+ });
24
+ describe('backup', () => {
25
+ const args = {
26
+ backupMethod: index_1.BackupMethods.password,
27
+ backupConfigs: constants_1.mockBackupConfig,
28
+ host: 'web.portalhq.io',
29
+ mpcVersion: 'v6',
30
+ featureFlags: {},
31
+ };
32
+ it('should successfully run backup', (done) => {
33
+ var _a;
34
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
35
+ .mockImplementation((message, origin) => {
36
+ const { type, data } = message;
37
+ expect(type).toEqual('portal:wasm:backup');
38
+ expect(data).toEqual(args);
39
+ expect(origin).toEqual(mockHostOrigin);
40
+ window.dispatchEvent(new MessageEvent('message', {
41
+ origin: mockHostOrigin,
42
+ data: {
43
+ type: 'portal:wasm:backupProgress',
44
+ data: {
45
+ status: index_1.MpcStatuses.EncryptingShare,
46
+ done: false
47
+ }
48
+ },
49
+ }));
50
+ window.dispatchEvent(new MessageEvent('message', {
51
+ origin: mockHostOrigin,
52
+ data: {
53
+ type: 'portal:wasm:backupProgress',
54
+ data: {
55
+ status: index_1.MpcStatuses.StoringShare,
56
+ done: false
57
+ }
58
+ },
59
+ }));
60
+ window.dispatchEvent(new MessageEvent('message', {
61
+ origin: mockHostOrigin,
62
+ data: {
63
+ type: 'portal:wasm:backupProgress',
64
+ data: {
65
+ status: index_1.MpcStatuses.Done,
66
+ done: true
67
+ }
68
+ },
69
+ }));
70
+ window.dispatchEvent(new MessageEvent('message', {
71
+ origin: mockHostOrigin,
72
+ data: {
73
+ type: 'portal:wasm:backupResult',
74
+ data: {
75
+ cipherText: 'test',
76
+ }
77
+ },
78
+ }));
79
+ });
80
+ const progressMock = jest.fn();
81
+ mpc.backup(args, progressMock).then((res) => {
82
+ expect(res.cipherText).toEqual(constants_1.mockCipherText);
83
+ expect(progressMock).toHaveBeenCalledTimes(3);
84
+ expect(progressMock.mock.calls[0]).toEqual([{ status: index_1.MpcStatuses.EncryptingShare, done: false }]);
85
+ expect(progressMock.mock.calls[1]).toEqual([{ status: index_1.MpcStatuses.StoringShare, done: false }]);
86
+ expect(progressMock.mock.calls[2]).toEqual([{ status: index_1.MpcStatuses.Done, done: true }]);
87
+ done();
88
+ }).catch((e) => {
89
+ console.error(e);
90
+ expect(0).toEqual(1);
91
+ done();
92
+ });
93
+ });
94
+ it('should error out if the iframe sends an error message', (done) => {
95
+ var _a;
96
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
97
+ .mockImplementationOnce((message, origin) => {
98
+ const { type, data } = message;
99
+ expect(type).toEqual('portal:wasm:backup');
100
+ expect(data).toEqual(args);
101
+ expect(origin).toEqual(mockHostOrigin);
102
+ window.dispatchEvent(new MessageEvent('message', {
103
+ origin: mockHostOrigin,
104
+ data: {
105
+ type: 'portal:wasm:backupError',
106
+ data: {
107
+ code: 1,
108
+ message: 'test'
109
+ }
110
+ },
111
+ }));
112
+ });
113
+ mpc.backup(args).then(() => {
114
+ expect(0).toEqual(1);
115
+ done();
116
+ }).catch((e) => {
117
+ expect(e).toBeInstanceOf(errors_1.PortalMpcError);
118
+ expect(e.message).toEqual('test');
119
+ expect(e.code).toEqual(1);
120
+ done();
121
+ });
122
+ });
123
+ it('should error out if backupConfig is missing passswordStorage', (done) => {
124
+ mpc.backup({
125
+ backupMethod: index_1.BackupMethods.password,
126
+ backupConfigs: {},
127
+ host: 'web.portalhq.io',
128
+ mpcVersion: 'v6',
129
+ featureFlags: {},
130
+ }).then(() => {
131
+ expect(0).toEqual(1);
132
+ done();
133
+ }).catch((e) => {
134
+ expect(e).toBeInstanceOf(Error);
135
+ expect(e.message).toEqual('Password storage config is required');
136
+ done();
137
+ });
138
+ });
139
+ it('should error out if passswordStorage is missing password', (done) => {
140
+ mpc.backup({
141
+ backupMethod: index_1.BackupMethods.password,
142
+ backupConfigs: {
143
+ passwordStorage: {}
144
+ },
145
+ host: 'web.portalhq.io',
146
+ mpcVersion: 'v6',
147
+ featureFlags: {},
148
+ }).then(() => {
149
+ expect(0).toEqual(1);
150
+ done();
151
+ }).catch((e) => {
152
+ expect(e).toBeInstanceOf(Error);
153
+ expect(e.message).toEqual('Password is required');
154
+ done();
155
+ });
156
+ });
157
+ it('should error out if password is weak', (done) => {
158
+ mpc.backup({
159
+ backupMethod: index_1.BackupMethods.password,
160
+ backupConfigs: {
161
+ passwordStorage: {
162
+ password: 'wea'
163
+ }
164
+ },
165
+ host: 'web.portalhq.io',
166
+ mpcVersion: 'v6',
167
+ featureFlags: {},
168
+ }).then(() => {
169
+ expect(0).toEqual(1);
170
+ done();
171
+ }).catch((e) => {
172
+ expect(e).toBeInstanceOf(Error);
173
+ expect(e.message).toEqual('Password must be at least 4 characters');
174
+ done();
175
+ });
176
+ });
177
+ });
178
+ describe('clearLocalWallet', () => {
179
+ it('should clear local wallet', (done) => {
180
+ var _a;
181
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
182
+ .mockImplementation((message, origin) => {
183
+ const { type, data } = message;
184
+ expect(type).toEqual('portal:destroy');
185
+ expect(data).toEqual({});
186
+ expect(origin).toEqual(mockHostOrigin);
187
+ window.dispatchEvent(new MessageEvent('message', {
188
+ origin: mockHostOrigin,
189
+ data: {
190
+ type: 'portal:destroyResult',
191
+ },
192
+ }));
193
+ });
194
+ mpc.clearLocalWallet().then((res) => {
195
+ expect(res).toEqual(true);
196
+ done();
197
+ }).catch((_) => {
198
+ expect(0).toEqual(1);
199
+ done();
200
+ });
201
+ });
202
+ });
203
+ describe('generate', () => {
204
+ const args = {
205
+ host: 'web.portalhq.io',
206
+ mpcVersion: 'v6',
207
+ featureFlags: {},
208
+ };
209
+ it('should successfully run generate', (done) => {
210
+ var _a;
211
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
212
+ .mockImplementation((message, origin) => {
213
+ const { type, data } = message;
214
+ expect(type).toEqual('portal:wasm:generate');
215
+ expect(data).toEqual(args);
216
+ expect(origin).toEqual(mockHostOrigin);
217
+ window.dispatchEvent(new MessageEvent('message', {
218
+ origin: mockHostOrigin,
219
+ data: {
220
+ type: 'portal:wasm:generateProgress',
221
+ data: {
222
+ status: index_1.MpcStatuses.StoringShare,
223
+ done: false
224
+ }
225
+ },
226
+ }));
227
+ window.dispatchEvent(new MessageEvent('message', {
228
+ origin: mockHostOrigin,
229
+ data: {
230
+ type: 'portal:wasm:generateProgress',
231
+ data: {
232
+ status: index_1.MpcStatuses.Done,
233
+ done: true
234
+ }
235
+ },
236
+ }));
237
+ window.dispatchEvent(new MessageEvent('message', {
238
+ origin: mockHostOrigin,
239
+ data: {
240
+ type: 'portal:wasm:generateResult',
241
+ data: constants_1.mockAddress
242
+ },
243
+ }));
244
+ });
245
+ const progressMock = jest.fn();
246
+ mpc.generate(args, progressMock).then((res) => {
247
+ expect(res).toEqual(constants_1.mockAddress);
248
+ expect(progressMock).toHaveBeenCalledTimes(2);
249
+ expect(progressMock.mock.calls[0]).toEqual([{ status: index_1.MpcStatuses.StoringShare, done: false }]);
250
+ expect(progressMock.mock.calls[1]).toEqual([{ status: index_1.MpcStatuses.Done, done: true }]);
251
+ done();
252
+ }).catch((e) => {
253
+ console.error(e);
254
+ expect(0).toEqual(1);
255
+ done();
256
+ });
257
+ });
258
+ it('should error out if the iframe sends an error message', (done) => {
259
+ var _a;
260
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
261
+ .mockImplementationOnce((message, origin) => {
262
+ const { type, data } = message;
263
+ expect(type).toEqual('portal:wasm:generate');
264
+ expect(data).toEqual(args);
265
+ expect(origin).toEqual(mockHostOrigin);
266
+ window.dispatchEvent(new MessageEvent('message', {
267
+ origin: mockHostOrigin,
268
+ data: {
269
+ type: 'portal:wasm:generateError',
270
+ data: {
271
+ code: 1,
272
+ message: 'test'
273
+ }
274
+ },
275
+ }));
276
+ });
277
+ mpc.generate(args).then(() => {
278
+ expect(0).toEqual(1);
279
+ done();
280
+ }).catch((e) => {
281
+ expect(e).toBeInstanceOf(errors_1.PortalMpcError);
282
+ expect(e.message).toEqual('test');
283
+ expect(e.code).toEqual(1);
284
+ done();
285
+ });
286
+ });
287
+ });
288
+ describe('getAddress', () => {
289
+ it('should successfully get address', (done) => {
290
+ var _a;
291
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
292
+ .mockImplementation((message, origin) => {
293
+ const { type, data } = message;
294
+ expect(type).toEqual('portal:address');
295
+ expect(data).toEqual({});
296
+ expect(origin).toEqual(mockHostOrigin);
297
+ window.dispatchEvent(new MessageEvent('message', {
298
+ origin: mockHostOrigin,
299
+ data: {
300
+ type: 'portal:addressResult',
301
+ data: constants_1.mockAddress
302
+ },
303
+ }));
304
+ });
305
+ mpc.getAddress().then((res) => {
306
+ expect(res).toEqual(constants_1.mockAddress);
307
+ done();
308
+ }).catch((_) => {
309
+ expect(0).toEqual(1);
310
+ done();
311
+ });
312
+ });
313
+ });
314
+ describe('recover', () => {
315
+ const args = {
316
+ backupMethod: index_1.BackupMethods.password,
317
+ backupConfigs: constants_1.mockBackupConfig,
318
+ cipherText: constants_1.mockCipherText,
319
+ host: 'web.portalhq.io',
320
+ mpcVersion: 'v6',
321
+ featureFlags: {},
322
+ };
323
+ it('should successfully run recover', (done) => {
324
+ var _a;
325
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
326
+ .mockImplementation((message, origin) => {
327
+ const { type, data } = message;
328
+ expect(type).toEqual('portal:wasm:recover');
329
+ expect(data).toEqual(args);
330
+ expect(origin).toEqual(mockHostOrigin);
331
+ window.dispatchEvent(new MessageEvent('message', {
332
+ origin: mockHostOrigin,
333
+ data: {
334
+ type: 'portal:wasm:recoverProgress',
335
+ data: {
336
+ status: index_1.MpcStatuses.ReadingShare,
337
+ done: false
338
+ }
339
+ },
340
+ }));
341
+ window.dispatchEvent(new MessageEvent('message', {
342
+ origin: mockHostOrigin,
343
+ data: {
344
+ type: 'portal:wasm:recoverProgress',
345
+ data: {
346
+ status: index_1.MpcStatuses.StoringShare,
347
+ done: false
348
+ }
349
+ },
350
+ }));
351
+ window.dispatchEvent(new MessageEvent('message', {
352
+ origin: mockHostOrigin,
353
+ data: {
354
+ type: 'portal:wasm:recoverProgress',
355
+ data: {
356
+ status: index_1.MpcStatuses.Done,
357
+ done: true
358
+ }
359
+ },
360
+ }));
361
+ window.dispatchEvent(new MessageEvent('message', {
362
+ origin: mockHostOrigin,
363
+ data: {
364
+ type: 'portal:wasm:recoverResult',
365
+ data: constants_1.mockAddress
366
+ },
367
+ }));
368
+ });
369
+ const progressMock = jest.fn();
370
+ mpc.recover(args, progressMock).then((res) => {
371
+ expect(res).toEqual(constants_1.mockAddress);
372
+ expect(progressMock).toHaveBeenCalledTimes(3);
373
+ expect(progressMock.mock.calls[0]).toEqual([{ status: index_1.MpcStatuses.ReadingShare, done: false }]);
374
+ expect(progressMock.mock.calls[1]).toEqual([{ status: index_1.MpcStatuses.StoringShare, done: false }]);
375
+ expect(progressMock.mock.calls[2]).toEqual([{ status: index_1.MpcStatuses.Done, done: true }]);
376
+ done();
377
+ }).catch((e) => {
378
+ console.error(e);
379
+ expect(0).toEqual(1);
380
+ done();
381
+ });
382
+ });
383
+ it('should error out if the iframe sends an error message', (done) => {
384
+ var _a;
385
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
386
+ .mockImplementationOnce((message, origin) => {
387
+ const { type, data } = message;
388
+ expect(type).toEqual('portal:wasm:recover');
389
+ expect(data).toEqual(args);
390
+ expect(origin).toEqual(mockHostOrigin);
391
+ window.dispatchEvent(new MessageEvent('message', {
392
+ origin: mockHostOrigin,
393
+ data: {
394
+ type: 'portal:wasm:recoverError',
395
+ data: {
396
+ code: 1,
397
+ message: 'test'
398
+ }
399
+ },
400
+ }));
401
+ });
402
+ mpc.recover(args).then(() => {
403
+ expect(0).toEqual(1);
404
+ done();
405
+ }).catch((e) => {
406
+ expect(e).toBeInstanceOf(errors_1.PortalMpcError);
407
+ expect(e.message).toEqual('test');
408
+ expect(e.code).toEqual(1);
409
+ done();
410
+ });
411
+ });
412
+ });
413
+ describe('eject', () => {
414
+ const args = {
415
+ backupMethod: index_1.BackupMethods.password,
416
+ backupConfigs: constants_1.mockBackupConfig,
417
+ cipherText: constants_1.mockCipherText,
418
+ host: 'web.portalhq.io',
419
+ mpcVersion: 'v6',
420
+ featureFlags: {},
421
+ organizationBackupShare: 'test'
422
+ };
423
+ it('should successfully eject the wallet', (done) => {
424
+ var _a;
425
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
426
+ .mockImplementation((message, origin) => {
427
+ const { type, data } = message;
428
+ expect(type).toEqual('portal:wasm:eject');
429
+ expect(data).toEqual(args);
430
+ expect(origin).toEqual(mockHostOrigin);
431
+ window.dispatchEvent(new MessageEvent('message', {
432
+ origin: mockHostOrigin,
433
+ data: {
434
+ type: 'portal:wasm:ejectResult',
435
+ data: constants_1.mockEjectResult
436
+ },
437
+ }));
438
+ });
439
+ mpc.eject(args).then((res) => {
440
+ expect(res).toEqual(constants_1.mockEjectResult);
441
+ done();
442
+ }).catch((_) => {
443
+ expect(0).toEqual(1);
444
+ done();
445
+ });
446
+ });
447
+ it('should error out if the iframe sends an error message', (done) => {
448
+ var _a;
449
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
450
+ .mockImplementationOnce((message, origin) => {
451
+ const { type, data } = message;
452
+ expect(type).toEqual('portal:wasm:eject');
453
+ expect(data).toEqual(args);
454
+ expect(origin).toEqual(mockHostOrigin);
455
+ window.dispatchEvent(new MessageEvent('message', {
456
+ origin: mockHostOrigin,
457
+ data: {
458
+ type: 'portal:wasm:ejectError',
459
+ data: {
460
+ code: 1,
461
+ message: 'test'
462
+ }
463
+ },
464
+ }));
465
+ });
466
+ mpc.eject(args).then(() => {
467
+ expect(0).toEqual(1);
468
+ done();
469
+ }).catch((e) => {
470
+ expect(e).toBeInstanceOf(errors_1.PortalMpcError);
471
+ expect(e.message).toEqual('test');
472
+ expect(e.code).toEqual(1);
473
+ done();
474
+ });
475
+ });
476
+ });
477
+ describe('rawSign', () => {
478
+ const args = {
479
+ curve: index_1.PortalCurve.SECP256K1, param: 'test'
480
+ };
481
+ it('should successfully raW sign', (done) => {
482
+ var _a;
483
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
484
+ .mockImplementation((message, origin) => {
485
+ const { type, data } = message;
486
+ expect(type).toEqual('portal:mpc:rawSign');
487
+ expect(data).toEqual(args);
488
+ expect(origin).toEqual(mockHostOrigin);
489
+ window.dispatchEvent(new MessageEvent('message', {
490
+ origin: mockHostOrigin,
491
+ data: {
492
+ type: 'portal:mpc:rawSignResult',
493
+ data: 'test'
494
+ },
495
+ }));
496
+ });
497
+ mpc.rawSign(args.curve, args.param).then((res) => {
498
+ expect(res).toEqual('test');
499
+ done();
500
+ }).catch((_) => {
501
+ expect(0).toEqual(1);
502
+ done();
503
+ });
504
+ });
505
+ it('should error out if the iframe sends an error message', (done) => {
506
+ var _a;
507
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
508
+ .mockImplementationOnce((message, origin) => {
509
+ const { type, data } = message;
510
+ expect(type).toEqual('portal:mpc:rawSign');
511
+ expect(data).toEqual(args);
512
+ expect(origin).toEqual(mockHostOrigin);
513
+ window.dispatchEvent(new MessageEvent('message', {
514
+ origin: mockHostOrigin,
515
+ data: {
516
+ type: 'portal:mpc:rawSignError',
517
+ data: {
518
+ code: 1,
519
+ message: 'test'
520
+ }
521
+ },
522
+ }));
523
+ });
524
+ mpc.rawSign(args.curve, args.param).then(() => {
525
+ expect(0).toEqual(1);
526
+ done();
527
+ }).catch((e) => {
528
+ expect(e).toBeInstanceOf(errors_1.PortalMpcError);
529
+ expect(e.message).toEqual('test');
530
+ expect(e.code).toEqual(1);
531
+ done();
532
+ });
533
+ });
534
+ });
535
+ describe('sign', () => {
536
+ const args = {
537
+ chainId: 'test',
538
+ method: 'test',
539
+ params: 'test',
540
+ rpcUrl: constants_1.mockRpcUrl
541
+ };
542
+ it('should successfully run sign', (done) => {
543
+ var _a;
544
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
545
+ .mockImplementation((message, origin) => {
546
+ const { type, data } = message;
547
+ expect(type).toEqual('portal:wasm:sign');
548
+ expect(data).toEqual(args);
549
+ expect(origin).toEqual(mockHostOrigin);
550
+ window.dispatchEvent(new MessageEvent('message', {
551
+ origin: mockHostOrigin,
552
+ data: {
553
+ type: 'portal:wasm:signResult',
554
+ data: 'test'
555
+ },
556
+ }));
557
+ });
558
+ mpc.sign(args).then((res) => {
559
+ expect(res).toEqual('test');
560
+ done();
561
+ }).catch((e) => {
562
+ console.error(e);
563
+ expect(0).toEqual(1);
564
+ done();
565
+ });
566
+ });
567
+ it('should error out if the iframe sends an error message', (done) => {
568
+ var _a;
569
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
570
+ .mockImplementationOnce((message, origin) => {
571
+ const { type, data } = message;
572
+ expect(type).toEqual('portal:wasm:sign');
573
+ expect(data).toEqual(args);
574
+ expect(origin).toEqual(mockHostOrigin);
575
+ window.dispatchEvent(new MessageEvent('message', {
576
+ origin: mockHostOrigin,
577
+ data: {
578
+ type: 'portal:wasm:signError',
579
+ data: {
580
+ code: 1,
581
+ message: 'test'
582
+ }
583
+ },
584
+ }));
585
+ });
586
+ mpc.sign(args).then(() => {
587
+ expect(0).toEqual(1);
588
+ done();
589
+ }).catch((e) => {
590
+ expect(e).toBeInstanceOf(errors_1.PortalMpcError);
591
+ expect(e.message).toEqual('test');
592
+ expect(e.code).toEqual(1);
593
+ done();
594
+ });
595
+ });
596
+ });
597
+ describe('checkSharesOnDevice', () => {
598
+ it('should successfully return the shares on device', (done) => {
599
+ var _a;
600
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
601
+ .mockImplementation((message, origin) => {
602
+ const { type, data } = message;
603
+ expect(type).toEqual('portal:checkSharesOnDevice');
604
+ expect(data).toEqual({});
605
+ expect(origin).toEqual(mockHostOrigin);
606
+ window.dispatchEvent(new MessageEvent('message', {
607
+ origin: mockHostOrigin,
608
+ data: {
609
+ type: 'portal:checkSharesOnDeviceResult',
610
+ data: constants_1.mockSharesOnDevice
611
+ },
612
+ }));
613
+ });
614
+ mpc.checkSharesOnDevice().then((res) => {
615
+ expect(res).toEqual(constants_1.mockSharesOnDevice);
616
+ done();
617
+ }).catch((_) => {
618
+ expect(0).toEqual(1);
619
+ done();
620
+ });
621
+ });
622
+ it('should error out if the iframe sends an error message', (done) => {
623
+ var _a;
624
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
625
+ .mockImplementationOnce((message, origin) => {
626
+ const { type, data } = message;
627
+ expect(type).toEqual('portal:checkSharesOnDevice');
628
+ expect(data).toEqual({});
629
+ expect(origin).toEqual(mockHostOrigin);
630
+ window.dispatchEvent(new MessageEvent('message', {
631
+ origin: mockHostOrigin,
632
+ data: {
633
+ type: 'portal:checkSharesOnDeviceError',
634
+ data: {
635
+ code: 1,
636
+ message: 'test'
637
+ }
638
+ },
639
+ }));
640
+ });
641
+ mpc.checkSharesOnDevice().then(() => {
642
+ expect(0).toEqual(1);
643
+ done();
644
+ }).catch((e) => {
645
+ expect(e).toBeInstanceOf(errors_1.PortalMpcError);
646
+ expect(e.message).toEqual('test');
647
+ expect(e.code).toEqual(1);
648
+ done();
649
+ });
650
+ });
651
+ });
652
+ describe('getBalances', () => {
653
+ const args = ['eip155:1'];
654
+ const res = constants_1.mockBalances;
655
+ it('should successfully return the balances', (done) => {
656
+ var _a;
657
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
658
+ .mockImplementation((message, origin) => {
659
+ const { type, data } = message;
660
+ expect(type).toEqual('portal:getBalances');
661
+ expect(data).toEqual({ chainId: args[0] });
662
+ expect(origin).toEqual(mockHostOrigin);
663
+ window.dispatchEvent(new MessageEvent('message', {
664
+ origin: mockHostOrigin,
665
+ data: {
666
+ type: 'portal:getBalancesResult',
667
+ data: res
668
+ },
669
+ }));
670
+ });
671
+ mpc.getBalances(...args).then((data) => {
672
+ expect(data).toEqual(res);
673
+ done();
674
+ }).catch((_) => {
675
+ expect(0).toEqual(1);
676
+ done();
677
+ });
678
+ });
679
+ it('should error out if the iframe sends an error message', (done) => {
680
+ var _a;
681
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
682
+ .mockImplementationOnce((message, origin) => {
683
+ const { type, data } = message;
684
+ expect(type).toEqual('portal:getBalances');
685
+ expect(data).toEqual({ chainId: args[0] });
686
+ expect(origin).toEqual(mockHostOrigin);
687
+ window.dispatchEvent(new MessageEvent('message', {
688
+ origin: mockHostOrigin,
689
+ data: {
690
+ type: 'portal:getBalancesError',
691
+ data: {
692
+ code: 1,
693
+ message: 'test'
694
+ }
695
+ },
696
+ }));
697
+ });
698
+ mpc.getBalances(...args).then(() => {
699
+ expect(0).toEqual(1);
700
+ done();
701
+ }).catch((e) => {
702
+ expect(e).toBeInstanceOf(errors_1.PortalMpcError);
703
+ expect(e.message).toEqual('test');
704
+ expect(e.code).toEqual(1);
705
+ done();
706
+ });
707
+ });
708
+ });
709
+ describe('getClient', () => {
710
+ const res = constants_1.mockClientResponse;
711
+ it('should successfully return the client', (done) => {
712
+ var _a;
713
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
714
+ .mockImplementation((message, origin) => {
715
+ const { type, data } = message;
716
+ expect(type).toEqual('portal:getClient');
717
+ expect(data).toEqual({});
718
+ expect(origin).toEqual(mockHostOrigin);
719
+ window.dispatchEvent(new MessageEvent('message', {
720
+ origin: mockHostOrigin,
721
+ data: {
722
+ type: 'portal:getClientResult',
723
+ data: res
724
+ },
725
+ }));
726
+ });
727
+ mpc.getClient().then((data) => {
728
+ expect(data).toEqual(res);
729
+ done();
730
+ }).catch((_) => {
731
+ expect(0).toEqual(1);
732
+ done();
733
+ });
734
+ });
735
+ it('should error out if the iframe sends an error message', (done) => {
736
+ var _a;
737
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
738
+ .mockImplementationOnce((message, origin) => {
739
+ const { type, data } = message;
740
+ expect(type).toEqual('portal:getClient');
741
+ expect(data).toEqual({});
742
+ expect(origin).toEqual(mockHostOrigin);
743
+ window.dispatchEvent(new MessageEvent('message', {
744
+ origin: mockHostOrigin,
745
+ data: {
746
+ type: 'portal:getClientError',
747
+ data: {
748
+ code: 1,
749
+ message: 'test'
750
+ }
751
+ },
752
+ }));
753
+ });
754
+ mpc.getClient().then(() => {
755
+ expect(0).toEqual(1);
756
+ done();
757
+ }).catch((e) => {
758
+ expect(e).toBeInstanceOf(errors_1.PortalMpcError);
759
+ expect(e.message).toEqual('test');
760
+ expect(e.code).toEqual(1);
761
+ done();
762
+ });
763
+ });
764
+ });
765
+ describe('getNFTs', () => {
766
+ const args = ['eip155:1'];
767
+ const res = constants_1.mockNFTs;
768
+ it('should successfully return the nfts', (done) => {
769
+ var _a;
770
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
771
+ .mockImplementation((message, origin) => {
772
+ const { type, data } = message;
773
+ expect(type).toEqual('portal:getNFTs');
774
+ expect(data).toEqual({ chainId: args[0] });
775
+ expect(origin).toEqual(mockHostOrigin);
776
+ window.dispatchEvent(new MessageEvent('message', {
777
+ origin: mockHostOrigin,
778
+ data: {
779
+ type: 'portal:getNFTsResult',
780
+ data: res
781
+ },
782
+ }));
783
+ });
784
+ mpc.getNFTs(...args).then((data) => {
785
+ expect(data).toEqual(res);
786
+ done();
787
+ }).catch((_) => {
788
+ expect(0).toEqual(1);
789
+ done();
790
+ });
791
+ });
792
+ it('should error out if the iframe sends an error message', (done) => {
793
+ var _a;
794
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
795
+ .mockImplementationOnce((message, origin) => {
796
+ const { type, data } = message;
797
+ expect(type).toEqual('portal:getNFTs');
798
+ expect(data).toEqual({ chainId: args[0] });
799
+ expect(origin).toEqual(mockHostOrigin);
800
+ window.dispatchEvent(new MessageEvent('message', {
801
+ origin: mockHostOrigin,
802
+ data: {
803
+ type: 'portal:getNFTsError',
804
+ data: {
805
+ code: 1,
806
+ message: 'test'
807
+ }
808
+ },
809
+ }));
810
+ });
811
+ mpc.getNFTs(...args).then(() => {
812
+ expect(0).toEqual(1);
813
+ done();
814
+ }).catch((e) => {
815
+ expect(e).toBeInstanceOf(errors_1.PortalMpcError);
816
+ expect(e.message).toEqual('test');
817
+ expect(e.code).toEqual(1);
818
+ done();
819
+ });
820
+ });
821
+ });
822
+ describe('getNFTAssets', () => {
823
+ const args = ['eip155:1'];
824
+ const res = constants_1.mockNFTs;
825
+ it('should successfully return the nfts', (done) => {
826
+ var _a;
827
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
828
+ .mockImplementation((message, origin) => {
829
+ const { type, data } = message;
830
+ expect(type).toEqual('portal:getNFTAssets');
831
+ expect(data).toEqual({ chainId: args[0] });
832
+ expect(origin).toEqual(mockHostOrigin);
833
+ window.dispatchEvent(new MessageEvent('message', {
834
+ origin: mockHostOrigin,
835
+ data: {
836
+ type: 'portal:getNFTAssetsResult',
837
+ data: res
838
+ },
839
+ }));
840
+ });
841
+ mpc.getNFTAssets(args[0]).then((data) => {
842
+ expect(data).toEqual(res);
843
+ done();
844
+ }).catch((_) => {
845
+ expect(0).toEqual(1);
846
+ done();
847
+ });
848
+ });
849
+ it('should error out if the iframe sends an error message', (done) => {
850
+ var _a;
851
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
852
+ .mockImplementationOnce((message, origin) => {
853
+ const { type, data } = message;
854
+ expect(type).toEqual('portal:getNFTAssets');
855
+ expect(data).toEqual({ chainId: args[0] });
856
+ expect(origin).toEqual(mockHostOrigin);
857
+ window.dispatchEvent(new MessageEvent('message', {
858
+ origin: mockHostOrigin,
859
+ data: {
860
+ type: 'portal:getNFTAssetsError',
861
+ data: {
862
+ code: 1,
863
+ message: 'test'
864
+ }
865
+ },
866
+ }));
867
+ });
868
+ mpc.getNFTAssets(args[0]).then(() => {
869
+ expect(0).toEqual(1);
870
+ done();
871
+ }).catch((e) => {
872
+ expect(e).toBeInstanceOf(errors_1.PortalMpcError);
873
+ expect(e.message).toEqual('test');
874
+ expect(e.code).toEqual(1);
875
+ done();
876
+ });
877
+ });
878
+ });
879
+ describe('getAssets', () => {
880
+ const res = constants_1.mockAssets;
881
+ it('should successfully return the assets', (done) => {
882
+ var _a;
883
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
884
+ .mockImplementation((message, origin) => {
885
+ const { type, data } = message;
886
+ expect(type).toEqual('portal:getAssets');
887
+ expect(data).toEqual({ chainId: 'eip155:1', includeNfts: true });
888
+ expect(origin).toEqual(mockHostOrigin);
889
+ window.dispatchEvent(new MessageEvent('message', {
890
+ origin: mockHostOrigin,
891
+ data: {
892
+ type: 'portal:getAssetsResult',
893
+ data: res
894
+ },
895
+ }));
896
+ });
897
+ mpc.getAssets('eip155:1', true).then((data) => {
898
+ expect(data).toEqual(res);
899
+ done();
900
+ }).catch((_) => {
901
+ expect(0).toEqual(1);
902
+ done();
903
+ });
904
+ });
905
+ it('should error out if the iframe sends an error message', (done) => {
906
+ var _a;
907
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
908
+ .mockImplementationOnce((message, origin) => {
909
+ const { type, data } = message;
910
+ expect(type).toEqual('portal:getAssets');
911
+ expect(data).toEqual({ chainId: 'eip155:1', includeNfts: true });
912
+ expect(origin).toEqual(mockHostOrigin);
913
+ window.dispatchEvent(new MessageEvent('message', {
914
+ origin: mockHostOrigin,
915
+ data: {
916
+ type: 'portal:getAssetsError',
917
+ data: {
918
+ code: 1,
919
+ message: 'test'
920
+ }
921
+ },
922
+ }));
923
+ });
924
+ mpc.getAssets('eip155:1', true).then(() => {
925
+ expect(0).toEqual(1);
926
+ done();
927
+ }).catch((e) => {
928
+ expect(e).toBeInstanceOf(errors_1.PortalMpcError);
929
+ expect(e.message).toEqual('test');
930
+ expect(e.code).toEqual(1);
931
+ done();
932
+ });
933
+ });
934
+ });
935
+ describe('buildTransaction', () => {
936
+ const res = constants_1.mockBuiltTransaction;
937
+ it('should successfully return the built transaction', (done) => {
938
+ var _a;
939
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
940
+ .mockImplementation((message, origin) => {
941
+ const { type, data } = message;
942
+ expect(type).toEqual('portal:buildTransaction');
943
+ expect(data).toEqual({ chainId: 'eip155:1', to: constants_1.mockAddress, token: 'USDT', amount: '42' });
944
+ expect(origin).toEqual(mockHostOrigin);
945
+ window.dispatchEvent(new MessageEvent('message', {
946
+ origin: mockHostOrigin,
947
+ data: {
948
+ type: 'portal:buildTransactionResult',
949
+ data: res
950
+ },
951
+ }));
952
+ });
953
+ mpc.buildTransaction('eip155:1', constants_1.mockAddress, 'USDT', '42').then((data) => {
954
+ expect(data).toEqual(res);
955
+ done();
956
+ }).catch((_) => {
957
+ expect(0).toEqual(1);
958
+ done();
959
+ });
960
+ });
961
+ it('should error out if the iframe sends an error message', (done) => {
962
+ var _a;
963
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
964
+ .mockImplementationOnce((message, origin) => {
965
+ const { type, data } = message;
966
+ expect(type).toEqual('portal:buildTransaction');
967
+ expect(data).toEqual({ chainId: 'eip155:1', to: constants_1.mockAddress, token: 'USDT', amount: '42' });
968
+ expect(origin).toEqual(mockHostOrigin);
969
+ window.dispatchEvent(new MessageEvent('message', {
970
+ origin: mockHostOrigin,
971
+ data: {
972
+ type: 'portal:buildTransactionError',
973
+ data: {
974
+ code: 1,
975
+ message: 'test'
976
+ }
977
+ },
978
+ }));
979
+ });
980
+ mpc.buildTransaction('eip155:1', constants_1.mockAddress, 'USDT', '42').then(() => {
981
+ expect(0).toEqual(1);
982
+ done();
983
+ }).catch((e) => {
984
+ expect(e).toBeInstanceOf(errors_1.PortalMpcError);
985
+ expect(e.message).toEqual('test');
986
+ expect(e.code).toEqual(1);
987
+ done();
988
+ });
989
+ });
990
+ });
991
+ describe('getQuote', () => {
992
+ const res = constants_1.mockBuiltTransaction;
993
+ it('should successfully return the quote', (done) => {
994
+ var _a;
995
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
996
+ .mockImplementation((message, origin) => {
997
+ const { type, data } = message;
998
+ expect(type).toEqual('portal:swaps:getQuote');
999
+ expect(data).toEqual({ apiKey: constants_1.mockApikey, args: constants_1.mockQuoteArgs, chainId: 'eip155:1' });
1000
+ expect(origin).toEqual(mockHostOrigin);
1001
+ window.dispatchEvent(new MessageEvent('message', {
1002
+ origin: mockHostOrigin,
1003
+ data: {
1004
+ type: 'portal:swaps:getQuoteResult',
1005
+ data: res
1006
+ },
1007
+ }));
1008
+ });
1009
+ mpc.getQuote(constants_1.mockApikey, constants_1.mockQuoteArgs, 'eip155:1').then((data) => {
1010
+ expect(data).toEqual(res);
1011
+ done();
1012
+ }).catch((_) => {
1013
+ expect(0).toEqual(1);
1014
+ done();
1015
+ });
1016
+ });
1017
+ it('should error out if the iframe sends an error message', (done) => {
1018
+ var _a;
1019
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
1020
+ .mockImplementationOnce((message, origin) => {
1021
+ const { type, data } = message;
1022
+ expect(type).toEqual('portal:swaps:getQuote');
1023
+ expect(data).toEqual({ apiKey: constants_1.mockApikey, args: constants_1.mockQuoteArgs, chainId: 'eip155:1' });
1024
+ expect(origin).toEqual(mockHostOrigin);
1025
+ window.dispatchEvent(new MessageEvent('message', {
1026
+ origin: mockHostOrigin,
1027
+ data: {
1028
+ type: 'portal:swaps:getQuoteError',
1029
+ data: {
1030
+ code: 1,
1031
+ message: 'test'
1032
+ }
1033
+ },
1034
+ }));
1035
+ });
1036
+ mpc.getQuote(constants_1.mockApikey, constants_1.mockQuoteArgs, 'eip155:1').then(() => {
1037
+ expect(0).toEqual(1);
1038
+ done();
1039
+ }).catch((e) => {
1040
+ expect(e).toBeInstanceOf(errors_1.PortalMpcError);
1041
+ expect(e.message).toEqual('test');
1042
+ expect(e.code).toEqual(1);
1043
+ done();
1044
+ });
1045
+ });
1046
+ });
1047
+ describe('getSources', () => {
1048
+ const res = constants_1.mockBuiltTransaction;
1049
+ it('should successfully return the sources', (done) => {
1050
+ var _a;
1051
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
1052
+ .mockImplementation((message, origin) => {
1053
+ const { type, data } = message;
1054
+ expect(type).toEqual('portal:swaps:getSources');
1055
+ expect(data).toEqual({ apiKey: constants_1.mockApikey, chainId: 'eip155:1' });
1056
+ expect(origin).toEqual(mockHostOrigin);
1057
+ window.dispatchEvent(new MessageEvent('message', {
1058
+ origin: mockHostOrigin,
1059
+ data: {
1060
+ type: 'portal:swaps:getSourcesResult',
1061
+ data: res
1062
+ },
1063
+ }));
1064
+ });
1065
+ mpc.getSources(constants_1.mockApikey, 'eip155:1').then((data) => {
1066
+ expect(data).toEqual(res);
1067
+ done();
1068
+ }).catch((_) => {
1069
+ expect(0).toEqual(1);
1070
+ done();
1071
+ });
1072
+ });
1073
+ it('should error out if the iframe sends an error message', (done) => {
1074
+ var _a;
1075
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
1076
+ .mockImplementationOnce((message, origin) => {
1077
+ const { type, data } = message;
1078
+ expect(type).toEqual('portal:swaps:getSources');
1079
+ expect(data).toEqual({ apiKey: constants_1.mockApikey, chainId: 'eip155:1' });
1080
+ expect(origin).toEqual(mockHostOrigin);
1081
+ window.dispatchEvent(new MessageEvent('message', {
1082
+ origin: mockHostOrigin,
1083
+ data: {
1084
+ type: 'portal:swaps:getSourcesError',
1085
+ data: {
1086
+ code: 1,
1087
+ message: 'test'
1088
+ }
1089
+ },
1090
+ }));
1091
+ });
1092
+ mpc.getSources(constants_1.mockApikey, 'eip155:1').then(() => {
1093
+ expect(0).toEqual(1);
1094
+ done();
1095
+ }).catch((e) => {
1096
+ expect(e).toBeInstanceOf(errors_1.PortalMpcError);
1097
+ expect(e.message).toEqual('test');
1098
+ expect(e.code).toEqual(1);
1099
+ done();
1100
+ });
1101
+ });
1102
+ });
1103
+ describe('getTransactions', () => {
1104
+ const res = constants_1.mockBuiltTransaction;
1105
+ it('should successfully return the transactions', (done) => {
1106
+ var _a;
1107
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
1108
+ .mockImplementation((message, origin) => {
1109
+ const { type, data } = message;
1110
+ expect(type).toEqual('portal:getTransactions');
1111
+ expect(data).toEqual({
1112
+ chainId: 'eip155:1', limit: undefined,
1113
+ offset: undefined,
1114
+ order: undefined,
1115
+ });
1116
+ expect(origin).toEqual(mockHostOrigin);
1117
+ window.dispatchEvent(new MessageEvent('message', {
1118
+ origin: mockHostOrigin,
1119
+ data: {
1120
+ type: 'portal:getTransactionsResult',
1121
+ data: res
1122
+ },
1123
+ }));
1124
+ });
1125
+ mpc.getTransactions('eip155:1').then((data) => {
1126
+ expect(data).toEqual(res);
1127
+ done();
1128
+ }).catch((_) => {
1129
+ expect(0).toEqual(1);
1130
+ done();
1131
+ });
1132
+ });
1133
+ it('should error out if the iframe sends an error message', (done) => {
1134
+ var _a;
1135
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
1136
+ .mockImplementationOnce((message, origin) => {
1137
+ const { type, data } = message;
1138
+ expect(type).toEqual('portal:getTransactions');
1139
+ expect(data).toEqual({
1140
+ chainId: 'eip155:1', limit: undefined,
1141
+ offset: undefined,
1142
+ order: undefined,
1143
+ });
1144
+ expect(origin).toEqual(mockHostOrigin);
1145
+ window.dispatchEvent(new MessageEvent('message', {
1146
+ origin: mockHostOrigin,
1147
+ data: {
1148
+ type: 'portal:getTransactionsError',
1149
+ data: {
1150
+ code: 1,
1151
+ message: 'test'
1152
+ }
1153
+ },
1154
+ }));
1155
+ });
1156
+ mpc.getTransactions('eip155:1').then(() => {
1157
+ expect(0).toEqual(1);
1158
+ done();
1159
+ }).catch((e) => {
1160
+ expect(e).toBeInstanceOf(errors_1.PortalMpcError);
1161
+ expect(e.message).toEqual('test');
1162
+ expect(e.code).toEqual(1);
1163
+ done();
1164
+ });
1165
+ });
1166
+ });
1167
+ describe('setBackupStatus', () => {
1168
+ const res = true;
1169
+ it('should successfully set the backup status', (done) => {
1170
+ var _a;
1171
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
1172
+ .mockImplementation((message, origin) => {
1173
+ const { type, data } = message;
1174
+ expect(type).toEqual('portal:api:setBackupStatus');
1175
+ expect(data).toEqual({
1176
+ backupIds: constants_1.mockBackupIds,
1177
+ status: 'STORED_CLIENT_BACKUP_SHARE'
1178
+ });
1179
+ expect(origin).toEqual(mockHostOrigin);
1180
+ window.dispatchEvent(new MessageEvent('message', {
1181
+ origin: mockHostOrigin,
1182
+ data: {
1183
+ type: 'portal:api:setBackupStatusResult',
1184
+ data: res
1185
+ },
1186
+ }));
1187
+ });
1188
+ mpc.setBackupStatus('STORED_CLIENT_BACKUP_SHARE', constants_1.mockBackupIds).then((data) => {
1189
+ expect(data).toEqual(res);
1190
+ done();
1191
+ }).catch((_) => {
1192
+ expect(0).toEqual(1);
1193
+ done();
1194
+ });
1195
+ });
1196
+ it('should error out if the iframe sends an error message', (done) => {
1197
+ var _a;
1198
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
1199
+ .mockImplementationOnce((message, origin) => {
1200
+ const { type, data } = message;
1201
+ expect(type).toEqual('portal:api:setBackupStatus');
1202
+ expect(data).toEqual({
1203
+ backupIds: constants_1.mockBackupIds,
1204
+ status: 'STORED_CLIENT_BACKUP_SHARE'
1205
+ });
1206
+ expect(origin).toEqual(mockHostOrigin);
1207
+ window.dispatchEvent(new MessageEvent('message', {
1208
+ origin: mockHostOrigin,
1209
+ data: {
1210
+ type: 'portal:api:setBackupStatusError',
1211
+ data: {
1212
+ code: 1,
1213
+ message: 'test'
1214
+ }
1215
+ },
1216
+ }));
1217
+ });
1218
+ mpc.setBackupStatus('STORED_CLIENT_BACKUP_SHARE', constants_1.mockBackupIds).then(() => {
1219
+ expect(0).toEqual(1);
1220
+ done();
1221
+ }).catch((e) => {
1222
+ expect(e).toBeInstanceOf(errors_1.PortalMpcError);
1223
+ expect(e.message).toEqual('test');
1224
+ expect(e.code).toEqual(1);
1225
+ done();
1226
+ });
1227
+ });
1228
+ });
1229
+ describe('simulateTransaction', () => {
1230
+ const res = constants_1.mockSimulationResult;
1231
+ it('should successfully return the simulated transaction', (done) => {
1232
+ var _a;
1233
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
1234
+ .mockImplementation((message, origin) => {
1235
+ const { type, data } = message;
1236
+ expect(type).toEqual('portal:simulateTransaction');
1237
+ expect(data).toEqual({
1238
+ chainId: 'eip155:1',
1239
+ transaction: constants_1.mockTransactionToSimulate
1240
+ });
1241
+ expect(origin).toEqual(mockHostOrigin);
1242
+ window.dispatchEvent(new MessageEvent('message', {
1243
+ origin: mockHostOrigin,
1244
+ data: {
1245
+ type: 'portal:simulateTransactionResult',
1246
+ data: res
1247
+ },
1248
+ }));
1249
+ });
1250
+ mpc.simulateTransaction(constants_1.mockTransactionToSimulate, 'eip155:1').then((data) => {
1251
+ expect(data).toEqual(res);
1252
+ done();
1253
+ }).catch((_) => {
1254
+ expect(0).toEqual(1);
1255
+ done();
1256
+ });
1257
+ });
1258
+ it('should error out if the iframe sends an error message', (done) => {
1259
+ var _a;
1260
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
1261
+ .mockImplementationOnce((message, origin) => {
1262
+ const { type, data } = message;
1263
+ expect(type).toEqual('portal:simulateTransaction');
1264
+ expect(data).toEqual({
1265
+ chainId: 'eip155:1',
1266
+ transaction: constants_1.mockTransactionToSimulate
1267
+ });
1268
+ expect(origin).toEqual(mockHostOrigin);
1269
+ window.dispatchEvent(new MessageEvent('message', {
1270
+ origin: mockHostOrigin,
1271
+ data: {
1272
+ type: 'portal:simulateTransactionError',
1273
+ data: {
1274
+ code: 1,
1275
+ message: 'test'
1276
+ }
1277
+ },
1278
+ }));
1279
+ });
1280
+ mpc.simulateTransaction(constants_1.mockTransactionToSimulate, 'eip155:1').then(() => {
1281
+ expect(0).toEqual(1);
1282
+ done();
1283
+ }).catch((e) => {
1284
+ expect(e).toBeInstanceOf(errors_1.PortalMpcError);
1285
+ expect(e.message).toEqual('test');
1286
+ expect(e.code).toEqual(1);
1287
+ done();
1288
+ });
1289
+ });
1290
+ });
1291
+ describe('evaluateTransaction', () => {
1292
+ const res = constants_1.mockEvaluationResult;
1293
+ it('should successfully return the evaluated transaction', (done) => {
1294
+ var _a;
1295
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
1296
+ .mockImplementation((message, origin) => {
1297
+ const { type, data } = message;
1298
+ expect(type).toEqual('portal:evaluateTransaction');
1299
+ expect(data).toEqual({
1300
+ chainId: 'eip155:1',
1301
+ transaction: constants_1.mockTransactionToEvaluate,
1302
+ operationType: 'all'
1303
+ });
1304
+ expect(origin).toEqual(mockHostOrigin);
1305
+ window.dispatchEvent(new MessageEvent('message', {
1306
+ origin: mockHostOrigin,
1307
+ data: {
1308
+ type: 'portal:evaluateTransactionResult',
1309
+ data: res
1310
+ },
1311
+ }));
1312
+ });
1313
+ mpc.evaluateTransaction('eip155:1', constants_1.mockTransactionToEvaluate, 'all').then((data) => {
1314
+ expect(data).toEqual(res);
1315
+ done();
1316
+ }).catch((_) => {
1317
+ expect(0).toEqual(1);
1318
+ done();
1319
+ });
1320
+ });
1321
+ it('should error out if the iframe sends an error message', (done) => {
1322
+ var _a;
1323
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
1324
+ .mockImplementationOnce((message, origin) => {
1325
+ const { type, data } = message;
1326
+ expect(type).toEqual('portal:evaluateTransaction');
1327
+ expect(data).toEqual({
1328
+ chainId: 'eip155:1',
1329
+ transaction: constants_1.mockTransactionToEvaluate,
1330
+ operationType: 'all'
1331
+ });
1332
+ expect(origin).toEqual(mockHostOrigin);
1333
+ window.dispatchEvent(new MessageEvent('message', {
1334
+ origin: mockHostOrigin,
1335
+ data: {
1336
+ type: 'portal:evaluateTransactionError',
1337
+ data: {
1338
+ code: 1,
1339
+ message: 'test'
1340
+ }
1341
+ },
1342
+ }));
1343
+ });
1344
+ mpc.evaluateTransaction('eip155:1', constants_1.mockTransactionToEvaluate, 'all').then(() => {
1345
+ expect(0).toEqual(1);
1346
+ done();
1347
+ }).catch((e) => {
1348
+ expect(e).toBeInstanceOf(errors_1.PortalMpcError);
1349
+ expect(e.message).toEqual('test');
1350
+ expect(e.code).toEqual(1);
1351
+ done();
1352
+ });
1353
+ });
1354
+ });
1355
+ describe('storedClientBackupShare', () => {
1356
+ it('should successfully return the stored client backup share', (done) => {
1357
+ var _a;
1358
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
1359
+ .mockImplementation((message, origin) => {
1360
+ const { type, data } = message;
1361
+ expect(type).toEqual('portal:storedClientBackupShare');
1362
+ expect(data).toEqual({
1363
+ success: true, backupMethod: index_1.BackupMethods.password
1364
+ });
1365
+ expect(origin).toEqual(mockHostOrigin);
1366
+ window.dispatchEvent(new MessageEvent('message', {
1367
+ origin: mockHostOrigin,
1368
+ data: {
1369
+ type: 'portal:storedClientBackupShareResult',
1370
+ data: true
1371
+ },
1372
+ }));
1373
+ });
1374
+ mpc.storedClientBackupShare(true, index_1.BackupMethods.password).then((data) => {
1375
+ expect(data).toEqual(undefined);
1376
+ done();
1377
+ }).catch((_) => {
1378
+ expect(0).toEqual(1);
1379
+ done();
1380
+ });
1381
+ });
1382
+ it('should error out if the iframe sends an error message', (done) => {
1383
+ var _a;
1384
+ jest.spyOn((_a = mpc.iframe) === null || _a === void 0 ? void 0 : _a.contentWindow, 'postMessage')
1385
+ .mockImplementationOnce((message, origin) => {
1386
+ const { type, data } = message;
1387
+ expect(type).toEqual('portal:storedClientBackupShare');
1388
+ expect(data).toEqual({
1389
+ success: true, backupMethod: index_1.BackupMethods.password
1390
+ });
1391
+ expect(origin).toEqual(mockHostOrigin);
1392
+ window.dispatchEvent(new MessageEvent('message', {
1393
+ origin: mockHostOrigin,
1394
+ data: {
1395
+ type: 'portal:storedClientBackupShareError',
1396
+ data: {
1397
+ code: 1,
1398
+ message: 'test'
1399
+ }
1400
+ },
1401
+ }));
1402
+ });
1403
+ mpc.storedClientBackupShare(true, index_1.BackupMethods.password).then(() => {
1404
+ expect(0).toEqual(1);
1405
+ done();
1406
+ }).catch((e) => {
1407
+ expect(e).toBeInstanceOf(errors_1.PortalMpcError);
1408
+ expect(e.message).toEqual('test');
1409
+ expect(e.code).toEqual(1);
1410
+ done();
1411
+ });
1412
+ });
1413
+ });
1414
+ });