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,78 @@
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 { surfaceKeyId } from "../surface-key-id.js";
20
+ export function frostSecp256k1Driver(opts) {
21
+ return {
22
+ id: 'frost-secp256k1',
23
+ async sign(req) {
24
+ if (req.scheme !== 'secp256k1') {
25
+ throw new Error(`frost-secp256k1 driver cannot sign scheme '${req.scheme}'`);
26
+ }
27
+ const holder = await opts.resolveShareHolder(req);
28
+ if (holder.scheme !== 'secp256k1') {
29
+ throw new Error(`share-holder scheme mismatch: expected secp256k1, got ${holder.scheme}`);
30
+ }
31
+ let sessionId;
32
+ try {
33
+ const started = await opts.coordinator.start({
34
+ did: req.did.toString(),
35
+ surfaceKey: surfaceKeyId(req.surfaceKey),
36
+ scheme: 'secp256k1',
37
+ preimage: req.preimage,
38
+ ...(req.purpose !== undefined ? { purpose: req.purpose } : {}),
39
+ });
40
+ sessionId = started.sessionId;
41
+ const deviceCommitment = await holder.commit();
42
+ await opts.coordinator.commit({ sessionId, deviceCommitment });
43
+ const challenge = await opts.coordinator.awaitChallenge(sessionId);
44
+ if (challenge.state !== 'committed') {
45
+ throw new Error(`frost round in unexpected state: ${challenge.state}`);
46
+ }
47
+ const deviceShare = await holder.respond({
48
+ preimage: req.preimage,
49
+ groupCommitment: challenge.groupCommitment,
50
+ signerSet: challenge.signerSet,
51
+ lambda: challenge.lambda,
52
+ });
53
+ await opts.coordinator.respond({ sessionId, deviceShare });
54
+ const finalized = await opts.coordinator.finalize(sessionId);
55
+ if (finalized.state !== 'finalized' || !finalized.signature) {
56
+ throw new Error(`frost-secp256k1 finalize returned state=${finalized.state}`);
57
+ }
58
+ const len = finalized.signature.length;
59
+ if (len !== 64 && len !== 65) {
60
+ throw new Error(`frost-secp256k1 signature has wrong length: ${len}`);
61
+ }
62
+ return { signatures: [finalized.signature] };
63
+ }
64
+ catch (err) {
65
+ if (sessionId !== undefined) {
66
+ await opts.coordinator
67
+ .abort(sessionId, err instanceof Error ? err.message : 'unknown')
68
+ .catch(() => undefined);
69
+ }
70
+ throw err;
71
+ }
72
+ finally {
73
+ holder.dispose?.();
74
+ }
75
+ },
76
+ };
77
+ }
78
+ //# sourceMappingURL=secp256k1-driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secp256k1-driver.js","sourceRoot":"","sources":["../../../src/custody/frost/secp256k1-driver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export { internalMpcDriver } from './internal-mpc.js';
2
+ export type { InternalMpcOptions } from './internal-mpc.js';
3
+ export * from './frost/index.js';
4
+ export * from './mldsa/index.js';
5
+ export * from './passkey-share/index.js';
6
+ export { surfaceKeyId } from './surface-key-id.js';
7
+ export type { PairingPort, PairingState, PairingStartRequest, PairingStartResult, PairingPollResult, PairingClaimRequest, PairingClaimResult, PairingFinalizeRequest, PairingFinalizeResult, PasskeyAssertion, VerificationMethod, PairingHttpConfig, } from './pairing/index.js';
8
+ export { PairingHttpAdapter, PairingHttpError } from './pairing/index.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/custody/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAG5D,cAAc,kBAAkB,CAAC;AAGjC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,0BAA0B,CAAC;AAGzC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,YAAY,EACV,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,11 @@
1
+ export { internalMpcDriver } from "./internal-mpc.js";
2
+ // ── FROST device drivers (M5) ──
3
+ export * from "./frost/index.js";
4
+ // ── ML-DSA-65 driver + coordinator (M5) ──
5
+ export * from "./mldsa/index.js";
6
+ // ── Passkey share-unwrap (M5) ──
7
+ export * from "./passkey-share/index.js";
8
+ // ── SurfaceKey wire identifier ──
9
+ export { surfaceKeyId } from "./surface-key-id.js";
10
+ export { PairingHttpAdapter, PairingHttpError } from "./pairing/index.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/custody/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGtD,kCAAkC;AAClC,cAAc,kBAAkB,CAAC;AAEjC,4CAA4C;AAC5C,cAAc,kBAAkB,CAAC;AAEjC,kCAAkC;AAClC,cAAc,0BAA0B,CAAC;AAEzC,mCAAmC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAgBnD,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * In-memory 2-of-3 MPC stub. Stand-in for the real Shamir/threshold
3
+ * implementation that lands in M2 alongside the Tenzro Cortex TEE driver.
4
+ *
5
+ * Returns deterministic mock signatures so tests can assert behavior without
6
+ * pulling in real crypto in M1.
7
+ */
8
+ import type { SigningDriver } from '../types/signing-driver.js';
9
+ export interface InternalMpcOptions {
10
+ /** Fail every signing call; used in tests. */
11
+ readonly failAll?: boolean;
12
+ }
13
+ export declare function internalMpcDriver(opts?: InternalMpcOptions): SigningDriver;
14
+ //# sourceMappingURL=internal-mpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-mpc.d.ts","sourceRoot":"","sources":["../../src/custody/internal-mpc.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAiC,MAAM,4BAA4B,CAAC;AAE/F,MAAM,WAAW,kBAAkB;IACjC,8CAA8C;IAC9C,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,kBAAuB,GAAG,aAAa,CAa9E"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * In-memory 2-of-3 MPC stub. Stand-in for the real Shamir/threshold
3
+ * implementation that lands in M2 alongside the Tenzro Cortex TEE driver.
4
+ *
5
+ * Returns deterministic mock signatures so tests can assert behavior without
6
+ * pulling in real crypto in M1.
7
+ */
8
+ export function internalMpcDriver(opts = {}) {
9
+ return {
10
+ id: 'internal-mpc',
11
+ async sign(req) {
12
+ if (opts.failAll)
13
+ throw new Error('signing rejected by policy');
14
+ const sigCount = req.scheme === 'ed25519+ml-dsa-65' ? 2 : 1;
15
+ const signatures = [];
16
+ for (let i = 0; i < sigCount; i++) {
17
+ signatures.push(deterministic(req.preimage, req.scheme, i));
18
+ }
19
+ return { signatures };
20
+ },
21
+ };
22
+ }
23
+ function deterministic(preimage, scheme, leg) {
24
+ // secp256k1 sigs are 65 bytes on the wire (r||s||v). Ed25519 sigs are 64.
25
+ // ML-DSA-65 sigs are 3293 bytes. The mock matches these shapes so the
26
+ // surface modules can do real wire-format serialization in tests.
27
+ const len = scheme === 'ed25519+ml-dsa-65' && leg === 1 ? 3293 : scheme === 'secp256k1' ? 65 : 64;
28
+ const out = new Uint8Array(len);
29
+ const tag = new TextEncoder().encode(`${scheme}:${leg}:`);
30
+ for (let i = 0; i < len; i++) {
31
+ out[i] =
32
+ ((preimage[i % preimage.length] ?? 0) ^ (tag[i % tag.length] ?? 0) ^ ((i + leg) * 17)) & 0xff;
33
+ }
34
+ // Force a valid yParity (0 or 1) on the trailing v byte for secp256k1, so
35
+ // the EVM surface's `splitSignature` accepts it.
36
+ if (scheme === 'secp256k1')
37
+ out[64] = leg & 0x01;
38
+ return out;
39
+ }
40
+ //# sourceMappingURL=internal-mpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-mpc.js","sourceRoot":"","sources":["../../src/custody/internal-mpc.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,MAAM,UAAU,iBAAiB,CAAC,OAA2B,EAAE;IAC7D,OAAO;QACL,EAAE,EAAE,cAAc;QAClB,KAAK,CAAC,IAAI,CAAC,GAAmB;YAC5B,IAAI,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAChE,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,KAAK,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,MAAM,UAAU,GAAiB,EAAE,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO,EAAE,UAAU,EAAE,CAAC;QACxB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,QAAoB,EAAE,MAAc,EAAE,GAAW;IACtE,0EAA0E;IAC1E,sEAAsE;IACtE,kEAAkE;IAClE,MAAM,GAAG,GAAG,MAAM,KAAK,mBAAmB,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClG,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC;IAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,GAAG,CAAC,CAAC,CAAC;YACJ,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IAClG,CAAC;IACD,0EAA0E;IAC1E,iDAAiD;IACjD,IAAI,MAAM,KAAK,WAAW;QAAE,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;IACjD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * MlDsaCoordinator — wallet-side view of ML-DSA-65 (FIPS 204 / Dilithium)
3
+ * signing the node hosts at `/wallet/mldsa/*`. As of 2026-04, the leg is
4
+ * single-party in the node TEE (DESIGN.md §4.3.4 + §11). Once threshold
5
+ * ML-DSA matures (NIST IR 8214B / FROST-PQ), the same port surface
6
+ * gains a round-coordinated mode and `capabilities()` advertises
7
+ * `'threshold'`.
8
+ *
9
+ * Tenzro endpoints (Tenzro implements; wallet kernel only consumes):
10
+ *
11
+ * 1. `capabilities()`
12
+ * → `GET /wallet/mldsa/capabilities`
13
+ * Response: `{mode: 'tee-only' | 'threshold', publicKey?}` —
14
+ * lets the wallet know whether device round-coordination is
15
+ * required. While `mode === 'tee-only'`, the device sends only
16
+ * the preimage and receives the full signature.
17
+ *
18
+ * 2. `sign({did, surfaceKey, preimage, purpose?})`
19
+ * → `POST /wallet/mldsa/sign`
20
+ * TEE-only path. Response: `{signature}` — 3293 bytes wire-format.
21
+ * Latency: dominated by ML-DSA-65 sign cost in the TEE (~ ms).
22
+ *
23
+ * 3. `startRound({did, surfaceKey, preimage, purpose?})`
24
+ * → `POST /wallet/mldsa/start-round` (threshold mode only)
25
+ * `commit({sessionId, deviceCommitment})`
26
+ * → `POST /wallet/mldsa/commit` (threshold mode only)
27
+ * `respond({sessionId, deviceShare})`
28
+ * → `POST /wallet/mldsa/respond` (threshold mode only)
29
+ * `finalize({sessionId})`
30
+ * → `POST /wallet/mldsa/finalize` (threshold mode only)
31
+ *
32
+ * These mirror the FROST coordinator surface and only become
33
+ * callable once `capabilities().mode === 'threshold'`. Until
34
+ * then, calling them must throw `MlDsaThresholdUnavailable`.
35
+ *
36
+ * Browser-clean: `fetch` only.
37
+ */
38
+ export type MlDsaMode = 'tee-only' | 'threshold';
39
+ export interface MlDsaCapabilities {
40
+ readonly mode: MlDsaMode;
41
+ /** Multibase-encoded ML-DSA-65 public key, when bound to a DID. */
42
+ readonly publicKey?: string;
43
+ }
44
+ export interface MlDsaSignRequest {
45
+ readonly did: string;
46
+ readonly surfaceKey: string;
47
+ readonly preimage: Uint8Array;
48
+ readonly purpose?: string;
49
+ }
50
+ export interface MlDsaSignResult {
51
+ /** ML-DSA-65 signature, 3293 bytes wire-format. */
52
+ readonly signature: Uint8Array;
53
+ }
54
+ export declare class MlDsaThresholdUnavailable extends Error {
55
+ constructor();
56
+ }
57
+ export interface MlDsaCoordinator {
58
+ /** Read which mode the node is operating in. Cheap; cache-friendly. */
59
+ capabilities(): Promise<MlDsaCapabilities>;
60
+ /** TEE-only sign. Mode-agnostic — the node hosts both internally. */
61
+ sign(req: MlDsaSignRequest): Promise<MlDsaSignResult>;
62
+ }
63
+ //# sourceMappingURL=coordinator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../../src/custody/mldsa/coordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,mEAAmE;IACnE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,mDAAmD;IACnD,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;CAChC;AAED,qBAAa,yBAA0B,SAAQ,KAAK;;CAKnD;AAED,MAAM,WAAW,gBAAgB;IAC/B,uEAAuE;IACvE,YAAY,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC3C,qEAAqE;IACrE,IAAI,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CACvD"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * MlDsaCoordinator — wallet-side view of ML-DSA-65 (FIPS 204 / Dilithium)
3
+ * signing the node hosts at `/wallet/mldsa/*`. As of 2026-04, the leg is
4
+ * single-party in the node TEE (DESIGN.md §4.3.4 + §11). Once threshold
5
+ * ML-DSA matures (NIST IR 8214B / FROST-PQ), the same port surface
6
+ * gains a round-coordinated mode and `capabilities()` advertises
7
+ * `'threshold'`.
8
+ *
9
+ * Tenzro endpoints (Tenzro implements; wallet kernel only consumes):
10
+ *
11
+ * 1. `capabilities()`
12
+ * → `GET /wallet/mldsa/capabilities`
13
+ * Response: `{mode: 'tee-only' | 'threshold', publicKey?}` —
14
+ * lets the wallet know whether device round-coordination is
15
+ * required. While `mode === 'tee-only'`, the device sends only
16
+ * the preimage and receives the full signature.
17
+ *
18
+ * 2. `sign({did, surfaceKey, preimage, purpose?})`
19
+ * → `POST /wallet/mldsa/sign`
20
+ * TEE-only path. Response: `{signature}` — 3293 bytes wire-format.
21
+ * Latency: dominated by ML-DSA-65 sign cost in the TEE (~ ms).
22
+ *
23
+ * 3. `startRound({did, surfaceKey, preimage, purpose?})`
24
+ * → `POST /wallet/mldsa/start-round` (threshold mode only)
25
+ * `commit({sessionId, deviceCommitment})`
26
+ * → `POST /wallet/mldsa/commit` (threshold mode only)
27
+ * `respond({sessionId, deviceShare})`
28
+ * → `POST /wallet/mldsa/respond` (threshold mode only)
29
+ * `finalize({sessionId})`
30
+ * → `POST /wallet/mldsa/finalize` (threshold mode only)
31
+ *
32
+ * These mirror the FROST coordinator surface and only become
33
+ * callable once `capabilities().mode === 'threshold'`. Until
34
+ * then, calling them must throw `MlDsaThresholdUnavailable`.
35
+ *
36
+ * Browser-clean: `fetch` only.
37
+ */
38
+ export class MlDsaThresholdUnavailable extends Error {
39
+ constructor() {
40
+ super('threshold ML-DSA-65 unavailable: node advertises tee-only mode (DESIGN.md §11)');
41
+ this.name = 'MlDsaThresholdUnavailable';
42
+ }
43
+ }
44
+ //# sourceMappingURL=coordinator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coordinator.js","sourceRoot":"","sources":["../../../src/custody/mldsa/coordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAsBH,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAClD;QACE,KAAK,CAAC,gFAAgF,CAAC,CAAC;QACxF,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC1C,CAAC;CACF"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Threshold-aware ML-DSA-65 driver.
3
+ *
4
+ * As of 2026-04 this is functionally TEE-only (single party at the
5
+ * node), since no audited threshold ML-DSA-65 exists. The driver
6
+ * exposes the eventual-threshold shape today so callers don't have
7
+ * to re-wire when the node flips `capabilities().mode` to
8
+ * `'threshold'`.
9
+ *
10
+ * Use directly only for *non-hybrid* ML-DSA surfaces (rare; reserved
11
+ * for ML-DSA-only audit attestations). For Tenzro-native txs use
12
+ * `hybridEd25519MlDsaDriver` which composes this with the FROST-Ed25519
13
+ * leg.
14
+ *
15
+ * Returns one 3293-byte ML-DSA-65 signature.
16
+ */
17
+ import type { SigningDriver } from '../../types/signing-driver.js';
18
+ import type { MlDsaCoordinator } from './coordinator.js';
19
+ export interface ThresholdMlDsaOptions {
20
+ readonly coordinator: MlDsaCoordinator;
21
+ }
22
+ export declare function thresholdMlDsaDriver(opts: ThresholdMlDsaOptions): SigningDriver;
23
+ //# sourceMappingURL=driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../../src/custody/mldsa/driver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAiC,MAAM,+BAA+B,CAAC;AAElG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC;CACxC;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,qBAAqB,GAAG,aAAa,CA0B/E"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Threshold-aware ML-DSA-65 driver.
3
+ *
4
+ * As of 2026-04 this is functionally TEE-only (single party at the
5
+ * node), since no audited threshold ML-DSA-65 exists. The driver
6
+ * exposes the eventual-threshold shape today so callers don't have
7
+ * to re-wire when the node flips `capabilities().mode` to
8
+ * `'threshold'`.
9
+ *
10
+ * Use directly only for *non-hybrid* ML-DSA surfaces (rare; reserved
11
+ * for ML-DSA-only audit attestations). For Tenzro-native txs use
12
+ * `hybridEd25519MlDsaDriver` which composes this with the FROST-Ed25519
13
+ * leg.
14
+ *
15
+ * Returns one 3293-byte ML-DSA-65 signature.
16
+ */
17
+ import { surfaceKeyId } from "../surface-key-id.js";
18
+ export function thresholdMlDsaDriver(opts) {
19
+ return {
20
+ // Reuse `tenzro-tee` until the node flips to threshold mode; the
21
+ // surface modules already classify this id as "node-attested".
22
+ id: 'tenzro-tee',
23
+ async sign(req) {
24
+ // Standalone ML-DSA-65 isn't a `SigningScheme` value today, but
25
+ // the hybrid driver invokes the coordinator directly — so reach
26
+ // this driver only via misconfiguration. Guard explicitly.
27
+ if (req.scheme !== 'ed25519+ml-dsa-65') {
28
+ throw new Error(`threshold-mldsa driver expected scheme ed25519+ml-dsa-65, got '${req.scheme}'`);
29
+ }
30
+ const { signature } = await opts.coordinator.sign({
31
+ did: req.did.toString(),
32
+ surfaceKey: surfaceKeyId(req.surfaceKey),
33
+ preimage: req.preimage,
34
+ ...(req.purpose !== undefined ? { purpose: req.purpose } : {}),
35
+ });
36
+ if (signature.length !== 3293) {
37
+ throw new Error(`ml-dsa-65 signature wrong length: ${signature.length}`);
38
+ }
39
+ return { signatures: [signature] };
40
+ },
41
+ };
42
+ }
43
+ //# sourceMappingURL=driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver.js","sourceRoot":"","sources":["../../../src/custody/mldsa/driver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAOpD,MAAM,UAAU,oBAAoB,CAAC,IAA2B;IAC9D,OAAO;QACL,iEAAiE;QACjE,+DAA+D;QAC/D,EAAE,EAAE,YAAY;QAChB,KAAK,CAAC,IAAI,CAAC,GAAmB;YAC5B,gEAAgE;YAChE,gEAAgE;YAChE,2DAA2D;YAC3D,IAAI,GAAG,CAAC,MAAM,KAAK,mBAAmB,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CACb,kEAAkE,GAAG,CAAC,MAAM,GAAG,CAChF,CAAC;YACJ,CAAC;YACD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;gBAChD,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE;gBACvB,UAAU,EAAE,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC;gBACxC,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/D,CAAC,CAAC;YACH,IAAI,SAAS,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,qCAAqC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3E,CAAC;YACD,OAAO,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;QACrC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * MlDsaHttpAdapter — fetch-based driver against a Tenzro RPC node's
3
+ * `/wallet/mldsa/*` endpoints. Implements the `MlDsaCoordinator` port;
4
+ * mirrors `FrostHttpAdapter` and `PairingHttpAdapter` for shape.
5
+ *
6
+ * Wire shape per `coordinator.ts` header + DESIGN.md §4.3.4 / §11:
7
+ *
8
+ * GET /wallet/mldsa/capabilities
9
+ * reply = { mode: 'tee-only' | 'threshold', public_key? }
10
+ *
11
+ * POST /wallet/mldsa/sign
12
+ * body = { did, surface_key, preimage_b64, purpose? }
13
+ * reply = { signature_b64 } // 3293-byte ML-DSA-65 signature
14
+ *
15
+ * As of 2026-05, the node operates in `tee-only` mode (NIST IR 8214C —
16
+ * no audited threshold ML-DSA-65 yet). The threshold-mode round-coord
17
+ * endpoints (`start-round` / `commit` / `respond` / `finalize`) are not
18
+ * surfaced through this adapter because the `MlDsaCoordinator` port
19
+ * itself doesn't expose them yet — they'll land alongside the port
20
+ * extension when threshold ML-DSA matures.
21
+ *
22
+ * Bytes on the wire are standard base64 (RFC 4648 §4) — same convention
23
+ * the FROST + Canton adapters use. The `_b64` suffix on field names is
24
+ * load-bearing.
25
+ *
26
+ * The `/wallet/mldsa/*` endpoints are pre-auth in the same sense as the
27
+ * other `/wallet/*` routes: ML-DSA signing is authenticated by the
28
+ * caller's session (DPoP-bound bearer for M2-style sessions, passkey
29
+ * assertion for M5). Threading auth is the host app's job — the adapter
30
+ * accepts an optional `headers` callback for it.
31
+ *
32
+ * Browser-clean: `fetch` only.
33
+ */
34
+ import type { MlDsaCapabilities, MlDsaCoordinator, MlDsaSignRequest, MlDsaSignResult } from './coordinator.js';
35
+ export interface MlDsaHttpConfig {
36
+ /** Base URL of the Tenzro RPC node, e.g. `https://rpc.tenzro.network`. */
37
+ readonly baseUrl: string;
38
+ /** Optional `fetch` override for tests. */
39
+ readonly fetch?: typeof fetch;
40
+ /**
41
+ * Per-request headers (e.g. `{ Authorization: 'DPoP …', DPoP: '…' }`).
42
+ * Called for every request — let the host rotate proofs as needed.
43
+ * Returning `{}` is fine; the adapter sets `content-type` on writes.
44
+ */
45
+ readonly headers?: () => Promise<Record<string, string>> | Record<string, string>;
46
+ }
47
+ export declare class MlDsaHttpError extends Error {
48
+ readonly status: number;
49
+ readonly url: string;
50
+ readonly body: string;
51
+ constructor(status: number, url: string, body: string);
52
+ }
53
+ export declare class MlDsaHttpAdapter implements MlDsaCoordinator {
54
+ #private;
55
+ constructor(cfg: MlDsaHttpConfig);
56
+ capabilities(): Promise<MlDsaCapabilities>;
57
+ sign(req: MlDsaSignRequest): Promise<MlDsaSignResult>;
58
+ }
59
+ //# sourceMappingURL=http-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-adapter.d.ts","sourceRoot":"","sources":["../../../src/custody/mldsa/http-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAEhB,gBAAgB,EAChB,eAAe,EAChB,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;AAWD,qBAAa,gBAAiB,YAAW,gBAAgB;;gBAG3C,GAAG,EAAE,eAAe;IAI1B,YAAY,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAQ1C,IAAI,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;CA8B5D"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * MlDsaHttpAdapter — fetch-based driver against a Tenzro RPC node's
3
+ * `/wallet/mldsa/*` endpoints. Implements the `MlDsaCoordinator` port;
4
+ * mirrors `FrostHttpAdapter` and `PairingHttpAdapter` for shape.
5
+ *
6
+ * Wire shape per `coordinator.ts` header + DESIGN.md §4.3.4 / §11:
7
+ *
8
+ * GET /wallet/mldsa/capabilities
9
+ * reply = { mode: 'tee-only' | 'threshold', public_key? }
10
+ *
11
+ * POST /wallet/mldsa/sign
12
+ * body = { did, surface_key, preimage_b64, purpose? }
13
+ * reply = { signature_b64 } // 3293-byte ML-DSA-65 signature
14
+ *
15
+ * As of 2026-05, the node operates in `tee-only` mode (NIST IR 8214C —
16
+ * no audited threshold ML-DSA-65 yet). The threshold-mode round-coord
17
+ * endpoints (`start-round` / `commit` / `respond` / `finalize`) are not
18
+ * surfaced through this adapter because the `MlDsaCoordinator` port
19
+ * itself doesn't expose them yet — they'll land alongside the port
20
+ * extension when threshold ML-DSA matures.
21
+ *
22
+ * Bytes on the wire are standard base64 (RFC 4648 §4) — same convention
23
+ * the FROST + Canton adapters use. The `_b64` suffix on field names is
24
+ * load-bearing.
25
+ *
26
+ * The `/wallet/mldsa/*` endpoints are pre-auth in the same sense as the
27
+ * other `/wallet/*` routes: ML-DSA signing is authenticated by the
28
+ * caller's session (DPoP-bound bearer for M2-style sessions, passkey
29
+ * assertion for M5). Threading auth is the host app's job — the adapter
30
+ * accepts an optional `headers` callback for it.
31
+ *
32
+ * Browser-clean: `fetch` only.
33
+ */
34
+ export class MlDsaHttpError extends Error {
35
+ status;
36
+ url;
37
+ body;
38
+ constructor(status, url, body) {
39
+ super(`mldsa http ${status} on ${url}: ${body.length > 200 ? body.slice(0, 200) + '…' : body}`);
40
+ this.status = status;
41
+ this.url = url;
42
+ this.body = body;
43
+ this.name = 'MlDsaHttpError';
44
+ }
45
+ }
46
+ export class MlDsaHttpAdapter {
47
+ #cfg;
48
+ constructor(cfg) {
49
+ this.#cfg = cfg;
50
+ }
51
+ async capabilities() {
52
+ const raw = await this.#request('GET', 'capabilities');
53
+ return {
54
+ mode: raw.mode,
55
+ ...(raw.public_key !== undefined ? { publicKey: raw.public_key } : {}),
56
+ };
57
+ }
58
+ async sign(req) {
59
+ const raw = await this.#request('POST', 'sign', {
60
+ did: req.did,
61
+ surface_key: req.surfaceKey,
62
+ preimage_b64: bytesToBase64(req.preimage),
63
+ ...(req.purpose !== undefined ? { purpose: req.purpose } : {}),
64
+ });
65
+ return { signature: base64ToBytes(raw.signature_b64) };
66
+ }
67
+ // --- internals ---
68
+ async #request(method, action, body) {
69
+ const f = this.#cfg.fetch ?? globalThis.fetch;
70
+ const url = this.#cfg.baseUrl.replace(/\/+$/, '') + `/wallet/mldsa/${action}`;
71
+ const extraHeaders = this.#cfg.headers ? await this.#cfg.headers() : {};
72
+ const headers = { ...extraHeaders };
73
+ if (method === 'POST')
74
+ headers['content-type'] = 'application/json';
75
+ const res = await f(url, {
76
+ method,
77
+ headers,
78
+ ...(method === 'POST' ? { body: JSON.stringify(body ?? {}) } : {}),
79
+ });
80
+ if (!res.ok) {
81
+ const text = await res.text().catch(() => '');
82
+ throw new MlDsaHttpError(res.status, url, text);
83
+ }
84
+ if (res.status === 204)
85
+ return undefined;
86
+ return (await res.json());
87
+ }
88
+ }
89
+ // ─── base64 helpers ───────────────────────────────────────────────────────
90
+ function bytesToBase64(bytes) {
91
+ let s = '';
92
+ for (let i = 0; i < bytes.length; i++)
93
+ s += String.fromCharCode(bytes[i]);
94
+ return btoa(s);
95
+ }
96
+ function base64ToBytes(b64) {
97
+ const bin = atob(b64);
98
+ const out = new Uint8Array(bin.length);
99
+ for (let i = 0; i < bin.length; i++)
100
+ out[i] = bin.charCodeAt(i);
101
+ return out;
102
+ }
103
+ //# sourceMappingURL=http-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-adapter.js","sourceRoot":"","sources":["../../../src/custody/mldsa/http-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export type { MlDsaCoordinator, MlDsaCapabilities, MlDsaMode, MlDsaSignRequest, MlDsaSignResult, } from './coordinator.js';
2
+ export { MlDsaThresholdUnavailable } from './coordinator.js';
3
+ export { thresholdMlDsaDriver } from './driver.js';
4
+ export type { ThresholdMlDsaOptions } from './driver.js';
5
+ export { MlDsaHttpAdapter, MlDsaHttpError } from './http-adapter.js';
6
+ export type { MlDsaHttpConfig } from './http-adapter.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/custody/mldsa/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,gBAAgB,EAChB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACrE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { MlDsaThresholdUnavailable } from "./coordinator.js";
2
+ export { thresholdMlDsaDriver } from "./driver.js";
3
+ export { MlDsaHttpAdapter, MlDsaHttpError } from "./http-adapter.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/custody/mldsa/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * PairingHttpAdapter — fetch-based driver against a Tenzro RPC node's
3
+ * `/wallet/pairing/*` endpoints. Browser-clean (fetch + JSON only).
4
+ *
5
+ * The `/wallet/*` endpoints are pre-auth: the QR pairing flow runs before
6
+ * the new device has any session, and the originally-paired device's auth
7
+ * is asserted by the passkey assertion in the body, not by an
8
+ * `Authorization` header. So unlike the Canton HTTP helpers, no token
9
+ * provider is threaded through.
10
+ *
11
+ * Wire shape per DESIGN.md §4.3.6:
12
+ * POST /wallet/pairing/start → { session_id, pairing_url, expires_at }
13
+ * POST /wallet/pairing/claim → { session_id, state }
14
+ * POST /wallet/pairing/poll → { session_id, state, claimed_public_key?, reason? }
15
+ * POST /wallet/pairing/finalize → { session_id, verification_methods, threshold }
16
+ * POST /wallet/pairing/cancel → 204 No Content
17
+ */
18
+ import type { PairingClaimRequest, PairingClaimResult, PairingFinalizeRequest, PairingFinalizeResult, PairingPollResult, PairingPort, PairingStartRequest, PairingStartResult } from './port.js';
19
+ export interface PairingHttpConfig {
20
+ /** Base URL of the Tenzro RPC node, e.g. `https://rpc.tenzro.network`. */
21
+ readonly baseUrl: string;
22
+ /** Optional `fetch` override for tests. */
23
+ readonly fetch?: typeof fetch;
24
+ }
25
+ export declare class PairingHttpError extends Error {
26
+ readonly status: number;
27
+ readonly url: string;
28
+ readonly body: string;
29
+ constructor(status: number, url: string, body: string);
30
+ }
31
+ export declare class PairingHttpAdapter implements PairingPort {
32
+ #private;
33
+ constructor(cfg: PairingHttpConfig);
34
+ start(req: PairingStartRequest): Promise<PairingStartResult>;
35
+ claim(req: PairingClaimRequest): Promise<PairingClaimResult>;
36
+ poll(sessionId: string): Promise<PairingPollResult>;
37
+ finalize(req: PairingFinalizeRequest): Promise<PairingFinalizeResult>;
38
+ cancel(sessionId: string): Promise<void>;
39
+ }
40
+ //# sourceMappingURL=http-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-adapter.d.ts","sourceRoot":"","sources":["../../../src/custody/pairing/http-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAGnB,MAAM,WAAW,CAAC;AAEnB,MAAM,WAAW,iBAAiB;IAChC,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,2CAA2C;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CAC/B;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IAEvC,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;CAOxB;AA0BD,qBAAa,kBAAmB,YAAW,WAAW;;gBAGxC,GAAG,EAAE,iBAAiB;IAI5B,KAAK,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAY5D,KAAK,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAiB5D,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAYnD,QAAQ,CAAC,GAAG,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAuBrE,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAqB/C"}