@canton-network/wallet-gateway-remote 0.9.1 → 0.10.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.
Files changed (58) hide show
  1. package/README.md +1 -1
  2. package/dist/config/Config.d.ts +8 -8
  3. package/dist/config/Config.js +4 -4
  4. package/dist/config/ConfigUtils.d.ts.map +1 -1
  5. package/dist/config/ConfigUtils.js +4 -2
  6. package/dist/dapp-api/controller.d.ts +1 -1
  7. package/dist/dapp-api/controller.d.ts.map +1 -1
  8. package/dist/dapp-api/controller.js +35 -19
  9. package/dist/dapp-api/rpc-gen/typings.d.ts +68 -25
  10. package/dist/dapp-api/rpc-gen/typings.d.ts.map +1 -1
  11. package/dist/dapp-api/server.d.ts.map +1 -1
  12. package/dist/dapp-api/server.js +7 -4
  13. package/dist/dapp-api/server.test.js +7 -10
  14. package/dist/example-config.d.ts +1 -1
  15. package/dist/example-config.js +1 -1
  16. package/dist/index.d.ts +1 -1
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +3 -8
  19. package/dist/init.d.ts.map +1 -1
  20. package/dist/init.js +22 -4
  21. package/dist/ledger/party-allocation-service.d.ts +7 -0
  22. package/dist/ledger/party-allocation-service.d.ts.map +1 -1
  23. package/dist/ledger/party-allocation-service.js +37 -1
  24. package/dist/ledger/party-allocation-service.test.js +3 -1
  25. package/dist/ledger/wallet-sync-service.d.ts +11 -1
  26. package/dist/ledger/wallet-sync-service.d.ts.map +1 -1
  27. package/dist/ledger/wallet-sync-service.js +121 -10
  28. package/dist/ledger/wallet-sync-service.test.d.ts +2 -0
  29. package/dist/ledger/wallet-sync-service.test.d.ts.map +1 -0
  30. package/dist/ledger/wallet-sync-service.test.js +163 -0
  31. package/dist/middleware/jsonRpcHandler.d.ts.map +1 -1
  32. package/dist/middleware/jsonRpcHandler.js +8 -0
  33. package/dist/user-api/controller.d.ts.map +1 -1
  34. package/dist/user-api/controller.js +33 -9
  35. package/dist/user-api/rpc-gen/typings.d.ts +8 -0
  36. package/dist/user-api/rpc-gen/typings.d.ts.map +1 -1
  37. package/dist/version.d.ts +2 -0
  38. package/dist/version.d.ts.map +1 -0
  39. package/dist/version.js +9 -0
  40. package/dist/web/frontend/404/index.html +2 -2
  41. package/dist/web/frontend/approve/index.html +3 -3
  42. package/dist/web/frontend/assets/{404-Dget2-k2.js → 404-D9f6dBKB.js} +1 -1
  43. package/dist/web/frontend/assets/{approve-ChuS996j.js → approve-CvvaOTF9.js} +13 -11
  44. package/dist/web/frontend/assets/{callback-2I6lJV7y.js → callback-C2tlJhDI.js} +1 -1
  45. package/dist/web/frontend/assets/{index-DyLgNi-5.js → index-ChQxMkmX.js} +25 -25
  46. package/dist/web/frontend/assets/{login-DvWCqhsk.js → login-295tArUb.js} +1 -1
  47. package/dist/web/frontend/assets/settings-DI34Qjg8.js +29 -0
  48. package/dist/web/frontend/assets/{state-Ck_F88ae.js → state-DxRr-Cgg.js} +1 -1
  49. package/dist/web/frontend/assets/{wallets-DcuGVzJf.js → wallets-CMKMTBj2.js} +1 -1
  50. package/dist/web/frontend/callback/index.html +2 -2
  51. package/dist/web/frontend/index.html +1 -1
  52. package/dist/web/frontend/login/index.html +3 -3
  53. package/dist/web/frontend/settings/index.html +3 -3
  54. package/dist/web/frontend/wallets/index.html +3 -3
  55. package/dist/web/server.d.ts.map +1 -1
  56. package/dist/web/server.js +5 -0
  57. package/package.json +17 -17
  58. package/dist/web/frontend/assets/settings-DOn2WYJx.js +0 -26
@@ -77,7 +77,9 @@ describe('PartyAllocationService', () => {
77
77
  });
