@unlink-xyz/core 0.1.2 → 0.1.3-canary.06c36a8

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 (348) hide show
  1. package/dist/account/{zkAccount.d.ts → account.d.ts} +7 -5
  2. package/dist/account/account.d.ts.map +1 -0
  3. package/dist/account/{zkAccount.js → account.js} +57 -43
  4. package/dist/browser/index.js +108267 -0
  5. package/dist/browser/index.js.map +1 -0
  6. package/dist/circuits.json +74 -0
  7. package/dist/clients/broadcaster.d.ts +7 -2
  8. package/dist/clients/broadcaster.d.ts.map +1 -1
  9. package/dist/clients/broadcaster.js +9 -1
  10. package/dist/clients/http.d.ts +6 -0
  11. package/dist/clients/http.d.ts.map +1 -1
  12. package/dist/clients/http.js +24 -9
  13. package/dist/clients/indexer.d.ts +11 -0
  14. package/dist/clients/indexer.d.ts.map +1 -1
  15. package/dist/clients/indexer.js +40 -11
  16. package/dist/config.d.ts +28 -9
  17. package/dist/config.d.ts.map +1 -1
  18. package/dist/config.js +33 -26
  19. package/dist/constants.d.ts +6 -0
  20. package/dist/constants.d.ts.map +1 -0
  21. package/dist/constants.js +5 -0
  22. package/dist/core.d.ts.map +1 -1
  23. package/dist/core.js +5 -2
  24. package/dist/crypto-adapters/auto-init.d.ts +2 -0
  25. package/dist/crypto-adapters/auto-init.d.ts.map +1 -0
  26. package/dist/crypto-adapters/auto-init.js +7 -0
  27. package/dist/crypto-adapters/index.d.ts +22 -0
  28. package/dist/crypto-adapters/index.d.ts.map +1 -0
  29. package/dist/crypto-adapters/index.js +47 -0
  30. package/dist/crypto-adapters/polyfills.d.ts +5 -0
  31. package/dist/crypto-adapters/polyfills.d.ts.map +1 -0
  32. package/dist/crypto-adapters/polyfills.js +8 -0
  33. package/dist/errors.d.ts +9 -0
  34. package/dist/errors.d.ts.map +1 -1
  35. package/dist/errors.js +18 -0
  36. package/dist/history/index.d.ts +3 -0
  37. package/dist/history/index.d.ts.map +1 -0
  38. package/dist/history/index.js +2 -0
  39. package/dist/history/service.d.ts +46 -0
  40. package/dist/history/service.d.ts.map +1 -0
  41. package/dist/history/service.js +354 -0
  42. package/dist/history/types.d.ts +21 -0
  43. package/dist/history/types.d.ts.map +1 -0
  44. package/dist/index.d.ts +14 -5
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +14 -4
  47. package/dist/keys/address.d.ts +13 -0
  48. package/dist/keys/address.d.ts.map +1 -0
  49. package/dist/keys/address.js +55 -0
  50. package/dist/keys/derive.d.ts +37 -0
  51. package/dist/keys/derive.d.ts.map +1 -0
  52. package/dist/keys/derive.js +112 -0
  53. package/dist/keys/hex.d.ts +17 -0
  54. package/dist/keys/hex.d.ts.map +1 -0
  55. package/dist/keys/hex.js +66 -0
  56. package/dist/keys/index.d.ts +5 -0
  57. package/dist/keys/index.d.ts.map +1 -0
  58. package/dist/keys/index.js +4 -0
  59. package/dist/keys/mnemonic.d.ts +8 -0
  60. package/dist/keys/mnemonic.d.ts.map +1 -0
  61. package/dist/keys/mnemonic.js +23 -0
  62. package/dist/keys.d.ts +4 -1
  63. package/dist/keys.d.ts.map +1 -1
  64. package/dist/keys.js +4 -0
  65. package/dist/prover/config.d.ts +1 -15
  66. package/dist/prover/config.d.ts.map +1 -1
  67. package/dist/prover/config.js +1 -11
  68. package/dist/prover/prover.d.ts +15 -4
  69. package/dist/prover/prover.d.ts.map +1 -1
  70. package/dist/prover/prover.js +115 -98
  71. package/dist/prover/registry.d.ts +2 -2
  72. package/dist/prover/registry.d.ts.map +1 -1
  73. package/dist/prover/registry.js +62 -14
  74. package/dist/state/merkle/hydrator.d.ts.map +1 -1
  75. package/dist/state/merkle/hydrator.js +3 -2
  76. package/dist/state/merkle/index.d.ts +1 -1
  77. package/dist/state/merkle/index.d.ts.map +1 -1
  78. package/dist/state/merkle/index.js +1 -1
  79. package/dist/state/merkle/merkle-tree.d.ts +8 -0
  80. package/dist/state/merkle/merkle-tree.d.ts.map +1 -1
  81. package/dist/state/merkle/merkle-tree.js +16 -7
  82. package/dist/state/store/ciphertext-store.d.ts +4 -0
  83. package/dist/state/store/ciphertext-store.d.ts.map +1 -1
  84. package/dist/state/store/ciphertext-store.js +12 -0
  85. package/dist/state/store/history-store.d.ts +24 -0
  86. package/dist/state/store/history-store.d.ts.map +1 -0
  87. package/dist/state/store/history-store.js +53 -0
  88. package/dist/state/store/index.d.ts +3 -2
  89. package/dist/state/store/index.d.ts.map +1 -1
  90. package/dist/state/store/index.js +1 -0
  91. package/dist/state/store/job-store.d.ts +7 -7
  92. package/dist/state/store/job-store.d.ts.map +1 -1
  93. package/dist/state/store/job-store.js +65 -39
  94. package/dist/state/store/jobs.d.ts +65 -18
  95. package/dist/state/store/jobs.d.ts.map +1 -1
  96. package/dist/state/store/leaf-store.d.ts.map +1 -1
  97. package/dist/state/store/leaf-store.js +0 -3
  98. package/dist/state/store/note-store.d.ts +7 -7
  99. package/dist/state/store/note-store.d.ts.map +1 -1
  100. package/dist/state/store/note-store.js +38 -34
  101. package/dist/state/store/nullifier-store.d.ts +9 -0
  102. package/dist/state/store/nullifier-store.d.ts.map +1 -1
  103. package/dist/state/store/nullifier-store.js +32 -2
  104. package/dist/state/store/records.d.ts +31 -2
  105. package/dist/state/store/records.d.ts.map +1 -1
  106. package/dist/state/store/root-store.d.ts.map +1 -1
  107. package/dist/state/store/root-store.js +0 -4
  108. package/dist/state/store/store.d.ts +61 -27
  109. package/dist/state/store/store.d.ts.map +1 -1
  110. package/dist/state/store/store.js +92 -1
  111. package/dist/storage/memory.d.ts.map +1 -1
  112. package/dist/storage/memory.js +5 -1
  113. package/dist/transactions/deposit.d.ts +12 -15
  114. package/dist/transactions/deposit.d.ts.map +1 -1
  115. package/dist/transactions/deposit.js +203 -152
  116. package/dist/transactions/index.d.ts +7 -4
  117. package/dist/transactions/index.d.ts.map +1 -1
  118. package/dist/transactions/index.js +7 -2
  119. package/dist/transactions/note-selection.d.ts +17 -0
  120. package/dist/transactions/note-selection.d.ts.map +1 -0
  121. package/dist/transactions/note-selection.js +201 -0
  122. package/dist/transactions/note-sync.d.ts +5 -33
  123. package/dist/transactions/note-sync.d.ts.map +1 -1
  124. package/dist/transactions/note-sync.js +320 -155
  125. package/dist/transactions/reconcile.d.ts +10 -12
  126. package/dist/transactions/reconcile.d.ts.map +1 -1
  127. package/dist/transactions/reconcile.js +53 -7
  128. package/dist/transactions/transact.d.ts +13 -24
  129. package/dist/transactions/transact.d.ts.map +1 -1
  130. package/dist/transactions/transact.js +393 -507
  131. package/dist/transactions/transaction-planner.d.ts +34 -0
  132. package/dist/transactions/transaction-planner.d.ts.map +1 -0
  133. package/dist/transactions/transaction-planner.js +116 -0
  134. package/dist/transactions/transfer-planner.d.ts +36 -0
  135. package/dist/transactions/transfer-planner.d.ts.map +1 -0
  136. package/dist/transactions/transfer-planner.js +85 -0
  137. package/dist/transactions/types/deposit.d.ts +67 -0
  138. package/dist/transactions/types/deposit.d.ts.map +1 -0
  139. package/dist/transactions/types/domain.d.ts +67 -0
  140. package/dist/transactions/types/domain.d.ts.map +1 -0
  141. package/dist/transactions/types/domain.js +4 -0
  142. package/dist/transactions/types/index.d.ts +18 -0
  143. package/dist/transactions/types/index.d.ts.map +1 -0
  144. package/dist/transactions/types/index.js +17 -0
  145. package/dist/transactions/types/options.d.ts +45 -0
  146. package/dist/transactions/types/options.d.ts.map +1 -0
  147. package/dist/transactions/types/options.js +1 -0
  148. package/dist/transactions/types/planning.d.ts +80 -0
  149. package/dist/transactions/types/planning.d.ts.map +1 -0
  150. package/dist/transactions/types/planning.js +1 -0
  151. package/dist/transactions/types/state-stores.d.ts +103 -0
  152. package/dist/transactions/types/state-stores.d.ts.map +1 -0
  153. package/dist/transactions/types/state-stores.js +1 -0
  154. package/dist/transactions/types/transact.d.ts +76 -0
  155. package/dist/transactions/types/transact.d.ts.map +1 -0
  156. package/dist/transactions/types/transact.js +1 -0
  157. package/dist/transactions/withdrawal-planner.d.ts +58 -0
  158. package/dist/transactions/withdrawal-planner.d.ts.map +1 -0
  159. package/dist/transactions/withdrawal-planner.js +128 -0
  160. package/dist/tsconfig.tsbuildinfo +1 -1
  161. package/dist/tsup.browser.config.d.ts +7 -0
  162. package/dist/tsup.browser.config.d.ts.map +1 -0
  163. package/dist/tsup.browser.config.js +34 -0
  164. package/dist/utils/amounts.d.ts +39 -0
  165. package/dist/utils/amounts.d.ts.map +1 -0
  166. package/dist/utils/amounts.js +89 -0
  167. package/dist/utils/async.d.ts +9 -0
  168. package/dist/utils/async.d.ts.map +1 -1
  169. package/dist/utils/async.js +24 -0
  170. package/dist/utils/bigint.js +7 -7
  171. package/dist/utils/crypto.d.ts +11 -5
  172. package/dist/utils/crypto.d.ts.map +1 -1
  173. package/dist/utils/crypto.js +12 -6
  174. package/dist/utils/format.d.ts +25 -0
  175. package/dist/utils/format.d.ts.map +1 -0
  176. package/dist/utils/format.js +33 -0
  177. package/dist/utils/notes.d.ts +15 -0
  178. package/dist/utils/notes.d.ts.map +1 -0
  179. package/dist/utils/notes.js +14 -0
  180. package/dist/utils/polling.d.ts +5 -0
  181. package/dist/utils/polling.d.ts.map +1 -1
  182. package/dist/utils/polling.js +5 -0
  183. package/dist/utils/random.d.ts +13 -0
  184. package/dist/utils/random.d.ts.map +1 -0
  185. package/dist/utils/random.js +27 -0
  186. package/dist/utils/secure-memory.d.ts +25 -0
  187. package/dist/utils/secure-memory.d.ts.map +1 -0
  188. package/dist/utils/secure-memory.js +28 -0
  189. package/dist/utils/signature.d.ts +6 -0
  190. package/dist/utils/signature.d.ts.map +1 -1
  191. package/dist/utils/signature.js +8 -6
  192. package/dist/utils/validators.d.ts +21 -10
  193. package/dist/utils/validators.d.ts.map +1 -1
  194. package/dist/utils/validators.js +37 -11
  195. package/dist/vitest.config.d.ts +3 -0
  196. package/dist/vitest.config.d.ts.map +1 -0
  197. package/dist/vitest.config.js +13 -0
  198. package/package.json +27 -7
  199. package/.eslintrc.json +0 -4
  200. package/account/zkAccount.test.ts +0 -316
  201. package/account/zkAccount.ts +0 -222
  202. package/clients/broadcaster.ts +0 -67
  203. package/clients/http.ts +0 -94
  204. package/clients/indexer.ts +0 -150
  205. package/config.ts +0 -39
  206. package/core.ts +0 -17
  207. package/dist/account/railgun-imports-prototype.d.ts +0 -12
  208. package/dist/account/railgun-imports-prototype.d.ts.map +0 -1
  209. package/dist/account/railgun-imports-prototype.js +0 -30
  210. package/dist/account/zkAccount.d.ts.map +0 -1
  211. package/dist/key-derivation/babyjubjub.d.ts +0 -9
  212. package/dist/key-derivation/babyjubjub.d.ts.map +0 -1
  213. package/dist/key-derivation/babyjubjub.js +0 -9
  214. package/dist/key-derivation/bech32.d.ts +0 -22
  215. package/dist/key-derivation/bech32.d.ts.map +0 -1
  216. package/dist/key-derivation/bech32.js +0 -86
  217. package/dist/key-derivation/bip32.d.ts +0 -17
  218. package/dist/key-derivation/bip32.d.ts.map +0 -1
  219. package/dist/key-derivation/bip32.js +0 -41
  220. package/dist/key-derivation/bip39.d.ts +0 -22
  221. package/dist/key-derivation/bip39.d.ts.map +0 -1
  222. package/dist/key-derivation/bip39.js +0 -56
  223. package/dist/key-derivation/bytes.d.ts +0 -19
  224. package/dist/key-derivation/bytes.d.ts.map +0 -1
  225. package/dist/key-derivation/bytes.js +0 -92
  226. package/dist/key-derivation/hash.d.ts +0 -3
  227. package/dist/key-derivation/hash.d.ts.map +0 -1
  228. package/dist/key-derivation/hash.js +0 -10
  229. package/dist/key-derivation/index.d.ts +0 -8
  230. package/dist/key-derivation/index.d.ts.map +0 -1
  231. package/dist/key-derivation/index.js +0 -7
  232. package/dist/key-derivation/wallet-node.d.ts +0 -45
  233. package/dist/key-derivation/wallet-node.d.ts.map +0 -1
  234. package/dist/key-derivation/wallet-node.js +0 -109
  235. package/dist/state/ciphertext-store.d.ts +0 -12
  236. package/dist/state/ciphertext-store.d.ts.map +0 -1
  237. package/dist/state/ciphertext-store.js +0 -25
  238. package/dist/state/hydrator.d.ts +0 -16
  239. package/dist/state/hydrator.d.ts.map +0 -1
  240. package/dist/state/hydrator.js +0 -18
  241. package/dist/state/job-store.d.ts +0 -12
  242. package/dist/state/job-store.d.ts.map +0 -1
  243. package/dist/state/job-store.js +0 -118
  244. package/dist/state/jobs.d.ts +0 -50
  245. package/dist/state/jobs.d.ts.map +0 -1
  246. package/dist/state/jobs.js +0 -1
  247. package/dist/state/leaf-store.d.ts +0 -17
  248. package/dist/state/leaf-store.d.ts.map +0 -1
  249. package/dist/state/leaf-store.js +0 -35
  250. package/dist/state/merkle-tree.d.ts +0 -34
  251. package/dist/state/merkle-tree.d.ts.map +0 -1
  252. package/dist/state/merkle-tree.js +0 -104
  253. package/dist/state/note-store.d.ts +0 -37
  254. package/dist/state/note-store.d.ts.map +0 -1
  255. package/dist/state/note-store.js +0 -133
  256. package/dist/state/nullifier-store.d.ts +0 -13
  257. package/dist/state/nullifier-store.d.ts.map +0 -1
  258. package/dist/state/nullifier-store.js +0 -21
  259. package/dist/state/records.d.ts +0 -57
  260. package/dist/state/records.d.ts.map +0 -1
  261. package/dist/state/root-store.d.ts +0 -13
  262. package/dist/state/root-store.d.ts.map +0 -1
  263. package/dist/state/root-store.js +0 -30
  264. package/dist/state/store.d.ts +0 -26
  265. package/dist/state/store.d.ts.map +0 -1
  266. package/dist/state/store.js +0 -19
  267. package/dist/state.d.ts +0 -83
  268. package/dist/state.d.ts.map +0 -1
  269. package/dist/state.js +0 -171
  270. package/dist/transactions/shield.d.ts +0 -5
  271. package/dist/transactions/shield.d.ts.map +0 -1
  272. package/dist/transactions/shield.js +0 -93
  273. package/dist/transactions/types.d.ts +0 -114
  274. package/dist/transactions/types.d.ts.map +0 -1
  275. package/dist/transactions/utils.d.ts +0 -10
  276. package/dist/transactions/utils.d.ts.map +0 -1
  277. package/dist/transactions/utils.js +0 -17
  278. package/dist/utils/time.d.ts +0 -2
  279. package/dist/utils/time.d.ts.map +0 -1
  280. package/dist/utils/time.js +0 -3
  281. package/dist/utils/witness.d.ts +0 -11
  282. package/dist/utils/witness.d.ts.map +0 -1
  283. package/dist/utils/witness.js +0 -19
  284. package/errors.ts +0 -20
  285. package/index.ts +0 -17
  286. package/key-derivation/babyjubjub.ts +0 -11
  287. package/key-derivation/bech32.test.ts +0 -90
  288. package/key-derivation/bech32.ts +0 -124
  289. package/key-derivation/bip32.ts +0 -56
  290. package/key-derivation/bip39.ts +0 -76
  291. package/key-derivation/bytes.ts +0 -118
  292. package/key-derivation/hash.ts +0 -13
  293. package/key-derivation/index.ts +0 -7
  294. package/key-derivation/wallet-node.ts +0 -155
  295. package/keys.ts +0 -47
  296. package/prover/config.ts +0 -104
  297. package/prover/index.ts +0 -1
  298. package/prover/prover.integration.test.ts +0 -162
  299. package/prover/prover.test.ts +0 -309
  300. package/prover/prover.ts +0 -405
  301. package/prover/registry.test.ts +0 -90
  302. package/prover/registry.ts +0 -82
  303. package/schema.ts +0 -17
  304. package/setup-artifacts.sh +0 -57
  305. package/state/index.ts +0 -2
  306. package/state/merkle/hydrator.ts +0 -69
  307. package/state/merkle/index.ts +0 -12
  308. package/state/merkle/merkle-tree.test.ts +0 -50
  309. package/state/merkle/merkle-tree.ts +0 -163
  310. package/state/store/ciphertext-store.ts +0 -28
  311. package/state/store/index.ts +0 -24
  312. package/state/store/job-store.ts +0 -162
  313. package/state/store/jobs.ts +0 -64
  314. package/state/store/leaf-store.ts +0 -39
  315. package/state/store/note-store.ts +0 -177
  316. package/state/store/nullifier-store.ts +0 -39
  317. package/state/store/records.ts +0 -61
  318. package/state/store/root-store.ts +0 -34
  319. package/state/store/store.ts +0 -25
  320. package/state.test.ts +0 -235
  321. package/storage/index.ts +0 -3
  322. package/storage/indexeddb.test.ts +0 -99
  323. package/storage/indexeddb.ts +0 -235
  324. package/storage/memory.test.ts +0 -59
  325. package/storage/memory.ts +0 -93
  326. package/transactions/deposit.test.ts +0 -160
  327. package/transactions/deposit.ts +0 -227
  328. package/transactions/index.ts +0 -20
  329. package/transactions/note-sync.test.ts +0 -155
  330. package/transactions/note-sync.ts +0 -452
  331. package/transactions/reconcile.ts +0 -73
  332. package/transactions/transact.test.ts +0 -451
  333. package/transactions/transact.ts +0 -811
  334. package/transactions/types.ts +0 -141
  335. package/tsconfig.json +0 -14
  336. package/types/global.d.ts +0 -15
  337. package/types.ts +0 -24
  338. package/utils/async.ts +0 -15
  339. package/utils/bigint.ts +0 -34
  340. package/utils/crypto.test.ts +0 -69
  341. package/utils/crypto.ts +0 -58
  342. package/utils/json-codec.ts +0 -38
  343. package/utils/polling.ts +0 -6
  344. package/utils/signature.ts +0 -16
  345. package/utils/validators.test.ts +0 -64
  346. package/utils/validators.ts +0 -86
  347. /package/dist/{transactions → history}/types.js +0 -0
  348. /package/dist/{state/records.js → transactions/types/deposit.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../utils/validators.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB,iFAC0E,CAAC;AAE1G,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAI7D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,QAI5C;AAED,6DAA6D;AAC7D,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,QAIpC;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAU9D;AAID,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAIzD;AAED,mEAAmE;AACnE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAO9D;AAED,sEAAsE;AACtE,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;SAAvC,MAAM;YAAU,MAAM;WAAS,MAAM;EAWzD;AAED,wEAAwE;AACxE,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;SAAvC,MAAM;YAAU,MAAM;WAAS,MAAM;EAWnD"}
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../utils/validators.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,KAAK,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAGrE,eAAO,MAAM,kBAAkB,iFAC0E,CAAC;AAE1G,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAI7D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,QAI5C;AAED,6DAA6D;AAC7D,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,QAIpC;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAU9D;AAID,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,MAAM,EAAE,CAOzE;AAED,mEAAmE;AACnE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAS9D;AAED,sEAAsE;AACtE,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,mBAAmB,GAAG,SAAS,mCAc5C;AAED,wEAAwE;AACxE,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;SAAvC,MAAM;YAAU,MAAM;WAAS,MAAM;EAWnD;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,UAAU,CAAC;IAC7B,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAe7D"}
@@ -1,20 +1,21 @@
1
- import { CoreError } from "../errors.js";
1
+ import { ValidationError } from "../errors.js";
2
+ import { decodeAddress } from "../keys/address.js";
2
3
  import { assertNonNegative } from "./bigint.js";
3
4
  export const SNARK_SCALAR_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617n;
4
5
  export function ensurePositiveInt(label, value) {
5
6
  if (!Number.isInteger(value) || value < 0) {
6
- throw new CoreError(`${label} must be a non-negative integer`);
7
+ throw new ValidationError(`${label} must be a non-negative integer`);
7
8
  }
8
9
  }
9
10
  export function ensureChainId(chainId) {
10
11
  if (!Number.isInteger(chainId) || chainId <= 0) {
11
- throw new CoreError("chainId must be a positive integer");
12
+ throw new ValidationError("chainId must be a positive integer");
12
13
  }
13
14
  }
14
15
  /** Guards master public key strings against empty values. */
15
16
  export function ensureMpk(mpk) {
16
17
  if (typeof mpk !== "string" || mpk.length === 0) {
17
- throw new CoreError("note mpk must be a non-empty string");
18
+ throw new ValidationError("note mpk must be a non-empty string");
18
19
  }
19
20
  }
20
21
  export function ensureBigIntString(label, value) {
@@ -23,34 +24,38 @@ export function ensureBigIntString(label, value) {
23
24
  parsed = BigInt(value);
24
25
  }
25
26
  catch {
26
- throw new CoreError(`${label} must be a base-10 bigint string`);
27
+ throw new ValidationError(`${label} must be a base-10 bigint string`);
27
28
  }
28
29
  if (parsed < 0n) {
29
- throw new CoreError(`${label} must be non-negative`);
30
+ throw new ValidationError(`${label} must be non-negative`);
30
31
  }
31
32
  }
32
33
  const ADDRESS_REGEX = /^0x[0-9a-fA-F]{40}$/;
33
34
  export function ensureAddress(label, value) {
34
35
  if (typeof value !== "string" || !ADDRESS_REGEX.test(value)) {
35
- throw new CoreError(`${label} must be a 0x-prefixed hex address`);
36
+ throw new ValidationError(`${label} must be a 0x-prefixed hex address, received: ${value}`);
36
37
  }
38
+ return value.toLowerCase();
37
39
  }
38
40
  /** Confirms the bigint resides in the SNARK scalar field range. */
39
41
  export function ensureFieldElement(label, value) {
40
42
  if (value < 0n) {
41
- throw new CoreError(`${label} must be a non-negative field element`);
43
+ throw new ValidationError(`${label} must be a non-negative field element`);
42
44
  }
43
45
  if (value >= SNARK_SCALAR_FIELD) {
44
- throw new CoreError(`${label} must be less than the SNARK scalar field`);
46
+ throw new ValidationError(`${label} must be less than the SNARK scalar field`);
45
47
  }
46
48
  }
47
49
  /** Validates withdrawal note public data before encoding calldata. */
48
50
  export function ensureWithdrawalInput(label, withdrawal) {
51
+ if (!withdrawal) {
52
+ return undefined;
53
+ }
49
54
  assertNonNegative(`${label}.npk`, withdrawal.npk);
50
55
  ensureFieldElement(`${label}.npk`, withdrawal.npk);
51
56
  assertNonNegative(`${label}.amount`, withdrawal.amount);
52
57
  // if (withdrawal.amount === 0n) {
53
- // throw new CoreError(`${label}.amount must be greater than zero`);
58
+ // throw new ValidationError(`${label}.amount must be greater than zero`);
54
59
  // }
55
60
  ensureFieldElement(`${label}.amount`, withdrawal.amount);
56
61
  ensureAddress(`${label}.token`, withdrawal.token);
@@ -62,9 +67,30 @@ export function ensureNoteCommitmentInput(label, note) {
62
67
  ensureFieldElement(`${label}.npk`, note.npk);
63
68
  assertNonNegative(`${label}.amount`, note.amount);
64
69
  if (note.amount === 0n) {
65
- throw new CoreError(`${label}.amount must be greater than zero`);
70
+ throw new ValidationError(`${label}.amount must be greater than zero`);
66
71
  }
67
72
  ensureFieldElement(`${label}.amount`, note.amount);
68
73
  ensureAddress(`${label}.token`, note.token);
69
74
  return note;
70
75
  }
76
+ /**
77
+ * Parses a Bech32m ZK address (0zk1...) into its components.
78
+ *
79
+ * @param value - The Bech32m address string
80
+ * @returns Parsed address with masterPublicKey, viewingPublicKey, and optional chain
81
+ * @throws ValidationError if the address is invalid
82
+ */
83
+ export function parseZkAddress(value) {
84
+ const trimmed = value.trim();
85
+ try {
86
+ const decoded = decodeAddress(trimmed);
87
+ return {
88
+ masterPublicKey: decoded.masterPublicKey,
89
+ viewingPublicKey: decoded.viewingPublicKey,
90
+ chain: decoded.chain,
91
+ };
92
+ }
93
+ catch (err) {
94
+ throw new ValidationError(`Invalid ZK address (expected 0zk1... format): ${err instanceof Error ? err.message : "unknown error"}`);
95
+ }
96
+ }
@@ -0,0 +1,3 @@
1
+ declare const _default: import("vite").UserConfig;
2
+ export default _default;
3
+ //# sourceMappingURL=vitest.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest.config.d.ts","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":";AAEA,wBAWG"}
@@ -0,0 +1,13 @@
1
+ import { defineConfig } from "vitest/config";
2
+ export default defineConfig({
3
+ test: {
4
+ globals: true,
5
+ setupFiles: ["./vitest.setup.ts"],
6
+ server: {
7
+ deps: {
8
+ // Transform CJS deps to support ESM named imports
9
+ inline: ["circomlibjs"],
10
+ },
11
+ },
12
+ },
13
+ });
package/package.json CHANGED
@@ -1,35 +1,52 @@
1
1
  {
2
2
  "name": "@unlink-xyz/core",
3
- "version": "0.1.2",
3
+ "version": "0.1.3-canary.06c36a8",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "exports": {
8
8
  ".": {
9
- "types": "./dist/index.d.ts",
10
- "import": "./dist/index.js"
9
+ "browser": {
10
+ "import": "./dist/browser/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ },
13
+ "default": {
14
+ "import": "./dist/index.js",
15
+ "types": "./dist/index.d.ts"
16
+ }
17
+ },
18
+ "./utils/async.js": {
19
+ "import": "./dist/utils/async.js",
20
+ "types": "./dist/utils/async.d.ts"
11
21
  }
12
22
  },
23
+ "files": [
24
+ "dist"
25
+ ],
13
26
  "publishConfig": {
14
- "access": "public"
27
+ "access": "restricted"
15
28
  },
16
29
  "scripts": {
17
- "build": "tsc -p tsconfig.json",
30
+ "build": "tsc -p tsconfig.json && tsup --config tsup.browser.config.ts",
18
31
  "lint": "eslint .",
19
32
  "lint:fix": "eslint . --fix",
20
33
  "format": "prettier . --write",
21
34
  "format:check": "prettier . --check",
22
35
  "test": "tsc -p tsconfig.json && vitest run --test-timeout 0",
23
- "setup:artifacts": "./setup-artifacts.sh"
36
+ "setup:artifacts": "bash ./scripts/setup-artifacts.sh",
37
+ "clean": "rm -rf dist *.tsbuildinfo",
38
+ "typecheck": "tsc --noEmit"
24
39
  },
25
40
  "dependencies": {
26
41
  "@noble/ed25519": "3.0.0",
27
42
  "@noble/hashes": "2.0.0",
28
- "@railgun-community/circomlibjs": "0.0.8",
29
43
  "@scure/base": "2.0.0",
30
44
  "@scure/bip39": "2.0.1",
31
45
  "@types/snarkjs": "^0.7.9",
46
+ "@zk-kit/eddsa-poseidon": "^1.1.0",
32
47
  "@zk-kit/imt": "2.0.0-beta.8",
48
+ "buffer": "^6.0.3",
49
+ "circomlibjs": "^0.1.7",
33
50
  "ethereum-cryptography": "3.2.0",
34
51
  "ethers": "6.15.0",
35
52
  "ky": "^1.14.0",
@@ -38,6 +55,8 @@
38
55
  "uuid": "^13.0.0"
39
56
  },
40
57
  "devDependencies": {
58
+ "@esbuild-plugins/node-globals-polyfill": "^0.2.3",
59
+ "@esbuild-plugins/node-modules-polyfill": "^0.2.2",
41
60
  "@eslint/eslintrc": "^3.1.0",
42
61
  "@types/node": "^22.0.0",
43
62
  "@typescript-eslint/eslint-plugin": "^7.18.0",
@@ -45,6 +64,7 @@
45
64
  "eslint": "^8.57.1",
46
65
  "fake-indexeddb": "6.2.4",
47
66
  "prettier": "^3.5.3",
67
+ "tsup": "^8.3.5",
48
68
  "typescript": "^5.9.2",
49
69
  "vitest": "4.0.1"
50
70
  }
package/.eslintrc.json DELETED
@@ -1,4 +0,0 @@
1
- {
2
- "root": true,
3
- "extends": ["../../.eslintrc.base.json"]
4
- }
@@ -1,316 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
-
3
- import { Mnemonic } from "../key-derivation/bip39.js";
4
- import { ByteUtils } from "../key-derivation/bytes.js";
5
- import {
6
- deriveNodesFromSeed,
7
- WalletNode,
8
- } from "../key-derivation/wallet-node.js";
9
- import { createMemoryStorage } from "../storage/memory.js";
10
- import {
11
- deriveZkAccount,
12
- deriveZkAccountFromMnemonic,
13
- generateMasterSeed,
14
- importMasterMnemonic,
15
- loadMasterMnemonic,
16
- loadMasterSeed,
17
- MASTER_MNEMONIC_KEY,
18
- MASTER_SEED_KEY,
19
- MASTER_SEED_LENGTH,
20
- storeMasterMnemonic,
21
- type MasterSeedCrypto,
22
- } from "./zkAccount.js";
23
-
24
- describe("deriveZkAccount", () => {
25
- const seed = Uint8Array.from(
26
- { length: MASTER_SEED_LENGTH },
27
- (_, i) => i & 0xff,
28
- );
29
-
30
- it("derives wallet key material", async () => {
31
- const account = await deriveZkAccount(seed, 0);
32
-
33
- expect(account.spendingKeyPair.privateKey).toHaveLength(32);
34
- expect(typeof account.spendingKeyPair.pubkey[0]).toBe("bigint");
35
- expect(typeof account.spendingKeyPair.pubkey[1]).toBe("bigint");
36
-
37
- expect(account.viewingKeyPair.privateKey).toHaveLength(32);
38
- expect(account.viewingKeyPair.pubkey).toHaveLength(32);
39
-
40
- expect(account.nullifyingKey).toBeTypeOf("bigint");
41
-
42
- const expectedNullifyingKey = await deriveNodesFromSeed(
43
- seed,
44
- 0,
45
- ).viewing.getNullifyingKey();
46
- expect(account.nullifyingKey).toBe(expectedNullifyingKey);
47
-
48
- const expectedMPK = WalletNode.getMasterPublicKey(
49
- account.spendingKeyPair.pubkey,
50
- account.nullifyingKey,
51
- );
52
- expect(account.masterPublicKey).toBe(expectedMPK);
53
- });
54
-
55
- it("derives distinct accounts per index", async () => {
56
- const first = await deriveZkAccount(seed, 0);
57
- const second = await deriveZkAccount(seed, 1);
58
-
59
- expect(first.spendingKeyPair.privateKey).not.toEqual(
60
- second.spendingKeyPair.privateKey,
61
- );
62
- expect(first.viewingKeyPair.privateKey).not.toEqual(
63
- second.viewingKeyPair.privateKey,
64
- );
65
- expect(first.nullifyingKey).not.toEqual(second.nullifyingKey);
66
- expect(first.masterPublicKey).not.toEqual(second.masterPublicKey);
67
- });
68
-
69
- it("rejects negative indices", async () => {
70
- await expect(deriveZkAccount(seed, -1)).rejects.toThrow(
71
- "accountIndex must be a non-negative integer",
72
- );
73
- });
74
-
75
- it("rejects non-integer indices", async () => {
76
- await expect(deriveZkAccount(seed, Number.NaN)).rejects.toThrow(
77
- "accountIndex must be a non-negative integer",
78
- );
79
- await expect(deriveZkAccount(seed, 0.25)).rejects.toThrow(
80
- "accountIndex must be a non-negative integer",
81
- );
82
- });
83
-
84
- it("rejects seeds that are not 64 bytes", async () => {
85
- const shortSeed = Uint8Array.from({ length: 32 }, () => 1);
86
- await expect(deriveZkAccount(shortSeed, 0)).rejects.toThrow(
87
- "master seed must be 64 bytes",
88
- );
89
- });
90
-
91
- it("derives the same keys when using mnemonic helper", async () => {
92
- const entropy = Uint8Array.from({ length: 32 }, (_, i) => (i * 19) & 0xff);
93
- const mnemonic = Mnemonic.fromEntropy(ByteUtils.bytesToHex(entropy));
94
- const seedFromMnemonic = ByteUtils.hexStringToBytes(
95
- Mnemonic.toSeed(mnemonic),
96
- );
97
-
98
- const fromSeed = await deriveZkAccount(seedFromMnemonic, 2);
99
- const fromMnemonic = await deriveZkAccountFromMnemonic(mnemonic, 2);
100
-
101
- expect(fromMnemonic).toEqual(fromSeed);
102
- });
103
- });
104
-
105
- describe("generateMasterSeed", () => {
106
- const fixtureEntropy = Uint8Array.from(
107
- { length: 32 },
108
- (_, i) => (i * 13) & 0xff,
109
- );
110
- const fixtureMnemonic = Mnemonic.fromEntropy(
111
- ByteUtils.bytesToHex(fixtureEntropy),
112
- );
113
- const fixtureSeed = ByteUtils.hexStringToBytes(
114
- Mnemonic.toSeed(fixtureMnemonic),
115
- );
116
-
117
- function rngFixture(): (n: number) => Uint8Array {
118
- return (n) => {
119
- expect(n).toBe(32);
120
- return new Uint8Array(fixtureEntropy);
121
- };
122
- }
123
-
124
- it("creates and persists a new seed when none exists", async () => {
125
- const storage = createMemoryStorage();
126
-
127
- const seed = await generateMasterSeed({
128
- storage,
129
- rng: rngFixture(),
130
- mnemonicPassphrase: "",
131
- });
132
-
133
- expect(seed).toEqual(fixtureSeed);
134
- const stored = await storage.get(MASTER_SEED_KEY);
135
- expect(stored).not.toBeNull();
136
- expect(stored).toEqual(fixtureSeed);
137
-
138
- const mnemonic = await loadMasterMnemonic(storage);
139
- expect(mnemonic).toEqual(fixtureMnemonic);
140
- });
141
-
142
- it("returns existing seed without invoking rng", async () => {
143
- const storage = createMemoryStorage();
144
- await storage.put(MASTER_SEED_KEY, fixtureSeed);
145
-
146
- const seed = await generateMasterSeed({
147
- storage,
148
- rng: () => {
149
- throw new Error("rng should not be called when seed exists");
150
- },
151
- });
152
-
153
- expect(seed).toEqual(fixtureSeed);
154
- });
155
-
156
- it("overwrites when requested", async () => {
157
- const storage = createMemoryStorage();
158
- const existing = Uint8Array.from(
159
- { length: MASTER_SEED_LENGTH },
160
- (_, i) => (i * 3) & 0xff,
161
- );
162
- await storage.put(MASTER_SEED_KEY, existing);
163
- const replacementEntropy = Uint8Array.from(
164
- { length: 32 },
165
- (_, i) => (i * 7) & 0xff,
166
- );
167
- const replacementMnemonic = Mnemonic.fromEntropy(
168
- ByteUtils.bytesToHex(replacementEntropy),
169
- );
170
- const replacementSeed = ByteUtils.hexStringToBytes(
171
- Mnemonic.toSeed(replacementMnemonic),
172
- );
173
-
174
- const seed = await generateMasterSeed({
175
- storage,
176
- rng: (n) => {
177
- expect(n).toBe(32);
178
- return new Uint8Array(replacementEntropy);
179
- },
180
- overwrite: true,
181
- mnemonicPassphrase: "",
182
- });
183
-
184
- expect(seed).toEqual(replacementSeed);
185
- const stored = await storage.get(MASTER_SEED_KEY);
186
- expect(stored).toEqual(replacementSeed);
187
- const mnemonic = await loadMasterMnemonic(storage);
188
- expect(mnemonic).toEqual(replacementMnemonic);
189
- });
190
-
191
- it("applies custom crypto hooks", async () => {
192
- const storage = createMemoryStorage();
193
-
194
- const crypto: MasterSeedCrypto = {
195
- encrypt(seed) {
196
- return seed.map((byte) => byte ^ 0xff);
197
- },
198
- decrypt(payload) {
199
- return payload.map((byte) => byte ^ 0xff);
200
- },
201
- };
202
-
203
- const seed = await generateMasterSeed({
204
- storage,
205
- rng: rngFixture(),
206
- crypto,
207
- mnemonicPassphrase: "",
208
- });
209
-
210
- expect(seed).toEqual(fixtureSeed);
211
- const roundTrip = await loadMasterSeed(storage, crypto);
212
- expect(roundTrip).toEqual(fixtureSeed);
213
-
214
- const storedMnemonic = await storage.get(MASTER_MNEMONIC_KEY);
215
- expect(storedMnemonic).toEqual(
216
- textEncode(fixtureMnemonic).map((byte) => byte ^ 0xff),
217
- );
218
-
219
- const mnemonicRoundTrip = await loadMasterMnemonic(storage, crypto);
220
- expect(mnemonicRoundTrip).toEqual(fixtureMnemonic);
221
- });
222
-
223
- it("returns null when no seed is stored", async () => {
224
- const storage = createMemoryStorage();
225
-
226
- const result = await loadMasterSeed(storage);
227
-
228
- expect(result).toBeNull();
229
- });
230
-
231
- it("throws if rng returns incorrect length", async () => {
232
- const storage = createMemoryStorage();
233
-
234
- await expect(
235
- generateMasterSeed({
236
- storage,
237
- rng: () => new Uint8Array(16),
238
- mnemonicPassphrase: "",
239
- }),
240
- ).rejects.toThrow(/mnemonic entropy must be 32 bytes/);
241
- });
242
-
243
- it("reconstitutes seed from stored mnemonic when seed missing", async () => {
244
- const storage = createMemoryStorage();
245
- await storeMnemonicFixture(storage, fixtureMnemonic);
246
-
247
- const seed = await generateMasterSeed({
248
- storage,
249
- rng: rngFixture(),
250
- mnemonicPassphrase: "",
251
- });
252
-
253
- expect(seed).toEqual(fixtureSeed);
254
- const stored = await storage.get(MASTER_SEED_KEY);
255
- expect(stored).toEqual(fixtureSeed);
256
- });
257
- });
258
-
259
- describe("importMasterMnemonic", () => {
260
- const mnemonic =
261
- "legal winner thank year wave sausage worth useful legal winner thank yellow";
262
- const seed = ByteUtils.hexStringToBytes(Mnemonic.toSeed(mnemonic));
263
-
264
- it("imports mnemonic and stores derived seed", async () => {
265
- const storage = createMemoryStorage();
266
-
267
- const derived = await importMasterMnemonic({ storage, mnemonic });
268
-
269
- expect(derived).toEqual(seed);
270
- const storedSeed = await loadMasterSeed(storage);
271
- expect(storedSeed).toEqual(seed);
272
- const storedMnemonic = await loadMasterMnemonic(storage);
273
- expect(storedMnemonic).toEqual(mnemonic);
274
- });
275
-
276
- it("refuses to overwrite without flag", async () => {
277
- const storage = createMemoryStorage();
278
- await importMasterMnemonic({ storage, mnemonic });
279
-
280
- await expect(importMasterMnemonic({ storage, mnemonic })).rejects.toThrow(
281
- /already exists/,
282
- );
283
- });
284
-
285
- it("overwrites when requested", async () => {
286
- const storage = createMemoryStorage();
287
- await importMasterMnemonic({ storage, mnemonic });
288
-
289
- const alternate =
290
- "letter advice cage absurd amount doctor acoustic avoid letter advice cage above";
291
- const alternateSeed = ByteUtils.hexStringToBytes(
292
- Mnemonic.toSeed(alternate),
293
- );
294
-
295
- const derived = await importMasterMnemonic({
296
- storage,
297
- mnemonic: alternate,
298
- overwrite: true,
299
- });
300
-
301
- expect(derived).toEqual(alternateSeed);
302
- const storedMnemonic = await loadMasterMnemonic(storage);
303
- expect(storedMnemonic).toEqual(alternate);
304
- });
305
- });
306
-
307
- function textEncode(value: string): Uint8Array {
308
- return new TextEncoder().encode(value);
309
- }
310
-
311
- async function storeMnemonicFixture(
312
- storage: ReturnType<typeof createMemoryStorage>,
313
- mnemonic: string,
314
- ) {
315
- await storeMasterMnemonic(storage, mnemonic);
316
- }