@canton-network/wallet-gateway-remote 0.3.0 → 0.4.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 (33) hide show
  1. package/README.md +4 -4
  2. package/dist/dapp-api/controller.d.ts.map +1 -1
  3. package/dist/dapp-api/controller.js +3 -2
  4. package/dist/dapp-api/server.d.ts +3 -1
  5. package/dist/dapp-api/server.d.ts.map +1 -1
  6. package/dist/dapp-api/server.js +5 -14
  7. package/dist/dapp-api/server.test.js +12 -5
  8. package/dist/index.d.ts +7 -0
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +1 -0
  11. package/dist/init.d.ts +2 -8
  12. package/dist/init.d.ts.map +1 -1
  13. package/dist/init.js +17 -17
  14. package/dist/user-api/server.d.ts +3 -2
  15. package/dist/user-api/server.d.ts.map +1 -1
  16. package/dist/user-api/server.js +3 -10
  17. package/dist/user-api/server.test.js +8 -8
  18. package/dist/web/frontend/approve/index.html +3 -3
  19. package/dist/web/frontend/assets/{approve-DjrMmUo0.js → approve-BHHuvE3i.js} +1 -1
  20. package/dist/web/frontend/assets/{callback-QrXhW3mX.js → callback-D9y0DRns.js} +1 -1
  21. package/dist/web/frontend/assets/{handle-errors-BcwHAkCd.js → handle-errors-BM-xvD4v.js} +1 -1
  22. package/dist/web/frontend/assets/{login-kWEHTsIr.js → login-DJofeRCg.js} +1 -1
  23. package/dist/web/frontend/assets/{networks-CjofhwC9.js → networks-CZV8G3N2.js} +1 -1
  24. package/dist/web/frontend/assets/{rpc-client-CCUlY3sp.js → rpc-client-TGo-LOnR.js} +1 -1
  25. package/dist/web/frontend/assets/{wallets-BPtpBguD.js → wallets-DwPVJP85.js} +1 -1
  26. package/dist/web/frontend/callback/index.html +2 -2
  27. package/dist/web/frontend/login/index.html +2 -2
  28. package/dist/web/frontend/networks/index.html +3 -3
  29. package/dist/web/frontend/wallets/index.html +3 -3
  30. package/dist/web/server.d.ts +3 -1
  31. package/dist/web/server.d.ts.map +1 -1
  32. package/dist/web/server.js +38 -24
  33. package/package.json +15 -15
package/README.md CHANGED
@@ -18,11 +18,11 @@ Alternatively, you can run it directly through npx (tested with NodeJS v24):
18
18
 
19
19
  `npx @canton-network/wallet-gateway-remote -c ./config.json`
20
20
 
21
- This exposes:
21
+ By default, the service runs on port `3030`, but this can be overridden via the `-p, --port` CLI argument.
22
22
 
23
- - A dApp JSON-RPC API running on (by default) `localhost:3008`
24
- - A User JSON-RPC API running on (by default) `localhost:3001`
25
- - A User web interface running on (by default) `localhost:3002`
23
+ - The User web interface runs on `localhost:3030`
24
+ - The dApp JSON-RPC API is exposed on `localhost:3030/api/v0/dapp`
25
+ - The User JSON-RPC API is exposed on `localhost:3030/api/v0/user`
26
26
 
27
27
  ## Configuration
28
28
 
@@ -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;;;;;;;;;;;CA6IxB,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;AA6B7B,eAAO,MAAM,cAAc,GACvB,YAAY,gBAAgB,EAC5B,OAAO,KAAK,EACZ,qBAAqB,mBAAmB,EACxC,SAAS,MAAM,EACf,UAAU,WAAW;;;;;;;;;;;CA8IxB,CAAA"}
@@ -26,7 +26,7 @@ export const dappController = (kernelInfo, store, notificationService, _logger,
26
26
  connect: async () => ({
27
27
  kernel: kernelInfo,
28
28
  isConnected: false,
29
- userUrl: 'http://localhost:3002/login/',
29
+ userUrl: 'http://localhost:3030/login/', // TODO: pull user URL from config
30
30
  }),
31
31
  darsAvailable: async () => ({ dars: ['default-dar'] }),
32
32
  ledgerApi: async (params) => {
@@ -72,7 +72,8 @@ export const dappController = (kernelInfo, store, notificationService, _logger,
72
72
  payload: params.commands,
73
73
  });
74
74
  return {
75
- userUrl: `http://localhost:3002/approve/index.html?commandId=${commandId}&partyId=${wallet.partyId}&txHash=${encodeURIComponent(preparedTransactionHash)}&tx=${encodeURIComponent(preparedTransaction)}`,
75
+ // TODO: pull user base URL / port from config
76
+ userUrl: `http://localhost:3030/approve/index.html?commandId=${commandId}&partyId=${wallet.partyId}&txHash=${encodeURIComponent(preparedTransactionHash)}&tx=${encodeURIComponent(preparedTransaction)}`,
76
77
  };
77
78
  },
