@canton-network/wallet-gateway-remote 0.9.2 → 0.11.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 (54) hide show
  1. package/README.md +1 -1
  2. package/dist/config/Config.test.js +3 -3
  3. package/dist/dapp-api/controller.d.ts +1 -1
  4. package/dist/dapp-api/controller.d.ts.map +1 -1
  5. package/dist/dapp-api/controller.js +39 -19
  6. package/dist/dapp-api/rpc-gen/typings.d.ts +68 -25
  7. package/dist/dapp-api/rpc-gen/typings.d.ts.map +1 -1
  8. package/dist/dapp-api/server.d.ts.map +1 -1
  9. package/dist/dapp-api/server.js +36 -33
  10. package/dist/dapp-api/server.test.js +10 -18
  11. package/dist/init.d.ts.map +1 -1
  12. package/dist/init.js +7 -23
  13. package/dist/ledger/party-allocation-service.d.ts +7 -0
  14. package/dist/ledger/party-allocation-service.d.ts.map +1 -1
  15. package/dist/ledger/party-allocation-service.js +37 -1
  16. package/dist/ledger/party-allocation-service.test.js +3 -1
  17. package/dist/ledger/wallet-sync-service.d.ts +11 -1
  18. package/dist/ledger/wallet-sync-service.d.ts.map +1 -1
  19. package/dist/ledger/wallet-sync-service.js +121 -10
  20. package/dist/ledger/wallet-sync-service.test.d.ts +2 -0
  21. package/dist/ledger/wallet-sync-service.test.d.ts.map +1 -0
  22. package/dist/ledger/wallet-sync-service.test.js +163 -0
  23. package/dist/middleware/jsonRpcHandler.d.ts.map +1 -1
  24. package/dist/middleware/jsonRpcHandler.js +8 -0
  25. package/dist/middleware/sessionHandler.d.ts +13 -0
  26. package/dist/middleware/sessionHandler.d.ts.map +1 -0
  27. package/dist/middleware/sessionHandler.js +37 -0
  28. package/dist/notification/NotificationService.d.ts +8 -1
  29. package/dist/notification/NotificationService.d.ts.map +1 -1
  30. package/dist/notification/NotificationService.js +22 -1
  31. package/dist/user-api/controller.d.ts.map +1 -1
  32. package/dist/user-api/controller.js +40 -9
  33. package/dist/user-api/rpc-gen/typings.d.ts +10 -0
  34. package/dist/user-api/rpc-gen/typings.d.ts.map +1 -1
  35. package/dist/user-api/server.test.js +5 -9
  36. package/dist/web/frontend/404/index.html +2 -2
  37. package/dist/web/frontend/approve/index.html +3 -3
  38. package/dist/web/frontend/assets/{404-Dget2-k2.js → 404-m2H-YHg-.js} +1 -1
  39. package/dist/web/frontend/assets/{approve-ChuS996j.js → approve-D-yQkaxd.js} +13 -11
  40. package/dist/web/frontend/assets/callback-Da6RLMl5.js +1 -0
  41. package/dist/web/frontend/assets/index-DWw9PrWk.js +1011 -0
  42. package/dist/web/frontend/assets/login-DeTFkeYw.js +186 -0
  43. package/dist/web/frontend/assets/{settings-DTCtvDW7.js → settings-DdQ6zt_Y.js} +1 -1
  44. package/dist/web/frontend/assets/{state-Ck_F88ae.js → state-Wv0NKnXW.js} +1 -1
  45. package/dist/web/frontend/assets/{wallets-DcuGVzJf.js → wallets-ySaBy7V_.js} +1 -1
  46. package/dist/web/frontend/callback/index.html +2 -2
  47. package/dist/web/frontend/index.html +1 -1
  48. package/dist/web/frontend/login/index.html +3 -3
  49. package/dist/web/frontend/settings/index.html +3 -3
  50. package/dist/web/frontend/wallets/index.html +3 -3
  51. package/package.json +17 -17
  52. package/dist/web/frontend/assets/callback-2I6lJV7y.js +0 -1
  53. package/dist/web/frontend/assets/index-DyLgNi-5.js +0 -1011
  54. package/dist/web/frontend/assets/login-DvWCqhsk.js +0 -186
package/README.md CHANGED
@@ -50,4 +50,4 @@ The JSON-RPC API specs from `api-specs/` are generated into strongly-typed metho
50
50
 
51
51
  2. Place the `fireblocks_secret.key` file at the path `/splice-wallet-kernel/wallet-gateway/remote`
