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,58 @@
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 {};
58
+ //# sourceMappingURL=coordinator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordinator.js","sourceRoot":"","sources":["../../../src/custody/frost/coordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * FROST-Ed25519 device driver. Implements `SigningDriver` by walking
3
+ * the FROST round protocol against a `FrostCoordinator` (Tenzro-hosted)
4
+ * and a `FrostDeviceShareHolder` (passkey-unwrapped, device-local).
5
+ *
6
+ * Endpoint contracts the coordinator wraps are documented on
7
+ * `FrostCoordinator`. This file only orchestrates the rounds; it
8
+ * produces *no* secret material itself.
9
+ *
10
+ * Use this driver for:
11
+ * - Tenzro-native ed25519 surfaces (non-hybrid).
12
+ * - SVM (Solana) surfaces.
13
+ * - The Ed25519 leg of a hybrid signature (composed via
14
+ * `hybrid-driver.ts`).
15
+ *
16
+ * Returns a single 64-byte Ed25519 signature.
17
+ */
18
+ import type { SigningDriver, SigningRequest } from '../../types/signing-driver.js';
19
+ import type { FrostCoordinator, FrostDeviceShareHolder } from './coordinator.js';
20
+ export interface FrostEd25519Options {
21
+ readonly coordinator: FrostCoordinator;
22
+ /**
23
+ * Resolves the device-share holder for a given signing request. Lets
24
+ * the host plug in passkey-unwrap (PRF/largeBlob) or escrow-envelope
25
+ * unwrap without the driver knowing which.
26
+ */
27
+ readonly resolveShareHolder: (req: SigningRequest) => Promise<FrostDeviceShareHolder>;
28
+ }
29
+ export declare function frostEd25519Driver(opts: FrostEd25519Options): SigningDriver;
30
+ //# sourceMappingURL=ed25519-driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ed25519-driver.d.ts","sourceRoot":"","sources":["../../../src/custody/frost/ed25519-driver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAiB,MAAM,+BAA+B,CAAC;AAElG,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAEjF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC;IACvC;;;;OAIG;IACH,QAAQ,CAAC,kBAAkB,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;CACvF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,GAAG,aAAa,CA8D3E"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * FROST-Ed25519 device driver. Implements `SigningDriver` by walking
3
+ * the FROST round protocol against a `FrostCoordinator` (Tenzro-hosted)
4
+ * and a `FrostDeviceShareHolder` (passkey-unwrapped, device-local).
5
+ *
6
+ * Endpoint contracts the coordinator wraps are documented on
7
+ * `FrostCoordinator`. This file only orchestrates the rounds; it
8
+ * produces *no* secret material itself.
9
+ *
10
+ * Use this driver for:
11
+ * - Tenzro-native ed25519 surfaces (non-hybrid).
12
+ * - SVM (Solana) surfaces.
13
+ * - The Ed25519 leg of a hybrid signature (composed via
14
+ * `hybrid-driver.ts`).
15
+ *
16
+ * Returns a single 64-byte Ed25519 signature.
17
+ */
18
+ import { surfaceKeyId } from "../surface-key-id.js";
19
+ export function frostEd25519Driver(opts) {
20
+ return {
21
+ id: 'frost-ed25519',
22
+ async sign(req) {
23
+ if (req.scheme !== 'ed25519' && req.scheme !== 'ed25519+ml-dsa-65') {
24
+ throw new Error(`frost-ed25519 driver cannot sign scheme '${req.scheme}'`);
25
+ }
26
+ const holder = await opts.resolveShareHolder(req);
27
+ if (holder.scheme !== 'ed25519') {
28
+ throw new Error(`share-holder scheme mismatch: expected ed25519, got ${holder.scheme}`);
29
+ }
30
+ let sessionId;
31
+ try {
32
+ const started = await opts.coordinator.start({
33
+ did: req.did.toString(),
34
+ surfaceKey: surfaceKeyId(req.surfaceKey),
35
+ scheme: 'ed25519',
36
+ preimage: req.preimage,
37
+ ...(req.purpose !== undefined ? { purpose: req.purpose } : {}),
38
+ });
39
+ sessionId = started.sessionId;
40
+ const deviceCommitment = await holder.commit();
41
+ await opts.coordinator.commit({ sessionId, deviceCommitment });
42
+ const challenge = await opts.coordinator.awaitChallenge(sessionId);
43
+ if (challenge.state !== 'committed') {
44
+ throw new Error(`frost round in unexpected state: ${challenge.state}`);
45
+ }
46
+ const deviceShare = await holder.respond({
47
+ preimage: req.preimage,
48
+ groupCommitment: challenge.groupCommitment,
49
+ signerSet: challenge.signerSet,
50
+ lambda: challenge.lambda,
51
+ });
52
+ await opts.coordinator.respond({ sessionId, deviceShare });
53
+ const finalized = await opts.coordinator.finalize(sessionId);
54
+ if (finalized.state !== 'finalized' || !finalized.signature) {
55
+ throw new Error(`frost-ed25519 finalize returned state=${finalized.state}`);
56
+ }
57
+ if (finalized.signature.length !== 64) {
58
+ throw new Error(`frost-ed25519 signature has wrong length: ${finalized.signature.length}`);
59
+ }
60
+ return { signatures: [finalized.signature] };
61
+ }
62
+ catch (err) {
63
+ if (sessionId !== undefined) {
64
+ await opts.coordinator
65
+ .abort(sessionId, err instanceof Error ? err.message : 'unknown')
66
+ .catch(() => undefined);
67
+ }
68
+ throw err;
69
+ }
70
+ finally {
71
+ holder.dispose?.();
72
+ }
73
+ },
74
+ };
75
+ }
76
+ //# sourceMappingURL=ed25519-driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ed25519-driver.js","sourceRoot":"","sources":["../../../src/custody/frost/ed25519-driver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * FrostHttpAdapter — fetch-based driver against a Tenzro RPC node's
3
+ * `/wallet/frost/{ed25519,secp256k1}/*` endpoints. Implements the
4
+ * `FrostCoordinator` port; mirrors `PairingHttpAdapter` for shape.
5
+ *
6
+ * Wire shape per `coordinator.ts` header + DESIGN.md §10.2:
7
+ *
8
+ * POST /wallet/frost/{ed25519|secp256k1}/start
9
+ * body = { did, surface_key, scheme, preimage_b64, purpose? }
10
+ * reply = { session_id, expires_at, participants[] }
11
+ *
12
+ * POST /wallet/frost/{ed25519|secp256k1}/commit
13
+ * body = { session_id, device_commitment_b64 }
14
+ * reply = { session_id, state }
15
+ *
16
+ * POST /wallet/frost/{ed25519|secp256k1}/await-challenge
17
+ * body = { session_id } (long-poll)
18
+ * reply = { session_id, state, group_commitment_b64,
19
+ * signer_set[], lambda_b64 }
20
+ *
21
+ * POST /wallet/frost/{ed25519|secp256k1}/respond
22
+ * body = { session_id, device_share_b64 }
23
+ * reply = { session_id, state }
24
+ *
25
+ * POST /wallet/frost/{ed25519|secp256k1}/finalize
26
+ * body = { session_id }
27
+ * reply = { session_id, state, signature_b64? }
28
+ *
29
+ * POST /wallet/frost/{ed25519|secp256k1}/abort
30
+ * body = { session_id, reason? }
31
+ * reply = 204 No Content (idempotent)
32
+ *
33
+ * Bytes on the wire are standard base64 (RFC 4648 §4) — same convention
34
+ * the Canton ledger HTTP layer uses. The `_b64` suffix on field names is
35
+ * load-bearing: it tells reviewers and the node what to expect without
36
+ * having to read the schema. Decoding/encoding happens at this boundary
37
+ * only; the port surface is `Uint8Array`.
38
+ *
39
+ * The `/wallet/*` endpoints are pre-auth: the FROST round itself is
40
+ * authenticated by the device share + node-TEE quorum, not by an
41
+ * `Authorization` header. Auth on `/wallet/frost/start` is by the
42
+ * caller's session (DPoP-bound bearer for M2-style sessions, passkey
43
+ * assertion for M5). Threading that auth is the host app's job — the
44
+ * adapter accepts an optional `headers` callback for it.
45
+ *
46
+ * Browser-clean: `fetch` only. No Node-specific globals.
47
+ */
48
+ import type { FrostChallenge, FrostCommitRequest, FrostCommitResult, FrostCoordinator, FrostFinalizeResult, FrostRespondRequest, FrostRespondResult, FrostStartRequest, FrostStartResult } from './coordinator.js';
49
+ export interface FrostHttpConfig {
50
+ /** Base URL of the Tenzro RPC node, e.g. `https://rpc.tenzro.network`. */
51
+ readonly baseUrl: string;
52
+ /** Optional `fetch` override for tests. */
53
+ readonly fetch?: typeof fetch;
54
+ /**
55
+ * Per-request headers (e.g. `{ Authorization: 'DPoP …', DPoP: '…' }`).
56
+ * Called for every request — let the host rotate proofs as needed.
57
+ * Returning `{}` is fine; the adapter always sets `content-type`.
58
+ */
59
+ readonly headers?: () => Promise<Record<string, string>> | Record<string, string>;
60
+ }
61
+ export declare class FrostHttpError extends Error {
62
+ readonly status: number;
63
+ readonly url: string;
64
+ readonly body: string;
65
+ constructor(status: number, url: string, body: string);
66
+ }
67
+ export declare class FrostHttpAdapter implements FrostCoordinator {
68
+ #private;
69
+ constructor(cfg: FrostHttpConfig);
70
+ start(req: FrostStartRequest): Promise<FrostStartResult>;
71
+ commit(req: FrostCommitRequest): Promise<FrostCommitResult>;
72
+ awaitChallenge(sessionId: string): Promise<FrostChallenge>;
73
+ respond(req: FrostRespondRequest): Promise<FrostRespondResult>;
74
+ finalize(sessionId: string): Promise<FrostFinalizeResult>;
75
+ abort(sessionId: string, reason?: string): Promise<void>;
76
+ }
77
+ //# sourceMappingURL=http-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-adapter.d.ts","sourceRoot":"","sources":["../../../src/custody/frost/http-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EAEnB,mBAAmB,EACnB,kBAAkB,EAGlB,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,eAAe;IAC9B,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,2CAA2C;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnF;AAED,qBAAa,cAAe,SAAQ,KAAK;IAErC,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAFZ,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM;CAKxB;AAoBD,qBAAa,gBAAiB,YAAW,gBAAgB;;gBAK3C,GAAG,EAAE,eAAe;IAI1B,KAAK,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAgBxD,MAAM,CAAC,GAAG,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAQ3D,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAa1D,OAAO,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQ9D,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAWzD,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAiC/D"}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * FrostHttpAdapter — fetch-based driver against a Tenzro RPC node's
3
+ * `/wallet/frost/{ed25519,secp256k1}/*` endpoints. Implements the
4
+ * `FrostCoordinator` port; mirrors `PairingHttpAdapter` for shape.
5
+ *
6
+ * Wire shape per `coordinator.ts` header + DESIGN.md §10.2:
7
+ *
8
+ * POST /wallet/frost/{ed25519|secp256k1}/start
9
+ * body = { did, surface_key, scheme, preimage_b64, purpose? }
10
+ * reply = { session_id, expires_at, participants[] }
11
+ *
12
+ * POST /wallet/frost/{ed25519|secp256k1}/commit
13
+ * body = { session_id, device_commitment_b64 }
14
+ * reply = { session_id, state }
15
+ *
16
+ * POST /wallet/frost/{ed25519|secp256k1}/await-challenge
17
+ * body = { session_id } (long-poll)
18
+ * reply = { session_id, state, group_commitment_b64,
19
+ * signer_set[], lambda_b64 }
20
+ *
21
+ * POST /wallet/frost/{ed25519|secp256k1}/respond
22
+ * body = { session_id, device_share_b64 }
23
+ * reply = { session_id, state }
24
+ *
25
+ * POST /wallet/frost/{ed25519|secp256k1}/finalize
26
+ * body = { session_id }
27
+ * reply = { session_id, state, signature_b64? }
28
+ *
29
+ * POST /wallet/frost/{ed25519|secp256k1}/abort
30
+ * body = { session_id, reason? }
31
+ * reply = 204 No Content (idempotent)
32
+ *
33
+ * Bytes on the wire are standard base64 (RFC 4648 §4) — same convention
34
+ * the Canton ledger HTTP layer uses. The `_b64` suffix on field names is
35
+ * load-bearing: it tells reviewers and the node what to expect without
36
+ * having to read the schema. Decoding/encoding happens at this boundary
37
+ * only; the port surface is `Uint8Array`.
38
+ *
39
+ * The `/wallet/*` endpoints are pre-auth: the FROST round itself is
40
+ * authenticated by the device share + node-TEE quorum, not by an
41
+ * `Authorization` header. Auth on `/wallet/frost/start` is by the
42
+ * caller's session (DPoP-bound bearer for M2-style sessions, passkey
43
+ * assertion for M5). Threading that auth is the host app's job — the
44
+ * adapter accepts an optional `headers` callback for it.
45
+ *
46
+ * Browser-clean: `fetch` only. No Node-specific globals.
47
+ */
48
+ export class FrostHttpError extends Error {
49
+ status;
50
+ url;
51
+ body;
52
+ constructor(status, url, body) {
53
+ super(`frost http ${status} on ${url}: ${body.length > 200 ? body.slice(0, 200) + '…' : body}`);
54
+ this.status = status;
55
+ this.url = url;
56
+ this.body = body;
57
+ this.name = 'FrostHttpError';
58
+ }
59
+ }
60
+ export class FrostHttpAdapter {
61
+ #cfg;
62
+ /** Pinned at `start()` so subsequent calls hit the right curve path. */
63
+ #scheme;
64
+ constructor(cfg) {
65
+ this.#cfg = cfg;
66
+ }
67
+ async start(req) {
68
+ this.#scheme = req.scheme;
69
+ const raw = await this.#post('start', {
70
+ did: req.did,
71
+ surface_key: req.surfaceKey,
72
+ scheme: req.scheme,
73
+ preimage_b64: bytesToBase64(req.preimage),
74
+ ...(req.purpose !== undefined ? { purpose: req.purpose } : {}),
75
+ });
76
+ return {
77
+ sessionId: raw.session_id,
78
+ expiresAt: raw.expires_at,
79
+ participants: raw.participants,
80
+ };
81
+ }
82
+ async commit(req) {
83
+ const raw = await this.#post('commit', {
84
+ session_id: req.sessionId,
85
+ device_commitment_b64: bytesToBase64(req.deviceCommitment),
86
+ });
87
+ return { sessionId: raw.session_id, state: raw.state };
88
+ }
89
+ async awaitChallenge(sessionId) {
90
+ const raw = await this.#post('await-challenge', {
91
+ session_id: sessionId,
92
+ });
93
+ return {
94
+ sessionId: raw.session_id,
95
+ state: raw.state,
96
+ groupCommitment: base64ToBytes(raw.group_commitment_b64),
97
+ signerSet: raw.signer_set,
98
+ lambda: base64ToBytes(raw.lambda_b64),
99
+ };
100
+ }
101
+ async respond(req) {
102
+ const raw = await this.#post('respond', {
103
+ session_id: req.sessionId,
104
+ device_share_b64: bytesToBase64(req.deviceShare),
105
+ });
106
+ return { sessionId: raw.session_id, state: raw.state };
107
+ }
108
+ async finalize(sessionId) {
109
+ const raw = await this.#post('finalize', {
110
+ session_id: sessionId,
111
+ });
112
+ return {
113
+ sessionId: raw.session_id,
114
+ state: raw.state,
115
+ ...(raw.signature_b64 !== undefined ? { signature: base64ToBytes(raw.signature_b64) } : {}),
116
+ };
117
+ }
118
+ async abort(sessionId, reason) {
119
+ await this.#post('abort', {
120
+ session_id: sessionId,
121
+ ...(reason !== undefined ? { reason } : {}),
122
+ });
123
+ }
124
+ // --- internals ---
125
+ /**
126
+ * The curve segment of the path is selected by the scheme pinned at
127
+ * `start()`. Calling any other method before `start()` is a programmer
128
+ * error — the FROST drivers always start before commit/respond.
129
+ */
130
+ async #post(action, body) {
131
+ if (!this.#scheme) {
132
+ throw new Error(`FrostHttpAdapter: cannot call ${action} before start() pins the scheme`);
133
+ }
134
+ const f = this.#cfg.fetch ?? globalThis.fetch;
135
+ const url = this.#cfg.baseUrl.replace(/\/+$/, '') + `/wallet/frost/${this.#scheme}/${action}`;
136
+ const extraHeaders = this.#cfg.headers ? await this.#cfg.headers() : {};
137
+ const res = await f(url, {
138
+ method: 'POST',
139
+ headers: { 'content-type': 'application/json', ...extraHeaders },
140
+ body: JSON.stringify(body),
141
+ });
142
+ if (!res.ok) {
143
+ const text = await res.text().catch(() => '');
144
+ throw new FrostHttpError(res.status, url, text);
145
+ }
146
+ if (res.status === 204)
147
+ return undefined;
148
+ return (await res.json());
149
+ }
150
+ }
151
+ // ─── base64 helpers ───────────────────────────────────────────────────────
152
+ // Local to this file (matches the htlc-escrow-adapter pattern). Standard
153
+ // base64, not base64url — the Tenzro RPC layer uses the same encoding the
154
+ // Canton JSON Ledger API does.
155
+ function bytesToBase64(bytes) {
156
+ let s = '';
157
+ for (let i = 0; i < bytes.length; i++)
158
+ s += String.fromCharCode(bytes[i]);
159
+ return btoa(s);
160
+ }
161
+ function base64ToBytes(b64) {
162
+ const bin = atob(b64);
163
+ const out = new Uint8Array(bin.length);
164
+ for (let i = 0; i < bin.length; i++)
165
+ out[i] = bin.charCodeAt(i);
166
+ return out;
167
+ }
168
+ //# sourceMappingURL=http-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-adapter.js","sourceRoot":"","sources":["../../../src/custody/frost/http-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Hybrid (Ed25519 + ML-DSA-65) signing driver for Tenzro-native
3
+ * surfaces. Per DESIGN.md §4.3.4 + §11, the Ed25519 leg is
4
+ * threshold-signed across the passkey quorum (FROST-Ed25519); the
5
+ * ML-DSA-65 leg is supplied by the node TEE alone — there is no
6
+ * audited threshold ML-DSA implementation as of 2026-04, so the leg
7
+ * is single-party until NIST IR 8214B + FROST-PQ mature.
8
+ *
9
+ * Tenzro endpoints:
10
+ *
11
+ * - The Ed25519 leg uses `FrostCoordinator` against
12
+ * `/wallet/frost/ed25519/*` (see `coordinator.ts`).
13
+ * - The ML-DSA-65 leg uses `MlDsaCoordinator` against
14
+ * `/wallet/mldsa/*` (see `../mldsa/coordinator.ts`).
15
+ *
16
+ * Returns a 2-element `signatures` array:
17
+ * [0] = 64-byte FROST-Ed25519 signature
18
+ * [1] = 3293-byte ML-DSA-65 signature
19
+ *
20
+ * The hybrid driver stitches the two legs in parallel — the Ed25519
21
+ * threshold round and the ML-DSA TEE call run concurrently, so
22
+ * latency is `max(frost, mldsa)`, not the sum.
23
+ *
24
+ * When the underlying ML-DSA coordinator advertises threshold
25
+ * capability (see DESIGN.md §11), this driver swaps over without the
26
+ * caller noticing, as long as the response stays a single 3293-byte
27
+ * signature.
28
+ */
29
+ import type { SigningDriver } from '../../types/signing-driver.js';
30
+ import type { MlDsaCoordinator } from '../mldsa/coordinator.js';
31
+ import { type FrostEd25519Options } from './ed25519-driver.js';
32
+ export interface HybridDriverOptions extends FrostEd25519Options {
33
+ /** ML-DSA-65 coordinator. Today: TEE-only. Future: threshold. */
34
+ readonly mlDsaCoordinator: MlDsaCoordinator;
35
+ }
36
+ export declare function hybridEd25519MlDsaDriver(opts: HybridDriverOptions): SigningDriver;
37
+ //# sourceMappingURL=hybrid-driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hybrid-driver.d.ts","sourceRoot":"","sources":["../../../src/custody/frost/hybrid-driver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAiC,MAAM,+BAA+B,CAAC;AAClG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,EAAE,KAAK,mBAAmB,EAAsB,MAAM,qBAAqB,CAAC;AAEnF,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB;IAC9D,iEAAiE;IACjE,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;CAC7C;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,mBAAmB,GAAG,aAAa,CAkCjF"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Hybrid (Ed25519 + ML-DSA-65) signing driver for Tenzro-native
3
+ * surfaces. Per DESIGN.md §4.3.4 + §11, the Ed25519 leg is
4
+ * threshold-signed across the passkey quorum (FROST-Ed25519); the
5
+ * ML-DSA-65 leg is supplied by the node TEE alone — there is no
6
+ * audited threshold ML-DSA implementation as of 2026-04, so the leg
7
+ * is single-party until NIST IR 8214B + FROST-PQ mature.
8
+ *
9
+ * Tenzro endpoints:
10
+ *
11
+ * - The Ed25519 leg uses `FrostCoordinator` against
12
+ * `/wallet/frost/ed25519/*` (see `coordinator.ts`).
13
+ * - The ML-DSA-65 leg uses `MlDsaCoordinator` against
14
+ * `/wallet/mldsa/*` (see `../mldsa/coordinator.ts`).
15
+ *
16
+ * Returns a 2-element `signatures` array:
17
+ * [0] = 64-byte FROST-Ed25519 signature
18
+ * [1] = 3293-byte ML-DSA-65 signature
19
+ *
20
+ * The hybrid driver stitches the two legs in parallel — the Ed25519
21
+ * threshold round and the ML-DSA TEE call run concurrently, so
22
+ * latency is `max(frost, mldsa)`, not the sum.
23
+ *
24
+ * When the underlying ML-DSA coordinator advertises threshold
25
+ * capability (see DESIGN.md §11), this driver swaps over without the
26
+ * caller noticing, as long as the response stays a single 3293-byte
27
+ * signature.
28
+ */
29
+ import { surfaceKeyId } from "../surface-key-id.js";
30
+ import { frostEd25519Driver } from "./ed25519-driver.js";
31
+ export function hybridEd25519MlDsaDriver(opts) {
32
+ const ed25519 = frostEd25519Driver(opts);
33
+ return {
34
+ id: 'hybrid-ed25519-mldsa',
35
+ async sign(req) {
36
+ if (req.scheme !== 'ed25519+ml-dsa-65') {
37
+ throw new Error(`hybrid driver cannot sign scheme '${req.scheme}'`);
38
+ }
39
+ // Run both legs in parallel — neither depends on the other.
40
+ const [ed, ml] = await Promise.all([
41
+ ed25519.sign(req),
42
+ opts.mlDsaCoordinator.sign({
43
+ did: req.did.toString(),
44
+ surfaceKey: surfaceKeyId(req.surfaceKey),
45
+ preimage: req.preimage,
46
+ ...(req.purpose !== undefined ? { purpose: req.purpose } : {}),
47
+ }),
48
+ ]);
49
+ const edSig = ed.signatures[0];
50
+ if (!edSig || edSig.length !== 64) {
51
+ throw new Error('hybrid: ed25519 leg returned wrong-length signature');
52
+ }
53
+ if (ml.signature.length !== 3293) {
54
+ throw new Error(`hybrid: ml-dsa leg returned wrong-length signature: ${ml.signature.length}`);
55
+ }
56
+ return { signatures: [edSig, ml.signature] };
57
+ },
58
+ };
59
+ }
60
+ //# sourceMappingURL=hybrid-driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hybrid-driver.js","sourceRoot":"","sources":["../../../src/custody/frost/hybrid-driver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAA4B,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAOnF,MAAM,UAAU,wBAAwB,CAAC,IAAyB;IAChE,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAEzC,OAAO;QACL,EAAE,EAAE,sBAAsB;QAC1B,KAAK,CAAC,IAAI,CAAC,GAAmB;YAC5B,IAAI,GAAG,CAAC,MAAM,KAAK,mBAAmB,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CAAC,qCAAqC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;YACtE,CAAC;YAED,4DAA4D;YAC5D,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACjC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;gBACjB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;oBACzB,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE;oBACvB,UAAU,EAAE,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC;oBACxC,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC/D,CAAC;aACH,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACzE,CAAC;YACD,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CACb,uDAAuD,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,CAC7E,CAAC;YACJ,CAAC;YAED,OAAO,EAAE,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/C,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ export type { FrostCoordinator, FrostScheme, FrostSessionState, FrostParticipantId, FrostStartRequest, FrostStartResult, FrostCommitRequest, FrostCommitResult, FrostChallenge, FrostRespondRequest, FrostRespondResult, FrostFinalizeResult, FrostDeviceShareHolder, } from './coordinator.js';
2
+ export { frostEd25519Driver } from './ed25519-driver.js';
3
+ export type { FrostEd25519Options } from './ed25519-driver.js';
4
+ export { frostSecp256k1Driver } from './secp256k1-driver.js';
5
+ export type { FrostSecp256k1Options } from './secp256k1-driver.js';
6
+ export { hybridEd25519MlDsaDriver } from './hybrid-driver.js';
7
+ export type { HybridDriverOptions } from './hybrid-driver.js';
8
+ export { FrostHttpAdapter, FrostHttpError } from './http-adapter.js';
9
+ export type { FrostHttpConfig } from './http-adapter.js';
10
+ export { FrostBackendUnavailable, composeFrostBackend, frostBackendUnavailable, } from './backend.js';
11
+ export type { FrostBackend } from './backend.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/custody/frost/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACrE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { frostEd25519Driver } from "./ed25519-driver.js";
2
+ export { frostSecp256k1Driver } from "./secp256k1-driver.js";
3
+ export { hybridEd25519MlDsaDriver } from "./hybrid-driver.js";
4
+ export { FrostHttpAdapter, FrostHttpError } from "./http-adapter.js";
5
+ export { FrostBackendUnavailable, composeFrostBackend, frostBackendUnavailable, } from "./backend.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/custody/frost/index.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAErE,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * FROST-secp256k1 device driver. Implements `SigningDriver` by walking
3
+ * the FROST round protocol against a `FrostCoordinator` (Tenzro-hosted)
4
+ * and a `FrostDeviceShareHolder` (passkey-unwrapped, device-local).
5
+ *
6
+ * Endpoint contracts the coordinator wraps are documented on
7
+ * `FrostCoordinator`. This file only orchestrates the rounds; it
8
+ * produces *no* secret material itself.
9
+ *
10
+ * Use this driver for EVM surfaces (ECDSA over secp256k1). The node
11
+ * returns a 64-byte `r||s` aggregate; the EVM surface module is
12
+ * responsible for recovering or appending the `v` byte to make a
13
+ * 65-byte tx signature. This is consistent with how internal-mpc
14
+ * stubs the curve today.
15
+ *
16
+ * Returns a single signature (64 or 65 bytes — see DESIGN.md §4.3.4
17
+ * for the convention each surface uses).
18
+ */
19
+ import type { SigningDriver, SigningRequest } from '../../types/signing-driver.js';
20
+ import type { FrostCoordinator, FrostDeviceShareHolder } from './coordinator.js';
21
+ export interface FrostSecp256k1Options {
22
+ readonly coordinator: FrostCoordinator;
23
+ readonly resolveShareHolder: (req: SigningRequest) => Promise<FrostDeviceShareHolder>;
24
+ }
25
+ export declare function frostSecp256k1Driver(opts: FrostSecp256k1Options): SigningDriver;
26
+ //# sourceMappingURL=secp256k1-driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secp256k1-driver.d.ts","sourceRoot":"","sources":["../../../src/custody/frost/secp256k1-driver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAiB,MAAM,+BAA+B,CAAC;AAElG,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAEjF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC;IACvC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;CACvF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,qBAAqB,GAAG,aAAa,CA6D/E"}