@canton-network/wallet-gateway-remote 0.5.1 → 0.6.1

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 (55) hide show
  1. package/README.md +8 -0
  2. package/dist/auth/jwt-auth-service.d.ts.map +1 -1
  3. package/dist/auth/jwt-auth-service.js +2 -3
  4. package/dist/auth/jwt-unsafe-auth-service.d.ts.map +1 -1
  5. package/dist/auth/jwt-unsafe-auth-service.js +2 -3
  6. package/dist/config/Config.d.ts +61 -659
  7. package/dist/config/Config.d.ts.map +1 -1
  8. package/dist/config/Config.js +2 -0
  9. package/dist/config/Config.test.js +7 -10
  10. package/dist/config/ConfigUtils.d.ts.map +1 -1
  11. package/dist/config/ConfigUtils.js +59 -1
  12. package/dist/dapp-api/controller.d.ts.map +1 -1
  13. package/dist/dapp-api/controller.js +55 -30
  14. package/dist/dapp-api/rpc-gen/typings.d.ts +30 -3
  15. package/dist/dapp-api/rpc-gen/typings.d.ts.map +1 -1
  16. package/dist/dapp-api/server.test.js +2 -0
  17. package/dist/init.d.ts.map +1 -1
  18. package/dist/init.js +50 -2
  19. package/dist/ledger/party-allocation-service.d.ts +20 -0
  20. package/dist/ledger/party-allocation-service.d.ts.map +1 -1
  21. package/dist/ledger/party-allocation-service.js +22 -2
  22. package/dist/ledger/party-allocation-service.test.js +9 -5
  23. package/dist/ledger/wallet-sync-service.d.ts.map +1 -1
  24. package/dist/ledger/wallet-sync-service.js +1 -0
  25. package/dist/user-api/controller.d.ts +2 -1
  26. package/dist/user-api/controller.d.ts.map +1 -1
  27. package/dist/user-api/controller.js +119 -88
  28. package/dist/user-api/rpc-gen/index.d.ts +6 -3
  29. package/dist/user-api/rpc-gen/index.d.ts.map +1 -1
  30. package/dist/user-api/rpc-gen/index.js +2 -1
  31. package/dist/user-api/rpc-gen/typings.d.ts +96 -33
  32. package/dist/user-api/rpc-gen/typings.d.ts.map +1 -1
  33. package/dist/user-api/server.test.js +5 -6
  34. package/dist/utils.d.ts +9 -0
  35. package/dist/utils.d.ts.map +1 -0
  36. package/dist/utils.js +18 -0
  37. package/dist/web/frontend/404/index.html +2 -2
  38. package/dist/web/frontend/approve/index.html +4 -4
  39. package/dist/web/frontend/assets/{404-C4ltj2Y3.js → 404-CT3y_TOo.js} +1 -1
  40. package/dist/web/frontend/assets/{approve-Drc1zW1z.js → approve-aBUJf8IZ.js} +1 -1
  41. package/dist/web/frontend/assets/{callback-BBgKxZBh.js → callback-F-xYJVy-.js} +1 -1
  42. package/dist/web/frontend/assets/{handle-errors-C_r_-A1k.js → handle-errors-C5Ovml71.js} +1 -1
  43. package/dist/web/frontend/assets/{index-_AVK9fEz.js → index-CkNk7mKn.js} +168 -123
  44. package/dist/web/frontend/assets/login-BbI2P4fJ.js +159 -0
  45. package/dist/web/frontend/assets/{networks-DSlcKT60.js → networks-amJnI8M-.js} +13 -9
  46. package/dist/web/frontend/assets/{state-BahUv9dS.js → state-DvPMGcqb.js} +2 -2
  47. package/dist/web/frontend/assets/wallets-DC9a3FFG.js +244 -0
  48. package/dist/web/frontend/callback/index.html +2 -2
  49. package/dist/web/frontend/index.html +1 -1
  50. package/dist/web/frontend/login/index.html +3 -3
  51. package/dist/web/frontend/networks/index.html +4 -4
  52. package/dist/web/frontend/wallets/index.html +4 -4
  53. package/package.json +18 -16
  54. package/dist/web/frontend/assets/login-x46HxVRr.js +0 -159
  55. package/dist/web/frontend/assets/wallets-BXR4V066.js +0 -214
