tenzro-wallet 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 (471) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +128 -0
  3. package/dist/balance/aggregator.d.ts +16 -0
  4. package/dist/balance/aggregator.d.ts.map +1 -0
  5. package/dist/balance/aggregator.js +73 -0
  6. package/dist/balance/aggregator.js.map +1 -0
  7. package/dist/balance/index.d.ts +3 -0
  8. package/dist/balance/index.d.ts.map +1 -0
  9. package/dist/balance/index.js +2 -0
  10. package/dist/balance/index.js.map +1 -0
  11. package/dist/consent/index.d.ts +3 -0
  12. package/dist/consent/index.d.ts.map +1 -0
  13. package/dist/consent/index.js +2 -0
  14. package/dist/consent/index.js.map +1 -0
  15. package/dist/consent/policy.d.ts +27 -0
  16. package/dist/consent/policy.d.ts.map +1 -0
  17. package/dist/consent/policy.js +121 -0
  18. package/dist/consent/policy.js.map +1 -0
  19. package/dist/crypto/eip1559.d.ts +53 -0
  20. package/dist/crypto/eip1559.d.ts.map +1 -0
  21. package/dist/crypto/eip1559.js +79 -0
  22. package/dist/crypto/eip1559.js.map +1 -0
  23. package/dist/crypto/keccak256.d.ts +20 -0
  24. package/dist/crypto/keccak256.d.ts.map +1 -0
  25. package/dist/crypto/keccak256.js +167 -0
  26. package/dist/crypto/keccak256.js.map +1 -0
  27. package/dist/crypto/rlp.d.ts +30 -0
  28. package/dist/crypto/rlp.d.ts.map +1 -0
  29. package/dist/crypto/rlp.js +165 -0
  30. package/dist/crypto/rlp.js.map +1 -0
  31. package/dist/crypto/sha256.d.ts +14 -0
  32. package/dist/crypto/sha256.d.ts.map +1 -0
  33. package/dist/crypto/sha256.js +33 -0
  34. package/dist/crypto/sha256.js.map +1 -0
  35. package/dist/crypto/solana.d.ts +86 -0
  36. package/dist/crypto/solana.d.ts.map +1 -0
  37. package/dist/crypto/solana.js +218 -0
  38. package/dist/crypto/solana.js.map +1 -0
  39. package/dist/custody/frost/backend.d.ts +59 -0
  40. package/dist/custody/frost/backend.d.ts.map +1 -0
  41. package/dist/custody/frost/backend.js +83 -0
  42. package/dist/custody/frost/backend.js.map +1 -0
  43. package/dist/custody/frost/coordinator.d.ts +148 -0
  44. package/dist/custody/frost/coordinator.d.ts.map +1 -0
  45. package/dist/custody/frost/coordinator.js +58 -0
  46. package/dist/custody/frost/coordinator.js.map +1 -0
  47. package/dist/custody/frost/ed25519-driver.d.ts +30 -0
  48. package/dist/custody/frost/ed25519-driver.d.ts.map +1 -0
  49. package/dist/custody/frost/ed25519-driver.js +76 -0
  50. package/dist/custody/frost/ed25519-driver.js.map +1 -0
  51. package/dist/custody/frost/http-adapter.d.ts +77 -0
  52. package/dist/custody/frost/http-adapter.d.ts.map +1 -0
  53. package/dist/custody/frost/http-adapter.js +168 -0
  54. package/dist/custody/frost/http-adapter.js.map +1 -0
  55. package/dist/custody/frost/hybrid-driver.d.ts +37 -0
  56. package/dist/custody/frost/hybrid-driver.d.ts.map +1 -0
  57. package/dist/custody/frost/hybrid-driver.js +60 -0
  58. package/dist/custody/frost/hybrid-driver.js.map +1 -0
  59. package/dist/custody/frost/index.d.ts +12 -0
  60. package/dist/custody/frost/index.d.ts.map +1 -0
  61. package/dist/custody/frost/index.js +6 -0
  62. package/dist/custody/frost/index.js.map +1 -0
  63. package/dist/custody/frost/secp256k1-driver.d.ts +26 -0
  64. package/dist/custody/frost/secp256k1-driver.d.ts.map +1 -0
  65. package/dist/custody/frost/secp256k1-driver.js +78 -0
  66. package/dist/custody/frost/secp256k1-driver.js.map +1 -0
  67. package/dist/custody/index.d.ts +9 -0
  68. package/dist/custody/index.d.ts.map +1 -0
  69. package/dist/custody/index.js +11 -0
  70. package/dist/custody/index.js.map +1 -0
  71. package/dist/custody/internal-mpc.d.ts +14 -0
  72. package/dist/custody/internal-mpc.d.ts.map +1 -0
  73. package/dist/custody/internal-mpc.js +40 -0
  74. package/dist/custody/internal-mpc.js.map +1 -0
  75. package/dist/custody/mldsa/coordinator.d.ts +63 -0
  76. package/dist/custody/mldsa/coordinator.d.ts.map +1 -0
  77. package/dist/custody/mldsa/coordinator.js +44 -0
  78. package/dist/custody/mldsa/coordinator.js.map +1 -0
  79. package/dist/custody/mldsa/driver.d.ts +23 -0
  80. package/dist/custody/mldsa/driver.d.ts.map +1 -0
  81. package/dist/custody/mldsa/driver.js +43 -0
  82. package/dist/custody/mldsa/driver.js.map +1 -0
  83. package/dist/custody/mldsa/http-adapter.d.ts +59 -0
  84. package/dist/custody/mldsa/http-adapter.d.ts.map +1 -0
  85. package/dist/custody/mldsa/http-adapter.js +103 -0
  86. package/dist/custody/mldsa/http-adapter.js.map +1 -0
  87. package/dist/custody/mldsa/index.d.ts +7 -0
  88. package/dist/custody/mldsa/index.d.ts.map +1 -0
  89. package/dist/custody/mldsa/index.js +4 -0
  90. package/dist/custody/mldsa/index.js.map +1 -0
  91. package/dist/custody/pairing/http-adapter.d.ts +40 -0
  92. package/dist/custody/pairing/http-adapter.d.ts.map +1 -0
  93. package/dist/custody/pairing/http-adapter.js +113 -0
  94. package/dist/custody/pairing/http-adapter.js.map +1 -0
  95. package/dist/custody/pairing/index.d.ts +10 -0
  96. package/dist/custody/pairing/index.d.ts.map +1 -0
  97. package/dist/custody/pairing/index.js +8 -0
  98. package/dist/custody/pairing/index.js.map +1 -0
  99. package/dist/custody/pairing/port.d.ts +121 -0
  100. package/dist/custody/pairing/port.d.ts.map +1 -0
  101. package/dist/custody/pairing/port.js +40 -0
  102. package/dist/custody/pairing/port.js.map +1 -0
  103. package/dist/custody/passkey-share/http-adapter.d.ts +77 -0
  104. package/dist/custody/passkey-share/http-adapter.d.ts.map +1 -0
  105. package/dist/custody/passkey-share/http-adapter.js +125 -0
  106. package/dist/custody/passkey-share/http-adapter.js.map +1 -0
  107. package/dist/custody/passkey-share/index.d.ts +7 -0
  108. package/dist/custody/passkey-share/index.d.ts.map +1 -0
  109. package/dist/custody/passkey-share/index.js +4 -0
  110. package/dist/custody/passkey-share/index.js.map +1 -0
  111. package/dist/custody/passkey-share/unwrapper.d.ts +174 -0
  112. package/dist/custody/passkey-share/unwrapper.d.ts.map +1 -0
  113. package/dist/custody/passkey-share/unwrapper.js +132 -0
  114. package/dist/custody/passkey-share/unwrapper.js.map +1 -0
  115. package/dist/custody/passkey-share/webauthn-adapter.d.ts +112 -0
  116. package/dist/custody/passkey-share/webauthn-adapter.d.ts.map +1 -0
  117. package/dist/custody/passkey-share/webauthn-adapter.js +150 -0
  118. package/dist/custody/passkey-share/webauthn-adapter.js.map +1 -0
  119. package/dist/custody/surface-key-id.d.ts +15 -0
  120. package/dist/custody/surface-key-id.d.ts.map +1 -0
  121. package/dist/custody/surface-key-id.js +25 -0
  122. package/dist/custody/surface-key-id.js.map +1 -0
  123. package/dist/dapp/eip6963.d.ts +64 -0
  124. package/dist/dapp/eip6963.d.ts.map +1 -0
  125. package/dist/dapp/eip6963.js +55 -0
  126. package/dist/dapp/eip6963.js.map +1 -0
  127. package/dist/dapp/index.d.ts +21 -0
  128. package/dist/dapp/index.d.ts.map +1 -0
  129. package/dist/dapp/index.js +24 -0
  130. package/dist/dapp/index.js.map +1 -0
  131. package/dist/identity/delegate-set.d.ts +57 -0
  132. package/dist/identity/delegate-set.d.ts.map +1 -0
  133. package/dist/identity/delegate-set.js +85 -0
  134. package/dist/identity/delegate-set.js.map +1 -0
  135. package/dist/identity/did.d.ts +17 -0
  136. package/dist/identity/did.d.ts.map +1 -0
  137. package/dist/identity/did.js +60 -0
  138. package/dist/identity/did.js.map +1 -0
  139. package/dist/identity/index.d.ts +14 -0
  140. package/dist/identity/index.d.ts.map +1 -0
  141. package/dist/identity/index.js +8 -0
  142. package/dist/identity/index.js.map +1 -0
  143. package/dist/identity/provision.d.ts +13 -0
  144. package/dist/identity/provision.d.ts.map +1 -0
  145. package/dist/identity/provision.js +151 -0
  146. package/dist/identity/provision.js.map +1 -0
  147. package/dist/identity/provisioning-http-adapter.d.ts +81 -0
  148. package/dist/identity/provisioning-http-adapter.d.ts.map +1 -0
  149. package/dist/identity/provisioning-http-adapter.js +114 -0
  150. package/dist/identity/provisioning-http-adapter.js.map +1 -0
  151. package/dist/identity/recovery-http-adapter.d.ts +83 -0
  152. package/dist/identity/recovery-http-adapter.d.ts.map +1 -0
  153. package/dist/identity/recovery-http-adapter.js +139 -0
  154. package/dist/identity/recovery-http-adapter.js.map +1 -0
  155. package/dist/identity/wallet-new.d.ts +132 -0
  156. package/dist/identity/wallet-new.d.ts.map +1 -0
  157. package/dist/identity/wallet-new.js +94 -0
  158. package/dist/identity/wallet-new.js.map +1 -0
  159. package/dist/identity/wallet-recover.d.ts +116 -0
  160. package/dist/identity/wallet-recover.d.ts.map +1 -0
  161. package/dist/identity/wallet-recover.js +95 -0
  162. package/dist/identity/wallet-recover.js.map +1 -0
  163. package/dist/index.d.ts +12 -0
  164. package/dist/index.d.ts.map +1 -0
  165. package/dist/index.js +11 -0
  166. package/dist/index.js.map +1 -0
  167. package/dist/kernel.d.ts +119 -0
  168. package/dist/kernel.d.ts.map +1 -0
  169. package/dist/kernel.js +144 -0
  170. package/dist/kernel.js.map +1 -0
  171. package/dist/ports/adapters/tenzro-identity-adapter.d.ts +44 -0
  172. package/dist/ports/adapters/tenzro-identity-adapter.d.ts.map +1 -0
  173. package/dist/ports/adapters/tenzro-identity-adapter.js +60 -0
  174. package/dist/ports/adapters/tenzro-identity-adapter.js.map +1 -0
  175. package/dist/ports/adapters/tenzro-sdk-adapter.d.ts +86 -0
  176. package/dist/ports/adapters/tenzro-sdk-adapter.d.ts.map +1 -0
  177. package/dist/ports/adapters/tenzro-sdk-adapter.js +100 -0
  178. package/dist/ports/adapters/tenzro-sdk-adapter.js.map +1 -0
  179. package/dist/ports/agent/acp.d.ts +66 -0
  180. package/dist/ports/agent/acp.d.ts.map +1 -0
  181. package/dist/ports/agent/acp.js +27 -0
  182. package/dist/ports/agent/acp.js.map +1 -0
  183. package/dist/ports/agent/adapters/acp-adapter.d.ts +67 -0
  184. package/dist/ports/agent/adapters/acp-adapter.d.ts.map +1 -0
  185. package/dist/ports/agent/adapters/acp-adapter.js +70 -0
  186. package/dist/ports/agent/adapters/acp-adapter.js.map +1 -0
  187. package/dist/ports/agent/adapters/agent-bond-adapter.d.ts +31 -0
  188. package/dist/ports/agent/adapters/agent-bond-adapter.d.ts.map +1 -0
  189. package/dist/ports/agent/adapters/agent-bond-adapter.js +82 -0
  190. package/dist/ports/agent/adapters/agent-bond-adapter.js.map +1 -0
  191. package/dist/ports/agent/adapters/agent-payment-adapter.d.ts +66 -0
  192. package/dist/ports/agent/adapters/agent-payment-adapter.d.ts.map +1 -0
  193. package/dist/ports/agent/adapters/agent-payment-adapter.js +75 -0
  194. package/dist/ports/agent/adapters/agent-payment-adapter.js.map +1 -0
  195. package/dist/ports/agent/adapters/ap2-adapter.d.ts +28 -0
  196. package/dist/ports/agent/adapters/ap2-adapter.d.ts.map +1 -0
  197. package/dist/ports/agent/adapters/ap2-adapter.js +97 -0
  198. package/dist/ports/agent/adapters/ap2-adapter.js.map +1 -0
  199. package/dist/ports/agent/adapters/auth-approval-adapter.d.ts +26 -0
  200. package/dist/ports/agent/adapters/auth-approval-adapter.d.ts.map +1 -0
  201. package/dist/ports/agent/adapters/auth-approval-adapter.js +37 -0
  202. package/dist/ports/agent/adapters/auth-approval-adapter.js.map +1 -0
  203. package/dist/ports/agent/adapters/erc7802-adapter.d.ts +30 -0
  204. package/dist/ports/agent/adapters/erc7802-adapter.d.ts.map +1 -0
  205. package/dist/ports/agent/adapters/erc7802-adapter.js +60 -0
  206. package/dist/ports/agent/adapters/erc7802-adapter.js.map +1 -0
  207. package/dist/ports/agent/adapters/erc8004-adapter.d.ts +54 -0
  208. package/dist/ports/agent/adapters/erc8004-adapter.d.ts.map +1 -0
  209. package/dist/ports/agent/adapters/erc8004-adapter.js +53 -0
  210. package/dist/ports/agent/adapters/erc8004-adapter.js.map +1 -0
  211. package/dist/ports/agent/adapters/escrow-adapter.d.ts +33 -0
  212. package/dist/ports/agent/adapters/escrow-adapter.d.ts.map +1 -0
  213. package/dist/ports/agent/adapters/escrow-adapter.js +109 -0
  214. package/dist/ports/agent/adapters/escrow-adapter.js.map +1 -0
  215. package/dist/ports/agent/adapters/fee-estimator-adapter.d.ts +31 -0
  216. package/dist/ports/agent/adapters/fee-estimator-adapter.d.ts.map +1 -0
  217. package/dist/ports/agent/adapters/fee-estimator-adapter.js +103 -0
  218. package/dist/ports/agent/adapters/fee-estimator-adapter.js.map +1 -0
  219. package/dist/ports/agent/adapters/htlc-escrow-adapter.d.ts +68 -0
  220. package/dist/ports/agent/adapters/htlc-escrow-adapter.d.ts.map +1 -0
  221. package/dist/ports/agent/adapters/htlc-escrow-adapter.js +131 -0
  222. package/dist/ports/agent/adapters/htlc-escrow-adapter.js.map +1 -0
  223. package/dist/ports/agent/adapters/insurance-adapter.d.ts +32 -0
  224. package/dist/ports/agent/adapters/insurance-adapter.d.ts.map +1 -0
  225. package/dist/ports/agent/adapters/insurance-adapter.js +103 -0
  226. package/dist/ports/agent/adapters/insurance-adapter.js.map +1 -0
  227. package/dist/ports/agent/adapters/lifecycle-adapter.d.ts +26 -0
  228. package/dist/ports/agent/adapters/lifecycle-adapter.d.ts.map +1 -0
  229. package/dist/ports/agent/adapters/lifecycle-adapter.js +136 -0
  230. package/dist/ports/agent/adapters/lifecycle-adapter.js.map +1 -0
  231. package/dist/ports/agent/adapters/nanopayment-adapter.d.ts +62 -0
  232. package/dist/ports/agent/adapters/nanopayment-adapter.d.ts.map +1 -0
  233. package/dist/ports/agent/adapters/nanopayment-adapter.js +76 -0
  234. package/dist/ports/agent/adapters/nanopayment-adapter.js.map +1 -0
  235. package/dist/ports/agent/adapters/payment-rails-adapter.d.ts +67 -0
  236. package/dist/ports/agent/adapters/payment-rails-adapter.d.ts.map +1 -0
  237. package/dist/ports/agent/adapters/payment-rails-adapter.js +108 -0
  238. package/dist/ports/agent/adapters/payment-rails-adapter.js.map +1 -0
  239. package/dist/ports/agent/adapters/principal-chain-adapter.d.ts +23 -0
  240. package/dist/ports/agent/adapters/principal-chain-adapter.d.ts.map +1 -0
  241. package/dist/ports/agent/adapters/principal-chain-adapter.js +156 -0
  242. package/dist/ports/agent/adapters/principal-chain-adapter.js.map +1 -0
  243. package/dist/ports/agent/adapters/session-key-adapter.d.ts +45 -0
  244. package/dist/ports/agent/adapters/session-key-adapter.d.ts.map +1 -0
  245. package/dist/ports/agent/adapters/session-key-adapter.js +80 -0
  246. package/dist/ports/agent/adapters/session-key-adapter.js.map +1 -0
  247. package/dist/ports/agent/adapters/tee-attestation-adapter.d.ts +32 -0
  248. package/dist/ports/agent/adapters/tee-attestation-adapter.d.ts.map +1 -0
  249. package/dist/ports/agent/adapters/tee-attestation-adapter.js +38 -0
  250. package/dist/ports/agent/adapters/tee-attestation-adapter.js.map +1 -0
  251. package/dist/ports/agent/agent-bond.d.ts +80 -0
  252. package/dist/ports/agent/agent-bond.d.ts.map +1 -0
  253. package/dist/ports/agent/agent-bond.js +23 -0
  254. package/dist/ports/agent/agent-bond.js.map +1 -0
  255. package/dist/ports/agent/agent-payment.d.ts +72 -0
  256. package/dist/ports/agent/agent-payment.d.ts.map +1 -0
  257. package/dist/ports/agent/agent-payment.js +17 -0
  258. package/dist/ports/agent/agent-payment.js.map +1 -0
  259. package/dist/ports/agent/ap2.d.ts +104 -0
  260. package/dist/ports/agent/ap2.d.ts.map +1 -0
  261. package/dist/ports/agent/ap2.js +22 -0
  262. package/dist/ports/agent/ap2.js.map +1 -0
  263. package/dist/ports/agent/auth-approval.d.ts +40 -0
  264. package/dist/ports/agent/auth-approval.d.ts.map +1 -0
  265. package/dist/ports/agent/auth-approval.js +23 -0
  266. package/dist/ports/agent/auth-approval.js.map +1 -0
  267. package/dist/ports/agent/erc7802.d.ts +94 -0
  268. package/dist/ports/agent/erc7802.d.ts.map +1 -0
  269. package/dist/ports/agent/erc7802.js +30 -0
  270. package/dist/ports/agent/erc7802.js.map +1 -0
  271. package/dist/ports/agent/erc8004.d.ts +57 -0
  272. package/dist/ports/agent/erc8004.d.ts.map +1 -0
  273. package/dist/ports/agent/erc8004.js +20 -0
  274. package/dist/ports/agent/erc8004.js.map +1 -0
  275. package/dist/ports/agent/escrow.d.ts +74 -0
  276. package/dist/ports/agent/escrow.d.ts.map +1 -0
  277. package/dist/ports/agent/escrow.js +18 -0
  278. package/dist/ports/agent/escrow.js.map +1 -0
  279. package/dist/ports/agent/fee-estimator.d.ts +71 -0
  280. package/dist/ports/agent/fee-estimator.d.ts.map +1 -0
  281. package/dist/ports/agent/fee-estimator.js +21 -0
  282. package/dist/ports/agent/fee-estimator.js.map +1 -0
  283. package/dist/ports/agent/htlc-escrow.d.ts +94 -0
  284. package/dist/ports/agent/htlc-escrow.d.ts.map +1 -0
  285. package/dist/ports/agent/htlc-escrow.js +25 -0
  286. package/dist/ports/agent/htlc-escrow.js.map +1 -0
  287. package/dist/ports/agent/index.d.ts +58 -0
  288. package/dist/ports/agent/index.d.ts.map +1 -0
  289. package/dist/ports/agent/index.js +24 -0
  290. package/dist/ports/agent/index.js.map +1 -0
  291. package/dist/ports/agent/insurance.d.ts +65 -0
  292. package/dist/ports/agent/insurance.d.ts.map +1 -0
  293. package/dist/ports/agent/insurance.js +18 -0
  294. package/dist/ports/agent/insurance.js.map +1 -0
  295. package/dist/ports/agent/lifecycle.d.ts +69 -0
  296. package/dist/ports/agent/lifecycle.d.ts.map +1 -0
  297. package/dist/ports/agent/lifecycle.js +17 -0
  298. package/dist/ports/agent/lifecycle.js.map +1 -0
  299. package/dist/ports/agent/nanopayment.d.ts +72 -0
  300. package/dist/ports/agent/nanopayment.d.ts.map +1 -0
  301. package/dist/ports/agent/nanopayment.js +16 -0
  302. package/dist/ports/agent/nanopayment.js.map +1 -0
  303. package/dist/ports/agent/payment-rails.d.ts +140 -0
  304. package/dist/ports/agent/payment-rails.d.ts.map +1 -0
  305. package/dist/ports/agent/payment-rails.js +25 -0
  306. package/dist/ports/agent/payment-rails.js.map +1 -0
  307. package/dist/ports/agent/principal-chain.d.ts +95 -0
  308. package/dist/ports/agent/principal-chain.d.ts.map +1 -0
  309. package/dist/ports/agent/principal-chain.js +16 -0
  310. package/dist/ports/agent/principal-chain.js.map +1 -0
  311. package/dist/ports/agent/session-key.d.ts +94 -0
  312. package/dist/ports/agent/session-key.d.ts.map +1 -0
  313. package/dist/ports/agent/session-key.js +31 -0
  314. package/dist/ports/agent/session-key.js.map +1 -0
  315. package/dist/ports/agent/tee-attestation.d.ts +51 -0
  316. package/dist/ports/agent/tee-attestation.d.ts.map +1 -0
  317. package/dist/ports/agent/tee-attestation.js +28 -0
  318. package/dist/ports/agent/tee-attestation.js.map +1 -0
  319. package/dist/ports/bridge/adapters/bridge-adapter-base.d.ts +47 -0
  320. package/dist/ports/bridge/adapters/bridge-adapter-base.d.ts.map +1 -0
  321. package/dist/ports/bridge/adapters/bridge-adapter-base.js +144 -0
  322. package/dist/ports/bridge/adapters/bridge-adapter-base.js.map +1 -0
  323. package/dist/ports/bridge/adapters/canton-bridge-adapter.d.ts +30 -0
  324. package/dist/ports/bridge/adapters/canton-bridge-adapter.d.ts.map +1 -0
  325. package/dist/ports/bridge/adapters/canton-bridge-adapter.js +31 -0
  326. package/dist/ports/bridge/adapters/canton-bridge-adapter.js.map +1 -0
  327. package/dist/ports/bridge/adapters/ccip-adapter.d.ts +30 -0
  328. package/dist/ports/bridge/adapters/ccip-adapter.d.ts.map +1 -0
  329. package/dist/ports/bridge/adapters/ccip-adapter.js +31 -0
  330. package/dist/ports/bridge/adapters/ccip-adapter.js.map +1 -0
  331. package/dist/ports/bridge/adapters/debridge-adapter.d.ts +27 -0
  332. package/dist/ports/bridge/adapters/debridge-adapter.d.ts.map +1 -0
  333. package/dist/ports/bridge/adapters/debridge-adapter.js +28 -0
  334. package/dist/ports/bridge/adapters/debridge-adapter.js.map +1 -0
  335. package/dist/ports/bridge/adapters/layerzero-adapter.d.ts +30 -0
  336. package/dist/ports/bridge/adapters/layerzero-adapter.d.ts.map +1 -0
  337. package/dist/ports/bridge/adapters/layerzero-adapter.js +31 -0
  338. package/dist/ports/bridge/adapters/layerzero-adapter.js.map +1 -0
  339. package/dist/ports/bridge/adapters/lifi-adapter.d.ts +48 -0
  340. package/dist/ports/bridge/adapters/lifi-adapter.d.ts.map +1 -0
  341. package/dist/ports/bridge/adapters/lifi-adapter.js +49 -0
  342. package/dist/ports/bridge/adapters/lifi-adapter.js.map +1 -0
  343. package/dist/ports/bridge/adapters/wormhole-adapter.d.ts +26 -0
  344. package/dist/ports/bridge/adapters/wormhole-adapter.d.ts.map +1 -0
  345. package/dist/ports/bridge/adapters/wormhole-adapter.js +27 -0
  346. package/dist/ports/bridge/adapters/wormhole-adapter.js.map +1 -0
  347. package/dist/ports/bridge/bridge.d.ts +123 -0
  348. package/dist/ports/bridge/bridge.d.ts.map +1 -0
  349. package/dist/ports/bridge/bridge.js +20 -0
  350. package/dist/ports/bridge/bridge.js.map +1 -0
  351. package/dist/ports/bridge/index.d.ts +13 -0
  352. package/dist/ports/bridge/index.d.ts.map +1 -0
  353. package/dist/ports/bridge/index.js +11 -0
  354. package/dist/ports/bridge/index.js.map +1 -0
  355. package/dist/ports/canton/adapters/ledger-api-adapter.d.ts +52 -0
  356. package/dist/ports/canton/adapters/ledger-api-adapter.d.ts.map +1 -0
  357. package/dist/ports/canton/adapters/ledger-api-adapter.js +232 -0
  358. package/dist/ports/canton/adapters/ledger-api-adapter.js.map +1 -0
  359. package/dist/ports/canton/canton-identity.d.ts +60 -0
  360. package/dist/ports/canton/canton-identity.d.ts.map +1 -0
  361. package/dist/ports/canton/canton-identity.js +28 -0
  362. package/dist/ports/canton/canton-identity.js.map +1 -0
  363. package/dist/ports/canton/canton-validator.d.ts +182 -0
  364. package/dist/ports/canton/canton-validator.d.ts.map +1 -0
  365. package/dist/ports/canton/canton-validator.js +39 -0
  366. package/dist/ports/canton/canton-validator.js.map +1 -0
  367. package/dist/ports/canton/fingerprint.d.ts +24 -0
  368. package/dist/ports/canton/fingerprint.d.ts.map +1 -0
  369. package/dist/ports/canton/fingerprint.js +31 -0
  370. package/dist/ports/canton/fingerprint.js.map +1 -0
  371. package/dist/ports/canton/hash.d.ts +37 -0
  372. package/dist/ports/canton/hash.d.ts.map +1 -0
  373. package/dist/ports/canton/hash.js +68 -0
  374. package/dist/ports/canton/hash.js.map +1 -0
  375. package/dist/ports/canton/http.d.ts +64 -0
  376. package/dist/ports/canton/http.d.ts.map +1 -0
  377. package/dist/ports/canton/http.js +177 -0
  378. package/dist/ports/canton/http.js.map +1 -0
  379. package/dist/ports/cross-vm.d.ts +79 -0
  380. package/dist/ports/cross-vm.d.ts.map +1 -0
  381. package/dist/ports/cross-vm.js +81 -0
  382. package/dist/ports/cross-vm.js.map +1 -0
  383. package/dist/ports/index.d.ts +18 -0
  384. package/dist/ports/index.d.ts.map +1 -0
  385. package/dist/ports/index.js +11 -0
  386. package/dist/ports/index.js.map +1 -0
  387. package/dist/ports/tenzro-identity.d.ts +29 -0
  388. package/dist/ports/tenzro-identity.d.ts.map +1 -0
  389. package/dist/ports/tenzro-identity.js +19 -0
  390. package/dist/ports/tenzro-identity.js.map +1 -0
  391. package/dist/ports/tenzro-rpc.d.ts +79 -0
  392. package/dist/ports/tenzro-rpc.d.ts.map +1 -0
  393. package/dist/ports/tenzro-rpc.js +21 -0
  394. package/dist/ports/tenzro-rpc.js.map +1 -0
  395. package/dist/router/index.d.ts +3 -0
  396. package/dist/router/index.d.ts.map +1 -0
  397. package/dist/router/index.js +2 -0
  398. package/dist/router/index.js.map +1 -0
  399. package/dist/router/route.d.ts +17 -0
  400. package/dist/router/route.d.ts.map +1 -0
  401. package/dist/router/route.js +78 -0
  402. package/dist/router/route.js.map +1 -0
  403. package/dist/settlement/nanopayment-flow.d.ts +48 -0
  404. package/dist/settlement/nanopayment-flow.d.ts.map +1 -0
  405. package/dist/settlement/nanopayment-flow.js +111 -0
  406. package/dist/settlement/nanopayment-flow.js.map +1 -0
  407. package/dist/surfaces/canton-external.d.ts +43 -0
  408. package/dist/surfaces/canton-external.d.ts.map +1 -0
  409. package/dist/surfaces/canton-external.js +252 -0
  410. package/dist/surfaces/canton-external.js.map +1 -0
  411. package/dist/surfaces/canton-internal.d.ts +34 -0
  412. package/dist/surfaces/canton-internal.d.ts.map +1 -0
  413. package/dist/surfaces/canton-internal.js +163 -0
  414. package/dist/surfaces/canton-internal.js.map +1 -0
  415. package/dist/surfaces/canton-onboarding.d.ts +64 -0
  416. package/dist/surfaces/canton-onboarding.d.ts.map +1 -0
  417. package/dist/surfaces/canton-onboarding.js +113 -0
  418. package/dist/surfaces/canton-onboarding.js.map +1 -0
  419. package/dist/surfaces/evm-on-tenzro.d.ts +29 -0
  420. package/dist/surfaces/evm-on-tenzro.d.ts.map +1 -0
  421. package/dist/surfaces/evm-on-tenzro.js +226 -0
  422. package/dist/surfaces/evm-on-tenzro.js.map +1 -0
  423. package/dist/surfaces/index.d.ts +13 -0
  424. package/dist/surfaces/index.d.ts.map +1 -0
  425. package/dist/surfaces/index.js +7 -0
  426. package/dist/surfaces/index.js.map +1 -0
  427. package/dist/surfaces/svm-on-tenzro.d.ts +24 -0
  428. package/dist/surfaces/svm-on-tenzro.d.ts.map +1 -0
  429. package/dist/surfaces/svm-on-tenzro.js +238 -0
  430. package/dist/surfaces/svm-on-tenzro.js.map +1 -0
  431. package/dist/surfaces/tenzro-native.d.ts +45 -0
  432. package/dist/surfaces/tenzro-native.d.ts.map +1 -0
  433. package/dist/surfaces/tenzro-native.js +299 -0
  434. package/dist/surfaces/tenzro-native.js.map +1 -0
  435. package/dist/surfaces/util.d.ts +18 -0
  436. package/dist/surfaces/util.d.ts.map +1 -0
  437. package/dist/surfaces/util.js +36 -0
  438. package/dist/surfaces/util.js.map +1 -0
  439. package/dist/types/asset.d.ts +43 -0
  440. package/dist/types/asset.d.ts.map +1 -0
  441. package/dist/types/asset.js +13 -0
  442. package/dist/types/asset.js.map +1 -0
  443. package/dist/types/consent.d.ts +46 -0
  444. package/dist/types/consent.d.ts.map +1 -0
  445. package/dist/types/consent.js +18 -0
  446. package/dist/types/consent.js.map +1 -0
  447. package/dist/types/identity.d.ts +115 -0
  448. package/dist/types/identity.d.ts.map +1 -0
  449. package/dist/types/identity.js +12 -0
  450. package/dist/types/identity.js.map +1 -0
  451. package/dist/types/index.d.ts +10 -0
  452. package/dist/types/index.d.ts.map +1 -0
  453. package/dist/types/index.js +3 -0
  454. package/dist/types/index.js.map +1 -0
  455. package/dist/types/intent.d.ts +132 -0
  456. package/dist/types/intent.d.ts.map +1 -0
  457. package/dist/types/intent.js +8 -0
  458. package/dist/types/intent.js.map +1 -0
  459. package/dist/types/signing-driver.d.ts +48 -0
  460. package/dist/types/signing-driver.d.ts.map +1 -0
  461. package/dist/types/signing-driver.js +9 -0
  462. package/dist/types/signing-driver.js.map +1 -0
  463. package/dist/types/surface-module.d.ts +38 -0
  464. package/dist/types/surface-module.d.ts.map +1 -0
  465. package/dist/types/surface-module.js +19 -0
  466. package/dist/types/surface-module.js.map +1 -0
  467. package/dist/types/surface.d.ts +17 -0
  468. package/dist/types/surface.d.ts.map +1 -0
  469. package/dist/types/surface.js +28 -0
  470. package/dist/types/surface.js.map +1 -0
  471. package/package.json +84 -0
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Minimal Solana wire-format primitives.
3
+ *
4
+ * What's here, and why:
5
+ * - **compact-array length encoding** ("short_vec"): base-128 varint with
6
+ * high-bit continuation. Used for the count prefix on Solana arrays
7
+ * (signatures, account keys, instructions, instruction data, etc.).
8
+ * - **base58** (Bitcoin alphabet): Solana pubkeys, addresses, and tx
9
+ * signatures all serialise as base58. We need both directions because
10
+ * `SurfaceKey.address` for the SVM surface stores the base58 form.
11
+ * - **legacy compiled-message** + **transaction** serialisation: the byte
12
+ * layout `solana-validator` accepts on `sendTransaction`.
13
+ *
14
+ * Why not @solana/web3.js: it pulls in Buffer + Node crypto polyfills, and
15
+ * we need a pure-JS, browser-clean kernel package. The slice we use here is
16
+ * a few hundred lines; vendoring is cheaper than the dep tree.
17
+ *
18
+ * Scope deliberately narrow: legacy message (not Message-v0 with address
19
+ * lookup tables — that's an M5+ optimisation when we have a working
20
+ * pointer flow first). The Tenzro precompile's SVM-side trigger is a single
21
+ * system-program-style instruction, which legacy messages handle fine.
22
+ *
23
+ * Refs:
24
+ * - https://docs.solana.com/developing/programming-model/transactions
25
+ * - https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction
26
+ * - https://github.com/solana-labs/solana/blob/master/sdk/program/src/short_vec.rs
27
+ */
28
+ /**
29
+ * Encode an unsigned integer as Solana short_vec (1–3 bytes for values up to
30
+ * 2^21 - 1, sufficient for any tx field count).
31
+ */
32
+ export declare function compactArrayLength(n: number): Uint8Array;
33
+ /** Decode a short_vec length from `buf` starting at `off`. */
34
+ export declare function readCompactArrayLength(buf: Uint8Array, off: number): {
35
+ value: number;
36
+ consumed: number;
37
+ };
38
+ /**
39
+ * Encode bytes to base58. Leading zeros become leading '1's per the Bitcoin
40
+ * convention used by Solana.
41
+ */
42
+ export declare function base58Encode(bytes: Uint8Array): string;
43
+ /** Decode a base58 string to bytes. */
44
+ export declare function base58Decode(s: string): Uint8Array;
45
+ export interface CompiledInstruction {
46
+ /** Index into accountKeys identifying the program to invoke. */
47
+ readonly programIdIndex: number;
48
+ /** Indices into accountKeys identifying the accounts the instruction touches. */
49
+ readonly accountKeyIndices: readonly number[];
50
+ /** Instruction data bytes (program-specific). */
51
+ readonly data: Uint8Array;
52
+ }
53
+ export interface CompiledMessage {
54
+ readonly numRequiredSignatures: number;
55
+ readonly numReadonlySignedAccounts: number;
56
+ readonly numReadonlyUnsignedAccounts: number;
57
+ /** 32-byte pubkeys, signers first then read-only signers, then writable
58
+ * non-signers, then read-only non-signers — as produced by the Solana
59
+ * message compiler. */
60
+ readonly accountKeys: readonly Uint8Array[];
61
+ readonly recentBlockhash: Uint8Array;
62
+ readonly instructions: readonly CompiledInstruction[];
63
+ }
64
+ /**
65
+ * Serialise a CompiledMessage to its on-the-wire bytes (legacy format).
66
+ *
67
+ * Layout:
68
+ * header (3 bytes)
69
+ * compact-array(account-keys, each 32 bytes)
70
+ * recent_blockhash (32 bytes)
71
+ * compact-array(instructions)
72
+ * each instruction:
73
+ * u8 program_id_index
74
+ * compact-array(account_indices, u8 each)
75
+ * compact-array(data, u8 each)
76
+ */
77
+ export declare function serializeCompiledMessage(msg: CompiledMessage): Uint8Array;
78
+ /**
79
+ * Build the wire-format signed transaction:
80
+ * compact-array(signatures, each 64 bytes) || message_bytes
81
+ *
82
+ * Signature count must equal `message.numRequiredSignatures`. Solana clients
83
+ * reject mismatches.
84
+ */
85
+ export declare function serializeTransaction(message: CompiledMessage, signatures: readonly Uint8Array[]): Uint8Array;
86
+ //# sourceMappingURL=solana.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../src/crypto/solana.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CAiBxD;AAED,8DAA8D;AAC9D,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,MAAM,GACV;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAYrC;AAaD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAyBtD;AAED,uCAAuC;AACvC,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CA2BlD;AAID,MAAM,WAAW,mBAAmB;IAClC,gEAAgE;IAChE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,iFAAiF;IACjF,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,iDAAiD;IACjD,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,yBAAyB,EAAE,MAAM,CAAC;IAC3C,QAAQ,CAAC,2BAA2B,EAAE,MAAM,CAAC;IAC7C;;4BAEwB;IACxB,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;IAC5C,QAAQ,CAAC,eAAe,EAAE,UAAU,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACvD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,eAAe,GAAG,UAAU,CA+BzE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,SAAS,UAAU,EAAE,GAChC,UAAU,CAcZ"}
@@ -0,0 +1,218 @@
1
+ /**
2
+ * Minimal Solana wire-format primitives.
3
+ *
4
+ * What's here, and why:
5
+ * - **compact-array length encoding** ("short_vec"): base-128 varint with
6
+ * high-bit continuation. Used for the count prefix on Solana arrays
7
+ * (signatures, account keys, instructions, instruction data, etc.).
8
+ * - **base58** (Bitcoin alphabet): Solana pubkeys, addresses, and tx
9
+ * signatures all serialise as base58. We need both directions because
10
+ * `SurfaceKey.address` for the SVM surface stores the base58 form.
11
+ * - **legacy compiled-message** + **transaction** serialisation: the byte
12
+ * layout `solana-validator` accepts on `sendTransaction`.
13
+ *
14
+ * Why not @solana/web3.js: it pulls in Buffer + Node crypto polyfills, and
15
+ * we need a pure-JS, browser-clean kernel package. The slice we use here is
16
+ * a few hundred lines; vendoring is cheaper than the dep tree.
17
+ *
18
+ * Scope deliberately narrow: legacy message (not Message-v0 with address
19
+ * lookup tables — that's an M5+ optimisation when we have a working
20
+ * pointer flow first). The Tenzro precompile's SVM-side trigger is a single
21
+ * system-program-style instruction, which legacy messages handle fine.
22
+ *
23
+ * Refs:
24
+ * - https://docs.solana.com/developing/programming-model/transactions
25
+ * - https://docs.solana.com/developing/clients/jsonrpc-api#sendtransaction
26
+ * - https://github.com/solana-labs/solana/blob/master/sdk/program/src/short_vec.rs
27
+ */
28
+ // ──────────────────────────── compact-array ────────────────────────────
29
+ /**
30
+ * Encode an unsigned integer as Solana short_vec (1–3 bytes for values up to
31
+ * 2^21 - 1, sufficient for any tx field count).
32
+ */
33
+ export function compactArrayLength(n) {
34
+ if (!Number.isInteger(n) || n < 0) {
35
+ throw new Error(`compact-array length must be a non-negative integer, got ${n}`);
36
+ }
37
+ const bytes = [];
38
+ let v = n;
39
+ while (true) {
40
+ let b = v & 0x7f;
41
+ v >>>= 7;
42
+ if (v === 0) {
43
+ bytes.push(b);
44
+ break;
45
+ }
46
+ b |= 0x80;
47
+ bytes.push(b);
48
+ }
49
+ return new Uint8Array(bytes);
50
+ }
51
+ /** Decode a short_vec length from `buf` starting at `off`. */
52
+ export function readCompactArrayLength(buf, off) {
53
+ let value = 0;
54
+ let consumed = 0;
55
+ for (let shift = 0;; shift += 7) {
56
+ const b = buf[off + consumed];
57
+ if (b === undefined)
58
+ throw new Error('short_vec: short read');
59
+ consumed += 1;
60
+ value |= (b & 0x7f) << shift;
61
+ if ((b & 0x80) === 0)
62
+ break;
63
+ if (consumed > 3)
64
+ throw new Error('short_vec: overlong');
65
+ }
66
+ return { value, consumed };
67
+ }
68
+ // ─────────────────────────────── base58 ───────────────────────────────
69
+ const B58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
70
+ const B58_INDEX = (() => {
71
+ const idx = new Array(128).fill(-1);
72
+ for (let i = 0; i < B58_ALPHABET.length; i++) {
73
+ idx[B58_ALPHABET.charCodeAt(i)] = i;
74
+ }
75
+ return idx;
76
+ })();
77
+ /**
78
+ * Encode bytes to base58. Leading zeros become leading '1's per the Bitcoin
79
+ * convention used by Solana.
80
+ */
81
+ export function base58Encode(bytes) {
82
+ if (bytes.length === 0)
83
+ return '';
84
+ // Count leading zeros.
85
+ let zeros = 0;
86
+ while (zeros < bytes.length && bytes[zeros] === 0)
87
+ zeros++;
88
+ // Convert big-endian bytes to a base-58 array.
89
+ const size = ((bytes.length - zeros) * 138) / 100 + 1; // log(256)/log(58) ≈ 1.366
90
+ const b58 = new Uint8Array(Math.ceil(size));
91
+ let length = 0;
92
+ for (let i = zeros; i < bytes.length; i++) {
93
+ let carry = bytes[i];
94
+ let j = 0;
95
+ for (let k = b58.length - 1; (carry !== 0 || j < length) && k >= 0; k--, j++) {
96
+ carry += 256 * b58[k];
97
+ b58[k] = carry % 58;
98
+ carry = (carry / 58) | 0;
99
+ }
100
+ length = j;
101
+ }
102
+ // Skip leading zeros in the result.
103
+ let it = b58.length - length;
104
+ while (it < b58.length && b58[it] === 0)
105
+ it++;
106
+ let out = '1'.repeat(zeros);
107
+ for (; it < b58.length; it++)
108
+ out += B58_ALPHABET[b58[it]];
109
+ return out;
110
+ }
111
+ /** Decode a base58 string to bytes. */
112
+ export function base58Decode(s) {
113
+ if (s.length === 0)
114
+ return new Uint8Array(0);
115
+ let zeros = 0;
116
+ while (zeros < s.length && s[zeros] === '1')
117
+ zeros++;
118
+ const size = ((s.length - zeros) * 733) / 1000 + 1; // log(58)/log(256) ≈ 0.733
119
+ const b256 = new Uint8Array(Math.ceil(size));
120
+ let length = 0;
121
+ for (let i = zeros; i < s.length; i++) {
122
+ const code = s.charCodeAt(i);
123
+ const digit = code < 128 ? (B58_INDEX[code] ?? -1) : -1;
124
+ if (digit < 0)
125
+ throw new Error(`base58: invalid character at ${i}`);
126
+ let carry = digit;
127
+ let j = 0;
128
+ for (let k = b256.length - 1; (carry !== 0 || j < length) && k >= 0; k--, j++) {
129
+ carry += 58 * b256[k];
130
+ b256[k] = carry & 0xff;
131
+ carry >>>= 8;
132
+ }
133
+ length = j;
134
+ }
135
+ let it = b256.length - length;
136
+ while (it < b256.length && b256[it] === 0)
137
+ it++;
138
+ const out = new Uint8Array(zeros + (b256.length - it));
139
+ // leading zeros stay zero (Uint8Array is zero-init), copy the tail
140
+ let dst = zeros;
141
+ for (; it < b256.length; it++, dst++)
142
+ out[dst] = b256[it];
143
+ return out;
144
+ }
145
+ /**
146
+ * Serialise a CompiledMessage to its on-the-wire bytes (legacy format).
147
+ *
148
+ * Layout:
149
+ * header (3 bytes)
150
+ * compact-array(account-keys, each 32 bytes)
151
+ * recent_blockhash (32 bytes)
152
+ * compact-array(instructions)
153
+ * each instruction:
154
+ * u8 program_id_index
155
+ * compact-array(account_indices, u8 each)
156
+ * compact-array(data, u8 each)
157
+ */
158
+ export function serializeCompiledMessage(msg) {
159
+ const parts = [];
160
+ parts.push(new Uint8Array([
161
+ msg.numRequiredSignatures,
162
+ msg.numReadonlySignedAccounts,
163
+ msg.numReadonlyUnsignedAccounts,
164
+ ]));
165
+ parts.push(compactArrayLength(msg.accountKeys.length));
166
+ for (const k of msg.accountKeys) {
167
+ if (k.length !== 32)
168
+ throw new Error(`account key must be 32 bytes, got ${k.length}`);
169
+ parts.push(k);
170
+ }
171
+ if (msg.recentBlockhash.length !== 32) {
172
+ throw new Error('recent_blockhash must be 32 bytes');
173
+ }
174
+ parts.push(msg.recentBlockhash);
175
+ parts.push(compactArrayLength(msg.instructions.length));
176
+ for (const ix of msg.instructions) {
177
+ parts.push(new Uint8Array([ix.programIdIndex]));
178
+ parts.push(compactArrayLength(ix.accountKeyIndices.length));
179
+ parts.push(new Uint8Array(ix.accountKeyIndices));
180
+ parts.push(compactArrayLength(ix.data.length));
181
+ parts.push(ix.data);
182
+ }
183
+ return concat(parts);
184
+ }
185
+ /**
186
+ * Build the wire-format signed transaction:
187
+ * compact-array(signatures, each 64 bytes) || message_bytes
188
+ *
189
+ * Signature count must equal `message.numRequiredSignatures`. Solana clients
190
+ * reject mismatches.
191
+ */
192
+ export function serializeTransaction(message, signatures) {
193
+ if (signatures.length !== message.numRequiredSignatures) {
194
+ throw new Error(`expected ${message.numRequiredSignatures} signatures, got ${signatures.length}`);
195
+ }
196
+ const messageBytes = serializeCompiledMessage(message);
197
+ const parts = [compactArrayLength(signatures.length)];
198
+ for (const s of signatures) {
199
+ if (s.length !== 64)
200
+ throw new Error(`Ed25519 sig must be 64 bytes, got ${s.length}`);
201
+ parts.push(s);
202
+ }
203
+ parts.push(messageBytes);
204
+ return concat(parts);
205
+ }
206
+ function concat(parts) {
207
+ let total = 0;
208
+ for (const p of parts)
209
+ total += p.length;
210
+ const out = new Uint8Array(total);
211
+ let off = 0;
212
+ for (const p of parts) {
213
+ out.set(p, off);
214
+ off += p.length;
215
+ }
216
+ return out;
217
+ }
218
+ //# sourceMappingURL=solana.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana.js","sourceRoot":"","sources":["../../src/crypto/solana.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * FrostBackend — device-side FROST round computation.
3
+ *
4
+ * The wallet kernel does not bundle a FROST library. The choice (per
5
+ * 2026 audit landscape — NCC Group's October 2023 review of the
6
+ * Zcash Foundation `frost` crates is the only completed audit of a
7
+ * pure-Rust FROST implementation that covers both Ed25519 (RFC 9591)
8
+ * and secp256k1) is to wrap the ZF crates as WebAssembly via
9
+ * `wasm-bindgen` and inject the resulting binding through the
10
+ * `FrostBackend` port at host-app construction time. The kernel only
11
+ * needs the port surface defined alongside the unwrapper:
12
+ *
13
+ * ```ts
14
+ * import type { FrostBackend } from '../passkey-share/unwrapper.js';
15
+ * ```
16
+ *
17
+ * Two reference backends ship in this file:
18
+ *
19
+ * - `frostBackendUnavailable()` — a typed-throw stub. Used until the
20
+ * host app links a real binding. Throwing here (instead of letting
21
+ * the FROST drivers fail mid-round with "undefined is not callable")
22
+ * keeps the failure mode legible.
23
+ *
24
+ * - `composeFrostBackend(...)` — small dispatch helper for hosts that
25
+ * ship two distinct WASM bundles per scheme. The Ed25519 bundle and
26
+ * secp256k1 bundle are independent crates upstream
27
+ * (`frost-ed25519`, `frost-secp256k1`), so most hosts will load them
28
+ * separately and join them at this seam.
29
+ *
30
+ * Browser-clean: no Node-specific globals, no DOM dependencies. The
31
+ * eventual WASM binding sits behind dynamic `import()` so SSR / Node
32
+ * tests that don't exercise FROST never touch the WASM module.
33
+ */
34
+ import type { FrostBackend, ShareUnwrapRequest } from '../passkey-share/unwrapper.js';
35
+ import type { FrostScheme } from './coordinator.js';
36
+ export declare class FrostBackendUnavailable extends Error {
37
+ readonly scheme: FrostScheme | undefined;
38
+ constructor(scheme: FrostScheme | undefined);
39
+ }
40
+ /**
41
+ * Default backend that fails loudly. Wire a real FROST library in via
42
+ * `composeFrostBackend()` (or your own implementation) before any
43
+ * signing flow runs.
44
+ */
45
+ export declare function frostBackendUnavailable(): FrostBackend;
46
+ /**
47
+ * Compose per-scheme backends into a single `FrostBackend`. Lets hosts
48
+ * load WASM bundles lazily (e.g. dynamic `import()` per curve) and join
49
+ * them here without the kernel learning about loaders.
50
+ *
51
+ * Either backend may be omitted; calls into a missing scheme throw
52
+ * `FrostBackendUnavailable`.
53
+ */
54
+ export declare function composeFrostBackend(parts: {
55
+ readonly ed25519?: FrostBackend;
56
+ readonly secp256k1?: FrostBackend;
57
+ }): FrostBackend;
58
+ export type { FrostBackend, ShareUnwrapRequest };
59
+ //# sourceMappingURL=backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../../src/custody/frost/backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,qBAAa,uBAAwB,SAAQ,KAAK;IACpC,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS;gBAA/B,MAAM,EAAE,WAAW,GAAG,SAAS;CAQrD;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,IAAI,YAAY,CAkBtD;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC;CACnC,GAAG,YAAY,CAcf;AAID,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * FrostBackend — device-side FROST round computation.
3
+ *
4
+ * The wallet kernel does not bundle a FROST library. The choice (per
5
+ * 2026 audit landscape — NCC Group's October 2023 review of the
6
+ * Zcash Foundation `frost` crates is the only completed audit of a
7
+ * pure-Rust FROST implementation that covers both Ed25519 (RFC 9591)
8
+ * and secp256k1) is to wrap the ZF crates as WebAssembly via
9
+ * `wasm-bindgen` and inject the resulting binding through the
10
+ * `FrostBackend` port at host-app construction time. The kernel only
11
+ * needs the port surface defined alongside the unwrapper:
12
+ *
13
+ * ```ts
14
+ * import type { FrostBackend } from '../passkey-share/unwrapper.ts';
15
+ * ```
16
+ *
17
+ * Two reference backends ship in this file:
18
+ *
19
+ * - `frostBackendUnavailable()` — a typed-throw stub. Used until the
20
+ * host app links a real binding. Throwing here (instead of letting
21
+ * the FROST drivers fail mid-round with "undefined is not callable")
22
+ * keeps the failure mode legible.
23
+ *
24
+ * - `composeFrostBackend(...)` — small dispatch helper for hosts that
25
+ * ship two distinct WASM bundles per scheme. The Ed25519 bundle and
26
+ * secp256k1 bundle are independent crates upstream
27
+ * (`frost-ed25519`, `frost-secp256k1`), so most hosts will load them
28
+ * separately and join them at this seam.
29
+ *
30
+ * Browser-clean: no Node-specific globals, no DOM dependencies. The
31
+ * eventual WASM binding sits behind dynamic `import()` so SSR / Node
32
+ * tests that don't exercise FROST never touch the WASM module.
33
+ */
34
+ export class FrostBackendUnavailable extends Error {
35
+ scheme;
36
+ constructor(scheme) {
37
+ super(`FROST backend not configured${scheme ? ` for ${scheme}` : ''}: ` +
38
+ 'host app must inject a real FrostBackend (e.g. WASM-wrapped ' +
39
+ 'frost-ed25519 / frost-secp256k1) before signing.');
40
+ this.scheme = scheme;
41
+ this.name = 'FrostBackendUnavailable';
42
+ }
43
+ }
44
+ /**
45
+ * Default backend that fails loudly. Wire a real FROST library in via
46
+ * `composeFrostBackend()` (or your own implementation) before any
47
+ * signing flow runs.
48
+ */
49
+ export function frostBackendUnavailable() {
50
+ return {
51
+ async commit({ scheme }) {
52
+ throw new FrostBackendUnavailable(scheme);
53
+ },
54
+ async respond({ scheme, }) {
55
+ throw new FrostBackendUnavailable(scheme);
56
+ },
57
+ };
58
+ }
59
+ /**
60
+ * Compose per-scheme backends into a single `FrostBackend`. Lets hosts
61
+ * load WASM bundles lazily (e.g. dynamic `import()` per curve) and join
62
+ * them here without the kernel learning about loaders.
63
+ *
64
+ * Either backend may be omitted; calls into a missing scheme throw
65
+ * `FrostBackendUnavailable`.
66
+ */
67
+ export function composeFrostBackend(parts) {
68
+ function pick(scheme) {
69
+ const got = scheme === 'ed25519' ? parts.ed25519 : parts.secp256k1;
70
+ if (!got)
71
+ throw new FrostBackendUnavailable(scheme);
72
+ return got;
73
+ }
74
+ return {
75
+ async commit(args) {
76
+ return pick(args.scheme).commit(args);
77
+ },
78
+ async respond(args) {
79
+ return pick(args.scheme).respond(args);
80
+ },
81
+ };
82
+ }
83
+ //# sourceMappingURL=backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.js","sourceRoot":"","sources":["../../../src/custody/frost/backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAKH,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAC3B;IAArB,YAAqB,MAA+B;QAClD,KAAK,CACH,+BAA+B,MAAM,CAAC,CAAC,CAAC,QAAQ,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI;YAC/D,8DAA8D;YAC9D,kDAAkD,CACrD,CAAC;QALiB,WAAM,GAAN,MAAM,CAAyB;QAMlD,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAA8C;YACjE,MAAM,IAAI,uBAAuB,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,EACZ,MAAM,GAQP;YACC,MAAM,IAAI,uBAAuB,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAGnC;IACC,SAAS,IAAI,CAAC,MAAmB;QAC/B,MAAM,GAAG,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;QACnE,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,uBAAuB,CAAC,MAAM,CAAC,CAAC;QACpD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,IAAI;YACf,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,IAAI;YAChB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,148 @@
1
+ /**
2
+ * FrostCoordinator — wallet-side view of the FROST round-coordination
3
+ * protocol the node hosts at `/wallet/frost/*`. Specified in DESIGN.md
4
+ * §4.3.4 + §11. Wraps two parallel curves:
5
+ *
6
+ * - FROST-Ed25519 (RFC 9591) → driver id `frost-ed25519`
7
+ * - FROST-secp256k1 (taproot-ready) → driver id `frost-secp256k1`
8
+ *
9
+ * Both curves use the same 3-round flow. The wallet device holds one
10
+ * secret share (passkey-bound, unwrapped per signing). The node-TEE
11
+ * holds the second share. A 2-of-2 quorum signs; for 2-of-3 (post-
12
+ * pairing) any two of {device A, device B, node-TEE} can co-sign.
13
+ *
14
+ * Tenzro endpoints (Tenzro implements; wallet kernel only consumes):
15
+ *
16
+ * 1. `start({did, scheme, preimage, surfaceKey, purpose?})`
17
+ * → `POST /wallet/frost/{scheme}/start`
18
+ * Response: `{sessionId, expiresAt, participants[]}` where
19
+ * `participants` is the list of co-signer identifiers (passkey
20
+ * cred-ids + `node-tee`) the node will round-coordinate against.
21
+ *
22
+ * 2. `commit({sessionId, deviceCommitment})`
23
+ * → `POST /wallet/frost/{scheme}/commit`
24
+ * Round 1: device submits its hiding/binding commitments
25
+ * (`(D_i, E_i)` per RFC 9591 §4.1). Response: `{state}`. The node
26
+ * blocks the response until enough commitments are in or
27
+ * `state === 'aborted'`.
28
+ *
29
+ * 3. `awaitChallenge({sessionId})`
30
+ * → `POST /wallet/frost/{scheme}/await-challenge`
31
+ * Round 2: device long-polls for the aggregated commitment +
32
+ * Lagrange-coefficient bundle the node assembled from all
33
+ * participants. Response: `{groupCommitment, signerSet, lambda}`.
34
+ *
35
+ * 4. `respond({sessionId, deviceShare})`
36
+ * → `POST /wallet/frost/{scheme}/respond`
37
+ * Round 3: device submits its signature share `z_i`. Response:
38
+ * `{state}`. Successful responses commit the share into the round.
39
+ *
40
+ * 5. `finalize({sessionId})`
41
+ * → `POST /wallet/frost/{scheme}/finalize`
42
+ * Device polls for the aggregated signature. Response:
43
+ * `{signature}`. Once aggregated, the round is destroyed and
44
+ * cannot be replayed.
45
+ *
46
+ * 6. `abort({sessionId, reason?})`
47
+ * → `POST /wallet/frost/{scheme}/abort`
48
+ * Idempotent. Used when the user cancels mid-round.
49
+ *
50
+ * The port is intentionally agnostic about how device shares are
51
+ * unwrapped — that's the passkey-quorum custody layer. The coordinator
52
+ * only carries opaque commitment / share bytes that the device-side
53
+ * FROST library produced.
54
+ *
55
+ * Browser-clean: `fetch` only. No Node-specific globals.
56
+ */
57
+ export type FrostScheme = 'ed25519' | 'secp256k1';
58
+ export type FrostSessionState = 'pending' | 'committed' | 'responded' | 'finalized' | 'aborted' | 'expired';
59
+ /**
60
+ * Identifier of a single FROST participant. The node maps these to
61
+ * passkey credential ids / `node-tee`. The device only needs them to
62
+ * verify the `signerSet` returned in round 2 includes itself.
63
+ */
64
+ export type FrostParticipantId = string;
65
+ export interface FrostStartRequest {
66
+ /** TDIP DID whose surface key is being signed for. */
67
+ readonly did: string;
68
+ /** Stable id of the surface key (matches `SurfaceKey.keyId`). */
69
+ readonly surfaceKey: string;
70
+ readonly scheme: FrostScheme;
71
+ /** Canonical preimage bytes — surface module canonicalised. */
72
+ readonly preimage: Uint8Array;
73
+ /** Optional context tag for the audit log. */
74
+ readonly purpose?: string;
75
+ }
76
+ export interface FrostStartResult {
77
+ readonly sessionId: string;
78
+ /** Unix-ms timestamp when this session is dropped. */
79
+ readonly expiresAt: number;
80
+ /** Set of co-signers the node will coordinate. Includes this device. */
81
+ readonly participants: readonly FrostParticipantId[];
82
+ }
83
+ export interface FrostCommitRequest {
84
+ readonly sessionId: string;
85
+ /** RFC 9591 commitment bundle `(D_i, E_i)` produced device-side,
86
+ * serialized as opaque bytes. The node only forwards/aggregates. */
87
+ readonly deviceCommitment: Uint8Array;
88
+ }
89
+ export interface FrostCommitResult {
90
+ readonly sessionId: string;
91
+ readonly state: FrostSessionState;
92
+ }
93
+ export interface FrostChallenge {
94
+ readonly sessionId: string;
95
+ readonly state: FrostSessionState;
96
+ /** Aggregated group commitment `R = Σ D_i + ρ_i·E_i`, opaque bytes. */
97
+ readonly groupCommitment: Uint8Array;
98
+ /** Final signer set chosen for this round (subset of `participants`). */
99
+ readonly signerSet: readonly FrostParticipantId[];
100
+ /** Lagrange coefficient λ_i for *this device*, encoded as scalar bytes
101
+ * (curve-dependent: 32 bytes for Ed25519, 32 bytes for secp256k1). */
102
+ readonly lambda: Uint8Array;
103
+ }
104
+ export interface FrostRespondRequest {
105
+ readonly sessionId: string;
106
+ /** Device's signature share `z_i`, opaque bytes. */
107
+ readonly deviceShare: Uint8Array;
108
+ }
109
+ export interface FrostRespondResult {
110
+ readonly sessionId: string;
111
+ readonly state: FrostSessionState;
112
+ }
113
+ export interface FrostFinalizeResult {
114
+ readonly sessionId: string;
115
+ readonly state: FrostSessionState;
116
+ /** Aggregated signature, wire-format. 64 bytes for Ed25519, 64-65 for
117
+ * secp256k1 (sans recovery byte; surface module appends `v` if
118
+ * needed by recomputing it). Set when `state === 'finalized'`. */
119
+ readonly signature?: Uint8Array;
120
+ }
121
+ export interface FrostCoordinator {
122
+ start(req: FrostStartRequest): Promise<FrostStartResult>;
123
+ commit(req: FrostCommitRequest): Promise<FrostCommitResult>;
124
+ awaitChallenge(sessionId: string): Promise<FrostChallenge>;
125
+ respond(req: FrostRespondRequest): Promise<FrostRespondResult>;
126
+ finalize(sessionId: string): Promise<FrostFinalizeResult>;
127
+ abort(sessionId: string, reason?: string): Promise<void>;
128
+ }
129
+ /**
130
+ * Device-side share-holder. Produced by the passkey-unwrap layer; the
131
+ * FROST drivers don't care how the share was obtained, only that the
132
+ * holder can produce a commitment and a response on demand.
133
+ */
134
+ export interface FrostDeviceShareHolder {
135
+ readonly scheme: FrostScheme;
136
+ /** Round 1 — produce `(D_i, E_i)` commitment bytes. */
137
+ commit(): Promise<Uint8Array>;
138
+ /** Round 3 — produce `z_i` from the round-2 challenge bundle. */
139
+ respond(args: {
140
+ readonly preimage: Uint8Array;
141
+ readonly groupCommitment: Uint8Array;
142
+ readonly signerSet: readonly FrostParticipantId[];
143
+ readonly lambda: Uint8Array;
144
+ }): Promise<Uint8Array>;
145
+ /** Best-effort wipe of any in-memory secret material. */
146
+ dispose?(): void;
147
+ }
148
+ //# sourceMappingURL=coordinator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../../src/custody/frost/coordinator.ts"],"names":[],"mappings":"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"}