@canton-network/wallet-gateway-remote 1.2.1 → 1.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.
- package/README.md +1 -1
- package/dist/config/Config.d.ts +4 -4
- 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 +33 -2
- package/dist/dapp-api/controller.test.d.ts +2 -0
- package/dist/dapp-api/controller.test.d.ts.map +1 -0
- package/dist/dapp-api/controller.test.js +516 -0
- 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 +99 -14
- package/dist/dapp-api/rpc-gen/typings.d.ts.map +1 -1
- package/dist/dapp-api/server.d.ts.map +1 -1
- package/dist/dapp-api/server.js +5 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +1 -0
- package/dist/middleware/rateLimit.js +2 -2
- package/dist/middleware/rateLimit.test.js +14 -0
- package/dist/user-api/controller.d.ts +6 -0
- package/dist/user-api/controller.d.ts.map +1 -1
- package/dist/user-api/controller.js +223 -5
- package/dist/user-api/rpc-gen/index.d.ts +18 -0
- package/dist/user-api/rpc-gen/index.d.ts.map +1 -1
- package/dist/user-api/rpc-gen/index.js +6 -0
- package/dist/user-api/rpc-gen/typings.d.ts +119 -23
- package/dist/user-api/rpc-gen/typings.d.ts.map +1 -1
- package/dist/user-api/server.test.js +53 -0
- package/dist/utils.d.ts +2 -4
- package/dist/utils.d.ts.map +1 -1
- package/dist/web/frontend/404/index.html +2 -2
- package/dist/web/frontend/activities/index.html +3 -3
- package/dist/web/frontend/approve/index.html +4 -5
- package/dist/web/frontend/assets/404-C7V2yl2z.js +5 -0
- package/dist/web/frontend/assets/activities-NY8oZAkH.js +61 -0
- package/dist/web/frontend/assets/addIdentityProvider-38ghz3RT.js +28 -0
- package/dist/web/frontend/assets/addNetwork-BaDhbrZl.js +38 -0
- package/dist/web/frontend/assets/addParty-j3JWZX5a.js +41 -0
- package/dist/web/frontend/assets/approve-43nVzAAC.js +21 -0
- package/dist/web/frontend/assets/callback-BBMiCjHR.js +1 -0
- package/dist/web/frontend/assets/identityProviders-BZ9h_VOJ.js +71 -0
- package/dist/web/frontend/assets/index-B-HiKugW.js +91 -0
- package/dist/web/frontend/assets/{index-_pMHlJoE.js → index-DoNqknyE.js} +116 -116
- package/dist/web/frontend/assets/login-CqwMEG9J.js +10 -0
- package/dist/web/frontend/assets/networks-BJvRi47M.js +73 -0
- package/dist/web/frontend/assets/reviewIdentityProvider-ySlQnw5R.js +43 -0
- package/dist/web/frontend/assets/reviewNetwork-DrVxeHd4.js +43 -0
- package/dist/web/frontend/assets/{settings-B1ga2TK0.js → settings-BVNkaUyJ.js} +1 -1
- package/dist/web/frontend/assets/state-qAsNw5qf.js +1 -0
- package/dist/web/frontend/assets/{utils-CT9Hzi7v.js → utils-BDkHxi8V.js} +1 -1
- package/dist/web/frontend/callback/index.html +2 -2
- package/dist/web/frontend/identity-providers/add/index.html +3 -3
- package/dist/web/frontend/identity-providers/index.html +3 -3
- package/dist/web/frontend/identity-providers/review/index.html +3 -3
- package/dist/web/frontend/index.html +1 -1
- package/dist/web/frontend/login/index.html +3 -4
- package/dist/web/frontend/networks/add/index.html +3 -3
- package/dist/web/frontend/networks/index.html +3 -3
- package/dist/web/frontend/networks/review/index.html +3 -3
- package/dist/web/frontend/parties/add/index.html +5 -5
- package/dist/web/frontend/parties/index.html +4 -4
- package/dist/web/frontend/settings/index.html +3 -3
- package/package.json +27 -24
- package/dist/web/frontend/assets/404-B-o9ppJB.js +0 -5
- package/dist/web/frontend/assets/activities-CGjCIjUH.js +0 -61
- package/dist/web/frontend/assets/addIdentityProvider-CR4Wm9Tl.js +0 -28
- package/dist/web/frontend/assets/addNetwork-Dx0-SN4j.js +0 -38
- package/dist/web/frontend/assets/addParty-COhk_rFn.js +0 -41
- package/dist/web/frontend/assets/approve-B2w66l0J.js +0 -21
- package/dist/web/frontend/assets/callback-BTVon_yQ.js +0 -1
- package/dist/web/frontend/assets/identityProviders-CK8zSrd3.js +0 -71
- package/dist/web/frontend/assets/index-CF4BKzgl.js +0 -91
- package/dist/web/frontend/assets/index-DWz_3f3y.js +0 -1
- package/dist/web/frontend/assets/login-CVoPNVDw.js +0 -10
- package/dist/web/frontend/assets/networks-D1nPvUzM.js +0 -73
- package/dist/web/frontend/assets/reviewIdentityProvider-CNSf2qQv.js +0 -43
- package/dist/web/frontend/assets/reviewNetwork-DGLK-Ume.js +0 -43
- package/dist/web/frontend/assets/state-B2k3ak7d.js +0 -1
|
@@ -6,12 +6,60 @@
|
|
|
6
6
|
export type CommandId = string;
|
|
7
7
|
/**
|
|
8
8
|
*
|
|
9
|
-
*
|
|
9
|
+
* Inner shape is defined by the Canton Ledger API CreateCommand schema; do not re-specify here.
|
|
10
10
|
*
|
|
11
11
|
*/
|
|
12
|
-
export interface
|
|
12
|
+
export interface CreateCommandPayload {
|
|
13
13
|
[key: string]: any;
|
|
14
14
|
}
|
|
15
|
+
export interface CreateCommand {
|
|
16
|
+
CreateCommand: CreateCommandPayload;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
*
|
|
20
|
+
* Inner shape is defined by the Canton Ledger API ExerciseCommand schema; do not re-specify here.
|
|
21
|
+
*
|
|
22
|
+
*/
|
|
23
|
+
export interface ExerciseCommandPayload {
|
|
24
|
+
[key: string]: any;
|
|
25
|
+
}
|
|
26
|
+
export interface ExerciseCommand {
|
|
27
|
+
ExerciseCommand: ExerciseCommandPayload;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
*
|
|
31
|
+
* Inner shape is defined by the Canton Ledger API CreateAndExerciseCommand schema; do not re-specify here.
|
|
32
|
+
*
|
|
33
|
+
*/
|
|
34
|
+
export interface CreateAndExerciseCommandPayload {
|
|
35
|
+
[key: string]: any;
|
|
36
|
+
}
|
|
37
|
+
export interface CreateAndExerciseCommand {
|
|
38
|
+
CreateAndExerciseCommand: CreateAndExerciseCommandPayload;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
*
|
|
42
|
+
* Inner shape is defined by the Canton Ledger API ExerciseByKeyCommand schema; do not re-specify here.
|
|
43
|
+
*
|
|
44
|
+
*/
|
|
45
|
+
export interface ExerciseByKeyCommandPayload {
|
|
46
|
+
[key: string]: any;
|
|
47
|
+
}
|
|
48
|
+
export interface ExerciseByKeyCommand {
|
|
49
|
+
ExerciseByKeyCommand: ExerciseByKeyCommandPayload;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
*
|
|
53
|
+
* A Daml command atom. Mirror of the Canton Ledger API Command union; inner shapes are intentionally opaque so the dApp layer never drifts from the Ledger API contract.
|
|
54
|
+
*
|
|
55
|
+
*/
|
|
56
|
+
export type Command = CreateCommand | ExerciseCommand | CreateAndExerciseCommand | ExerciseByKeyCommand;
|
|
57
|
+
/**
|
|
58
|
+
*
|
|
59
|
+
* Non-empty array of Daml command atoms to submit atomically as a single transaction.
|
|
60
|
+
*
|
|
61
|
+
*/
|
|
62
|
+
export type Commands = Command[];
|
|
15
63
|
/**
|
|
16
64
|
*
|
|
17
65
|
* The party that signed the transaction.
|
|
@@ -223,10 +271,10 @@ export interface Session {
|
|
|
223
271
|
}
|
|
224
272
|
/**
|
|
225
273
|
*
|
|
226
|
-
* The
|
|
274
|
+
* The unique identifier of the message associated with the message to be signed.
|
|
227
275
|
*
|
|
228
276
|
*/
|
|
229
|
-
export type
|
|
277
|
+
export type MessageId = string;
|
|
230
278
|
/**
|
|
231
279
|
*
|
|
232
280
|
* Set as primary wallet for dApp usage.
|
|
@@ -316,7 +364,7 @@ export type PartyLevelRight = any;
|
|
|
316
364
|
export type Rights = PartyLevelRight[];
|
|
317
365
|
/**
|
|
318
366
|
*
|
|
319
|
-
* The status of the
|
|
367
|
+
* The status of the message signature.
|
|
320
368
|
*
|
|
321
369
|
*/
|
|
322
370
|
export type StatusPending = 'pending';
|
|
@@ -331,10 +379,16 @@ export interface TxChangedPendingEvent {
|
|
|
331
379
|
}
|
|
332
380
|
/**
|
|
333
381
|
*
|
|
334
|
-
* The status of the
|
|
382
|
+
* The status of the message signature.
|
|
335
383
|
*
|
|
336
384
|
*/
|
|
337
385
|
export type StatusSigned = 'signed';
|
|
386
|
+
/**
|
|
387
|
+
*
|
|
388
|
+
* The signature of the message.
|
|
389
|
+
*
|
|
390
|
+
*/
|
|
391
|
+
export type Signature = string;
|
|
338
392
|
/**
|
|
339
393
|
*
|
|
340
394
|
* The identifier of the provider that signed the transaction.
|
|
@@ -395,7 +449,7 @@ export interface TxChangedExecutedEvent {
|
|
|
395
449
|
}
|
|
396
450
|
/**
|
|
397
451
|
*
|
|
398
|
-
* The status of the
|
|
452
|
+
* The status of the message signature.
|
|
399
453
|
*
|
|
400
454
|
*/
|
|
401
455
|
export type StatusFailed = 'failed';
|
|
@@ -408,6 +462,34 @@ export interface TxChangedFailedEvent {
|
|
|
408
462
|
status: StatusFailed;
|
|
409
463
|
commandId: CommandId;
|
|
410
464
|
}
|
|
465
|
+
/**
|
|
466
|
+
*
|
|
467
|
+
* Event emitted when a message signature is requested.
|
|
468
|
+
*
|
|
469
|
+
*/
|
|
470
|
+
export interface MessageSignaturePendingEvent {
|
|
471
|
+
status: StatusPending;
|
|
472
|
+
messageId: MessageId;
|
|
473
|
+
}
|
|
474
|
+
/**
|
|
475
|
+
*
|
|
476
|
+
* Event emitted when a message signature is completed.
|
|
477
|
+
*
|
|
478
|
+
*/
|
|
479
|
+
export interface MessageSignatureSignedEvent {
|
|
480
|
+
status: StatusSigned;
|
|
481
|
+
messageId: MessageId;
|
|
482
|
+
signature: Signature;
|
|
483
|
+
}
|
|
484
|
+
/**
|
|
485
|
+
*
|
|
486
|
+
* Event emitted when a message signature has failed.
|
|
487
|
+
*
|
|
488
|
+
*/
|
|
489
|
+
export interface MessageSignatureFailedEvent {
|
|
490
|
+
status: StatusFailed;
|
|
491
|
+
messageId: MessageId;
|
|
492
|
+
}
|
|
411
493
|
/**
|
|
412
494
|
*
|
|
413
495
|
* Structure representing the request for prepare and execute calls
|
|
@@ -415,7 +497,7 @@ export interface TxChangedFailedEvent {
|
|
|
415
497
|
*/
|
|
416
498
|
export interface PrepareExecuteParams {
|
|
417
499
|
commandId?: CommandId;
|
|
418
|
-
commands:
|
|
500
|
+
commands: Commands;
|
|
419
501
|
actAs?: ActAs;
|
|
420
502
|
readAs?: ReadAs;
|
|
421
503
|
disclosedContracts?: DisclosedContracts;
|
|
@@ -457,13 +539,9 @@ export type Null = null;
|
|
|
457
539
|
export interface PrepareExecuteResult {
|
|
458
540
|
userUrl: UserUrl;
|
|
459
541
|
}
|
|
460
|
-
/**
|
|
461
|
-
*
|
|
462
|
-
* Result of signing a message.
|
|
463
|
-
*
|
|
464
|
-
*/
|
|
465
542
|
export interface SignMessageResult {
|
|
466
|
-
|
|
543
|
+
messageId: MessageId;
|
|
544
|
+
userUrl: UserUrl;
|
|
467
545
|
}
|
|
468
546
|
/**
|
|
469
547
|
*
|
|
@@ -491,6 +569,12 @@ export type ListAccountsResult = Wallet[];
|
|
|
491
569
|
*
|
|
492
570
|
*/
|
|
493
571
|
export type TxChangedEvent = TxChangedPendingEvent | TxChangedSignedEvent | TxChangedExecutedEvent | TxChangedFailedEvent;
|
|
572
|
+
/**
|
|
573
|
+
*
|
|
574
|
+
* Event emitted when a message signature is requested or completed.
|
|
575
|
+
*
|
|
576
|
+
*/
|
|
577
|
+
export type MessageSignatureEvent = MessageSignaturePendingEvent | MessageSignatureSignedEvent | MessageSignatureFailedEvent;
|
|
494
578
|
/**
|
|
495
579
|
*
|
|
496
580
|
* Generated! Represents an alias to any of the provided schemas
|
|
@@ -510,4 +594,5 @@ export type AccountsChanged = () => Promise<AccountsChangedEvent>;
|
|
|
510
594
|
export type GetPrimaryAccount = () => Promise<Wallet>;
|
|
511
595
|
export type ListAccounts = () => Promise<ListAccountsResult>;
|
|
512
596
|
export type TxChanged = () => Promise<TxChangedEvent>;
|
|
597
|
+
export type MessageSignature = () => Promise<MessageSignatureEvent>;
|
|
513
598
|
//# sourceMappingURL=typings.d.ts.map
|
|
@@ -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,
|
|
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,oBAAoB;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACrB;AACD,MAAM,WAAW,aAAa;IAC1B,aAAa,EAAE,oBAAoB,CAAA;CACtC;AACD;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACnC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACrB;AACD,MAAM,WAAW,eAAe;IAC5B,eAAe,EAAE,sBAAsB,CAAA;CAC1C;AACD;;;;GAIG;AACH,MAAM,WAAW,+BAA+B;IAC5C,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACrB;AACD,MAAM,WAAW,wBAAwB;IACrC,wBAAwB,EAAE,+BAA+B,CAAA;CAC5D;AACD;;;;GAIG;AACH,MAAM,WAAW,2BAA2B;IACxC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACrB;AACD,MAAM,WAAW,oBAAoB;IACjC,oBAAoB,EAAE,2BAA2B,CAAA;CACpD;AACD;;;;GAIG;AACH,MAAM,MAAM,OAAO,GACb,aAAa,GACb,eAAe,GACf,wBAAwB,GACxB,oBAAoB,CAAA;AAC1B;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAA;AAChC;;;;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,gBAAgB,GAAG,OAAO,CAAA;AACtC;;;;GAIG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,CAAA;AAC3B;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAA;AACxC;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAA;AAClC,MAAM,WAAW,aAAa;IAC1B,WAAW,EAAE,gBAAgB,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,kBAAkB,EAAE,kBAAkB,CAAA;IACtC,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAA;CACpB;AACD;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAA;AAC9B;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAA;AACjC;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAA;AAChC;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACpB,SAAS,EAAE,SAAS,CAAA;IACpB,SAAS,CAAC,EAAE,YAAY,CAAA;IACxB,WAAW,CAAC,EAAE,WAAW,CAAA;CAC5B;AACD;;;;GAIG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,CAAA;AAC3B;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACpB,WAAW,EAAE,WAAW,CAAA;IACxB,MAAM,EAAE,MAAM,CAAA;CACjB;AACD;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAA;AAC9B;;;;GAIG;AACH,MAAM,MAAM,OAAO,GAAG,OAAO,CAAA;AAC7B;;;;GAIG;AACH,MAAM,MAAM,OAAO,GAAG,MAAM,CAAA;AAC5B;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,WAAW,GAAG,SAAS,CAAA;AAClE;;;;GAIG;AACH,MAAM,MAAM,IAAI,GAAG,MAAM,CAAA;AACzB;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAA;AAC9B;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAA;AAC9B;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAA;AACtC;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAA;AACjC;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAA;AACzC;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,CAAA;AAC9B;;;;GAIG;AACH,MAAM,WAAW,MAAM;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,YAAY,CAAA;IACpB,IAAI,EAAE,IAAI,CAAA;IACV,SAAS,EAAE,SAAS,CAAA;IACpB,SAAS,EAAE,SAAS,CAAA;IACpB,SAAS,EAAE,SAAS,CAAA;IACpB,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;IAC3C,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACjB;AACD,MAAM,MAAM,eAAe,GAAG,GAAG,CAAA;AACjC;;;;GAIG;AACH,MAAM,MAAM,MAAM,GAAG,eAAe,EAAE,CAAA;AACtC;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,CAAA;AACrC;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IAClC,MAAM,EAAE,aAAa,CAAA;IACrB,SAAS,EAAE,SAAS,CAAA;CACvB;AACD;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAA;AACnC;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAA;AAC9B;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAA;AAC7B;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACnC,SAAS,EAAE,SAAS,CAAA;IACpB,QAAQ,EAAE,QAAQ,CAAA;IAClB,KAAK,EAAE,KAAK,CAAA;CACf;AACD;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACjC,MAAM,EAAE,YAAY,CAAA;IACpB,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,sBAAsB,CAAA;CAClC;AACD;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,UAAU,CAAA;AACvC;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAA;AAC7B,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAA;AACrC;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACrC,QAAQ,EAAE,QAAQ,CAAA;IAClB,gBAAgB,EAAE,gBAAgB,CAAA;CACrC;AACD;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACnC,MAAM,EAAE,cAAc,CAAA;IACtB,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,wBAAwB,CAAA;CACpC;AACD;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAA;AACnC;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACjC,MAAM,EAAE,YAAY,CAAA;IACpB,SAAS,EAAE,SAAS,CAAA;CACvB;AACD;;;;GAIG;AACH,MAAM,WAAW,4BAA4B;IACzC,MAAM,EAAE,aAAa,CAAA;IACrB,SAAS,EAAE,SAAS,CAAA;CACvB;AACD;;;;GAIG;AACH,MAAM,WAAW,2BAA2B;IACxC,MAAM,EAAE,YAAY,CAAA;IACpB,SAAS,EAAE,SAAS,CAAA;IACpB,SAAS,EAAE,SAAS,CAAA;CACvB;AACD;;;;GAIG;AACH,MAAM,WAAW,2BAA2B;IACxC,MAAM,EAAE,YAAY,CAAA;IACpB,SAAS,EAAE,SAAS,CAAA;CACvB;AACD;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACjC,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,QAAQ,EAAE,QAAQ,CAAA;IAClB,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IACvC,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,4BAA4B,CAAC,EAAE,4BAA4B,CAAA;CAC9D;AACD;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,OAAO,CAAA;CACnB;AACD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC5B,aAAa,EAAE,aAAa,CAAA;IAC5B,QAAQ,EAAE,QAAQ,CAAA;IAClB,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,IAAI,CAAC,EAAE,IAAI,CAAA;CACd;AACD,MAAM,WAAW,WAAW;IACxB,QAAQ,EAAE,QAAQ,CAAA;IAClB,UAAU,EAAE,aAAa,CAAA;IACzB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;CACpB;AACD;;;;GAIG;AACH,MAAM,MAAM,IAAI,GAAG,IAAI,CAAA;AACvB,MAAM,WAAW,oBAAoB;IACjC,OAAO,EAAE,OAAO,CAAA;CACnB;AACD,MAAM,WAAW,iBAAiB;IAC9B,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;CACnB;AACD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACrB;AACD;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,EAAE,CAAA;AAC3C;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,EAAE,CAAA;AACzC;;;;GAIG;AACH,MAAM,MAAM,cAAc,GACpB,qBAAqB,GACrB,oBAAoB,GACpB,sBAAsB,GACtB,oBAAoB,CAAA;AAC1B;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAC3B,4BAA4B,GAC5B,2BAA2B,GAC3B,2BAA2B,CAAA;AACjC;;;;GAIG;AAEH,MAAM,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAA;AAC/C,MAAM,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,CAAA;AAClD,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;AAC5C,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,CAAA;AACtD,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;AACrD,MAAM,MAAM,cAAc,GAAG,CACzB,MAAM,EAAE,oBAAoB,KAC3B,OAAO,CAAC,oBAAoB,CAAC,CAAA;AAClC,MAAM,MAAM,WAAW,GAAG,CACtB,MAAM,EAAE,iBAAiB,KACxB,OAAO,CAAC,iBAAiB,CAAC,CAAA;AAC/B,MAAM,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,eAAe,CAAC,CAAA;AAC7E,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAA;AAClD,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAA;AACxD,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,oBAAoB,CAAC,CAAA;AACjE,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;AACrD,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAA;AAC5D,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,CAAA;AACrD,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,qBAAqB,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/dapp-api/server.ts"],"names":[],"mappings":"AAGA,OAAO,OAAO,MAAM,SAAS,CAAA;AAG7B,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAG7B,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA;AAC5E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAO9D,eAAO,MAAM,IAAI,GACb,OAAO,MAAM,EACb,KAAK,OAAO,CAAC,OAAO,EACpB,QAAQ,MAAM,EACd,QAAQ,MAAM,EACd,YAAY,UAAU,EACtB,SAAS,MAAM,EACf,SAAS,MAAM,EACf,cAAc,YAAY,EAC1B,qBAAqB,mBAAmB,EACxC,aAAa,WAAW,EACxB,OAAO,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/dapp-api/server.ts"],"names":[],"mappings":"AAGA,OAAO,OAAO,MAAM,SAAS,CAAA;AAG7B,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAG7B,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA;AAC5E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAO9D,eAAO,MAAM,IAAI,GACb,OAAO,MAAM,EACb,KAAK,OAAO,CAAC,OAAO,EACpB,QAAQ,MAAM,EACd,QAAQ,MAAM,EACd,YAAY,UAAU,EACtB,SAAS,MAAM,EACf,SAAS,MAAM,EACf,cAAc,YAAY,EAC1B,qBAAqB,mBAAmB,EACxC,aAAa,WAAW,EACxB,OAAO,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,kGA4FlC,CAAA"}
|
package/dist/dapp-api/server.js
CHANGED
|
@@ -45,16 +45,21 @@ export const dapp = (route, app, logger, server, kernelInfo, dappUrl, userUrl, s
|
|
|
45
45
|
const onTxChanged = (...event) => {
|
|
46
46
|
writeSSE(res, 'txChanged', event);
|
|
47
47
|
};
|
|
48
|
+
const onMessageSignature = (...event) => {
|
|
49
|
+
writeSSE(res, 'messageSignature', event);
|
|
50
|
+
};
|
|
48
51
|
notifier.on('accountsChanged', onAccountsChanged);
|
|
49
52
|
notifier.on('connected', onConnected);
|
|
50
53
|
notifier.on('statusChanged', onStatusChanged);
|
|
51
54
|
notifier.on('txChanged', onTxChanged);
|
|
55
|
+
notifier.on('messageSignature', onMessageSignature);
|
|
52
56
|
const cleanup = () => {
|
|
53
57
|
logger.debug('SSE client disconnected');
|
|
54
58
|
notifier.removeListener('accountsChanged', onAccountsChanged);
|
|
55
59
|
notifier.removeListener('connected', onConnected);
|
|
56
60
|
notifier.removeListener('statusChanged', onStatusChanged);
|
|
57
61
|
notifier.removeListener('txChanged', onTxChanged);
|
|
62
|
+
notifier.removeListener('messageSignature', onMessageSignature);
|
|
58
63
|
};
|
|
59
64
|
req.on('close', cleanup);
|
|
60
65
|
req.on('error', cleanup);
|
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;AA2B7B,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAsMvC,wBAAsB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AA2B7B,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAsMvC,wBAAsB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,iBAkKhE"}
|
package/dist/init.js
CHANGED
|
@@ -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 rateLimit from 'express-rate-limit';
|
|
3
|
+
import rateLimit, { ipKeyGenerator } from 'express-rate-limit';
|
|
4
4
|
function hasBearerToken(req) {
|
|
5
5
|
const authHeader = req.headers.authorization;
|
|
6
6
|
if (typeof authHeader === 'string' && authHeader.startsWith('Bearer ')) {
|
|
@@ -9,7 +9,7 @@ function hasBearerToken(req) {
|
|
|
9
9
|
return typeof req.query.token === 'string' && req.query.token.length > 0;
|
|
10
10
|
}
|
|
11
11
|
export function ipRateLimitKeyGenerator(req) {
|
|
12
|
-
return `ip:${req.ip || req.socket.remoteAddress || 'unknown'}`;
|
|
12
|
+
return `ip:${ipKeyGenerator(req.ip || req.socket.remoteAddress || 'unknown')}`;
|
|
13
13
|
}
|
|
14
14
|
export function rateLimitKeyGenerator(req) {
|
|
15
15
|
// Prefer authenticated identity to avoid shared proxy IP buckets.
|
|
@@ -10,6 +10,20 @@ describe('ipRateLimitKeyGenerator', () => {
|
|
|
10
10
|
};
|
|
11
11
|
expect(ipRateLimitKeyGenerator(req)).toBe('ip:198.51.100.42');
|
|
12
12
|
});
|
|
13
|
+
test('leaves IPv4 request ip address unchanged', () => {
|
|
14
|
+
const req = {
|
|
15
|
+
ip: '198.51.100.42',
|
|
16
|
+
socket: { remoteAddress: '10.0.0.1' },
|
|
17
|
+
};
|
|
18
|
+
expect(ipRateLimitKeyGenerator(req)).toBe('ip:198.51.100.42');
|
|
19
|
+
});
|
|
20
|
+
test('normalizes IPv6 request ip address to a subnet key', () => {
|
|
21
|
+
const req = {
|
|
22
|
+
ip: '2001:db8:abcd:0012:1111:2222:3333:4444',
|
|
23
|
+
socket: { remoteAddress: '10.0.0.1' },
|
|
24
|
+
};
|
|
25
|
+
expect(ipRateLimitKeyGenerator(req)).toBe('ip:2001:db8:abcd::/56');
|
|
26
|
+
});
|
|
13
27
|
});
|
|
14
28
|
describe('rateLimitKeyGenerator', () => {
|
|
15
29
|
test('uses authenticated user id when available', () => {
|
|
@@ -9,6 +9,8 @@ export declare const userController: (kernelInfo: KernelInfo, userUrl: string, s
|
|
|
9
9
|
addNetwork: import("./rpc-gen/typings.js").AddNetwork;
|
|
10
10
|
removeNetwork: import("./rpc-gen/typings.js").RemoveNetwork;
|
|
11
11
|
listNetworks: import("./rpc-gen/typings.js").ListNetworks;
|
|
12
|
+
getNetwork: import("./rpc-gen/typings.js").GetNetwork;
|
|
13
|
+
selfSignedAccessToken: import("./rpc-gen/typings.js").SelfSignedAccessToken;
|
|
12
14
|
addIdp: import("./rpc-gen/typings.js").AddIdp;
|
|
13
15
|
removeIdp: import("./rpc-gen/typings.js").RemoveIdp;
|
|
14
16
|
listIdps: import("./rpc-gen/typings.js").ListIdps;
|
|
@@ -20,6 +22,10 @@ export declare const userController: (kernelInfo: KernelInfo, userUrl: string, s
|
|
|
20
22
|
syncWallets: import("./rpc-gen/typings.js").SyncWallets;
|
|
21
23
|
isWalletSyncNeeded: import("./rpc-gen/typings.js").IsWalletSyncNeeded;
|
|
22
24
|
sign: import("./rpc-gen/typings.js").Sign;
|
|
25
|
+
signMessage: import("./rpc-gen/typings.js").SignMessage;
|
|
26
|
+
getMessageToSign: import("./rpc-gen/typings.js").GetMessageToSign;
|
|
27
|
+
listMessagesToSign: import("./rpc-gen/typings.js").ListMessagesToSign;
|
|
28
|
+
deleteMessageToSign: import("./rpc-gen/typings.js").DeleteMessageToSign;
|
|
23
29
|
execute: import("./rpc-gen/typings.js").Execute;
|
|
24
30
|
addSession: import("./rpc-gen/typings.js").AddSession;
|
|
25
31
|
removeSession: import("./rpc-gen/typings.js").RemoveSession;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/user-api/controller.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/user-api/controller.ts"],"names":[],"mappings":"AAyCA,OAAO,EAAE,KAAK,EAAW,MAAM,mCAAmC,CAAA;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAA;AAC5E,OAAO,EAEH,WAAW,EAMd,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAEH,sBAAsB,EACtB,eAAe,EAClB,MAAM,kCAAkC,CAAA;AAUzC,KAAK,uBAAuB,GAAG,OAAO,CAClC,MAAM,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAClD,CAAA;AAED,eAAO,MAAM,cAAc,GACvB,YAAY,UAAU,EACtB,SAAS,MAAM,EACf,OAAO,KAAK,EACZ,qBAAqB,mBAAmB,EACxC,aAAa,WAAW,GAAG,SAAS,EACpC,SAAS,uBAAuB,EAChC,SAAS,MAAM,EACf,cAAc,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwhCvB,CAAA"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { LedgerClient } from '@canton-network/core-ledger-client';
|
|
6
6
|
import buildController from './rpc-gen/index.js';
|
|
7
7
|
import { assertConnected, authSchema, AuthTokenProvider, fetchOidcUserInfo, idpSchema, } from '@canton-network/core-wallet-auth';
|
|
8
|
-
import { SigningProvider, } from '@canton-network/core-signing-lib';
|
|
8
|
+
import { isRpcError, SigningProvider, } from '@canton-network/core-signing-lib';
|
|
9
9
|
import { PartyAllocationService } from '../ledger/party-allocation-service.js';
|
|
10
10
|
import { WalletAllocationService } from '../ledger/wallet-allocation/wallet-allocation-service.js';
|
|
11
11
|
import { WalletSyncService } from '../ledger/wallet-sync-service.js';
|
|
@@ -95,12 +95,42 @@ export const userController = (kernelInfo, userUrl, store, notificationService,
|
|
|
95
95
|
listNetworks: async () => {
|
|
96
96
|
const networks = await store.listNetworks();
|
|
97
97
|
return {
|
|
98
|
-
networks: networks.map(
|
|
99
|
-
...n,
|
|
100
|
-
ledgerApi: n.ledgerApi.baseUrl,
|
|
101
|
-
})),
|
|
98
|
+
networks: networks.map(toPublicNetwork),
|
|
102
99
|
};
|
|
103
100
|
},
|
|
101
|
+
getNetwork: async (params) => {
|
|
102
|
+
assertAdmin();
|
|
103
|
+
const network = await store.getNetwork(params.networkId);
|
|
104
|
+
return { network: toNetworkDto(network) };
|
|
105
|
+
},
|
|
106
|
+
selfSignedAccessToken: async (params) => {
|
|
107
|
+
const network = (await store.listNetworks()).find((n) => n.id === params.networkId);
|
|
108
|
+
if (!network) {
|
|
109
|
+
throw new Error(`Network "${params.networkId}" not found`);
|
|
110
|
+
}
|
|
111
|
+
const auth = network.auth;
|
|
112
|
+
if (auth.method !== 'self_signed') {
|
|
113
|
+
throw new Error('Network does not use self_signed authentication');
|
|
114
|
+
}
|
|
115
|
+
const idp = (await store.listIdps()).find((idp) => idp.id === network.identityProviderId);
|
|
116
|
+
if (!idp) {
|
|
117
|
+
throw new Error(`Identity provider "${network.identityProviderId}" not found`);
|
|
118
|
+
}
|
|
119
|
+
if (idp.type !== 'self_signed') {
|
|
120
|
+
throw new Error('Identity provider is not configured for self_signed authentication');
|
|
121
|
+
}
|
|
122
|
+
const accessToken = await new AuthTokenProvider({
|
|
123
|
+
method: 'self_signed',
|
|
124
|
+
issuer: idp.issuer,
|
|
125
|
+
credentials: {
|
|
126
|
+
clientId: params.clientId,
|
|
127
|
+
clientSecret: auth.clientSecret,
|
|
128
|
+
scope: auth.scope,
|
|
129
|
+
audience: auth.audience,
|
|
130
|
+
},
|
|
131
|
+
}, logger).getAccessToken();
|
|
132
|
+
return { accessToken };
|
|
133
|
+
},
|
|
104
134
|
addIdp: async (params) => {
|
|
105
135
|
assertAdmin();
|
|
106
136
|
const validatedIdp = idpSchema.parse(params.idp);
|
|
@@ -266,6 +296,141 @@ export const userController = (kernelInfo, userUrl, store, notificationService,
|
|
|
266
296
|
throw new Error(`Unsupported signing provider: ${wallet.signingProviderId}`);
|
|
267
297
|
}
|
|
268
298
|
},
|
|
299
|
+
signMessage: async (params) => {
|
|
300
|
+
const pending = await store.getMessageRaw(params.messageId);
|
|
301
|
+
if (!pending) {
|
|
302
|
+
throw new Error(`Message signing request not found with id: ${params.messageId}`);
|
|
303
|
+
}
|
|
304
|
+
if (pending.status !== 'pending') {
|
|
305
|
+
throw new Error(`Cannot sign message with status '${pending.status}'. Only pending messages can be signed.`);
|
|
306
|
+
}
|
|
307
|
+
const userId = assertConnected(authContext).userId;
|
|
308
|
+
if (pending.userId !== userId) {
|
|
309
|
+
throw new Error(`Message signing request ${pending.id} is not owned by user ${userId}`);
|
|
310
|
+
}
|
|
311
|
+
const notifier = notificationService.getNotifier(userId);
|
|
312
|
+
const emitFailedAndPersist = async (details) => {
|
|
313
|
+
// Best-effort: make sure listeners see a terminal state.
|
|
314
|
+
try {
|
|
315
|
+
await store.setMessageRawStatus(pending.id, 'failed');
|
|
316
|
+
}
|
|
317
|
+
catch {
|
|
318
|
+
// ignore (e.g. record removed concurrently)
|
|
319
|
+
}
|
|
320
|
+
notifier.emit('messageSignature', {
|
|
321
|
+
status: 'failed',
|
|
322
|
+
messageId: pending.id,
|
|
323
|
+
});
|
|
324
|
+
// Preserve the original error message for the caller/UI.
|
|
325
|
+
throw new Error(details);
|
|
326
|
+
};
|
|
327
|
+
const wallet = (await store.getWallets()).find((w) => w.partyId === pending.partyId);
|
|
328
|
+
if (!wallet) {
|
|
329
|
+
return await emitFailedAndPersist(`No wallet found for partyId ${pending.partyId} (from message request ${pending.id})`);
|
|
330
|
+
}
|
|
331
|
+
if (wallet.publicKey !== pending.publicKey) {
|
|
332
|
+
return await emitFailedAndPersist(`Wallet public key changed for partyId ${pending.partyId}; refusing to sign message request ${pending.id}`);
|
|
333
|
+
}
|
|
334
|
+
// TODO: support other signing providers
|
|
335
|
+
if (wallet.signingProviderId !== SigningProvider.WALLET_KERNEL) {
|
|
336
|
+
return await emitFailedAndPersist(`signMessage is only supported for ${SigningProvider.WALLET_KERNEL} wallets, got ${wallet.signingProviderId}`);
|
|
337
|
+
}
|
|
338
|
+
const driver = drivers[SigningProvider.WALLET_KERNEL]?.controller(userId);
|
|
339
|
+
if (!driver) {
|
|
340
|
+
return await emitFailedAndPersist('Wallet Kernel signing driver not available');
|
|
341
|
+
}
|
|
342
|
+
const result = await driver.signMessage({
|
|
343
|
+
message: pending.message,
|
|
344
|
+
keyIdentifier: { publicKey: wallet.publicKey },
|
|
345
|
+
});
|
|
346
|
+
if (isRpcError(result)) {
|
|
347
|
+
await store.setMessageRawStatus(pending.id, 'failed');
|
|
348
|
+
notifier.emit('messageSignature', {
|
|
349
|
+
status: 'failed',
|
|
350
|
+
messageId: pending.id,
|
|
351
|
+
});
|
|
352
|
+
throw new Error(result.error_description);
|
|
353
|
+
}
|
|
354
|
+
if (!result?.signature) {
|
|
355
|
+
await store.setMessageRawStatus(pending.id, 'failed');
|
|
356
|
+
notifier.emit('messageSignature', {
|
|
357
|
+
status: 'failed',
|
|
358
|
+
messageId: pending.id,
|
|
359
|
+
});
|
|
360
|
+
throw new Error(`signMessage failed`);
|
|
361
|
+
}
|
|
362
|
+
await store.setMessageRawStatus(pending.id, 'signed', {
|
|
363
|
+
signedAt: new Date(),
|
|
364
|
+
signature: result.signature,
|
|
365
|
+
});
|
|
366
|
+
notifier.emit('messageSignature', {
|
|
367
|
+
status: 'signed',
|
|
368
|
+
messageId: pending.id,
|
|
369
|
+
signature: result.signature,
|
|
370
|
+
});
|
|
371
|
+
return {
|
|
372
|
+
signature: result.signature,
|
|
373
|
+
publicKey: wallet.publicKey,
|
|
374
|
+
};
|
|
375
|
+
},
|
|
376
|
+
getMessageToSign: async (params) => {
|
|
377
|
+
const message = await store.getMessageRaw(params.messageId);
|
|
378
|
+
if (!message) {
|
|
379
|
+
throw new Error(`Message signing request not found with id: ${params.messageId}`);
|
|
380
|
+
}
|
|
381
|
+
return {
|
|
382
|
+
message: {
|
|
383
|
+
id: message.id,
|
|
384
|
+
status: message.status,
|
|
385
|
+
partyId: message.partyId,
|
|
386
|
+
publicKey: message.publicKey,
|
|
387
|
+
message: message.message,
|
|
388
|
+
...(message.origin !== null && { origin: message.origin }),
|
|
389
|
+
...(message.createdAt && {
|
|
390
|
+
createdAt: message.createdAt.toISOString(),
|
|
391
|
+
}),
|
|
392
|
+
...(message.signedAt && {
|
|
393
|
+
signedAt: message.signedAt.toISOString(),
|
|
394
|
+
}),
|
|
395
|
+
...(message.signature && { signature: message.signature }),
|
|
396
|
+
},
|
|
397
|
+
};
|
|
398
|
+
},
|
|
399
|
+
listMessagesToSign: async () => {
|
|
400
|
+
const messages = await store.listMessageRaws();
|
|
401
|
+
return {
|
|
402
|
+
messages: messages.map((message) => ({
|
|
403
|
+
id: message.id,
|
|
404
|
+
status: message.status,
|
|
405
|
+
partyId: message.partyId,
|
|
406
|
+
publicKey: message.publicKey,
|
|
407
|
+
message: message.message,
|
|
408
|
+
...(message.origin !== null && { origin: message.origin }),
|
|
409
|
+
...(message.createdAt && {
|
|
410
|
+
createdAt: message.createdAt.toISOString(),
|
|
411
|
+
}),
|
|
412
|
+
...(message.signedAt && {
|
|
413
|
+
signedAt: message.signedAt.toISOString(),
|
|
414
|
+
}),
|
|
415
|
+
...(message.signature && { signature: message.signature }),
|
|
416
|
+
})),
|
|
417
|
+
};
|
|
418
|
+
},
|
|
419
|
+
deleteMessageToSign: async (params) => {
|
|
420
|
+
const message = await store.getMessageRaw(params.messageId);
|
|
421
|
+
if (!message) {
|
|
422
|
+
throw new Error(`Message signing request not found with id: ${params.messageId}`);
|
|
423
|
+
}
|
|
424
|
+
if (message.status !== 'pending') {
|
|
425
|
+
throw new Error(`Cannot delete message with status '${message.status}'. Only pending messages can be deleted.`);
|
|
426
|
+
}
|
|
427
|
+
const userId = assertConnected(authContext).userId;
|
|
428
|
+
if (message.userId !== userId) {
|
|
429
|
+
throw new Error(`Message signing request ${message.id} is not owned by user ${userId}`);
|
|
430
|
+
}
|
|
431
|
+
await store.removeMessageRaw(message.id);
|
|
432
|
+
return null;
|
|
433
|
+
},
|
|
269
434
|
execute: async (executeParams) => {
|
|
270
435
|
const wallets = await store.getWallets();
|
|
271
436
|
const network = await store.getCurrentNetwork();
|
|
@@ -563,3 +728,56 @@ export const userController = (kernelInfo, userUrl, store, notificationService,
|
|
|
563
728
|
},
|
|
564
729
|
});
|
|
565
730
|
};
|
|
731
|
+
function toAuthDto(auth) {
|
|
732
|
+
const base = {
|
|
733
|
+
method: auth.method,
|
|
734
|
+
audience: auth.audience,
|
|
735
|
+
scope: auth.scope,
|
|
736
|
+
clientId: auth.clientId,
|
|
737
|
+
};
|
|
738
|
+
if (auth.method === 'self_signed') {
|
|
739
|
+
return {
|
|
740
|
+
...base,
|
|
741
|
+
issuer: auth.issuer,
|
|
742
|
+
clientSecret: auth.clientSecret,
|
|
743
|
+
};
|
|
744
|
+
}
|
|
745
|
+
if (auth.method === 'client_credentials') {
|
|
746
|
+
return {
|
|
747
|
+
...base,
|
|
748
|
+
clientSecret: auth.clientSecret,
|
|
749
|
+
};
|
|
750
|
+
}
|
|
751
|
+
return base;
|
|
752
|
+
}
|
|
753
|
+
function toNetworkDto(network) {
|
|
754
|
+
return {
|
|
755
|
+
id: network.id,
|
|
756
|
+
name: network.name,
|
|
757
|
+
description: network.description,
|
|
758
|
+
synchronizerId: network.synchronizerId,
|
|
759
|
+
identityProviderId: network.identityProviderId,
|
|
760
|
+
ledgerApi: network.ledgerApi.baseUrl,
|
|
761
|
+
auth: toAuthDto(network.auth),
|
|
762
|
+
...(network.adminAuth
|
|
763
|
+
? { adminAuth: toAuthDto(network.adminAuth) }
|
|
764
|
+
: {}),
|
|
765
|
+
};
|
|
766
|
+
}
|
|
767
|
+
function toPublicNetwork(network) {
|
|
768
|
+
const auth = network.auth;
|
|
769
|
+
return {
|
|
770
|
+
id: network.id,
|
|
771
|
+
name: network.name,
|
|
772
|
+
description: network.description,
|
|
773
|
+
synchronizerId: network.synchronizerId,
|
|
774
|
+
identityProviderId: network.identityProviderId,
|
|
775
|
+
ledgerApi: network.ledgerApi.baseUrl,
|
|
776
|
+
authMethod: auth.method,
|
|
777
|
+
...(auth.method !== 'client_credentials' && {
|
|
778
|
+
clientId: auth.clientId,
|
|
779
|
+
scope: auth.scope,
|
|
780
|
+
audience: auth.audience,
|
|
781
|
+
}),
|
|
782
|
+
};
|
|
783
|
+
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { AddNetwork } from './typings.js';
|
|
2
2
|
import { RemoveNetwork } from './typings.js';
|
|
3
3
|
import { ListNetworks } from './typings.js';
|
|
4
|
+
import { GetNetwork } from './typings.js';
|
|
5
|
+
import { SelfSignedAccessToken } from './typings.js';
|
|
4
6
|
import { AddIdp } from './typings.js';
|
|
5
7
|
import { RemoveIdp } from './typings.js';
|
|
6
8
|
import { ListIdps } from './typings.js';
|
|
@@ -12,6 +14,10 @@ import { ListWallets } from './typings.js';
|
|
|
12
14
|
import { SyncWallets } from './typings.js';
|
|
13
15
|
import { IsWalletSyncNeeded } from './typings.js';
|
|
14
16
|
import { Sign } from './typings.js';
|
|
17
|
+
import { SignMessage } from './typings.js';
|
|
18
|
+
import { GetMessageToSign } from './typings.js';
|
|
19
|
+
import { ListMessagesToSign } from './typings.js';
|
|
20
|
+
import { DeleteMessageToSign } from './typings.js';
|
|
15
21
|
import { Execute } from './typings.js';
|
|
16
22
|
import { AddSession } from './typings.js';
|
|
17
23
|
import { RemoveSession } from './typings.js';
|
|
@@ -24,6 +30,8 @@ export type Methods = {
|
|
|
24
30
|
addNetwork: AddNetwork;
|
|
25
31
|
removeNetwork: RemoveNetwork;
|
|
26
32
|
listNetworks: ListNetworks;
|
|
33
|
+
getNetwork: GetNetwork;
|
|
34
|
+
selfSignedAccessToken: SelfSignedAccessToken;
|
|
27
35
|
addIdp: AddIdp;
|
|
28
36
|
removeIdp: RemoveIdp;
|
|
29
37
|
listIdps: ListIdps;
|
|
@@ -35,6 +43,10 @@ export type Methods = {
|
|
|
35
43
|
syncWallets: SyncWallets;
|
|
36
44
|
isWalletSyncNeeded: IsWalletSyncNeeded;
|
|
37
45
|
sign: Sign;
|
|
46
|
+
signMessage: SignMessage;
|
|
47
|
+
getMessageToSign: GetMessageToSign;
|
|
48
|
+
listMessagesToSign: ListMessagesToSign;
|
|
49
|
+
deleteMessageToSign: DeleteMessageToSign;
|
|
38
50
|
execute: Execute;
|
|
39
51
|
addSession: AddSession;
|
|
40
52
|
removeSession: RemoveSession;
|
|
@@ -48,6 +60,8 @@ declare function buildController(methods: Methods): {
|
|
|
48
60
|
addNetwork: AddNetwork;
|
|
49
61
|
removeNetwork: RemoveNetwork;
|
|
50
62
|
listNetworks: ListNetworks;
|
|
63
|
+
getNetwork: GetNetwork;
|
|
64
|
+
selfSignedAccessToken: SelfSignedAccessToken;
|
|
51
65
|
addIdp: AddIdp;
|
|
52
66
|
removeIdp: RemoveIdp;
|
|
53
67
|
listIdps: ListIdps;
|
|
@@ -59,6 +73,10 @@ declare function buildController(methods: Methods): {
|
|
|
59
73
|
syncWallets: SyncWallets;
|
|
60
74
|
isWalletSyncNeeded: IsWalletSyncNeeded;
|
|
61
75
|
sign: Sign;
|
|
76
|
+
signMessage: SignMessage;
|
|
77
|
+
getMessageToSign: GetMessageToSign;
|
|
78
|
+
listMessagesToSign: ListMessagesToSign;
|
|
79
|
+
deleteMessageToSign: DeleteMessageToSign;
|
|
62
80
|
execute: Execute;
|
|
63
81
|
addSession: AddSession;
|
|
64
82
|
removeSession: RemoveSession;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/user-api/rpc-gen/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,MAAM,OAAO,GAAG;IAClB,UAAU,EAAE,UAAU,CAAA;IACtB,aAAa,EAAE,aAAa,CAAA;IAC5B,YAAY,EAAE,YAAY,CAAA;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,SAAS,CAAA;IACpB,QAAQ,EAAE,QAAQ,CAAA;IAClB,YAAY,EAAE,YAAY,CAAA;IAC1B,sBAAsB,EAAE,sBAAsB,CAAA;IAC9C,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,YAAY,EAAE,YAAY,CAAA;IAC1B,WAAW,EAAE,WAAW,CAAA;IACxB,WAAW,EAAE,WAAW,CAAA;IACxB,kBAAkB,EAAE,kBAAkB,CAAA;IACtC,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,UAAU,CAAA;IACtB,aAAa,EAAE,aAAa,CAAA;IAC5B,YAAY,EAAE,YAAY,CAAA;IAC1B,cAAc,EAAE,cAAc,CAAA;IAC9B,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,OAAO,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,iBAAS,eAAe,CAAC,OAAO,EAAE,OAAO
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/user-api/rpc-gen/index.ts"],"names":[],"mappings":"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"}
|