@geeqdev/geeq-sdk 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (392) hide show
  1. package/.idea/geeq_sdk.iml +12 -0
  2. package/.idea/modules.xml +8 -0
  3. package/.idea/vcs.xml +6 -0
  4. package/.nvmrc +1 -0
  5. package/CONTRIBUTING.md +20 -0
  6. package/dist/src/address/record-type.d.ts +10 -0
  7. package/dist/src/address/record-type.js +59 -0
  8. package/dist/src/address/record-type.js.map +1 -0
  9. package/dist/src/address/wallet-address.d.ts +34 -0
  10. package/dist/src/address/wallet-address.js +90 -0
  11. package/dist/src/address/wallet-address.js.map +1 -0
  12. package/dist/src/amount.d.ts +43 -0
  13. package/dist/src/amount.js +105 -0
  14. package/dist/src/amount.js.map +1 -0
  15. package/dist/src/assert.d.ts +12 -0
  16. package/dist/src/assert.js +24 -0
  17. package/dist/src/assert.js.map +1 -0
  18. package/dist/src/capnp/adminNetTx.capnp.d.ts +75 -0
  19. package/dist/src/capnp/adminNetTx.capnp.js +66 -0
  20. package/dist/src/capnp/adminNetTx.capnp.js.map +1 -0
  21. package/dist/src/capnp/appLayBlock.capnp.d.ts +26 -0
  22. package/dist/src/capnp/appLayBlock.capnp.js +24 -0
  23. package/dist/src/capnp/appLayBlock.capnp.js.map +1 -0
  24. package/dist/src/capnp/appLayLedger.capnp.d.ts +34 -0
  25. package/dist/src/capnp/appLayLedger.capnp.js +32 -0
  26. package/dist/src/capnp/appLayLedger.capnp.js.map +1 -0
  27. package/dist/src/capnp/appLayRec.capnp.d.ts +129 -0
  28. package/dist/src/capnp/appLayRec.capnp.js +156 -0
  29. package/dist/src/capnp/appLayRec.capnp.js.map +1 -0
  30. package/dist/src/capnp/chainStateView.capnp.d.ts +50 -0
  31. package/dist/src/capnp/chainStateView.capnp.js +48 -0
  32. package/dist/src/capnp/chainStateView.capnp.js.map +1 -0
  33. package/dist/src/capnp/coinAcctRec.capnp.d.ts +178 -0
  34. package/dist/src/capnp/coinAcctRec.capnp.js +189 -0
  35. package/dist/src/capnp/coinAcctRec.capnp.js.map +1 -0
  36. package/dist/src/capnp/genesisBlock.capnp.d.ts +61 -0
  37. package/dist/src/capnp/genesisBlock.capnp.js +55 -0
  38. package/dist/src/capnp/genesisBlock.capnp.js.map +1 -0
  39. package/dist/src/capnp/hubContentStmt.capnp.d.ts +63 -0
  40. package/dist/src/capnp/hubContentStmt.capnp.js +57 -0
  41. package/dist/src/capnp/hubContentStmt.capnp.js.map +1 -0
  42. package/dist/src/capnp/misc.capnp.d.ts +20 -0
  43. package/dist/src/capnp/misc.capnp.js +18 -0
  44. package/dist/src/capnp/misc.capnp.js.map +1 -0
  45. package/dist/src/capnp/netActorRec.capnp.d.ts +65 -0
  46. package/dist/src/capnp/netActorRec.capnp.js +65 -0
  47. package/dist/src/capnp/netActorRec.capnp.js.map +1 -0
  48. package/dist/src/capnp/nodeContentStmt.capnp.d.ts +67 -0
  49. package/dist/src/capnp/nodeContentStmt.capnp.js +61 -0
  50. package/dist/src/capnp/nodeContentStmt.capnp.js.map +1 -0
  51. package/dist/src/capnp/nodePayloadList.capnp.d.ts +28 -0
  52. package/dist/src/capnp/nodePayloadList.capnp.js +26 -0
  53. package/dist/src/capnp/nodePayloadList.capnp.js.map +1 -0
  54. package/dist/src/capnp/nodeTxList.capnp.d.ts +36 -0
  55. package/dist/src/capnp/nodeTxList.capnp.js +34 -0
  56. package/dist/src/capnp/nodeTxList.capnp.js.map +1 -0
  57. package/dist/src/capnp/paramAcctRec.capnp.d.ts +338 -0
  58. package/dist/src/capnp/paramAcctRec.capnp.js +669 -0
  59. package/dist/src/capnp/paramAcctRec.capnp.js.map +1 -0
  60. package/dist/src/capnp/payload.capnp.d.ts +237 -0
  61. package/dist/src/capnp/payload.capnp.js +260 -0
  62. package/dist/src/capnp/payload.capnp.js.map +1 -0
  63. package/dist/src/capnp/proxyAcctRec.capnp.d.ts +223 -0
  64. package/dist/src/capnp/proxyAcctRec.capnp.js +255 -0
  65. package/dist/src/capnp/proxyAcctRec.capnp.js.map +1 -0
  66. package/dist/src/capnp/relayContentStmt.capnp.d.ts +82 -0
  67. package/dist/src/capnp/relayContentStmt.capnp.js +85 -0
  68. package/dist/src/capnp/relayContentStmt.capnp.js.map +1 -0
  69. package/dist/src/capnp/sysAcctRec.capnp.d.ts +48 -0
  70. package/dist/src/capnp/sysAcctRec.capnp.js +46 -0
  71. package/dist/src/capnp/sysAcctRec.capnp.js.map +1 -0
  72. package/dist/src/capnp/userAppTx.capnp.d.ts +230 -0
  73. package/dist/src/capnp/userAppTx.capnp.js +270 -0
  74. package/dist/src/capnp/userAppTx.capnp.js.map +1 -0
  75. package/dist/src/capnp/userValTx.capnp.d.ts +1575 -0
  76. package/dist/src/capnp/userValTx.capnp.js +2004 -0
  77. package/dist/src/capnp/userValTx.capnp.js.map +1 -0
  78. package/dist/src/capnp/valLayBlock.capnp.d.ts +88 -0
  79. package/dist/src/capnp/valLayBlock.capnp.js +86 -0
  80. package/dist/src/capnp/valLayBlock.capnp.js.map +1 -0
  81. package/dist/src/capnp/valLayLedger.capnp.d.ts +85 -0
  82. package/dist/src/capnp/valLayLedger.capnp.js +75 -0
  83. package/dist/src/capnp/valLayLedger.capnp.js.map +1 -0
  84. package/dist/src/chain/geeq-chain.d.ts +474 -0
  85. package/dist/src/chain/geeq-chain.js +721 -0
  86. package/dist/src/chain/geeq-chain.js.map +1 -0
  87. package/dist/src/chain/geeq-node.d.ts +57 -0
  88. package/dist/src/chain/geeq-node.js +62 -0
  89. package/dist/src/chain/geeq-node.js.map +1 -0
  90. package/dist/src/chain/nonce-guard.d.ts +42 -0
  91. package/dist/src/chain/nonce-guard.js +68 -0
  92. package/dist/src/chain/nonce-guard.js.map +1 -0
  93. package/dist/src/chain/select.d.ts +40 -0
  94. package/dist/src/chain/select.js +114 -0
  95. package/dist/src/chain/select.js.map +1 -0
  96. package/dist/src/crypto/account-id.d.ts +35 -0
  97. package/dist/src/crypto/account-id.js +58 -0
  98. package/dist/src/crypto/account-id.js.map +1 -0
  99. package/dist/src/crypto/keypair.d.ts +24 -0
  100. package/dist/src/crypto/keypair.js +158 -0
  101. package/dist/src/crypto/keypair.js.map +1 -0
  102. package/dist/src/crypto/mnemonic.d.ts +34 -0
  103. package/dist/src/crypto/mnemonic.js +57 -0
  104. package/dist/src/crypto/mnemonic.js.map +1 -0
  105. package/dist/src/encoding/base64.d.ts +8 -0
  106. package/dist/src/encoding/base64.js +53 -0
  107. package/dist/src/encoding/base64.js.map +1 -0
  108. package/dist/src/encoding/hex.d.ts +2 -0
  109. package/dist/src/encoding/hex.js +35 -0
  110. package/dist/src/encoding/hex.js.map +1 -0
  111. package/dist/src/errors.d.ts +83 -0
  112. package/dist/src/errors.js +49 -0
  113. package/dist/src/errors.js.map +1 -0
  114. package/dist/src/index.d.ts +59 -0
  115. package/dist/src/index.js +53 -0
  116. package/dist/src/index.js.map +1 -0
  117. package/dist/src/ledger/coin-accounts.d.ts +42 -0
  118. package/dist/src/ledger/coin-accounts.js +37 -0
  119. package/dist/src/ledger/coin-accounts.js.map +1 -0
  120. package/dist/src/ledger/decode.d.ts +18 -0
  121. package/dist/src/ledger/decode.js +113 -0
  122. package/dist/src/ledger/decode.js.map +1 -0
  123. package/dist/src/ledger/geeq-ledger.d.ts +99 -0
  124. package/dist/src/ledger/geeq-ledger.js +125 -0
  125. package/dist/src/ledger/geeq-ledger.js.map +1 -0
  126. package/dist/src/ledger/net-actors.d.ts +65 -0
  127. package/dist/src/ledger/net-actors.js +53 -0
  128. package/dist/src/ledger/net-actors.js.map +1 -0
  129. package/dist/src/ledger/nft-records.d.ts +13 -0
  130. package/dist/src/ledger/nft-records.js +41 -0
  131. package/dist/src/ledger/nft-records.js.map +1 -0
  132. package/dist/src/ledger/params.d.ts +34 -0
  133. package/dist/src/ledger/params.js +71 -0
  134. package/dist/src/ledger/params.js.map +1 -0
  135. package/dist/src/ledger/proxy-accounts.d.ts +26 -0
  136. package/dist/src/ledger/proxy-accounts.js +27 -0
  137. package/dist/src/ledger/proxy-accounts.js.map +1 -0
  138. package/dist/src/net/discovery.d.ts +62 -0
  139. package/dist/src/net/discovery.js +136 -0
  140. package/dist/src/net/discovery.js.map +1 -0
  141. package/dist/src/net/explorer.d.ts +57 -0
  142. package/dist/src/net/explorer.js +64 -0
  143. package/dist/src/net/explorer.js.map +1 -0
  144. package/dist/src/net/read-ledger.d.ts +7 -0
  145. package/dist/src/net/read-ledger.js +39 -0
  146. package/dist/src/net/read-ledger.js.map +1 -0
  147. package/dist/src/net/routes.d.ts +49 -0
  148. package/dist/src/net/routes.js +70 -0
  149. package/dist/src/net/routes.js.map +1 -0
  150. package/dist/src/net/transport.d.ts +55 -0
  151. package/dist/src/net/transport.js +168 -0
  152. package/dist/src/net/transport.js.map +1 -0
  153. package/dist/src/net/websocket.d.ts +49 -0
  154. package/dist/src/net/websocket.js +54 -0
  155. package/dist/src/net/websocket.js.map +1 -0
  156. package/dist/src/runtime/bindings.d.ts +9 -0
  157. package/dist/src/runtime/bindings.js +27 -0
  158. package/dist/src/runtime/bindings.js.map +1 -0
  159. package/dist/src/runtime/init.d.ts +13 -0
  160. package/dist/src/runtime/init.js +40 -0
  161. package/dist/src/runtime/init.js.map +1 -0
  162. package/dist/src/runtime/wasm-loader.browser.d.ts +14 -0
  163. package/dist/src/runtime/wasm-loader.browser.js +20 -0
  164. package/dist/src/runtime/wasm-loader.browser.js.map +1 -0
  165. package/dist/src/runtime/wasm-loader.node.d.ts +7 -0
  166. package/dist/src/runtime/wasm-loader.node.js +14 -0
  167. package/dist/src/runtime/wasm-loader.node.js.map +1 -0
  168. package/dist/src/socket/geeq-socket.d.ts +232 -0
  169. package/dist/src/socket/geeq-socket.js +634 -0
  170. package/dist/src/socket/geeq-socket.js.map +1 -0
  171. package/dist/src/socket/tracked-tx.d.ts +148 -0
  172. package/dist/src/socket/tracked-tx.js +212 -0
  173. package/dist/src/socket/tracked-tx.js.map +1 -0
  174. package/dist/src/socket/tx-status.d.ts +69 -0
  175. package/dist/src/socket/tx-status.js +72 -0
  176. package/dist/src/socket/tx-status.js.map +1 -0
  177. package/dist/src/tx/attestation.d.ts +60 -0
  178. package/dist/src/tx/attestation.js +163 -0
  179. package/dist/src/tx/attestation.js.map +1 -0
  180. package/dist/src/tx/content.d.ts +27 -0
  181. package/dist/src/tx/content.js +62 -0
  182. package/dist/src/tx/content.js.map +1 -0
  183. package/dist/src/tx/encode.d.ts +60 -0
  184. package/dist/src/tx/encode.js +82 -0
  185. package/dist/src/tx/encode.js.map +1 -0
  186. package/dist/src/tx/expiry.d.ts +11 -0
  187. package/dist/src/tx/expiry.js +12 -0
  188. package/dist/src/tx/expiry.js.map +1 -0
  189. package/dist/src/tx/fee.d.ts +16 -0
  190. package/dist/src/tx/fee.js +29 -0
  191. package/dist/src/tx/fee.js.map +1 -0
  192. package/dist/src/tx/metadata.d.ts +39 -0
  193. package/dist/src/tx/metadata.js +66 -0
  194. package/dist/src/tx/metadata.js.map +1 -0
  195. package/dist/src/tx/nft.d.ts +16 -0
  196. package/dist/src/tx/nft.js +98 -0
  197. package/dist/src/tx/nft.js.map +1 -0
  198. package/dist/src/tx/proxy.d.ts +37 -0
  199. package/dist/src/tx/proxy.js +134 -0
  200. package/dist/src/tx/proxy.js.map +1 -0
  201. package/dist/src/tx/transfer.d.ts +31 -0
  202. package/dist/src/tx/transfer.js +123 -0
  203. package/dist/src/tx/transfer.js.map +1 -0
  204. package/dist/src/types.d.ts +448 -0
  205. package/dist/src/types.js +2 -0
  206. package/dist/src/types.js.map +1 -0
  207. package/dist/tests/account-id.test.d.ts +1 -0
  208. package/dist/tests/account-id.test.js +27 -0
  209. package/dist/tests/account-id.test.js.map +1 -0
  210. package/dist/tests/amount.test.d.ts +1 -0
  211. package/dist/tests/amount.test.js +113 -0
  212. package/dist/tests/amount.test.js.map +1 -0
  213. package/dist/tests/attestation.test.d.ts +1 -0
  214. package/dist/tests/attestation.test.js +182 -0
  215. package/dist/tests/attestation.test.js.map +1 -0
  216. package/dist/tests/chain.test.d.ts +1 -0
  217. package/dist/tests/chain.test.js +647 -0
  218. package/dist/tests/chain.test.js.map +1 -0
  219. package/dist/tests/content.test.d.ts +1 -0
  220. package/dist/tests/content.test.js +90 -0
  221. package/dist/tests/content.test.js.map +1 -0
  222. package/dist/tests/documented-api.test.d.ts +1 -0
  223. package/dist/tests/documented-api.test.js +229 -0
  224. package/dist/tests/documented-api.test.js.map +1 -0
  225. package/dist/tests/explorer.test.d.ts +1 -0
  226. package/dist/tests/explorer.test.js +95 -0
  227. package/dist/tests/explorer.test.js.map +1 -0
  228. package/dist/tests/fee.test.d.ts +1 -0
  229. package/dist/tests/fee.test.js +179 -0
  230. package/dist/tests/fee.test.js.map +1 -0
  231. package/dist/tests/fixtures/build-vll.d.ts +71 -0
  232. package/dist/tests/fixtures/build-vll.js +141 -0
  233. package/dist/tests/fixtures/build-vll.js.map +1 -0
  234. package/dist/tests/fixtures/fake-socket.d.ts +44 -0
  235. package/dist/tests/fixtures/fake-socket.js +93 -0
  236. package/dist/tests/fixtures/fake-socket.js.map +1 -0
  237. package/dist/tests/fixtures/fake-transport.d.ts +24 -0
  238. package/dist/tests/fixtures/fake-transport.js +30 -0
  239. package/dist/tests/fixtures/fake-transport.js.map +1 -0
  240. package/dist/tests/keypair.test.d.ts +1 -0
  241. package/dist/tests/keypair.test.js +163 -0
  242. package/dist/tests/keypair.test.js.map +1 -0
  243. package/dist/tests/ledger.test.d.ts +1 -0
  244. package/dist/tests/ledger.test.js +234 -0
  245. package/dist/tests/ledger.test.js.map +1 -0
  246. package/dist/tests/mnemonic.test.d.ts +1 -0
  247. package/dist/tests/mnemonic.test.js +97 -0
  248. package/dist/tests/mnemonic.test.js.map +1 -0
  249. package/dist/tests/nft-transfer.test.d.ts +1 -0
  250. package/dist/tests/nft-transfer.test.js +170 -0
  251. package/dist/tests/nft-transfer.test.js.map +1 -0
  252. package/dist/tests/nft.test.d.ts +1 -0
  253. package/dist/tests/nft.test.js +180 -0
  254. package/dist/tests/nft.test.js.map +1 -0
  255. package/dist/tests/offline.test.d.ts +1 -0
  256. package/dist/tests/offline.test.js +95 -0
  257. package/dist/tests/offline.test.js.map +1 -0
  258. package/dist/tests/proxy.test.d.ts +1 -0
  259. package/dist/tests/proxy.test.js +183 -0
  260. package/dist/tests/proxy.test.js.map +1 -0
  261. package/dist/tests/select.test.d.ts +1 -0
  262. package/dist/tests/select.test.js +200 -0
  263. package/dist/tests/select.test.js.map +1 -0
  264. package/dist/tests/socket.test.d.ts +1 -0
  265. package/dist/tests/socket.test.js +607 -0
  266. package/dist/tests/socket.test.js.map +1 -0
  267. package/dist/tests/transfer.test.d.ts +1 -0
  268. package/dist/tests/transfer.test.js +225 -0
  269. package/dist/tests/transfer.test.js.map +1 -0
  270. package/dist/tests/wallet-address.test.d.ts +1 -0
  271. package/dist/tests/wallet-address.test.js +101 -0
  272. package/dist/tests/wallet-address.test.js.map +1 -0
  273. package/dist/tests/wasm-loader.jest.d.ts +13 -0
  274. package/dist/tests/wasm-loader.jest.js +15 -0
  275. package/dist/tests/wasm-loader.jest.js.map +1 -0
  276. package/example/.env.example +4 -0
  277. package/example/README.md +304 -0
  278. package/example/USAGE.md +74 -0
  279. package/example/index.html +12 -0
  280. package/example/package-lock.json +1557 -0
  281. package/example/package.json +25 -0
  282. package/example/scripts/browser-check.mjs +1421 -0
  283. package/example/scripts/match-derivation.mjs +65 -0
  284. package/example/src/App.vue +138 -0
  285. package/example/src/components/AuthorityPanel.vue +277 -0
  286. package/example/src/components/ChainPanel.vue +267 -0
  287. package/example/src/components/ChainState.vue +59 -0
  288. package/example/src/components/CopyButton.vue +25 -0
  289. package/example/src/components/CreateAssetPanel.vue +313 -0
  290. package/example/src/components/DigitalAssetsPanel.vue +68 -0
  291. package/example/src/components/EvidencePanel.vue +396 -0
  292. package/example/src/components/ExplorerPanel.vue +119 -0
  293. package/example/src/components/KeypairPanel.vue +182 -0
  294. package/example/src/components/PhrasePanel.vue +105 -0
  295. package/example/src/components/SocketWarning.vue +18 -0
  296. package/example/src/components/StepGate.vue +24 -0
  297. package/example/src/components/TransferPanel.vue +416 -0
  298. package/example/src/components/TxDeadline.vue +19 -0
  299. package/example/src/components/TxFee.vue +31 -0
  300. package/example/src/components/TxStatus.vue +105 -0
  301. package/example/src/composables/useSocketConnection.ts +80 -0
  302. package/example/src/env.d.ts +12 -0
  303. package/example/src/main.ts +5 -0
  304. package/example/src/pennies.ts +7 -0
  305. package/example/src/style.css +149 -0
  306. package/example/tsconfig.json +19 -0
  307. package/example/vite.config.ts +26 -0
  308. package/jest.config.js +18 -0
  309. package/package.json +2 -6
  310. package/scripts/copy-wasm.mjs +21 -0
  311. package/scripts/smoke.mjs +382 -0
  312. package/src/address/record-type.ts +77 -0
  313. package/src/address/wallet-address.ts +105 -0
  314. package/src/amount.ts +143 -0
  315. package/src/assert.ts +30 -0
  316. package/src/capnp/README.md +15 -0
  317. package/src/capnp/adminNetTx.capnp.ts +66 -0
  318. package/src/capnp/appLayBlock.capnp.ts +26 -0
  319. package/src/capnp/appLayLedger.capnp.ts +35 -0
  320. package/src/capnp/appLayRec.capnp.ts +159 -0
  321. package/src/capnp/chainStateView.capnp.ts +49 -0
  322. package/src/capnp/coinAcctRec.capnp.ts +193 -0
  323. package/src/capnp/genesisBlock.capnp.ts +56 -0
  324. package/src/capnp/hubContentStmt.capnp.ts +59 -0
  325. package/src/capnp/misc.capnp.ts +19 -0
  326. package/src/capnp/netActorRec.capnp.ts +64 -0
  327. package/src/capnp/nodeContentStmt.capnp.ts +62 -0
  328. package/src/capnp/nodePayloadList.capnp.ts +28 -0
  329. package/src/capnp/nodeTxList.capnp.ts +37 -0
  330. package/src/capnp/paramAcctRec.capnp.ts +669 -0
  331. package/src/capnp/payload.capnp.ts +261 -0
  332. package/src/capnp/proxyAcctRec.capnp.ts +259 -0
  333. package/src/capnp/relayContentStmt.capnp.ts +85 -0
  334. package/src/capnp/sysAcctRec.capnp.ts +47 -0
  335. package/src/capnp/userAppTx.capnp.ts +269 -0
  336. package/src/capnp/userValTx.capnp.ts +1999 -0
  337. package/src/capnp/valLayBlock.capnp.ts +93 -0
  338. package/src/capnp/valLayLedger.capnp.ts +80 -0
  339. package/src/chain/geeq-chain.ts +1094 -0
  340. package/src/chain/geeq-node.ts +105 -0
  341. package/src/chain/nonce-guard.ts +73 -0
  342. package/src/chain/select.ts +149 -0
  343. package/src/crypto/account-id.ts +83 -0
  344. package/src/crypto/keypair.ts +221 -0
  345. package/src/crypto/mnemonic.ts +69 -0
  346. package/src/encoding/base64.ts +58 -0
  347. package/src/encoding/hex.ts +42 -0
  348. package/src/errors.ts +122 -0
  349. package/src/index.ts +195 -0
  350. package/src/ledger/coin-accounts.ts +73 -0
  351. package/src/ledger/decode.ts +147 -0
  352. package/src/ledger/geeq-ledger.ts +184 -0
  353. package/src/ledger/net-actors.ts +129 -0
  354. package/src/ledger/nft-records.ts +49 -0
  355. package/src/ledger/params.ts +82 -0
  356. package/src/ledger/proxy-accounts.ts +51 -0
  357. package/src/net/discovery.ts +231 -0
  358. package/src/net/explorer.ts +123 -0
  359. package/src/net/read-ledger.ts +58 -0
  360. package/src/net/routes.ts +79 -0
  361. package/src/net/transport.ts +221 -0
  362. package/src/net/websocket.ts +94 -0
  363. package/src/runtime/bindings.ts +38 -0
  364. package/src/runtime/init.ts +49 -0
  365. package/src/runtime/wasm-loader.browser.ts +22 -0
  366. package/src/runtime/wasm-loader.node.ts +16 -0
  367. package/src/socket/geeq-socket.ts +827 -0
  368. package/src/socket/tracked-tx.ts +319 -0
  369. package/src/socket/tx-status.ts +131 -0
  370. package/src/tx/attestation.ts +222 -0
  371. package/src/tx/content.ts +82 -0
  372. package/src/tx/encode.ts +107 -0
  373. package/src/tx/expiry.ts +11 -0
  374. package/src/tx/fee.ts +31 -0
  375. package/src/tx/metadata.ts +100 -0
  376. package/src/tx/nft.ts +108 -0
  377. package/src/tx/proxy.ts +156 -0
  378. package/src/tx/transfer.ts +162 -0
  379. package/src/types.ts +503 -0
  380. package/src/wasm/README.md +22 -0
  381. package/src/wasm/browser/geeq_core.d.ts +1224 -0
  382. package/src/wasm/browser/geeq_core.js +6014 -0
  383. package/src/wasm/browser/geeq_core_bg.wasm +0 -0
  384. package/src/wasm/browser/geeq_core_bg.wasm.d.ts +447 -0
  385. package/src/wasm/nodejs/geeq_core.d.ts +753 -0
  386. package/src/wasm/nodejs/geeq_core.js +6016 -0
  387. package/src/wasm/nodejs/geeq_core_bg.wasm +0 -0
  388. package/src/wasm/nodejs/geeq_core_bg.wasm.d.ts +447 -0
  389. package/src/wasm/nodejs/package.json +3 -0
  390. package/tsconfig.build.json +8 -0
  391. package/tsconfig.json +21 -0
  392. package/tsup.config.ts +60 -0
