@openzeppelin/miden-multisig-client 0.12.6 → 0.12.7

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 (89) hide show
  1. package/README.md +70 -75
  2. package/dist/account/builder.d.ts +0 -18
  3. package/dist/account/builder.d.ts.map +1 -1
  4. package/dist/account/builder.js +16 -24
  5. package/dist/account/builder.js.map +1 -1
  6. package/dist/account/masm.d.ts +2 -0
  7. package/dist/account/masm.d.ts.map +1 -1
  8. package/dist/account/masm.js +428 -1
  9. package/dist/account/masm.js.map +1 -1
  10. package/dist/account/storage.d.ts.map +1 -1
  11. package/dist/account/storage.js +5 -6
  12. package/dist/account/storage.js.map +1 -1
  13. package/dist/client.d.ts +5 -57
  14. package/dist/client.d.ts.map +1 -1
  15. package/dist/client.js +7 -53
  16. package/dist/client.js.map +1 -1
  17. package/dist/client.test.js +28 -0
  18. package/dist/client.test.js.map +1 -1
  19. package/dist/index.d.ts +3 -46
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +2 -45
  22. package/dist/index.js.map +1 -1
  23. package/dist/inspector.d.ts +4 -30
  24. package/dist/inspector.d.ts.map +1 -1
  25. package/dist/inspector.js +13 -43
  26. package/dist/inspector.js.map +1 -1
  27. package/dist/multisig/helpers.d.ts.map +1 -1
  28. package/dist/multisig/helpers.js.map +1 -1
  29. package/dist/multisig.d.ts +39 -161
  30. package/dist/multisig.d.ts.map +1 -1
  31. package/dist/multisig.js +190 -241
  32. package/dist/multisig.js.map +1 -1
  33. package/dist/multisig.test.js +41 -31
  34. package/dist/multisig.test.js.map +1 -1
  35. package/dist/procedures.d.ts +20 -47
  36. package/dist/procedures.d.ts.map +1 -1
  37. package/dist/procedures.js +17 -50
  38. package/dist/procedures.js.map +1 -1
  39. package/dist/signer.d.ts +11 -26
  40. package/dist/signer.d.ts.map +1 -1
  41. package/dist/signer.js +41 -26
  42. package/dist/signer.js.map +1 -1
  43. package/dist/transaction/options.d.ts +2 -0
  44. package/dist/transaction/options.d.ts.map +1 -1
  45. package/dist/transaction/updatePsm.d.ts.map +1 -1
  46. package/dist/transaction/updatePsm.js +21 -3
  47. package/dist/transaction/updatePsm.js.map +1 -1
  48. package/dist/transaction/updateSigners.d.ts.map +1 -1
  49. package/dist/transaction/updateSigners.js +21 -3
  50. package/dist/transaction/updateSigners.js.map +1 -1
  51. package/dist/transaction.d.ts.map +1 -1
  52. package/dist/transaction.js +0 -2
  53. package/dist/transaction.js.map +1 -1
  54. package/dist/transaction.test.js +5 -0
  55. package/dist/transaction.test.js.map +1 -1
  56. package/dist/types/proposal.d.ts +16 -8
  57. package/dist/types/proposal.d.ts.map +1 -1
  58. package/dist/types.d.ts +18 -14
  59. package/dist/types.d.ts.map +1 -1
  60. package/dist/utils/signature.d.ts +10 -2
  61. package/dist/utils/signature.d.ts.map +1 -1
  62. package/dist/utils/signature.js +77 -5
  63. package/dist/utils/signature.js.map +1 -1
  64. package/dist/utils/signature.test.js +16 -1
  65. package/dist/utils/signature.test.js.map +1 -1
  66. package/masm/multisig_ecdsa.masm +424 -0
  67. package/masm/psm_ecdsa.masm +179 -0
  68. package/package.json +2 -2
  69. package/src/account/builder.ts +18 -25
  70. package/src/account/masm.ts +433 -2
  71. package/src/account/storage.ts +5 -6
  72. package/src/client.test.ts +36 -0
  73. package/src/client.ts +10 -59
  74. package/src/index.ts +13 -62
  75. package/src/inspector.ts +15 -44
  76. package/src/multisig/helpers.ts +1 -2
  77. package/src/multisig.test.ts +45 -34
  78. package/src/multisig.ts +246 -273
  79. package/src/procedures.ts +21 -56
  80. package/src/signer.ts +48 -28
  81. package/src/transaction/options.ts +2 -0
  82. package/src/transaction/updatePsm.ts +24 -3
  83. package/src/transaction/updateSigners.ts +25 -3
  84. package/src/transaction.test.ts +6 -0
  85. package/src/transaction.ts +0 -2
  86. package/src/types/proposal.ts +15 -8
  87. package/src/types.ts +26 -16
  88. package/src/utils/signature.test.ts +24 -1
  89. package/src/utils/signature.ts +86 -4