78
79
  prepareReturn: async (params) => {
@@ -1,6 +1,8 @@
1
+ import express from 'express';
1
2
  import { Store } from '@canton-network/core-wallet-store';
2
3
  import { AuthService, AuthAware } from '@canton-network/core-wallet-auth';
4
+ import { Server } from 'http';
3
5
  import { NotificationService } from '../notification/NotificationService.js';
4
6
  import { KernelInfo } from '../config/Config.js';
5
- export declare const dapp: (kernelInfo: KernelInfo, notificationService: NotificationService, authService: AuthService, store: Store & AuthAware<Store>) => import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>;
7
+ export declare const dapp: (route: string, app: express.Express, server: Server, kernelInfo: KernelInfo, notificationService: NotificationService, authService: AuthService, store: Store & AuthAware<Store>) => Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>;
6
8
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/dapp-api/server.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAA;AAEzD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAKzE,OAAO,EACH,mBAAmB,EAEtB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAIhD,eAAO,MAAM,IAAI,GACb,YAAY,UAAU,EACtB,qBAAqB,mBAAmB,EACxC,aAAa,WAAW,EACxB,OAAO,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,uGAyElC,CAAA"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/dapp-api/server.ts"],"names":[],"mappings":"AAGA,OAAO,OAAO,MAAM,SAAS,CAAA;AAK7B,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAE7B,OAAO,EACH,mBAAmB,EAEtB,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAIhD,eAAO,MAAM,IAAI,GACb,OAAO,MAAM,EACb,KAAK,OAAO,CAAC,OAAO,EACpB,QAAQ,MAAM,EACd,YAAY,UAAU,EACtB,qBAAqB,mBAAmB,EACxC,aAAa,WAAW,EACxB,OAAO,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,wFAiElC,CAAA"}
@@ -1,27 +1,18 @@
1
1
  // Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
- import express from 'express';
4
3
  import { dappController } from './controller.js';
5
4
  import { pino } from 'pino';
6
5
  import { jsonRpcHandler } from '../middleware/jsonRpcHandler.js';
7
- import { jwtAuth } from '../middleware/jwtAuth.js';
8
- import { rpcRateLimit } from '../middleware/rateLimit.js';
9
- import cors from 'cors';
10
- import { createServer } from 'http';
11
- import { Server } from 'socket.io';
6
+ import { Server as SocketIoServer } from 'socket.io';
12
7
  const logger = pino({ name: 'main', level: 'debug' });
