@openzeppelin/miden-multisig-client 0.14.6 → 0.14.9-rc.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 (60) hide show
  1. package/README.md +114 -0
  2. package/dist/index.d.ts +4 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +4 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/multisig/config.d.ts +8 -0
  7. package/dist/multisig/config.d.ts.map +1 -0
  8. package/dist/multisig/config.js +8 -0
  9. package/dist/multisig/config.js.map +1 -0
  10. package/dist/multisig/consumeNotesErrors.d.ts +48 -0
  11. package/dist/multisig/consumeNotesErrors.d.ts.map +1 -0
  12. package/dist/multisig/consumeNotesErrors.js +58 -0
  13. package/dist/multisig/consumeNotesErrors.js.map +1 -0
  14. package/dist/multisig/consumeNotesErrors.test.d.ts +2 -0
  15. package/dist/multisig/consumeNotesErrors.test.d.ts.map +1 -0
  16. package/dist/multisig/consumeNotesErrors.test.js +28 -0
  17. package/dist/multisig/consumeNotesErrors.test.js.map +1 -0
  18. package/dist/multisig/proposal/execution.js +3 -2
  19. package/dist/multisig/proposal/execution.js.map +1 -1
  20. package/dist/multisig.d.ts +28 -5
  21. package/dist/multisig.d.ts.map +1 -1
  22. package/dist/multisig.js +235 -8
  23. package/dist/multisig.js.map +1 -1
  24. package/dist/proposal/metadata.d.ts.map +1 -1
  25. package/dist/proposal/metadata.js +18 -5
  26. package/dist/proposal/metadata.js.map +1 -1
  27. package/dist/proposal/metadata.test.d.ts +2 -0
  28. package/dist/proposal/metadata.test.d.ts.map +1 -0
  29. package/dist/proposal/metadata.test.js +87 -0
  30. package/dist/proposal/metadata.test.js.map +1 -0
  31. package/dist/transaction/consumeNotes.d.ts +13 -1
  32. package/dist/transaction/consumeNotes.d.ts.map +1 -1
  33. package/dist/transaction/consumeNotes.js +30 -13
  34. package/dist/transaction/consumeNotes.js.map +1 -1
  35. package/dist/types/proposal.d.ts +26 -5
  36. package/dist/types/proposal.d.ts.map +1 -1
  37. package/dist/types/proposal.js +10 -1
  38. package/dist/types/proposal.js.map +1 -1
  39. package/dist/types/proposal.test.d.ts +2 -0
  40. package/dist/types/proposal.test.d.ts.map +1 -0
  41. package/dist/types/proposal.test.js +56 -0
  42. package/dist/types/proposal.test.js.map +1 -0
  43. package/dist/utils/encoding.d.ts +8 -0
  44. package/dist/utils/encoding.d.ts.map +1 -1
  45. package/dist/utils/encoding.js +8 -0
  46. package/dist/utils/encoding.js.map +1 -1
  47. package/package.json +2 -2
  48. package/src/index.ts +24 -0
  49. package/src/multisig/config.ts +7 -0
  50. package/src/multisig/consumeNotesErrors.test.ts +43 -0
  51. package/src/multisig/consumeNotesErrors.ts +74 -0
  52. package/src/multisig.ts +341 -12
  53. package/src/proposal/metadata.test.ts +99 -0
  54. package/src/proposal/metadata.ts +19 -6
  55. package/src/transaction/consumeNotes.ts +40 -17
  56. package/src/types/proposal.test.ts +68 -0
  57. package/src/types/proposal.ts +42 -9
  58. package/src/utils/encoding.ts +13 -0
  59. package/src/multisig/proposal/execution.ts +0 -385
  60. package/src/multisig/proposal/parser.ts +0 -191
