@shieldedtech/moth-wallet 0.2.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 (230) hide show
  1. package/README.md +62 -0
  2. package/dist/contract/args-parser.d.ts +29 -0
  3. package/dist/contract/args-parser.d.ts.map +1 -0
  4. package/dist/contract/args-parser.js +123 -0
  5. package/dist/contract/args-parser.js.map +1 -0
  6. package/dist/contract/artifact-loader.d.ts +26 -0
  7. package/dist/contract/artifact-loader.d.ts.map +1 -0
  8. package/dist/contract/artifact-loader.js +129 -0
  9. package/dist/contract/artifact-loader.js.map +1 -0
  10. package/dist/contract/call.d.ts +32 -0
  11. package/dist/contract/call.d.ts.map +1 -0
  12. package/dist/contract/call.js +245 -0
  13. package/dist/contract/call.js.map +1 -0
  14. package/dist/contract/deploy.d.ts +36 -0
  15. package/dist/contract/deploy.d.ts.map +1 -0
  16. package/dist/contract/deploy.js +388 -0
  17. package/dist/contract/deploy.js.map +1 -0
  18. package/dist/contract/fungible-token.d.ts +40 -0
  19. package/dist/contract/fungible-token.d.ts.map +1 -0
  20. package/dist/contract/fungible-token.js +88 -0
  21. package/dist/contract/fungible-token.js.map +1 -0
  22. package/dist/contract/initial-private-state.d.ts +18 -0
  23. package/dist/contract/initial-private-state.d.ts.map +1 -0
  24. package/dist/contract/initial-private-state.js +44 -0
  25. package/dist/contract/initial-private-state.js.map +1 -0
  26. package/dist/contract/maintenance.d.ts +72 -0
  27. package/dist/contract/maintenance.d.ts.map +1 -0
  28. package/dist/contract/maintenance.js +430 -0
  29. package/dist/contract/maintenance.js.map +1 -0
  30. package/dist/contract/state.d.ts +16 -0
  31. package/dist/contract/state.d.ts.map +1 -0
  32. package/dist/contract/state.js +18 -0
  33. package/dist/contract/state.js.map +1 -0
  34. package/dist/contract/witness-loader.d.ts +3 -0
  35. package/dist/contract/witness-loader.d.ts.map +1 -0
  36. package/dist/contract/witness-loader.js +27 -0
  37. package/dist/contract/witness-loader.js.map +1 -0
  38. package/dist/daemon/api-keys.d.ts +66 -0
  39. package/dist/daemon/api-keys.d.ts.map +1 -0
  40. package/dist/daemon/api-keys.js +222 -0
  41. package/dist/daemon/api-keys.js.map +1 -0
  42. package/dist/daemon/audit-log.d.ts +65 -0
  43. package/dist/daemon/audit-log.d.ts.map +1 -0
  44. package/dist/daemon/audit-log.js +73 -0
  45. package/dist/daemon/audit-log.js.map +1 -0
  46. package/dist/daemon/client.d.ts +63 -0
  47. package/dist/daemon/client.d.ts.map +1 -0
  48. package/dist/daemon/client.js +214 -0
  49. package/dist/daemon/client.js.map +1 -0
  50. package/dist/daemon/confirmation-queue.d.ts +46 -0
  51. package/dist/daemon/confirmation-queue.d.ts.map +1 -0
  52. package/dist/daemon/confirmation-queue.js +92 -0
  53. package/dist/daemon/confirmation-queue.js.map +1 -0
  54. package/dist/daemon/index.d.ts +23 -0
  55. package/dist/daemon/index.d.ts.map +1 -0
  56. package/dist/daemon/index.js +26 -0
  57. package/dist/daemon/index.js.map +1 -0
  58. package/dist/daemon/protocol.d.ts +40 -0
  59. package/dist/daemon/protocol.d.ts.map +1 -0
  60. package/dist/daemon/protocol.js +104 -0
  61. package/dist/daemon/protocol.js.map +1 -0
  62. package/dist/daemon/server.d.ts +158 -0
  63. package/dist/daemon/server.d.ts.map +1 -0
  64. package/dist/daemon/server.js +297 -0
  65. package/dist/daemon/server.js.map +1 -0
  66. package/dist/daemon/wallet-handlers.d.ts +37 -0
  67. package/dist/daemon/wallet-handlers.d.ts.map +1 -0
  68. package/dist/daemon/wallet-handlers.js +533 -0
  69. package/dist/daemon/wallet-handlers.js.map +1 -0
  70. package/dist/daemon/wallet-rpc-parsers.d.ts +14 -0
  71. package/dist/daemon/wallet-rpc-parsers.d.ts.map +1 -0
  72. package/dist/daemon/wallet-rpc-parsers.js +259 -0
  73. package/dist/daemon/wallet-rpc-parsers.js.map +1 -0
  74. package/dist/daemon/wallet-rpc-types.d.ts +138 -0
  75. package/dist/daemon/wallet-rpc-types.d.ts.map +1 -0
  76. package/dist/daemon/wallet-rpc-types.js +11 -0
  77. package/dist/daemon/wallet-rpc-types.js.map +1 -0
  78. package/dist/diagnostics/fs-timing-store.d.ts +29 -0
  79. package/dist/diagnostics/fs-timing-store.d.ts.map +1 -0
  80. package/dist/diagnostics/fs-timing-store.js +81 -0
  81. package/dist/diagnostics/fs-timing-store.js.map +1 -0
  82. package/dist/diagnostics/timings.d.ts +64 -0
  83. package/dist/diagnostics/timings.d.ts.map +1 -0
  84. package/dist/diagnostics/timings.js +100 -0
  85. package/dist/diagnostics/timings.js.map +1 -0
  86. package/dist/index.d.ts +37 -0
  87. package/dist/index.d.ts.map +1 -0
  88. package/dist/index.js +47 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/network/indexer-client.d.ts +66 -0
  91. package/dist/network/indexer-client.d.ts.map +1 -0
  92. package/dist/network/indexer-client.js +112 -0
  93. package/dist/network/indexer-client.js.map +1 -0
  94. package/dist/network/node-client.d.ts +27 -0
  95. package/dist/network/node-client.d.ts.map +1 -0
  96. package/dist/network/node-client.js +94 -0
  97. package/dist/network/node-client.js.map +1 -0
  98. package/dist/proof/client.d.ts +15 -0
  99. package/dist/proof/client.d.ts.map +1 -0
  100. package/dist/proof/client.js +77 -0
  101. package/dist/proof/client.js.map +1 -0
  102. package/dist/proof/provider.d.ts +12 -0
  103. package/dist/proof/provider.d.ts.map +1 -0
  104. package/dist/proof/provider.js +96 -0
  105. package/dist/proof/provider.js.map +1 -0
  106. package/dist/providers/index.d.ts +2 -0
  107. package/dist/providers/index.d.ts.map +1 -0
  108. package/dist/providers/index.js +2 -0
  109. package/dist/providers/index.js.map +1 -0
  110. package/dist/providers/midnight-provider.d.ts +11 -0
  111. package/dist/providers/midnight-provider.d.ts.map +1 -0
  112. package/dist/providers/midnight-provider.js +30 -0
  113. package/dist/providers/midnight-provider.js.map +1 -0
  114. package/dist/storage/adapter.d.ts +8 -0
  115. package/dist/storage/adapter.d.ts.map +1 -0
  116. package/dist/storage/adapter.js +2 -0
  117. package/dist/storage/adapter.js.map +1 -0
  118. package/dist/storage/fs-adapter.d.ts +14 -0
  119. package/dist/storage/fs-adapter.d.ts.map +1 -0
  120. package/dist/storage/fs-adapter.js +126 -0
  121. package/dist/storage/fs-adapter.js.map +1 -0
  122. package/dist/storage/safe-path.d.ts +13 -0
  123. package/dist/storage/safe-path.d.ts.map +1 -0
  124. package/dist/storage/safe-path.js +35 -0
  125. package/dist/storage/safe-path.js.map +1 -0
  126. package/dist/sync/activity.d.ts +53 -0
  127. package/dist/sync/activity.d.ts.map +1 -0
  128. package/dist/sync/activity.js +92 -0
  129. package/dist/sync/activity.js.map +1 -0
  130. package/dist/sync/dust-registration-estimate.d.ts +54 -0
  131. package/dist/sync/dust-registration-estimate.d.ts.map +1 -0
  132. package/dist/sync/dust-registration-estimate.js +103 -0
  133. package/dist/sync/dust-registration-estimate.js.map +1 -0
  134. package/dist/sync/node-sync-store.d.ts +10 -0
  135. package/dist/sync/node-sync-store.d.ts.map +1 -0
  136. package/dist/sync/node-sync-store.js +42 -0
  137. package/dist/sync/node-sync-store.js.map +1 -0
  138. package/dist/sync/operations.d.ts +138 -0
  139. package/dist/sync/operations.d.ts.map +1 -0
  140. package/dist/sync/operations.js +395 -0
  141. package/dist/sync/operations.js.map +1 -0
  142. package/dist/sync/preseed-parts.d.ts +18 -0
  143. package/dist/sync/preseed-parts.d.ts.map +1 -0
  144. package/dist/sync/preseed-parts.js +33 -0
  145. package/dist/sync/preseed-parts.js.map +1 -0
  146. package/dist/sync/preseed.d.ts +95 -0
  147. package/dist/sync/preseed.d.ts.map +1 -0
  148. package/dist/sync/preseed.js +365 -0
  149. package/dist/sync/preseed.js.map +1 -0
  150. package/dist/sync/progress.d.ts +45 -0
  151. package/dist/sync/progress.d.ts.map +1 -0
  152. package/dist/sync/progress.js +51 -0
  153. package/dist/sync/progress.js.map +1 -0
  154. package/dist/sync/sdk-dedup.d.ts +53 -0
  155. package/dist/sync/sdk-dedup.d.ts.map +1 -0
  156. package/dist/sync/sdk-dedup.js +134 -0
  157. package/dist/sync/sdk-dedup.js.map +1 -0
  158. package/dist/sync/sync-store.d.ts +33 -0
  159. package/dist/sync/sync-store.d.ts.map +1 -0
  160. package/dist/sync/sync-store.js +45 -0
  161. package/dist/sync/sync-store.js.map +1 -0
  162. package/dist/sync/wallet-sync.d.ts +153 -0
  163. package/dist/sync/wallet-sync.d.ts.map +1 -0
  164. package/dist/sync/wallet-sync.js +943 -0
  165. package/dist/sync/wallet-sync.js.map +1 -0
  166. package/dist/types/errors.d.ts +18 -0
  167. package/dist/types/errors.d.ts.map +1 -0
  168. package/dist/types/errors.js +33 -0
  169. package/dist/types/errors.js.map +1 -0
  170. package/dist/types/exit-codes.d.ts +8 -0
  171. package/dist/types/exit-codes.d.ts.map +1 -0
  172. package/dist/types/exit-codes.js +7 -0
  173. package/dist/types/exit-codes.js.map +1 -0
  174. package/dist/types/index.d.ts +6 -0
  175. package/dist/types/index.d.ts.map +1 -0
  176. package/dist/types/index.js +3 -0
  177. package/dist/types/index.js.map +1 -0
  178. package/dist/types/network.d.ts +65 -0
  179. package/dist/types/network.d.ts.map +1 -0
  180. package/dist/types/network.js +108 -0
  181. package/dist/types/network.js.map +1 -0
  182. package/dist/types/tokens.d.ts +3 -0
  183. package/dist/types/tokens.d.ts.map +1 -0
  184. package/dist/types/tokens.js +11 -0
  185. package/dist/types/tokens.js.map +1 -0
  186. package/dist/types/transaction.d.ts +13 -0
  187. package/dist/types/transaction.d.ts.map +1 -0
  188. package/dist/types/transaction.js +2 -0
  189. package/dist/types/transaction.js.map +1 -0
  190. package/dist/types/wallet.d.ts +82 -0
  191. package/dist/types/wallet.d.ts.map +1 -0
  192. package/dist/types/wallet.js +2 -0
  193. package/dist/types/wallet.js.map +1 -0
  194. package/dist/wallet/address-validate.d.ts +7 -0
  195. package/dist/wallet/address-validate.d.ts.map +1 -0
  196. package/dist/wallet/address-validate.js +28 -0
  197. package/dist/wallet/address-validate.js.map +1 -0
  198. package/dist/wallet/address.d.ts +32 -0
  199. package/dist/wallet/address.d.ts.map +1 -0
  200. package/dist/wallet/address.js +107 -0
  201. package/dist/wallet/address.js.map +1 -0
  202. package/dist/wallet/app-secret.d.ts +15 -0
  203. package/dist/wallet/app-secret.d.ts.map +1 -0
  204. package/dist/wallet/app-secret.js +45 -0
  205. package/dist/wallet/app-secret.js.map +1 -0
  206. package/dist/wallet/balance-format.d.ts +12 -0
  207. package/dist/wallet/balance-format.d.ts.map +1 -0
  208. package/dist/wallet/balance-format.js +51 -0
  209. package/dist/wallet/balance-format.js.map +1 -0
  210. package/dist/wallet/batch-transfer.d.ts +36 -0
  211. package/dist/wallet/batch-transfer.d.ts.map +1 -0
  212. package/dist/wallet/batch-transfer.js +93 -0
  213. package/dist/wallet/batch-transfer.js.map +1 -0
  214. package/dist/wallet/keystore.d.ts +16 -0
  215. package/dist/wallet/keystore.d.ts.map +1 -0
  216. package/dist/wallet/keystore.js +76 -0
  217. package/dist/wallet/keystore.js.map +1 -0
  218. package/dist/wallet/manager.d.ts +77 -0
  219. package/dist/wallet/manager.d.ts.map +1 -0
  220. package/dist/wallet/manager.js +474 -0
  221. package/dist/wallet/manager.js.map +1 -0
  222. package/dist/wallet/mnemonic.d.ts +5 -0
  223. package/dist/wallet/mnemonic.d.ts.map +1 -0
  224. package/dist/wallet/mnemonic.js +28 -0
  225. package/dist/wallet/mnemonic.js.map +1 -0
  226. package/dist/wallet/sign-message.d.ts +20 -0
  227. package/dist/wallet/sign-message.d.ts.map +1 -0
  228. package/dist/wallet/sign-message.js +58 -0
  229. package/dist/wallet/sign-message.js.map +1 -0
  230. package/package.json +55 -0