13
- export const dapp = (kernelInfo, notificationService, authService, store) => {
14
- const app = express();
15
- app.use(cors());
16
- app.use(express.json());
17
- app.use('/rpc', rpcRateLimit, jwtAuth(authService, logger), (req, res, next) => jsonRpcHandler({
8
+ export const dapp = (route, app, server, kernelInfo, notificationService, authService, store) => {
9
+ app.use(route, (req, res, next) => jsonRpcHandler({
18
10
  controller: dappController(kernelInfo, store.withAuthContext(req.authContext), notificationService, logger, req.authContext),
19
11
  logger,
20
12
  })(req, res, next));
21
- const server = createServer(app);
22
- const io = new Server(server, {
13
+ const io = new SocketIoServer(server, {
23
14
  cors: {
24
- origin: '*',
15
+ origin: '*', // TODO: read allowedOrigins from config
25
16
  methods: ['GET', 'POST'],
26
17
  },
27
18
  });
@@ -1,12 +1,15 @@
1
1
  // Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  import { expect, test, jest } from '@jest/globals';
4
+ import cors from 'cors';
4
5
  import request from 'supertest';
6
+ import express from 'express';
5
7
  import { dapp } from './server.js';
6
8
  import { StoreInternal } from '@canton-network/core-wallet-store-inmemory';
7
9
  import { ConfigUtils } from '../config/ConfigUtils.js';
8
10
  import { pino } from 'pino';
9
11
  import { sink } from 'pino-test';
12
+ import { createServer } from 'http';
10
13
  const authService = {
11
14
  verifyToken: async () => {
12
15
  return new Promise((resolve) => resolve({ userId: 'user123', accessToken: 'token123' }));
@@ -23,8 +26,12 @@ const notificationService = {
23
26
  }),
24
27
  };
25
28
  test('call connect rpc', async () => {
26
- const response = await request(dapp(config.kernel, notificationService, authService, store))
27
- .post('/rpc')
29
+ const app = express();
30
+ app.use(cors());
31
+ app.use(express.json());
32
+ const server = createServer(app);
33
+ const response = await request(dapp('/api/v0/dapp', app, server, config.kernel, notificationService, authService, store))
34
+ .post('/api/v0/dapp')
28
35
  .send({ jsonrpc: '2.0', id: 0, method: 'connect', params: [] })
29
36
  .set('Accept', 'application/json');
30
37
  expect(response.statusCode).toBe(200);
@@ -35,11 +42,11 @@ test('call connect rpc', async () => {
35
42
  kernel: {
36
43
  id: 'remote-da',
37
44
  clientType: 'remote',
38
- url: 'http://localhost:3008/rpc',
39
- userUrl: 'http://localhost:3002',
45
+ url: 'http://localhost:3030/api/v0/dapp',
46
+ userUrl: 'http://localhost:3030',
40
47
  },
41
48
  isConnected: false,
42
- userUrl: 'http://localhost:3002/login/',
49
+ userUrl: 'http://localhost:3030/login/',
43
50
  },
44
51
  });
45
52
  });
package/dist/index.d.ts CHANGED
@@ -1,3 +1,10 @@
1
1
  #!/usr/bin/env node
2
+ declare const options: {
3
+ config: string;
4
+ port: string | true;
5
+ logFormat: "json" | "pretty";
6
+ storeType: "sqlite" | "postgres";
7
+ };
8
+ export type CliOptions = typeof options;
2
9
  export {};
3
10
  //# sourceMappingURL=index.d.ts.map
@@ -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":";AA0CA,QAAA,MAAM,OAAO;;;;;CAAiB,CAAA;AAE9B,MAAM,MAAM,UAAU,GAAG,OAAO,OAAO,CAAA"}
package/dist/index.js CHANGED
@@ -16,6 +16,7 @@ const program = new Command()
16
16
  .version(pkg.version)
17
17
  .description('Run a remotely hosted Wallet Gateway')
18
18
  .option('-c, --config <path>', 'set config path', './config.json')
19
+ .option('-p, --port [port]', 'set port', '3030')
19
20
  .addOption(new Option('-f, --log-format <format>', 'set log format')
20
21
  .choices(['json', 'pretty'])
21
22
  .default('pretty'))
package/dist/init.d.ts CHANGED
@@ -1,9 +1,3 @@
1
- export declare function initialize(opts: {
2
- config: string;
3
- logFormat: 'pretty' | 'json';
4
- }): Promise<{
5
- dAppServer: import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>;
6
- userServer: import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>;
7
- webServer: import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>;
8
- }>;
1
+ import { CliOptions } from './index.js';
2
+ export declare function initialize(opts: CliOptions): Promise<void>;
9
3
  //# sourceMappingURL=init.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAmDA,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,QAAQ,GAAG,MAAM,CAAA;CAC/B;;;;GAkEA"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AA+BvC,wBAAsB,UAAU,CAAC,IAAI,EAAE,UAAU,iBA2DhD"}
package/dist/init.js CHANGED
@@ -3,8 +3,8 @@
3
3
  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
+ import cors from 'cors';
6
7
  import { pino } from 'pino';
7
- import ViteExpress from 'vite-express';
8
8
  import { StoreSql, connection } from '@canton-network/core-wallet-store-sql';
9
9
  import { ConfigUtils } from './config/ConfigUtils.js';
10
10
  import EventEmitter from 'events';
@@ -12,12 +12,9 @@ import { SigningProvider } from '@canton-network/core-signing-lib';
12
12
  import { ParticipantSigningDriver } from '@canton-network/core-signing-participant';
13
13
  import { InternalSigningDriver } from '@canton-network/core-signing-internal';
14
14
  import { jwtAuthService } from './auth/jwt-auth-service.js';
15
- import path, { dirname } from 'path';
16
- import { fileURLToPath } from 'url';
17
15
  import express from 'express';
18
- const dAppPort = Number(process.env.DAPP_API_PORT) || 3008;
19
- const userPort = Number(process.env.USER_API_PORT) || 3001;
20
- const webPort = Number(process.env.WEB_PORT) || 3002;
16
+ import { jwtAuth } from './middleware/jwtAuth.js';
17
+ import { rpcRateLimit } from './middleware/rateLimit.js';
21
18
  class NotificationService {
22
19
  constructor(logger) {
23
20
  this.logger = logger;
@@ -53,22 +50,25 @@ export async function initialize(opts) {
53
50
  });
54
51
  const notificationService = new NotificationService(logger);
55
52
  const config = ConfigUtils.loadConfigFile(opts.config);
53
+ const port = opts.port ? Number(opts.port) : 3030;
56
54
  const store = new StoreSql(connection(config.store), logger);
57
55
  const authService = jwtAuthService(store, logger);
58
56
  const drivers = {
59
57
  [SigningProvider.PARTICIPANT]: new ParticipantSigningDriver(),
60
58
  [SigningProvider.WALLET_KERNEL]: new InternalSigningDriver(),
61
59
  };
62
- const dAppServer = dapp(config.kernel, notificationService, authService, store).listen(dAppPort, () => {
63
- logger.info(`dApp Server running at http://localhost:${dAppPort}`);
60
+ const app = express();
61
+ app.use(cors()); // TODO: read allowedOrigins from config
62
+ app.use('/api/*splat', express.json());
63
+ app.use('/api/*splat', rpcRateLimit);
64
+ app.use('/api/*splat', jwtAuth(authService, logger));
65
+ const server = app.listen(port, () => {
66
+ logger.info(`Remote Wallet Gateway running at http://localhost:${port}`);
64
67
  });
65
- const userServer = user(config.kernel, notificationService, authService, drivers, store).listen(userPort, () => {
66
- logger.info(`User Server running at http://localhost:${userPort}`);
67
- });
68
- const webServer = process.env.NODE_ENV === 'development'
69
- ? ViteExpress.listen(web, webPort, () => logger.info(`Web server running at http://localhost:${webPort}`))
70
- : web
71
- .use(express.static(path.resolve(dirname(fileURLToPath(import.meta.url)), '../dist/web/frontend')))
72
- .listen(webPort, () => logger.info(`Web server running at http://localhost:${webPort}`));
73
- return { dAppServer, userServer, webServer };
68
+ // register dapp API handlers
69
+ dapp('/api/v0/dapp', app, server, config.kernel, notificationService, authService, store);
70
+ // register user API handlers
71
+ user('/api/v0/user', app, config.kernel, notificationService, drivers, store);
72
+ // register web handler
73
+ web(app, server);
74
74
  }
@@ -1,7 +1,8 @@
1
+ import express from 'express';
1
2
  import { Store } from '@canton-network/core-wallet-store';
2
- import { AuthService, AuthAware } from '@canton-network/core-wallet-auth';
3
+ import { AuthAware } from '@canton-network/core-wallet-auth';
3
4
  import { NotificationService } from '../notification/NotificationService.js';
4
5
  import { KernelInfo } from '../config/Config.js';
5
6
  import { SigningDriverInterface, SigningProvider } from '@canton-network/core-signing-lib';
6
- export declare const user: (kernelInfo: KernelInfo, notificationService: NotificationService, authService: AuthService, drivers: Partial<Record<SigningProvider, SigningDriverInterface>>, store: Store & AuthAware<Store>) => import("express-serve-static-core").Express;
7
+ export declare const user: (route: string, app: express.Express, kernelInfo: KernelInfo, notificationService: NotificationService, drivers: Partial<Record<SigningProvider, SigningDriverInterface>>, store: Store & AuthAware<Store>) => express.Express;
7
8
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/user-api/server.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAIzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EACH,sBAAsB,EACtB,eAAe,EAClB,MAAM,kCAAkC,CAAA;AAIzC,eAAO,MAAM,IAAI,GACb,YAAY,UAAU,EACtB,qBAAqB,mBAAmB,EACxC,aAAa,WAAW,EACxB,SAAS,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAAC,EACjE,OAAO,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,gDAwBlC,CAAA"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/user-api/server.ts"],"names":[],"mappings":"AAGA,OAAO,OAAO,MAAM,SAAS,CAAA;AAK7B,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAA;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EACH,sBAAsB,EACtB,eAAe,EAClB,MAAM,kCAAkC,CAAA;AAIzC,eAAO,MAAM,IAAI,GACb,OAAO,MAAM,EACb,KAAK,OAAO,CAAC,OAAO,EACpB,YAAY,UAAU,EACtB,qBAAqB,mBAAmB,EACxC,SAAS,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAAC,EACjE,OAAO,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,oBAiBlC,CAAA"}
@@ -1,20 +1,13 @@
1
1
  // Copyright (c) 2025 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
- import express from 'express';
4
3
  import { userController } from './controller.js';
5
4
  import { pino } from 'pino';
6
5
  import { jsonRpcHandler } from '../middleware/jsonRpcHandler.js';
7
- import { jwtAuth } from '../middleware/jwtAuth.js';
8
- import { rpcRateLimit } from '../middleware/rateLimit.js';
9
- import cors from 'cors';
10
6
  const logger = pino({ name: 'main', level: 'debug' });
11
- export const user = (kernelInfo, notificationService, authService, drivers, store) => {
12
- const user = express();
13
- user.use(cors());
14
- user.use(express.json());
15
- user.use('/rpc', rpcRateLimit, jwtAuth(authService, logger), (req, res, next) => jsonRpcHandler({
7
+ export const user = (route, app, kernelInfo, notificationService, drivers, store) => {
8
+ app.use(route, (req, res, next) => jsonRpcHandler({
16
9
  controller: userController(kernelInfo, store.withAuthContext(req.authContext), notificationService, req.authContext, drivers, logger),
17
10
  logger,
18
11
  })(req, res, next));
19
- return user;
12
+ return app;
20
13
  };
@@ -1,17 +1,14 @@
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 { expect, jest, test } from '@jest/globals';
4
+ import cors from 'cors';
5
+ import express from 'express';
4
6
  import request from 'supertest';
5
7
  import { user } from './server.js';
6
8
  import { StoreInternal } from '@canton-network/core-wallet-store-inmemory';
7
9
  import { ConfigUtils } from '../config/ConfigUtils.js';
8
10
  import { pino } from 'pino';
9
11
  import { sink } from 'pino-test';
10
- const authService = {
11
- verifyToken: async () => {
12
- return new Promise((resolve) => resolve({ userId: 'user123', accessToken: 'token123' }));
13
- },
14
- };
15
12
  const configPath = '../test/config.json';
16
13
  const config = ConfigUtils.loadConfigFile(configPath);
17
14
  const store = new StoreInternal(config.store, pino(sink()));
@@ -22,10 +19,13 @@ const notificationService = {
22
19
  removeListener: jest.fn(),
23
20
  }),
24
21
  };
25
- test('call connect rpc', async () => {
22
+ test('call listNetworks rpc', async () => {
26
23
  const drivers = {};
27
- const response = await request(user(config.kernel, notificationService, authService, drivers, store))
28
- .post('/rpc')
24
+ const app = express();
25
+ app.use(cors());
26
+ app.use(express.json());
27
+ const response = await request(user('/api/v0/user', app, config.kernel, notificationService, drivers, store))
28
+ .post('/api/v0/user')
29
29
  .send({ jsonrpc: '2.0', id: 0, method: 'listNetworks', params: [] })
30
30
  .set('Accept', 'application/json');
31
31
  const json = await response.body.result;
@@ -3,13 +3,13 @@
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
5
  <title>Wallet Kernel - Approve Write Request</title>
6
- <script type="module" crossorigin src="/assets/approve-DjrMmUo0.js"></script>
6
+ <script type="module" crossorigin src="/assets/approve-BHHuvE3i.js"></script>
7
7
  <link rel="modulepreload" crossorigin href="/assets/state-manager-BNW0y5PZ.js">
8
8
  <link rel="modulepreload" crossorigin href="/assets/index-VtAAU1cN.js">
9
9
  <link rel="modulepreload" crossorigin href="/assets/index-BPTkodPz.js">
10
10
  <link rel="modulepreload" crossorigin href="/assets/state-DKGJ6EmM.js">
11
- <link rel="modulepreload" crossorigin href="/assets/rpc-client-CCUlY3sp.js">
12
- <link rel="modulepreload" crossorigin href="/assets/handle-errors-BcwHAkCd.js">
11
+ <link rel="modulepreload" crossorigin href="/assets/rpc-client-TGo-LOnR.js">
12
+ <link rel="modulepreload" crossorigin href="/assets/handle-errors-BM-xvD4v.js">
13
13
  <link rel="stylesheet" crossorigin href="/assets/index-TZrNw7dA.css">
14
14
  <link rel="stylesheet" crossorigin href="/assets/index-BknZMPaI.css">
15
15
  </head>