@@ -1,196 +1,74 @@
1
- /**
2
- * Multisig class representing a created or loaded multisig account.
3
- *
4
- * This class wraps a Miden SDK Account and provides PSM integration
5
- * for proposal management.
6
- */
7
1
  import { PsmHttpClient, type Signer } from '@openzeppelin/psm-client';
8
- import type { ConsumableNote, ExportedProposal, MultisigConfig, Proposal, ProposalMetadata, ProposalType } from './types.js';
2
+ import type { ConsumableNote, MultisigConfig, TransactionProposal, ProposalMetadata, ProposalType, SignTransactionProposalParams, SyncResult, TransactionProposalResult } from './types.js';
9
3
  import type { ProcedureName } from './procedures.js';
4
+ import { type DetectedMultisigConfig } from './inspector.js';
10
5
  import type { WebClient } from '@demox-labs/miden-sdk';
11
6
  import { Account } from '@demox-labs/miden-sdk';
12
- /**
13
- * Result of fetching account state from PSM.
14
- */
15
7
  export interface AccountState {
16
- /** Account ID */
17
8
  accountId: string;
18
- /** Current commitment */
19
9
  commitment: string;
20
- /** Raw state data (base64-encoded serialized account) */
21
10
  stateDataBase64: string;
22
11
  createdAt: string;
23
12
  updatedAt: string;
13
+ authScheme?: string;
24
14
  }