52
52
 
53
- 3. Create a file named `fireblocks_api.key` at the path `/splice-wallet-kernel/wallet-gateway/remote` and insert your Fireblocks API key into it
53
+ 3. Create a file named `fireblocks_api.key` at the path `/splice-wallet-kernel/wallet-gateway/remote` and insert your Fireblocks API key into it (get it from `API User (ID)` column in fireblocks api users table). Make sure file doesn't end with new line character.
@@ -9,8 +9,8 @@ test('config from json file', async () => {
9
9
  expect(resp.store.networks[0].auth.clientId).toBe('operator');
10
10
  expect(resp.store.networks[0].auth.scope).toBe('openid daml_ledger_api offline_access');
11
11
  expect(resp.store.networks[0].auth.method).toBe('authorization_code');
12
- expect(resp.store.networks[1].auth.method).toBe('client_credentials');
13
- if (resp.store.networks[1].auth.method === 'client_credentials') {
14
- expect(resp.store.networks[1].auth.audience).toBe('https://daml.com/jwt/aud/participant/participant1::1220d44fc1c3ba0b5bdf7b956ee71bc94ebe2d23258dc268fdf0824fbaeff2c61424');
12
+ expect(resp.store.networks[2].auth.method).toBe('client_credentials');
13
+ if (resp.store.networks[2].auth.method === 'client_credentials') {
14
+ expect(resp.store.networks[2].auth.audience).toBe('https://daml.com/jwt/aud/participant/participant1::1220d44fc1c3ba0b5bdf7b956ee71bc94ebe2d23258dc268fdf0824fbaeff2c61424');
15
15
  }
16
16
  });
@@ -3,7 +3,7 @@ import { Store } from '@canton-network/core-wallet-store';
3
3
  import { NotificationService } from '../notification/NotificationService.js';
4
4
  import { KernelInfo as KernelInfoConfig } from '../config/Config.js';
5
5
  import { Logger } from 'pino';
6
- export declare const dappController: (kernelInfo: KernelInfoConfig, dappUrl: string, userUrl: string, store: Store, notificationService: NotificationService, _logger: Logger, context?: AuthContext) => {
6
+ export declare const dappController: (kernelInfo: KernelInfoConfig, dappUrl: string, userUrl: string, store: Store, notificationService: NotificationService, _logger: Logger, origin: string | null, context?: AuthContext) => {
7
7
  status: import("./rpc-gen/typings.js").Status;
8
8
  connect: import("./rpc-gen/typings.js").Connect;
9
9
  disconnect: import("./rpc-gen/typings.js").Disconnect;
@@ -1 +1 @@
1
- {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/dapp-api/controller.ts"],"names":[],"mappings":"AAIA,OAAO,EAAmB,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAQ/E,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAA;AAQzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA;AAC5E,OAAO,EAAE,UAAU,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAG7B,eAAO,MAAM,cAAc,GACvB,YAAY,gBAAgB,EAC5B,SAAS,MAAM,EACf,SAAS,MAAM,EACf,OAAO,KAAK,EACZ,qBAAqB,mBAAmB,EACxC,SAAS,MAAM,EACf,UAAU,WAAW;;;;;;;;;;;;;CAkNxB,CAAA"}
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/dapp-api/controller.ts"],"names":[],"mappings":"AAIA,OAAO,EAAmB,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAS/E,OAAO,EAAE,KAAK,EAAe,MAAM,mCAAmC,CAAA;AAQtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA;AAC5E,OAAO,EAAE,UAAU,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAG7B,eAAO,MAAM,cAAc,GACvB,YAAY,gBAAgB,EAC5B,SAAS,MAAM,EACf,SAAS,MAAM,EACf,OAAO,KAAK,EACZ,qBAAqB,mBAAmB,EACxC,SAAS,MAAM,EACf,QAAQ,MAAM,GAAG,IAAI,EACrB,UAAU,WAAW;;;;;;;;;;;;;CAuOxB,CAAA"}
@@ -6,22 +6,20 @@ import buildController from './rpc-gen/index.js';
6
6
  import { LedgerClient, } from '@canton-network/core-ledger-client';
7
7
  import { v4 } from 'uuid';
8
8
  import { networkStatus, ledgerPrepareParams } from '../utils.js';
9
- export const dappController = (kernelInfo, dappUrl, userUrl, store, notificationService, _logger, context) => {
9
+ export const dappController = (kernelInfo, dappUrl, userUrl, store, notificationService, _logger, origin, context) => {
10
10
  const logger = _logger.child({ component: 'dapp-controller' });
11
11
  return buildController({
12
12
  connect: async () => {
13
13
  if (!context || !(await store.getSession())) {
14
14
  return {
15
- sessionToken: '',
16
- status: {
17
- kernel: kernelInfo,
18
- isConnected: false,
19
- isNetworkConnected: false,
20
- networkReason: 'Unauthenticated',
21
- userUrl: `${userUrl}/login/`,
22
- },
15
+ kernel: kernelInfo,
16
+ isConnected: false,
17
+ isNetworkConnected: false,
18
+ networkReason: 'Unauthenticated',
19
+ userUrl: `${userUrl}/login/`,
23
20
  };
24
21
  }
22
+ const session = await store.getSession();
25
23
  const network = await store.getCurrentNetwork();
26
24
  const ledgerClient = new LedgerClient({
27
25
  baseUrl: new URL(network.ledgerApi.baseUrl),
@@ -31,14 +29,22 @@ export const dappController = (kernelInfo, dappUrl, userUrl, store, notification
31
29
  });
32
30
  const status = await networkStatus(ledgerClient);
33
31
  return {
34
- sessionToken: context.accessToken,
35
- status: {
36
- kernel: kernelInfo,
37
- isConnected: true,
38
- isNetworkConnected: status.isConnected,
39
- networkReason: status.reason ? status.reason : 'OK',
40
- userUrl: `${userUrl}/login/`,
32
+ kernel: kernelInfo,
33
+ isConnected: true,
34
+ isNetworkConnected: status.isConnected,
35
+ networkReason: status.reason ? status.reason : 'OK',
36
+ network: {
37
+ networkId: network.id,
38
+ ledgerApi: {
39
+ baseUrl: network.ledgerApi.baseUrl,
40
+ },
41
41
  },
42
+ session: {
43
+ id: session?.id,
44
+ accessToken: context.accessToken,
45
+ userId: context.userId,
46
+ },
47
+ userUrl: `${userUrl}/login/`,
42
48
  };
43
49
  },
44
50
  disconnect: async () => {
@@ -107,14 +113,16 @@ export const dappController = (kernelInfo, dappUrl, userUrl, store, notification
107
113
  const synchronizerId = network.synchronizerId ??
108
114
  (await ledgerClient.getSynchronizerId());
109
115
  const { preparedTransactionHash, preparedTransaction = '' } = await prepareSubmission(context.userId, wallet.partyId, synchronizerId, params, ledgerClient);
110
- store.setTransaction({
116
+ const transaction = {
111
117
  commandId,
112
118
  status: 'pending',
113
119
  preparedTransaction,
114
120
  preparedTransactionHash,
115
121
  payload: params,
122
+ origin: origin || null,
116
123
  createdAt: new Date(),
117
- });
124
+ };
125
+ store.setTransaction(transaction);
118
126
  return {
119
127
  userUrl: `${userUrl}/approve/index.html?commandId=${commandId}`,
120
128
  };
@@ -145,6 +153,7 @@ export const dappController = (kernelInfo, dappUrl, userUrl, store, notification
145
153
  networkReason: 'Unauthenticated',
146
154
  };
147
155
  }
156
+ const session = await store.getSession();
148
157
  const network = await store.getCurrentNetwork();
149
158
  const ledgerClient = new LedgerClient({
150
159
  baseUrl: new URL(network.ledgerApi.baseUrl),
@@ -158,7 +167,18 @@ export const dappController = (kernelInfo, dappUrl, userUrl, store, notification
158
167
  isConnected: true,
159
168
  isNetworkConnected: status.isConnected,
160
169
  networkReason: status.reason ? status.reason : 'OK',
161
- networkId: (await store.getCurrentNetwork()).id,
170
+ network: {
171
+ networkId: network.id,
172
+ ledgerApi: {
173
+ baseUrl: network.ledgerApi.baseUrl,
174
+ },
175
+ },
176
+ session: {
177
+ id: session?.id,
178
+ accessToken: context.accessToken,
179
+ userId: context.userId,
180
+ },
181
+ userUrl: `${userUrl}/login/`,
162
182
  };
163
183
  },
164
184
  onConnected: async () => {
@@ -100,6 +100,12 @@ export type ClientType = 'browser' | 'desktop' | 'mobile' | 'remote';
100
100
  *
101
101
  */
102
102
  export type Url = string;
103
+ /**
104
+ *
105
+ * A URL that points to a user interface.
106
+ *
107
+ */
108
+ export type UserUrl = string;
103
109
  /**
104
110
  *
105
111
  * Represents a Wallet Gateway.
@@ -109,6 +115,7 @@ export interface KernelInfo {
109
115
  id: Id;
110
116
  clientType: ClientType;
111
117
  url?: Url;
118
+ userUrl?: UserUrl;
112
119
  [k: string]: any;
113
120
  }
114
121
  /**
@@ -135,20 +142,66 @@ export type NetworkReason = string;
135
142
  *
136
143
  */
137
144
  export type NetworkId = string;
145
+ /**
146
+ *
147
+ * The base URL of the ledger API.
148
+ *
149
+ */
150
+ export type BaseUrl = string;
151
+ /**
152
+ *
153
+ * Ledger API configuration.
154
+ *
155
+ */
156
+ export interface LedgerApiConfig {
157
+ baseUrl: BaseUrl;
158
+ [k: string]: any;
159
+ }
160
+ /**
161
+ *
162
+ * Network information, if connected to a network.
163
+ *
164
+ */
165
+ export interface Network {
166
+ networkId: NetworkId;
167
+ ledgerApi?: LedgerApiConfig;
168
+ [k: string]: any;
169
+ }
170
+ /**
171
+ *
172
+ * JWT authentication token.
173
+ *
174
+ */
175
+ export type AccessToken = string;
176
+ /**
177
+ *
178
+ * The user identifier.
179
+ *
180
+ */
181
+ export type UserId = string;
182
+ /**
183
+ *
184
+ * Session information, if authenticated.
185
+ *
186
+ */
187
+ export interface Session {
188
+ accessToken: AccessToken;
189
+ userId: UserId;
190
+ [k: string]: any;
191
+ }
138
192
  export interface StatusEvent {
139
193
  kernel: KernelInfo;
140
194
  isConnected: IsConnected;
141
195
  isNetworkConnected: IsNetworkConnected;
142
196
  networkReason?: NetworkReason;
143
- networkId?: NetworkId;
197
+ network?: Network;
198
+ session?: Session;
199
+ [k: string]: any;
200
+ }
201
+ export interface ObjectOfUserUrlMkZ1IR2Z {
202
+ userUrl: UserUrl;
144
203
  [k: string]: any;
145
204
  }
146
- /**
147
- *
148
- * JWT authentication token (if applicable).
149
- *
150
- */
151
- export type SessionToken = string;
152
205
  export type Dar = string;
153
206
  export type Dars = Dar[];
154
207
  /**
@@ -173,12 +226,6 @@ export interface JsPrepareSubmissionResponse {
173
226
  preparedTransactionHash?: PreparedTransactionHash;
174
227
  [k: string]: any;
175
228
  }
176
- /**
177
- *
178
- * A URL that points to a user interface.
179
- *
180
- */
181
- export type UserUrl = string;
182
229
  export type Response = string;
183
230
  /**
184
231
  *
@@ -382,17 +429,18 @@ export interface PrepareExecuteParams {
382
429
  packageIdSelectionPreference?: PackageIdSelectionPreference;
383
430
  [k: string]: any;
384
431
  }
432
+ /**
433
+ *
434
+ * Ledger API request structure
435
+ *
436
+ */
385
437
  export interface LedgerApiParams {
386
438
  requestMethod: RequestMethod;
387
439
  resource: Resource;
388
440
  body?: Body;
389
441
  [k: string]: any;
390
442
  }
391
- export interface ConnectResult {
392
- status: StatusEvent;
393
- sessionToken: SessionToken;
394
- [k: string]: any;
395
- }
443
+ export type StatusEventAsync = StatusEvent & ObjectOfUserUrlMkZ1IR2Z;
396
444
  /**
397
445
  *
398
446
  * Represents a null value, used in responses where no data is returned.
@@ -417,11 +465,6 @@ export interface LedgerApiResult {
417
465
  response: Response;
418
466
  [k: string]: any;
419
467
  }
420
- export interface OnConnectedEvent {
421
- status: StatusEvent;
422
- sessionToken?: SessionToken;
423
- [k: string]: any;
424
- }
425
468
  /**
426
469
  *
427
470
  * Event emitted when the user's accounts change.
@@ -446,13 +489,13 @@ export type TxChangedEvent = TxChangedPendingEvent | TxChangedSignedEvent | TxCh
446
489
  *
447
490
  */
448
491
  export type Status = () => Promise<StatusEvent>;
449
- export type Connect = () => Promise<ConnectResult>;
492
+ export type Connect = () => Promise<StatusEventAsync>;
450
493
  export type Disconnect = () => Promise<Null>;
451
494
  export type DarsAvailable = () => Promise<DarsAvailableResult>;
452
495
  export type PrepareReturn = (params: PrepareReturnParams) => Promise<PrepareReturnResult>;
453
496
  export type PrepareExecute = (params: PrepareExecuteParams) => Promise<PrepareExecuteResult>;
454
497
  export type LedgerApi = (params: LedgerApiParams) => Promise<LedgerApiResult>;
455
- export type OnConnected = () => Promise<OnConnectedEvent>;
498
+ export type OnConnected = () => Promise<StatusEvent>;
456
499
  export type OnStatusChanged = () => Promise<StatusEvent>;
457
500
  export type OnAccountsChanged = () => Promise<AccountsChangedEvent>;
458
501
  export type RequestAccounts = () => Promise<RequestAccountsResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"typings.d.ts","sourceRoot":"","sources":["../../../src/dapp-api/rpc-gen/typings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"typings.d.ts","sourceRoot":"","sources":["../../../src/dapp-api/rpc-gen/typings.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/dapp-api/server.ts"],"names":[],"mappings":"AAGA,OAAO,OAAO,MAAM,SAAS,CAAA;AAG7B,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAG7B,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAE7B,OAAO,EACH,mBAAmB,EAEtB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAE9D,eAAO,MAAM,IAAI,GACb,OAAO,MAAM,EACb,KAAK,OAAO,CAAC,OAAO,EACpB,QAAQ,MAAM,EACd,QAAQ,MAAM,EACd,YAAY,UAAU,EACtB,SAAS,MAAM,EACf,SAAS,MAAM,EACf,cAAc,YAAY,EAC1B,qBAAqB,mBAAmB,EACxC,aAAa,WAAW,EACxB,OAAO,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,wFA6ElC,CAAA"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/dapp-api/server.ts"],"names":[],"mappings":"AAGA,OAAO,OAAO,MAAM,SAAS,CAAA;AAG7B,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAG7B,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAE7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA;AAC5E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAE9D,eAAO,MAAM,IAAI,GACb,OAAO,MAAM,EACb,KAAK,OAAO,CAAC,OAAO,EACpB,QAAQ,MAAM,EACd,QAAQ,MAAM,EACd,YAAY,UAAU,EACtB,SAAS,MAAM,EACf,SAAS,MAAM,EACf,cAAc,YAAY,EAC1B,qBAAqB,mBAAmB,EACxC,aAAa,WAAW,EACxB,OAAO,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,wFAsFlC,CAAA"}
@@ -8,53 +8,56 @@ export const dapp = (route, app, logger, server, kernelInfo, dappUrl, userUrl, s
8
8
  app.use(cors({
9
9
  origin: serverConfig.allowedOrigins,
10
10
  }));
11
- app.use(route, (req, res, next) => jsonRpcHandler({
12
- controller: dappController(kernelInfo, dappUrl, userUrl, store.withAuthContext(req.authContext), notificationService, logger, req.authContext),
13
- logger,
14
- })(req, res, next));
11
+ app.use(route, (req, res, next) => {
12
+ const origin = req.headers.origin ?? null;
13
+ jsonRpcHandler({
14
+ controller: dappController(kernelInfo, dappUrl, userUrl, store.withAuthContext(req.authContext), notificationService, logger, origin, req.authContext),
15
+ logger,
16
+ })(req, res, next);
17
+ });
15
18
  const io = new SocketIoServer(server, {
16
19
  cors: {
17
20
  origin: serverConfig.allowedOrigins,
18
21
  methods: ['GET', 'POST'],
19
22
  },
20
23
  });
21
- io.on('connection', (socket) => {
22
- logger.info('Socket.io client connected');
23
- let notifier = undefined;
24
- const onAccountsChanged = (...event) => {
25
- io.emit('accountsChanged', ...event);
26
- };
27
- const onStatusChanged = (...event) => {
28
- io.emit('statusChanged', ...event);
29
- };
30
- const onConnected = (...event) => {
31
- io.emit('onConnected', ...event);
32
- };
33
- const onTxChanged = (...event) => {
34
- io.emit('txChanged', ...event);
35
- };
36
- authService
37
- .verifyToken(socket.handshake.auth.token)
38
- .then((authContext) => {
39
- const userId = authContext?.userId;
40
- if (!userId) {
41
- return;
42
- }
43
- notifier = notificationService.getNotifier(userId);
24
+ io.on('connection', async (socket) => {
25
+ let sessionId = undefined;
26
+ const context = await authService.verifyToken(socket.handshake.auth.token);
27
+ if (context !== undefined) {
28
+ const newStore = store.withAuthContext(context);
29
+ const session = await newStore.getSession();
30
+ sessionId = session?.id;
31
+ }
32
+ if (context && sessionId) {
33
+ socket.join(sessionId);
34
+ logger.debug(`Socket.io connected for user: ${context.userId} with session ID: ${sessionId}`);
35
+ const notifier = notificationService.getNotifier(context.userId);
36
+ const onAccountsChanged = (...event) => {
37
+ io.to(sessionId).emit('accountsChanged', ...event);
38
+ };
39
+ const onStatusChanged = (...event) => {
40
+ logger.debug({ sessionId }, 'Emitting statusChanged event via Socket.io');
41
+ io.to(sessionId).emit('statusChanged', ...event);
42
+ };
43
+ const onConnected = (...event) => {
44
+ io.to(sessionId).emit('onConnected', ...event);
45
+ };
46
+ const onTxChanged = (...event) => {
47
+ io.to(sessionId).emit('txChanged', ...event);
48
+ };
44
49
  notifier.on('accountsChanged', onAccountsChanged);
45
50
  notifier.on('onConnected', onConnected);
46
51
  notifier.on('statusChanged', onStatusChanged);
47
52
  notifier.on('txChanged', onTxChanged);
48
- });
49
- socket.on('disconnect', () => {
50
- logger.info('Socket.io client disconnected');
51
- if (notifier) {
53
+ socket.on('disconnect', () => {
54
+ logger.debug('Socket.io client disconnected');
52
55
  notifier.removeListener('accountsChanged', onAccountsChanged);
53
56
  notifier.removeListener('onConnected', onConnected);
54
57
  notifier.removeListener('statusChanged', onStatusChanged);
55
58
  notifier.removeListener('txChanged', onTxChanged);
56
- }
57
- });
59
+ });
60
+ }
58
61
  });
59
62
  return server;
60
63
  };
@@ -1,12 +1,13 @@
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
- import { expect, test, jest } from '@jest/globals';
3
+ import { expect, test } from '@jest/globals';
4
4
  import cors from 'cors';
5
5
  import request from 'supertest';
6
6
  import express from 'express';
7
7
  import { dapp } from './server.js';
8
8
  import { StoreInternal } from '@canton-network/core-wallet-store-inmemory';
9
9
  import { ConfigUtils, deriveKernelUrls } from '../config/ConfigUtils.js';
10
+ import { NotificationService } from '../notification/NotificationService.js';
10
11
  import { pino } from 'pino';
11
12
  import { sink } from 'pino-test';
12
13
  import { createServer } from 'http';
@@ -18,13 +19,7 @@ const authService = {
18
19
  const configPath = '../test/config.json';
19
20
  const config = ConfigUtils.loadConfigFile(configPath);
20
21
  const store = new StoreInternal(config.store, pino(sink()));
21
- const notificationService = {
22
- getNotifier: jest.fn().mockReturnValue({
23
- on: jest.fn(),
24
- emit: jest.fn(),
25
- removeListener: jest.fn(),
26
- }),
27
- };
22
+ const notificationService = new NotificationService(pino(sink()));
28
23
  test('call connect rpc', async () => {
29
24
  const app = express();
30
25
  app.use(cors());
@@ -40,17 +35,14 @@ test('call connect rpc', async () => {
40
35
  id: 0,
41
36
  jsonrpc: '2.0',
42
37
  result: {
43
- sessionToken: '',
44
- status: {
45
- kernel: {
46
- id: 'remote-da',
47
- clientType: 'remote',
48
- },
49
- isConnected: false,
50
- isNetworkConnected: false,
51
- networkReason: 'Unauthenticated',
52
- userUrl: 'http://localhost:3030/login/',
38
+ kernel: {
39
+ id: 'remote-da',
40
+ clientType: 'remote',
53
41
  },
42
+ isConnected: false,
43
+ isNetworkConnected: false,
44
+ networkReason: 'Unauthenticated',
45
+ userUrl: 'http://localhost:3030/login/',
54
46
  },
55
47
  });
56
48
  });
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAsB7B,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AA4GvC,wBAAsB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,iBAqIhE"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAoB7B,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAmFvC,wBAAsB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,iBAkJhE"}
package/dist/init.js CHANGED
@@ -6,7 +6,6 @@ import { web } from './web/server.js';
6
6
  import { StoreSql, bootstrap, connection, migrator, } from '@canton-network/core-wallet-store-sql';
7
7
  import { StoreSql as SigningStoreSql, bootstrap as signingBootstrap, connection as signingConnection, migrator as signingMigrator, } from '@canton-network/core-signing-store-sql';
8
8
  import { ConfigUtils } from './config/ConfigUtils.js';
9
- import EventEmitter from 'events';
10
9
  import { SigningProvider } from '@canton-network/core-signing-lib';
11
10
  import { ParticipantSigningDriver } from '@canton-network/core-signing-participant';
12
11
  import { InternalSigningDriver } from '@canton-network/core-signing-internal';
@@ -19,28 +18,9 @@ import { deriveKernelUrls } from './config/ConfigUtils.js';
19
18
  import { existsSync, readFileSync } from 'fs';
20
19
  import path from 'path';
21
20
  import { GATEWAY_VERSION } from './version.js';
21
+ import { sessionHandler } from './middleware/sessionHandler.js';
22
+ import { NotificationService } from './notification/NotificationService.js';
22
23
  let isReady = false;
23
- class NotificationService {
24
- constructor(logger) {
25
- this.logger = logger;
26
- this.notifiers = new Map();
27
- }
28
- getNotifier(notifierId) {
29
- const logger = this.logger;
30
- let notifier = this.notifiers.get(notifierId);
31
- if (!notifier) {
32
- notifier = new EventEmitter();
33
- // Wrap all events to log with pino
34
- const originalEmit = notifier.emit;
35
- notifier.emit = function (event, ...args) {
36
- logger.debug({ event, args }, `Notifier emitted event: ${event}`);
37
- return originalEmit.apply(this, [event, ...args]);
38
- };
39
- this.notifiers.set(notifierId, notifier);
40
- }
41
- return notifier;
42
- }
43
- }
44
24
  async function initializeDatabase(config, logger) {
45
25
  logger.info('Checking for database migrations...');
46
26
  let exists = true;
@@ -143,9 +123,13 @@ export async function initialize(opts, logger) {
143
123
  userApiKeys,
144
124
  }),
145
125
  };
126
+ const allowedPaths = {
127
+ [config.server.dappPath]: ['*'],
128
+ [config.server.userPath]: ['addSession', 'listNetworks', 'listIdps'],
129
+ };
146
130
  app.use('/api/*splat', express.json());
147
131
  app.use('/api/*splat', rpcRateLimit);
148
- app.use('/api/*splat', jwtAuth(authService, logger));
132
+ app.use('/api/*splat', jwtAuth(authService, logger.child({ component: 'JwtHandler' })), sessionHandler(store, allowedPaths, logger.child({ component: 'SessionHandler' })));
149
133
  // Override config port with CLI parameter port if provided, then derive URLs
150
134
  const serverConfigWithOverride = {
151
135
  ...config.server,
@@ -40,6 +40,13 @@ export declare class PartyAllocationService {
40
40
  * @param publicKey The public key of the user.
41
41
  */
42
42
  createFingerprintFromKey(publicKey: string): string;
43
+ /**
44
+ * Normalizes a public key to base64 format.
45
+ * Converts hex format (Fireblocks) to base64, or returns base64 as-is.
46
+ * @param publicKey Public key in hex or base64 format
47
+ * @returns Public key in base64 format, or null if conversion fails
48
+ */
49
+ normalizePublicKeyToBase64(publicKey: string): string | null;
43
50
  /**
44
51
  * Generate topology transactions
45
52
  * @param hint A hint for the party ID.
@@ -1 +1 @@
1
- {"version":3,"file":"party-allocation-service.d.ts","sourceRoot":"","sources":["../../src/ledger/party-allocation-service.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,2BAA2B,EAE9B,MAAM,oCAAoC,CAAA;AAE3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAE7B,MAAM,MAAM,cAAc,GAAG;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,KAAK,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;AAEpD;;GAEG;AACH,qBAAa,sBAAsB;IAC/B,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,cAAc,CAAoB;gBAE9B,EACR,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,MAAM,EACN,WAAW,GACd,EAAE;QACC,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,mBAAmB,EAAE,mBAAmB,CAAA;QACxC,aAAa,EAAE,MAAM,CAAA;QACrB,MAAM,EAAE,MAAM,CAAA;QACd,WAAW,CAAC,EAAE,MAAM,CAAA;KACvB;IAYD;;;;OAIG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAE1E;;;;;;OAMG;IACG,aAAa,CACf,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,WAAW,GAC7B,OAAO,CAAC,cAAc,CAAC;IAoB1B;;;OAGG;IACH,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAenD;;;;OAIG;IACG,4BAA4B,CAC9B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAClB,OAAO,CAAC,2BAA2B,CAAC;IAevC;;;;;;OAMG;IACG,+BAA+B,CACjC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EAAE,EACtB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC;YAgCJ,qBAAqB;YAuBrB,qBAAqB;CAsCtC"}
1
+ {"version":3,"file":"party-allocation-service.d.ts","sourceRoot":"","sources":["../../src/ledger/party-allocation-service.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,2BAA2B,EAE9B,MAAM,oCAAoC,CAAA;AAE3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAE7B,MAAM,MAAM,cAAc,GAAG;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,KAAK,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;AAEpD;;GAEG;AACH,qBAAa,sBAAsB;IAC/B,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,cAAc,CAAoB;gBAE9B,EACR,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,MAAM,EACN,WAAW,GACd,EAAE;QACC,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,mBAAmB,EAAE,mBAAmB,CAAA;QACxC,aAAa,EAAE,MAAM,CAAA;QACrB,MAAM,EAAE,MAAM,CAAA;QACd,WAAW,CAAC,EAAE,MAAM,CAAA;KACvB;IAYD;;;;OAIG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAE1E;;;;;;OAMG;IACG,aAAa,CACf,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,WAAW,GAC7B,OAAO,CAAC,cAAc,CAAC;IAoB1B;;;OAGG;IACH,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAenD;;;;;OAKG;IACH,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAsB5D;;;;OAIG;IACG,4BAA4B,CAC9B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAClB,OAAO,CAAC,2BAA2B,CAAC;IAevC;;;;;;OAMG;IACG,+BAA+B,CACjC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EAAE,EACtB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC;YAgCJ,qBAAqB;YAgCrB,qBAAqB;CAsCtC"}
@@ -37,6 +37,36 @@ export class PartyAllocationService {
37
37
  const multiprefix = Buffer.from([0x12, 0x20]);
38
38
  return Buffer.concat([multiprefix, hash]).toString('hex');
39
39
  }
40
+ /**
41
+ * Normalizes a public key to base64 format.
42
+ * Converts hex format (Fireblocks) to base64, or returns base64 as-is.
43
+ * @param publicKey Public key in hex or base64 format
44
+ * @returns Public key in base64 format, or null if conversion fails
45
+ */
46
+ normalizePublicKeyToBase64(publicKey) {
47
+ try {
48
+ // Try hex first (Fireblocks format), fallback to base64 (internal format)
49
+ try {
50
+ const hexKey = Buffer.from(publicKey, 'hex');
51
+ // If it's valid hex and produces 32 bytes, convert to base64
52
+ if (hexKey.length === 32) {
53
+ return hexKey.toString('base64');
54
+ }
55
+ else {
56
+ // Invalid hex length, treat as base64
57
+ return publicKey;
58
+ }
59
+ }
60
+ catch {
61
+ // Not valid hex, treat as base64
62
+ return publicKey;
63
+ }
64
+ }
65
+ catch {
66
+ // If any conversion fails, return null
67
+ return null;
68
+ }
69
+ }
40
70
  async generateTopologyTransactions(hint, publicKey) {
41
71
  const synchronizerId = this.synchronizerId ?? (await this.ledgerClient.getSynchronizerId());
42
72
  return this.ledgerClient.generateTopology(synchronizerId, publicKey, hint);
@@ -57,7 +87,13 @@ export class PartyAllocationService {
57
87
  return res.partyId;
58
88
  }
59
89
  async allocateInternalParty(userId, hint) {
60
- const { participantId: namespace } = await this.ledgerClient.getWithRetry('/v2/parties/participant-id');
90
+ const { participantId } = await this.ledgerClient.getWithRetry('/v2/parties/participant-id');
91
+ // Extract the namespace part from participantId
92
+ // Format is hint::namespace
93
+ const [, namespace] = participantId.split('::');
94
+ if (!namespace) {
95
+ throw new Error(`Invalid participantId format: expected "hint::namespace", got "${participantId}"`);
96
+ }
61
97
  const res = await this.ledgerClient.postWithRetry('/v2/parties', {
62
98
  partyIdHint: hint,
63
99
  identityProviderId: '',
@@ -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
  });