@@ -1 +1 @@
1
- {"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../src/config/Config.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;EAU3B,CAAA;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAOqgU,CAAC;;;;;;;;;;;;;;qBAA0Z,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAA6+B,CAAC;;;;;;;;;;;;qBAA6V,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAA0kC,CAAC;;;;;;;;;;;;;qBAAyY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAAy/B,CAAC;;;;;;;;;;;;qBAAmW,CAAC;;;;;;;;;;;;;;;;;;;;;;;qBAA+mB,CAAC;;;;;;;;;;;;qBAA8V,CAAC;;;;;;;;;;;;;qBAA0Y,CAAC;;;;;;;;;;;;qBAAoW,CAAC;;;;;;;;;;;;;;;;;;;;;;;qBAAqlB,CAAC;;;;;;;;;;;;qBAA8V,CAAC;;;;;;;;;;;;;qBAA0Y,CAAC;;;;;;;;;;;;qBAAoW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAAg5B,CAAC;;;;;;;;;;;;qBAA8V,CAAC;;;;;;;;;;;;;qBAA0Y,CAAC;;;;;;;;;;;;qBAAoW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAAi3B,CAAC;;;;;;;;;;;;qBAA8V,CAAC;;;;;;;;;;;;;qBAA0Y,CAAC;;;;;;;;;;;;qBAAoW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAAjhG,CAAC;;;;;;;;;;;;qBAA8V,CAAC;;;;;;;;;;;;;qBAA0Y,CAAC;;;;;;;;;;;;qBAAoW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAAi3B,CAAC;;;;;;;;;;;;qBAA8V,CAAC;;;;;;;;;;;;;qBAA0Y,CAAC;;;;;;;;;;;;qBAAoW,CAAC;;;;;;;EAJ5zrB,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AACzD,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":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,gBAAgB;;;;;iBAU3B,CAAA;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAIvB,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AACzD,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA"}
@@ -1,6 +1,7 @@
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 { storeConfigSchema } from '@canton-network/core-wallet-store';
4
+ import { storeConfigSchema as signingStoreConfigSchema } from '@canton-network/core-signing-store-sql';
4
5
  import { z } from 'zod';
5
6
  export const kernelInfoSchema = z.object({
6
7
  id: z.string(),
@@ -16,4 +17,5 @@ export const kernelInfoSchema = z.object({
16
17
  export const configSchema = z.object({
17
18
  kernel: kernelInfoSchema,
18
19
  store: storeConfigSchema,
20
+ signingStore: signingStoreConfigSchema,
19
21
  });
@@ -4,16 +4,13 @@ import { expect, test } from '@jest/globals';
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
- expect(resp.store.networks[0].name).toBe('Local (password IDP)');
8
- expect(resp.store.networks[0].ledgerApi.baseUrl).toBe('https://test');
9
- expect(resp.store.networks[0].auth.clientId).toBe('wk-service-account');
10
- expect(resp.store.networks[0].auth.scope).toBe('openid');
11
- expect(resp.store.networks[0].auth.type).toBe('password');
12
- if (resp.store.networks[0].auth.type === 'password') {
13
- expect(resp.store.networks[0].auth.tokenUrl).toBe('tokenUrl');
14
- }
15
- expect(resp.store.networks[1].auth.type).toBe('implicit');
16
- if (resp.store.networks[1].auth.type === 'implicit') {
7
+ expect(resp.store.networks[0].name).toBe('Local (OAuth IDP)');
8
+ expect(resp.store.networks[0].ledgerApi.baseUrl).toBe('http://127.0.0.1:5003');
9
+ expect(resp.store.networks[0].auth.clientId).toBe('operator');
10
+ expect(resp.store.networks[0].auth.scope).toBe('openid daml_ledger_api offline_access');
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') {
17
14
  expect(resp.store.networks[1].auth.audience).toBe('https://daml.com/jwt/aud/participant/participant1::1220d44fc1c3ba0b5bdf7b956ee71bc94ebe2d23258dc268fdf0824fbaeff2c61424');
18
15
  }
19
16
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigUtils.d.ts","sourceRoot":"","sources":["../../src/config/ConfigUtils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAgB,MAAM,aAAa,CAAA;AAElD,qBAAa,WAAW;IACpB,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CASlD"}
1
+ {"version":3,"file":"ConfigUtils.d.ts","sourceRoot":"","sources":["../../src/config/ConfigUtils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAgB,MAAM,aAAa,CAAA;AAElD,qBAAa,WAAW;IACpB,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAoDlD"}
@@ -5,10 +5,68 @@ import { configSchema } from './Config.js';
5
5
  export class ConfigUtils {
6
6
  static loadConfigFile(filePath) {
7
7
  if (existsSync(filePath)) {
8
- return configSchema.parse(JSON.parse(readFileSync(filePath, 'utf-8')));
8
+ const config = configSchema.parse(JSON.parse(readFileSync(filePath, 'utf-8')));
9
+ /**
10
+ * Perform extra config validation beyond schema validation.
11
+ * We want to enforce the following constraints:
12
+ *
13
+ * 1. IDP IDs are unique
14
+ * 2. Network IDs are unique
15
+ * 3. Each Network's identityProviderId maps to an existing IDP (in config)
16
+ * 4. Each Network's auth method is compatible with its IDP type
17
+ */
18
+ const duplicateIdpId = hasDuplicateElement(config.store.idps.map((idp) => idp.id));
19
+ if (duplicateIdpId) {
20
+ throw new Error(`Non-unique IDP IDs found in config file: ${duplicateIdpId}`);
21
+ }
22
+ const duplicateNetworkId = hasDuplicateElement(config.store.networks.map((network) => network.id));
23
+ if (duplicateNetworkId) {
24
+ throw new Error(`Non-unique Network IDs found in config file: ${duplicateNetworkId}`);
25
+ }
26
+ const invalidMapping = validateNetworkToIdpMapping(config);
27
+ if (invalidMapping) {
28
+ throw new Error(`Network ${invalidMapping.networkId} references unknown Identity Provider ID ${invalidMapping.idpId}`);
29
+ }
30
+ const invalidAuthMethod = validateNetworkAuthMethods(config);
31
+ if (invalidAuthMethod) {
32
+ throw new Error(`Network ${invalidAuthMethod.networkId} has invalid auth method ${invalidAuthMethod.invalidAuthMethod} for its Identity Provider`);
33
+ }
34
+ return config;
9
35
  }
10
36
  else {
11
37
  throw new Error("Supplied file path doesn't exist " + filePath);
12
38
  }
13
39
  }
14
40
  }
41
+ function hasDuplicateElement(list) {
42
+ let duplicate;
43
+ list.forEach((item, i) => {
44
+ if (list.indexOf(item) !== i && duplicate === undefined) {
45
+ duplicate = item;
46
+ }
47
+ });
48
+ return duplicate;
49
+ }
50
+ function validateNetworkToIdpMapping(config) {
51
+ for (const network of config.store.networks) {
52
+ const idp = config.store.idps.find((idp) => idp.id === network.identityProviderId);
53
+ if (typeof idp === 'undefined') {
54
+ return { networkId: network.id, idpId: network.identityProviderId };
55
+ }
56
+ }
57
+ }
58
+ const SUPPORTED_IDP_METHODS = {
59
+ self_signed: ['self_signed'],
60
+ oauth: ['authorization_code', 'client_credentials'],
61
+ };
62
+ function validateNetworkAuthMethods(config) {
63
+ for (const network of config.store.networks) {
64
+ const idp = config.store.idps.find((idp) => idp.id === network.identityProviderId);
65
+ if (!SUPPORTED_IDP_METHODS[idp.type].includes(network.auth.method)) {
66
+ return {
67
+ networkId: network.id,
68
+ invalidAuthMethod: network.auth.method,
69
+ };
70
+ }
71
+ }
72
+ }
@@ -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;AAO/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;AA6B7B,eAAO,MAAM,cAAc,GACvB,YAAY,gBAAgB,EAC5B,OAAO,KAAK,EACZ,qBAAqB,mBAAmB,EACxC,SAAS,MAAM,EACf,UAAU,WAAW;;;;;;;;;;;;;CAuKxB,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;AAO/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,OAAO,KAAK,EACZ,qBAAqB,mBAAmB,EACxC,SAAS,MAAM,EACf,UAAU,WAAW;;;;;;;;;;;;;CA4MxB,CAAA"}
@@ -5,32 +5,37 @@ import { assertConnected } from '@canton-network/core-wallet-auth';
5
5
  import buildController from './rpc-gen/index.js';
6
6
  import { LedgerClient, } from '@canton-network/core-ledger-client';
7
7
  import { v4 } from 'uuid';
8
- async function prepareSubmission(userId, partyId, synchronizerId, commands, ledgerClient, commandId) {
9
- const prepareParams = {
10
- // eslint-disable-next-line @typescript-eslint/no-explicit-any -- because OpenRPC codegen type is incompatible with ledger codegen type
11
- commands: commands,
12
- commandId: commandId || v4(),
13
- userId,
14
- actAs: [partyId],
15
- readAs: [],
16
- disclosedContracts: [],
17
- synchronizerId,
18
- verboseHashing: false,
19
- packageIdSelectionPreference: [],
20
- };
21
- return await ledgerClient.postWithRetry('/v2/interactive-submission/prepare', prepareParams);
22
- }
8
+ import { networkStatus } from '../utils.js';
23
9
  export const dappController = (kernelInfo, store, notificationService, _logger, context) => {
24
10
  const logger = _logger.child({ component: 'dapp-controller' });
25
11
  return buildController({
26
- connect: async () => ({
27
- sessionToken: '',
28
- status: {
29
- kernel: kernelInfo,
30
- isConnected: false,
31
- userUrl: 'http://localhost:3030/login/', // TODO: pull user URL from config
32
- },
33
- }),
12
+ connect: async () => {
13
+ if (!context) {
14
+ return {
15
+ sessionToken: '',
16
+ status: {
17
+ kernel: kernelInfo,
18
+ isConnected: false,
19
+ isNetworkConnected: false,
20
+ networkReason: 'Unauthenticated',
21
+ userUrl: 'http://localhost:3030/login/', // TODO: pull user URL from config
22
+ },
23
+ };
24
+ }
25
+ const network = await store.getCurrentNetwork();
26
+ const ledgerClient = new LedgerClient(new URL(network.ledgerApi.baseUrl), logger, false, context.accessToken);
27
+ const status = await networkStatus(ledgerClient);
28
+ return {
29
+ sessionToken: context.accessToken,
30
+ status: {
31
+ kernel: kernelInfo,
32
+ isConnected: true,
33
+ isNetworkConnected: status.isConnected,
34
+ networkReason: status.reason ? status.reason : 'OK',
35
+ userUrl: 'http://localhost:3030/login/', // TODO: pull user URL from config
36
+ },
37
+ };
38
+ },
34
39
  disconnect: async () => {
35
40
  if (!context) {
36
41
  return null;
@@ -111,15 +116,20 @@ export const dappController = (kernelInfo, store, notificationService, _logger,
111
116
  return {
112
117
  kernel: kernelInfo,
113
118
  isConnected: false,
119
+ isNetworkConnected: false,
120
+ networkReason: 'Unauthenticated',
114
121
  };
115
122
  }
116
- else {
117
- return {
118
- kernel: kernelInfo,
119
- isConnected: true,
120
- networkId: (await store.getCurrentNetwork()).id,
121
- };
122
- }
123
+ const network = await store.getCurrentNetwork();
124
+ const ledgerClient = new LedgerClient(new URL(network.ledgerApi.baseUrl), logger, false, context.accessToken);
125
+ const status = await networkStatus(ledgerClient);
126
+ return {
127
+ kernel: kernelInfo,
128
+ isConnected: true,
129
+ isNetworkConnected: status.isConnected,
130
+ networkReason: status.reason ? status.reason : 'OK',
131
+ networkId: (await store.getCurrentNetwork()).id,
132
+ };
123
133
  },
124
134
  onConnected: async () => {
125
135
  throw new Error('Only for events.');
@@ -139,3 +149,18 @@ export const dappController = (kernelInfo, store, notificationService, _logger,
139
149
  },
140
150
  });
141
151
  };
152
+ async function prepareSubmission(userId, partyId, synchronizerId, commands, ledgerClient, commandId) {
153
+ const prepareParams = {
154
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- because OpenRPC codegen type is incompatible with ledger codegen type
155
+ commands: commands,
156
+ commandId: commandId || v4(),
157
+ userId,
158
+ actAs: [partyId],
159
+ readAs: [],
160
+ disclosedContracts: [],
161
+ synchronizerId,
162
+ verboseHashing: false,
163
+ packageIdSelectionPreference: [],
164
+ };
165
+ return await ledgerClient.postWithRetry('/v2/interactive-submission/prepare', prepareParams);
166
+ }
@@ -40,10 +40,22 @@ export interface KernelInfo {
40
40
  }
41
41
  /**
42
42
  *
43
- * Whether or not a connection to a network is established.
43
+ * Whether or not the user is authenticated with the Wallet.
44
44
  *
45
45
  */
46
46
  export type IsConnected = boolean;
47
+ /**
48
+ *
49
+ * Whether or not a connection to a network is established.
50
+ *
51
+ */
52
+ export type IsNetworkConnected = boolean;
53
+ /**
54
+ *
55
+ * If not connected to a network, the reason why.
56
+ *
57
+ */
58
+ export type NetworkReason = string;
47
59
  /**
48
60
  *
49
61
  * The network ID the wallet corresponds to.
@@ -53,6 +65,8 @@ export type NetworkId = string;
53
65
  export interface StatusEvent {
54
66
  kernel: KernelInfo;
55
67
  isConnected: IsConnected;
68
+ isNetworkConnected: IsNetworkConnected;
69
+ networkReason?: NetworkReason;
56
70
  networkId?: NetworkId;
57
71
  [k: string]: any;
58
72
  }
@@ -129,6 +143,18 @@ export type Namespace = string;
129
143
  *
130
144
  */
131
145
  export type SigningProviderId = string;
146
+ /**
147
+ *
148
+ * Unique identifier of the signed transaction given by the Signing Provider. This may not be the same as the internal txId given by the Wallet Gateway.
149
+ *
150
+ */
151
+ export type ExternalTxId = string;
152
+ /**
153
+ *
154
+ * The topology transactions
155
+ *
156
+ */
157
+ export type TopologyTransactions = string;
132
158
  /**
133
159
  *
134
160
  * Structure representing a wallet
@@ -142,6 +168,8 @@ export interface Wallet {
142
168
  namespace: Namespace;
143
169
  networkId: NetworkId;
144
170
  signingProviderId: SigningProviderId;
171
+ externalTxId?: ExternalTxId;
172
+ topologyTransactions?: TopologyTransactions;
145
173
  [k: string]: any;
146
174
  }
147
175
  /**
@@ -300,8 +328,7 @@ export interface LedgerApiResult {
300
328
  [k: string]: any;
301
329
  }
302
330
  export interface OnConnectedEvent {
303
- kernel: KernelInfo;
304
- networkId: NetworkId;
331
+ status: StatusEvent;
305
332
  sessionToken?: SessionToken;
306
333
  [k: string]: any;
307
334
  }
@@ -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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"}
@@ -48,6 +48,8 @@ test('call connect rpc', async () => {
48
48
  userUrl: 'http://localhost:3030',
49
49
  },
50
50
  isConnected: false,
51
+ isNetworkConnected: false,
52
+ networkReason: 'Unauthenticated',
51
53
  userUrl: 'http://localhost:3030/login/',
52
54
  },
53
55
  },
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAe7B,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAsEvC,wBAAsB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,iBA+DhE"}
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;AA0GvC,wBAAsB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,iBAwFhE"}
package/dist/init.js CHANGED
@@ -4,16 +4,19 @@ import { dapp } from './dapp-api/server.js';
4
4
  import { user } from './user-api/server.js';
5
5
  import { web } from './web/server.js';
6
6
  import { StoreSql, bootstrap, connection, migrator, } from '@canton-network/core-wallet-store-sql';
7
+ import { StoreSql as SigningStoreSql, bootstrap as signingBootstrap, connection as signingConnection, migrator as signingMigrator, } from '@canton-network/core-signing-store-sql';
7
8
  import { ConfigUtils } from './config/ConfigUtils.js';
8
9
  import EventEmitter from 'events';
9
10
  import { SigningProvider } from '@canton-network/core-signing-lib';
10
11
  import { ParticipantSigningDriver } from '@canton-network/core-signing-participant';
11
12
  import { InternalSigningDriver } from '@canton-network/core-signing-internal';
13
+ import FireblocksSigningProvider from '@canton-network/core-signing-fireblocks';
12
14
  import { jwtAuthService } from './auth/jwt-auth-service.js';
13
15
  import express from 'express';
14
16
  import { jwtAuth } from './middleware/jwtAuth.js';
15
17
  import { rpcRateLimit } from './middleware/rateLimit.js';
16
- import { existsSync } from 'fs';
18
+ import { existsSync, readFileSync } from 'fs';
19
+ import path from 'path';
17
20
  let isReady = false;
18
21
  class NotificationService {
19
22
  constructor(logger) {
@@ -60,6 +63,30 @@ async function initializeDatabase(config, logger) {
60
63
  }
61
64
  return new StoreSql(db, logger);
62
65
  }
66
+ async function initializeSigningDatabase(config, logger) {
67
+ logger.info('Checking for signing database migrations...');
68
+ let exists = true;
69
+ if (config.signingStore.connection.type === 'sqlite') {
70
+ exists = existsSync(config.signingStore.connection.database);
71
+ }
72
+ const db = signingConnection(config.signingStore);
73
+ const umzug = signingMigrator(db);
74
+ const pending = await umzug.pending();
75
+ if (pending.length > 0) {
76
+ logger.info({ pendingMigrations: pending.map((m) => m.name) }, 'Applying database migrations...');
77
+ await umzug.up();
78
+ logger.info('Database migrations applied successfully.');
79
+ }
80
+ else {
81
+ logger.info('No pending database migrations found.');
82
+ }
83
+ // bootstrap database from config file if it did not exist before
84
+ if (!exists) {
85
+ logger.info('Bootstrapping database from config...');
86
+ await signingBootstrap(db, config.store, logger);
87
+ }
88
+ return new SigningStoreSql(db, logger);
89
+ }
63
90
  export async function initialize(opts, logger) {
64
91
  const port = opts.port ? Number(opts.port) : 3030;
65
92
  const app = express();
@@ -78,10 +105,31 @@ export async function initialize(opts, logger) {
78
105
  const notificationService = new NotificationService(logger);
79
106
  const config = ConfigUtils.loadConfigFile(opts.config);
80
107
  const store = await initializeDatabase(config, logger);
108
+ const signingStore = await initializeSigningDatabase(config, logger);
81
109
  const authService = jwtAuthService(store, logger);
110
+ // Provide apiKey from User API in Fireblocks
111
+ const apiPath = path.resolve(process.cwd(), 'fireblocks_api.key');
112
+ const secretPath = path.resolve(process.cwd(), 'fireblocks_secret.key');
113
+ let apiKey = '';
114
+ let apiSecret = '';
115
+ if (existsSync(apiPath) && existsSync(secretPath)) {
116
+ apiKey = readFileSync(apiPath, 'utf8');
117
+ apiSecret = readFileSync(secretPath, 'utf8');
118
+ }
119
+ else {
120
+ apiKey = 'missing';
121
+ apiSecret = 'missing';
122
+ logger.warn('Fireblocks keys files are missing');
123
+ }
124
+ const keyInfo = { apiKey, apiSecret };
125
+ const userApiKeys = new Map([['user', keyInfo]]);
82
126
  const drivers = {
83
127
  [SigningProvider.PARTICIPANT]: new ParticipantSigningDriver(),
84
- [SigningProvider.WALLET_KERNEL]: new InternalSigningDriver(),
128
+ [SigningProvider.WALLET_KERNEL]: new InternalSigningDriver(signingStore),
129
+ [SigningProvider.FIREBLOCKS]: new FireblocksSigningProvider({
130
+ defaultKeyInfo: keyInfo,
131
+ userApiKeys,
132
+ }),
85
133
  };
86
134
  app.use('/api/*splat', express.json());
87
135
  app.use('/api/*splat', rpcRateLimit);
@@ -1,3 +1,4 @@
1
+ import { GenerateTransactionResponse } from '@canton-network/core-ledger-client';
1
2
  import { AccessTokenProvider } from '@canton-network/core-wallet-auth';
2
3
  import { Logger } from 'pino';
3
4
  export type AllocatedParty = {
@@ -28,6 +29,25 @@ export declare class PartyAllocationService {
28
29
  * @param signingCallback A callback function that asynchronously signs the onboarding request hash.
29
30
  */
30
31
  allocateParty(userId: string, hint: string, publicKey: string, signingCallback: SigningCbFn): Promise<AllocatedParty>;
32
+ /**
33
+ * Create fingerprint
34
+ * @param publicKey The public key of the user.
35
+ */
36
+ createFingerprintFromKey(publicKey: string): string;
37
+ /**
38
+ * Generate topology transactions
39
+ * @param hint A hint for the party ID.
40
+ * @param publicKey The public key of the user.
41
+ */
42
+ generateTopologyTransactions(hint: string, publicKey: string): Promise<GenerateTransactionResponse>;
43
+ /**
44
+ * Allocate party with wallet
45
+ * @param namespace The namespace of wallet.
46
+ * @param transactions There are topology transactions.
47
+ * @param signature A transaction signature from signingProviderId
48
+ * @param userId The ID of the user.
49
+ */
50
+ allocatePartyWithExistingWallet(namespace: string, transactions: string[], signature: string, userId: string): Promise<string>;
31
51
  private allocateInternalParty;
32
52
  private allocateExternalParty;
33
53
  }
@@ -1 +1 @@
1
- {"version":3,"file":"party-allocation-service.d.ts","sourceRoot":"","sources":["../../src/ledger/party-allocation-service.ts"],"names":[],"mappings":"AAOA,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;IAI3B,OAAO,CAAC,cAAc;IAGtB,OAAO,CAAC,MAAM;IANlB,OAAO,CAAC,YAAY,CAAc;gBAGtB,cAAc,EAAE,MAAM,EAC9B,mBAAmB,EAAE,mBAAmB,EACxC,aAAa,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACtB,WAAW,GAAE,MAAW;IAW5B;;;;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;YAoBZ,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,EAG9B,MAAM,oCAAoC,CAAA;AAC3C,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;IAI3B,OAAO,CAAC,cAAc;IAGtB,OAAO,CAAC,MAAM;IANlB,OAAO,CAAC,YAAY,CAAc;gBAGtB,cAAc,EAAE,MAAM,EAC9B,mBAAmB,EAAE,mBAAmB,EACxC,aAAa,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACtB,WAAW,GAAE,MAAW;IAW5B;;;;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;IAMnD;;;;OAIG;IACG,4BAA4B,CAC9B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAClB,OAAO,CAAC,2BAA2B,CAAC;IAavC;;;;;;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;YA8BJ,qBAAqB;YAuBrB,qBAAqB;CAoCtC"}
@@ -18,6 +18,26 @@ export class PartyAllocationService {
18
18
  return this.allocateInternalParty(userId, hint);
19
19
  }
20
20
  }
21
+ createFingerprintFromKey(publicKey) {
22
+ return TopologyWriteService.createFingerprintFromKey(publicKey);
23
+ }
24
+ async generateTopologyTransactions(hint, publicKey) {
25
+ return this.ledgerClient.generateTopology(this.synchronizerId, publicKey, hint);
26
+ }
27
+ async allocatePartyWithExistingWallet(namespace, transactions, signature, userId) {
28
+ const res = await this.ledgerClient.allocateExternalParty(this.synchronizerId, transactions.map((transaction) => ({
29
+ transaction,
30
+ })), [
31
+ {
32
+ format: 'SIGNATURE_FORMAT_CONCAT',
33
+ signature: signature,
34
+ signedBy: namespace,
35
+ signingAlgorithmSpec: 'SIGNING_ALGORITHM_SPEC_ED25519',
36
+ },
37
+ ]);
38
+ await this.ledgerClient.waitForPartyAndGrantUserRights(userId, res.partyId);
39
+ return res.partyId;
40
+ }
21
41
  async allocateInternalParty(userId, hint) {
22
42
  const { participantId: namespace } = await this.ledgerClient.getWithRetry('/v2/parties/participant-id');
23
43
  const res = await this.ledgerClient.postWithRetry('/v2/parties', {
@@ -31,8 +51,8 @@ export class PartyAllocationService {
31
51
  return { hint, namespace, partyId: res.partyDetails.party };
32
52
  }
33
53
  async allocateExternalParty(userId, hint, publicKey, signingCallback) {
34
- const namespace = TopologyWriteService.createFingerprintFromKey(publicKey);
35
- const transactions = await this.ledgerClient.generateTopology(this.synchronizerId, publicKey, hint);
54
+ const namespace = this.createFingerprintFromKey(publicKey);
55
+ const transactions = await this.generateTopologyTransactions(hint, publicKey);
36
56
  const signature = await signingCallback(transactions.multiHash);
37
57
  const res = await this.ledgerClient.allocateExternalParty(this.synchronizerId, transactions.topologyTransactions.map((transaction) => ({
38
58
  transaction,
@@ -42,18 +42,22 @@ describe('PartyAllocationService', () => {
42
42
  id: 'network-id',
43
43
  synchronizerId: 'sync-id',
44
44
  description: 'desc',
45
+ identityProviderId: 'idp',
45
46
  ledgerApi: {
46
47
  baseUrl: 'http://ledger',
47
48
  },
48
49
  auth: {
49
- identityProviderId: 'idp',
50
- type: 'implicit',
51
- issuer: 'http://idp',
52
- configUrl: 'http://idp/.well-known/openid-configuration',
50
+ method: 'authorization_code',
53
51
  audience: 'aud',
54
52
  scope: 'scope',
55
53
  clientId: 'cid',
56
- admin: { clientId: 'cid', clientSecret: 'secret' },
54
+ },
55
+ adminAuth: {
56
+ method: 'client_credentials',
57
+ audience: 'aud',
58
+ scope: 'scope',
59
+ clientId: 'cid',
60
+ clientSecret: 'secret',
57
61
  },
58
62
  };
59
63
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -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;CA8FjD"}
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"}
@@ -60,6 +60,7 @@ export class WalletSyncService {
60
60
  const [hint, namespace] = party.split('::');
61
61
  return {
62
62
  primary: false,
63
+ status: 'allocated',
63
64
  partyId: party,
64
65
  hint: hint,
65
66
  publicKey: namespace,
@@ -8,6 +8,8 @@ type AvailableSigningDrivers = Partial<Record<SigningProvider, SigningDriverInte
8
8
  export declare const userController: (kernelInfo: KernelInfo, store: Store, notificationService: NotificationService, authContext: AuthContext | undefined, drivers: AvailableSigningDrivers, _logger: Logger) => {
9
9
  addNetwork: import("./rpc-gen/typings.js").AddNetwork;
10
10
  removeNetwork: import("./rpc-gen/typings.js").RemoveNetwork;
11
+ listNetworks: import("./rpc-gen/typings.js").ListNetworks;
12
+ listIdps: import("./rpc-gen/typings.js").ListIdps;
11
13
  createWallet: import("./rpc-gen/typings.js").CreateWallet;
12
14
  setPrimaryWallet: import("./rpc-gen/typings.js").SetPrimaryWallet;
13
15
  removeWallet: import("./rpc-gen/typings.js").RemoveWallet;
@@ -15,7 +17,6 @@ export declare const userController: (kernelInfo: KernelInfo, store: Store, noti
15
17
  syncWallets: import("./rpc-gen/typings.js").SyncWallets;
16
18
  sign: import("./rpc-gen/typings.js").Sign;
17
19
  execute: import("./rpc-gen/typings.js").Execute;
18
- listNetworks: import("./rpc-gen/typings.js").ListNetworks;
19
20
  addSession: import("./rpc-gen/typings.js").AddSession;
20
21
  listSessions: import("./rpc-gen/typings.js").ListSessions;
21
22
  };
@@ -1 +1 @@
1
- {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/user-api/controller.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,KAAK,EAAwB,MAAM,mCAAmC,CAAA;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA;AAC5E,OAAO,EAIH,WAAW,EAEd,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EACH,sBAAsB,EACtB,eAAe,EAClB,MAAM,kCAAkC,CAAA;AAOzC,KAAK,uBAAuB,GAAG,OAAO,CAClC,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAClD,CAAA;AAED,eAAO,MAAM,cAAc,GACvB,YAAY,UAAU,EACtB,OAAO,KAAK,EACZ,qBAAqB,mBAAmB,EACxC,aAAa,WAAW,GAAG,SAAS,EACpC,SAAS,uBAAuB,EAChC,SAAS,MAAM;;;;;;;;;;;;;CA0dlB,CAAA"}
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/user-api/controller.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,KAAK,EAAwB,MAAM,mCAAmC,CAAA;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA;AAC5E,OAAO,EAGH,WAAW,EAGd,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EACH,sBAAsB,EACtB,eAAe,EAClB,MAAM,kCAAkC,CAAA;AAQzC,KAAK,uBAAuB,GAAG,OAAO,CAClC,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAClD,CAAA;AAED,eAAO,MAAM,cAAc,GACvB,YAAY,UAAU,EACtB,OAAO,KAAK,EACZ,qBAAqB,mBAAmB,EACxC,aAAa,WAAW,GAAG,SAAS,EACpC,SAAS,uBAAuB,EAChC,SAAS,MAAM;;;;;;;;;;;;;;CAqjBlB,CAAA"}