25
- /**
26
- * Represents a multisig account with PSM integration.
27
- */
28
15
  export declare class Multisig {
29
16
  readonly account: Account | null;
30
17
  readonly threshold: number;
31
18
  readonly signerCommitments: string[];
32
19
  readonly psmCommitment: string;
20
+ psmPublicKey?: string;
33
21
  readonly procedureThresholds: Map<ProcedureName, number>;
22
+ readonly signatureScheme: Signer['scheme'];
34
23
  private psm;
35
24
  private readonly signer;
36
25
  private readonly webClient;
37
26
  private readonly _accountId;
38
27
  private proposals;
39
28
  constructor(account: Account | null, config: MultisigConfig, psm: PsmHttpClient, signer: Signer, webClient: WebClient, accountId?: string);
40
- /** The account ID as a string */
41
29
  get accountId(): string;
42
- /** The signer's commitment */
43
30
  get signerCommitment(): string;
44
- /**
45
- * Maps a proposal type to the procedure that determines its threshold.
46
- */
31
+ setPsmPublicKey(pubkey?: string): void;
47
32
  private getProposalProcedure;
48
- /**
49
- * Get the effective threshold for a given proposal type.
50
- * Returns the procedure-specific threshold if configured, otherwise the default threshold.
51
- *
52
- * @param proposalType - The type of proposal
53
- * @returns The threshold that applies to this proposal type
54
- */
55
33
  getEffectiveThreshold(proposalType: ProposalType): number;
56
- /**
57
- * Update the PSM client used by this Multisig instance.
58
- *
59
- * @param psmClient - The new PSM HTTP client
60
- */
61
34
  setPsmClient(psmClient: PsmHttpClient): void;
62
- /**
63
- * Fetch the current account state from PSM.
64
- *
65
- * @returns The account state including commitment and serialized data
66
- */
67
35
  fetchState(): Promise<AccountState>;
68
- /**
69
- * Sync account state from PSM into the local WebClient store.
70
- *
71
- * If the PSM commitment differs from the local commitment (or the account
72
- * is missing locally), the local store is overwritten with the PSM state.
73
- */
74
36
  syncState(): Promise<AccountState>;
75
- /**
76
- * Register this multisig account on the PSM server.
77
- *
78
- * The initial state must be the serialized Account bytes (base64-encoded).
79
- * If not provided, the account's serialize() method is used.
80
- *
81
- * @param initialStateBase64 - Optional base64-encoded serialized Account.¡
82
- */
83
37
  registerOnPsm(initialStateBase64?: string): Promise<void>;
84
- /**
85
- * Sync proposals from the PSM server.
86
- */
87
- syncProposals(): Promise<Proposal[]>;
88
- /**
89
- * List all known proposals
90
- */
91
- listProposals(): Proposal[];
92
- /**
93
- * Create a new proposal.
94
- *
95
- * @param nonce - The nonce for this transaction
96
- * @param txSummaryBase64 - Base64-encoded transaction summary
97
- * @param metadata - Optional metadata for execution (target config, salt, etc.)
98
- */
99
- createProposal(nonce: number, txSummaryBase64: string, metadata: ProposalMetadata): Promise<Proposal>;
100
- /**
101
- * Create an "add signer" proposal.
102
- *
103
- * @param newCommitment - Commitment of the new signer (hex)
104
- * @param nonce - Optional proposal nonce (defaults to Date.now())
105
- * @param newThreshold - Optional new threshold (defaults to current threshold)
106
- */
107
- createAddSignerProposal(newCommitment: string, nonce?: number, newThreshold?: number): Promise<Proposal>;
108
- /**
109
- * Create a "remove signer" proposal by executing the update_signers script to summary.
110
- *
111
- * @param signerToRemove - Commitment of the signer to remove (hex)
112
- * @param nonce - Optional proposal nonce (defaults to Date.now())
113
- * @param newThreshold - Optional new threshold (defaults to min of current threshold and new signer count)
114
- */
115
- createRemoveSignerProposal(signerToRemove: string, nonce?: number, newThreshold?: number): Promise<Proposal>;
116
- /**
117
- * Create a "change threshold" proposal.
118
- *
119
- * @param newThreshold - The new threshold value
120
- * @param nonce - Optional proposal nonce (defaults to Date.now())
121
- */
122
- createChangeThresholdProposal(newThreshold: number, nonce?: number): Promise<Proposal>;
123
- /**
124
- * Create a "switch PSM" proposal to change the PSM provider.
125
- *
126
- * @param newPsmEndpoint - The new PSM server endpoint URL
127
- * @param newPsmPubkey - The new PSM server's public key commitment (hex)
128
- * @param nonce - Optional proposal nonce (defaults to Date.now())
129
- */
130
- createSwitchPsmProposal(newPsmEndpoint: string, newPsmPubkey: string, nonce?: number): Promise<Proposal>;
131
- /**
132
- * Create a "consume notes" proposal to consume notes sent to the multisig account.
133
- *
134
- * @param noteIds - IDs of the notes to consume (hex strings)
135
- * @param nonce - Optional proposal nonce (defaults to Date.now())
136
- */
137
- createConsumeNotesProposal(noteIds: string[], nonce?: number): Promise<Proposal>;
138
- /**
139
- * Create a P2ID proposal to send funds to another account.
140
- *
141
- * @param recipientId - Account ID of the recipient (hex string)
142
- * @param faucetId - Faucet/token account ID (hex string)
143
- * @param amount - Amount to send
144
- * @param nonce - Optional proposal nonce (defaults to Date.now())
145
- */
146
- createP2idProposal(recipientId: string, faucetId: string, amount: bigint, nonce?: number): Promise<Proposal>;
147
- /**
148
- * Get notes that can be consumed by this multisig account.
149
- *
150
- * Returns a list of notes that are committed on-chain and can be consumed
151
- * immediately by the multisig account.
152
- */
38
+ syncAll(): Promise<SyncResult>;
39
+ getAccountConfig(): Promise<DetectedMultisigConfig>;
40
+ switchPsm(psmClient: PsmHttpClient): Promise<void>;
41
+ syncTransactionProposals(): Promise<TransactionProposal[]>;
42
+ listTransactionProposals(): TransactionProposal[];
43
+ createProposal(nonce: number, txSummaryBase64: string, metadata: ProposalMetadata): Promise<TransactionProposal>;
44
+ createAddSignerProposal(newCommitment: string, options?: {
45
+ nonce?: number;
46
+ newThreshold?: number;
47
+ }): Promise<TransactionProposalResult>;
48
+ createRemoveSignerProposal(signerToRemove: string, options?: {
49
+ nonce?: number;
50
+ newThreshold?: number;
51
+ }): Promise<TransactionProposalResult>;
52
+ createChangeThresholdProposal(newThreshold: number, options?: {
53
+ nonce?: number;
54
+ }): Promise<TransactionProposalResult>;
55
+ createSwitchPsmProposal(newPsmEndpoint: string, newPsmPubkey: string, options?: {
56
+ nonce?: number;
57
+ }): Promise<TransactionProposalResult>;
58
+ createConsumeNotesProposal(noteIds: string[], options?: {
59
+ nonce?: number;
60
+ }): Promise<TransactionProposalResult>;
61
+ createSendProposal(recipientId: string, faucetId: string, amount: bigint, options?: {
62
+ nonce?: number;
63
+ }): Promise<TransactionProposalResult>;
153
64
  getConsumableNotes(): Promise<ConsumableNote[]>;
154
- /**
155
- * Sign a proposal.
156
- *
157
- * The proposalId is the tx_summary commitment hex, which is what gets signed.
158
- * This matches the Rust client behavior where proposal.id == tx_summary.to_commitment().
159
- *
160
- * @param proposalId - The proposal commitment/ID (this is also what gets signed)
161
- */
162
- signProposal(proposalId: string): Promise<Proposal>;
163
- /**
164
- * Execute a proposal that has enough signatures.
165
- *
166
- * @param proposalId - The proposal commitment/ID
167
- */
168
- executeProposal(proposalId: string): Promise<void>;
169
- /**
170
- * Export a proposal for offline signing
171
- */
172
- exportProposal(proposalId: string): Promise<ExportedProposal>;
173
- /**
174
- * Export a proposal to JSON for side-channel sharing.
175
- *
176
- * @param proposalId - The proposal commitment/ID
177
- * @returns JSON string that can be shared and imported by other signers
178
- */
179
- exportProposalToJson(proposalId: string): string;
180
- /**
181
- * Import a proposal from JSON (exported via exportProposalToJson).
182
- *
183
- * @param json - JSON string from exportProposalToJson
184
- * @returns The imported proposal
185
- */
186
- importProposal(json: string): Proposal;
187
- /**
188
- * Sign an imported proposal and return updated JSON for sharing..
189
- *
190
- * @param proposalId - The proposal commitment/ID
191
- * @returns Updated JSON string with the new signature included
192
- */
193
- signProposalOffline(proposalId: string): string;
65
+ signTransactionProposal(commitment: string): Promise<TransactionProposal[]>;
66
+ signTransactionProposalExternal(params: SignTransactionProposalParams): Promise<TransactionProposal[]>;
67
+ executeTransactionProposal(commitment: string): Promise<void>;
68
+ exportTransactionProposalToJson(commitment: string): string;
69
+ importTransactionProposal(json: string): TransactionProposalResult;
70
+ signTransactionProposalOffline(commitment: string): string;
71
+ private syncAfterCreate;
194
72
  private deltaToProposal;
195
73
  private buildPsmMetadata;
196
74
  private fromPsmMetadata;
@@ -1 +1 @@
1
- {"version":3,"file":"multisig.d.ts","sourceRoot":"","sources":["../src/multisig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"multisig.d.ts","sourceRoot":"","sources":["../src/multisig.ts"],"names":[],"mappings":"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"}