crypto-aio 0.0.2 → 0.1.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 (672) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +144 -14
  3. package/dist/adapters/avalanche/address.d.ts +15 -0
  4. package/dist/adapters/avalanche/address.js +74 -0
  5. package/dist/adapters/avalanche/address.js.map +1 -0
  6. package/dist/adapters/avalanche/api.d.ts +100 -0
  7. package/dist/adapters/avalanche/api.js +381 -0
  8. package/dist/adapters/avalanche/api.js.map +1 -0
  9. package/dist/adapters/avalanche/builder.d.ts +13 -0
  10. package/dist/adapters/avalanche/builder.js +336 -0
  11. package/dist/adapters/avalanche/builder.js.map +1 -0
  12. package/dist/adapters/avalanche/cb58.d.ts +7 -0
  13. package/dist/adapters/avalanche/cb58.js +49 -0
  14. package/dist/adapters/avalanche/cb58.js.map +1 -0
  15. package/dist/adapters/avalanche/chains.d.ts +21 -0
  16. package/dist/adapters/avalanche/chains.js +79 -0
  17. package/dist/adapters/avalanche/chains.js.map +1 -0
  18. package/dist/adapters/avalanche/codec.d.ts +94 -0
  19. package/dist/adapters/avalanche/codec.js +371 -0
  20. package/dist/adapters/avalanche/codec.js.map +1 -0
  21. package/dist/adapters/avalanche/context.d.ts +59 -0
  22. package/dist/adapters/avalanche/context.js +114 -0
  23. package/dist/adapters/avalanche/context.js.map +1 -0
  24. package/dist/adapters/avalanche/decode.d.ts +16 -0
  25. package/dist/adapters/avalanche/decode.js +101 -0
  26. package/dist/adapters/avalanche/decode.js.map +1 -0
  27. package/dist/adapters/avalanche/driver.d.ts +22 -0
  28. package/dist/adapters/avalanche/driver.js +81 -0
  29. package/dist/adapters/avalanche/driver.js.map +1 -0
  30. package/dist/adapters/avalanche/errors.d.ts +18 -0
  31. package/dist/adapters/avalanche/errors.js +61 -0
  32. package/dist/adapters/avalanche/errors.js.map +1 -0
  33. package/dist/adapters/avalanche/fees.d.ts +23 -0
  34. package/dist/adapters/avalanche/fees.js +105 -0
  35. package/dist/adapters/avalanche/fees.js.map +1 -0
  36. package/dist/adapters/avalanche/index.d.ts +19 -0
  37. package/dist/adapters/avalanche/index.js +8 -0
  38. package/dist/adapters/avalanche/index.js.map +1 -0
  39. package/dist/adapters/avalanche/network.d.ts +37 -0
  40. package/dist/adapters/avalanche/network.js +135 -0
  41. package/dist/adapters/avalanche/network.js.map +1 -0
  42. package/dist/adapters/avalanche/plugin.d.ts +21 -0
  43. package/dist/adapters/avalanche/plugin.js +46 -0
  44. package/dist/adapters/avalanche/plugin.js.map +1 -0
  45. package/dist/adapters/avalanche/presets.d.ts +6 -0
  46. package/dist/adapters/avalanche/presets.js +86 -0
  47. package/dist/adapters/avalanche/presets.js.map +1 -0
  48. package/dist/adapters/avalanche/proofs.d.ts +41 -0
  49. package/dist/adapters/avalanche/proofs.js +270 -0
  50. package/dist/adapters/avalanche/proofs.js.map +1 -0
  51. package/dist/adapters/avalanche/reader.d.ts +40 -0
  52. package/dist/adapters/avalanche/reader.js +231 -0
  53. package/dist/adapters/avalanche/reader.js.map +1 -0
  54. package/dist/adapters/avalanche/sdk.d.ts +182 -0
  55. package/dist/adapters/avalanche/sdk.js +21 -0
  56. package/dist/adapters/avalanche/sdk.js.map +1 -0
  57. package/dist/adapters/avalanche/types.d.ts +86 -0
  58. package/dist/{type/common.js → adapters/avalanche/types.js} +1 -1
  59. package/dist/adapters/avalanche/types.js.map +1 -0
  60. package/dist/adapters/evm/builder.d.ts +11 -0
  61. package/dist/adapters/evm/builder.js +326 -0
  62. package/dist/adapters/evm/builder.js.map +1 -0
  63. package/dist/adapters/evm/chains.d.ts +6 -0
  64. package/dist/adapters/evm/chains.js +203 -0
  65. package/dist/adapters/evm/chains.js.map +1 -0
  66. package/dist/adapters/evm/client.d.ts +84 -0
  67. package/dist/adapters/evm/client.js +335 -0
  68. package/dist/adapters/evm/client.js.map +1 -0
  69. package/dist/adapters/evm/decode.d.ts +35 -0
  70. package/dist/adapters/evm/decode.js +170 -0
  71. package/dist/adapters/evm/decode.js.map +1 -0
  72. package/dist/adapters/evm/driver.d.ts +8 -0
  73. package/dist/adapters/evm/driver.js +61 -0
  74. package/dist/adapters/evm/driver.js.map +1 -0
  75. package/dist/adapters/evm/errors.d.ts +20 -0
  76. package/dist/adapters/evm/errors.js +110 -0
  77. package/dist/adapters/evm/errors.js.map +1 -0
  78. package/dist/adapters/evm/ethers-client.d.ts +43 -0
  79. package/dist/adapters/evm/ethers-client.js +135 -0
  80. package/dist/adapters/evm/ethers-client.js.map +1 -0
  81. package/dist/adapters/evm/fees.d.ts +79 -0
  82. package/dist/adapters/evm/fees.js +234 -0
  83. package/dist/adapters/evm/fees.js.map +1 -0
  84. package/dist/adapters/evm/index.d.ts +20 -0
  85. package/dist/adapters/evm/index.js +11 -0
  86. package/dist/adapters/evm/index.js.map +1 -0
  87. package/dist/adapters/evm/network.d.ts +60 -0
  88. package/dist/adapters/evm/network.js +131 -0
  89. package/dist/adapters/evm/network.js.map +1 -0
  90. package/dist/adapters/evm/plugin.d.ts +36 -0
  91. package/dist/adapters/evm/plugin.js +102 -0
  92. package/dist/adapters/evm/plugin.js.map +1 -0
  93. package/dist/adapters/evm/presets.d.ts +2 -0
  94. package/dist/adapters/evm/presets.js +105 -0
  95. package/dist/adapters/evm/presets.js.map +1 -0
  96. package/dist/adapters/evm/proofs.d.ts +19 -0
  97. package/dist/adapters/evm/proofs.js +358 -0
  98. package/dist/adapters/evm/proofs.js.map +1 -0
  99. package/dist/adapters/evm/rawtx.d.ts +25 -0
  100. package/dist/adapters/evm/rawtx.js +176 -0
  101. package/dist/adapters/evm/rawtx.js.map +1 -0
  102. package/dist/adapters/evm/reader.d.ts +65 -0
  103. package/dist/adapters/evm/reader.js +292 -0
  104. package/dist/adapters/evm/reader.js.map +1 -0
  105. package/dist/adapters/evm/rpc.d.ts +39 -0
  106. package/dist/adapters/evm/rpc.js +152 -0
  107. package/dist/adapters/evm/rpc.js.map +1 -0
  108. package/dist/adapters/evm/tokens.d.ts +7 -0
  109. package/dist/adapters/evm/tokens.js +23 -0
  110. package/dist/adapters/evm/tokens.js.map +1 -0
  111. package/dist/adapters/evm/types.d.ts +255 -0
  112. package/dist/{type/account.js → adapters/evm/types.js} +1 -1
  113. package/dist/adapters/evm/types.js.map +1 -0
  114. package/dist/adapters/evm/web3-client.d.ts +23 -0
  115. package/dist/adapters/evm/web3-client.js +159 -0
  116. package/dist/adapters/evm/web3-client.js.map +1 -0
  117. package/dist/adapters/solana/builder.d.ts +18 -0
  118. package/dist/adapters/solana/builder.js +545 -0
  119. package/dist/adapters/solana/builder.js.map +1 -0
  120. package/dist/adapters/solana/chains.d.ts +13 -0
  121. package/dist/adapters/solana/chains.js +37 -0
  122. package/dist/adapters/solana/chains.js.map +1 -0
  123. package/dist/adapters/solana/decode.d.ts +111 -0
  124. package/dist/adapters/solana/decode.js +595 -0
  125. package/dist/adapters/solana/decode.js.map +1 -0
  126. package/dist/adapters/solana/driver.d.ts +15 -0
  127. package/dist/adapters/solana/driver.js +72 -0
  128. package/dist/adapters/solana/driver.js.map +1 -0
  129. package/dist/adapters/solana/errors.d.ts +36 -0
  130. package/dist/adapters/solana/errors.js +154 -0
  131. package/dist/adapters/solana/errors.js.map +1 -0
  132. package/dist/adapters/solana/fees.d.ts +68 -0
  133. package/dist/adapters/solana/fees.js +205 -0
  134. package/dist/adapters/solana/fees.js.map +1 -0
  135. package/dist/adapters/solana/heights.d.ts +47 -0
  136. package/dist/adapters/solana/heights.js +185 -0
  137. package/dist/adapters/solana/heights.js.map +1 -0
  138. package/dist/adapters/solana/history.d.ts +10 -0
  139. package/dist/adapters/solana/history.js +71 -0
  140. package/dist/adapters/solana/history.js.map +1 -0
  141. package/dist/adapters/solana/index.d.ts +16 -0
  142. package/dist/adapters/solana/index.js +9 -0
  143. package/dist/adapters/solana/index.js.map +1 -0
  144. package/dist/adapters/solana/keys.d.ts +13 -0
  145. package/dist/adapters/solana/keys.js +69 -0
  146. package/dist/adapters/solana/keys.js.map +1 -0
  147. package/dist/adapters/solana/network.d.ts +24 -0
  148. package/dist/adapters/solana/network.js +95 -0
  149. package/dist/adapters/solana/network.js.map +1 -0
  150. package/dist/adapters/solana/plugin.d.ts +18 -0
  151. package/dist/adapters/solana/plugin.js +41 -0
  152. package/dist/adapters/solana/plugin.js.map +1 -0
  153. package/dist/adapters/solana/presets.d.ts +2 -0
  154. package/dist/adapters/solana/presets.js +77 -0
  155. package/dist/adapters/solana/presets.js.map +1 -0
  156. package/dist/adapters/solana/programs.d.ts +44 -0
  157. package/dist/adapters/solana/programs.js +159 -0
  158. package/dist/adapters/solana/programs.js.map +1 -0
  159. package/dist/adapters/solana/proofs.d.ts +56 -0
  160. package/dist/adapters/solana/proofs.js +540 -0
  161. package/dist/adapters/solana/proofs.js.map +1 -0
  162. package/dist/adapters/solana/reader.d.ts +82 -0
  163. package/dist/adapters/solana/reader.js +326 -0
  164. package/dist/adapters/solana/reader.js.map +1 -0
  165. package/dist/adapters/solana/rpc.d.ts +102 -0
  166. package/dist/adapters/solana/rpc.js +301 -0
  167. package/dist/adapters/solana/rpc.js.map +1 -0
  168. package/dist/adapters/solana/tokens.d.ts +7 -0
  169. package/dist/adapters/solana/tokens.js +19 -0
  170. package/dist/adapters/solana/tokens.js.map +1 -0
  171. package/dist/adapters/solana/types.d.ts +121 -0
  172. package/dist/{type/lib-types.js → adapters/solana/types.js} +1 -1
  173. package/dist/adapters/solana/types.js.map +1 -0
  174. package/dist/adapters/solana/web3.d.ts +5 -0
  175. package/dist/adapters/solana/web3.js +83 -0
  176. package/dist/adapters/solana/web3.js.map +1 -0
  177. package/dist/adapters/solana/wire.d.ts +62 -0
  178. package/dist/adapters/solana/wire.js +168 -0
  179. package/dist/adapters/solana/wire.js.map +1 -0
  180. package/dist/adapters/ton/address.d.ts +43 -0
  181. package/dist/adapters/ton/address.js +168 -0
  182. package/dist/adapters/ton/address.js.map +1 -0
  183. package/dist/adapters/ton/api.d.ts +344 -0
  184. package/dist/adapters/ton/api.js +942 -0
  185. package/dist/adapters/ton/api.js.map +1 -0
  186. package/dist/adapters/ton/builder.d.ts +18 -0
  187. package/dist/adapters/ton/builder.js +701 -0
  188. package/dist/adapters/ton/builder.js.map +1 -0
  189. package/dist/adapters/ton/chains.d.ts +16 -0
  190. package/dist/adapters/ton/chains.js +39 -0
  191. package/dist/adapters/ton/chains.js.map +1 -0
  192. package/dist/adapters/ton/decode.d.ts +43 -0
  193. package/dist/adapters/ton/decode.js +219 -0
  194. package/dist/adapters/ton/decode.js.map +1 -0
  195. package/dist/adapters/ton/driver.d.ts +10 -0
  196. package/dist/adapters/ton/driver.js +117 -0
  197. package/dist/adapters/ton/driver.js.map +1 -0
  198. package/dist/adapters/ton/errors.d.ts +36 -0
  199. package/dist/adapters/ton/errors.js +89 -0
  200. package/dist/adapters/ton/errors.js.map +1 -0
  201. package/dist/adapters/ton/fees.d.ts +28 -0
  202. package/dist/adapters/ton/fees.js +121 -0
  203. package/dist/adapters/ton/fees.js.map +1 -0
  204. package/dist/adapters/ton/index.d.ts +16 -0
  205. package/dist/adapters/ton/index.js +9 -0
  206. package/dist/adapters/ton/index.js.map +1 -0
  207. package/dist/adapters/ton/messages.d.ts +157 -0
  208. package/dist/adapters/ton/messages.js +397 -0
  209. package/dist/adapters/ton/messages.js.map +1 -0
  210. package/dist/adapters/ton/native-client.d.ts +10 -0
  211. package/dist/adapters/ton/native-client.js +47 -0
  212. package/dist/adapters/ton/native-client.js.map +1 -0
  213. package/dist/adapters/ton/network.d.ts +58 -0
  214. package/dist/adapters/ton/network.js +207 -0
  215. package/dist/adapters/ton/network.js.map +1 -0
  216. package/dist/adapters/ton/plugin.d.ts +24 -0
  217. package/dist/adapters/ton/plugin.js +57 -0
  218. package/dist/adapters/ton/plugin.js.map +1 -0
  219. package/dist/adapters/ton/presets.d.ts +6 -0
  220. package/dist/adapters/ton/presets.js +94 -0
  221. package/dist/adapters/ton/presets.js.map +1 -0
  222. package/dist/adapters/ton/proofs.d.ts +66 -0
  223. package/dist/adapters/ton/proofs.js +813 -0
  224. package/dist/adapters/ton/proofs.js.map +1 -0
  225. package/dist/adapters/ton/reader.d.ts +194 -0
  226. package/dist/adapters/ton/reader.js +781 -0
  227. package/dist/adapters/ton/reader.js.map +1 -0
  228. package/dist/adapters/ton/tokens.d.ts +10 -0
  229. package/dist/adapters/ton/tokens.js +27 -0
  230. package/dist/adapters/ton/tokens.js.map +1 -0
  231. package/dist/adapters/ton/trace.d.ts +48 -0
  232. package/dist/adapters/ton/trace.js +277 -0
  233. package/dist/adapters/ton/trace.js.map +1 -0
  234. package/dist/adapters/ton/types.d.ts +105 -0
  235. package/dist/adapters/ton/types.js +3 -0
  236. package/dist/adapters/ton/types.js.map +1 -0
  237. package/dist/adapters/ton/wallets.d.ts +86 -0
  238. package/dist/adapters/ton/wallets.js +373 -0
  239. package/dist/adapters/ton/wallets.js.map +1 -0
  240. package/dist/adapters/tron/abi.d.ts +39 -0
  241. package/dist/adapters/tron/abi.js +110 -0
  242. package/dist/adapters/tron/abi.js.map +1 -0
  243. package/dist/adapters/tron/address.d.ts +20 -0
  244. package/dist/adapters/tron/address.js +110 -0
  245. package/dist/adapters/tron/address.js.map +1 -0
  246. package/dist/adapters/tron/builder.d.ts +12 -0
  247. package/dist/adapters/tron/builder.js +553 -0
  248. package/dist/adapters/tron/builder.js.map +1 -0
  249. package/dist/adapters/tron/chains.d.ts +12 -0
  250. package/dist/adapters/tron/chains.js +35 -0
  251. package/dist/adapters/tron/chains.js.map +1 -0
  252. package/dist/adapters/tron/codec.d.ts +10 -0
  253. package/dist/adapters/tron/codec.js +322 -0
  254. package/dist/adapters/tron/codec.js.map +1 -0
  255. package/dist/adapters/tron/decode.d.ts +50 -0
  256. package/dist/adapters/tron/decode.js +280 -0
  257. package/dist/adapters/tron/decode.js.map +1 -0
  258. package/dist/adapters/tron/driver.d.ts +12 -0
  259. package/dist/adapters/tron/driver.js +106 -0
  260. package/dist/adapters/tron/driver.js.map +1 -0
  261. package/dist/adapters/tron/errors.d.ts +74 -0
  262. package/dist/adapters/tron/errors.js +261 -0
  263. package/dist/adapters/tron/errors.js.map +1 -0
  264. package/dist/adapters/tron/fees.d.ts +49 -0
  265. package/dist/adapters/tron/fees.js +166 -0
  266. package/dist/adapters/tron/fees.js.map +1 -0
  267. package/dist/adapters/tron/http.d.ts +173 -0
  268. package/dist/adapters/tron/http.js +729 -0
  269. package/dist/adapters/tron/http.js.map +1 -0
  270. package/dist/adapters/tron/index.d.ts +16 -0
  271. package/dist/adapters/tron/index.js +15 -0
  272. package/dist/adapters/tron/index.js.map +1 -0
  273. package/dist/adapters/tron/network.d.ts +44 -0
  274. package/dist/adapters/tron/network.js +163 -0
  275. package/dist/adapters/tron/network.js.map +1 -0
  276. package/dist/adapters/tron/plugin.d.ts +17 -0
  277. package/dist/adapters/tron/plugin.js +39 -0
  278. package/dist/adapters/tron/plugin.js.map +1 -0
  279. package/dist/adapters/tron/presets.d.ts +5 -0
  280. package/dist/adapters/tron/presets.js +68 -0
  281. package/dist/adapters/tron/presets.js.map +1 -0
  282. package/dist/adapters/tron/proofs.d.ts +80 -0
  283. package/dist/adapters/tron/proofs.js +370 -0
  284. package/dist/adapters/tron/proofs.js.map +1 -0
  285. package/dist/adapters/tron/protobuf.d.ts +36 -0
  286. package/dist/adapters/tron/protobuf.js +90 -0
  287. package/dist/adapters/tron/protobuf.js.map +1 -0
  288. package/dist/adapters/tron/reader.d.ts +47 -0
  289. package/dist/adapters/tron/reader.js +203 -0
  290. package/dist/adapters/tron/reader.js.map +1 -0
  291. package/dist/adapters/tron/tokens.d.ts +7 -0
  292. package/dist/adapters/tron/tokens.js +14 -0
  293. package/dist/adapters/tron/tokens.js.map +1 -0
  294. package/dist/adapters/tron/types.d.ts +166 -0
  295. package/dist/adapters/tron/types.js +3 -0
  296. package/dist/adapters/tron/types.js.map +1 -0
  297. package/dist/adapters/utxo/address.d.ts +51 -0
  298. package/dist/adapters/utxo/address.js +341 -0
  299. package/dist/adapters/utxo/address.js.map +1 -0
  300. package/dist/adapters/utxo/builder.d.ts +35 -0
  301. package/dist/adapters/utxo/builder.js +380 -0
  302. package/dist/adapters/utxo/builder.js.map +1 -0
  303. package/dist/adapters/utxo/chains.d.ts +17 -0
  304. package/dist/adapters/utxo/chains.js +99 -0
  305. package/dist/adapters/utxo/chains.js.map +1 -0
  306. package/dist/adapters/utxo/codec.d.ts +120 -0
  307. package/dist/adapters/utxo/codec.js +408 -0
  308. package/dist/adapters/utxo/codec.js.map +1 -0
  309. package/dist/adapters/utxo/coinselect.d.ts +48 -0
  310. package/dist/adapters/utxo/coinselect.js +131 -0
  311. package/dist/adapters/utxo/coinselect.js.map +1 -0
  312. package/dist/adapters/utxo/context.d.ts +57 -0
  313. package/dist/adapters/utxo/context.js +118 -0
  314. package/dist/adapters/utxo/context.js.map +1 -0
  315. package/dist/adapters/utxo/decode.d.ts +14 -0
  316. package/dist/adapters/utxo/decode.js +85 -0
  317. package/dist/adapters/utxo/decode.js.map +1 -0
  318. package/dist/adapters/utxo/driver.d.ts +16 -0
  319. package/dist/adapters/utxo/driver.js +74 -0
  320. package/dist/adapters/utxo/driver.js.map +1 -0
  321. package/dist/adapters/utxo/ecc.d.ts +9 -0
  322. package/dist/adapters/utxo/ecc.js +26 -0
  323. package/dist/adapters/utxo/ecc.js.map +1 -0
  324. package/dist/adapters/utxo/errors.d.ts +52 -0
  325. package/dist/adapters/utxo/errors.js +191 -0
  326. package/dist/adapters/utxo/errors.js.map +1 -0
  327. package/dist/adapters/utxo/esplora.d.ts +79 -0
  328. package/dist/adapters/utxo/esplora.js +451 -0
  329. package/dist/adapters/utxo/esplora.js.map +1 -0
  330. package/dist/adapters/utxo/fees.d.ts +41 -0
  331. package/dist/adapters/utxo/fees.js +125 -0
  332. package/dist/adapters/utxo/fees.js.map +1 -0
  333. package/dist/adapters/utxo/index.d.ts +17 -0
  334. package/dist/adapters/utxo/index.js +8 -0
  335. package/dist/adapters/utxo/index.js.map +1 -0
  336. package/dist/adapters/utxo/network.d.ts +50 -0
  337. package/dist/adapters/utxo/network.js +165 -0
  338. package/dist/adapters/utxo/network.js.map +1 -0
  339. package/dist/adapters/utxo/plugin.d.ts +17 -0
  340. package/dist/adapters/utxo/plugin.js +41 -0
  341. package/dist/adapters/utxo/plugin.js.map +1 -0
  342. package/dist/adapters/utxo/presets.d.ts +12 -0
  343. package/dist/adapters/utxo/presets.js +47 -0
  344. package/dist/adapters/utxo/presets.js.map +1 -0
  345. package/dist/adapters/utxo/preview.d.ts +3 -0
  346. package/dist/adapters/utxo/preview.js +65 -0
  347. package/dist/adapters/utxo/preview.js.map +1 -0
  348. package/dist/adapters/utxo/proofs.d.ts +57 -0
  349. package/dist/adapters/utxo/proofs.js +331 -0
  350. package/dist/adapters/utxo/proofs.js.map +1 -0
  351. package/dist/adapters/utxo/rawtx.d.ts +59 -0
  352. package/dist/adapters/utxo/rawtx.js +234 -0
  353. package/dist/adapters/utxo/rawtx.js.map +1 -0
  354. package/dist/adapters/utxo/reader.d.ts +36 -0
  355. package/dist/adapters/utxo/reader.js +265 -0
  356. package/dist/adapters/utxo/reader.js.map +1 -0
  357. package/dist/adapters/utxo/sdk.d.ts +18 -0
  358. package/dist/adapters/utxo/sdk.js +17 -0
  359. package/dist/adapters/utxo/sdk.js.map +1 -0
  360. package/dist/adapters/utxo/signed-psbt.d.ts +36 -0
  361. package/dist/adapters/utxo/signed-psbt.js +428 -0
  362. package/dist/adapters/utxo/signed-psbt.js.map +1 -0
  363. package/dist/adapters/utxo/spend.d.ts +59 -0
  364. package/dist/adapters/utxo/spend.js +230 -0
  365. package/dist/adapters/utxo/spend.js.map +1 -0
  366. package/dist/adapters/utxo/types.d.ts +167 -0
  367. package/dist/adapters/utxo/types.js +3 -0
  368. package/dist/adapters/utxo/types.js.map +1 -0
  369. package/dist/core/assets/service.d.ts +18 -0
  370. package/dist/core/assets/service.js +69 -0
  371. package/dist/core/assets/service.js.map +1 -0
  372. package/dist/core/blockchain/default-ref.d.ts +4 -0
  373. package/dist/core/blockchain/default-ref.js +16 -0
  374. package/dist/core/blockchain/default-ref.js.map +1 -0
  375. package/dist/core/blockchain/handle.d.ts +200 -0
  376. package/dist/core/blockchain/handle.js +579 -0
  377. package/dist/core/blockchain/handle.js.map +1 -0
  378. package/dist/core/blockchain/internal.d.ts +19 -0
  379. package/dist/core/blockchain/internal.js +16 -0
  380. package/dist/core/blockchain/internal.js.map +1 -0
  381. package/dist/core/blockchain/mapping.d.ts +22 -0
  382. package/dist/core/blockchain/mapping.js +136 -0
  383. package/dist/core/blockchain/mapping.js.map +1 -0
  384. package/dist/core/config/env.d.ts +8 -0
  385. package/dist/core/config/env.js +60 -0
  386. package/dist/core/config/env.js.map +1 -0
  387. package/dist/core/config/merge.d.ts +26 -0
  388. package/dist/core/config/merge.js +144 -0
  389. package/dist/core/config/merge.js.map +1 -0
  390. package/dist/core/config/resolve.d.ts +12 -0
  391. package/dist/core/config/resolve.js +251 -0
  392. package/dist/core/config/resolve.js.map +1 -0
  393. package/dist/core/config/types.d.ts +165 -0
  394. package/dist/core/config/types.js +3 -0
  395. package/dist/core/config/types.js.map +1 -0
  396. package/dist/core/container/builtins.d.ts +4 -0
  397. package/dist/core/container/builtins.js +13 -0
  398. package/dist/core/container/builtins.js.map +1 -0
  399. package/dist/core/container/container.d.ts +69 -0
  400. package/dist/core/container/container.js +466 -0
  401. package/dist/core/container/container.js.map +1 -0
  402. package/dist/core/container/default.d.ts +15 -0
  403. package/dist/core/container/default.js +70 -0
  404. package/dist/core/container/default.js.map +1 -0
  405. package/dist/core/container/internals.d.ts +54 -0
  406. package/dist/core/container/internals.js +21 -0
  407. package/dist/core/container/internals.js.map +1 -0
  408. package/dist/core/container/pool.d.ts +27 -0
  409. package/dist/core/container/pool.js +77 -0
  410. package/dist/core/container/pool.js.map +1 -0
  411. package/dist/core/driver/types.d.ts +346 -0
  412. package/dist/core/driver/types.js +3 -0
  413. package/dist/core/driver/types.js.map +1 -0
  414. package/dist/core/errors/codes.d.ts +153 -0
  415. package/dist/core/errors/codes.js +49 -0
  416. package/dist/core/errors/codes.js.map +1 -0
  417. package/dist/core/errors/error.d.ts +66 -0
  418. package/dist/core/errors/error.js +129 -0
  419. package/dist/core/errors/error.js.map +1 -0
  420. package/dist/core/events/bus.d.ts +12 -0
  421. package/dist/core/events/bus.js +46 -0
  422. package/dist/core/events/bus.js.map +1 -0
  423. package/dist/core/events/logger.d.ts +13 -0
  424. package/dist/core/events/logger.js +42 -0
  425. package/dist/core/events/logger.js.map +1 -0
  426. package/dist/core/events/types.d.ts +131 -0
  427. package/dist/core/events/types.js +3 -0
  428. package/dist/core/events/types.js.map +1 -0
  429. package/dist/core/lifecycle/engine-rules.d.ts +107 -0
  430. package/dist/core/lifecycle/engine-rules.js +257 -0
  431. package/dist/core/lifecycle/engine-rules.js.map +1 -0
  432. package/dist/core/lifecycle/engine.d.ts +500 -0
  433. package/dist/core/lifecycle/engine.js +1732 -0
  434. package/dist/core/lifecycle/engine.js.map +1 -0
  435. package/dist/core/lifecycle/evaluate.d.ts +19 -0
  436. package/dist/core/lifecycle/evaluate.js +72 -0
  437. package/dist/core/lifecycle/evaluate.js.map +1 -0
  438. package/dist/core/lifecycle/intent.d.ts +11 -0
  439. package/dist/core/lifecycle/intent.js +88 -0
  440. package/dist/core/lifecycle/intent.js.map +1 -0
  441. package/dist/core/lifecycle/monitor.d.ts +138 -0
  442. package/dist/core/lifecycle/monitor.js +606 -0
  443. package/dist/core/lifecycle/monitor.js.map +1 -0
  444. package/dist/core/lifecycle/observations.d.ts +17 -0
  445. package/dist/core/lifecycle/observations.js +59 -0
  446. package/dist/core/lifecycle/observations.js.map +1 -0
  447. package/dist/core/lifecycle/reconcile.d.ts +58 -0
  448. package/dist/core/lifecycle/reconcile.js +112 -0
  449. package/dist/core/lifecycle/reconcile.js.map +1 -0
  450. package/dist/core/lifecycle/views.d.ts +49 -0
  451. package/dist/core/lifecycle/views.js +57 -0
  452. package/dist/core/lifecycle/views.js.map +1 -0
  453. package/dist/core/lifecycle/workers.d.ts +82 -0
  454. package/dist/core/lifecycle/workers.js +329 -0
  455. package/dist/core/lifecycle/workers.js.map +1 -0
  456. package/dist/core/model/address.d.ts +32 -0
  457. package/dist/core/model/address.js +43 -0
  458. package/dist/core/model/address.js.map +1 -0
  459. package/dist/core/model/amount.d.ts +25 -0
  460. package/dist/core/model/amount.js +102 -0
  461. package/dist/core/model/amount.js.map +1 -0
  462. package/dist/core/model/asset.d.ts +28 -0
  463. package/dist/core/model/asset.js +47 -0
  464. package/dist/core/model/asset.js.map +1 -0
  465. package/dist/core/model/capability.d.ts +3 -0
  466. package/dist/core/model/capability.js +18 -0
  467. package/dist/core/model/capability.js.map +1 -0
  468. package/dist/core/model/chain.d.ts +63 -0
  469. package/dist/core/model/chain.js +8 -0
  470. package/dist/core/model/chain.js.map +1 -0
  471. package/dist/core/model/fee.d.ts +36 -0
  472. package/dist/core/model/fee.js +17 -0
  473. package/dist/core/model/fee.js.map +1 -0
  474. package/dist/core/model/ids.d.ts +37 -0
  475. package/dist/core/model/ids.js +13 -0
  476. package/dist/core/model/ids.js.map +1 -0
  477. package/dist/core/model/intent.d.ts +63 -0
  478. package/dist/core/model/intent.js +81 -0
  479. package/dist/core/model/intent.js.map +1 -0
  480. package/dist/core/model/ordering.d.ts +20 -0
  481. package/dist/core/model/ordering.js +29 -0
  482. package/dist/core/model/ordering.js.map +1 -0
  483. package/dist/core/model/transaction.d.ts +116 -0
  484. package/dist/core/model/transaction.js +3 -0
  485. package/dist/core/model/transaction.js.map +1 -0
  486. package/dist/core/observe/scanner.d.ts +135 -0
  487. package/dist/core/observe/scanner.js +355 -0
  488. package/dist/core/observe/scanner.js.map +1 -0
  489. package/dist/core/ordering/reservations.d.ts +16 -0
  490. package/dist/core/ordering/reservations.js +53 -0
  491. package/dist/core/ordering/reservations.js.map +1 -0
  492. package/dist/core/ordering/sequence.d.ts +61 -0
  493. package/dist/core/ordering/sequence.js +155 -0
  494. package/dist/core/ordering/sequence.js.map +1 -0
  495. package/dist/core/registry/adapters.d.ts +10 -0
  496. package/dist/core/registry/adapters.js +56 -0
  497. package/dist/core/registry/adapters.js.map +1 -0
  498. package/dist/core/registry/assets.d.ts +18 -0
  499. package/dist/core/registry/assets.js +90 -0
  500. package/dist/core/registry/assets.js.map +1 -0
  501. package/dist/core/registry/chains.d.ts +10 -0
  502. package/dist/core/registry/chains.js +80 -0
  503. package/dist/core/registry/chains.js.map +1 -0
  504. package/dist/core/registry/plugin.d.ts +41 -0
  505. package/dist/core/registry/plugin.js +109 -0
  506. package/dist/core/registry/plugin.js.map +1 -0
  507. package/dist/core/registry/providers.d.ts +31 -0
  508. package/dist/core/registry/providers.js +43 -0
  509. package/dist/core/registry/providers.js.map +1 -0
  510. package/dist/core/registry/schemes.d.ts +30 -0
  511. package/dist/core/registry/schemes.js +84 -0
  512. package/dist/core/registry/schemes.js.map +1 -0
  513. package/dist/core/secret/fragments.d.ts +33 -0
  514. package/dist/core/secret/fragments.js +110 -0
  515. package/dist/core/secret/fragments.js.map +1 -0
  516. package/dist/core/secret/redact.d.ts +10 -0
  517. package/dist/core/secret/redact.js +110 -0
  518. package/dist/core/secret/redact.js.map +1 -0
  519. package/dist/core/secret/secret.d.ts +14 -0
  520. package/dist/core/secret/secret.js +42 -0
  521. package/dist/core/secret/secret.js.map +1 -0
  522. package/dist/core/signing/callback.d.ts +10 -0
  523. package/dist/core/signing/callback.js +22 -0
  524. package/dist/core/signing/callback.js.map +1 -0
  525. package/dist/core/signing/guard.d.ts +18 -0
  526. package/dist/core/signing/guard.js +72 -0
  527. package/dist/core/signing/guard.js.map +1 -0
  528. package/dist/core/signing/hd.d.ts +36 -0
  529. package/dist/core/signing/hd.js +167 -0
  530. package/dist/core/signing/hd.js.map +1 -0
  531. package/dist/core/signing/local.d.ts +48 -0
  532. package/dist/core/signing/local.js +190 -0
  533. package/dist/core/signing/local.js.map +1 -0
  534. package/dist/core/signing/orchestrator.d.ts +40 -0
  535. package/dist/core/signing/orchestrator.js +300 -0
  536. package/dist/core/signing/orchestrator.js.map +1 -0
  537. package/dist/core/signing/types.d.ts +64 -0
  538. package/dist/core/signing/types.js +3 -0
  539. package/dist/core/signing/types.js.map +1 -0
  540. package/dist/core/signing/wallet.d.ts +48 -0
  541. package/dist/core/signing/wallet.js +153 -0
  542. package/dist/core/signing/wallet.js.map +1 -0
  543. package/dist/core/store/clone.d.ts +25 -0
  544. package/dist/core/store/clone.js +71 -0
  545. package/dist/core/store/clone.js.map +1 -0
  546. package/dist/core/store/memory.d.ts +38 -0
  547. package/dist/core/store/memory.js +325 -0
  548. package/dist/core/store/memory.js.map +1 -0
  549. package/dist/core/store/types.d.ts +246 -0
  550. package/dist/core/store/types.js +117 -0
  551. package/dist/core/store/types.js.map +1 -0
  552. package/dist/core/transport/backoff.d.ts +8 -0
  553. package/dist/core/transport/backoff.js +27 -0
  554. package/dist/core/transport/backoff.js.map +1 -0
  555. package/dist/core/transport/circuit.d.ts +25 -0
  556. package/dist/core/transport/circuit.js +61 -0
  557. package/dist/core/transport/circuit.js.map +1 -0
  558. package/dist/core/transport/http-transport.d.ts +30 -0
  559. package/dist/core/transport/http-transport.js +1695 -0
  560. package/dist/core/transport/http-transport.js.map +1 -0
  561. package/dist/core/transport/rate-limit.d.ts +27 -0
  562. package/dist/core/transport/rate-limit.js +78 -0
  563. package/dist/core/transport/rate-limit.js.map +1 -0
  564. package/dist/core/transport/stale-view.d.ts +11 -0
  565. package/dist/core/transport/stale-view.js +17 -0
  566. package/dist/core/transport/stale-view.js.map +1 -0
  567. package/dist/core/transport/types.d.ts +144 -0
  568. package/dist/core/transport/types.js +6 -0
  569. package/dist/core/transport/types.js.map +1 -0
  570. package/dist/core/util/bytes.d.ts +9 -0
  571. package/dist/core/util/bytes.js +40 -0
  572. package/dist/core/util/bytes.js.map +1 -0
  573. package/dist/core/util/clock.d.ts +6 -0
  574. package/dist/core/util/clock.js +26 -0
  575. package/dist/core/util/clock.js.map +1 -0
  576. package/dist/core/util/freeze.d.ts +8 -0
  577. package/dist/core/util/freeze.js +31 -0
  578. package/dist/core/util/freeze.js.map +1 -0
  579. package/dist/core/util/json.d.ts +29 -0
  580. package/dist/core/util/json.js +165 -0
  581. package/dist/core/util/json.js.map +1 -0
  582. package/dist/core/util/names.d.ts +21 -0
  583. package/dist/core/util/names.js +46 -0
  584. package/dist/core/util/names.js.map +1 -0
  585. package/dist/index.d.ts +64 -14
  586. package/dist/index.js +105 -49
  587. package/dist/index.js.map +1 -1
  588. package/dist/native.d.ts +21 -0
  589. package/dist/native.js +44 -0
  590. package/dist/native.js.map +1 -0
  591. package/dist/testing/contracts/api.d.ts +12 -0
  592. package/dist/testing/contracts/api.js +58 -0
  593. package/dist/testing/contracts/api.js.map +1 -0
  594. package/dist/testing/contracts/cursors.d.ts +6 -0
  595. package/dist/testing/contracts/cursors.js +43 -0
  596. package/dist/testing/contracts/cursors.js.map +1 -0
  597. package/dist/testing/contracts/locks.d.ts +10 -0
  598. package/dist/testing/contracts/locks.js +63 -0
  599. package/dist/testing/contracts/locks.js.map +1 -0
  600. package/dist/testing/contracts/operations.d.ts +21 -0
  601. package/dist/testing/contracts/operations.js +718 -0
  602. package/dist/testing/contracts/operations.js.map +1 -0
  603. package/dist/testing/contracts/sequences.d.ts +6 -0
  604. package/dist/testing/contracts/sequences.js +68 -0
  605. package/dist/testing/contracts/sequences.js.map +1 -0
  606. package/dist/testing/env.d.ts +63 -0
  607. package/dist/testing/env.js +105 -0
  608. package/dist/testing/env.js.map +1 -0
  609. package/dist/testing/fake-chain.d.ts +118 -0
  610. package/dist/testing/fake-chain.js +536 -0
  611. package/dist/testing/fake-chain.js.map +1 -0
  612. package/dist/testing/fake-clock.d.ts +15 -0
  613. package/dist/testing/fake-clock.js +86 -0
  614. package/dist/testing/fake-clock.js.map +1 -0
  615. package/dist/testing/fake-driver.d.ts +15 -0
  616. package/dist/testing/fake-driver.js +458 -0
  617. package/dist/testing/fake-driver.js.map +1 -0
  618. package/dist/testing/fake-fetch.d.ts +32 -0
  619. package/dist/testing/fake-fetch.js +81 -0
  620. package/dist/testing/fake-fetch.js.map +1 -0
  621. package/dist/testing/fake-plugin.d.ts +30 -0
  622. package/dist/testing/fake-plugin.js +66 -0
  623. package/dist/testing/fake-plugin.js.map +1 -0
  624. package/dist/testing/faulty-store.d.ts +36 -0
  625. package/dist/testing/faulty-store.js +66 -0
  626. package/dist/testing/faulty-store.js.map +1 -0
  627. package/dist/testing/generation.d.ts +60 -0
  628. package/dist/testing/generation.js +252 -0
  629. package/dist/testing/generation.js.map +1 -0
  630. package/dist/testing/index.d.ts +28 -0
  631. package/dist/testing/index.js +51 -0
  632. package/dist/testing/index.js.map +1 -0
  633. package/package.json +188 -44
  634. package/dist/libs/eth/account.d.ts +0 -9
  635. package/dist/libs/eth/account.js +0 -58
  636. package/dist/libs/eth/account.js.map +0 -1
  637. package/dist/libs/eth/contract.d.ts +0 -2
  638. package/dist/libs/eth/contract.js +0 -7
  639. package/dist/libs/eth/contract.js.map +0 -1
  640. package/dist/libs/eth/index.d.ts +0 -20
  641. package/dist/libs/eth/index.js +0 -62
  642. package/dist/libs/eth/index.js.map +0 -1
  643. package/dist/libs/eth/transact.d.ts +0 -2
  644. package/dist/libs/eth/transact.js +0 -7
  645. package/dist/libs/eth/transact.js.map +0 -1
  646. package/dist/libs/index.d.ts +0 -1
  647. package/dist/libs/index.js +0 -18
  648. package/dist/libs/index.js.map +0 -1
  649. package/dist/tool/common.d.ts +0 -28
  650. package/dist/tool/common.js +0 -33
  651. package/dist/tool/common.js.map +0 -1
  652. package/dist/tool/eth-tools.d.ts +0 -3
  653. package/dist/tool/eth-tools.js +0 -33
  654. package/dist/tool/eth-tools.js.map +0 -1
  655. package/dist/tool/index.d.ts +0 -4
  656. package/dist/tool/index.js +0 -21
  657. package/dist/tool/index.js.map +0 -1
  658. package/dist/tool/logging.d.ts +0 -3
  659. package/dist/tool/logging.js +0 -11
  660. package/dist/tool/logging.js.map +0 -1
  661. package/dist/tool/options.d.ts +0 -4
  662. package/dist/tool/options.js +0 -28
  663. package/dist/tool/options.js.map +0 -1
  664. package/dist/type/account.d.ts +0 -9
  665. package/dist/type/account.js.map +0 -1
  666. package/dist/type/common.d.ts +0 -18
  667. package/dist/type/common.js.map +0 -1
  668. package/dist/type/index.d.ts +0 -3
  669. package/dist/type/index.js +0 -20
  670. package/dist/type/index.js.map +0 -1
  671. package/dist/type/lib-types.d.ts +0 -7
  672. package/dist/type/lib-types.js.map +0 -1
