@canton-network/wallet-gateway-remote 0.26.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dapp-api/controller.d.ts.map +1 -1
- package/dist/dapp-api/controller.js +3 -1
- package/dist/ledger/transaction-service.d.ts.map +1 -1
- package/dist/ledger/transaction-service.js +25 -16
- package/dist/ledger/wallet-sync-service.d.ts +2 -1
- package/dist/ledger/wallet-sync-service.d.ts.map +1 -1
- package/dist/ledger/wallet-sync-service.js +64 -48
- package/dist/ledger/wallet-sync-service.test.js +169 -50
- package/dist/user-api/controller.d.ts.map +1 -1
- package/dist/user-api/controller.js +10 -7
- package/dist/user-api/rpc-gen/typings.d.ts +30 -7
- package/dist/user-api/rpc-gen/typings.d.ts.map +1 -1
- package/dist/web/frontend/404/index.html +2 -2
- package/dist/web/frontend/activities/index.html +3 -3
- package/dist/web/frontend/approve/index.html +5 -5
- package/dist/web/frontend/assets/404-CEXKCUlr.js +5 -0
- package/dist/web/frontend/assets/{activities-BdSUE0hv.js → activities-CPXS4OC3.js} +4 -3
- package/dist/web/frontend/assets/addIdentityProvider-BJjhu--M.js +28 -0
- package/dist/web/frontend/assets/{addNetwork-B4FpgV7D.js → addNetwork-B0olMmyv.js} +3 -3
- package/dist/web/frontend/assets/{addParty-D-UmQ0Oh.js → addParty-PUjps7Ie.js} +3 -3
- package/dist/web/frontend/assets/approve-CARzty9R.js +21 -0
- package/dist/web/frontend/assets/{callback-CXLUjUAK.js → callback-BqE26RlP.js} +1 -1
- package/dist/web/frontend/assets/{identityProviders-CtFhI1gg.js → identityProviders-Cnx8VIsD.js} +2 -2
- package/dist/web/frontend/assets/{index-dDAXt5F2.js → index-CgsIALyR.js} +1 -1
- package/dist/web/frontend/assets/index-UdyYJ_nU.js +4011 -0
- package/dist/web/frontend/assets/{index-DFhaSBOK.js → index-nOmkqkbK.js} +3 -3
- package/dist/web/frontend/assets/{login-CmwQEYxS.js → login-CkpIib74.js} +2 -2
- package/dist/web/frontend/assets/{networks-f8gSZxSb.js → networks-D7iP_lGh.js} +2 -2
- package/dist/web/frontend/assets/reviewIdentityProvider-BRb38sGH.js +43 -0
- package/dist/web/frontend/assets/{reviewNetwork-D3QSssLB.js → reviewNetwork-BVdYGugz.js} +3 -3
- package/dist/web/frontend/assets/{settings-Cc-Ij_uP.js → settings-CxEU64oG.js} +2 -2
- package/dist/web/frontend/assets/state-CypMU0cY.js +1 -0
- package/dist/web/frontend/assets/{utils-CVOqcw_M.js → utils-V1qa66Nv.js} +1 -1
- package/dist/web/frontend/callback/index.html +2 -2
- package/dist/web/frontend/identity-providers/add/index.html +3 -3
- package/dist/web/frontend/identity-providers/index.html +3 -3
- package/dist/web/frontend/identity-providers/review/index.html +3 -3
- package/dist/web/frontend/index.html +1 -1
- package/dist/web/frontend/login/index.html +4 -4
- package/dist/web/frontend/networks/add/index.html +3 -3
- package/dist/web/frontend/networks/index.html +3 -3
- package/dist/web/frontend/networks/review/index.html +3 -3
- package/dist/web/frontend/parties/add/index.html +5 -5
- package/dist/web/frontend/parties/index.html +4 -4
- package/dist/web/frontend/settings/index.html +3 -3
- package/package.json +19 -19
- package/dist/web/frontend/assets/404-CEw-fKbi.js +0 -5
- package/dist/web/frontend/assets/addIdentityProvider-Bzz1fUGn.js +0 -35
- package/dist/web/frontend/assets/approve-DP3Lfyhw.js +0 -21
- package/dist/web/frontend/assets/index-BuC7gGqj.js +0 -3942
- package/dist/web/frontend/assets/reviewIdentityProvider-CJFOHumn.js +0 -43
- package/dist/web/frontend/assets/state-CZ6wI2d4.js +0 -1
|
@@ -9,6 +9,7 @@ import { ParticipantSigningDriver } from '@canton-network/core-signing-participa
|
|
|
9
9
|
import { StoreSql, connection, migrator, } from '@canton-network/core-signing-store-sql';
|
|
10
10
|
import { PartyLevelRight, } from '@canton-network/core-wallet-store';
|
|
11
11
|
import { StoreInternal } from '@canton-network/core-wallet-store-inmemory';
|
|
12
|
+
import { WALLET_DISABLED_REASON } from '@canton-network/core-types';
|
|
12
13
|
import { WalletSyncService } from './wallet-sync-service.js';
|
|
13
14
|
import { PartyAllocationService } from './party-allocation-service.js';
|
|
14
15
|
const { mockLedgerGet } = vi.hoisted(() => ({
|
|
@@ -24,8 +25,8 @@ vi.mock('@canton-network/core-ledger-client', () => ({
|
|
|
24
25
|
}));
|
|
25
26
|
// Test subclass to expose protected method
|
|
26
27
|
class TestableWalletSyncService extends WalletSyncService {
|
|
27
|
-
async resolveSigningProvider(
|
|
28
|
-
return super.resolveSigningProvider(
|
|
28
|
+
async resolveSigningProvider(partyNamespace, participantNamespace) {
|
|
29
|
+
return super.resolveSigningProvider(partyNamespace, participantNamespace);
|
|
29
30
|
}
|
|
30
31
|
}
|
|
31
32
|
const testATP = (user, token) => ({
|
|
@@ -90,11 +91,7 @@ describe('WalletSyncService - resolveSigningProvider', () => {
|
|
|
90
91
|
});
|
|
91
92
|
it('resolves participant when namespace matches participant namespace', async () => {
|
|
92
93
|
const participantNamespace = 'participant-namespace-123';
|
|
93
|
-
const
|
|
94
|
-
mockLedgerGet.mockResolvedValueOnce({
|
|
95
|
-
participantId,
|
|
96
|
-
});
|
|
97
|
-
const result = await service.resolveSigningProvider(participantNamespace);
|
|
94
|
+
const result = await service.resolveSigningProvider(participantNamespace, participantNamespace);
|
|
98
95
|
expect(result).not.toBeNull();
|
|
99
96
|
expect(result).toEqual({
|
|
100
97
|
matched: true,
|
|
@@ -112,10 +109,8 @@ describe('WalletSyncService - resolveSigningProvider', () => {
|
|
|
112
109
|
throw new Error(`Failed to create key in test: ${key.error_description}`);
|
|
113
110
|
}
|
|
114
111
|
const namespace = partyAllocator.createFingerprintFromKey(key.publicKey);
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
});
|
|
118
|
-
const result = await service.resolveSigningProvider(namespace);
|
|
112
|
+
const differentParticipantNamespace = 'different-participant-namespace';
|
|
113
|
+
const result = await service.resolveSigningProvider(namespace, differentParticipantNamespace);
|
|
119
114
|
expect(result).not.toBeNull();
|
|
120
115
|
if (result) {
|
|
121
116
|
expect(result.signingProviderId).toBe(SigningProvider.WALLET_KERNEL);
|
|
@@ -149,10 +144,8 @@ describe('WalletSyncService - resolveSigningProvider', () => {
|
|
|
149
144
|
const serviceWithFireblocks = new TestableWalletSyncService(store, ledgerClient, authContext, mockLogger, {
|
|
150
145
|
[SigningProvider.FIREBLOCKS]: mockFireblocksDriver,
|
|
151
146
|
}, partyAllocator);
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
});
|
|
155
|
-
const result = await serviceWithFireblocks.resolveSigningProvider(namespace);
|
|
147
|
+
const differentParticipantNamespace = 'different-participant-namespace';
|
|
148
|
+
const result = await serviceWithFireblocks.resolveSigningProvider(namespace, differentParticipantNamespace);
|
|
156
149
|
expect(result).not.toBeNull();
|
|
157
150
|
if (result) {
|
|
158
151
|
expect(result.signingProviderId).toBe(SigningProvider.FIREBLOCKS);
|
|
@@ -161,12 +154,10 @@ describe('WalletSyncService - resolveSigningProvider', () => {
|
|
|
161
154
|
}
|
|
162
155
|
}
|
|
163
156
|
});
|
|
164
|
-
it('returns unmatched
|
|
157
|
+
it('returns unmatched and defaults to participant when no signing provider match is found', async () => {
|
|
165
158
|
const unknownNamespace = 'unknown-namespace-123';
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
});
|
|
169
|
-
const result = await service.resolveSigningProvider(unknownNamespace);
|
|
159
|
+
const differentParticipantNamespace = 'different-participant-namespace';
|
|
160
|
+
const result = await service.resolveSigningProvider(unknownNamespace, differentParticipantNamespace);
|
|
170
161
|
expect(result).toEqual({
|
|
171
162
|
matched: false,
|
|
172
163
|
signingProviderId: SigningProvider.PARTICIPANT,
|
|
@@ -309,6 +300,9 @@ describe('WalletSyncService - multi-network features', () => {
|
|
|
309
300
|
await store.addWallet(createWallet('party1::namespace', 'network1'));
|
|
310
301
|
const addWalletSpy = vi.spyOn(store, 'addWallet');
|
|
311
302
|
mockLedgerGet
|
|
303
|
+
.mockResolvedValueOnce({
|
|
304
|
+
participantId: 'participant1::namespace',
|
|
305
|
+
})
|
|
312
306
|
.mockResolvedValueOnce({
|
|
313
307
|
rights: [
|
|
314
308
|
{
|
|
@@ -330,9 +324,6 @@ describe('WalletSyncService - multi-network features', () => {
|
|
|
330
324
|
},
|
|
331
325
|
},
|
|
332
326
|
],
|
|
333
|
-
})
|
|
334
|
-
.mockResolvedValueOnce({
|
|
335
|
-
participantId: 'participant1::namespace',
|
|
336
327
|
});
|
|
337
328
|
await service.syncWallets();
|
|
338
329
|
// Should only add wallet for party3 (party1 already exists)
|
|
@@ -346,6 +337,9 @@ describe('WalletSyncService - multi-network features', () => {
|
|
|
346
337
|
await setSession('network1');
|
|
347
338
|
// Mock ledger client to return rights for party1
|
|
348
339
|
mockLedgerGet
|
|
340
|
+
.mockResolvedValueOnce({
|
|
341
|
+
participantId: 'participant1::namespace',
|
|
342
|
+
})
|
|
349
343
|
.mockResolvedValueOnce({
|
|
350
344
|
rights: [
|
|
351
345
|
{
|
|
@@ -358,9 +352,6 @@ describe('WalletSyncService - multi-network features', () => {
|
|
|
358
352
|
},
|
|
359
353
|
},
|
|
360
354
|
],
|
|
361
|
-
})
|
|
362
|
-
.mockResolvedValueOnce({
|
|
363
|
-
participantId: 'participant1::namespace',
|
|
364
355
|
});
|
|
365
356
|
await service.syncWallets();
|
|
366
357
|
// Should add party1 for network1
|
|
@@ -421,7 +412,11 @@ describe('WalletSyncService - multi-network features', () => {
|
|
|
421
412
|
// Sync on network1 (party already exists, should not add)
|
|
422
413
|
await setSession('network1');
|
|
423
414
|
// Only need one mock since resolveSigningProvider won't be called if party already exists
|
|
424
|
-
mockLedgerGet
|
|
415
|
+
mockLedgerGet
|
|
416
|
+
.mockResolvedValueOnce({
|
|
417
|
+
participantId: 'participant1::namespace',
|
|
418
|
+
})
|
|
419
|
+
.mockResolvedValueOnce({
|
|
425
420
|
rights: [
|
|
426
421
|
{
|
|
427
422
|
kind: {
|
|
@@ -444,7 +439,11 @@ describe('WalletSyncService - multi-network features', () => {
|
|
|
444
439
|
});
|
|
445
440
|
expect(walletsBeforeSync.length).toBe(0);
|
|
446
441
|
mockLedgerGet.mockClear();
|
|
447
|
-
// First mock:
|
|
442
|
+
// First mock: resolveSigningProvider calls ledgerClient.getWithRetry('/v2/parties/participant-id')
|
|
443
|
+
mockLedgerGet.mockResolvedValueOnce({
|
|
444
|
+
participantId: 'participant1::namespace',
|
|
445
|
+
});
|
|
446
|
+
// Second mock: getPartiesRightsMap calls ledgerClient.getWithRetry('/v2/users/{user-id}/rights')
|
|
448
447
|
mockLedgerGet.mockResolvedValueOnce({
|
|
449
448
|
rights: [
|
|
450
449
|
{
|
|
@@ -458,10 +457,6 @@ describe('WalletSyncService - multi-network features', () => {
|
|
|
458
457
|
},
|
|
459
458
|
],
|
|
460
459
|
});
|
|
461
|
-
// Second mock: resolveSigningProvider calls adminLedgerClient.getWithRetry('/v2/parties/participant-id')
|
|
462
|
-
mockLedgerGet.mockResolvedValueOnce({
|
|
463
|
-
participantId: 'participant1::namespace',
|
|
464
|
-
});
|
|
465
460
|
expect(mockLedgerGet).toHaveBeenCalledTimes(0);
|
|
466
461
|
const syncResult = await service.syncWallets();
|
|
467
462
|
expect(mockLedgerGet).toHaveBeenCalledTimes(2); // Once for rights, once for participantId
|
|
@@ -530,6 +525,9 @@ describe('WalletSyncService - multi-network features', () => {
|
|
|
530
525
|
await setSession('network1');
|
|
531
526
|
await store.addWallet(createWallet('party1::namespace', 'network1'));
|
|
532
527
|
mockLedgerGet
|
|
528
|
+
.mockResolvedValueOnce({
|
|
529
|
+
participantId: 'participant1::namespace',
|
|
530
|
+
})
|
|
533
531
|
.mockResolvedValueOnce({
|
|
534
532
|
rights: [
|
|
535
533
|
{
|
|
@@ -540,12 +538,9 @@ describe('WalletSyncService - multi-network features', () => {
|
|
|
540
538
|
},
|
|
541
539
|
},
|
|
542
540
|
],
|
|
543
|
-
})
|
|
544
|
-
.mockResolvedValueOnce({
|
|
545
|
-
participantId: 'participant1::namespace',
|
|
546
541
|
});
|
|
547
542
|
const updateWalletSpy = vi.spyOn(store, 'updateWallet');
|
|
548
|
-
await service.syncWallets();
|
|
543
|
+
const result = await service.syncWallets();
|
|
549
544
|
expect(updateWalletSpy).toHaveBeenCalledWith(expect.objectContaining({
|
|
550
545
|
partyId: 'party1::namespace',
|
|
551
546
|
networkId: 'network1',
|
|
@@ -554,6 +549,11 @@ describe('WalletSyncService - multi-network features', () => {
|
|
|
554
549
|
const wallets = await store.getWallets();
|
|
555
550
|
const party1Wallet = wallets.find((w) => w.partyId === 'party1::namespace');
|
|
556
551
|
expect(party1Wallet?.status).toBe('initialized');
|
|
552
|
+
expect(result.added.length).toBe(1);
|
|
553
|
+
expect(result.updated.length).toBe(1);
|
|
554
|
+
expect(result.disabled.length).toBe(0);
|
|
555
|
+
expect(result.added[0].partyId).toBe('party2::namespace');
|
|
556
|
+
expect(result.updated[0].partyId).toBe('party1::namespace');
|
|
557
557
|
});
|
|
558
558
|
it('syncWallets skips wallet when status is already initialized', async () => {
|
|
559
559
|
const network1 = createNetwork('network1');
|
|
@@ -563,6 +563,9 @@ describe('WalletSyncService - multi-network features', () => {
|
|
|
563
563
|
initializedWallet.status = 'initialized';
|
|
564
564
|
await store.addWallet(initializedWallet);
|
|
565
565
|
mockLedgerGet
|
|
566
|
+
.mockResolvedValueOnce({
|
|
567
|
+
participantId: 'participant1::namespace',
|
|
568
|
+
})
|
|
566
569
|
.mockResolvedValueOnce({
|
|
567
570
|
rights: [
|
|
568
571
|
{
|
|
@@ -573,16 +576,17 @@ describe('WalletSyncService - multi-network features', () => {
|
|
|
573
576
|
},
|
|
574
577
|
},
|
|
575
578
|
],
|
|
576
|
-
})
|
|
577
|
-
.mockResolvedValueOnce({
|
|
578
|
-
participantId: 'participant1::namespace',
|
|
579
579
|
});
|
|
580
580
|
const updateWalletSpy = vi.spyOn(store, 'updateWallet');
|
|
581
|
-
await service.syncWallets();
|
|
581
|
+
const result = await service.syncWallets();
|
|
582
582
|
expect(updateWalletSpy).not.toHaveBeenCalled();
|
|
583
583
|
const wallets = await store.getWallets();
|
|
584
584
|
const party1Wallet = wallets.find((w) => w.partyId === 'party1::namespace');
|
|
585
585
|
expect(party1Wallet?.status).toBe('initialized');
|
|
586
|
+
expect(result.added.length).toBe(1);
|
|
587
|
+
expect(result.disabled.length).toBe(0);
|
|
588
|
+
expect(result.updated.length).toBe(0);
|
|
589
|
+
expect(result.added[0].partyId).toBe('party2::namespace');
|
|
586
590
|
});
|
|
587
591
|
it('syncWallets marks multiple wallets as initialized when parties not on ledger', async () => {
|
|
588
592
|
const network1 = createNetwork('network1');
|
|
@@ -591,6 +595,9 @@ describe('WalletSyncService - multi-network features', () => {
|
|
|
591
595
|
await store.addWallet(createWallet('party1::namespace', 'network1'));
|
|
592
596
|
await store.addWallet(createWallet('party2::namespace', 'network1'));
|
|
593
597
|
mockLedgerGet
|
|
598
|
+
.mockResolvedValueOnce({
|
|
599
|
+
participantId: 'participant1::namespace',
|
|
600
|
+
})
|
|
594
601
|
.mockResolvedValueOnce({
|
|
595
602
|
rights: [
|
|
596
603
|
{
|
|
@@ -601,12 +608,9 @@ describe('WalletSyncService - multi-network features', () => {
|
|
|
601
608
|
},
|
|
602
609
|
},
|
|
603
610
|
],
|
|
604
|
-
})
|
|
605
|
-
.mockResolvedValueOnce({
|
|
606
|
-
participantId: 'participant1::namespace',
|
|
607
611
|
});
|
|
608
612
|
const updateWalletSpy = vi.spyOn(store, 'updateWallet');
|
|
609
|
-
await service.syncWallets();
|
|
613
|
+
const result = await service.syncWallets();
|
|
610
614
|
expect(updateWalletSpy).toHaveBeenCalledTimes(2);
|
|
611
615
|
expect(updateWalletSpy).toHaveBeenCalledWith(expect.objectContaining({
|
|
612
616
|
partyId: 'party1::namespace',
|
|
@@ -618,6 +622,10 @@ describe('WalletSyncService - multi-network features', () => {
|
|
|
618
622
|
networkId: 'network1',
|
|
619
623
|
status: 'initialized',
|
|
620
624
|
}));
|
|
625
|
+
expect(result.added.length).toBe(1);
|
|
626
|
+
expect(result.disabled.length).toBe(0);
|
|
627
|
+
expect(result.updated.length).toBe(2);
|
|
628
|
+
expect(result.added[0].partyId).toBe('party3::namespace');
|
|
621
629
|
});
|
|
622
630
|
it('syncWallets disables participant wallet when party not on ledger', async () => {
|
|
623
631
|
const network1 = createNetwork('network1');
|
|
@@ -627,6 +635,9 @@ describe('WalletSyncService - multi-network features', () => {
|
|
|
627
635
|
participantWallet.signingProviderId = SigningProvider.PARTICIPANT;
|
|
628
636
|
await store.addWallet(participantWallet);
|
|
629
637
|
mockLedgerGet
|
|
638
|
+
.mockResolvedValueOnce({
|
|
639
|
+
participantId: 'participant1::namespace',
|
|
640
|
+
})
|
|
630
641
|
.mockResolvedValueOnce({
|
|
631
642
|
rights: [
|
|
632
643
|
{
|
|
@@ -637,12 +648,9 @@ describe('WalletSyncService - multi-network features', () => {
|
|
|
637
648
|
},
|
|
638
649
|
},
|
|
639
650
|
],
|
|
640
|
-
})
|
|
641
|
-
.mockResolvedValueOnce({
|
|
642
|
-
participantId: 'participant1::namespace',
|
|
643
651
|
});
|
|
644
652
|
const updateWalletSpy = vi.spyOn(store, 'updateWallet');
|
|
645
|
-
await service.syncWallets();
|
|
653
|
+
const result = await service.syncWallets();
|
|
646
654
|
expect(updateWalletSpy).toHaveBeenCalledWith(expect.objectContaining({
|
|
647
655
|
partyId: 'party1::namespace',
|
|
648
656
|
networkId: 'network1',
|
|
@@ -653,6 +661,91 @@ describe('WalletSyncService - multi-network features', () => {
|
|
|
653
661
|
const party1Wallet = wallets.find((w) => w.partyId === 'party1::namespace');
|
|
654
662
|
expect(party1Wallet?.disabled).toBe(true);
|
|
655
663
|
expect(party1Wallet?.reason).toBe('participant namespace changed');
|
|
664
|
+
expect(result.added.length).toBe(1);
|
|
665
|
+
expect(result.updated.length).toBe(0);
|
|
666
|
+
expect(result.disabled.length).toBe(1);
|
|
667
|
+
expect(result.added[0].partyId).toBe('party2::namespace');
|
|
668
|
+
expect(result.disabled[0].partyId).toBe('party1::namespace');
|
|
669
|
+
});
|
|
670
|
+
it('syncWallets reports proper changes while adding a wallet when there are disabled wallets', async () => {
|
|
671
|
+
const network1 = createNetwork('network1');
|
|
672
|
+
await store.addNetwork(network1);
|
|
673
|
+
await setSession('network1');
|
|
674
|
+
const disabledWallet = createWallet('party1::namespace', 'network1', true);
|
|
675
|
+
await store.addWallet(disabledWallet);
|
|
676
|
+
mockLedgerGet
|
|
677
|
+
.mockResolvedValueOnce({
|
|
678
|
+
participantId: 'participant1::namespace',
|
|
679
|
+
})
|
|
680
|
+
.mockResolvedValueOnce({
|
|
681
|
+
rights: [
|
|
682
|
+
{
|
|
683
|
+
kind: {
|
|
684
|
+
CanActAs: {
|
|
685
|
+
value: { party: 'party2::namespace' },
|
|
686
|
+
},
|
|
687
|
+
},
|
|
688
|
+
},
|
|
689
|
+
],
|
|
690
|
+
});
|
|
691
|
+
const updateWalletSpy = vi.spyOn(store, 'updateWallet');
|
|
692
|
+
const addWalletSpy = vi.spyOn(store, 'addWallet');
|
|
693
|
+
const result = await service.syncWallets();
|
|
694
|
+
expect(updateWalletSpy).not.toHaveBeenCalled();
|
|
695
|
+
expect(addWalletSpy).toHaveBeenCalledWith(expect.objectContaining({
|
|
696
|
+
partyId: 'party2::namespace',
|
|
697
|
+
networkId: 'network1',
|
|
698
|
+
disabled: false,
|
|
699
|
+
}));
|
|
700
|
+
const wallets = await store.getWallets();
|
|
701
|
+
const party1Wallet = wallets.find((w) => w.partyId === 'party1::namespace');
|
|
702
|
+
expect(party1Wallet?.disabled).toBe(true);
|
|
703
|
+
expect(result.added.length).toBe(1);
|
|
704
|
+
expect(result.updated.length).toBe(0);
|
|
705
|
+
expect(result.disabled.length).toBe(0);
|
|
706
|
+
expect(result.added[0].partyId).toBe('party2::namespace');
|
|
707
|
+
});
|
|
708
|
+
it('syncWallets reports proper changes while adding a disabled wallet when there are disabled wallets', async () => {
|
|
709
|
+
const network1 = createNetwork('network1');
|
|
710
|
+
await store.addNetwork(network1);
|
|
711
|
+
await setSession('network1');
|
|
712
|
+
const disabledWallet = createWallet('party1::unknown-namespace-123', 'network1', true);
|
|
713
|
+
await store.addWallet(disabledWallet);
|
|
714
|
+
mockLedgerGet
|
|
715
|
+
.mockResolvedValueOnce({
|
|
716
|
+
participantId: 'participant1::namespace',
|
|
717
|
+
})
|
|
718
|
+
.mockResolvedValueOnce({
|
|
719
|
+
rights: [
|
|
720
|
+
{
|
|
721
|
+
kind: {
|
|
722
|
+
CanActAs: {
|
|
723
|
+
value: {
|
|
724
|
+
party: 'party2::unknown-namespace-123',
|
|
725
|
+
},
|
|
726
|
+
},
|
|
727
|
+
},
|
|
728
|
+
},
|
|
729
|
+
],
|
|
730
|
+
});
|
|
731
|
+
const updateWalletSpy = vi.spyOn(store, 'updateWallet');
|
|
732
|
+
const addWalletSpy = vi.spyOn(store, 'addWallet');
|
|
733
|
+
const result = await service.syncWallets();
|
|
734
|
+
expect(updateWalletSpy).not.toHaveBeenCalled();
|
|
735
|
+
expect(addWalletSpy).toHaveBeenCalledWith(expect.objectContaining({
|
|
736
|
+
partyId: 'party2::unknown-namespace-123',
|
|
737
|
+
networkId: 'network1',
|
|
738
|
+
disabled: true,
|
|
739
|
+
reason: WALLET_DISABLED_REASON.NO_SIGNING_PROVIDER_MATCHED,
|
|
740
|
+
}));
|
|
741
|
+
const wallets = await store.getWallets();
|
|
742
|
+
const party1Wallet = wallets.find((w) => w.partyId === 'party2::unknown-namespace-123');
|
|
743
|
+
expect(party1Wallet?.disabled).toBe(true);
|
|
744
|
+
expect(party1Wallet?.reason).toBe(WALLET_DISABLED_REASON.NO_SIGNING_PROVIDER_MATCHED);
|
|
745
|
+
expect(result.added.length).toBe(0);
|
|
746
|
+
expect(result.updated.length).toBe(0);
|
|
747
|
+
expect(result.disabled.length).toBe(1);
|
|
748
|
+
expect(result.disabled[0].partyId).toBe('party2::unknown-namespace-123');
|
|
656
749
|
});
|
|
657
750
|
});
|
|
658
751
|
describe('Wallet sync - rights tracking', () => {
|
|
@@ -688,7 +781,15 @@ describe('WalletSyncService - multi-network features', () => {
|
|
|
688
781
|
...createWallet('party1::namespace', 'network1'),
|
|
689
782
|
rights: [PartyLevelRight.CanActAs],
|
|
690
783
|
});
|
|
691
|
-
|
|
784
|
+
await store.addWallet({
|
|
785
|
+
...createWallet('party3::namespace', 'network1'),
|
|
786
|
+
rights: [PartyLevelRight.CanActAs],
|
|
787
|
+
});
|
|
788
|
+
mockLedgerGet
|
|
789
|
+
.mockResolvedValueOnce({
|
|
790
|
+
participantId: 'participant1::namespace',
|
|
791
|
+
})
|
|
792
|
+
.mockResolvedValueOnce({
|
|
692
793
|
rights: [
|
|
693
794
|
{
|
|
694
795
|
kind: {
|
|
@@ -699,6 +800,15 @@ describe('WalletSyncService - multi-network features', () => {
|
|
|
699
800
|
},
|
|
700
801
|
},
|
|
701
802
|
},
|
|
803
|
+
{
|
|
804
|
+
kind: {
|
|
805
|
+
CanActAs: {
|
|
806
|
+
value: {
|
|
807
|
+
party: 'party2::namespace',
|
|
808
|
+
},
|
|
809
|
+
},
|
|
810
|
+
},
|
|
811
|
+
},
|
|
702
812
|
],
|
|
703
813
|
});
|
|
704
814
|
const result = await service.syncWallets();
|
|
@@ -711,12 +821,21 @@ describe('WalletSyncService - multi-network features', () => {
|
|
|
711
821
|
const wallets = await store.getWallets();
|
|
712
822
|
const updatedWallet = wallets.find((w) => w.partyId === 'party1::namespace');
|
|
713
823
|
expect(updatedWallet?.rights).toEqual([PartyLevelRight.CanReadAs]);
|
|
824
|
+
// party2 wallet added
|
|
825
|
+
expect(result.added.length).toBe(1);
|
|
826
|
+
// party1 wallet updated rights
|
|
827
|
+
// party3 wallet updated to initialized (no rights)
|
|
828
|
+
expect(result.updated.length).toBe(2);
|
|
714
829
|
});
|
|
715
830
|
it('syncWallets does not create wallets from CanReadAsAnyParty alone', async () => {
|
|
716
831
|
const network1 = createNetwork('network1');
|
|
717
832
|
await store.addNetwork(network1);
|
|
718
833
|
await setSession('network1');
|
|
719
|
-
mockLedgerGet
|
|
834
|
+
mockLedgerGet
|
|
835
|
+
.mockResolvedValueOnce({
|
|
836
|
+
participantId: 'participant1::namespace',
|
|
837
|
+
})
|
|
838
|
+
.mockResolvedValueOnce({
|
|
720
839
|
rights: [
|
|
721
840
|
{
|
|
722
841
|
kind: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/user-api/controller.ts"],"names":[],"mappings":"AA6BA,OAAO,EAAE,KAAK,EAAW,MAAM,mCAAmC,CAAA;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA;AAC5E,OAAO,EAEH,WAAW,EAKd,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EACH,sBAAsB,EACtB,eAAe,EAClB,MAAM,kCAAkC,CAAA;AASzC,KAAK,uBAAuB,GAAG,OAAO,CAClC,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAClD,CAAA;AAED,eAAO,MAAM,cAAc,GACvB,YAAY,UAAU,EACtB,SAAS,MAAM,EACf,OAAO,KAAK,EACZ,qBAAqB,mBAAmB,EACxC,aAAa,WAAW,GAAG,SAAS,EACpC,SAAS,uBAAuB,EAChC,SAAS,MAAM,EACf,cAAc,MAAM;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/user-api/controller.ts"],"names":[],"mappings":"AA6BA,OAAO,EAAE,KAAK,EAAW,MAAM,mCAAmC,CAAA;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA;AAC5E,OAAO,EAEH,WAAW,EAKd,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EACH,sBAAsB,EACtB,eAAe,EAClB,MAAM,kCAAkC,CAAA;AASzC,KAAK,uBAAuB,GAAG,OAAO,CAClC,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAClD,CAAA;AAED,eAAO,MAAM,cAAc,GACvB,YAAY,UAAU,EACtB,SAAS,MAAM,EACf,OAAO,KAAK,EACZ,qBAAqB,mBAAmB,EACxC,aAAa,WAAW,GAAG,SAAS,EACpC,SAAS,uBAAuB,EAChC,SAAS,MAAM,EACf,cAAc,MAAM;;;;;;;;;;;;;;;;;;;;;;;CAowBvB,CAAA"}
|
|
@@ -250,9 +250,10 @@ export const userController = (kernelInfo, userUrl, store, notificationService,
|
|
|
250
250
|
}
|
|
251
251
|
},
|
|
252
252
|
execute: async (executeParams) => {
|
|
253
|
-
const
|
|
253
|
+
const wallets = await store.getWallets();
|
|
254
254
|
const network = await store.getCurrentNetwork();
|
|
255
|
-
const transaction = await store.getTransaction(executeParams.
|
|
255
|
+
const transaction = await store.getTransaction(executeParams.transactionId);
|
|
256
|
+
const wallet = wallets.find((w) => w.partyId === executeParams.partyId);
|
|
256
257
|
if (wallet === undefined) {
|
|
257
258
|
throw new Error('No primary wallet found');
|
|
258
259
|
}
|
|
@@ -461,11 +462,12 @@ export const userController = (kernelInfo, userUrl, store, notificationService,
|
|
|
461
462
|
return { walletSyncNeeded };
|
|
462
463
|
},
|
|
463
464
|
getTransaction: async (params) => {
|
|
464
|
-
const transaction = await store.getTransaction(params.
|
|
465
|
+
const transaction = await store.getTransaction(params.transactionId);
|
|
465
466
|
if (!transaction) {
|
|
466
|
-
throw new Error(`Transaction not found with
|
|
467
|
+
throw new Error(`Transaction not found with id: ${params.transactionId}`);
|
|
467
468
|
}
|
|
468
469
|
return {
|
|
470
|
+
id: transaction.id,
|
|
469
471
|
commandId: transaction.commandId,
|
|
470
472
|
status: transaction.status,
|
|
471
473
|
preparedTransaction: transaction.preparedTransaction,
|
|
@@ -490,6 +492,7 @@ export const userController = (kernelInfo, userUrl, store, notificationService,
|
|
|
490
492
|
listTransactions: async function () {
|
|
491
493
|
const transactions = await store.listTransactions();
|
|
492
494
|
const txs = transactions.map((transaction) => ({
|
|
495
|
+
id: transaction.id,
|
|
493
496
|
commandId: transaction.commandId,
|
|
494
497
|
status: transaction.status,
|
|
495
498
|
preparedTransaction: transaction.preparedTransaction,
|
|
@@ -513,14 +516,14 @@ export const userController = (kernelInfo, userUrl, store, notificationService,
|
|
|
513
516
|
return { transactions: txs };
|
|
514
517
|
},
|
|
515
518
|
deleteTransaction: async (params) => {
|
|
516
|
-
const transaction = await store.getTransaction(params.
|
|
519
|
+
const transaction = await store.getTransaction(params.transactionId);
|
|
517
520
|
if (!transaction) {
|
|
518
|
-
throw new Error(`Transaction not found with
|
|
521
|
+
throw new Error(`Transaction not found with id: ${params.transactionId}`);
|
|
519
522
|
}
|
|
520
523
|
if (transaction.status !== 'pending') {
|
|
521
524
|
throw new Error(`Cannot delete transaction with status '${transaction.status}'. Only pending transactions can be deleted.`);
|
|
522
525
|
}
|
|
523
|
-
await store.removeTransaction(
|
|
526
|
+
await store.removeTransaction(transaction.id);
|
|
524
527
|
return null;
|
|
525
528
|
},
|
|
526
529
|
});
|
|
@@ -150,10 +150,10 @@ export interface WalletFilter {
|
|
|
150
150
|
}
|
|
151
151
|
/**
|
|
152
152
|
*
|
|
153
|
-
* The
|
|
153
|
+
* The internal transaction identifier.
|
|
154
154
|
*
|
|
155
155
|
*/
|
|
156
|
-
export type
|
|
156
|
+
export type TransactionId = string;
|
|
157
157
|
export type Signature = string;
|
|
158
158
|
export type SignedBy = string;
|
|
159
159
|
export type Networks = Network[];
|
|
@@ -233,8 +233,23 @@ export interface Wallet {
|
|
|
233
233
|
reason?: Reason;
|
|
234
234
|
rights: Rights;
|
|
235
235
|
}
|
|
236
|
+
/**
|
|
237
|
+
*
|
|
238
|
+
* Non-disabled wallets added in this syncWallets call.
|
|
239
|
+
*
|
|
240
|
+
*/
|
|
236
241
|
export type SyncWalletsResultAdded = Wallet[];
|
|
242
|
+
/**
|
|
243
|
+
*
|
|
244
|
+
* Existing wallets that either got downgraded to status initialized or their rights changed in this syncWallets call.
|
|
245
|
+
*
|
|
246
|
+
*/
|
|
237
247
|
export type SyncWalletsResultUpdated = Wallet[];
|
|
248
|
+
/**
|
|
249
|
+
*
|
|
250
|
+
* Either wallets added in this iteration that are disabled, or existing wallet that were updated to be disabled in this syncWallets call.
|
|
251
|
+
*
|
|
252
|
+
*/
|
|
238
253
|
export type SyncWalletsResultDisabled = Wallet[];
|
|
239
254
|
/**
|
|
240
255
|
*
|
|
@@ -296,6 +311,12 @@ export interface Session {
|
|
|
296
311
|
rights: Rights;
|
|
297
312
|
}
|
|
298
313
|
export type Sessions = Session[];
|
|
314
|
+
/**
|
|
315
|
+
*
|
|
316
|
+
* The unique identifier of the command associated with the transaction.
|
|
317
|
+
*
|
|
318
|
+
*/
|
|
319
|
+
export type CommandId = string;
|
|
299
320
|
/**
|
|
300
321
|
*
|
|
301
322
|
* The timestamp when the transaction was created.
|
|
@@ -333,6 +354,7 @@ export type Payload = string;
|
|
|
333
354
|
*/
|
|
334
355
|
export type Origin = string;
|
|
335
356
|
export interface Transaction {
|
|
357
|
+
id: TransactionId;
|
|
336
358
|
commandId: CommandId;
|
|
337
359
|
status: Status;
|
|
338
360
|
createdAt?: CreatedAt;
|
|
@@ -386,23 +408,23 @@ export interface ListWalletsParams {
|
|
|
386
408
|
filter?: WalletFilter;
|
|
387
409
|
}
|
|
388
410
|
export interface SignParams {
|
|
389
|
-
|
|
411
|
+
transactionId: TransactionId;
|
|
390
412
|
partyId: PartyId;
|
|
391
413
|
}
|
|
392
414
|
export interface ExecuteParams {
|
|
393
415
|
signature: Signature;
|
|
394
416
|
partyId: PartyId;
|
|
395
|
-
|
|
417
|
+
transactionId: TransactionId;
|
|
396
418
|
signedBy: SignedBy;
|
|
397
419
|
}
|
|
398
420
|
export interface AddSessionParams {
|
|
399
421
|
networkId: NetworkId;
|
|
400
422
|
}
|
|
401
423
|
export interface GetTransactionParams {
|
|
402
|
-
|
|
424
|
+
transactionId: TransactionId;
|
|
403
425
|
}
|
|
404
426
|
export interface DeleteTransactionParams {
|
|
405
|
-
|
|
427
|
+
transactionId: TransactionId;
|
|
406
428
|
}
|
|
407
429
|
/**
|
|
408
430
|
*
|
|
@@ -433,7 +455,7 @@ export interface RemovePartyResult {
|
|
|
433
455
|
export type ListWalletsResult = Wallet[];
|
|
434
456
|
/**
|
|
435
457
|
*
|
|
436
|
-
* Added and
|
|
458
|
+
* Added, updated and disabled wallets as a result of the sync.
|
|
437
459
|
*
|
|
438
460
|
*/
|
|
439
461
|
export interface SyncWalletsResult {
|
|
@@ -466,6 +488,7 @@ export interface ListSessionsResult {
|
|
|
466
488
|
sessions: Sessions;
|
|
467
489
|
}
|
|
468
490
|
export interface GetTransactionResult {
|
|
491
|
+
id: TransactionId;
|
|
469
492
|
commandId: CommandId;
|
|
470
493
|
status: Status;
|
|
471
494
|
createdAt?: CreatedAt;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typings.d.ts","sourceRoot":"","sources":["../../../src/user-api/rpc-gen/typings.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAA;AAC9B;;;;GAIG;AACH,MAAM,MAAM,IAAI,GAAG,MAAM,CAAA;AACzB;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAA;AAChC;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAA;AACnC;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAA;AACvC,MAAM,MAAM,MAAM,GAAG,MAAM,CAAA;AAC3B,MAAM,MAAM,KAAK,GAAG,MAAM,CAAA;AAC1B,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAA;AAC7B,MAAM,MAAM,YAAY,GAAG,MAAM,CAAA;AACjC;;;;GAIG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,CAAA;AAC3B,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAA;AAC7B;;;;GAIG;AACH,MAAM,WAAW,IAAI;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,KAAK,CAAA;IACZ,QAAQ,EAAE,QAAQ,CAAA;IAClB,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,QAAQ,CAAA;CACrB;AACD;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAA;AAC9B;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACpB,EAAE,EAAE,SAAS,CAAA;IACb,IAAI,EAAE,IAAI,CAAA;IACV,WAAW,EAAE,WAAW,CAAA;IACxB,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,kBAAkB,EAAE,kBAAkB,CAAA;IACtC,IAAI,EAAE,IAAI,CAAA;IACV,SAAS,CAAC,EAAE,IAAI,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;CACvB;AACD;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAA;AAChC;;;;GAIG;AACH,MAAM,MAAM,EAAE,GAAG,MAAM,CAAA;AACvB;;;;GAIG;AACH,MAAM,MAAM,IAAI,GAAG,GAAG,CAAA;AACtB;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAA;AAC9B;;;;GAIG;AACH,MAAM,WAAW,GAAG;IAChB,EAAE,EAAE,EAAE,CAAA;IACN,IAAI,EAAE,IAAI,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,SAAS,CAAA;CACxB;AACD;;;;GAIG;AACH,MAAM,MAAM,OAAO,GAAG,OAAO,CAAA;AAC7B;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAA;AAC9B;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAA;AACtC,MAAM,MAAM,OAAO,GAAG,MAAM,CAAA;AAC5B;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,EAAE,CAAA;AACpC;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,EAAE,CAAA;AACpD;;;;GAIG;AACH,MAAM,WAAW,YAAY;IACzB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;CAC1C;AACD;;;;GAIG;AACH,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"typings.d.ts","sourceRoot":"","sources":["../../../src/user-api/rpc-gen/typings.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>Wallet Gateway - Not found</title>
|
|
7
|
-
<script type="module" crossorigin src="../assets/404-
|
|
8
|
-
<link rel="modulepreload" crossorigin href="../assets/index-
|
|
7
|
+
<script type="module" crossorigin src="../assets/404-CEXKCUlr.js"></script>
|
|
8
|
+
<link rel="modulepreload" crossorigin href="../assets/index-UdyYJ_nU.js">
|
|
9
9
|
</head>
|
|
10
10
|
|
|
11
11
|
<body>
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>Wallet Gateway - Activities</title>
|
|
7
|
-
<script type="module" crossorigin src="../assets/activities-
|
|
8
|
-
<link rel="modulepreload" crossorigin href="../assets/index-
|
|
9
|
-
<link rel="modulepreload" crossorigin href="../assets/state-
|
|
7
|
+
<script type="module" crossorigin src="../assets/activities-CPXS4OC3.js"></script>
|
|
8
|
+
<link rel="modulepreload" crossorigin href="../assets/index-UdyYJ_nU.js">
|
|
9
|
+
<link rel="modulepreload" crossorigin href="../assets/state-CypMU0cY.js">
|
|
10
10
|
<link rel="modulepreload" crossorigin href="../assets/index-CiMGhYb1.js">
|
|
11
11
|
</head>
|
|
12
12
|
<body>
|