@canton-network/wallet-gateway-remote 0.24.0 → 0.26.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 (88) hide show
  1. package/dist/auth/jwt-auth-service.d.ts.map +1 -1
  2. package/dist/auth/jwt-auth-service.js +25 -0
  3. package/dist/config/Config.d.ts +31 -0
  4. package/dist/config/Config.d.ts.map +1 -1
  5. package/dist/config/Config.js +23 -0
  6. package/dist/config/Config.test.js +1 -1
  7. package/dist/dapp-api/controller.d.ts +1 -0
  8. package/dist/dapp-api/controller.d.ts.map +1 -1
  9. package/dist/dapp-api/controller.js +26 -1
  10. package/dist/dapp-api/rpc-gen/index.d.ts +3 -0
  11. package/dist/dapp-api/rpc-gen/index.d.ts.map +1 -1
  12. package/dist/dapp-api/rpc-gen/index.js +1 -0
  13. package/dist/dapp-api/rpc-gen/typings.d.ts +3 -2
  14. package/dist/dapp-api/rpc-gen/typings.d.ts.map +1 -1
  15. package/dist/dapp-api/server.test.js +1 -1
  16. package/dist/env.d.ts +1 -0
  17. package/dist/env.d.ts.map +1 -1
  18. package/dist/env.js +1 -0
  19. package/dist/example-config.d.ts +5 -0
  20. package/dist/example-config.d.ts.map +1 -1
  21. package/dist/example-config.js +5 -0
  22. package/dist/index.d.ts +2 -1
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +18 -5
  25. package/dist/init.d.ts.map +1 -1
  26. package/dist/init.js +9 -4
  27. package/dist/ledger/party-allocation-service.test.js +19 -17
  28. package/dist/ledger/transaction-service.d.ts +1 -0
  29. package/dist/ledger/transaction-service.d.ts.map +1 -1
  30. package/dist/ledger/transaction-service.js +65 -53
  31. package/dist/ledger/wallet-allocation/signing-providers/blockdaemon-wallet-allocator.d.ts.map +1 -1
  32. package/dist/ledger/wallet-allocation/signing-providers/blockdaemon-wallet-allocator.js +2 -1
  33. package/dist/ledger/wallet-allocation/wallet-allocation-service.test.js +22 -22
  34. package/dist/ledger/wallet-sync-service.d.ts.map +1 -1
  35. package/dist/ledger/wallet-sync-service.js +11 -8
  36. package/dist/ledger/wallet-sync-service.test.js +15 -13
  37. package/dist/middleware/rateLimit.d.ts +5 -0
  38. package/dist/middleware/rateLimit.d.ts.map +1 -1
  39. package/dist/middleware/rateLimit.js +40 -0
  40. package/dist/middleware/rateLimit.test.d.ts +2 -0
  41. package/dist/middleware/rateLimit.test.d.ts.map +1 -0
  42. package/dist/middleware/rateLimit.test.js +30 -0
  43. package/dist/user-api/controller.d.ts.map +1 -1
  44. package/dist/user-api/controller.js +6 -5
  45. package/dist/user-api/rpc-gen/typings.d.ts +12 -14
  46. package/dist/user-api/rpc-gen/typings.d.ts.map +1 -1
  47. package/dist/user-api/server.test.js +1 -1
  48. package/dist/web/frontend/404/index.html +2 -2
  49. package/dist/web/frontend/{transactions → activities}/index.html +6 -7
  50. package/dist/web/frontend/approve/index.html +7 -7
  51. package/dist/web/frontend/assets/404-CEw-fKbi.js +5 -0
  52. package/dist/web/frontend/assets/activities-BdSUE0hv.js +60 -0
  53. package/dist/web/frontend/assets/addIdentityProvider-Bzz1fUGn.js +35 -0
  54. package/dist/web/frontend/assets/addNetwork-B4FpgV7D.js +38 -0
  55. package/dist/web/frontend/assets/addParty-D-UmQ0Oh.js +38 -0
  56. package/dist/web/frontend/assets/approve-DP3Lfyhw.js +21 -0
  57. package/dist/web/frontend/assets/{callback-Bbv8zOQx.js → callback-CXLUjUAK.js} +1 -1
  58. package/dist/web/frontend/assets/identityProviders-CtFhI1gg.js +71 -0
  59. package/dist/web/frontend/assets/index-BuC7gGqj.js +3942 -0
  60. package/dist/web/frontend/assets/{index-NP2zGQqX.js → index-CiMGhYb1.js} +2 -2
  61. package/dist/web/frontend/assets/index-DFhaSBOK.js +91 -0
  62. package/dist/web/frontend/assets/{index-64ZRFXyL.js → index-dDAXt5F2.js} +1 -1
  63. package/dist/web/frontend/assets/login-CmwQEYxS.js +10 -0
  64. package/dist/web/frontend/assets/networks-f8gSZxSb.js +73 -0
  65. package/dist/web/frontend/assets/reviewIdentityProvider-CJFOHumn.js +43 -0
  66. package/dist/web/frontend/assets/reviewNetwork-D3QSssLB.js +43 -0
  67. package/dist/web/frontend/assets/{settings-Bv6XHxUD.js → settings-Cc-Ij_uP.js} +2 -2
  68. package/dist/web/frontend/assets/{state-BsGwKQMR.js → state-CZ6wI2d4.js} +1 -1
  69. package/dist/web/frontend/assets/{utils-Ou54c_Bf.js → utils-CVOqcw_M.js} +1 -1
  70. package/dist/web/frontend/callback/index.html +2 -2
  71. package/dist/web/frontend/identity-providers/add/index.html +16 -0
  72. package/dist/web/frontend/{wallets → identity-providers}/index.html +5 -6
  73. package/dist/web/frontend/identity-providers/review/index.html +16 -0
  74. package/dist/web/frontend/index.html +1 -1
  75. package/dist/web/frontend/login/index.html +15 -7
  76. package/dist/web/frontend/networks/add/index.html +16 -0
  77. package/dist/web/frontend/networks/index.html +16 -0
  78. package/dist/web/frontend/networks/review/index.html +16 -0
  79. package/dist/web/frontend/parties/add/index.html +18 -0
  80. package/dist/web/frontend/parties/index.html +17 -0
  81. package/dist/web/frontend/settings/index.html +3 -3
  82. package/package.json +26 -29
  83. package/dist/web/frontend/assets/404-mTP2h7GO.js +0 -8
  84. package/dist/web/frontend/assets/approve-B7ioWbgg.js +0 -20
  85. package/dist/web/frontend/assets/index-CMV7Immb.js +0 -1698
  86. package/dist/web/frontend/assets/login-jo0xuh02.js +0 -7
  87. package/dist/web/frontend/assets/transactions-Cvi9DMx7.js +0 -28
  88. package/dist/web/frontend/assets/wallets-DFBcTQHX.js +0 -62
