@openzeppelin/miden-multisig-client 0.12.6

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 (215) hide show
  1. package/README.md +189 -0
  2. package/dist/account/builder.d.ts +23 -0
  3. package/dist/account/builder.d.ts.map +1 -0
  4. package/dist/account/builder.js +85 -0
  5. package/dist/account/builder.js.map +1 -0
  6. package/dist/account/index.d.ts +6 -0
  7. package/dist/account/index.d.ts.map +1 -0
  8. package/dist/account/index.js +6 -0
  9. package/dist/account/index.js.map +1 -0
  10. package/dist/account/masm.d.ts +3 -0
  11. package/dist/account/masm.d.ts.map +1 -0
  12. package/dist/account/masm.js +605 -0
  13. package/dist/account/masm.js.map +1 -0
  14. package/dist/account/storage.d.ts +10 -0
  15. package/dist/account/storage.d.ts.map +1 -0
  16. package/dist/account/storage.js +56 -0
  17. package/dist/account/storage.js.map +1 -0
  18. package/dist/account.d.ts +104 -0
  19. package/dist/account.d.ts.map +1 -0
  20. package/dist/account.js +136 -0
  21. package/dist/account.js.map +1 -0
  22. package/dist/builder.d.ts +54 -0
  23. package/dist/builder.d.ts.map +1 -0
  24. package/dist/builder.js +78 -0
  25. package/dist/builder.js.map +1 -0
  26. package/dist/client.d.ts +73 -0
  27. package/dist/client.d.ts.map +1 -0
  28. package/dist/client.js +104 -0
  29. package/dist/client.js.map +1 -0
  30. package/dist/client.test.d.ts +2 -0
  31. package/dist/client.test.d.ts.map +1 -0
  32. package/dist/client.test.js +150 -0
  33. package/dist/client.test.js.map +1 -0
  34. package/dist/http.d.ts +64 -0
  35. package/dist/http.d.ts.map +1 -0
  36. package/dist/http.js +162 -0
  37. package/dist/http.js.map +1 -0
  38. package/dist/index.d.ts +53 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +52 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/inspector.d.ts +49 -0
  43. package/dist/inspector.d.ts.map +1 -0
  44. package/dist/inspector.js +120 -0
  45. package/dist/inspector.js.map +1 -0
  46. package/dist/inspector.test.d.ts +2 -0
  47. package/dist/inspector.test.d.ts.map +1 -0
  48. package/dist/inspector.test.js +205 -0
  49. package/dist/inspector.test.js.map +1 -0
  50. package/dist/keystore.d.ts +65 -0
  51. package/dist/keystore.d.ts.map +1 -0
  52. package/dist/keystore.js +121 -0
  53. package/dist/keystore.js.map +1 -0
  54. package/dist/miden.d.ts +9 -0
  55. package/dist/miden.d.ts.map +1 -0
  56. package/dist/miden.js +26 -0
  57. package/dist/miden.js.map +1 -0
  58. package/dist/multisig/helpers.d.ts +4 -0
  59. package/dist/multisig/helpers.d.ts.map +1 -0
  60. package/dist/multisig/helpers.js +21 -0
  61. package/dist/multisig/helpers.js.map +1 -0
  62. package/dist/multisig/helpers.test.d.ts +2 -0
  63. package/dist/multisig/helpers.test.d.ts.map +1 -0
  64. package/dist/multisig/helpers.test.js +94 -0
  65. package/dist/multisig/helpers.test.js.map +1 -0
  66. package/dist/multisig/metadata.d.ts +18 -0
  67. package/dist/multisig/metadata.d.ts.map +1 -0
  68. package/dist/multisig/metadata.js +100 -0
  69. package/dist/multisig/metadata.js.map +1 -0
  70. package/dist/multisig/metadata.test.d.ts +2 -0
  71. package/dist/multisig/metadata.test.d.ts.map +1 -0
  72. package/dist/multisig/metadata.test.js +323 -0
  73. package/dist/multisig/metadata.test.js.map +1 -0
  74. package/dist/multisig.d.ts +199 -0
  75. package/dist/multisig.d.ts.map +1 -0
  76. package/dist/multisig.js +821 -0
  77. package/dist/multisig.js.map +1 -0
  78. package/dist/multisig.test.d.ts +2 -0
  79. package/dist/multisig.test.d.ts.map +1 -0
  80. package/dist/multisig.test.js +1121 -0
  81. package/dist/multisig.test.js.map +1 -0
  82. package/dist/procedures.d.ts +57 -0
  83. package/dist/procedures.d.ts.map +1 -0
  84. package/dist/procedures.js +62 -0
  85. package/dist/procedures.js.map +1 -0
  86. package/dist/signer.d.ts +36 -0
  87. package/dist/signer.d.ts.map +1 -0
  88. package/dist/signer.js +68 -0
  89. package/dist/signer.js.map +1 -0
  90. package/dist/signer.test.d.ts +2 -0
  91. package/dist/signer.test.d.ts.map +1 -0
  92. package/dist/signer.test.js +117 -0
  93. package/dist/signer.test.js.map +1 -0
  94. package/dist/transaction/consumeNotes.d.ts +7 -0
  95. package/dist/transaction/consumeNotes.d.ts.map +1 -0
  96. package/dist/transaction/consumeNotes.js +28 -0
  97. package/dist/transaction/consumeNotes.js.map +1 -0
  98. package/dist/transaction/index.d.ts +7 -0
  99. package/dist/transaction/index.d.ts.map +1 -0
  100. package/dist/transaction/index.js +6 -0
  101. package/dist/transaction/index.js.map +1 -0
  102. package/dist/transaction/options.d.ts +6 -0
  103. package/dist/transaction/options.d.ts.map +1 -0
  104. package/dist/transaction/options.js +2 -0
  105. package/dist/transaction/options.js.map +1 -0
  106. package/dist/transaction/p2id.d.ts +7 -0
  107. package/dist/transaction/p2id.d.ts.map +1 -0
  108. package/dist/transaction/p2id.js +43 -0
  109. package/dist/transaction/p2id.js.map +1 -0
  110. package/dist/transaction/summary.d.ts +3 -0
  111. package/dist/transaction/summary.d.ts.map +1 -0
  112. package/dist/transaction/summary.js +6 -0
  113. package/dist/transaction/summary.js.map +1 -0
  114. package/dist/transaction/updatePsm.d.ts +7 -0
  115. package/dist/transaction/updatePsm.d.ts.map +1 -0
  116. package/dist/transaction/updatePsm.js +43 -0
  117. package/dist/transaction/updatePsm.js.map +1 -0
  118. package/dist/transaction/updateSigners.d.ts +8 -0
  119. package/dist/transaction/updateSigners.d.ts.map +1 -0
  120. package/dist/transaction/updateSigners.js +60 -0
  121. package/dist/transaction/updateSigners.js.map +1 -0
  122. package/dist/transaction.d.ts +6 -0
  123. package/dist/transaction.d.ts.map +1 -0
  124. package/dist/transaction.js +8 -0
  125. package/dist/transaction.js.map +1 -0
  126. package/dist/transaction.test.d.ts +2 -0
  127. package/dist/transaction.test.d.ts.map +1 -0
  128. package/dist/transaction.test.js +117 -0
  129. package/dist/transaction.test.js.map +1 -0
  130. package/dist/transport/http.d.ts +64 -0
  131. package/dist/transport/http.d.ts.map +1 -0
  132. package/dist/transport/http.js +162 -0
  133. package/dist/transport/http.js.map +1 -0
  134. package/dist/transport/index.d.ts +5 -0
  135. package/dist/transport/index.d.ts.map +1 -0
  136. package/dist/transport/index.js +5 -0
  137. package/dist/transport/index.js.map +1 -0
  138. package/dist/types/proposal.d.ts +74 -0
  139. package/dist/types/proposal.d.ts.map +1 -0
  140. package/dist/types/proposal.js +2 -0
  141. package/dist/types/proposal.js.map +1 -0
  142. package/dist/types.d.ts +60 -0
  143. package/dist/types.d.ts.map +1 -0
  144. package/dist/types.js +2 -0
  145. package/dist/types.js.map +1 -0
  146. package/dist/utils/encoding.d.ts +7 -0
  147. package/dist/utils/encoding.d.ts.map +1 -0
  148. package/dist/utils/encoding.js +54 -0
  149. package/dist/utils/encoding.js.map +1 -0
  150. package/dist/utils/encoding.test.d.ts +2 -0
  151. package/dist/utils/encoding.test.d.ts.map +1 -0
  152. package/dist/utils/encoding.test.js +185 -0
  153. package/dist/utils/encoding.test.js.map +1 -0
  154. package/dist/utils/index.d.ts +5 -0
  155. package/dist/utils/index.d.ts.map +1 -0
  156. package/dist/utils/index.js +5 -0
  157. package/dist/utils/index.js.map +1 -0
  158. package/dist/utils/random.d.ts +3 -0
  159. package/dist/utils/random.d.ts.map +1 -0
  160. package/dist/utils/random.js +14 -0
  161. package/dist/utils/random.js.map +1 -0
  162. package/dist/utils/signature.d.ts +12 -0
  163. package/dist/utils/signature.d.ts.map +1 -0
  164. package/dist/utils/signature.js +28 -0
  165. package/dist/utils/signature.js.map +1 -0
  166. package/dist/utils/signature.test.d.ts +2 -0
  167. package/dist/utils/signature.test.d.ts.map +1 -0
  168. package/dist/utils/signature.test.js +149 -0
  169. package/dist/utils/signature.test.js.map +1 -0
  170. package/dist/utils/word.d.ts +4 -0
  171. package/dist/utils/word.d.ts.map +1 -0
  172. package/dist/utils/word.js +8 -0
  173. package/dist/utils/word.js.map +1 -0
  174. package/dist/utils/word.test.d.ts +2 -0
  175. package/dist/utils/word.test.d.ts.map +1 -0
  176. package/dist/utils/word.test.js +54 -0
  177. package/dist/utils/word.test.js.map +1 -0
  178. package/masm/multisig.masm +423 -0
  179. package/masm/psm.masm +178 -0
  180. package/package.json +42 -0
  181. package/src/account/builder.ts +112 -0
  182. package/src/account/index.ts +15 -0
  183. package/src/account/masm.ts +606 -0
  184. package/src/account/storage.ts +70 -0
  185. package/src/client.test.ts +177 -0
  186. package/src/client.ts +129 -0
  187. package/src/index.ts +118 -0
  188. package/src/inspector.test.ts +237 -0
  189. package/src/inspector.ts +142 -0
  190. package/src/multisig/helpers.test.ts +114 -0
  191. package/src/multisig/helpers.ts +23 -0
  192. package/src/multisig.test.ts +1294 -0
  193. package/src/multisig.ts +1097 -0
  194. package/src/procedures.ts +72 -0
  195. package/src/signer.test.ts +135 -0
  196. package/src/signer.ts +75 -0
  197. package/src/transaction/consumeNotes.ts +41 -0
  198. package/src/transaction/index.ts +7 -0
  199. package/src/transaction/options.ts +7 -0
  200. package/src/transaction/p2id.ts +105 -0
  201. package/src/transaction/summary.ts +12 -0
  202. package/src/transaction/updatePsm.ts +69 -0
  203. package/src/transaction/updateSigners.ts +96 -0
  204. package/src/transaction.test.ts +136 -0
  205. package/src/transaction.ts +16 -0
  206. package/src/types/proposal.ts +80 -0
  207. package/src/types.ts +81 -0
  208. package/src/utils/encoding.test.ts +233 -0
  209. package/src/utils/encoding.ts +60 -0
  210. package/src/utils/index.ts +5 -0
  211. package/src/utils/random.ts +15 -0
  212. package/src/utils/signature.test.ts +187 -0
  213. package/src/utils/signature.ts +36 -0
  214. package/src/utils/word.test.ts +64 -0
  215. package/src/utils/word.ts +11 -0
