@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.
- package/dist/auth/jwt-auth-service.d.ts.map +1 -1
- package/dist/auth/jwt-auth-service.js +25 -0
- package/dist/config/Config.d.ts +31 -0
- package/dist/config/Config.d.ts.map +1 -1
- package/dist/config/Config.js +23 -0
- package/dist/config/Config.test.js +1 -1
- package/dist/dapp-api/controller.d.ts +1 -0
- package/dist/dapp-api/controller.d.ts.map +1 -1
- package/dist/dapp-api/controller.js +26 -1
- package/dist/dapp-api/rpc-gen/index.d.ts +3 -0
- package/dist/dapp-api/rpc-gen/index.d.ts.map +1 -1
- package/dist/dapp-api/rpc-gen/index.js +1 -0
- package/dist/dapp-api/rpc-gen/typings.d.ts +3 -2
- package/dist/dapp-api/rpc-gen/typings.d.ts.map +1 -1
- package/dist/dapp-api/server.test.js +1 -1
- package/dist/env.d.ts +1 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +1 -0
- package/dist/example-config.d.ts +5 -0
- package/dist/example-config.d.ts.map +1 -1
- package/dist/example-config.js +5 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -5
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +9 -4
- package/dist/ledger/party-allocation-service.test.js +19 -17
- package/dist/ledger/transaction-service.d.ts +1 -0
- package/dist/ledger/transaction-service.d.ts.map +1 -1
- package/dist/ledger/transaction-service.js +65 -53
- package/dist/ledger/wallet-allocation/signing-providers/blockdaemon-wallet-allocator.d.ts.map +1 -1
- package/dist/ledger/wallet-allocation/signing-providers/blockdaemon-wallet-allocator.js +2 -1
- package/dist/ledger/wallet-allocation/wallet-allocation-service.test.js +22 -22
- package/dist/ledger/wallet-sync-service.d.ts.map +1 -1
- package/dist/ledger/wallet-sync-service.js +11 -8
- package/dist/ledger/wallet-sync-service.test.js +15 -13
- package/dist/middleware/rateLimit.d.ts +5 -0
- package/dist/middleware/rateLimit.d.ts.map +1 -1
- package/dist/middleware/rateLimit.js +40 -0
- package/dist/middleware/rateLimit.test.d.ts +2 -0
- package/dist/middleware/rateLimit.test.d.ts.map +1 -0
- package/dist/middleware/rateLimit.test.js +30 -0
- package/dist/user-api/controller.d.ts.map +1 -1
- package/dist/user-api/controller.js +6 -5
- package/dist/user-api/rpc-gen/typings.d.ts +12 -14
- package/dist/user-api/rpc-gen/typings.d.ts.map +1 -1
- package/dist/user-api/server.test.js +1 -1
- package/dist/web/frontend/404/index.html +2 -2
- package/dist/web/frontend/{transactions → activities}/index.html +6 -7
- package/dist/web/frontend/approve/index.html +7 -7
- package/dist/web/frontend/assets/404-CEw-fKbi.js +5 -0
- package/dist/web/frontend/assets/activities-BdSUE0hv.js +60 -0
- package/dist/web/frontend/assets/addIdentityProvider-Bzz1fUGn.js +35 -0
- package/dist/web/frontend/assets/addNetwork-B4FpgV7D.js +38 -0
- package/dist/web/frontend/assets/addParty-D-UmQ0Oh.js +38 -0
- package/dist/web/frontend/assets/approve-DP3Lfyhw.js +21 -0
- package/dist/web/frontend/assets/{callback-Bbv8zOQx.js → callback-CXLUjUAK.js} +1 -1
- package/dist/web/frontend/assets/identityProviders-CtFhI1gg.js +71 -0
- package/dist/web/frontend/assets/index-BuC7gGqj.js +3942 -0
- package/dist/web/frontend/assets/{index-NP2zGQqX.js → index-CiMGhYb1.js} +2 -2
- package/dist/web/frontend/assets/index-DFhaSBOK.js +91 -0
- package/dist/web/frontend/assets/{index-64ZRFXyL.js → index-dDAXt5F2.js} +1 -1
- package/dist/web/frontend/assets/login-CmwQEYxS.js +10 -0
- package/dist/web/frontend/assets/networks-f8gSZxSb.js +73 -0
- package/dist/web/frontend/assets/reviewIdentityProvider-CJFOHumn.js +43 -0
- package/dist/web/frontend/assets/reviewNetwork-D3QSssLB.js +43 -0
- package/dist/web/frontend/assets/{settings-Bv6XHxUD.js → settings-Cc-Ij_uP.js} +2 -2
- package/dist/web/frontend/assets/{state-BsGwKQMR.js → state-CZ6wI2d4.js} +1 -1
- package/dist/web/frontend/assets/{utils-Ou54c_Bf.js → utils-CVOqcw_M.js} +1 -1
- package/dist/web/frontend/callback/index.html +2 -2
- package/dist/web/frontend/identity-providers/add/index.html +16 -0
- package/dist/web/frontend/{wallets → identity-providers}/index.html +5 -6
- package/dist/web/frontend/identity-providers/review/index.html +16 -0
- package/dist/web/frontend/index.html +1 -1
- package/dist/web/frontend/login/index.html +15 -7
- package/dist/web/frontend/networks/add/index.html +16 -0
- package/dist/web/frontend/networks/index.html +16 -0
- package/dist/web/frontend/networks/review/index.html +16 -0
- package/dist/web/frontend/parties/add/index.html +18 -0
- package/dist/web/frontend/parties/index.html +17 -0
- package/dist/web/frontend/settings/index.html +3 -3
- package/package.json +26 -29
- package/dist/web/frontend/assets/404-mTP2h7GO.js +0 -8
- package/dist/web/frontend/assets/approve-B7ioWbgg.js +0 -20
- package/dist/web/frontend/assets/index-CMV7Immb.js +0 -1698
- package/dist/web/frontend/assets/login-jo0xuh02.js +0 -7
- package/dist/web/frontend/assets/transactions-Cvi9DMx7.js +0 -28
- 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,
|
|
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,
|
package/dist/config/Config.d.ts
CHANGED
|
@@ -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
|
|
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"}
|
package/dist/config/Config.js
CHANGED
|
@@ -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 '
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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":"AAMA;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAA;AAE9B;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACrB;AACD;;;;GAIG;AACH,MAAM,MAAM,KAAK,GAAG,MAAM,CAAA;AAC1B;;;;GAIG;AACH,MAAM,MAAM,KAAK,GAAG,KAAK,EAAE,CAAA;AAC3B;;;;GAIG;AACH,MAAM,MAAM,MAAM,GAAG,KAAK,EAAE,CAAA;AAC5B;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAA;AAC/B;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAA;AAC/B;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAA;AACrC;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAA;AACnC;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAC9B,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,cAAc,CAAC,EAAE,cAAc,CAAA;CAClC;AACD;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,EAAE,CAAA;AACpD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAA;AAC9B;;;;GAIG;AACH,MAAM,MAAM,4BAA4B,GAAG,SAAS,EAAE,CAAA;AACtD;;;;GAIG;AACH,MAAM,MAAM,OAAO,GAAG,MAAM,CAAA;AAC5B,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAA;AACvE,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAA;AAC7B,MAAM,WAAW,IAAI;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACrB;AACD;;;;GAIG;AACH,MAAM,WAAW,KAAK;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACrB;AACD;;;;GAIG;AACH,MAAM,WAAW,IAAI;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACrB;AACD;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAA;AAC/B;;;;GAIG;AACH,MAAM,MAAM,OAAO,GAAG,MAAM,CAAA;AAC5B;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAA;AACtE;;;;GAIG;AACH,MAAM,MAAM,GAAG,GAAG,MAAM,CAAA;AACxB;;;;GAIG;AACH,MAAM,MAAM,OAAO,GAAG,MAAM,CAAA;AAC5B;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACrB,EAAE,EAAE,UAAU,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,GAAG,CAAC,EAAE,GAAG,CAAA;IACT,OAAO,CAAC,EAAE,OAAO,CAAA;CACpB;AACD;;;;GAIG;AACH,MAAM,MAAM,
|
|
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 '
|
|
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;
|
|
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();
|
package/dist/example-config.d.ts
CHANGED
|
@@ -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":"
|
|
1
|
+
{"version":3,"file":"example-config.d.ts","sourceRoot":"","sources":["../src/example-config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,wBAkGqB"}
|
package/dist/example-config.js
CHANGED
|
@@ -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
|
|
7
|
+
logFormat?: "json" | "pretty";
|
|
8
|
+
logLevel?: "error" | "trace" | "debug" | "info" | "warn" | "fatal";
|
|
8
9
|
};
|
|
9
10
|
export type CliOptions = typeof options;
|
|
10
11
|
export {};
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";
|
|
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
|
-
|
|
26
|
-
|
|
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:
|
|
40
|
-
...(
|
|
52
|
+
level: logLevel,
|
|
53
|
+
...(logFormat === 'pretty'
|
|
41
54
|
? {
|
|
42
55
|
transport: {
|
|
43
56
|
target: 'pino-pretty',
|
package/dist/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;
|
|
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
|
|
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',
|
|
172
|
-
app.use('/api/*splat', jwtAuth(authService, logger.child({ component: 'JwtHandler' }))
|
|
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 {
|
|
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 =
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
65
|
+
getAccessToken: vi
|
|
64
66
|
.fn()
|
|
65
67
|
.mockResolvedValue('admin.jwt'),
|
|
66
|
-
getAuthContext:
|
|
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
|
-
|
|
81
|
+
vi.spyOn(service, 'createFingerprintFromKey').mockReturnValue('mypublickey');
|
|
80
82
|
});
|
|
81
|
-
afterEach(() =>
|
|
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;
|
|
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"}
|