@@ -1 +1 @@
1
- {"version":3,"file":"jwt-auth-service.d.ts","sourceRoot":"","sources":["../../src/auth/jwt-auth-service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAA;AAEzD,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAE7B;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,KAAK,EAAE,QAAQ,MAAM,KAAG,WAwF5D,CAAA"}
1
+ {"version":3,"file":"jwt-auth-service.d.ts","sourceRoot":"","sources":["../../src/auth/jwt-auth-service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAA;AAEzD,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAE7B;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,KAAK,EAAE,QAAQ,MAAM,KAAG,WA+H5D,CAAA"}
@@ -62,6 +62,31 @@ export const jwtAuthService = (store, logger) => ({
62
62
  if (!payload.sub) {
63
63
  return undefined;
64
64
  }
65
+ const networks = await store.listNetworks();
66
+ const networksForIdp = networks.filter((n) => n.identityProviderId === idp.id);
67
+ const expectedAudiences = networksForIdp
68
+ .map((n) => n.auth.audience)
69
+ .filter((aud) => aud !== undefined && aud !== '');
70
+ if (expectedAudiences.length === 0) {
71
+ logger.warn(`No networks configured for IDP ${idp.id}, cannot validate audience`);
72
+ return undefined;
73
+ }
74
+ const tokenAudience = payload.aud;
75
+ if (!tokenAudience) {
76
+ logger.warn('JWT does not contain an audience claim');
77
+ return undefined;
78
+ }
79
+ const tokenAudiences = Array.isArray(tokenAudience)
80
+ ? tokenAudience
81
+ : [tokenAudience];
82
+ const audMatch = tokenAudiences.some((aud) => expectedAudiences.includes(aud));
83
+ if (!audMatch) {
84
+ logger.warn({
85
+ tokenAudiences,
86
+ expectedAudiences,
87
+ }, 'JWT audience does not match any configured network');
88
+ return undefined;
89
+ }
65
90
  logger.debug({
66
91
  userId: payload.sub,
67
92
  accessToken: jwt,
@@ -13,6 +13,7 @@ export declare const serverConfigSchema: z.ZodObject<{
13
13
  tls: z.ZodOptional<z.ZodBoolean>;
14
14
  requestSizeLimit: z.ZodDefault<z.ZodString>;
15
15
  requestRateLimit: z.ZodDefault<z.ZodNumber>;
16
+ trustProxy: z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodNumber, z.ZodString]>>;
16
17
  admin: z.ZodOptional<z.ZodString>;
17
18
  }, z.core.$strip>;
18
19
  export declare const rawConfigSchema: z.ZodObject<{
@@ -30,8 +31,23 @@ export declare const rawConfigSchema: z.ZodObject<{
30
31
  tls: z.ZodOptional<z.ZodBoolean>;
31
32
  requestSizeLimit: z.ZodDefault<z.ZodString>;
32
33
  requestRateLimit: z.ZodDefault<z.ZodNumber>;
34
+ trustProxy: z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodNumber, z.ZodString]>>;
33
35
  admin: z.ZodOptional<z.ZodString>;
34
36
  }, z.core.$strip>>;
37
+ logging: z.ZodOptional<z.ZodPipe<z.ZodTransform<{}, unknown>, z.ZodObject<{
38
+ level: z.ZodOptional<z.ZodEnum<{
39
+ error: "error";
40
+ trace: "trace";
41
+ debug: "debug";
42
+ info: "info";
43
+ warn: "warn";
44
+ fatal: "fatal";
45
+ }>>;
46
+ format: z.ZodOptional<z.ZodEnum<{
47
+ json: "json";
48
+ pretty: "pretty";
49
+ }>>;
50
+ }, z.core.$strip>>>;
35
51
  store: z.ZodObject<{
36
52
  connection: z.ZodDiscriminatedUnion<[z.ZodObject<{
37
53
  type: z.ZodLiteral<"memory">;
@@ -174,8 +190,23 @@ export declare const configSchema: z.ZodObject<{
174
190
  tls: z.ZodOptional<z.ZodBoolean>;
175
191
  requestSizeLimit: z.ZodDefault<z.ZodString>;
176
192
  requestRateLimit: z.ZodDefault<z.ZodNumber>;
193
+ trustProxy: z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodNumber, z.ZodString]>>;
177
194
  admin: z.ZodOptional<z.ZodString>;
178
195
  }, z.core.$strip>>;
196
+ logging: z.ZodOptional<z.ZodPipe<z.ZodTransform<{}, unknown>, z.ZodObject<{
197
+ level: z.ZodOptional<z.ZodEnum<{
198
+ error: "error";
199
+ trace: "trace";
200
+ debug: "debug";
201
+ info: "info";
202
+ warn: "warn";
203
+ fatal: "fatal";
204
+ }>>;
205
+ format: z.ZodOptional<z.ZodEnum<{
206
+ json: "json";
207
+ pretty: "pretty";
208
+ }>>;
209
+ }, z.core.$strip>>>;
179
210
  store: z.ZodObject<{
180
211
  connection: z.ZodDiscriminatedUnion<[z.ZodObject<{
181
212
  type: z.ZodLiteral<"memory">;
@@ -1 +1 @@
1
- {"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../src/config/Config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AASvB,eAAO,MAAM,gBAAgB;;;;iBAY3B,CAAA;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;;iBA0C7B,CAAA;AAcF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAM1B,CAAA;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAMvB,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AACzD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAC7D,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AACvD,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA"}
1
+ {"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../src/config/Config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AASvB,eAAO,MAAM,gBAAgB;;;;iBAY3B,CAAA;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;;;iBAiD7B,CAAA;AAiCF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAO1B,CAAA;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAOvB,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AACzD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAC7D,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AACvD,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA"}
@@ -48,10 +48,31 @@ export const serverConfigSchema = z.object({
48
48
  requestRateLimit: z.number().default(10000).meta({
49
49
  description: 'The maximum number of requests per minute from a single IP address. Defaults to 10000.',
50
50
  }),
51
+ trustProxy: z
52
+ .union([z.boolean(), z.number().int().min(0), z.string()])
53
+ .default(false)
54
+ .meta({
55
+ description: 'Express trust proxy setting used to resolve client IP addresses when running behind reverse proxies/load balancers. Set this correctly in production (for example 1 for a single trusted proxy hop). Defaults to false.',
56
+ }),
51
57
  admin: z.string().optional().meta({
52
58
  description: 'The JWT claim (e.g. "sub") identifying the admin user. If set, requests with a matching claim will be granted admin privileges.',
53
59
  }),
54
60
  });
61
+ const loggingConfigSchema = z
62
+ .object({
63
+ level: z
64
+ .enum(['trace', 'debug', 'info', 'warn', 'error', 'fatal'])
65
+ .optional()
66
+ .meta({
67
+ description: 'The log level for the gateway. If omitted, defaults to info.',
68
+ }),
69
+ format: z.enum(['json', 'pretty']).optional().meta({
70
+ description: 'The log format for the gateway. If omitted, defaults to pretty.',
71
+ }),
72
+ })
73
+ .meta({
74
+ description: 'Optional logging configuration. If omitted, defaults will be used.',
75
+ });
55
76
  const authFromEnvOrConfig = z.union([authSchema, authFromEnvSchema]);
56
77
  const bootstrapFromEnv = bootstrapConfigSchema.extend({
57
78
  networks: z.array(networkSchema.extend({
@@ -63,6 +84,7 @@ const bootstrapFromEnv = bootstrapConfigSchema.extend({
63
84
  export const rawConfigSchema = z.object({
64
85
  kernel: kernelInfoSchema,
65
86
  server: z.preprocess((val) => val ?? {}, serverConfigSchema),
87
+ logging: z.preprocess((val) => val ?? {}, loggingConfigSchema).optional(),
66
88
  store: storeConfigSchema,
67
89
  signingStore: signingStoreConfigSchema,
68
90
  bootstrap: bootstrapFromEnv,
@@ -70,6 +92,7 @@ export const rawConfigSchema = z.object({
70
92
  export const configSchema = z.object({
71
93
  kernel: kernelInfoSchema,
72
94
  server: z.preprocess((val) => val ?? {}, serverConfigSchema),
95
+ logging: z.preprocess((val) => val ?? {}, loggingConfigSchema).optional(),
73
96
  store: storeConfigSchema,
74
97
  signingStore: signingStoreConfigSchema,
75
98
  bootstrap: bootstrapConfigSchema,
@@ -1,6 +1,6 @@
1
1
  // Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
- import { expect, test } from '@jest/globals';
3
+ import { expect, test } from 'vitest';
4
4
  import { ConfigUtils } from './ConfigUtils.js';
5
5
  test('config from json file', async () => {
6
6
  const resp = ConfigUtils.loadConfigFile('../test/config.json');
@@ -7,6 +7,7 @@ export declare const dappController: (kernelInfo: KernelInfoConfig, dappUrl: str
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;
10
+ isConnected: import("./rpc-gen/typings.js").IsConnected;
10
11
  getActiveNetwork: import("./rpc-gen/typings.js").GetActiveNetwork;
11
12
  prepareExecute: import("./rpc-gen/typings.js").PrepareExecute;
12
13
  signMessage: import("./rpc-gen/typings.js").SignMessage;
@@ -1 +1 @@
1
- {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/dapp-api/controller.ts"],"names":[],"mappings":"AAGA,OAAO,EAEH,WAAW,EAEd,MAAM,kCAAkC,CAAA;AAYzC,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;AAI7B,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;;;;;;;;;;;;;;CAoRxB,CAAA"}
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/dapp-api/controller.ts"],"names":[],"mappings":"AAGA,OAAO,EAEH,WAAW,EAEd,MAAM,kCAAkC,CAAA;AAYzC,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;AAI7B,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;;;;;;;;;;;;;;;CAiTxB,CAAA"}
@@ -54,6 +54,7 @@ export const dappController = (kernelInfo, dappUrl, userUrl, store, notification
54
54
  },
55
55
  };
56
56
  notifier.emit('statusChanged', statusEvent);
57
+ notifier.emit('connected', statusEvent);
57
58
  return connection;
58
59
  },
59
60
  disconnect: async () => {
@@ -80,6 +81,30 @@ export const dappController = (kernelInfo, dappUrl, userUrl, store, notification
80
81
  }
81
82
  return null;
82
83
  },
84
+ isConnected: async () => {
85
+ if (!context || !(await store.getSession())) {
86
+ return {
87
+ isConnected: false,
88
+ isNetworkConnected: false,
89
+ networkReason: 'Unauthenticated',
90
+ userUrl: `${userUrl}/login/`,
91
+ };
92
+ }
93
+ const network = await store.getCurrentNetwork();
94
+ const ledgerClient = new LedgerClient({
95
+ baseUrl: new URL(network.ledgerApi.baseUrl),
96
+ logger,
97
+ accessTokenProvider: AuthTokenProvider.fromToken(context.accessToken, logger),
98
+ });
99
+ const status = await networkStatus(ledgerClient);
100
+ return {
101
+ isConnected: true,
102
+ reason: 'OK',
103
+ isNetworkConnected: status.isConnected,
104
+ networkReason: status.reason ? status.reason : 'OK',
105
+ userUrl: `${userUrl}/login/`,
106
+ };
107
+ },
83
108
  ledgerApi: async (params) => {
84
109
  const network = await store.getCurrentNetwork();
85
110
  const ledgerClient = new LedgerClient({
@@ -140,7 +165,7 @@ export const dappController = (kernelInfo, dappUrl, userUrl, store, notification
140
165
  confirmationRequestTrafficCostEstimation: response.costEstimation
141
166
  ?.confirmationRequestTrafficCostEstimation,
142
167
  }, 'prepared transaction traffic estimation');
143
- store.setTransaction(transaction);
168
+ await store.setTransaction(transaction);
144
169
  return {
145
170
  // closeafteraction query param flag makes approving or deleting tx close the popup
146
171
  userUrl: `${userUrl}/approve/index.html?commandId=${commandId}&closeafteraction`,
@@ -1,6 +1,7 @@
1
1
  import { Status } from './typings.js';
2
2
  import { Connect } from './typings.js';
3
3
  import { Disconnect } from './typings.js';
4
+ import { IsConnected } from './typings.js';
4
5
  import { GetActiveNetwork } from './typings.js';
5
6
  import { PrepareExecute } from './typings.js';
6
7
  import { SignMessage } from './typings.js';
@@ -15,6 +16,7 @@ export type Methods = {
15
16
  status: Status;
16
17
  connect: Connect;
17
18
  disconnect: Disconnect;
19
+ isConnected: IsConnected;
18
20
  getActiveNetwork: GetActiveNetwork;
19
21
  prepareExecute: PrepareExecute;
20
22
  signMessage: SignMessage;
@@ -30,6 +32,7 @@ declare function buildController(methods: Methods): {
30
32
  status: Status;
31
33
  connect: Connect;
32
34
  disconnect: Disconnect;
35
+ isConnected: IsConnected;
33
36
  getActiveNetwork: GetActiveNetwork;
34
37
  prepareExecute: PrepareExecute;
35
38
  signMessage: SignMessage;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dapp-api/rpc-gen/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAExC,MAAM,MAAM,OAAO,GAAG;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,UAAU,CAAA;IACtB,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,cAAc,EAAE,cAAc,CAAA;IAC9B,WAAW,EAAE,WAAW,CAAA;IACxB,SAAS,EAAE,SAAS,CAAA;IACpB,SAAS,EAAE,SAAS,CAAA;IACpB,eAAe,EAAE,eAAe,CAAA;IAChC,eAAe,EAAE,eAAe,CAAA;IAChC,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,YAAY,EAAE,YAAY,CAAA;IAC1B,SAAS,EAAE,SAAS,CAAA;CACvB,CAAA;AAED,iBAAS,eAAe,CAAC,OAAO,EAAE,OAAO;;;;;;;;;;;;;;EAgBxC;AAED,eAAe,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dapp-api/rpc-gen/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAExC,MAAM,MAAM,OAAO,GAAG;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,UAAU,CAAA;IACtB,WAAW,EAAE,WAAW,CAAA;IACxB,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,cAAc,EAAE,cAAc,CAAA;IAC9B,WAAW,EAAE,WAAW,CAAA;IACxB,SAAS,EAAE,SAAS,CAAA;IACpB,SAAS,EAAE,SAAS,CAAA;IACpB,eAAe,EAAE,eAAe,CAAA;IAChC,eAAe,EAAE,eAAe,CAAA;IAChC,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,YAAY,EAAE,YAAY,CAAA;IAC1B,SAAS,EAAE,SAAS,CAAA;CACvB,CAAA;AAED,iBAAS,eAAe,CAAC,OAAO,EAAE,OAAO;;;;;;;;;;;;;;;EAiBxC;AAED,eAAe,eAAe,CAAA"}
@@ -5,6 +5,7 @@ function buildController(methods) {
5
5
  status: methods.status,
6
6
  connect: methods.connect,
7
7
  disconnect: methods.disconnect,
8
+ isConnected: methods.isConnected,
8
9
  getActiveNetwork: methods.getActiveNetwork,
9
10
  prepareExecute: methods.prepareExecute,
10
11
  signMessage: methods.signMessage,
@@ -152,7 +152,7 @@ export interface Provider {
152
152
  * Whether or not the user is authenticated with the Wallet.
153
153
  *
154
154
  */
155
- export type IsConnected = boolean;
155
+ export type IsConnectedValue = boolean;
156
156
  /**
157
157
  *
158
158
  * Reason for the wallet state, e.g., 'no signing provider matched'.
@@ -172,7 +172,7 @@ export type IsNetworkConnected = boolean;
172
172
  */
173
173
  export type NetworkReason = string;
174
174
  export interface ConnectResult {
175
- isConnected: IsConnected;
175
+ isConnected: IsConnectedValue;
176
176
  reason?: Reason;
177
177
  isNetworkConnected: IsNetworkConnected;
178
178
  networkReason?: NetworkReason;
@@ -499,6 +499,7 @@ export type TxChangedEvent = TxChangedPendingEvent | TxChangedSignedEvent | TxCh
499
499
  export type Status = () => Promise<StatusEvent>;
500
500
  export type Connect = () => Promise<ConnectResult>;
501
501
  export type Disconnect = () => Promise<Null>;
502
+ export type IsConnected = () => Promise<ConnectResult>;
502
503
  export type GetActiveNetwork = () => Promise<Network>;
503
504
  export type PrepareExecute = (params: PrepareExecuteParams) => Promise<PrepareExecuteResult>;
504
505
  export type SignMessage = (params: SignMessageParams) => Promise<SignMessageResult>;
@@ -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,6 +1,6 @@
1
1
  // Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
- import { expect, test } from '@jest/globals';
3
+ import { expect, test } from 'vitest';
4
4
  import cors from 'cors';
5
5
  import request from 'supertest';
6
6
  import express from 'express';
package/dist/env.d.ts CHANGED
@@ -3,6 +3,7 @@ export declare class Env {
3
3
  static FIREBLOCKS_SECRET: () => string | undefined;
4
4
  static BLOCKDAEMON_API_URL: (fallback: string) => string;
5
5
  static BLOCKDAEMON_API_KEY: (fallback: string) => string;
6
+ static BLOCKDAEMON_CAIP2: (fallback: string) => string;
6
7
  static get(key: string, options: {
7
8
  required?: boolean;
8
9
  fallback: string;
package/dist/env.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAGA,qBAAa,GAAG;IACZ,MAAM,CAAC,kBAAkB,2BAAsC;IAC/D,MAAM,CAAC,iBAAiB,2BAAqC;IAC7D,MAAM,CAAC,mBAAmB,GAAI,UAAU,MAAM,YACE;IAChD,MAAM,CAAC,mBAAmB,GAAI,UAAU,MAAM,YACE;IAEhD,MAAM,CAAC,GAAG,CACN,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAClD,MAAM;IACT,MAAM,CAAC,GAAG,CACN,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;QAAE,QAAQ,EAAE,IAAI,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAC/C,MAAM;IACT,MAAM,CAAC,GAAG,CACN,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,GAChE,MAAM,GAAG,SAAS;CAcxB"}
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAGA,qBAAa,GAAG;IACZ,MAAM,CAAC,kBAAkB,2BAAsC;IAC/D,MAAM,CAAC,iBAAiB,2BAAqC;IAC7D,MAAM,CAAC,mBAAmB,GAAI,UAAU,MAAM,YACE;IAChD,MAAM,CAAC,mBAAmB,GAAI,UAAU,MAAM,YACE;IAChD,MAAM,CAAC,iBAAiB,GAAI,UAAU,MAAM,YACE;IAE9C,MAAM,CAAC,GAAG,CACN,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAClD,MAAM;IACT,MAAM,CAAC,GAAG,CACN,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;QAAE,QAAQ,EAAE,IAAI,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAC/C,MAAM;IACT,MAAM,CAAC,GAAG,CACN,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,GAChE,MAAM,GAAG,SAAS;CAcxB"}
package/dist/env.js CHANGED
@@ -5,6 +5,7 @@ export class Env {
5
5
  static { this.FIREBLOCKS_SECRET = () => Env.get('FIREBLOCKS_SECRET'); }
6
6
  static { this.BLOCKDAEMON_API_URL = (fallback) => Env.get('BLOCKDAEMON_API_URL', { fallback }); }
7
7
  static { this.BLOCKDAEMON_API_KEY = (fallback) => Env.get('BLOCKDAEMON_API_KEY', { fallback }); }
8
+ static { this.BLOCKDAEMON_CAIP2 = (fallback) => Env.get('BLOCKDAEMON_CAIP2', { fallback }); }
8
9
  static get(key, options) {
9
10
  const { fallback, required } = options || {};
10
11
  const value = process.env[key]?.trim() || fallback?.trim();
@@ -3,6 +3,10 @@ declare const _default: {
3
3
  id: string;
4
4
  clientType: "remote";
5
5
  };
6
+ logging: {
7
+ level: "info";
8
+ format: "pretty";
9
+ };
6
10
  server: {
7
11
  port: number;
8
12
  dappPath: string;
@@ -10,6 +14,7 @@ declare const _default: {
10
14
  allowedOrigins: "*";
11
15
  requestSizeLimit: string;
12
16
  requestRateLimit: number;
17
+ trustProxy: false;
13
18
  admin: string;
14
19
  };
15
20
  signingStore: {
@@ -1 +1 @@
1
- {"version":3,"file":"example-config.d.ts","sourceRoot":"","sources":["../src/example-config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,wBA6FqB"}
1
+ {"version":3,"file":"example-config.d.ts","sourceRoot":"","sources":["../src/example-config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,wBAkGqB"}
@@ -5,6 +5,10 @@ export default {
5
5
  id: 'remote-da',
6
6
  clientType: 'remote',
7
7
  },
8
+ logging: {
9
+ level: 'info',
10
+ format: 'pretty',
11
+ },
8
12
  server: {
9
13
  port: 3030,
10
14
  dappPath: '/api/v0/dapp',
@@ -12,6 +16,7 @@ export default {
12
16
  allowedOrigins: '*',
13
17
  requestSizeLimit: '5mb',
14
18
  requestRateLimit: 10000,
19
+ trustProxy: false,
15
20
  admin: 'sub',
16
21
  },
17
22
  signingStore: {
package/dist/index.d.ts CHANGED
@@ -4,7 +4,8 @@ declare const options: {
4
4
  configSchema: boolean;
5
5
  configExample: boolean;
6
6
  port?: string | true;
7
- logFormat: "json" | "pretty";
7
+ logFormat?: "json" | "pretty";
8
+ logLevel?: "error" | "trace" | "debug" | "info" | "warn" | "fatal";
8
9
  };
9
10
  export type CliOptions = typeof options;
10
11
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAiEA,QAAA,MAAM,OAAO;;;;;;CAAiB,CAAA;AAE9B,MAAM,MAAM,UAAU,GAAG,OAAO,OAAO,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAkFA,QAAA,MAAM,OAAO;;;;;;;CAAiB,CAAA;AAE9B,MAAM,MAAM,UAAU,GAAG,OAAO,OAAO,CAAA"}
package/dist/index.js CHANGED
@@ -21,9 +21,18 @@ const program = new Command()
21
21
  .option('--config-schema', 'output the config schema and exit', false)
22
22
  .option('--config-example', 'output an example config and exit', false)
23
23
  .option('-p, --port [port]', 'set port (overrides config)')
24
- .addOption(new Option('-f, --log-format <format>', 'set log format')
25
- .choices(['json', 'pretty'])
26
- .default('pretty'))
24
+ .addOption(new Option('-f, --log-format <format>', 'set log format').choices([
25
+ 'json',
26
+ 'pretty',
27
+ ]))
28
+ .addOption(new Option('-l, --log-level <level>', 'set log level').choices([
29
+ 'trace',
30
+ 'debug',
31
+ 'info',
32
+ 'warn',
33
+ 'error',
34
+ 'fatal',
35
+ ]))
27
36
  .action((opts) => {
28
37
  if (opts.configSchema) {
29
38
  console.log(JSON.stringify(z.toJSONSchema(rawConfigSchema), null, 2));
@@ -33,11 +42,15 @@ const program = new Command()
33
42
  console.log(JSON.stringify(exampleConfig, null, 2));
34
43
  process.exit(0);
35
44
  }
45
+ const config = ConfigUtils.loadConfigFile(opts.config);
46
+ const configLogging = config.logging ?? {};
47
+ const logFormat = opts.logFormat ?? configLogging.format ?? 'pretty';
48
+ const logLevel = opts.logLevel ?? configLogging.level ?? 'info';
36
49
  // Define project-global logger
37
50
  const logger = pino({
38
51
  name: 'main',
39
- level: 'info',
40
- ...(opts.logFormat === 'pretty'
52
+ level: logLevel,
53
+ ...(logFormat === 'pretty'
41
54
  ? {
42
55
  transport: {
43
56
  target: 'pino-pretty',
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAqB7B,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAyIvC,wBAAsB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,iBAiIhE"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAuB7B,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AA6IvC,wBAAsB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,iBA4IhE"}
package/dist/init.js CHANGED
@@ -14,7 +14,7 @@ import BlockdaemonSigningProvider from '@canton-network/core-signing-blockdaemon
14
14
  import { jwtAuthService } from './auth/jwt-auth-service.js';
15
15
  import express from 'express';
16
16
  import { jwtAuth } from './middleware/jwtAuth.js';
17
- import { rateLimiter } from './middleware/rateLimit.js';
17
+ import { authenticatedRateLimiter, preAuthIpRateLimiter, rateLimiter, } from './middleware/rateLimit.js';
18
18
  import { deriveUrls } from './config/ConfigUtils.js';
19
19
  import { existsSync } from 'fs';
20
20
  import { GATEWAY_VERSION } from './version.js';
@@ -118,11 +118,13 @@ export async function initialize(opts, logger) {
118
118
  const port = opts.port ? Number(opts.port) : config.server.port;
119
119
  const { serviceUrl, publicUrl, dappApiUrl, userApiUrl } = deriveUrls(config, port);
120
120
  const app = express();
121
+ app.set('trust proxy', config.server.trustProxy);
121
122
  const server = app.listen(port, () => {
122
123
  logger.info(`Remote Wallet Gateway starting on ${serviceUrl})`);
123
124
  });
124
125
  app.use(express.json({ limit: config.server.requestSizeLimit }));
125
- const rpcRateLimit = rateLimiter(config.server.requestRateLimit);
126
+ const preAuthRateLimit = preAuthIpRateLimiter(config.server.requestRateLimit);
127
+ const postAuthRateLimit = authenticatedRateLimiter(config.server.requestRateLimit);
126
128
  const healthCheckRateLimit = rateLimiter(1000); // Allow more requests for health checks
127
129
  app.use('/healthz', healthCheckRateLimit, (_req, res) => res.status(200).send('OK'));
128
130
  app.use('/readyz', healthCheckRateLimit, (_req, res) => {
@@ -156,6 +158,7 @@ export async function initialize(opts, logger) {
156
158
  [SigningProvider.BLOCKDAEMON]: new BlockdaemonSigningProvider({
157
159
  baseUrl: Env.BLOCKDAEMON_API_URL('http://localhost:5080/api/cwp/canton'),
158
160
  apiKey: Env.BLOCKDAEMON_API_KEY(''),
161
+ caip2: Env.BLOCKDAEMON_CAIP2('canton:testnet'),
159
162
  }),
160
163
  };
161
164
  const allowedPaths = {
@@ -168,8 +171,10 @@ export async function initialize(opts, logger) {
168
171
  ],
169
172
  };
170
173
  app.use('/api/*splat', express.json());
171
- app.use('/api/*splat', rpcRateLimit);
172
- app.use('/api/*splat', jwtAuth(authService, logger.child({ component: 'JwtHandler' })), sessionHandler(store, allowedPaths, logger.child({ component: 'SessionHandler' })));
174
+ app.use('/api/*splat', preAuthRateLimit);
175
+ app.use('/api/*splat', jwtAuth(authService, logger.child({ component: 'JwtHandler' })));
176
+ app.use('/api/*splat', postAuthRateLimit);
177
+ app.use('/api/*splat', sessionHandler(store, allowedPaths, logger.child({ component: 'SessionHandler' })));
173
178
  logger.info({ ...config.server, port }, 'Server configuration');
174
179
  const kernelInfo = config.kernel;
175
180
  // register dapp API handlers
@@ -1,29 +1,31 @@
1
1
  // Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
- import { jest } from '@jest/globals';
3
+ import { vi, describe, it, expect, beforeEach, afterEach } from 'vitest';
4
4
  import { pino } from 'pino';
5
5
  import { sink } from 'pino-test';
6
- const mockLedgerGet = jest.fn();
7
- const mockLedgerPost = jest.fn();
8
- const mockLedgerGrantUserRights = jest.fn();
9
- jest.unstable_mockModule('@canton-network/core-ledger-client', () => ({
10
- Signature: jest.fn(),
11
- SignatureFormat: jest.fn(),
12
- SigningAlgorithmSpec: jest.fn(),
13
- MultiTransactionSignatures: jest.fn(),
14
- SignedTopologyTransaction: jest.fn(),
15
- LedgerClient: jest.fn().mockImplementation(() => {
6
+ const { mockLedgerGet, mockLedgerPost, mockLedgerGrantUserRights } = vi.hoisted(() => ({
7
+ mockLedgerGet: vi.fn(),
8
+ mockLedgerPost: vi.fn(),
9
+ mockLedgerGrantUserRights: vi.fn(),
10
+ }));
11
+ vi.mock('@canton-network/core-ledger-client', () => ({
12
+ Signature: vi.fn(),
13
+ SignatureFormat: vi.fn(),
14
+ SigningAlgorithmSpec: vi.fn(),
15
+ MultiTransactionSignatures: vi.fn(),
16
+ SignedTopologyTransaction: vi.fn(),
17
+ LedgerClient: vi.fn(function LedgerClientMock() {
16
18
  return {
17
19
  getWithRetry: mockLedgerGet,
18
20
  postWithRetry: mockLedgerPost,
19
21
  waitForPartyAndGrantUserRights: mockLedgerGrantUserRights,
20
- generateTopology: jest.fn().mockResolvedValue({
22
+ generateTopology: vi.fn().mockResolvedValue({
21
23
  partyId: 'party2::mypublickey',
22
24
  publicKeyFingerprint: 'mypublickey',
23
25
  topologyTransactions: ['tx1'],
24
26
  multiHash: 'combinedHash',
25
27
  }),
26
- allocateExternalParty: jest
28
+ allocateExternalParty: vi
27
29
  .fn()
28
30
  .mockResolvedValue({ partyId: 'party2::mypublickey' }),
29
31
  };
@@ -60,10 +62,10 @@ describe('PartyAllocationService', () => {
60
62
  const pas = await import('./party-allocation-service.js');
61
63
  // Mock AccessTokenProvider
62
64
  const mockAccessTokenProvider = {
63
- getAccessToken: jest
65
+ getAccessToken: vi
64
66
  .fn()
65
67
  .mockResolvedValue('admin.jwt'),
66
- getAuthContext: jest
68
+ getAuthContext: vi
67
69
  .fn()
68
70
  .mockResolvedValue({
69
71
  userId: 'admin',
@@ -76,9 +78,9 @@ describe('PartyAllocationService', () => {
76
78
  httpLedgerUrl: network.ledgerApi.baseUrl,
77
79
  logger: mockLogger,
78
80
  });
79
- jest.spyOn(service, 'createFingerprintFromKey').mockReturnValue('mypublickey');
81
+ vi.spyOn(service, 'createFingerprintFromKey').mockReturnValue('mypublickey');
80
82
  });
81
- afterEach(() => jest.restoreAllMocks());
83
+ afterEach(() => vi.restoreAllMocks());
82
84
  it('allocates an internal party', async () => {
83
85
  mockLedgerGet.mockResolvedValueOnce({
84
86
  participantId: 'participant1::participantid',
@@ -12,6 +12,7 @@ export declare class TransactionService {
12
12
  private signingDrivers;
13
13
  private notifier;
14
14
  constructor(store: Store, logger: Logger, signingDrivers: Partial<Record<SigningProvider, SigningDriverInterface>> | undefined, notifier: Notifier);
15
+ private loadPreparedTransactionForSigning;
15
16
  signWithParticipant(wallet: Wallet): SignResultSigned;
16
17
  signWithWalletKernel(userId: UserId, wallet: Wallet, signParams: SignParams): Promise<SignResultSigned>;
17
18
  signWithBlockdaemon(userId: UserId, wallet: Wallet, signParams: SignParams): Promise<SignResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"transaction-service.d.ts","sourceRoot":"","sources":["../../src/ledger/transaction-service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AACjE,OAAO,EACH,KAAK,EACL,WAAW,EACX,MAAM,EACN,OAAO,EACV,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,EAGH,sBAAsB,EACtB,eAAe,EAElB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EACH,aAAa,EACb,aAAa,EACb,UAAU,EACV,gBAAgB,EACnB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAA;AAYjE,qBAAa,kBAAkB;IAEvB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,cAAc;IAGtB,OAAO,CAAC,QAAQ;gBALR,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,OAAO,CAC3B,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAClD,YAAK,EACE,QAAQ,EAAE,QAAQ;IAGvB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB;IAS/C,oBAAoB,CAC7B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,GACvB,OAAO,CAAC,gBAAgB,CAAC;IAoDf,mBAAmB,CAC5B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,GACvB,OAAO,CAAC,UAAU,CAAC;IAgGT,kBAAkB,CAC3B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,GACvB,OAAO,CAAC,UAAU,CAAC;IAoGT,sBAAsB,CAC/B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,OAAO,GACjB,OAAO,CAAC,aAAa,CAAC;IAqCZ,mBAAmB,CAC5B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,YAAY,GAC3B,OAAO,CAAC,aAAa,CAAC;CAmD5B"}
1
+ {"version":3,"file":"transaction-service.d.ts","sourceRoot":"","sources":["../../src/ledger/transaction-service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AACjE,OAAO,EACH,KAAK,EACL,WAAW,EACX,MAAM,EACN,OAAO,EACV,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,EAGH,sBAAsB,EACtB,eAAe,EAElB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EACH,aAAa,EACb,aAAa,EACb,UAAU,EACV,gBAAgB,EACnB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAA;AAYjE,qBAAa,kBAAkB;IAEvB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,cAAc;IAGtB,OAAO,CAAC,QAAQ;gBALR,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,OAAO,CAC3B,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAClD,YAAK,EACE,QAAQ,EAAE,QAAQ;YAGhB,iCAAiC;IAYxC,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB;IAS/C,oBAAoB,CAC7B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,GACvB,OAAO,CAAC,gBAAgB,CAAC;IAoDf,mBAAmB,CAC5B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,GACvB,OAAO,CAAC,UAAU,CAAC;IAsGT,kBAAkB,CAC3B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,GACvB,OAAO,CAAC,UAAU,CAAC;IA0GT,sBAAsB,CAC/B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,OAAO,GACjB,OAAO,CAAC,aAAa,CAAC;IAuCZ,mBAAmB,CAC5B,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,YAAY,GAC3B,OAAO,CAAC,aAAa,CAAC;CAqD5B"}