@@ -0,0 +1,94 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { computeCommitmentFromTxSummary, accountIdToHex } from './helpers.js';
3
+ vi.mock('@demox-labs/miden-sdk', () => ({
4
+ Account: {},
5
+ TransactionSummary: {
6
+ deserialize: vi.fn((bytes) => ({
7
+ toCommitment: () => ({
8
+ toHex: () => '0x' + 'c'.repeat(64),
9
+ }),
10
+ })),
11
+ },
12
+ Word: {},
13
+ }));
14
+ describe('multisig helpers', () => {
15
+ beforeEach(() => {
16
+ vi.clearAllMocks();
17
+ });
18
+ describe('computeCommitmentFromTxSummary', () => {
19
+ it('computes commitment from base64 tx summary', async () => {
20
+ const base64 = btoa(String.fromCharCode(...new Uint8Array([1, 2, 3])));
21
+ const commitment = computeCommitmentFromTxSummary(base64);
22
+ expect(commitment).toBe('0x' + 'c'.repeat(64));
23
+ });
24
+ it('deserializes the tx summary bytes', async () => {
25
+ const { TransactionSummary } = await import('@demox-labs/miden-sdk');
26
+ const base64 = btoa(String.fromCharCode(...new Uint8Array([4, 5, 6])));
27
+ computeCommitmentFromTxSummary(base64);
28
+ expect(TransactionSummary.deserialize).toHaveBeenCalledWith(new Uint8Array([4, 5, 6]));
29
+ });
30
+ it('returns hex string with 0x prefix', () => {
31
+ const base64 = btoa(String.fromCharCode(...new Uint8Array([1])));
32
+ const commitment = computeCommitmentFromTxSummary(base64);
33
+ expect(commitment.startsWith('0x')).toBe(true);
34
+ });
35
+ });
36
+ describe('accountIdToHex', () => {
37
+ it('returns account ID string if already hex formatted', () => {
38
+ const mockAccount = {
39
+ id: () => ({
40
+ toString: () => '0xabc123',
41
+ prefix: () => ({ asInt: () => BigInt(1) }),
42
+ suffix: () => ({ asInt: () => BigInt(2) }),
43
+ }),
44
+ };
45
+ const hex = accountIdToHex(mockAccount);
46
+ expect(hex).toBe('0xabc123');
47
+ });
48
+ it('handles 0X prefix', () => {
49
+ const mockAccount = {
50
+ id: () => ({
51
+ toString: () => '0Xabc123',
52
+ prefix: () => ({ asInt: () => BigInt(1) }),
53
+ suffix: () => ({ asInt: () => BigInt(2) }),
54
+ }),
55
+ };
56
+ const hex = accountIdToHex(mockAccount);
57
+ expect(hex).toBe('0Xabc123');
58
+ });
59
+ it('constructs hex from prefix and suffix if no 0x prefix', () => {
60
+ const mockAccount = {
61
+ id: () => ({
62
+ toString: () => 'not-a-hex',
63
+ prefix: () => ({ asInt: () => BigInt('0x0102030405060708') }),
64
+ suffix: () => ({ asInt: () => BigInt('0x0a0b0c0d0e0f1011') }),
65
+ }),
66
+ };
67
+ const hex = accountIdToHex(mockAccount);
68
+ expect(hex).toBe('0x01020304050607080a0b0c0d0e0f10');
69
+ });
70
+ it('pads prefix to 16 hex characters', () => {
71
+ const mockAccount = {
72
+ id: () => ({
73
+ toString: () => 'not-a-hex',
74
+ prefix: () => ({ asInt: () => BigInt(1) }),
75
+ suffix: () => ({ asInt: () => BigInt(0) }),
76
+ }),
77
+ };
78
+ const hex = accountIdToHex(mockAccount);
79
+ expect(hex).toBe('0x000000000000000100000000000000');
80
+ });
81
+ it('produces 30-character hex (excluding 0x prefix)', () => {
82
+ const mockAccount = {
83
+ id: () => ({
84
+ toString: () => 'not-a-hex',
85
+ prefix: () => ({ asInt: () => BigInt('0xffffffffffffffff') }),
86
+ suffix: () => ({ asInt: () => BigInt('0xffffffffffffffff') }),
87
+ }),
88
+ };
89
+ const hex = accountIdToHex(mockAccount);
90
+ expect(hex.length).toBe(32);
91
+ });
92
+ });
93
+ });
94
+ //# sourceMappingURL=helpers.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.test.js","sourceRoot":"","sources":["../../src/multisig/helpers.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { ProposalMetadata } from '../types.js';
2
+ type RawPsmMetadata = {
3
+ proposalType?: string;
4
+ targetThreshold?: number;
5
+ targetSignerCommitments?: string[];
6
+ saltHex?: string;
7
+ description?: string;
8
+ newPsmPubkey?: string;
9
+ newPsmEndpoint?: string;
10
+ noteIds?: string[];
11
+ recipientId?: string;
12
+ faucetId?: string;
13
+ amount?: string;
14
+ } | undefined;
15
+ export declare function fromPsmMetadata(raw: RawPsmMetadata): ProposalMetadata | undefined;
16
+ export declare function toPsmMetadata(metadata?: ProposalMetadata): Record<string, unknown> | undefined;
17
+ export {};
18
+ //# sourceMappingURL=metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/multisig/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAgB,MAAM,aAAa,CAAC;AAElE,KAAK,cAAc,GACf;IACE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACD,SAAS,CAAC;AAiBd,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,gBAAgB,GAAG,SAAS,CA8CjF;AAED,wBAAgB,aAAa,CAAC,QAAQ,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAoC9F"}
@@ -0,0 +1,100 @@
1
+ const VALID_TYPES = ['add_signer', 'remove_signer', 'change_threshold', 'switch_psm', 'consume_notes', 'p2id'];
2
+ const inferProposalType = (raw) => {
3
+ if (!raw)
4
+ return undefined;
5
+ const explicitType = raw.proposalType;
6
+ if (explicitType && VALID_TYPES.includes(explicitType)) {
7
+ return explicitType;
8
+ }
9
+ if (raw.recipientId || raw.faucetId || raw.amount)
10
+ return 'p2id';
11
+ if (raw.noteIds && raw.noteIds.length > 0)
12
+ return 'consume_notes';
13
+ if (raw.newPsmPubkey)
14
+ return 'switch_psm';
15
+ if (raw.targetSignerCommitments)
16
+ return 'change_threshold';
17
+ return undefined;
18
+ };
19
+ export function fromPsmMetadata(raw) {
20
+ if (!raw)
21
+ return undefined;
22
+ const proposalType = inferProposalType(raw);
23
+ if (!proposalType)
24
+ return undefined;
25
+ if (proposalType === 'p2id') {
26
+ return {
27
+ proposalType,
28
+ description: raw.description ?? '',
29
+ saltHex: raw.saltHex,
30
+ recipientId: raw.recipientId ?? '',
31
+ faucetId: raw.faucetId ?? '',
32
+ amount: raw.amount ?? '0',
33
+ };
34
+ }
35
+ if (proposalType === 'consume_notes') {
36
+ return {
37
+ proposalType,
38
+ description: raw.description ?? '',
39
+ saltHex: raw.saltHex,
40
+ noteIds: raw.noteIds ?? [],
41
+ };
42
+ }
43
+ if (proposalType === 'switch_psm') {
44
+ return {
45
+ proposalType: proposalType,
46
+ description: raw.description ?? '',
47
+ saltHex: raw.saltHex,
48
+ newPsmPubkey: raw.newPsmPubkey ?? '',
49
+ newPsmEndpoint: raw.newPsmEndpoint,
50
+ };
51
+ }
52
+ if (proposalType === 'add_signer' || proposalType === 'remove_signer' || proposalType === 'change_threshold') {
53
+ return {
54
+ proposalType,
55
+ description: raw.description ?? '',
56
+ saltHex: raw.saltHex,
57
+ targetThreshold: raw.targetThreshold ?? 0,
58
+ targetSignerCommitments: raw.targetSignerCommitments ?? [],
59
+ };
60
+ }
61
+ return undefined;
62
+ }
63
+ export function toPsmMetadata(metadata) {
64
+ if (!metadata)
65
+ return undefined;
66
+ const base = {
67
+ proposalType: metadata.proposalType,
68
+ description: metadata.description ?? '',
69
+ saltHex: metadata.saltHex,
70
+ };
71
+ switch (metadata.proposalType) {
72
+ case 'p2id':
73
+ return {
74
+ ...base,
75
+ recipientId: metadata.recipientId,
76
+ faucetId: metadata.faucetId,
77
+ amount: metadata.amount,
78
+ };
79
+ case 'consume_notes':
80
+ return {
81
+ ...base,
82
+ noteIds: metadata.noteIds,
83
+ };
84
+ case 'switch_psm':
85
+ return {
86
+ ...base,
87
+ targetThreshold: metadata.targetThreshold,
88
+ targetSignerCommitments: metadata.targetSignerCommitments,
89
+ newPsmPubkey: metadata.newPsmPubkey,
90
+ newPsmEndpoint: metadata.newPsmEndpoint,
91
+ };
92
+ default:
93
+ return {
94
+ ...base,
95
+ targetThreshold: metadata.targetThreshold,
96
+ targetSignerCommitments: metadata.targetSignerCommitments,
97
+ };
98
+ }
99
+ }
100
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/multisig/metadata.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=metadata.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.test.d.ts","sourceRoot":"","sources":["../../src/multisig/metadata.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,323 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { fromPsmMetadata, toPsmMetadata } from './metadata.js';
3
+ describe('metadata conversion', () => {
4
+ describe('fromPsmMetadata', () => {
5
+ it('returns undefined for null/undefined input', () => {
6
+ expect(fromPsmMetadata(undefined)).toBeUndefined();
7
+ expect(fromPsmMetadata(null)).toBeUndefined();
8
+ });
9
+ it('converts P2ID metadata from PSM shape', () => {
10
+ const raw = {
11
+ proposalType: 'p2id',
12
+ recipientId: '0xabc',
13
+ faucetId: '0xf00',
14
+ amount: '42',
15
+ description: 'send funds',
16
+ saltHex: '0xsalt',
17
+ };
18
+ const meta = fromPsmMetadata(raw);
19
+ expect(meta).toEqual({
20
+ proposalType: 'p2id',
21
+ recipientId: '0xabc',
22
+ faucetId: '0xf00',
23
+ amount: '42',
24
+ description: 'send funds',
25
+ saltHex: '0xsalt',
26
+ });
27
+ });
28
+ it('converts consume_notes metadata', () => {
29
+ const raw = {
30
+ proposalType: 'consume_notes',
31
+ noteIds: ['0xnote1', '0xnote2'],
32
+ description: 'consume notes',
33
+ saltHex: '0xsalt',
34
+ };
35
+ const meta = fromPsmMetadata(raw);
36
+ expect(meta).toEqual({
37
+ proposalType: 'consume_notes',
38
+ noteIds: ['0xnote1', '0xnote2'],
39
+ description: 'consume notes',
40
+ saltHex: '0xsalt',
41
+ });
42
+ });
43
+ it('converts switch_psm metadata', () => {
44
+ const raw = {
45
+ proposalType: 'switch_psm',
46
+ newPsmPubkey: '0xpubkey',
47
+ newPsmEndpoint: 'http://new-psm.com',
48
+ description: 'switch PSM',
49
+ saltHex: '0xsalt',
50
+ };
51
+ const meta = fromPsmMetadata(raw);
52
+ expect(meta).toEqual({
53
+ proposalType: 'switch_psm',
54
+ newPsmPubkey: '0xpubkey',
55
+ newPsmEndpoint: 'http://new-psm.com',
56
+ description: 'switch PSM',
57
+ saltHex: '0xsalt',
58
+ });
59
+ });
60
+ it('converts add_signer metadata', () => {
61
+ const raw = {
62
+ proposalType: 'add_signer',
63
+ targetThreshold: 2,
64
+ targetSignerCommitments: ['0x1', '0x2'],
65
+ description: 'add signer',
66
+ saltHex: '0xsalt',
67
+ };
68
+ const meta = fromPsmMetadata(raw);
69
+ expect(meta).toEqual({
70
+ proposalType: 'add_signer',
71
+ targetThreshold: 2,
72
+ targetSignerCommitments: ['0x1', '0x2'],
73
+ description: 'add signer',
74
+ saltHex: '0xsalt',
75
+ });
76
+ });
77
+ it('converts remove_signer metadata', () => {
78
+ const raw = {
79
+ proposalType: 'remove_signer',
80
+ targetThreshold: 1,
81
+ targetSignerCommitments: ['0x1'],
82
+ description: 'remove signer',
83
+ };
84
+ const meta = fromPsmMetadata(raw);
85
+ expect(meta).toEqual({
86
+ proposalType: 'remove_signer',
87
+ targetThreshold: 1,
88
+ targetSignerCommitments: ['0x1'],
89
+ description: 'remove signer',
90
+ saltHex: undefined,
91
+ });
92
+ });
93
+ it('converts change_threshold metadata', () => {
94
+ const raw = {
95
+ proposalType: 'change_threshold',
96
+ targetThreshold: 3,
97
+ targetSignerCommitments: ['0x1', '0x2', '0x3'],
98
+ };
99
+ const meta = fromPsmMetadata(raw);
100
+ expect(meta).toEqual({
101
+ proposalType: 'change_threshold',
102
+ targetThreshold: 3,
103
+ targetSignerCommitments: ['0x1', '0x2', '0x3'],
104
+ description: '',
105
+ saltHex: undefined,
106
+ });
107
+ });
108
+ it('infers p2id from recipientId field', () => {
109
+ const raw = {
110
+ recipientId: '0xabc',
111
+ faucetId: '0xf00',
112
+ amount: '42',
113
+ };
114
+ const meta = fromPsmMetadata(raw);
115
+ expect(meta?.proposalType).toBe('p2id');
116
+ });
117
+ it('infers p2id from faucetId field', () => {
118
+ const raw = {
119
+ faucetId: '0xf00',
120
+ amount: '42',
121
+ };
122
+ const meta = fromPsmMetadata(raw);
123
+ expect(meta?.proposalType).toBe('p2id');
124
+ });
125
+ it('infers p2id from amount field', () => {
126
+ const raw = {
127
+ amount: '42',
128
+ };
129
+ const meta = fromPsmMetadata(raw);
130
+ expect(meta?.proposalType).toBe('p2id');
131
+ });
132
+ it('infers consume_notes from noteIds field', () => {
133
+ const raw = {
134
+ noteIds: ['0xnote1'],
135
+ };
136
+ const meta = fromPsmMetadata(raw);
137
+ expect(meta?.proposalType).toBe('consume_notes');
138
+ });
139
+ it('infers switch_psm from newPsmPubkey field', () => {
140
+ const raw = {
141
+ newPsmPubkey: '0xpubkey',
142
+ };
143
+ const meta = fromPsmMetadata(raw);
144
+ expect(meta?.proposalType).toBe('switch_psm');
145
+ });
146
+ it('infers change_threshold from targetSignerCommitments field', () => {
147
+ const raw = {
148
+ targetSignerCommitments: ['0x1', '0x2'],
149
+ targetThreshold: 2,
150
+ };
151
+ const meta = fromPsmMetadata(raw);
152
+ expect(meta?.proposalType).toBe('change_threshold');
153
+ });
154
+ it('returns undefined when proposalType cannot be inferred', () => {
155
+ const raw = {
156
+ unknownField: 'value',
157
+ };
158
+ const meta = fromPsmMetadata(raw);
159
+ expect(meta).toBeUndefined();
160
+ });
161
+ it('returns undefined for empty noteIds array', () => {
162
+ const raw = {
163
+ noteIds: [],
164
+ };
165
+ const meta = fromPsmMetadata(raw);
166
+ expect(meta).toBeUndefined();
167
+ });
168
+ it('defaults missing optional fields', () => {
169
+ const raw = {
170
+ proposalType: 'p2id',
171
+ };
172
+ const meta = fromPsmMetadata(raw);
173
+ expect(meta).toEqual({
174
+ proposalType: 'p2id',
175
+ recipientId: '',
176
+ faucetId: '',
177
+ amount: '0',
178
+ description: '',
179
+ saltHex: undefined,
180
+ });
181
+ });
182
+ });
183
+ describe('toPsmMetadata', () => {
184
+ it('returns undefined for undefined input', () => {
185
+ expect(toPsmMetadata(undefined)).toBeUndefined();
186
+ });
187
+ it('maps add_signer to PSM metadata', () => {
188
+ const meta = toPsmMetadata({
189
+ proposalType: 'add_signer',
190
+ targetThreshold: 2,
191
+ targetSignerCommitments: ['0x1', '0x2'],
192
+ saltHex: '0xsalt',
193
+ description: 'add signer',
194
+ });
195
+ expect(meta).toEqual({
196
+ proposalType: 'add_signer',
197
+ targetThreshold: 2,
198
+ targetSignerCommitments: ['0x1', '0x2'],
199
+ saltHex: '0xsalt',
200
+ description: 'add signer',
201
+ });
202
+ });
203
+ it('maps remove_signer to PSM metadata', () => {
204
+ const meta = toPsmMetadata({
205
+ proposalType: 'remove_signer',
206
+ targetThreshold: 1,
207
+ targetSignerCommitments: ['0x1'],
208
+ description: '',
209
+ });
210
+ expect(meta).toEqual({
211
+ proposalType: 'remove_signer',
212
+ targetThreshold: 1,
213
+ targetSignerCommitments: ['0x1'],
214
+ saltHex: undefined,
215
+ description: '',
216
+ });
217
+ });
218
+ it('maps change_threshold to PSM metadata', () => {
219
+ const meta = toPsmMetadata({
220
+ proposalType: 'change_threshold',
221
+ targetThreshold: 3,
222
+ targetSignerCommitments: ['0x1', '0x2', '0x3'],
223
+ description: '',
224
+ });
225
+ expect(meta).toEqual({
226
+ proposalType: 'change_threshold',
227
+ targetThreshold: 3,
228
+ targetSignerCommitments: ['0x1', '0x2', '0x3'],
229
+ saltHex: undefined,
230
+ description: '',
231
+ });
232
+ });
233
+ it('maps p2id to PSM metadata', () => {
234
+ const meta = toPsmMetadata({
235
+ proposalType: 'p2id',
236
+ recipientId: '0xabc',
237
+ faucetId: '0xf00',
238
+ amount: '42',
239
+ description: 'send funds',
240
+ saltHex: '0xsalt',
241
+ });
242
+ expect(meta).toEqual({
243
+ proposalType: 'p2id',
244
+ recipientId: '0xabc',
245
+ faucetId: '0xf00',
246
+ amount: '42',
247
+ description: 'send funds',
248
+ saltHex: '0xsalt',
249
+ });
250
+ });
251
+ it('maps consume_notes to PSM metadata', () => {
252
+ const meta = toPsmMetadata({
253
+ proposalType: 'consume_notes',
254
+ noteIds: ['0xnote1', '0xnote2'],
255
+ description: 'consume',
256
+ });
257
+ expect(meta).toEqual({
258
+ proposalType: 'consume_notes',
259
+ noteIds: ['0xnote1', '0xnote2'],
260
+ description: 'consume',
261
+ saltHex: undefined,
262
+ });
263
+ });
264
+ it('maps switch_psm to PSM metadata', () => {
265
+ const meta = toPsmMetadata({
266
+ proposalType: 'switch_psm',
267
+ newPsmPubkey: '0xpubkey',
268
+ newPsmEndpoint: 'http://new.com',
269
+ targetThreshold: 2,
270
+ targetSignerCommitments: ['0x1', '0x2'],
271
+ description: '',
272
+ });
273
+ expect(meta).toEqual({
274
+ proposalType: 'switch_psm',
275
+ newPsmPubkey: '0xpubkey',
276
+ newPsmEndpoint: 'http://new.com',
277
+ targetThreshold: 2,
278
+ targetSignerCommitments: ['0x1', '0x2'],
279
+ description: '',
280
+ saltHex: undefined,
281
+ });
282
+ });
283
+ });
284
+ describe('roundtrip', () => {
285
+ it('p2id metadata survives roundtrip', () => {
286
+ const original = {
287
+ proposalType: 'p2id',
288
+ recipientId: '0xabc',
289
+ faucetId: '0xf00',
290
+ amount: '42',
291
+ description: 'test',
292
+ saltHex: '0xsalt',
293
+ };
294
+ const psm = toPsmMetadata(original);
295
+ const roundtripped = fromPsmMetadata(psm);
296
+ expect(roundtripped).toEqual(original);
297
+ });
298
+ it('consume_notes metadata survives roundtrip', () => {
299
+ const original = {
300
+ proposalType: 'consume_notes',
301
+ noteIds: ['0xnote1', '0xnote2'],
302
+ description: 'test',
303
+ saltHex: '0xsalt',
304
+ };
305
+ const psm = toPsmMetadata(original);
306
+ const roundtripped = fromPsmMetadata(psm);
307
+ expect(roundtripped).toEqual(original);
308
+ });
309
+ it('add_signer metadata survives roundtrip', () => {
310
+ const original = {
311
+ proposalType: 'add_signer',
312
+ targetThreshold: 2,
313
+ targetSignerCommitments: ['0x1', '0x2'],
314
+ description: 'test',
315
+ saltHex: '0xsalt',
316
+ };
317
+ const psm = toPsmMetadata(original);
318
+ const roundtripped = fromPsmMetadata(psm);
319
+ expect(roundtripped).toEqual(original);
320
+ });
321
+ });
322
+ });
323
+ //# sourceMappingURL=metadata.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.test.js","sourceRoot":"","sources":["../../src/multisig/metadata.test.ts"],"names":[],"mappings":"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"}