@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,120 @@
1
+ /**
2
+ * Account Inspector - Inspects account storage to detect multisig configuration.
3
+ */
4
+ import { Account, Word } from '@demox-labs/miden-sdk';
5
+ import { base64ToUint8Array } from './utils/encoding.js';
6
+ import { wordElementToBigInt, wordToHex } from './utils/word.js';
7
+ import { getProcedureRoot, getProcedureNames } from './procedures.js';
8
+ /**
9
+ * Inspects an account to detect its multisig configuration.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * // From base64-encoded state
14
+ * const config = AccountInspector.fromBase64(stateDataBase64);
15
+ * console.log(`${config.threshold}-of-${config.numSigners} multisig`);
16
+ *
17
+ * // From Miden SDK Account
18
+ * const config = AccountInspector.fromAccount(account);
19
+ * ```
20
+ */
21
+ export class AccountInspector {
22
+ constructor() { }
23
+ /**
24
+ * Inspect a base64-encoded serialized account.
25
+ *
26
+ * @param base64Data - Base64-encoded Account bytes
27
+ * @returns Detected multisig configuration
28
+ */
29
+ static fromBase64(base64Data) {
30
+ const bytes = base64ToUint8Array(base64Data);
31
+ const account = Account.deserialize(bytes);
32
+ return AccountInspector.fromAccount(account);
33
+ }
34
+ /**
35
+ * Inspect a Miden SDK Account object.
36
+ *
37
+ * @param account - The Account object from Miden SDK
38
+ * @returns Detected multisig configuration
39
+ */
40
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
41
+ static fromAccount(account) {
42
+ const storage = account.storage();
43
+ const slot0 = storage.getItem(0);
44
+ const threshold = Number(wordElementToBigInt(slot0, 0));
45
+ const numSigners = Number(wordElementToBigInt(slot0, 1));
46
+ const signerCommitments = [];
47
+ for (let i = 0; i < numSigners; i++) {
48
+ try {
49
+ const key = new Word(new BigUint64Array([BigInt(i), 0n, 0n, 0n]));
50
+ const commitment = storage.getMapItem(1, key);
51
+ if (commitment) {
52
+ signerCommitments.push(wordToHex(commitment));
53
+ }
54
+ }
55
+ catch (error) {
56
+ console.warn(error);
57
+ }
58
+ }
59
+ let psmEnabled = false;
60
+ let psmCommitment = null;
61
+ try {
62
+ const psmSlot0 = storage.getItem(4);
63
+ const selector = Number(wordElementToBigInt(psmSlot0, 0));
64
+ psmEnabled = selector === 1;
65
+ if (psmEnabled) {
66
+ const zeroKey = new Word(new BigUint64Array([0n, 0n, 0n, 0n]));
67
+ const psmKey = storage.getMapItem(5, zeroKey);
68
+ if (psmKey) {
69
+ psmCommitment = wordToHex(psmKey);
70
+ }
71
+ }
72
+ }
73
+ catch (error) {
74
+ console.warn(error);
75
+ }
76
+ const vaultBalances = [];
77
+ try {
78
+ const vault = account.vault();
79
+ const fungibleAssets = vault.fungibleAssets();
80
+ for (const asset of fungibleAssets) {
81
+ vaultBalances.push({
82
+ faucetId: asset.faucetId().toString(),
83
+ amount: BigInt(asset.amount()),
84
+ });
85
+ }
86
+ }
87
+ catch (error) {
88
+ console.warn(error);
89
+ }
90
+ // Read procedure threshold overrides from storage slot 3
91
+ // Storage layout: slot 3 is a map of PROC_ROOT => [threshold, 0, 0, 0]
92
+ const procedureThresholds = new Map();
93
+ for (const procName of getProcedureNames()) {
94
+ try {
95
+ const rootHex = getProcedureRoot(procName);
96
+ const rootWord = Word.fromHex(rootHex);
97
+ const value = storage.getMapItem(3, rootWord);
98
+ if (value) {
99
+ const procThreshold = Number(wordElementToBigInt(value, 0));
100
+ if (procThreshold > 0) {
101
+ procedureThresholds.set(procName, procThreshold);
102
+ }
103
+ }
104
+ }
105
+ catch {
106
+ // Procedure threshold not set - use default
107
+ }
108
+ }
109
+ return {
110
+ threshold,
111
+ numSigners,
112
+ signerCommitments,
113
+ psmEnabled,
114
+ psmCommitment,
115
+ vaultBalances,
116
+ procedureThresholds,
117
+ };
118
+ }
119
+ }
120
+ //# sourceMappingURL=inspector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspector.js","sourceRoot":"","sources":["../src/inspector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=inspector.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspector.test.d.ts","sourceRoot":"","sources":["../src/inspector.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,205 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { AccountInspector } from './inspector.js';
3
+ // Mock the Miden SDK
4
+ vi.mock('@demox-labs/miden-sdk', () => {
5
+ const createMockWord = (values) => ({
6
+ toU64s: () => values,
7
+ toHex: () => '0x' + values.map(v => v.toString(16).padStart(16, '0')).join(''),
8
+ });
9
+ const createMockStorage = (slots, maps) => ({
10
+ getItem: (index) => slots.get(index) ?? createMockWord([0n, 0n, 0n, 0n]),
11
+ getMapItem: (slotIndex, key) => {
12
+ const map = maps.get(slotIndex);
13
+ if (!map)
14
+ throw new Error('Map not found');
15
+ const keyStr = key.toU64s?.()[0]?.toString() ?? '0';
16
+ const value = map.get(keyStr);
17
+ if (!value)
18
+ throw new Error('Key not found');
19
+ return value;
20
+ },
21
+ });
22
+ const createMockVault = (assets) => ({
23
+ fungibleAssets: () => assets.map(a => ({
24
+ faucetId: () => ({ toString: () => a.faucetId }),
25
+ amount: () => a.amount,
26
+ })),
27
+ });
28
+ return {
29
+ Account: {
30
+ deserialize: vi.fn((bytes) => {
31
+ // Return different mocked accounts based on test scenario
32
+ // Default: 2-of-3 multisig with PSM enabled
33
+ const slot0 = createMockWord([2n, 3n, 0n, 0n]); // threshold=2, numSigners=3
34
+ const slot4 = createMockWord([1n, 0n, 0n, 0n]); // PSM enabled
35
+ const signerMap = new Map();
36
+ signerMap.set('0', createMockWord([BigInt('0x1111111111111111'), BigInt('0x2222222222222222'), BigInt('0x3333333333333333'), BigInt('0x4444444444444444')]));
37
+ signerMap.set('1', createMockWord([BigInt('0x5555555555555555'), BigInt('0x6666666666666666'), BigInt('0x7777777777777777'), BigInt('0x8888888888888888')]));
38
+ signerMap.set('2', createMockWord([BigInt('0xaaaaaaaaaaaaaaaa'), BigInt('0xbbbbbbbbbbbbbbbb'), BigInt('0xcccccccccccccccc'), BigInt('0xdddddddddddddddd')]));
39
+ const psmMap = new Map();
40
+ psmMap.set('0', createMockWord([BigInt('0xeeeeeeeeeeeeeeee'), BigInt('0xffffffffffffffff'), BigInt('0x0000000000000001'), BigInt('0x0000000000000002')]));
41
+ const slots = new Map();
42
+ slots.set(0, slot0);
43
+ slots.set(4, slot4);
44
+ const maps = new Map();
45
+ maps.set(1, signerMap);
46
+ maps.set(5, psmMap);
47
+ return {
48
+ storage: () => createMockStorage(slots, maps),
49
+ vault: () => createMockVault([
50
+ { faucetId: '0xfaucet1', amount: 1000n },
51
+ { faucetId: '0xfaucet2', amount: 500n },
52
+ ]),
53
+ };
54
+ }),
55
+ },
56
+ Word: vi.fn().mockImplementation((arr) => ({
57
+ toU64s: () => Array.from(arr),
58
+ toHex: () => '0x' + Array.from(arr).map(v => v.toString(16).padStart(16, '0')).join(''),
59
+ })),
60
+ };
61
+ });
62
+ describe('AccountInspector', () => {
63
+ beforeEach(() => {
64
+ vi.clearAllMocks();
65
+ });
66
+ describe('fromBase64', () => {
67
+ it('deserializes account from base64 and extracts config', () => {
68
+ const base64 = btoa(String.fromCharCode(...new Uint8Array([1, 2, 3])));
69
+ const config = AccountInspector.fromBase64(base64);
70
+ expect(config.threshold).toBe(2);
71
+ expect(config.numSigners).toBe(3);
72
+ });
73
+ it('extracts PSM status', () => {
74
+ const base64 = btoa(String.fromCharCode(...new Uint8Array([1, 2, 3])));
75
+ const config = AccountInspector.fromBase64(base64);
76
+ expect(config.psmEnabled).toBe(true);
77
+ expect(config.psmCommitment).toMatch(/^0x[a-f0-9]+$/);
78
+ });
79
+ it('extracts signer commitments', () => {
80
+ const base64 = btoa(String.fromCharCode(...new Uint8Array([1, 2, 3])));
81
+ const config = AccountInspector.fromBase64(base64);
82
+ expect(config.signerCommitments).toHaveLength(3);
83
+ config.signerCommitments.forEach(commitment => {
84
+ expect(commitment).toMatch(/^0x[a-f0-9]+$/);
85
+ });
86
+ });
87
+ it('extracts vault balances', () => {
88
+ const base64 = btoa(String.fromCharCode(...new Uint8Array([1, 2, 3])));
89
+ const config = AccountInspector.fromBase64(base64);
90
+ expect(config.vaultBalances).toHaveLength(2);
91
+ expect(config.vaultBalances[0]).toEqual({ faucetId: '0xfaucet1', amount: 1000n });
92
+ expect(config.vaultBalances[1]).toEqual({ faucetId: '0xfaucet2', amount: 500n });
93
+ });
94
+ });
95
+ describe('fromAccount', () => {
96
+ it('extracts threshold from slot 0', async () => {
97
+ const { Account } = await import('@demox-labs/miden-sdk');
98
+ const account = Account.deserialize(new Uint8Array([1, 2, 3]));
99
+ const config = AccountInspector.fromAccount(account);
100
+ expect(config.threshold).toBe(2);
101
+ });
102
+ it('extracts numSigners from slot 0', async () => {
103
+ const { Account } = await import('@demox-labs/miden-sdk');
104
+ const account = Account.deserialize(new Uint8Array([1, 2, 3]));
105
+ const config = AccountInspector.fromAccount(account);
106
+ expect(config.numSigners).toBe(3);
107
+ });
108
+ });
109
+ });
110
+ describe('AccountInspector edge cases', () => {
111
+ beforeEach(() => {
112
+ vi.clearAllMocks();
113
+ });
114
+ it('handles account with PSM disabled', async () => {
115
+ const { Account } = await import('@demox-labs/miden-sdk');
116
+ // Override mock for this test
117
+ vi.mocked(Account.deserialize).mockReturnValueOnce({
118
+ storage: () => ({
119
+ getItem: (index) => {
120
+ if (index === 0)
121
+ return { toU64s: () => [1n, 1n, 0n, 0n] };
122
+ if (index === 4)
123
+ return { toU64s: () => [0n, 0n, 0n, 0n] }; // PSM disabled
124
+ return { toU64s: () => [0n, 0n, 0n, 0n] };
125
+ },
126
+ getMapItem: (slotIndex, key) => {
127
+ if (slotIndex === 1 && key.toU64s?.()[0] === 0n) {
128
+ return {
129
+ toHex: () => '0x' + 'a'.repeat(64),
130
+ toU64s: () => [1n, 2n, 3n, 4n],
131
+ };
132
+ }
133
+ throw new Error('Not found');
134
+ },
135
+ }),
136
+ vault: () => ({
137
+ fungibleAssets: () => [],
138
+ }),
139
+ });
140
+ const account = Account.deserialize(new Uint8Array([1, 2, 3]));
141
+ const config = AccountInspector.fromAccount(account);
142
+ expect(config.psmEnabled).toBe(false);
143
+ expect(config.psmCommitment).toBeNull();
144
+ });
145
+ it('handles account with empty vault', async () => {
146
+ const { Account } = await import('@demox-labs/miden-sdk');
147
+ vi.mocked(Account.deserialize).mockReturnValueOnce({
148
+ storage: () => ({
149
+ getItem: () => ({ toU64s: () => [1n, 1n, 0n, 0n] }),
150
+ getMapItem: () => {
151
+ throw new Error('Not found');
152
+ },
153
+ }),
154
+ vault: () => ({
155
+ fungibleAssets: () => [],
156
+ }),
157
+ });
158
+ const account = Account.deserialize(new Uint8Array([1, 2, 3]));
159
+ const config = AccountInspector.fromAccount(account);
160
+ expect(config.vaultBalances).toEqual([]);
161
+ });
162
+ it('handles missing signer map entries gracefully', async () => {
163
+ const { Account } = await import('@demox-labs/miden-sdk');
164
+ vi.mocked(Account.deserialize).mockReturnValueOnce({
165
+ storage: () => ({
166
+ getItem: (index) => {
167
+ if (index === 0)
168
+ return { toU64s: () => [2n, 5n, 0n, 0n] }; // threshold=2, numSigners=5
169
+ if (index === 4)
170
+ return { toU64s: () => [0n, 0n, 0n, 0n] };
171
+ return { toU64s: () => [0n, 0n, 0n, 0n] };
172
+ },
173
+ getMapItem: () => {
174
+ throw new Error('Map entry not found');
175
+ },
176
+ }),
177
+ vault: () => ({
178
+ fungibleAssets: () => [],
179
+ }),
180
+ });
181
+ const account = Account.deserialize(new Uint8Array([1, 2, 3]));
182
+ const config = AccountInspector.fromAccount(account);
183
+ // Should gracefully handle missing entries
184
+ expect(config.numSigners).toBe(5);
185
+ expect(config.signerCommitments).toEqual([]); // All entries missing
186
+ });
187
+ it('handles vault access error gracefully', async () => {
188
+ const { Account } = await import('@demox-labs/miden-sdk');
189
+ vi.mocked(Account.deserialize).mockReturnValueOnce({
190
+ storage: () => ({
191
+ getItem: () => ({ toU64s: () => [1n, 1n, 0n, 0n] }),
192
+ getMapItem: () => {
193
+ throw new Error('Not found');
194
+ },
195
+ }),
196
+ vault: () => {
197
+ throw new Error('Vault access failed');
198
+ },
199
+ });
200
+ const account = Account.deserialize(new Uint8Array([1, 2, 3]));
201
+ const config = AccountInspector.fromAccount(account);
202
+ expect(config.vaultBalances).toEqual([]);
203
+ });
204
+ });
205
+ //# sourceMappingURL=inspector.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspector.test.js","sourceRoot":"","sources":["../src/inspector.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Web keystore for managing Falcon keys in the browser.
3
+ *
4
+ * Keys are stored in localStorage and can be used for signing transactions.
5
+ * This module mirrors the KeyManager trait from the Rust miden-multisig-client.
6
+ */
7
+ import { SecretKey } from '@miden-sdk/miden-sdk';
8
+ /**
9
+ * A stored key entry in the keystore.
10
+ */
11
+ export interface KeyEntry {
12
+ /** Unique identifier for the key */
13
+ id: string;
14
+ /** Human-readable name for the key */
15
+ name: string;
16
+ /** Public key commitment as hex string (64 chars) */
17
+ commitment: string;
18
+ /** Serialized secret key as base64 */
19
+ secretKeyBase64: string;
20
+ /** Creation timestamp */
21
+ createdAt: number;
22
+ }
23
+ /**
24
+ * Loads all keys from localStorage.
25
+ */
26
+ export declare function loadKeys(): KeyEntry[];
27
+ /**
28
+ * Generates a new Falcon key pair and stores it in the keystore.
29
+ *
30
+ * @param name - Human-readable name for the key
31
+ * @returns The created key entry
32
+ */
33
+ export declare function generateKey(name: string): KeyEntry;
34
+ /**
35
+ * Loads a secret key from a key entry.
36
+ *
37
+ * @param entry - The key entry to load
38
+ * @returns The deserialized secret key
39
+ */
40
+ export declare function loadSecretKey(entry: KeyEntry): SecretKey;
41
+ /**
42
+ * Deletes a key from the keystore.
43
+ *
44
+ * @param keyId - The ID of the key to delete
45
+ */
46
+ export declare function deleteKey(keyId: string): void;
47
+ /**
48
+ * Gets a key by ID.
49
+ *
50
+ * @param keyId - The ID of the key to get
51
+ * @returns The key entry or undefined if not found
52
+ */
53
+ export declare function getKey(keyId: string): KeyEntry | undefined;
54
+ /**
55
+ * Renames a key.
56
+ *
57
+ * @param keyId - The ID of the key to rename
58
+ * @param newName - The new name for the key
59
+ */
60
+ export declare function renameKey(keyId: string, newName: string): void;
61
+ /**
62
+ * Clears all keys from the keystore.
63
+ */
64
+ export declare function clearKeystore(): void;
65
+ //# sourceMappingURL=keystore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystore.d.ts","sourceRoot":"","sources":["../src/keystore.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAQlD;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,oCAAoC;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAaD;;GAEG;AACH,wBAAgB,QAAQ,IAAI,QAAQ,EAAE,CAQrC;AASD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAgClD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,CAGxD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAI7C;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAG1D;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAO9D;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAEpC"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Web keystore for managing Falcon keys in the browser.
3
+ *
4
+ * Keys are stored in localStorage and can be used for signing transactions.
5
+ * This module mirrors the KeyManager trait from the Rust miden-multisig-client.
6
+ */
7
+ import { SecretKey } from '@demox-labs/miden-sdk';
8
+ const KEYSTORE_STORAGE_KEY = 'miden_keystore';
9
+ // =============================================================================
10
+ // Keystore Functions
11
+ // =============================================================================
12
+ /**
13
+ * Generates a unique ID for a new key.
14
+ */
15
+ function generateKeyId() {
16
+ return crypto.randomUUID();
17
+ }
18
+ /**
19
+ * Loads all keys from localStorage.
20
+ */
21
+ export function loadKeys() {
22
+ try {
23
+ const stored = localStorage.getItem(KEYSTORE_STORAGE_KEY);
24
+ if (!stored)
25
+ return [];
26
+ return JSON.parse(stored);
27
+ }
28
+ catch {
29
+ return [];
30
+ }
31
+ }
32
+ /**
33
+ * Saves keys to localStorage.
34
+ */
35
+ function saveKeys(keys) {
36
+ localStorage.setItem(KEYSTORE_STORAGE_KEY, JSON.stringify(keys));
37
+ }
38
+ /**
39
+ * Generates a new Falcon key pair and stores it in the keystore.
40
+ *
41
+ * @param name - Human-readable name for the key
42
+ * @returns The created key entry
43
+ */
44
+ export function generateKey(name) {
45
+ // Generate a random seed for the key
46
+ const seed = new Uint8Array(32);
47
+ crypto.getRandomValues(seed);
48
+ // Generate the Falcon secret key
49
+ const secretKey = SecretKey.rpoFalconWithRNG(seed);
50
+ // Get the public key and its commitment
51
+ const publicKey = secretKey.publicKey();
52
+ const commitment = publicKey.toCommitment();
53
+ const commitmentHex = commitment.toHex();
54
+ // Serialize the secret key for storage
55
+ const secretKeyBytes = secretKey.serialize();
56
+ const secretKeyBase64 = btoa(String.fromCharCode(...secretKeyBytes));
57
+ // Create the key entry
58
+ const entry = {
59
+ id: generateKeyId(),
60
+ name,
61
+ commitment: commitmentHex,
62
+ secretKeyBase64,
63
+ createdAt: Date.now(),
64
+ };
65
+ // Save to keystore
66
+ const keys = loadKeys();
67
+ keys.push(entry);
68
+ saveKeys(keys);
69
+ return entry;
70
+ }
71
+ /**
72
+ * Loads a secret key from a key entry.
73
+ *
74
+ * @param entry - The key entry to load
75
+ * @returns The deserialized secret key
76
+ */
77
+ export function loadSecretKey(entry) {
78
+ const bytes = Uint8Array.from(atob(entry.secretKeyBase64), (c) => c.charCodeAt(0));
79
+ return SecretKey.deserialize(bytes);
80
+ }
81
+ /**
82
+ * Deletes a key from the keystore.
83
+ *
84
+ * @param keyId - The ID of the key to delete
85
+ */
86
+ export function deleteKey(keyId) {
87
+ const keys = loadKeys();
88
+ const filtered = keys.filter((k) => k.id !== keyId);
89
+ saveKeys(filtered);
90
+ }
91
+ /**
92
+ * Gets a key by ID.
93
+ *
94
+ * @param keyId - The ID of the key to get
95
+ * @returns The key entry or undefined if not found
96
+ */
97
+ export function getKey(keyId) {
98
+ const keys = loadKeys();
99
+ return keys.find((k) => k.id === keyId);
100
+ }
101
+ /**
102
+ * Renames a key.
103
+ *
104
+ * @param keyId - The ID of the key to rename
105
+ * @param newName - The new name for the key
106
+ */
107
+ export function renameKey(keyId, newName) {
108
+ const keys = loadKeys();
109
+ const key = keys.find((k) => k.id === keyId);
110
+ if (key) {
111
+ key.name = newName;
112
+ saveKeys(keys);
113
+ }
114
+ }
115
+ /**
116
+ * Clears all keys from the keystore.
117
+ */
118
+ export function clearKeystore() {
119
+ localStorage.removeItem(KEYSTORE_STORAGE_KEY);
120
+ }
121
+ //# sourceMappingURL=keystore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystore.js","sourceRoot":"","sources":["../src/keystore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Miden SDK utilities.
3
+ */
4
+ /**
5
+ * Clear all IndexedDB databases.
6
+ * Useful for resetting the Miden client state in browser environments.
7
+ */
8
+ export declare function clearIndexedDB(): Promise<void>;
9
+ //# sourceMappingURL=miden.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"miden.d.ts","sourceRoot":"","sources":["../src/miden.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAkBpD"}
package/dist/miden.js ADDED
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Miden SDK utilities.
3
+ */
4
+ // =============================================================================
5
+ // IndexedDB Utilities
6
+ // =============================================================================
7
+ /**
8
+ * Clear all IndexedDB databases.
9
+ * Useful for resetting the Miden client state in browser environments.
10
+ */
11
+ export async function clearIndexedDB() {
12
+ if (typeof indexedDB === 'undefined') {
13
+ return; // Not in browser environment
14
+ }
15
+ const databases = await indexedDB.databases();
16
+ const deletePromises = databases
17
+ .filter((db) => db.name)
18
+ .map((db) => new Promise((resolve, reject) => {
19
+ const request = indexedDB.deleteDatabase(db.name);
20
+ request.onsuccess = () => resolve();
21
+ request.onerror = () => reject(request.error);
22
+ request.onblocked = () => resolve();
23
+ }));
24
+ await Promise.all(deletePromises);
25
+ }
26
+ //# sourceMappingURL=miden.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"miden.js","sourceRoot":"","sources":["../src/miden.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,gFAAgF;AAChF,sBAAsB;AACtB,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE,CAAC;QACrC,OAAO,CAAC,6BAA6B;IACvC,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,SAAS,EAAE,CAAC;IAC9C,MAAM,cAAc,GAAG,SAAS;SAC7B,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;SACvB,GAAG,CACF,CAAC,EAAE,EAAE,EAAE,CACL,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACpC,MAAM,OAAO,GAAG,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,IAAK,CAAC,CAAC;QACnD,OAAO,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QACpC,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IACtC,CAAC,CAAC,CACL,CAAC;IACJ,MAAM,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACpC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Account } from '@demox-labs/miden-sdk';
2
+ export declare function computeCommitmentFromTxSummary(txSummaryBase64: string): string;
3
+ export declare function accountIdToHex(account: Account): string;
4
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/multisig/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA4B,MAAM,uBAAuB,CAAC;AAG1E,wBAAgB,8BAA8B,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAK9E;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAWvD"}
@@ -0,0 +1,21 @@
1
+ import { TransactionSummary } from '@demox-labs/miden-sdk';
2
+ import { base64ToUint8Array } from '../utils/encoding.js';
3
+ export function computeCommitmentFromTxSummary(txSummaryBase64) {
4
+ const bytes = base64ToUint8Array(txSummaryBase64);
5
+ const summary = TransactionSummary.deserialize(bytes);
6
+ const commitment = summary.toCommitment();
7
+ return commitment.toHex();
8
+ }
9
+ export function accountIdToHex(account) {
10
+ const accountId = account.id();
11
+ const str = accountId.toString();
12
+ if (str.startsWith('0x') || str.startsWith('0X')) {
13
+ return str;
14
+ }
15
+ const prefix = accountId.prefix().asInt();
16
+ const suffix = accountId.suffix().asInt();
17
+ const prefixHex = prefix.toString(16).padStart(16, '0');
18
+ const suffixHex = suffix.toString(16).padStart(16, '0');
19
+ return `0x${prefixHex}${suffixHex.slice(0, 14)}`;
20
+ }
21
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/multisig/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,kBAAkB,EAAQ,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,UAAU,8BAA8B,CAAC,eAAuB;IACpE,MAAM,KAAK,GAAG,kBAAkB,CAAC,eAAe,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAC1C,OAAO,UAAU,CAAC,KAAK,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC;IAC/B,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;IACjC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACxD,OAAO,KAAK,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACnD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=helpers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.test.d.ts","sourceRoot":"","sources":["../../src/multisig/helpers.test.ts"],"names":[],"mappings":""}