@@ -0,0 +1,533 @@
1
+ // Shared RPC handler factory for the wallet daemon. Both the TUI host
2
+ // (packages/tui/src/hooks/useDaemonHost.ts) and the headless host
3
+ // (packages/cli/src/commands/daemon/serve.ts) call this with the same
4
+ // dependency bundle and get the same Record<string, RpcHandler> back.
5
+ //
6
+ // Until this file existed, each host had its own copy of every
7
+ // handler body. Each new verb meant editing two files in lockstep.
8
+ // This factory takes the verb count from O(2N) edits down to O(N).
9
+ import { resolve as resolvePath } from 'node:path';
10
+ import { pathToFileURL } from 'node:url';
11
+ import { Buffer } from 'node:buffer';
12
+ import * as ledger from '@midnight-ntwrk/ledger-v8';
13
+ import { DaemonProtocolError } from './protocol.js';
14
+ import { parseSubmitTransactionParams, parseTransferTokensParams, parseCallCircuitParams, parseDeployContractParams, parseDustRegisterParams, parseDustDeregisterParams, parseInsertVerifierKeyParams, parseInsertVerifierKeysBatchParams, shortenAddress, shortenHex, } from './wallet-rpc-parsers.js';
15
+ import { sendTokensWithKeys, designateForDustWithKeys, dedesignateFromDustWithKeys } from '../sync/operations.js';
16
+ import { callCircuit } from '../contract/call.js';
17
+ import { deployContract } from '../contract/deploy.js';
18
+ import { insertVerifierKey, insertVerifierKeys } from '../contract/maintenance.js';
19
+ import { loadContractArtifact } from '../contract/artifact-loader.js';
20
+ import { parseArgs, toPositionalArgs } from '../contract/args-parser.js';
21
+ import { resolveInitialPrivateState } from '../contract/initial-private-state.js';
22
+ import { clearSyncCache } from '../sync/wallet-sync.js';
23
+ import { NIGHT_DENOMINATION, formatBalance } from '../wallet/balance-format.js';
24
+ const NIGHT_TOKEN_ID = '0'.repeat(64);
25
+ // callCircuit / deployContract / insertVerifierKey all take a
26
+ // CallOptions-style `keys: DerivedKeys` field that is unused at
27
+ // runtime; we pass an empty stand-in so we don't have to keep the
28
+ // BIP-39 seed available. The actual key material flows via
29
+ // walletKeys. See docs/spec/wallet-service/05-key-management.md
30
+ // D-KM-3.
31
+ const DUMMY_DERIVED_KEYS = {
32
+ nightExternal: new Uint8Array(),
33
+ nightInternal: new Uint8Array(),
34
+ dust: new Uint8Array(),
35
+ zswap: new Uint8Array(),
36
+ metadata: new Uint8Array(),
37
+ };
38
+ /**
39
+ * Build the wallet daemon's RPC handler map. Same map for both hosting
40
+ * sites; differences are entirely in the deps object.
41
+ */
42
+ export function buildWalletHandlers(deps) {
43
+ const { walletName, network, getFacade, getWalletKeys, getBalances, queue } = deps;
44
+ const log = deps.log ?? (() => { });
45
+ const auditLog = deps.auditLog;
46
+ /** Resolve facade + walletKeys or throw INTERNAL_ERROR. */
47
+ const requireReady = () => {
48
+ const facade = getFacade();
49
+ const walletKeys = getWalletKeys();
50
+ if (!facade || !walletKeys) {
51
+ throw new DaemonProtocolError('INTERNAL_ERROR', 'wallet facade not ready — host is still initializing');
52
+ }
53
+ return { facade, walletKeys };
54
+ };
55
+ /** Wrap a section that may throw into an INTERNAL_ERROR with a
56
+ * verb-prefixed message. DaemonProtocolError throws are re-thrown
57
+ * unchanged so handler-side INVALID_PARAMS / UNAUTHORIZED reach
58
+ * the wire intact. */
59
+ const wrap = async (verb, fn) => {
60
+ try {
61
+ return await fn();
62
+ }
63
+ catch (err) {
64
+ if (err instanceof DaemonProtocolError)
65
+ throw err;
66
+ const msg = err instanceof Error ? err.message : String(err);
67
+ throw new DaemonProtocolError('INTERNAL_ERROR', `${verb} failed: ${msg}`);
68
+ }
69
+ };
70
+ /**
71
+ * Single helper that fuses the L3 confirmation step, the wrap()
72
+ * error mapping, and the audit-log emission for every write verb.
73
+ *
74
+ * - Asks the queue for approval; logs `user-denied` and throws
75
+ * UNAUTHORIZED if the user said no.
76
+ * - Tags the decision as `auto-approve` or `user-approve` based on
77
+ * the queue's mode so the audit captures whether a human or the
78
+ * arming flag let it through.
79
+ * - Runs `fn`, then records the resolved outcome — either the
80
+ * result (with optional `extract` for cherry-picking txHash /
81
+ * contractAddress / status) or the error.
82
+ * - Re-throws DaemonProtocolError unchanged; wraps anything else
83
+ * as INTERNAL_ERROR (matching the old `wrap` behavior).
84
+ *
85
+ * Each handler thus becomes a single call:
86
+ *
87
+ * return withAudit(verb, summary, details, async () => {...}, extract);
88
+ *
89
+ * The audit log is optional. When `deps.auditLog` is omitted (e.g.
90
+ * in unit tests), every record() call is a no-op and the surface
91
+ * behaviour is exactly the pre-audit code path.
92
+ */
93
+ const withAudit = async (verb, summary, details, ctx, fn, extract) => {
94
+ // Captures the connection's transport + apiKeyId once at the
95
+ // start of the call so the audit entry survives ctx mutations
96
+ // (e.g. if a sibling auth call landed mid-op, which shouldn't
97
+ // happen with the per-conn lock but is cheap insurance).
98
+ const connTags = ctx
99
+ ? { transport: ctx.remote, apiKeyId: ctx.apiKeyId, connId: ctx.id }
100
+ : {};
101
+ const approved = await queue.request(summary, details);
102
+ if (!approved) {
103
+ auditLog?.recordRpc({
104
+ wallet: walletName,
105
+ network: network.id,
106
+ verb,
107
+ summary,
108
+ details,
109
+ decision: 'user-denied',
110
+ ...connTags,
111
+ });
112
+ throw new DaemonProtocolError('UNAUTHORIZED', `user denied ${verb}`);
113
+ }
114
+ const decision = queue.isAutoApprove ? 'auto-approve' : 'user-approve';
115
+ try {
116
+ const result = await fn();
117
+ const extracted = extract?.(result) ?? {};
118
+ auditLog?.recordRpc({
119
+ wallet: walletName,
120
+ network: network.id,
121
+ verb,
122
+ summary,
123
+ details,
124
+ decision,
125
+ ...extracted,
126
+ ...connTags,
127
+ });
128
+ return result;
129
+ }
130
+ catch (err) {
131
+ const isDaemonErr = err instanceof DaemonProtocolError;
132
+ const code = isDaemonErr ? err.code : 'INTERNAL_ERROR';
133
+ const message = err instanceof Error ? err.message : String(err);
134
+ auditLog?.recordRpc({
135
+ wallet: walletName,
136
+ network: network.id,
137
+ verb,
138
+ summary,
139
+ details,
140
+ decision,
141
+ error: { code, message },
142
+ ...connTags,
143
+ });
144
+ if (isDaemonErr)
145
+ throw err;
146
+ throw new DaemonProtocolError('INTERNAL_ERROR', `${verb} failed: ${message}`);
147
+ }
148
+ };
149
+ const handlers = {
150
+ // ─────────────────────────────────────────────────────────────────
151
+ // getState
152
+ // ─────────────────────────────────────────────────────────────────
153
+ getState: () => {
154
+ const b = getBalances();
155
+ const f = getFacade();
156
+ if (!b || !f)
157
+ return { ready: false };
158
+ return {
159
+ ready: true,
160
+ walletName,
161
+ networkId: network.id,
162
+ synced: b.synced,
163
+ syncProgress: b.syncProgress,
164
+ balances: {
165
+ shielded: serializeBigintRecord(b.shielded),
166
+ unshielded: serializeBigintRecord(b.unshielded),
167
+ dust: b.dust.toString(),
168
+ },
169
+ };
170
+ },
171
+ // ─────────────────────────────────────────────────────────────────
172
+ // clearSyncCache
173
+ // ─────────────────────────────────────────────────────────────────
174
+ clearSyncCache: async (_params, ctx) => {
175
+ return withAudit('clearSyncCache', `Clear sync cache for ${walletName} on ${network.id}?`, [
176
+ 'Removes the local serialized wallet state.',
177
+ 'Next sync will start from genesis (slow).',
178
+ ], ctx, async () => {
179
+ clearSyncCache(walletName, network.id);
180
+ return { cleared: true };
181
+ });
182
+ },
183
+ // ─────────────────────────────────────────────────────────────────
184
+ // submitTransaction
185
+ // ─────────────────────────────────────────────────────────────────
186
+ submitTransaction: async (rawParams, ctx) => {
187
+ const params = parseSubmitTransactionParams(rawParams);
188
+ const { facade } = requireReady();
189
+ return withAudit('submitTransaction', params.summary ?? 'Submit a pre-built transaction', [
190
+ `Wallet: ${walletName}`,
191
+ `Network: ${network.id}`,
192
+ `Tx size: ${Math.floor(params.hex.length / 2)} bytes`,
193
+ ...(params.details ?? []),
194
+ ], ctx, async () => {
195
+ let tx;
196
+ try {
197
+ tx = ledger.Transaction.deserialize('signature', 'proof', 'binding', Buffer.from(params.hex, 'hex'));
198
+ }
199
+ catch (err) {
200
+ const msg = err instanceof Error ? err.message : String(err);
201
+ throw new DaemonProtocolError('INVALID_PARAMS', `failed to deserialize hex as FinalizedTransaction: ${msg}`);
202
+ }
203
+ const txId = await facade.submitTransaction(tx);
204
+ return { txId: String(txId) };
205
+ }, (r) => ({ txHash: r.txId }));
206
+ },
207
+ // ─────────────────────────────────────────────────────────────────
208
+ // transferTokens
209
+ // ─────────────────────────────────────────────────────────────────
210
+ transferTokens: async (rawParams, ctx) => {
211
+ const params = parseTransferTokensParams(rawParams);
212
+ const { facade, walletKeys } = requireReady();
213
+ const amountBig = BigInt(params.amount);
214
+ const amountLabel = params.tokenId === NIGHT_TOKEN_ID
215
+ ? `${formatBalance(amountBig, NIGHT_DENOMINATION)} NIGHT`
216
+ : `${params.amount} raw (token ${shortenHex(params.tokenId)})`;
217
+ const toLabel = shortenAddress(params.to);
218
+ return withAudit('transferTokens', params.summary ?? `Send ${amountLabel} to ${toLabel}`, [
219
+ `Wallet: ${walletName}`,
220
+ `Network: ${network.id}`,
221
+ `Type: ${params.type}`,
222
+ `Token: ${params.tokenId === NIGHT_TOKEN_ID ? 'NIGHT' : params.tokenId}`,
223
+ `Recipient: ${params.to}`,
224
+ `Amount: ${amountLabel}`,
225
+ ...(deps.maxSpendRaw !== undefined
226
+ ? [`Spend cap: ${formatBalance(deps.maxSpendRaw, NIGHT_DENOMINATION)} NIGHT per transfer`]
227
+ : []),
228
+ ...(params.details ?? []),
229
+ ], ctx, async () => {
230
+ // Headless spend cap: with no human to approve, a NIGHT transfer
231
+ // above the operator-set --max-spend is refused. Recorded as a
232
+ // failed decision in the audit log via withAudit's catch.
233
+ if (deps.maxSpendRaw !== undefined &&
234
+ params.tokenId === NIGHT_TOKEN_ID &&
235
+ amountBig > deps.maxSpendRaw) {
236
+ throw new DaemonProtocolError('UNAUTHORIZED', `transfer of ${amountLabel} exceeds the --max-spend cap of ${formatBalance(deps.maxSpendRaw, NIGHT_DENOMINATION)} NIGHT`);
237
+ }
238
+ const txId = await sendTokensWithKeys(facade, walletKeys, network.id, [{
239
+ type: params.type,
240
+ tokenId: params.tokenId,
241
+ amount: amountBig,
242
+ to: params.to,
243
+ }], (stage) => log('info', `[transferTokens] ${stage}`));
244
+ return { txId: String(txId) };
245
+ }, (r) => ({ txHash: r.txId }));
246
+ },
247
+ // ─────────────────────────────────────────────────────────────────
248
+ // callCircuit
249
+ // ─────────────────────────────────────────────────────────────────
250
+ callCircuit: async (rawParams, ctx) => {
251
+ const params = parseCallCircuitParams(rawParams);
252
+ const { facade, walletKeys } = requireReady();
253
+ const artifactAbs = resolvePath(params.artifactPath);
254
+ const witnessesAbs = params.witnessesPath ? resolvePath(params.witnessesPath) : undefined;
255
+ let artifact;
256
+ try {
257
+ artifact = await loadContractArtifact(artifactAbs);
258
+ }
259
+ catch (err) {
260
+ const msg = err instanceof Error ? err.message : String(err);
261
+ throw new DaemonProtocolError('INVALID_PARAMS', `failed to load artifact at ${artifactAbs}: ${msg}`);
262
+ }
263
+ if (!artifact.circuits.includes(params.circuitName)) {
264
+ throw new DaemonProtocolError('INVALID_PARAMS', `artifact has no circuit named "${params.circuitName}". Available: ${artifact.circuits.join(', ')}`);
265
+ }
266
+ const circuitArgs = params.args ? await parseArgs(params.args) : {};
267
+ return withAudit('callCircuit', params.summary ?? `Call ${params.circuitName} on ${shortenAddress(params.contractAddress)}`, [
268
+ `Wallet: ${walletName}`,
269
+ `Network: ${network.id}`,
270
+ `Contract: ${params.contractAddress}`,
271
+ `Circuit: ${params.circuitName}`,
272
+ `Artifact: ${artifact.path}`,
273
+ witnessesAbs ? `Witnesses: ${witnessesAbs}` : 'Witnesses: (none)',
274
+ `Args: ${params.args ?? '(none)'}`,
275
+ ...(params.details ?? []),
276
+ ], ctx, async () => {
277
+ // Witness provider lives on the daemon-host filesystem;
278
+ // import here so we can include it in the CallOptions below.
279
+ let witnesses;
280
+ if (witnessesAbs) {
281
+ try {
282
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
283
+ const mod = (await import(pathToFileURL(witnessesAbs).href));
284
+ witnesses = mod.default ?? mod;
285
+ }
286
+ catch (err) {
287
+ const msg = err instanceof Error ? err.message : String(err);
288
+ throw new DaemonProtocolError('INTERNAL_ERROR', `failed to import witnesses module at ${witnessesAbs}: ${msg}`);
289
+ }
290
+ }
291
+ const syncedWalletShim = { facade };
292
+ const result = await callCircuit({
293
+ contractAddress: params.contractAddress,
294
+ circuitName: params.circuitName,
295
+ args: circuitArgs,
296
+ keys: DUMMY_DERIVED_KEYS,
297
+ walletKeys,
298
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
299
+ witnesses: witnesses,
300
+ network,
301
+ artifactPath: artifact.path,
302
+ syncedWallet: syncedWalletShim,
303
+ projectDir: params.projectDir ? resolvePath(params.projectDir) : undefined,
304
+ timeoutMs: params.timeoutSec ? params.timeoutSec * 1000 : 120_000,
305
+ });
306
+ return flattenTxResult(result);
307
+ }, (r) => ({
308
+ txHash: r.txHash,
309
+ contractAddress: r.contractAddress ?? undefined,
310
+ status: r.status,
311
+ }));
312
+ },
313
+ // ─────────────────────────────────────────────────────────────────
314
+ // deployContract
315
+ // ─────────────────────────────────────────────────────────────────
316
+ deployContract: async (rawParams, ctx) => {
317
+ const params = parseDeployContractParams(rawParams);
318
+ const { facade, walletKeys } = requireReady();
319
+ const artifactAbs = resolvePath(params.artifactPath);
320
+ const witnessesAbs = params.witnessesPath ? resolvePath(params.witnessesPath) : undefined;
321
+ let artifact;
322
+ try {
323
+ artifact = await loadContractArtifact(artifactAbs);
324
+ }
325
+ catch (err) {
326
+ const msg = err instanceof Error ? err.message : String(err);
327
+ throw new DaemonProtocolError('INVALID_PARAMS', `failed to load artifact at ${artifactAbs}: ${msg}`);
328
+ }
329
+ return withAudit('deployContract', params.summary ?? `Deploy contract from ${shortenAddress(artifact.path)}`, [
330
+ `Wallet: ${walletName}`,
331
+ `Network: ${network.id}`,
332
+ `Artifact: ${artifact.path}`,
333
+ `Circuits: ${artifact.circuits.length} (${artifact.circuits.slice(0, 5).join(', ')}${artifact.circuits.length > 5 ? ', …' : ''})`,
334
+ witnessesAbs ? `Witnesses: ${witnessesAbs}` : 'Witnesses: (none)',
335
+ `Constructor args: ${params.args ?? '(none)'}`,
336
+ ...(params.details ?? []),
337
+ ], ctx, async () => {
338
+ // Forward constructor args + initial private state, mirroring the
339
+ // in-process `moth deploy` path (same JSON conventions via parseArgs).
340
+ const constructorArgs = toPositionalArgs(params.args ? await parseArgs(params.args) : undefined);
341
+ const initialPrivateState = await resolveInitialPrivateState(params.privateState, witnessesAbs, { onVerbose: (m) => log('info', `[deployContract] ${m}`) });
342
+ const syncedWalletShim = { facade };
343
+ const result = await deployContract({
344
+ artifact,
345
+ walletKeys,
346
+ network,
347
+ syncedWallet: syncedWalletShim,
348
+ witnessPath: witnessesAbs,
349
+ projectDir: params.projectDir ? resolvePath(params.projectDir) : undefined,
350
+ timeoutMs: params.timeoutSec ? params.timeoutSec * 1000 : 120_000,
351
+ args: constructorArgs,
352
+ initialPrivateState,
353
+ onProgress: (stage) => log('info', `[deployContract] ${stage}`),
354
+ });
355
+ return flattenTxResult(result);
356
+ }, (r) => ({
357
+ txHash: r.txHash,
358
+ contractAddress: r.contractAddress ?? undefined,
359
+ status: r.status,
360
+ }));
361
+ },
362
+ // ─────────────────────────────────────────────────────────────────
363
+ // dustRegister / dustDeregister
364
+ // ─────────────────────────────────────────────────────────────────
365
+ dustRegister: async (rawParams, ctx) => {
366
+ const params = parseDustRegisterParams(rawParams);
367
+ const { facade, walletKeys } = requireReady();
368
+ return withAudit('dustRegister', params.summary ?? 'Register NIGHT UTXOs for DUST generation', [
369
+ `Wallet: ${walletName}`,
370
+ `Network: ${network.id}`,
371
+ params.receiver ? `Dust receiver: ${params.receiver}` : 'Dust receiver: (this wallet)',
372
+ 'Scope: every currently-unregistered NIGHT UTXO',
373
+ ...(params.details ?? []),
374
+ ], ctx, async () => {
375
+ const txId = await designateForDustWithKeys(facade, walletKeys, network.id, params.receiver, (stage) => log('info', `[dustRegister] ${stage}`));
376
+ return { txId, registered: txId !== null };
377
+ }, (r) => ({ txHash: r.txId ?? undefined }));
378
+ },
379
+ dustDeregister: async (rawParams, ctx) => {
380
+ const params = parseDustDeregisterParams(rawParams);
381
+ const { facade, walletKeys } = requireReady();
382
+ return withAudit('dustDeregister', params.summary ?? 'Deregister NIGHT UTXOs from DUST generation', [
383
+ `Wallet: ${walletName}`,
384
+ `Network: ${network.id}`,
385
+ 'Scope: every currently-registered NIGHT UTXO',
386
+ 'Effect: DUST will stop generating from these UTXOs.',
387
+ ...(params.details ?? []),
388
+ ], ctx, async () => {
389
+ try {
390
+ const txId = await dedesignateFromDustWithKeys(facade, walletKeys, network.id, (stage) => log('info', `[dustDeregister] ${stage}`));
391
+ return { txId };
392
+ }
393
+ catch (err) {
394
+ const msg = err instanceof Error ? err.message : String(err);
395
+ // Map the core's plain-Error "nothing to deregister"
396
+ // condition onto INVALID_PARAMS so the CLI renders
397
+ // INVALID_INPUT.
398
+ if (msg.includes('No registered NIGHT UTXOs')) {
399
+ throw new DaemonProtocolError('INVALID_PARAMS', msg);
400
+ }
401
+ // Anything else: let withAudit's catch wrap it as
402
+ // INTERNAL_ERROR (same shape as the old wrap() path).
403
+ throw err;
404
+ }
405
+ }, (r) => ({ txHash: r.txId }));
406
+ },
407
+ // ─────────────────────────────────────────────────────────────────
408
+ // insertVerifierKey / insertVerifierKeysBatch
409
+ // ─────────────────────────────────────────────────────────────────
410
+ insertVerifierKey: async (rawParams, ctx) => {
411
+ const params = parseInsertVerifierKeyParams(rawParams);
412
+ const { facade, walletKeys } = requireReady();
413
+ const artifactAbs = resolvePath(params.artifactPath);
414
+ const vkAbs = resolvePath(params.verifierKeyPath);
415
+ let artifact;
416
+ try {
417
+ artifact = await loadContractArtifact(artifactAbs);
418
+ }
419
+ catch (err) {
420
+ const msg = err instanceof Error ? err.message : String(err);
421
+ throw new DaemonProtocolError('INVALID_PARAMS', `failed to load artifact at ${artifactAbs}: ${msg}`);
422
+ }
423
+ if (!artifact.circuits.includes(params.circuitId)) {
424
+ throw new DaemonProtocolError('INVALID_PARAMS', `artifact has no circuit named "${params.circuitId}". Available: ${artifact.circuits.join(', ')}`);
425
+ }
426
+ return withAudit('insertVerifierKey', params.summary ?? `Insert verifier key for ${params.circuitId} on ${shortenAddress(params.contractAddress)}`, [
427
+ `Wallet: ${walletName}`,
428
+ `Network: ${network.id}`,
429
+ `Contract: ${params.contractAddress}`,
430
+ `Circuit: ${params.circuitId}`,
431
+ `Artifact: ${artifact.path}`,
432
+ `VK file: ${vkAbs}`,
433
+ ...(params.details ?? []),
434
+ ], ctx, async () => {
435
+ const syncedWalletShim = { facade };
436
+ const result = await insertVerifierKey({
437
+ contractAddress: params.contractAddress,
438
+ circuitId: params.circuitId,
439
+ verifierKeyPath: vkAbs,
440
+ keys: DUMMY_DERIVED_KEYS,
441
+ walletKeys,
442
+ network,
443
+ artifactPath: artifact.path,
444
+ syncedWallet: syncedWalletShim,
445
+ projectDir: params.projectDir ? resolvePath(params.projectDir) : undefined,
446
+ timeoutMs: params.timeoutSec ? params.timeoutSec * 1000 : 120_000,
447
+ });
448
+ return flattenTxResult(result);
449
+ }, (r) => ({ txHash: r.txHash, status: r.status }));
450
+ },
451
+ insertVerifierKeysBatch: async (rawParams, ctx) => {
452
+ const params = parseInsertVerifierKeysBatchParams(rawParams);
453
+ const { facade, walletKeys } = requireReady();
454
+ const artifactAbs = resolvePath(params.artifactPath);
455
+ let artifact;
456
+ try {
457
+ artifact = await loadContractArtifact(artifactAbs);
458
+ }
459
+ catch (err) {
460
+ const msg = err instanceof Error ? err.message : String(err);
461
+ throw new DaemonProtocolError('INVALID_PARAMS', `failed to load artifact at ${artifactAbs}: ${msg}`);
462
+ }
463
+ for (const e of params.entries) {
464
+ if (!artifact.circuits.includes(e.circuitId)) {
465
+ throw new DaemonProtocolError('INVALID_PARAMS', `artifact has no circuit named "${e.circuitId}". Available: ${artifact.circuits.join(', ')}`);
466
+ }
467
+ }
468
+ return withAudit('insertVerifierKeysBatch', params.summary ?? `Batch-insert ${params.entries.length} verifier key${params.entries.length === 1 ? '' : 's'} on ${shortenAddress(params.contractAddress)}`, [
469
+ `Wallet: ${walletName}`,
470
+ `Network: ${network.id}`,
471
+ `Contract: ${params.contractAddress}`,
472
+ `Artifact: ${artifact.path}`,
473
+ `Circuits: ${params.entries.map((e) => e.circuitId).join(', ')}`,
474
+ params.skipExisting ? 'Mode: skip-already-defined' : 'Mode: insert all',
475
+ ...(params.details ?? []),
476
+ ], ctx, async () => {
477
+ const syncedWalletShim = { facade };
478
+ const entries = params.entries.map((e) => ({
479
+ circuitId: e.circuitId,
480
+ verifierKeyPath: resolvePath(e.verifierKeyPath),
481
+ }));
482
+ const result = await insertVerifierKeys({
483
+ contractAddress: params.contractAddress,
484
+ entries,
485
+ keys: DUMMY_DERIVED_KEYS,
486
+ walletKeys,
487
+ network,
488
+ artifactPath: artifact.path,
489
+ syncedWallet: syncedWalletShim,
490
+ projectDir: params.projectDir ? resolvePath(params.projectDir) : undefined,
491
+ skipExisting: params.skipExisting,
492
+ timeoutMs: params.timeoutSec ? params.timeoutSec * 1000 : 120_000,
493
+ onProgress: (e) => log('info', `[insertVerifierKeys] ${e.circuitId}: ${e.status}${e.txHash ? ` tx=${e.txHash}` : ''}`),
494
+ });
495
+ return {
496
+ contractAddress: result.contractAddress,
497
+ total: result.total,
498
+ inserted: result.inserted,
499
+ skipped: result.skipped,
500
+ failed: result.failed,
501
+ entries: result.entries,
502
+ };
503
+ }, (r) => ({
504
+ contractAddress: r.contractAddress,
505
+ status: `${r.inserted}/${r.total} inserted (${r.skipped} skipped, ${r.failed} failed)`,
506
+ }));
507
+ },
508
+ };
509
+ // Scope annotations. `getState` is the only read-class verb today;
510
+ // everything else implicitly gets the server's default of 'write'.
511
+ // Adding a new read-only verb? Tag it here so a read-scope key can
512
+ // call it. Adding a write verb? Don't bother — the default already
513
+ // covers it.
514
+ handlers.getState.scope = 'read';
515
+ return handlers;
516
+ }
517
+ function serializeBigintRecord(r) {
518
+ const out = {};
519
+ for (const [k, v] of Object.entries(r))
520
+ out[k] = v.toString();
521
+ return out;
522
+ }
523
+ function flattenTxResult(r) {
524
+ return {
525
+ txHash: r.hash,
526
+ status: r.status,
527
+ blockHash: r.blockHash,
528
+ blockHeight: r.blockHeight,
529
+ contractAddress: r.contractAddress,
530
+ fees: r.fees,
531
+ };
532
+ }
533
+ //# sourceMappingURL=wallet-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-handlers.js","sourceRoot":"","sources":["../../src/daemon/wallet-handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { DaemonCallCircuitParams, DaemonDeployContractParams, DaemonDustDeregisterParams, DaemonDustRegisterParams, DaemonInsertVerifierKeyParams, DaemonInsertVerifierKeysBatchParams, DaemonSubmitTransactionParams, DaemonTransferTokensParams } from './wallet-rpc-types.js';
2
+ /** Truncate a hex string to <prefix>…<suffix>. */
3
+ export declare function shortenHex(hex: string): string;
4
+ /** Truncate a bech32m-style address. */
5
+ export declare function shortenAddress(addr: string): string;
6
+ export declare function parseSubmitTransactionParams(raw: unknown): DaemonSubmitTransactionParams;
7
+ export declare function parseTransferTokensParams(raw: unknown): DaemonTransferTokensParams;
8
+ export declare function parseCallCircuitParams(raw: unknown): DaemonCallCircuitParams;
9
+ export declare function parseDeployContractParams(raw: unknown): DaemonDeployContractParams;
10
+ export declare function parseDustRegisterParams(raw: unknown): DaemonDustRegisterParams;
11
+ export declare function parseDustDeregisterParams(raw: unknown): DaemonDustDeregisterParams;
12
+ export declare function parseInsertVerifierKeyParams(raw: unknown): DaemonInsertVerifierKeyParams;
13
+ export declare function parseInsertVerifierKeysBatchParams(raw: unknown): DaemonInsertVerifierKeysBatchParams;
14
+ //# sourceMappingURL=wallet-rpc-parsers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-rpc-parsers.d.ts","sourceRoot":"","sources":["../../src/daemon/wallet-rpc-parsers.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,uBAAuB,EACvB,0BAA0B,EAC1B,0BAA0B,EAC1B,wBAAwB,EACxB,6BAA6B,EAC7B,mCAAmC,EACnC,6BAA6B,EAC7B,0BAA0B,EAC3B,MAAM,uBAAuB,CAAC;AA8B/B,kDAAkD;AAClD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG9C;AAED,wCAAwC;AACxC,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnD;AAMD,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,OAAO,GAAG,6BAA6B,CAcxF;AAMD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,0BAA0B,CAuClF;AAMD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,uBAAuB,CA2B5E;AAMD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,0BAA0B,CAmBlF;AAMD,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,GAAG,wBAAwB,CAe9E;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,0BAA0B,CAUlF;AAMD,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,OAAO,GAAG,6BAA6B,CA2BxF;AAED,wBAAgB,kCAAkC,CAAC,GAAG,EAAE,OAAO,GAAG,mCAAmC,CAqCpG"}