@@ -1,191 +0,0 @@
1
- import type {
2
- DeltaObject,
3
- DeltaStatus,
4
- ProposalMetadata as GuardianProposalMetadata,
5
- } from '@openzeppelin/guardian-client';
6
- import type {
7
- ProposalMetadata,
8
- ProposalType,
9
- TransactionProposal,
10
- TransactionProposalSignature,
11
- TransactionProposalStatus,
12
- } from '../../types.js';
13
-
14
- export function buildGuardianMetadata(metadata: ProposalMetadata): GuardianProposalMetadata {
15
- const base: GuardianProposalMetadata = {
16
- proposalType: metadata.proposalType,
17
- description: metadata.description,
18
- salt: metadata.saltHex,
19
- };
20
-
21
- switch (metadata.proposalType) {
22
- case 'consume_notes':
23
- return {
24
- ...base,
25
- noteIds: metadata.noteIds,
26
- };
27
- case 'p2id':
28
- return {
29
- ...base,
30
- recipientId: metadata.recipientId,
31
- faucetId: metadata.faucetId,
32
- amount: metadata.amount,
33
- };
34
- case 'switch_guardian':
35
- return {
36
- ...base,
37
- targetThreshold: metadata.targetThreshold,
38
- signerCommitments: metadata.targetSignerCommitments,
39
- newGuardianPubkey: metadata.newGuardianPubkey,
40
- newGuardianEndpoint: metadata.newGuardianEndpoint,
41
- };
42
- case 'add_signer':
43
- case 'remove_signer':
44
- case 'change_threshold':
45
- return {
46
- ...base,
47
- targetThreshold: metadata.targetThreshold,
48
- signerCommitments: metadata.targetSignerCommitments,
49
- };
50
- case 'unknown':
51
- return base;
52
- default:
53
- return base;
54
- }
55
- }
56
-
57
- export function fromGuardianMetadata(guardian: GuardianProposalMetadata): ProposalMetadata | undefined {
58
- if (!guardian.proposalType) return undefined;
59
-
60
- const base = {
61
- description: guardian.description ?? '',
62
- saltHex: guardian.salt,
63
- };
64
-
65
- switch (guardian.proposalType) {
66
- case 'p2id':
67
- return {
68
- ...base,
69
- proposalType: 'p2id',
70
- recipientId: guardian.recipientId ?? '',
71
- faucetId: guardian.faucetId ?? '',
72
- amount: guardian.amount ?? '0',
73
- };
74
- case 'consume_notes':
75
- return {
76
- ...base,
77
- proposalType: 'consume_notes',
78
- noteIds: guardian.noteIds ?? [],
79
- };
80
- case 'switch_guardian':
81
- return {
82
- ...base,
83
- proposalType: 'switch_guardian',
84
- newGuardianPubkey: guardian.newGuardianPubkey ?? '',
85
- newGuardianEndpoint: guardian.newGuardianEndpoint,
86
- targetThreshold: guardian.targetThreshold,
87
- targetSignerCommitments: guardian.signerCommitments,
88
- };
89
- case 'add_signer':
90
- case 'remove_signer':
91
- case 'change_threshold':
92
- return {
93
- ...base,
94
- proposalType: guardian.proposalType,
95
- targetThreshold: guardian.targetThreshold ?? 0,
96
- targetSignerCommitments: guardian.signerCommitments ?? [],
97
- };
98
- default:
99
- return undefined;
100
- }
101
- }
102
-
103
- export function deltaStatusToProposalStatus(
104
- status: DeltaStatus,
105
- signaturesRequired: number,
106
- ): TransactionProposalStatus {
107
- switch (status.status) {
108
- case 'pending': {
109
- const signaturesCollected = status.cosignerSigs.length;
110
- if (signaturesCollected >= signaturesRequired) {
111
- return { type: 'ready' };
112
- }
113
- return {
114
- type: 'pending',
115
- signaturesCollected,
116
- signaturesRequired,
117
- signers: status.cosignerSigs.map((s) => s.signerId),
118
- };
119
- }
120
- case 'candidate':
121
- return { type: 'ready' };
122
- case 'canonical':
123
- case 'discarded':
124
- return { type: 'finalized' };
125
- }
126
- }
127
-
128
- interface DeltaToProposalParams {
129
- delta: DeltaObject;
130
- proposalId: string;
131
- metadata: ProposalMetadata;
132
- signaturesRequired: number;
133
- existingSignatures?: TransactionProposalSignature[];
134
- }
135
-
136
- export function deltaToProposal({
137
- delta,
138
- proposalId,
139
- metadata,
140
- signaturesRequired,
141
- existingSignatures,
142
- }: DeltaToProposalParams): TransactionProposal {
143
- const status = deltaStatusToProposalStatus(delta.status, signaturesRequired);
144
-
145
- const signaturesFromStatus =
146
- delta.status.status === 'pending'
147
- ? delta.status.cosignerSigs.map((s) => ({
148
- signerId: s.signerId,
149
- signature: s.signature,
150
- timestamp: s.timestamp,
151
- }))
152
- : [];
153
-
154
- const signaturesMap = new Map<string, TransactionProposalSignature>();
155
- for (const sig of existingSignatures ?? []) {
156
- signaturesMap.set(sig.signerId, sig);
157
- }
158
- for (const sig of signaturesFromStatus) {
159
- signaturesMap.set(sig.signerId, sig);
160
- }
161
- const signatures = Array.from(signaturesMap.values());
162
-
163
- return {
164
- id: proposalId,
165
- commitment: proposalId,
166
- accountId: delta.accountId,
167
- nonce: delta.nonce,
168
- status,
169
- txSummary: delta.deltaPayload.txSummary.data,
170
- signatures,
171
- metadata,
172
- };
173
- }
174
-
175
- export function resolveMetadata(
176
- delta: DeltaObject,
177
- existingMetadata?: ProposalMetadata,
178
- ): ProposalMetadata | undefined {
179
- if (existingMetadata) return existingMetadata;
180
- if (!delta.deltaPayload.metadata) return undefined;
181
- return fromGuardianMetadata(delta.deltaPayload.metadata);
182
- }
183
-
184
- export function signatureRequirementForProposal(
185
- metadata: ProposalMetadata,
186
- defaultThreshold: number,
187
- getEffectiveThreshold: (proposalType: ProposalType) => number,
188
- ): number {
189
- if (metadata.proposalType === 'unknown') return defaultThreshold;
190
- return getEffectiveThreshold(metadata.proposalType);
191
- }