@@ -0,0 +1,158 @@
1
+ import { toBase64 } from '../encoding/base64';
2
+ import { invalidArgument, invalidKey } from '../errors';
3
+ import { WasmKeypair, wasmVerify } from '../runtime/bindings';
4
+ import { assertReady, initGeeq } from '../runtime/init';
5
+ import { DEFAULT_RECORD_TYPE, toWasmCoinType, toWasmRecordType } from '../address/record-type';
6
+ import { createWalletAddressSync } from '../address/wallet-address';
7
+ import { PUBLIC_KEY_BYTES, accountIdFromPublicKey } from './account-id';
8
+ import { normalizeMnemonic } from './mnemonic';
9
+ const SECRET_KEY_BYTES = 32;
10
+ const SIGNATURE_BYTES = 64;
11
+ /**
12
+ * Wraps an engine-side keypair. The byte fields are copied out once at
13
+ * construction so the object stays fully readable after {@link dispose}, which
14
+ * only releases the engine handle used for signing.
15
+ */
16
+ class Keypair {
17
+ constructor(inner) {
18
+ this.handle = inner;
19
+ Object.defineProperty(this, 'handle', { enumerable: false });
20
+ this.publicKey = inner.exportPublicKey();
21
+ this.privateKey = inner.exportSecretKey();
22
+ this.accountId = accountIdFromPublicKey(this.publicKey);
23
+ }
24
+ getAddress(options) {
25
+ return createWalletAddressSync({
26
+ accountId: this.accountId,
27
+ chainNumber: options.chainNumber,
28
+ recordType: options.recordType ?? DEFAULT_RECORD_TYPE,
29
+ });
30
+ }
31
+ sign(message) {
32
+ if (this.handle === null) {
33
+ throw invalidKey('This keypair has been disposed and can no longer sign.');
34
+ }
35
+ if (!(message instanceof Uint8Array)) {
36
+ throw invalidArgument('sign() expects a Uint8Array.');
37
+ }
38
+ return this.handle.sign(message);
39
+ }
40
+ dispose() {
41
+ this.handle?.free();
42
+ this.handle = null;
43
+ }
44
+ /** Keeps secret material out of logs, `console.log` and error breadcrumbs. */
45
+ toJSON() {
46
+ return { type: 'GeeqKeypair', publicKey: toBase64(this.publicKey) };
47
+ }
48
+ toString() {
49
+ return '[GeeqKeypair]';
50
+ }
51
+ }
52
+ function assertBytes(value, expected, label) {
53
+ if (!(value instanceof Uint8Array)) {
54
+ throw invalidKey(`${label} must be a Uint8Array.`);
55
+ }
56
+ if (value.length !== expected) {
57
+ throw invalidKey(`${label} must be ${expected} bytes, received ${value.length}.`);
58
+ }
59
+ return value;
60
+ }
61
+ /** Create a brand new random keypair. Synchronous; requires a loaded engine. */
62
+ export function generateKeypairSync() {
63
+ assertReady('generateKeypairSync');
64
+ return new Keypair(WasmKeypair.generate());
65
+ }
66
+ /** Create a brand new random keypair, loading the engine if needed. */
67
+ export async function generateKeypair() {
68
+ await initGeeq();
69
+ return generateKeypairSync();
70
+ }
71
+ /** Re-create a keypair from stored public and private key bytes. */
72
+ export function importKeypairSync(publicKey, privateKey) {
73
+ assertReady('importKeypairSync');
74
+ assertBytes(publicKey, PUBLIC_KEY_BYTES, 'publicKey');
75
+ assertBytes(privateKey, SECRET_KEY_BYTES, 'privateKey');
76
+ let keypair;
77
+ try {
78
+ // Deliberately derived from the secret key rather than via the engine's
79
+ // import(), which accepts a mismatched pair and stores the given public key
80
+ // verbatim — yielding a keypair whose signatures the chain would reject.
81
+ keypair = new Keypair(WasmKeypair.fromSecretKey(privateKey));
82
+ }
83
+ catch (cause) {
84
+ throw invalidKey('Could not import this keypair. Check the private key is correct.', cause);
85
+ }
86
+ if (!bytesEqual(keypair.publicKey, publicKey)) {
87
+ keypair.dispose();
88
+ throw invalidKey('publicKey does not match privateKey. Check the two halves came from the same keypair.');
89
+ }
90
+ return keypair;
91
+ }
92
+ /** Re-create a keypair from stored key bytes, loading the engine if needed. */
93
+ export async function importKeypair(publicKey, privateKey) {
94
+ await initGeeq();
95
+ return importKeypairSync(publicKey, privateKey);
96
+ }
97
+ /** Recover a keypair from its 32-byte secret key alone. */
98
+ export function keypairFromSecretKeySync(privateKey) {
99
+ assertReady('keypairFromSecretKeySync');
100
+ assertBytes(privateKey, SECRET_KEY_BYTES, 'privateKey');
101
+ try {
102
+ return new Keypair(WasmKeypair.fromSecretKey(privateKey));
103
+ }
104
+ catch (cause) {
105
+ throw invalidKey('Could not derive a keypair from this secret key.', cause);
106
+ }
107
+ }
108
+ /** Recover a keypair from its secret key, loading the engine if needed. */
109
+ export async function keypairFromSecretKey(privateKey) {
110
+ await initGeeq();
111
+ return keypairFromSecretKeySync(privateKey);
112
+ }
113
+ /**
114
+ * Derive a keypair from a BIP-39 mnemonic along Geeq's standard derivation path.
115
+ *
116
+ * The same mnemonic and options always produce the same keypair, so this is how a
117
+ * wallet is restored on another device.
118
+ */
119
+ export function keypairFromMnemonicSync(mnemonic, options = {}) {
120
+ assertReady('keypairFromMnemonicSync');
121
+ if (typeof mnemonic !== 'string' || mnemonic.trim().length === 0) {
122
+ throw invalidArgument('mnemonic must be a non-empty BIP-39 phrase.');
123
+ }
124
+ const account = options.account ?? 0;
125
+ const addressIndex = options.addressIndex ?? 0;
126
+ for (const [label, value] of [['account', account], ['addressIndex', addressIndex]]) {
127
+ if (!Number.isInteger(value) || value < 0 || value > 0x7fffffff) {
128
+ throw invalidArgument(`${label} must be an integer between 0 and 2147483647.`);
129
+ }
130
+ }
131
+ try {
132
+ return new Keypair(WasmKeypair.tryFromMnemonicGeeqPath(normalizeMnemonic(mnemonic), options.passphrase ?? '', toWasmRecordType(options.recordType ?? DEFAULT_RECORD_TYPE), toWasmCoinType(options.coinType ?? 'mainnet'), account, addressIndex));
133
+ }
134
+ catch (cause) {
135
+ throw invalidKey('Could not derive a keypair from this mnemonic. Check the words and the passphrase.', cause);
136
+ }
137
+ }
138
+ /** Derive a keypair from a mnemonic, loading the engine if needed. */
139
+ export async function keypairFromMnemonic(mnemonic, options = {}) {
140
+ await initGeeq();
141
+ return keypairFromMnemonicSync(mnemonic, options);
142
+ }
143
+ /** Verify an Ed25519 signature. Requires a loaded engine. */
144
+ export function verifySignature(publicKey, signature, message) {
145
+ assertReady('verifySignature');
146
+ assertBytes(publicKey, PUBLIC_KEY_BYTES, 'publicKey');
147
+ assertBytes(signature, SIGNATURE_BYTES, 'signature');
148
+ return wasmVerify(publicKey, signature, message);
149
+ }
150
+ function bytesEqual(a, b) {
151
+ if (a.length !== b.length)
152
+ return false;
153
+ let diff = 0;
154
+ for (let i = 0; i < a.length; i += 1)
155
+ diff |= a[i] ^ b[i];
156
+ return diff === 0;
157
+ }
158
+ //# sourceMappingURL=keypair.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keypair.js","sourceRoot":"","sources":["../../../src/crypto/keypair.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /** Supported mnemonic lengths. 12 words is the common default; 24 is the strongest. */
2
+ export type MnemonicWordCount = 12 | 15 | 18 | 21 | 24;
3
+ export declare const MNEMONIC_WORD_COUNTS: readonly [12, 15, 18, 21, 24];
4
+ export interface GenerateMnemonicOptions {
5
+ /** How many words to generate. Defaults to 12. */
6
+ readonly words?: MnemonicWordCount;
7
+ }
8
+ /**
9
+ * Generate a fresh BIP-39 recovery phrase, using the platform's cryptographically
10
+ * secure random source.
11
+ *
12
+ * Pure JavaScript — no engine needed, so this works before {@link initGeeq}
13
+ * resolves. Phrases are generated from the English wordlist, which is what
14
+ * {@link keypairFromMnemonic} expects.
15
+ *
16
+ * The phrase is the *only* way to recover the wallet. Show it to the user once,
17
+ * let them write it down, and never transmit or persist it in plaintext.
18
+ *
19
+ * ```ts
20
+ * const mnemonic = generateMnemonic() // 12 words
21
+ * const long = generateMnemonic({ words: 24 }) // 24 words
22
+ * ```
23
+ */
24
+ export declare function generateMnemonic(options?: GenerateMnemonicOptions): string;
25
+ /**
26
+ * Check a recovery phrase for the right word count, known words, and a valid
27
+ * checksum. Use it to give immediate feedback on a restore form rather than
28
+ * waiting for {@link keypairFromMnemonic} to throw.
29
+ *
30
+ * Pure JavaScript — no engine needed.
31
+ */
32
+ export declare function validateMnemonic(mnemonic: string): boolean;
33
+ /** Trim and collapse whitespace so pasted phrases validate as typed ones do. */
34
+ export declare function normalizeMnemonic(mnemonic: string): string;
@@ -0,0 +1,57 @@
1
+ import { generateMnemonic as scureGenerate, validateMnemonic as scureValidate } from '@scure/bip39';
2
+ import { wordlist } from '@scure/bip39/wordlists/english';
3
+ import { invalidArgument } from '../errors';
4
+ const ENTROPY_BITS = {
5
+ 12: 128,
6
+ 15: 160,
7
+ 18: 192,
8
+ 21: 224,
9
+ 24: 256,
10
+ };
11
+ export const MNEMONIC_WORD_COUNTS = Object.freeze([12, 15, 18, 21, 24]);
12
+ /**
13
+ * Generate a fresh BIP-39 recovery phrase, using the platform's cryptographically
14
+ * secure random source.
15
+ *
16
+ * Pure JavaScript — no engine needed, so this works before {@link initGeeq}
17
+ * resolves. Phrases are generated from the English wordlist, which is what
18
+ * {@link keypairFromMnemonic} expects.
19
+ *
20
+ * The phrase is the *only* way to recover the wallet. Show it to the user once,
21
+ * let them write it down, and never transmit or persist it in plaintext.
22
+ *
23
+ * ```ts
24
+ * const mnemonic = generateMnemonic() // 12 words
25
+ * const long = generateMnemonic({ words: 24 }) // 24 words
26
+ * ```
27
+ */
28
+ export function generateMnemonic(options = {}) {
29
+ const words = options.words ?? 12;
30
+ const bits = ENTROPY_BITS[words];
31
+ if (bits === undefined) {
32
+ throw invalidArgument(`words must be one of ${MNEMONIC_WORD_COUNTS.join(', ')}, received ${String(words)}.`);
33
+ }
34
+ return scureGenerate(wordlist, bits);
35
+ }
36
+ /**
37
+ * Check a recovery phrase for the right word count, known words, and a valid
38
+ * checksum. Use it to give immediate feedback on a restore form rather than
39
+ * waiting for {@link keypairFromMnemonic} to throw.
40
+ *
41
+ * Pure JavaScript — no engine needed.
42
+ */
43
+ export function validateMnemonic(mnemonic) {
44
+ if (typeof mnemonic !== 'string')
45
+ return false;
46
+ try {
47
+ return scureValidate(normalizeMnemonic(mnemonic), wordlist);
48
+ }
49
+ catch {
50
+ return false;
51
+ }
52
+ }
53
+ /** Trim and collapse whitespace so pasted phrases validate as typed ones do. */
54
+ export function normalizeMnemonic(mnemonic) {
55
+ return mnemonic.trim().replace(/\s+/gu, ' ').toLowerCase();
56
+ }
57
+ //# sourceMappingURL=mnemonic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mnemonic.js","sourceRoot":"","sources":["../../../src/crypto/mnemonic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,IAAI,aAAa,EAAE,gBAAgB,IAAI,aAAa,EAAE,MAAM,cAAc,CAAA;AACnG,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAK3C,MAAM,YAAY,GAAgD;IAChE,EAAE,EAAE,GAAG;IACP,EAAE,EAAE,GAAG;IACP,EAAE,EAAE,GAAG;IACP,EAAE,EAAE,GAAG;IACP,EAAE,EAAE,GAAG;CACR,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAU,CAAC,CAAA;AAOhF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAmC,EAAE;IACpE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAA;IACjC,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;IAChC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,eAAe,CACnB,wBAAwB,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,KAAK,CAAC,GAAG,CACtF,CAAA;IACH,CAAC;IACD,OAAO,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;AACtC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC9C,IAAI,CAAC;QACH,OAAO,aAAa,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAA;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;AAC5D,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare function toBase64(bytes: Uint8Array): string;
2
+ /**
3
+ * Decode base64, rejecting anything the alphabet does not cover.
4
+ *
5
+ * `label` names the thing being decoded so the message points at the caller's data
6
+ * rather than at this function.
7
+ */
8
+ export declare function fromBase64(value: string, label?: string): Uint8Array;
@@ -0,0 +1,53 @@
1
+ import { invalidArgument } from '../errors';
2
+ /**
3
+ * Base64 in both directions, with one behaviour on every runtime.
4
+ *
5
+ * The platform primitives disagree on bad input: `Buffer.from(s, 'base64')` silently
6
+ * drops characters it does not recognise and returns a short buffer, while `atob`
7
+ * throws. Decoding a ledger through the first would turn "this URL is not a Geeq node"
8
+ * into "this ledger is corrupt" — so the input is validated here and both paths take
9
+ * the same branch.
10
+ */
11
+ /** Standard alphabet, correct padding, whole 4-character groups. */
12
+ const BASE64 = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;
13
+ export function toBase64(bytes) {
14
+ if (typeof btoa === 'function') {
15
+ let binary = '';
16
+ for (const byte of bytes)
17
+ binary += String.fromCharCode(byte);
18
+ return btoa(binary);
19
+ }
20
+ return Buffer.from(bytes).toString('base64');
21
+ }
22
+ /**
23
+ * Decode base64, rejecting anything the alphabet does not cover.
24
+ *
25
+ * `label` names the thing being decoded so the message points at the caller's data
26
+ * rather than at this function.
27
+ */
28
+ export function fromBase64(value, label = 'value') {
29
+ if (typeof value !== 'string') {
30
+ throw invalidArgument(`${label} must be a base64 string, received ${typeof value}.`);
31
+ }
32
+ if (value === '')
33
+ return new Uint8Array(0);
34
+ if (!BASE64.test(value)) {
35
+ // Naming the offending character and its index is the difference between "this is
36
+ // not base64" and "your proxy returned an HTML login page".
37
+ const index = value.search(/[^A-Za-z0-9+/=]/u);
38
+ const detail = index === -1
39
+ ? `its length (${value.length}) is not a multiple of 4, or its padding is misplaced`
40
+ : `it contains ${JSON.stringify(value[index])} at index ${index}`;
41
+ throw invalidArgument(`${label} is not valid base64: ${detail}. ` +
42
+ 'A value that looks like markup or JSON usually means the URL is not a Geeq node.');
43
+ }
44
+ if (typeof atob === 'function') {
45
+ const binary = atob(value);
46
+ const bytes = new Uint8Array(binary.length);
47
+ for (let i = 0; i < binary.length; i += 1)
48
+ bytes[i] = binary.charCodeAt(i);
49
+ return bytes;
50
+ }
51
+ return new Uint8Array(Buffer.from(value, 'base64'));
52
+ }
53
+ //# sourceMappingURL=base64.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64.js","sourceRoot":"","sources":["../../../src/encoding/base64.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C;;;;;;;;GAQG;AAEH,oEAAoE;AACpE,MAAM,MAAM,GAAG,kEAAkE,CAAA;AAEjF,MAAM,UAAU,QAAQ,CAAC,KAAiB;IACxC,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QAC7D,OAAO,IAAI,CAAC,MAAM,CAAC,CAAA;IACrB,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC9C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,KAAK,GAAG,OAAO;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,eAAe,CAAC,GAAG,KAAK,sCAAsC,OAAO,KAAK,GAAG,CAAC,CAAA;IACtF,CAAC;IACD,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;IAE1C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,kFAAkF;QAClF,4DAA4D;QAC5D,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAA;QAC9C,MAAM,MAAM,GACV,KAAK,KAAK,CAAC,CAAC;YACV,CAAC,CAAC,eAAe,KAAK,CAAC,MAAM,uDAAuD;YACpF,CAAC,CAAC,eAAe,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,aAAa,KAAK,EAAE,CAAA;QACrE,MAAM,eAAe,CACnB,GAAG,KAAK,yBAAyB,MAAM,IAAI;YACzC,kFAAkF,CACrF,CAAA;IACH,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;QAC1B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QAC1E,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAA;AACrD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function toHex(bytes: Uint8Array): string;
2
+ export declare function fromHex(value: string, label?: string): Uint8Array;
@@ -0,0 +1,35 @@
1
+ import { invalidArgument } from '../errors';
2
+ /**
3
+ * Hex in both directions.
4
+ *
5
+ * Every hash this SDK returns is bytes, and almost every application immediately turns
6
+ * them into hex to show or log. Doing that by hand is three lines everyone writes
7
+ * slightly differently — and `toString(16)` without padding silently drops a leading
8
+ * zero, producing a 63-character "32-byte" hash that compares unequal to itself.
9
+ */
10
+ const HEX = /^[0-9a-fA-F]*$/;
11
+ export function toHex(bytes) {
12
+ let hex = '';
13
+ for (const byte of bytes)
14
+ hex += byte.toString(16).padStart(2, '0');
15
+ return hex;
16
+ }
17
+ export function fromHex(value, label = 'value') {
18
+ if (typeof value !== 'string') {
19
+ throw invalidArgument(`${label} must be a hex string, received ${typeof value}.`);
20
+ }
21
+ const text = value.startsWith('0x') || value.startsWith('0X') ? value.slice(2) : value;
22
+ if (text.length % 2 !== 0) {
23
+ throw invalidArgument(`${label} must have an even number of hex digits, received ${text.length}.`);
24
+ }
25
+ if (!HEX.test(text)) {
26
+ const index = text.search(/[^0-9a-fA-F]/u);
27
+ throw invalidArgument(`${label} is not valid hex: it contains ${JSON.stringify(text[index])} at index ${index}.`);
28
+ }
29
+ const bytes = new Uint8Array(text.length / 2);
30
+ for (let i = 0; i < bytes.length; i += 1) {
31
+ bytes[i] = Number.parseInt(text.slice(i * 2, i * 2 + 2), 16);
32
+ }
33
+ return bytes;
34
+ }
35
+ //# sourceMappingURL=hex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hex.js","sourceRoot":"","sources":["../../../src/encoding/hex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C;;;;;;;GAOG;AAEH,MAAM,GAAG,GAAG,gBAAgB,CAAA;AAE5B,MAAM,UAAU,KAAK,CAAC,KAAiB;IACrC,IAAI,GAAG,GAAG,EAAE,CAAA;IACZ,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACnE,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAa,EAAE,KAAK,GAAG,OAAO;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,eAAe,CAAC,GAAG,KAAK,mCAAmC,OAAO,KAAK,GAAG,CAAC,CAAA;IACnF,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACtF,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,eAAe,CACnB,GAAG,KAAK,qDAAqD,IAAI,CAAC,MAAM,GAAG,CAC5E,CAAA;IACH,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;QAC1C,MAAM,eAAe,CACnB,GAAG,KAAK,kCAAkC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,KAAK,GAAG,CAC3F,CAAA;IACH,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAC9D,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Every error thrown by this SDK is a {@link GeeqError} carrying a stable
3
+ * {@link GeeqErrorCode}. Branch on `code`, never on the message text.
4
+ */
5
+ export type GeeqErrorCode =
6
+ /** An SDK function was called before the engine finished loading. */
7
+ 'not-initialized'
8
+ /** The WebAssembly engine could not be loaded. */
9
+ | 'init-failed'
10
+ /** A public or private key was the wrong length, or the pair did not match. */
11
+ | 'invalid-key'
12
+ /** A wallet address was malformed, or encoded a record type we do not know. */
13
+ | 'invalid-address'
14
+ /** A caller-supplied argument was outside its allowed range. */
15
+ | 'invalid-argument'
16
+ /** A node could not be reached at all — no HTTP response arrived. */
17
+ | 'network-unreachable'
18
+ /** A node, simulator or explorer answered with an error status. See `status` and `nodeDetails`. */
19
+ | 'node-error'
20
+ /** A node answered, but its ledger could not be decoded. */
21
+ | 'ledger-unreadable'
22
+ /** The node's chain is not the one the caller said to expect. */
23
+ | 'chain-mismatch'
24
+ /** The signing account has no record on this chain yet — it needs funding. */
25
+ | 'account-not-found'
26
+ /** The account exists but its record type cannot sign this transaction. */
27
+ | 'account-not-attestable'
28
+ /**
29
+ * The node being targeted cannot be identified, or cannot process transactions. Also
30
+ * thrown when a simulator or explorer answers with something it should not serve.
31
+ */
32
+ | 'node-unusable'
33
+ /** Metadata exceeds a limit this chain publishes in its ledger. */
34
+ | 'metadata-too-large'
35
+ /** A second transaction was built for one account against one block. */
36
+ | 'nonce-collision'
37
+ /** The sending account does not hold enough coin. */
38
+ | 'insufficient-funds'
39
+ /** The amount is below the smallest transfer this chain accepts. */
40
+ | 'amount-below-minimum'
41
+ /** The sending account does not hold an NFT it was asked to send. */
42
+ | 'nft-not-owned'
43
+ /** A node's WebSocket could not be opened, or this runtime has no WebSocket at all. */
44
+ | 'socket-unreachable'
45
+ /** The {@link GeeqSocket} was disposed, so it will not send or receive again. */
46
+ | 'socket-closed';
47
+ export interface GeeqErrorOptions {
48
+ readonly cause?: unknown;
49
+ /** HTTP status, when a server answered. */
50
+ readonly status?: number;
51
+ /**
52
+ * The server's own `details`, verbatim; a list of them is joined with `; `. Never parse
53
+ * it — branch on `code`.
54
+ */
55
+ readonly nodeDetails?: string;
56
+ }
57
+ export declare class GeeqError extends Error {
58
+ readonly code: GeeqErrorCode;
59
+ readonly status?: number | undefined;
60
+ readonly nodeDetails?: string | undefined;
61
+ constructor(code: GeeqErrorCode, message: string, options?: GeeqErrorOptions);
62
+ }
63
+ export declare function notInitialized(what: string): GeeqError;
64
+ /** The default chain was used before one was installed. */
65
+ export declare function noChain(what: string): GeeqError;
66
+ export declare const invalidKey: (message: string, cause?: unknown) => GeeqError;
67
+ export declare const invalidAddress: (message: string, cause?: unknown) => GeeqError;
68
+ export declare const invalidArgument: (message: string, cause?: unknown) => GeeqError;
69
+ export declare const ledgerUnreadable: (message: string, cause?: unknown) => GeeqError;
70
+ export declare const chainMismatch: (message: string, cause?: unknown) => GeeqError;
71
+ export declare const accountNotFound: (message: string, cause?: unknown) => GeeqError;
72
+ export declare const accountNotAttestable: (message: string, cause?: unknown) => GeeqError;
73
+ export declare const nodeUnusable: (message: string, cause?: unknown) => GeeqError;
74
+ export declare const metadataTooLarge: (message: string, cause?: unknown) => GeeqError;
75
+ export declare const nonceCollision: (message: string, cause?: unknown) => GeeqError;
76
+ export declare const insufficientFunds: (message: string, cause?: unknown) => GeeqError;
77
+ export declare const amountBelowMinimum: (message: string, cause?: unknown) => GeeqError;
78
+ export declare const nftNotOwned: (message: string, cause?: unknown) => GeeqError;
79
+ export declare const socketUnreachable: (message: string, cause?: unknown) => GeeqError;
80
+ export declare const socketClosed: (message: string, cause?: unknown) => GeeqError;
81
+ export declare const networkUnreachable: (message: string, cause?: unknown) => GeeqError;
82
+ /** A node answered with an error status. `details` is the node's own message. */
83
+ export declare function nodeError(message: string, status: number, details?: string): GeeqError;
@@ -0,0 +1,49 @@
1
+ export class GeeqError extends Error {
2
+ constructor(code, message, options) {
3
+ // Only `cause` belongs to Error; the rest are ours. exactOptionalPropertyTypes
4
+ // forbids handing it an explicit undefined, hence the ternary.
5
+ super(message, options?.cause === undefined ? undefined : { cause: options.cause });
6
+ this.name = 'GeeqError';
7
+ this.code = code;
8
+ this.status = options?.status;
9
+ this.nodeDetails = options?.nodeDetails;
10
+ }
11
+ }
12
+ function make(code) {
13
+ return (message, cause) => new GeeqError(code, message, cause === undefined ? undefined : { cause });
14
+ }
15
+ export function notInitialized(what) {
16
+ return new GeeqError('not-initialized', `${what} was called before the Geeq engine finished loading. ` +
17
+ 'Await initGeeq() once at startup, or use the async helpers (generateKeypair, ' +
18
+ 'importKeypair, createWalletAddress) which load it for you.');
19
+ }
20
+ /** The default chain was used before one was installed. */
21
+ export function noChain(what) {
22
+ return new GeeqError('not-initialized', `${what} was called before a chain was initialised. ` +
23
+ 'Await GeeqChain.init({ endpoint }) once at startup, or pass an explicit chain ' +
24
+ 'from GeeqChain.connect({ endpoint }).');
25
+ }
26
+ export const invalidKey = make('invalid-key');
27
+ export const invalidAddress = make('invalid-address');
28
+ export const invalidArgument = make('invalid-argument');
29
+ export const ledgerUnreadable = make('ledger-unreadable');
30
+ export const chainMismatch = make('chain-mismatch');
31
+ export const accountNotFound = make('account-not-found');
32
+ export const accountNotAttestable = make('account-not-attestable');
33
+ export const nodeUnusable = make('node-unusable');
34
+ export const metadataTooLarge = make('metadata-too-large');
35
+ export const nonceCollision = make('nonce-collision');
36
+ export const insufficientFunds = make('insufficient-funds');
37
+ export const amountBelowMinimum = make('amount-below-minimum');
38
+ export const nftNotOwned = make('nft-not-owned');
39
+ export const socketUnreachable = make('socket-unreachable');
40
+ export const socketClosed = make('socket-closed');
41
+ export const networkUnreachable = make('network-unreachable');
42
+ /** A node answered with an error status. `details` is the node's own message. */
43
+ export function nodeError(message, status, details) {
44
+ return new GeeqError('node-error', message, {
45
+ status,
46
+ ...(details === undefined ? {} : { nodeDetails: details }),
47
+ });
48
+ }
49
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Geeq SDK — browser-first TypeScript access to the Geeq blockchain.
3
+ *
4
+ * ```ts
5
+ * import { generateKeypair } from '@geeqdev/geeq-sdk'
6
+ *
7
+ * const keypair = await generateKeypair()
8
+ * const address = keypair.getAddress({ chainNumber: 1 })
9
+ * ```
10
+ */
11
+ export { initGeeq, isGeeqReady } from './runtime/init';
12
+ export { generateKeypair, generateKeypairSync, importKeypair, importKeypairSync, keypairFromSecretKey, keypairFromSecretKeySync, keypairFromMnemonic, keypairFromMnemonicSync, verifySignature, } from './crypto/keypair';
13
+ export { accountIdFromPublicKey, ACCOUNT_ID_BYTES, PUBLIC_KEY_BYTES } from './crypto/account-id';
14
+ export type { AccountRef } from './crypto/account-id';
15
+ export { generateMnemonic, validateMnemonic, normalizeMnemonic, MNEMONIC_WORD_COUNTS, } from './crypto/mnemonic';
16
+ export type { GenerateMnemonicOptions, MnemonicWordCount } from './crypto/mnemonic';
17
+ export { createWalletAddress, createWalletAddressSync, decodeWalletAddress, decodeWalletAddressSync, isValidWalletAddress, } from './address/wallet-address';
18
+ export { GEEQ_RECORD_TYPES, DEFAULT_RECORD_TYPE } from './address/record-type';
19
+ export { GeeqChain, attest, initChain, transfer } from './chain/geeq-chain';
20
+ export { GeeqNode } from './chain/geeq-node';
21
+ export { GEEQ_NODE_PORT, selectNode } from './chain/select';
22
+ export { discover, listChains, listNodes } from './net/discovery';
23
+ export { defaultTransport } from './net/transport';
24
+ export { attestationSubmitBody, coinTransferSubmitBody, ledgerRoute, socketRoute, submitRoute, } from './net/routes';
25
+ export type { AttestationRequest, ChainStateRequest, CoinTransferRequest, GeeqChainOptions, NftMintRequest, NftMintProxiesRequest, NftMintProxyRequest, NftsRequest, } from './chain/geeq-chain';
26
+ export type { Discovery, GeeqDiscoveredChain, GeeqDiscoveredNode, GeeqNodeKind, } from './net/discovery';
27
+ export type { GeeqHttpResponse, GeeqRequestInit, GeeqTransport, } from './net/transport';
28
+ export { getExplorerTransaction } from './net/explorer';
29
+ export type { ExplorerTransactionRequest, GeeqExplorerTransaction } from './net/explorer';
30
+ export { GeeqSocket } from './socket/geeq-socket';
31
+ export { GeeqTrackedTx } from './socket/tracked-tx';
32
+ export { transactionIdOf } from './socket/tx-status';
33
+ export { defaultWebSocketFactory } from './net/websocket';
34
+ export type { GeeqListenOptions, GeeqSendOptions, GeeqSocketMessage, GeeqSocketOptions, GeeqSocketState, GeeqTrackable, GeeqTrackOptions, } from './socket/geeq-socket';
35
+ export type { GeeqTxConfirmed, GeeqTxOutcome, GeeqTxRefusal, GeeqTxRejected, GeeqTxRejectionReason, GeeqTxState, GeeqTxUnknown, GeeqTxUnknownReason, } from './socket/tracked-tx';
36
+ export type { GeeqTxStatusEvent, GeeqTxVerdict } from './socket/tx-status';
37
+ export type { GeeqWebSocketFactory, GeeqWebSocketLike, GeeqWebSocketMessageEvent, } from './net/websocket';
38
+ export { ATTEST_HASH_BYTES, assertAttestHash, attestHashOf, attestHashOfSync, readContent, } from './tx/content';
39
+ export type { GeeqContent } from './tx/content';
40
+ export { inspectMetadata } from './tx/metadata';
41
+ export type { MetadataEntryReport, MetadataReport } from './tx/metadata';
42
+ export { fromBase64, toBase64 } from './encoding/base64';
43
+ export { fromHex, toHex } from './encoding/hex';
44
+ export { decodeValidationLedger } from './ledger/decode';
45
+ export { GeeqLedger } from './ledger/geeq-ledger';
46
+ export type { DecodeLedgerOptions } from './ledger/decode';
47
+ export type { GeeqCoinAccount, GeeqCoinRecordKind, GeeqHeldNft } from './ledger/coin-accounts';
48
+ export type { GeeqLedgerNode, GeeqNodeRole, GeeqNodeStatus } from './ledger/net-actors';
49
+ export type { GeeqProxyAccount, GeeqProxyKind } from './ledger/proxy-accounts';
50
+ export { createAttestationTx, createAttestationTxSync } from './tx/attestation';
51
+ export { createCoinTransferTx, createCoinTransferTxSync } from './tx/transfer';
52
+ export { createNftMintProxyTx, createNftMintProxyTxSync } from './tx/proxy';
53
+ export { createNftMintTx, createNftMintTxSync } from './tx/nft';
54
+ export { formatGeeq, toPennies } from './amount';
55
+ export type { GeeqAmount } from './amount';
56
+ export { GeeqError } from './errors';
57
+ export type { GeeqErrorCode } from './errors';
58
+ export type { AttestationContent, AttestationTx, AttestationTxFlatInput, AttestationTxInput, AttestationTxStateInput, ChainStateInput, CoinTransferContent, CoinTransferTx, CoinTransferTxFlatInput, CoinTransferTxInput, CoinTransferTxStateInput, GeeqChainState, GeeqFee, GeeqMetadataLimits, DecodedWalletAddress, GeeqCoinType, GeeqKeypair, GeeqRecordType, InitOptions, MnemonicOptions, GeeqNft, GeeqNftMintProxies, GeeqNftMintProxy, NftMintProxyTx, NftMintProxyTxInput, NftMintTx, NftMintTxInput, NftTransferEntry, WalletAddressOptions, WasmSource, } from './types';
59
+ export type { AccountIdentifier, CreateWalletAddressInput, } from './address/wallet-address';
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Geeq SDK — browser-first TypeScript access to the Geeq blockchain.
3
+ *
4
+ * ```ts
5
+ * import { generateKeypair } from '@geeqdev/geeq-sdk'
6
+ *
7
+ * const keypair = await generateKeypair()
8
+ * const address = keypair.getAddress({ chainNumber: 1 })
9
+ * ```
10
+ */
11
+ // Engine lifecycle
12
+ export { initGeeq, isGeeqReady } from './runtime/init';
13
+ // Keypairs
14
+ export { generateKeypair, generateKeypairSync, importKeypair, importKeypairSync, keypairFromSecretKey, keypairFromSecretKeySync, keypairFromMnemonic, keypairFromMnemonicSync, verifySignature, } from './crypto/keypair';
15
+ export { accountIdFromPublicKey, ACCOUNT_ID_BYTES, PUBLIC_KEY_BYTES } from './crypto/account-id';
16
+ // Recovery phrases
17
+ export { generateMnemonic, validateMnemonic, normalizeMnemonic, MNEMONIC_WORD_COUNTS, } from './crypto/mnemonic';
18
+ // Wallet addresses
19
+ export { createWalletAddress, createWalletAddressSync, decodeWalletAddress, decodeWalletAddressSync, isValidWalletAddress, } from './address/wallet-address';
20
+ export { GEEQ_RECORD_TYPES, DEFAULT_RECORD_TYPE } from './address/record-type';
21
+ // Chains and nodes
22
+ export { GeeqChain, attest, initChain, transfer } from './chain/geeq-chain';
23
+ export { GeeqNode } from './chain/geeq-node';
24
+ export { GEEQ_NODE_PORT, selectNode } from './chain/select';
25
+ export { discover, listChains, listNodes } from './net/discovery';
26
+ export { defaultTransport } from './net/transport';
27
+ export { attestationSubmitBody, coinTransferSubmitBody, ledgerRoute, socketRoute, submitRoute, } from './net/routes';
28
+ // Block explorer — look a transaction up after a block has decided it
29
+ export { getExplorerTransaction } from './net/explorer';
30
+ // Sockets — what happened to the transactions you sent, and anything else a node pushes
31
+ export { GeeqSocket } from './socket/geeq-socket';
32
+ export { GeeqTrackedTx } from './socket/tracked-tx';
33
+ export { transactionIdOf } from './socket/tx-status';
34
+ export { defaultWebSocketFactory } from './net/websocket';
35
+ // Content, encoding and metadata — everything an application would otherwise
36
+ // hand-roll around a transaction
37
+ export { ATTEST_HASH_BYTES, assertAttestHash, attestHashOf, attestHashOfSync, readContent, } from './tx/content';
38
+ export { inspectMetadata } from './tx/metadata';
39
+ export { fromBase64, toBase64 } from './encoding/base64';
40
+ export { fromHex, toHex } from './encoding/hex';
41
+ // Ledgers
42
+ export { decodeValidationLedger } from './ledger/decode';
43
+ export { GeeqLedger } from './ledger/geeq-ledger';
44
+ // Transactions
45
+ export { createAttestationTx, createAttestationTxSync } from './tx/attestation';
46
+ export { createCoinTransferTx, createCoinTransferTxSync } from './tx/transfer';
47
+ export { createNftMintProxyTx, createNftMintProxyTxSync } from './tx/proxy';
48
+ export { createNftMintTx, createNftMintTxSync } from './tx/nft';
49
+ // Amounts — the protocol counts pennies; how many make a Geeq is the app's to say
50
+ export { formatGeeq, toPennies } from './amount';
51
+ // Errors
52
+ export { GeeqError } from './errors';
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,mBAAmB;AACnB,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAEtD,WAAW;AACX,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,EACvB,eAAe,GAChB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAGhG,mBAAmB;AACnB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,mBAAmB,CAAA;AAG1B,mBAAmB;AACnB,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAE9E,mBAAmB;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,WAAW,EACX,WAAW,EACX,WAAW,GACZ,MAAM,cAAc,CAAA;AAuBrB,sEAAsE;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAGvD,wFAAwF;AACxF,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AA2BzD,6EAA6E;AAC7E,iCAAiC;AACjC,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,WAAW,GACZ,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAE/C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAE/C,UAAU;AACV,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAMjD,eAAe;AACf,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAC/E,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AAC9E,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAC3E,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAE/D,kFAAkF;AAClF,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAGhD,SAAS;AACT,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA"}