@@ -0,0 +1,64 @@
1
+ import type { FeeEstimateDraft } from '../model/fee';
2
+ import type { IntentSummary } from '../model/intent';
3
+ import type { Secret } from '../secret/secret';
4
+ export interface KeyRef {
5
+ /** Routes a request to a specific signer through `WalletConfig.signers`. */
6
+ readonly id?: string;
7
+ /** HD derivation path for mnemonic-backed signers. */
8
+ readonly path?: string;
9
+ }
10
+ export interface SigningParams {
11
+ /** BIP341 key-path tweak for `secp256k1-schnorr`. */
12
+ readonly tweak?: Uint8Array;
13
+ }
14
+ export interface SigningRequest {
15
+ readonly id: string;
16
+ readonly scheme: string;
17
+ readonly payload: Uint8Array;
18
+ readonly payloadKind: 'digest' | 'message';
19
+ readonly publicKey: Uint8Array;
20
+ readonly keyRef?: KeyRef;
21
+ readonly params?: SigningParams;
22
+ }
23
+ /** `secp256k1-ecdsa`: 64-byte compact r‖s (low-s) plus `recovery`; others: raw signature. */
24
+ export interface SignatureBundle {
25
+ readonly requestId: string;
26
+ readonly bytes: Uint8Array;
27
+ readonly recovery?: number;
28
+ }
29
+ export type SigningResult = {
30
+ readonly status: 'signed';
31
+ readonly signatures: readonly SignatureBundle[];
32
+ } | {
33
+ readonly status: 'pending';
34
+ readonly ticket?: string;
35
+ };
36
+ /** A pending signer's ticket, kept with the signer that issued it (only it can cancel it). */
37
+ export interface SignerTicket {
38
+ readonly signerId: string;
39
+ readonly ticket: string;
40
+ }
41
+ export type SigningPurpose = 'original' | 'replacement' | 'cancel' | 'rebuild';
42
+ /** Context handed to signers and policy hooks. Never contains secrets or SDK objects. */
43
+ export interface SigningContext {
44
+ readonly operationId: string;
45
+ readonly namespace: string;
46
+ readonly chain: string;
47
+ readonly network: string;
48
+ readonly wallet: string;
49
+ readonly tier?: string;
50
+ readonly purpose: SigningPurpose;
51
+ readonly summary: IntentSummary;
52
+ readonly fee: FeeEstimateDraft;
53
+ readonly unsignedHash: string;
54
+ }
55
+ export interface Signer {
56
+ readonly id: string;
57
+ readonly schemes: readonly string[];
58
+ getPublicKey(scheme: string, keyRef?: KeyRef): Promise<Uint8Array>;
59
+ sign(requests: readonly SigningRequest[], ctx: SigningContext): Promise<SigningResult>;
60
+ /** Best-effort cancellation of a pending request (used by `abandon`). */
61
+ cancelRequest?(ticket: string): Promise<void>;
62
+ /** Only available on signers created as exportable. */
63
+ exportKey?(scheme: string, keyRef?: KeyRef): Promise<Secret<Uint8Array>>;
64
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/signing/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { FeeEstimateDraft } from '../model/fee';\nimport type { IntentSummary } from '../model/intent';\nimport type { Secret } from '../secret/secret';\n\nexport interface KeyRef {\n /** Routes a request to a specific signer through `WalletConfig.signers`. */\n readonly id?: string;\n /** HD derivation path for mnemonic-backed signers. */\n readonly path?: string;\n}\n\nexport interface SigningParams {\n /** BIP341 key-path tweak for `secp256k1-schnorr`. */\n readonly tweak?: Uint8Array;\n}\n\nexport interface SigningRequest {\n readonly id: string;\n readonly scheme: string;\n readonly payload: Uint8Array;\n readonly payloadKind: 'digest' | 'message';\n readonly publicKey: Uint8Array;\n readonly keyRef?: KeyRef;\n readonly params?: SigningParams;\n}\n\n/** `secp256k1-ecdsa`: 64-byte compact r‖s (low-s) plus `recovery`; others: raw signature. */\nexport interface SignatureBundle {\n readonly requestId: string;\n readonly bytes: Uint8Array;\n readonly recovery?: number;\n}\n\nexport type SigningResult =\n | { readonly status: 'signed'; readonly signatures: readonly SignatureBundle[] }\n | { readonly status: 'pending'; readonly ticket?: string };\n\n/** A pending signer's ticket, kept with the signer that issued it (only it can cancel it). */\nexport interface SignerTicket {\n readonly signerId: string;\n readonly ticket: string;\n}\n\nexport type SigningPurpose = 'original' | 'replacement' | 'cancel' | 'rebuild';\n\n/** Context handed to signers and policy hooks. Never contains secrets or SDK objects. */\nexport interface SigningContext {\n readonly operationId: string;\n readonly namespace: string;\n readonly chain: string;\n readonly network: string;\n readonly wallet: string;\n readonly tier?: string;\n readonly purpose: SigningPurpose;\n readonly summary: IntentSummary;\n readonly fee: FeeEstimateDraft;\n readonly unsignedHash: string;\n}\n\nexport interface Signer {\n readonly id: string;\n readonly schemes: readonly string[];\n getPublicKey(scheme: string, keyRef?: KeyRef): Promise<Uint8Array>;\n sign(requests: readonly SigningRequest[], ctx: SigningContext): Promise<SigningResult>;\n /** Best-effort cancellation of a pending request (used by `abandon`). */\n cancelRequest?(ticket: string): Promise<void>;\n /** Only available on signers created as exportable. */\n exportKey?(scheme: string, keyRef?: KeyRef): Promise<Secret<Uint8Array>>;\n}\n"]}
@@ -0,0 +1,48 @@
1
+ import type { ResolvedSelection, WalletConfig } from '../config/types';
2
+ import type { ChainDriver, WalletKey, WalletOptions } from '../driver/types';
3
+ import { Address } from '../model/address';
4
+ import type { SchemeCatalog } from '../registry/schemes';
5
+ import { type SignerDeadline } from './guard';
6
+ import { type ExtendedKeyVersions } from './hd';
7
+ import type { KeyRef, Signer } from './types';
8
+ export interface ResolvedWallet {
9
+ readonly name: string;
10
+ readonly config: WalletConfig;
11
+ readonly address: Address;
12
+ /** One key per chain scheme the signer supports; `keys[0]` defines the address. */
13
+ readonly keys: readonly WalletKey[];
14
+ readonly options: WalletOptions;
15
+ readonly watchOnly: boolean;
16
+ readonly tier?: string;
17
+ signerFor(keyRef?: KeyRef): {
18
+ readonly id: string;
19
+ readonly signer: Signer;
20
+ } | undefined;
21
+ /** The signer with this id (own keys only), e.g. to cancel a ticket through its issuer. */
22
+ signerById(id: string): {
23
+ readonly id: string;
24
+ readonly signer: Signer;
25
+ } | undefined;
26
+ }
27
+ /**
28
+ * The wallet's extended public key as drivers receive it, `WalletOptions.hd`: plain,
29
+ * frozen data, present only when the wallet configures a non-empty `xpub` (an empty
30
+ * one counts as none, as in `deriveAddress`), which must be a readable PUBLIC extended key
31
+ * (`CONFIG_INVALID` otherwise, naming no key).
32
+ */
33
+ export interface WalletHdOptions {
34
+ readonly xpub: string;
35
+ /** Child path template relative to the xpub; `{index}` is replaced. Default `0/{index}`. */
36
+ readonly xpubPath?: string;
37
+ readonly xpubVersions?: ExtendedKeyVersions;
38
+ }
39
+ export declare function walletOptionsOf(config: WalletConfig): WalletOptions;
40
+ /**
41
+ * The wallet's `xpubPath`, `undefined` when absent (`undefined` or `null`, as
42
+ * `deriveAddress` reads it). One that is present but not a string is `CONFIG_INVALID` with a
43
+ * fixed text. Wallet resolution and `deriveAddress` share this check.
44
+ */
45
+ export declare function xpubPathOf(config: WalletConfig): string | undefined;
46
+ export declare function resolveWallet(selection: ResolvedSelection, driver: ChainDriver, signers: Readonly<Record<string, Signer>>, schemes: SchemeCatalog,
47
+ /** Bounds each public-key read (`lifecycle.signTimeoutMs`). */
48
+ deadline?: SignerDeadline): Promise<ResolvedWallet>;
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.walletOptionsOf = walletOptionsOf;
4
+ exports.xpubPathOf = xpubPathOf;
5
+ exports.resolveWallet = resolveWallet;
6
+ const error_1 = require("../errors/error");
7
+ const address_1 = require("../model/address");
8
+ const bytes_1 = require("../util/bytes");
9
+ const guard_1 = require("./guard");
10
+ const hd_1 = require("./hd");
11
+ function walletOptionsOf(config) {
12
+ // `hd` is the core's own key: the wallet's xpub or nothing, never a user option, since
13
+ // a driver trusts it to validate change addresses.
14
+ const { hd: _ignored, ...options } = config.options ?? {};
15
+ return {
16
+ ...options,
17
+ ...(config.utxo ? { utxo: config.utxo } : {}),
18
+ ...(config.ton ? { ton: config.ton } : {}),
19
+ // A falsy `xpub` ('', null) is no xpub, as `deriveAddress` reads it.
20
+ ...(config.xpub ? { hd: hdOptionsOf(config) } : {}),
21
+ };
22
+ }
23
+ /**
24
+ * The wallet's `xpubPath`, `undefined` when absent (`undefined` or `null`, as
25
+ * `deriveAddress` reads it). One that is present but not a string is `CONFIG_INVALID` with a
26
+ * fixed text. Wallet resolution and `deriveAddress` share this check.
27
+ */
28
+ function xpubPathOf(config) {
29
+ const path = config.xpubPath;
30
+ if (path === undefined || path === null)
31
+ return undefined;
32
+ if (typeof path !== 'string') {
33
+ throw new error_1.ConfigError('CONFIG_INVALID', 'xpubPath must be a string');
34
+ }
35
+ return path;
36
+ }
37
+ function hdOptionsOf(config) {
38
+ const xpubPath = xpubPathOf(config);
39
+ const versions = config.xpubVersions;
40
+ // The frozen copy comes first, reading each field once, and the key is read against
41
+ // it, so it is checked against exactly the versions a driver receives.
42
+ const hd = Object.freeze({
43
+ xpub: config.xpub,
44
+ ...(xpubPath !== undefined ? { xpubPath } : {}),
45
+ // The version pair only, never other keys of the caller's object.
46
+ ...(versions
47
+ ? {
48
+ xpubVersions: Object.freeze({
49
+ private: versions.private,
50
+ public: versions.public,
51
+ }),
52
+ }
53
+ : {}),
54
+ });
55
+ // Only a readable, PUBLIC extended key ever reaches a driver.
56
+ (0, hd_1.parseExtendedPublicKey)(hd.xpub, hd.xpubVersions);
57
+ return hd;
58
+ }
59
+ /**
60
+ * A watch-only wallet's `publicKey` is checked as a signer's key is: hex of
61
+ * exactly the length its scheme defines. Any other key fails here, never later: an
62
+ * uncompressed secp256k1 key derives an address but never verifies a signature.
63
+ */
64
+ function watchOnlyKey(name, hex, scheme, length) {
65
+ let key;
66
+ try {
67
+ key = typeof hex === 'string' ? (0, bytes_1.fromHex)(hex) : undefined;
68
+ }
69
+ catch {
70
+ key = undefined;
71
+ }
72
+ if (key === undefined || key.length !== length) {
73
+ throw new error_1.ConfigError('CONFIG_INVALID', `wallet '${name}': publicKey must be ${length} bytes of hex for ${scheme}`);
74
+ }
75
+ return key;
76
+ }
77
+ async function resolveWallet(selection, driver, signers, schemes,
78
+ /** Bounds each public-key read (`lifecycle.signTimeoutMs`). */
79
+ deadline) {
80
+ const wallet = selection.wallet;
81
+ if (!wallet) {
82
+ throw new error_1.ConfigError('CONFIG_INVALID', `no wallet selected for ${selection.chain.id}; pass { wallet } or set chains.${selection.chain.id}.wallet`);
83
+ }
84
+ const { config } = wallet;
85
+ const options = walletOptionsOf(config);
86
+ const keyRef = config.keyRef;
87
+ const keys = [];
88
+ if (selection.signer) {
89
+ // The signer is user-supplied code; its scheme list and keys are guarded.
90
+ const { id, instance } = selection.signer;
91
+ const supported = (0, guard_1.signerSchemes)(id, instance);
92
+ for (const scheme of selection.chain.schemes) {
93
+ if (!supported.includes(scheme))
94
+ continue;
95
+ const { publicKeyLength } = schemes.get(scheme);
96
+ const publicKey = await (0, guard_1.signerPublicKey)(id, instance, scheme, keyRef, publicKeyLength, deadline);
97
+ keys.push({ scheme, publicKey, ...(keyRef ? { keyRef } : {}) });
98
+ }
99
+ }
100
+ else if (config.publicKey) {
101
+ const scheme = selection.chain.schemes[0];
102
+ keys.push({
103
+ scheme,
104
+ publicKey: watchOnlyKey(wallet.name, config.publicKey, scheme, schemes.get(scheme).publicKeyLength),
105
+ ...(keyRef ? { keyRef } : {}),
106
+ });
107
+ }
108
+ const first = keys[0];
109
+ const derived = first
110
+ ? driver.address.fromPublicKey(first.publicKey, options)
111
+ : undefined;
112
+ const configured = config.address !== undefined ? driver.address.normalize(config.address) : undefined;
113
+ if (derived && configured && derived.canonical !== configured.canonical) {
114
+ throw new error_1.ConfigError('CONFIG_INVALID', `wallet '${wallet.name}': configured address does not match its public key`);
115
+ }
116
+ const normalized = configured ?? derived;
117
+ if (!normalized) {
118
+ throw new error_1.ConfigError('CONFIG_INVALID', `wallet '${wallet.name}' needs a signer, a publicKey or an address`);
119
+ }
120
+ const primary = selection.signer;
121
+ return {
122
+ name: wallet.name,
123
+ config,
124
+ address: new address_1.Address(selection.chain.id, normalized, driver.address.format),
125
+ keys,
126
+ options,
127
+ watchOnly: !primary,
128
+ ...(config.tier !== undefined ? { tier: config.tier } : {}),
129
+ signerFor: (ref) => {
130
+ // Own keys only: a key ref named `toString` routes nowhere.
131
+ const routes = config.signers ?? {};
132
+ const routed = ref?.id !== undefined && Object.hasOwn(routes, ref.id)
133
+ ? routes[ref.id]
134
+ : undefined;
135
+ const id = routed ?? primary?.id;
136
+ if (id === undefined)
137
+ return undefined;
138
+ const signer = id === primary?.id
139
+ ? primary.instance
140
+ : Object.hasOwn(signers, id)
141
+ ? signers[id]
142
+ : undefined;
143
+ return signer ? { id, signer } : undefined;
144
+ },
145
+ signerById: (id) => {
146
+ if (id === primary?.id)
147
+ return { id, signer: primary.instance };
148
+ const signer = Object.hasOwn(signers, id) ? signers[id] : undefined;
149
+ return signer ? { id, signer } : undefined;
150
+ },
151
+ };
152
+ }
153
+ //# sourceMappingURL=wallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../../src/core/signing/wallet.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ResolvedSelection, WalletConfig } from '../config/types';\nimport type { ChainDriver, WalletKey, WalletOptions } from '../driver/types';\nimport { ConfigError } from '../errors/error';\nimport { Address } from '../model/address';\nimport type { SchemeCatalog } from '../registry/schemes';\nimport { fromHex } from '../util/bytes';\nimport { signerPublicKey, signerSchemes, type SignerDeadline } from './guard';\nimport { parseExtendedPublicKey, type ExtendedKeyVersions } from './hd';\nimport type { KeyRef, Signer } from './types';\n\nexport interface ResolvedWallet {\n readonly name: string;\n readonly config: WalletConfig;\n readonly address: Address;\n /** One key per chain scheme the signer supports; `keys[0]` defines the address. */\n readonly keys: readonly WalletKey[];\n readonly options: WalletOptions;\n readonly watchOnly: boolean;\n readonly tier?: string;\n signerFor(\n keyRef?: KeyRef,\n ): { readonly id: string; readonly signer: Signer } | undefined;\n /** The signer with this id (own keys only), e.g. to cancel a ticket through its issuer. */\n signerById(id: string): { readonly id: string; readonly signer: Signer } | undefined;\n}\n\n/**\n * The wallet's extended public key as drivers receive it, `WalletOptions.hd`: plain,\n * frozen data, present only when the wallet configures a non-empty `xpub` (an empty\n * one counts as none, as in `deriveAddress`), which must be a readable PUBLIC extended key\n * (`CONFIG_INVALID` otherwise, naming no key).\n */\nexport interface WalletHdOptions {\n readonly xpub: string;\n /** Child path template relative to the xpub; `{index}` is replaced. Default `0/{index}`. */\n readonly xpubPath?: string;\n readonly xpubVersions?: ExtendedKeyVersions;\n}\n\nexport function walletOptionsOf(config: WalletConfig): WalletOptions {\n // `hd` is the core's own key: the wallet's xpub or nothing, never a user option, since\n // a driver trusts it to validate change addresses.\n const { hd: _ignored, ...options } = config.options ?? {};\n return {\n ...options,\n ...(config.utxo ? { utxo: config.utxo } : {}),\n ...(config.ton ? { ton: config.ton } : {}),\n // A falsy `xpub` ('', null) is no xpub, as `deriveAddress` reads it.\n ...(config.xpub ? { hd: hdOptionsOf(config) } : {}),\n };\n}\n\n/**\n * The wallet's `xpubPath`, `undefined` when absent (`undefined` or `null`, as\n * `deriveAddress` reads it). One that is present but not a string is `CONFIG_INVALID` with a\n * fixed text. Wallet resolution and `deriveAddress` share this check.\n */\nexport function xpubPathOf(config: WalletConfig): string | undefined {\n const path: unknown = config.xpubPath;\n if (path === undefined || path === null) return undefined;\n if (typeof path !== 'string') {\n throw new ConfigError('CONFIG_INVALID', 'xpubPath must be a string');\n }\n return path;\n}\n\nfunction hdOptionsOf(config: WalletConfig): WalletHdOptions {\n const xpubPath = xpubPathOf(config);\n const versions = config.xpubVersions;\n // The frozen copy comes first, reading each field once, and the key is read against\n // it, so it is checked against exactly the versions a driver receives.\n const hd: WalletHdOptions = Object.freeze({\n xpub: config.xpub as string,\n ...(xpubPath !== undefined ? { xpubPath } : {}),\n // The version pair only, never other keys of the caller's object.\n ...(versions\n ? {\n xpubVersions: Object.freeze({\n private: versions.private,\n public: versions.public,\n }),\n }\n : {}),\n });\n // Only a readable, PUBLIC extended key ever reaches a driver.\n parseExtendedPublicKey(hd.xpub, hd.xpubVersions);\n return hd;\n}\n\n/**\n * A watch-only wallet's `publicKey` is checked as a signer's key is: hex of\n * exactly the length its scheme defines. Any other key fails here, never later: an\n * uncompressed secp256k1 key derives an address but never verifies a signature.\n */\nfunction watchOnlyKey(\n name: string,\n hex: unknown,\n scheme: string,\n length: number,\n): Uint8Array {\n let key: Uint8Array | undefined;\n try {\n key = typeof hex === 'string' ? fromHex(hex) : undefined;\n } catch {\n key = undefined;\n }\n if (key === undefined || key.length !== length) {\n throw new ConfigError(\n 'CONFIG_INVALID',\n `wallet '${name}': publicKey must be ${length} bytes of hex for ${scheme}`,\n );\n }\n return key;\n}\n\nexport async function resolveWallet(\n selection: ResolvedSelection,\n driver: ChainDriver,\n signers: Readonly<Record<string, Signer>>,\n schemes: SchemeCatalog,\n /** Bounds each public-key read (`lifecycle.signTimeoutMs`). */\n deadline?: SignerDeadline,\n): Promise<ResolvedWallet> {\n const wallet = selection.wallet;\n if (!wallet) {\n throw new ConfigError(\n 'CONFIG_INVALID',\n `no wallet selected for ${selection.chain.id}; pass { wallet } or set chains.${selection.chain.id}.wallet`,\n );\n }\n const { config } = wallet;\n const options = walletOptionsOf(config);\n const keyRef = config.keyRef;\n const keys: WalletKey[] = [];\n if (selection.signer) {\n // The signer is user-supplied code; its scheme list and keys are guarded.\n const { id, instance } = selection.signer;\n const supported = signerSchemes(id, instance);\n for (const scheme of selection.chain.schemes) {\n if (!supported.includes(scheme)) continue;\n const { publicKeyLength } = schemes.get(scheme);\n const publicKey = await signerPublicKey(\n id,\n instance,\n scheme,\n keyRef,\n publicKeyLength,\n deadline,\n );\n keys.push({ scheme, publicKey, ...(keyRef ? { keyRef } : {}) });\n }\n } else if (config.publicKey) {\n const scheme = selection.chain.schemes[0] as string;\n keys.push({\n scheme,\n publicKey: watchOnlyKey(\n wallet.name,\n config.publicKey,\n scheme,\n schemes.get(scheme).publicKeyLength,\n ),\n ...(keyRef ? { keyRef } : {}),\n });\n }\n const first = keys[0];\n const derived = first\n ? driver.address.fromPublicKey(first.publicKey, options)\n : undefined;\n const configured =\n config.address !== undefined ? driver.address.normalize(config.address) : undefined;\n if (derived && configured && derived.canonical !== configured.canonical) {\n throw new ConfigError(\n 'CONFIG_INVALID',\n `wallet '${wallet.name}': configured address does not match its public key`,\n );\n }\n const normalized = configured ?? derived;\n if (!normalized) {\n throw new ConfigError(\n 'CONFIG_INVALID',\n `wallet '${wallet.name}' needs a signer, a publicKey or an address`,\n );\n }\n const primary = selection.signer;\n return {\n name: wallet.name,\n config,\n address: new Address(selection.chain.id, normalized, driver.address.format),\n keys,\n options,\n watchOnly: !primary,\n ...(config.tier !== undefined ? { tier: config.tier } : {}),\n signerFor: (ref) => {\n // Own keys only: a key ref named `toString` routes nowhere.\n const routes = config.signers ?? {};\n const routed =\n ref?.id !== undefined && Object.hasOwn(routes, ref.id)\n ? routes[ref.id]\n : undefined;\n const id = routed ?? primary?.id;\n if (id === undefined) return undefined;\n const signer =\n id === primary?.id\n ? primary.instance\n : Object.hasOwn(signers, id)\n ? signers[id]\n : undefined;\n return signer ? { id, signer } : undefined;\n },\n signerById: (id) => {\n if (id === primary?.id) return { id, signer: primary.instance };\n const signer = Object.hasOwn(signers, id) ? signers[id] : undefined;\n return signer ? { id, signer } : undefined;\n },\n };\n}\n"]}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Deep-clones plain JSON-like data: objects, arrays, `bigint`, `Uint8Array` and other
3
+ * primitives.
4
+ *
5
+ * Deliberately not `structuredClone`: under a sandboxed test runtime (e.g. Jest's
6
+ * per-file VM context), `structuredClone` rebuilds objects against the *host*
7
+ * realm's `Object`/`Array`, so a cloned plain object's prototype ends up `!==` the
8
+ * caller's own `Object.prototype` and `assert.deepStrictEqual` reports a spurious
9
+ * mismatch. This clone is realm-safe: it never uses `instanceof` against this
10
+ * module's own constructors, only `Array.isArray`, `Object.prototype.toString` and
11
+ * prototype-chain shape, so it works the same regardless of which realm the input
12
+ * came from.
13
+ *
14
+ * Only plain data is accepted. A future serialized store (Redis/Postgres) round-trips
15
+ * exactly two non-JSON shapes over the wire — `bigint` and `Uint8Array` — via a
16
+ * tagged encoding. Anything else (`Date`, `Map`, `Set`, `RegExp`, a class instance
17
+ * such as `Amount`/`Address`, a function, a symbol, or a typed array other than
18
+ * `Uint8Array`) has no such encoding, so it is rejected loudly here rather than
19
+ * silently corrupted (as a naive recursive clone would do to a `Uint8Array`, turning
20
+ * its bytes into a `{0: ..., 1: ...}` object) or silently dropped. This also covers
21
+ * symbol-keyed own properties on an otherwise plain object: `Object.entries` skips
22
+ * them silently, so they are rejected explicitly instead of being dropped without
23
+ * a trace.
24
+ */
25
+ export declare function clone<T>(value: T): T;
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.clone = clone;
4
+ /**
5
+ * Deep-clones plain JSON-like data: objects, arrays, `bigint`, `Uint8Array` and other
6
+ * primitives.
7
+ *
8
+ * Deliberately not `structuredClone`: under a sandboxed test runtime (e.g. Jest's
9
+ * per-file VM context), `structuredClone` rebuilds objects against the *host*
10
+ * realm's `Object`/`Array`, so a cloned plain object's prototype ends up `!==` the
11
+ * caller's own `Object.prototype` and `assert.deepStrictEqual` reports a spurious
12
+ * mismatch. This clone is realm-safe: it never uses `instanceof` against this
13
+ * module's own constructors, only `Array.isArray`, `Object.prototype.toString` and
14
+ * prototype-chain shape, so it works the same regardless of which realm the input
15
+ * came from.
16
+ *
17
+ * Only plain data is accepted. A future serialized store (Redis/Postgres) round-trips
18
+ * exactly two non-JSON shapes over the wire — `bigint` and `Uint8Array` — via a
19
+ * tagged encoding. Anything else (`Date`, `Map`, `Set`, `RegExp`, a class instance
20
+ * such as `Amount`/`Address`, a function, a symbol, or a typed array other than
21
+ * `Uint8Array`) has no such encoding, so it is rejected loudly here rather than
22
+ * silently corrupted (as a naive recursive clone would do to a `Uint8Array`, turning
23
+ * its bytes into a `{0: ..., 1: ...}` object) or silently dropped. This also covers
24
+ * symbol-keyed own properties on an otherwise plain object: `Object.entries` skips
25
+ * them silently, so they are rejected explicitly instead of being dropped without
26
+ * a trace.
27
+ */
28
+ function clone(value) {
29
+ if (value === null || value === undefined)
30
+ return value;
31
+ const kind = typeof value;
32
+ if (kind === 'string' || kind === 'number' || kind === 'boolean' || kind === 'bigint') {
33
+ return value;
34
+ }
35
+ if (kind === 'function' || kind === 'symbol')
36
+ return reject(value);
37
+ // kind === 'object' from here on.
38
+ if (Array.isArray(value)) {
39
+ // `Array.from` (called on this realm's own `Array`) always builds a this-realm
40
+ // array; `value.map(...)` would not — a foreign-realm array's inherited `.map`
41
+ // uses species-based construction and returns a result still rooted in the
42
+ // *foreign* `Array.prototype`, reintroducing the same realm mismatch this
43
+ // function exists to avoid.
44
+ return Array.from(value, (item) => clone(item));
45
+ }
46
+ if (Object.prototype.toString.call(value) === '[object Uint8Array]') {
47
+ return new Uint8Array(value);
48
+ }
49
+ if (isPlainObject(value)) {
50
+ if (Object.getOwnPropertySymbols(value).length > 0)
51
+ return reject(value);
52
+ const out = Object.getPrototypeOf(value) === null ? Object.create(null) : {};
53
+ for (const [key, item] of Object.entries(value)) {
54
+ out[key] = clone(item);
55
+ }
56
+ return out;
57
+ }
58
+ return reject(value);
59
+ }
60
+ /** True for `{}`/`Object.create(null)`-shaped objects, from any realm. */
61
+ function isPlainObject(value) {
62
+ const proto = Object.getPrototypeOf(value);
63
+ if (proto === null)
64
+ return true;
65
+ return Object.getPrototypeOf(proto) === null;
66
+ }
67
+ function reject(value) {
68
+ throw new TypeError('memory store accepts only plain data (objects, arrays, primitives, bigint, ' +
69
+ `Uint8Array); got ${Object.prototype.toString.call(value)}`);
70
+ }
71
+ //# sourceMappingURL=clone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clone.js","sourceRoot":"","sources":["../../../src/core/store/clone.ts"],"names":[],"mappings":";;AAwBA,sBA+BC;AAvDD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,SAAgB,KAAK,CAAI,KAAQ;IAC/B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAExD,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC;IAC1B,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IAEnE,kCAAkC;IAClC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,+EAA+E;QAC/E,+EAA+E;QAC/E,2EAA2E;QAC3E,0EAA0E;QAC1E,4BAA4B;QAC5B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAkB,EAAE,CAAC,IAAa,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAiB,CAAC;IACxF,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,qBAAqB,EAAE,CAAC;QACpE,OAAO,IAAI,UAAU,CAAC,KAA8B,CAAiB,CAAC;IACxE,CAAC;IACD,IAAI,aAAa,CAAC,KAAe,CAAC,EAAE,CAAC;QACnC,IAAI,MAAM,CAAC,qBAAqB,CAAC,KAAe,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACnF,MAAM,GAAG,GACP,MAAM,CAAC,cAAc,CAAC,KAAe,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;YAC3E,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,GAAQ,CAAC;IAClB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,0EAA0E;AAC1E,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,KAAK,GAAkB,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC1D,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;AAC/C,CAAC;AAED,SAAS,MAAM,CAAC,KAAc;IAC5B,MAAM,IAAI,SAAS,CACjB,6EAA6E;QAC3E,oBAAoB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAC9D,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Deep-clones plain JSON-like data: objects, arrays, `bigint`, `Uint8Array` and other\n * primitives.\n *\n * Deliberately not `structuredClone`: under a sandboxed test runtime (e.g. Jest's\n * per-file VM context), `structuredClone` rebuilds objects against the *host*\n * realm's `Object`/`Array`, so a cloned plain object's prototype ends up `!==` the\n * caller's own `Object.prototype` and `assert.deepStrictEqual` reports a spurious\n * mismatch. This clone is realm-safe: it never uses `instanceof` against this\n * module's own constructors, only `Array.isArray`, `Object.prototype.toString` and\n * prototype-chain shape, so it works the same regardless of which realm the input\n * came from.\n *\n * Only plain data is accepted. A future serialized store (Redis/Postgres) round-trips\n * exactly two non-JSON shapes over the wire — `bigint` and `Uint8Array` — via a\n * tagged encoding. Anything else (`Date`, `Map`, `Set`, `RegExp`, a class instance\n * such as `Amount`/`Address`, a function, a symbol, or a typed array other than\n * `Uint8Array`) has no such encoding, so it is rejected loudly here rather than\n * silently corrupted (as a naive recursive clone would do to a `Uint8Array`, turning\n * its bytes into a `{0: ..., 1: ...}` object) or silently dropped. This also covers\n * symbol-keyed own properties on an otherwise plain object: `Object.entries` skips\n * them silently, so they are rejected explicitly instead of being dropped without\n * a trace.\n */\nexport function clone<T>(value: T): T {\n if (value === null || value === undefined) return value;\n\n const kind = typeof value;\n if (kind === 'string' || kind === 'number' || kind === 'boolean' || kind === 'bigint') {\n return value;\n }\n if (kind === 'function' || kind === 'symbol') return reject(value);\n\n // kind === 'object' from here on.\n if (Array.isArray(value)) {\n // `Array.from` (called on this realm's own `Array`) always builds a this-realm\n // array; `value.map(...)` would not — a foreign-realm array's inherited `.map`\n // uses species-based construction and returns a result still rooted in the\n // *foreign* `Array.prototype`, reintroducing the same realm mismatch this\n // function exists to avoid.\n return Array.from(value as unknown[], (item: unknown) => clone(item)) as unknown as T;\n }\n if (Object.prototype.toString.call(value) === '[object Uint8Array]') {\n return new Uint8Array(value as unknown as Uint8Array) as unknown as T;\n }\n if (isPlainObject(value as object)) {\n if (Object.getOwnPropertySymbols(value as object).length > 0) return reject(value);\n const out: Record<string, unknown> =\n Object.getPrototypeOf(value as object) === null ? Object.create(null) : {};\n for (const [key, item] of Object.entries(value as Record<string, unknown>)) {\n out[key] = clone(item);\n }\n return out as T;\n }\n return reject(value);\n}\n\n/** True for `{}`/`Object.create(null)`-shaped objects, from any realm. */\nfunction isPlainObject(value: object): boolean {\n const proto: object | null = Object.getPrototypeOf(value);\n if (proto === null) return true;\n return Object.getPrototypeOf(proto) === null;\n}\n\nfunction reject(value: unknown): never {\n throw new TypeError(\n 'memory store accepts only plain data (objects, arrays, primitives, bigint, ' +\n `Uint8Array); got ${Object.prototype.toString.call(value)}`,\n );\n}\n"]}
@@ -0,0 +1,38 @@
1
+ import { type Clock } from '../util/clock';
2
+ import type { AttemptObservation, AttemptRecord, CreateResult, CursorStore, Fence, Lease, LockManager, NewOperation, OperationFilter, OperationPatch, OperationRecord, OperationStore, ScanCursor, SequenceState, SequenceStore, Stores, StoredCursor } from './types';
3
+ export declare class MemoryLockManager implements LockManager {
4
+ #private;
5
+ private readonly clock;
6
+ constructor(clock?: Clock);
7
+ acquire(key: string, owner: string, ttlMs: number): Promise<Lease | null>;
8
+ renew(lease: Lease, ttlMs: number): Promise<Lease | null>;
9
+ release(lease: Lease): Promise<void>;
10
+ }
11
+ export declare class MemorySequenceStore implements SequenceStore {
12
+ #private;
13
+ get(key: string): Promise<SequenceState | null>;
14
+ put(key: string, state: Omit<SequenceState, 'version'>, expectedVersion: number | null): Promise<void>;
15
+ }
16
+ export declare class MemoryCursorStore implements CursorStore {
17
+ #private;
18
+ get(key: string): Promise<StoredCursor | null>;
19
+ put(key: string, cursor: ScanCursor, expectedVersion: number | null): Promise<number>;
20
+ }
21
+ export declare class MemoryOperationStore implements OperationStore {
22
+ #private;
23
+ private readonly clock;
24
+ constructor(clock?: Clock);
25
+ create(operation: NewOperation): Promise<CreateResult>;
26
+ get(namespace: string, id: string): Promise<OperationRecord | null>;
27
+ getByKey(namespace: string, idempotencyKey: string): Promise<OperationRecord | null>;
28
+ findByRef(namespace: string, refOrTxHash: string): Promise<OperationRecord | null>;
29
+ update(namespace: string, id: string, patch: OperationPatch, expectedVersion: number, fence?: Fence): Promise<OperationRecord>;
30
+ appendAttempt(namespace: string, id: string, attempt: AttemptRecord, patch: OperationPatch, expectedVersion: number, fence?: Fence): Promise<OperationRecord>;
31
+ getObservation(attemptId: string): Promise<AttemptObservation | null>;
32
+ putObservation(observation: Omit<AttemptObservation, 'version'>, expectedVersion: number | null): Promise<AttemptObservation>;
33
+ claimDue(namespace: string, workerId: string, now: number, leaseMs: number, limit: number): Promise<OperationRecord[]>;
34
+ releaseClaim(namespace: string, id: string, fence: Fence): Promise<void>;
35
+ list(filter: OperationFilter): Promise<OperationRecord[]>;
36
+ purge(filter: OperationFilter): Promise<number>;
37
+ }
38
+ export declare function createMemoryStores(clock?: Clock): Stores;