78
78
  afterEach(() => jest.restoreAllMocks());
79
79
  it('allocates an internal party', async () => {
80
- mockLedgerGet.mockResolvedValueOnce({ participantId: 'participantid' });
80
+ mockLedgerGet.mockResolvedValueOnce({
81
+ participantId: 'participant1::participantid',
82
+ });
81
83
  mockLedgerPost.mockResolvedValueOnce({
82
84
  partyDetails: { party: 'party1::participantid' },
83
85
  });
@@ -1,7 +1,9 @@
1
1
  import { LedgerClient } from '@canton-network/core-ledger-client';
2
2
  import { AuthContext } from '@canton-network/core-wallet-auth';
3
3
  import { Store, Wallet } from '@canton-network/core-wallet-store';
4
+ import { SigningDriverInterface, SigningProvider } from '@canton-network/core-signing-lib';
4
5
  import { Logger } from 'pino';
6
+ import { PartyAllocationService } from './party-allocation-service.js';
5
7
  export type WalletSyncReport = {
6
8
  added: Wallet[];
7
9
  removed: Wallet[];
@@ -11,8 +13,16 @@ export declare class WalletSyncService {
11
13
  private ledgerClient;
12
14
  private authContext;
13
15
  private logger;
14
- constructor(store: Store, ledgerClient: LedgerClient, authContext: AuthContext, logger: Logger);
16
+ private signingDrivers;
17
+ private partyAllocator;
18
+ constructor(store: Store, ledgerClient: LedgerClient, authContext: AuthContext, logger: Logger, signingDrivers: Partial<Record<SigningProvider, SigningDriverInterface>> | undefined, partyAllocator: PartyAllocationService);
15
19
  run(timeoutMs: number): Promise<void>;
20
+ protected resolveSigningProvider(namespace: string): Promise<{
21
+ signingProviderId: SigningProvider.PARTICIPANT;
22
+ } | {
23
+ signingProviderId: Exclude<SigningProvider, SigningProvider.PARTICIPANT>;
24
+ publicKey: string;
25
+ } | null>;
16
26
  syncWallets(): Promise<WalletSyncReport>;
17
27
  }
18
28
  //# sourceMappingURL=wallet-sync-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wallet-sync-service.d.ts","sourceRoot":"","sources":["../../src/ledger/wallet-sync-service.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,YAAY,EAEf,MAAM,oCAAoC,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAA;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAE7B,MAAM,MAAM,gBAAgB,GAAG;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,OAAO,EAAE,MAAM,EAAE,CAAA;CACpB,CAAA;AACD,qBAAa,iBAAiB;IAEtB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,MAAM;gBAHN,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM;IAGpB,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUrC,WAAW,IAAI,OAAO,CAAC,gBAAgB,CAAC;CA+FjD"}
1
+ {"version":3,"file":"wallet-sync-service.d.ts","sourceRoot":"","sources":["../../src/ledger/wallet-sync-service.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,YAAY,EAEf,MAAM,oCAAoC,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAA;AACjE,OAAO,EACH,sBAAsB,EACtB,eAAe,EAClB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AAEtE,MAAM,MAAM,gBAAgB,GAAG;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,OAAO,EAAE,MAAM,EAAE,CAAA;CACpB,CAAA;AACD,qBAAa,iBAAiB;IAEtB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,cAAc;IAGtB,OAAO,CAAC,cAAc;gBAPd,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,OAAO,CAC3B,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAClD,YAAK,EACE,cAAc,EAAE,sBAAsB;IAG5C,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;cAU3B,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAC5D;QAAE,iBAAiB,EAAE,eAAe,CAAC,WAAW,CAAA;KAAE,GAClD;QACI,iBAAiB,EAAE,OAAO,CACtB,eAAe,EACf,eAAe,CAAC,WAAW,CAC9B,CAAA;QACD,SAAS,EAAE,MAAM,CAAA;KACpB,GACD,IAAI,CACT;IAiHK,WAAW,IAAI,OAAO,CAAC,gBAAgB,CAAC;CAkJjD"}
@@ -1,12 +1,15 @@
1
1
  // Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  import { defaultRetryableOptions, } from '@canton-network/core-ledger-client';
4
+ import { SigningProvider, } from '@canton-network/core-signing-lib';
4
5
  export class WalletSyncService {
5
- constructor(store, ledgerClient, authContext, logger) {
6
+ constructor(store, ledgerClient, authContext, logger, signingDrivers = {}, partyAllocator) {
6
7
  this.store = store;
7
8
  this.ledgerClient = ledgerClient;
8
9
  this.authContext = authContext;
9
10
  this.logger = logger;
11
+ this.signingDrivers = signingDrivers;
12
+ this.partyAllocator = partyAllocator;
10
13
  }
11
14
  async run(timeoutMs) {
12
15
  this.logger.info(`Starting wallet sync service with ${timeoutMs}ms interval`);
@@ -15,6 +18,86 @@ export class WalletSyncService {
15
18
  await new Promise((res) => setTimeout(res, timeoutMs));
16
19
  }
17
20
  }
21
+ async resolveSigningProvider(namespace) {
22
+ try {
23
+ // Check if namespace matches participant namespace first
24
+ // (participant parties have namespace === participantId's namespace)
25
+ let participantNamespace;
26
+ try {
27
+ const { participantId } = await this.ledgerClient.getWithRetry('/v2/parties/participant-id', defaultRetryableOptions);
28
+ // Extract the namespace part from participantId
29
+ // Format is hint::namespace
30
+ const [, extractedNamespace] = participantId.split('::');
31
+ if (extractedNamespace) {
32
+ participantNamespace = extractedNamespace;
33
+ }
34
+ else {
35
+ this.logger.warn({ participantId }, `Invalid participantId format: expected "hint::namespace", got "${participantId}"`);
36
+ }
37
+ }
38
+ catch (err) {
39
+ this.logger.warn({ err }, 'Failed to get participant namespace');
40
+ }
41
+ if (participantNamespace && namespace === participantNamespace) {
42
+ return { signingProviderId: SigningProvider.PARTICIPANT };
43
+ }
44
+ // Get keys from signing providers try to match
45
+ const userId = this.authContext?.userId;
46
+ for (const [providerId, driver] of Object.entries(this.signingDrivers)) {
47
+ if (!driver)
48
+ continue;
49
+ // Participant already handled above
50
+ if (providerId === SigningProvider.PARTICIPANT) {
51
+ continue;
52
+ }
53
+ try {
54
+ const controller = driver.controller(userId);
55
+ const result = await controller.getKeys();
56
+ // In case of error getKeys resolve Promise but with error object
57
+ if ('error' in result) {
58
+ this.logger.debug({
59
+ providerId,
60
+ error: result.error,
61
+ error_description: result.error_description,
62
+ }, 'Failed to get keys from signing provider');
63
+ continue;
64
+ }
65
+ // Try to match namespace with public keys
66
+ if (result.keys) {
67
+ for (const key of result.keys) {
68
+ const normalizedKey = this.partyAllocator.normalizePublicKeyToBase64(key.publicKey);
69
+ if (!normalizedKey)
70
+ continue;
71
+ const keyNamespace = this.partyAllocator.createFingerprintFromKey(normalizedKey);
72
+ if (keyNamespace === namespace) {
73
+ this.logger.debug({
74
+ namespace,
75
+ providerId,
76
+ keyId: key.id,
77
+ publicKey: key.publicKey,
78
+ }, 'Matched namespace with signing provider');
79
+ return {
80
+ signingProviderId: providerId,
81
+ publicKey: key.publicKey,
82
+ };
83
+ }
84
+ }
85
+ }
86
+ }
87
+ catch (err) {
88
+ this.logger.debug({ err, providerId }, 'Error getting keys from signing provider');
89
+ // Continue to next signing provider
90
+ }
91
+ }
92
+ // No match found - reject this wallet
93
+ this.logger.warn({ namespace }, 'No signing provider match found for namespace, rejecting wallet');
94
+ return null;
95
+ }
96
+ catch (err) {
97
+ this.logger.error({ err, namespace }, 'Error resolving signing provider, rejecting wallet');
98
+ return null;
99
+ }
100
+ }
18
101
  async syncWallets() {
19
102
  this.logger.info('Starting wallet sync...');
20
103
  try {
@@ -47,30 +130,58 @@ export class WalletSyncService {
47
130
  !partiesWithRights.has(party))
48
131
  partiesWithRights.set(party, rightType);
49
132
  });
50
- this.logger.info(partiesWithRights, 'Found new parties to sync with Wallet Gateway');
133
+ this.logger.info([...partiesWithRights], 'Found new parties to sync with Wallet Gateway');
51
134
  // Add new Wallets given the found parties
52
135
  const existingWallets = await this.store.getWallets();
53
136
  this.logger.info(existingWallets, 'Existing wallets');
54
137
  const existingPartyIdToSigningProvider = new Map(existingWallets.map((w) => [w.partyId, w.signingProviderId]));
55
- const newParticipantWallets = Array.from(partiesWithRights.keys())
56
- ?.filter((party) => !existingPartyIdToSigningProvider.has(party)
138
+ // Resolve signing providers for all new parties
139
+ const newParties = Array.from(partiesWithRights.keys()).filter((party) => !existingPartyIdToSigningProvider.has(party)
57
140
  // todo: filter on idp id
58
- )
59
- .map((party) => {
141
+ );
142
+ const walletResults = await Promise.all(newParties.map(async (party) => {
60
143
  const [hint, namespace] = party.split('::');
144
+ const resolvedSigningProvider = await this.resolveSigningProvider(namespace);
145
+ // Reject wallets where no signing provider match was found
146
+ if (!resolvedSigningProvider) {
147
+ this.logger.warn({ party, hint, namespace }, 'Rejecting wallet - no signing provider match found');
148
+ return null;
149
+ }
150
+ // Namespace is saved as public key in case of participant
151
+ const walletPublicKey = resolvedSigningProvider.signingProviderId ===
152
+ SigningProvider.PARTICIPANT
153
+ ? namespace
154
+ : resolvedSigningProvider.publicKey;
155
+ this.logger.info({
156
+ primary: false,
157
+ status: 'allocated',
158
+ partyId: party,
159
+ hint: hint,
160
+ publicKey: walletPublicKey,
161
+ namespace: namespace,
162
+ networkId: network.id,
163
+ signingProviderId: resolvedSigningProvider.signingProviderId,
164
+ }, 'Wallet sync result');
61
165
  return {
62
166
  primary: false,
63
167
  status: 'allocated',
64
168
  partyId: party,
65
169
  hint: hint,
66
- publicKey: namespace,
170
+ publicKey: walletPublicKey,
67
171
  namespace: namespace,
68
172
  networkId: network.id,
69
- signingProviderId: 'participant', // todo: determine based on partyDetails.isLocal
173
+ signingProviderId: resolvedSigningProvider.signingProviderId,
70
174
  };
71
- }) || [];
175
+ }));
176
+ // Filter out rejected wallets
177
+ const newParticipantWallets = walletResults.filter((wallet) => wallet !== null);
72
178
  await Promise.all(newParticipantWallets.map((wallet) => this.store.addWallet(wallet)));
73
- this.logger.info(newParticipantWallets, 'Created new wallets');
179
+ this.logger.info({ newParticipantWallets }, 'Created new wallets');
180
+ this.logger.info({
181
+ totalProcessed: newParties.length,
182
+ rejected: newParties.length - newParticipantWallets.length,
183
+ added: newParticipantWallets.length,
184
+ }, 'Wallet sync summary');
74
185
  // Set primary wallet if none exists
75
186
  const wallets = await this.store.getWallets();
76
187
  const hasPrimary = wallets.some((w) => w.primary);
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=wallet-sync-service.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-sync-service.test.d.ts","sourceRoot":"","sources":["../../src/ledger/wallet-sync-service.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,163 @@
1
+ // Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { jest, describe, it, expect, beforeEach, afterEach, } from '@jest/globals';
4
+ import { pino } from 'pino';
5
+ import { sink } from 'pino-test';
6
+ import { SigningProvider, } from '@canton-network/core-signing-lib';
7
+ import { InternalSigningDriver } from '@canton-network/core-signing-internal';
8
+ import { ParticipantSigningDriver } from '@canton-network/core-signing-participant';
9
+ import { StoreSql, connection, migrator, } from '@canton-network/core-signing-store-sql';
10
+ import { WalletSyncService } from './wallet-sync-service.js';
11
+ import { PartyAllocationService } from './party-allocation-service.js';
12
+ const mockLedgerGet = jest.fn();
13
+ jest.unstable_mockModule('@canton-network/core-ledger-client', () => ({
14
+ LedgerClient: jest.fn().mockImplementation(() => {
15
+ return {
16
+ getWithRetry: mockLedgerGet,
17
+ };
18
+ }),
19
+ defaultRetryableOptions: {},
20
+ }));
21
+ // Test subclass to expose protected method
22
+ class TestableWalletSyncService extends WalletSyncService {
23
+ async resolveSigningProvider(namespace) {
24
+ return super.resolveSigningProvider(namespace);
25
+ }
26
+ }
27
+ describe('WalletSyncService - resolveSigningProvider', () => {
28
+ const authContext = {
29
+ userId: 'test-user-id',
30
+ accessToken: 'test-access-token',
31
+ };
32
+ let mockLogger;
33
+ let store;
34
+ let ledgerClient;
35
+ let partyAllocator;
36
+ let service;
37
+ beforeEach(async () => {
38
+ mockLogger = pino(sink());
39
+ // Create in-memory SQLite store for InternalSigningDriver
40
+ const db = connection({
41
+ connection: {
42
+ type: 'sqlite',
43
+ database: ':memory:',
44
+ },
45
+ });
46
+ const umzug = migrator(db);
47
+ const pending = await umzug.pending();
48
+ if (pending.length > 0) {
49
+ await umzug.up();
50
+ }
51
+ const signingStore = new StoreSql(db, mockLogger, authContext);
52
+ // Create real InternalSigningDriver with real store
53
+ const internalDriver = new InternalSigningDriver(signingStore);
54
+ // Store is not used in resolveSigningProvider tests
55
+ store = {};
56
+ // Create real PartyAllocationService
57
+ partyAllocator = new PartyAllocationService({
58
+ synchronizerId: 'test-sync-id',
59
+ accessTokenProvider: {
60
+ getUserAccessToken: async () => 'user.jwt',
61
+ getAdminAccessToken: async () => 'admin.jwt',
62
+ },
63
+ httpLedgerUrl: 'http://test',
64
+ logger: mockLogger,
65
+ });
66
+ // Create mocked ledger client (whole module is already mocked)
67
+ const ledgerModule = await import('@canton-network/core-ledger-client');
68
+ ledgerClient = new ledgerModule.LedgerClient({
69
+ baseUrl: new URL('http://test'),
70
+ logger: mockLogger,
71
+ accessTokenProvider: {
72
+ getUserAccessToken: async () => 'token',
73
+ getAdminAccessToken: async () => 'token',
74
+ },
75
+ });
76
+ // Create service with real drivers
77
+ service = new TestableWalletSyncService(store, ledgerClient, authContext, mockLogger, {
78
+ [SigningProvider.WALLET_KERNEL]: internalDriver,
79
+ [SigningProvider.PARTICIPANT]: new ParticipantSigningDriver(),
80
+ }, partyAllocator);
81
+ });
82
+ afterEach(() => {
83
+ jest.restoreAllMocks();
84
+ mockLedgerGet.mockClear();
85
+ });
86
+ it('resolves participant when namespace matches participant namespace', async () => {
87
+ const participantNamespace = 'participant-namespace-123';
88
+ const participantId = `participant1::${participantNamespace}`;
89
+ mockLedgerGet.mockResolvedValueOnce({
90
+ participantId,
91
+ });
92
+ const result = await service.resolveSigningProvider(participantNamespace);
93
+ expect(result).not.toBeNull();
94
+ expect(result).toEqual({
95
+ signingProviderId: SigningProvider.PARTICIPANT,
96
+ });
97
+ if (result) {
98
+ expect('publicKey' in result).toBe(false);
99
+ }
100
+ });
101
+ it('resolves wallet-kernel when namespace matches internal key', async () => {
102
+ const internalDriver = service['signingDrivers'][SigningProvider.WALLET_KERNEL];
103
+ const controller = internalDriver.controller(authContext.userId);
104
+ const key = await controller.createKey({ name: 'test-key' });
105
+ const namespace = partyAllocator.createFingerprintFromKey(key.publicKey);
106
+ mockLedgerGet.mockResolvedValueOnce({
107
+ participantId: 'participant1::different-participant-namespace',
108
+ });
109
+ const result = await service.resolveSigningProvider(namespace);
110
+ expect(result).not.toBeNull();
111
+ if (result) {
112
+ expect(result.signingProviderId).toBe(SigningProvider.WALLET_KERNEL);
113
+ if (result.signingProviderId !== SigningProvider.PARTICIPANT) {
114
+ expect(result.publicKey).toBe(key.publicKey);
115
+ }
116
+ }
117
+ });
118
+ it('resolves fireblocks when namespace matches fireblocks key', async () => {
119
+ const fireblocksPublicKeyHex = '02fefbcc9aebc8a479f211167a9f564df53aefd603a8662d9449a98c1ead2eba';
120
+ // Convert hex to base64, then calculate namespace
121
+ const normalizedKey = partyAllocator.normalizePublicKeyToBase64(fireblocksPublicKeyHex);
122
+ const namespace = partyAllocator.createFingerprintFromKey(normalizedKey);
123
+ const mockFireblocksDriver = {
124
+ controller: jest.fn().mockReturnValue({
125
+ getKeys: jest
126
+ .fn()
127
+ .mockResolvedValue({
128
+ keys: [
129
+ {
130
+ id: '44-6767-1-0-0',
131
+ name: 'test-vault',
132
+ publicKey: fireblocksPublicKeyHex,
133
+ },
134
+ ],
135
+ }),
136
+ }),
137
+ partyMode: 'EXTERNAL',
138
+ signingProvider: SigningProvider.FIREBLOCKS,
139
+ };
140
+ const serviceWithFireblocks = new TestableWalletSyncService(store, ledgerClient, authContext, mockLogger, {
141
+ [SigningProvider.FIREBLOCKS]: mockFireblocksDriver,
142
+ }, partyAllocator);
143
+ mockLedgerGet.mockResolvedValueOnce({
144
+ participantId: 'participant1::different-participant-namespace',
145
+ });
146
+ const result = await serviceWithFireblocks.resolveSigningProvider(namespace);
147
+ expect(result).not.toBeNull();
148
+ if (result) {
149
+ expect(result.signingProviderId).toBe(SigningProvider.FIREBLOCKS);
150
+ if (result.signingProviderId !== SigningProvider.PARTICIPANT) {
151
+ expect(result.publicKey).toBe(fireblocksPublicKeyHex);
152
+ }
153
+ }
154
+ });
155
+ it('returns null when no signing provider match is found', async () => {
156
+ const unknownNamespace = 'unknown-namespace-123';
157
+ mockLedgerGet.mockResolvedValueOnce({
158
+ participantId: 'participant1::different-participant-namespace',
159
+ });
160
+ const result = await service.resolveSigningProvider(unknownNamespace);
161
+ expect(result).toBeNull();
162
+ });
163
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"jsonRpcHandler.d.ts","sourceRoot":"","sources":["../../src/middleware/jsonRpcHandler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAa7B,UAAU,kBAAkB,CAAC,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,CAAC,CAAA;CAChB;AAyDD,eAAO,MAAM,cAAc,GAEtB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,EAAE,kCAGjD,kBAAkB,CAAC,CAAC,CAAC,MAMZ,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,SA4E1D,CAAA"}
1
+ {"version":3,"file":"jsonRpcHandler.d.ts","sourceRoot":"","sources":["../../src/middleware/jsonRpcHandler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAc7B,UAAU,kBAAkB,CAAC,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,CAAC,CAAA;CAChB;AAiED,eAAO,MAAM,cAAc,GAEtB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,EAAE,kCAGjD,kBAAkB,CAAC,CAAC,CAAC,MAMZ,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,SA4E1D,CAAA"}
@@ -2,6 +2,7 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  import { JsonRpcError, rpcErrors, toHttpErrorCode, } from '@canton-network/core-rpc-errors';
4
4
  import { ErrorResponse, JsonRpcRequest, jsonRpcResponse, } from '@canton-network/core-types';
5
+ import { isJsCantonError } from '@canton-network/core-ledger-client';
5
6
  /**
6
7
  * Handles JSON-RPC errors and maps them to HTTP responses.
7
8
  * @param error The error that occurred.
@@ -26,6 +27,13 @@ const handleRpcError = (error, id, logger, method) => {
26
27
  const httpCode = toHttpErrorCode(error.code);
27
28
  return [httpCode, jsonRpcResponse(id, response)];
28
29
  }
30
+ if (isJsCantonError(error)) {
31
+ response.error = {
32
+ code: rpcErrors.internal().code,
33
+ message: error.cause,
34
+ data: error,
35
+ };
36
+ }
29
37
  if (error instanceof Error) {
30
38
  response.error.message = error.message;
31
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/user-api/controller.ts"],"names":[],"mappings":"AAyBA,OAAO,EACH,KAAK,EAIR,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA;AAC5E,OAAO,EAGH,WAAW,EAId,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EACH,sBAAsB,EACtB,eAAe,EAClB,MAAM,kCAAkC,CAAA;AAazC,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;;;;;;;;;;;;;;;;;;;CAgpBlB,CAAA"}
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/user-api/controller.ts"],"names":[],"mappings":"AAyBA,OAAO,EACH,KAAK,EAIR,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA;AAC5E,OAAO,EAGH,WAAW,EAId,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EACH,sBAAsB,EACtB,eAAe,EAClB,MAAM,kCAAkC,CAAA;AAazC,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;;;;;;;;;;;;;;;;;;;CAyqBlB,CAAA"}
@@ -244,7 +244,7 @@ export const userController = (kernelInfo, userUrl, store, notificationService,
244
244
  throw new Error('Failed to sign transaction: ' +
245
245
  JSON.stringify(signature));
246
246
  }
247
- // Get existing transaction to preserve createdAt if it exists
247
+ // Get existing transaction to preserve createdAt and origin if they exist
248
248
  const existingTx = await store.getTransaction(commandId);
249
249
  const now = new Date();
250
250
  const signedTx = {
@@ -252,6 +252,7 @@ export const userController = (kernelInfo, userUrl, store, notificationService,
252
252
  status: 'signed',
253
253
  preparedTransaction,
254
254
  preparedTransactionHash,
255
+ origin: existingTx?.origin ?? null,
255
256
  ...(existingTx?.createdAt && {
256
257
  createdAt: existingTx.createdAt,
257
258
  }),
@@ -310,7 +311,8 @@ export const userController = (kernelInfo, userUrl, store, notificationService,
310
311
  return res;
311
312
  }
312
313
  catch (error) {
313
- throw new Error('Failed to submit transaction: ' + error);
314
+ logger.error(error, 'Failed to submit transaction');
315
+ throw error;
314
316
  }
315
317
  }
316
318
  case SigningProvider.WALLET_KERNEL: {
@@ -344,6 +346,7 @@ export const userController = (kernelInfo, userUrl, store, notificationService,
344
346
  preparedTransaction: transaction.preparedTransaction,
345
347
  preparedTransactionHash: transaction.preparedTransactionHash,
346
348
  payload: result,
349
+ origin: transaction.origin ?? null,
347
350
  ...(transaction.createdAt && {
348
351
  createdAt: transaction.createdAt,
349
352
  }),
@@ -377,14 +380,23 @@ export const userController = (kernelInfo, userUrl, store, notificationService,
377
380
  });
378
381
  const status = await networkStatus(ledgerClient);
379
382
  notifier.emit('onConnected', {
380
- status: {
381
- kernel: kernelInfo,
382
- isConnected: true,
383
- isNetworkConnected: status.isConnected,
384
- networkReason: status.reason ? status.reason : 'OK',
383
+ kernel: {
384
+ ...kernelInfo,
385
+ userUrl: `${userUrl}/login/`,
386
+ },
387
+ isConnected: true,
388
+ isNetworkConnected: status.isConnected,
389
+ networkReason: status.reason ? status.reason : 'OK',
390
+ network: {
385
391
  networkId: network.id,
392
+ ledgerApi: {
393
+ baseUrl: network.ledgerApi.baseUrl,
394
+ },
395
+ },
396
+ session: {
397
+ accessToken: accessToken,
398
+ userId: userId,
386
399
  },
387
- sessionToken: accessToken,
388
400
  });
389
401
  return Promise.resolve({
390
402
  accessToken,
@@ -447,11 +459,17 @@ export const userController = (kernelInfo, userUrl, store, notificationService,
447
459
  getUserAccessToken: async () => authContext.accessToken,
448
460
  getAdminAccessToken: async () => authContext.accessToken,
449
461
  };
462
+ const partyAllocator = new PartyAllocationService({
463
+ synchronizerId: network.synchronizerId,
464
+ accessTokenProvider: userAccessTokenProvider,
465
+ httpLedgerUrl: network.ledgerApi.baseUrl,
466
+ logger,
467
+ });
450
468
  const service = new WalletSyncService(store, new LedgerClient({
451
469
  baseUrl: new URL(network.ledgerApi.baseUrl),
452
470
  logger,
453
471
  accessTokenProvider: userAccessTokenProvider,
454
- }), authContext, logger);
472
+ }), authContext, logger, drivers, partyAllocator);
455
473
  const result = await service.syncWallets();
456
474
  if (result.added.length === 0 && result.removed.length === 0) {
457
475
  return result;
@@ -474,6 +492,9 @@ export const userController = (kernelInfo, userUrl, store, notificationService,
474
492
  payload: transaction.payload
475
493
  ? JSON.stringify(transaction.payload)
476
494
  : '',
495
+ ...(transaction.origin !== null && {
496
+ origin: transaction.origin,
497
+ }),
477
498
  ...(transaction.createdAt && {
478
499
  createdAt: transaction.createdAt.toISOString(),
479
500
  }),
@@ -492,6 +513,9 @@ export const userController = (kernelInfo, userUrl, store, notificationService,
492
513
  payload: transaction.payload
493
514
  ? JSON.stringify(transaction.payload)
494
515
  : '',
516
+ ...(transaction.origin !== null && {
517
+ origin: transaction.origin,
518
+ }),
495
519
  ...(transaction.createdAt && {
496
520
  createdAt: transaction.createdAt.toISOString(),
497
521
  }),
@@ -276,12 +276,19 @@ export type Sessions = Session[];
276
276
  *
277
277
  */
278
278
  export type Payload = string;
279
+ /**
280
+ *
281
+ * The origin (dApp URL) that initiated this transaction request.
282
+ *
283
+ */
284
+ export type Origin = string;
279
285
  export interface Transaction {
280
286
  commandId: CommandId;
281
287
  status: Status;
282
288
  preparedTransaction: PreparedTransaction;
283
289
  preparedTransactionHash: PreparedTransactionHash;
284
290
  payload?: Payload;
291
+ origin?: Origin;
285
292
  [k: string]: any;
286
293
  }
287
294
  export type Transactions = Transaction[];
@@ -411,6 +418,7 @@ export interface GetTransactionResult {
411
418
  preparedTransaction: PreparedTransaction;
412
419
  preparedTransactionHash: PreparedTransactionHash;
413
420
  payload?: Payload;
421
+ origin?: Origin;
414
422
  [k: string]: any;
415
423
  }
416
424
  export interface ListTransactionsResult {
@@ -1 +1 @@
1
- {"version":3,"file":"typings.d.ts","sourceRoot":"","sources":["../../../src/user-api/rpc-gen/typings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"typings.d.ts","sourceRoot":"","sources":["../../../src/user-api/rpc-gen/typings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const GATEWAY_VERSION: any;
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,eAAe,KAAc,CAAA"}
@@ -0,0 +1,9 @@
1
+ // Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { readFileSync } from 'node:fs';
4
+ import { dirname, join } from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+ const __filename = fileURLToPath(import.meta.url);
7
+ const __dirname = dirname(__filename);
8
+ const pkg = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf8'));
9
+ export const GATEWAY_VERSION = pkg.version;
@@ -3,8 +3,8 @@
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
5
  <title>Wallet Kernel - Not found</title>
6
- <script type="module" crossorigin src="/assets/404-Dget2-k2.js"></script>
7
- <link rel="modulepreload" crossorigin href="/assets/index-DyLgNi-5.js">
6
+ <script type="module" crossorigin src="/assets/404-D9f6dBKB.js"></script>
7
+ <link rel="modulepreload" crossorigin href="/assets/index-ChQxMkmX.js">
8
8
  <link rel="stylesheet" crossorigin href="/assets/index-CgbJtyud.css">
9
9
  </head>
10
10
 
@@ -3,9 +3,9 @@
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
5
  <title>Wallet Kernel - Approve Write Request</title>
6
- <script type="module" crossorigin src="/assets/approve-ChuS996j.js"></script>
7
- <link rel="modulepreload" crossorigin href="/assets/index-DyLgNi-5.js">
8
- <link rel="modulepreload" crossorigin href="/assets/state-Ck_F88ae.js">
6
+ <script type="module" crossorigin src="/assets/approve-CvvaOTF9.js"></script>
7
+ <link rel="modulepreload" crossorigin href="/assets/index-ChQxMkmX.js">
8
+ <link rel="modulepreload" crossorigin href="/assets/state-DxRr-Cgg.js">
9
9
  <link rel="stylesheet" crossorigin href="/assets/index-CgbJtyud.css">
10
10
  </head>
11
11