@antseed/node 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 (443) hide show
  1. package/README.md +411 -0
  2. package/contracts/AntseedEscrow.sol +310 -0
  3. package/contracts/MockUSDC.sol +64 -0
  4. package/contracts/README.md +102 -0
  5. package/dist/config/encryption.d.ts +17 -0
  6. package/dist/config/encryption.d.ts.map +1 -0
  7. package/dist/config/encryption.js +49 -0
  8. package/dist/config/encryption.js.map +1 -0
  9. package/dist/config/plugin-config-manager.d.ts +31 -0
  10. package/dist/config/plugin-config-manager.d.ts.map +1 -0
  11. package/dist/config/plugin-config-manager.js +135 -0
  12. package/dist/config/plugin-config-manager.js.map +1 -0
  13. package/dist/config/plugin-loader.d.ts +25 -0
  14. package/dist/config/plugin-loader.d.ts.map +1 -0
  15. package/dist/config/plugin-loader.js +64 -0
  16. package/dist/config/plugin-loader.js.map +1 -0
  17. package/dist/discovery/announcer.d.ts +44 -0
  18. package/dist/discovery/announcer.d.ts.map +1 -0
  19. package/dist/discovery/announcer.js +129 -0
  20. package/dist/discovery/announcer.js.map +1 -0
  21. package/dist/discovery/bootstrap.d.ts +13 -0
  22. package/dist/discovery/bootstrap.d.ts.map +1 -0
  23. package/dist/discovery/bootstrap.js +39 -0
  24. package/dist/discovery/bootstrap.js.map +1 -0
  25. package/dist/discovery/default-metadata-resolver.d.ts +16 -0
  26. package/dist/discovery/default-metadata-resolver.d.ts.map +1 -0
  27. package/dist/discovery/default-metadata-resolver.js +16 -0
  28. package/dist/discovery/default-metadata-resolver.js.map +1 -0
  29. package/dist/discovery/dht-health.d.ts +38 -0
  30. package/dist/discovery/dht-health.d.ts.map +1 -0
  31. package/dist/discovery/dht-health.js +101 -0
  32. package/dist/discovery/dht-health.js.map +1 -0
  33. package/dist/discovery/dht-node.d.ts +34 -0
  34. package/dist/discovery/dht-node.d.ts.map +1 -0
  35. package/dist/discovery/dht-node.js +168 -0
  36. package/dist/discovery/dht-node.js.map +1 -0
  37. package/dist/discovery/http-metadata-resolver.d.ts +15 -0
  38. package/dist/discovery/http-metadata-resolver.d.ts.map +1 -0
  39. package/dist/discovery/http-metadata-resolver.js +33 -0
  40. package/dist/discovery/http-metadata-resolver.js.map +1 -0
  41. package/dist/discovery/index.d.ts +16 -0
  42. package/dist/discovery/index.d.ts.map +1 -0
  43. package/dist/discovery/index.js +15 -0
  44. package/dist/discovery/index.js.map +1 -0
  45. package/dist/discovery/metadata-codec.d.ts +22 -0
  46. package/dist/discovery/metadata-codec.d.ts.map +1 -0
  47. package/dist/discovery/metadata-codec.js +390 -0
  48. package/dist/discovery/metadata-codec.js.map +1 -0
  49. package/dist/discovery/metadata-resolver.d.ts +9 -0
  50. package/dist/discovery/metadata-resolver.d.ts.map +1 -0
  51. package/dist/discovery/metadata-resolver.js +2 -0
  52. package/dist/discovery/metadata-resolver.js.map +1 -0
  53. package/dist/discovery/metadata-server.d.ts +16 -0
  54. package/dist/discovery/metadata-server.d.ts.map +1 -0
  55. package/dist/discovery/metadata-server.js +59 -0
  56. package/dist/discovery/metadata-server.js.map +1 -0
  57. package/dist/discovery/metadata-validator.d.ts +12 -0
  58. package/dist/discovery/metadata-validator.d.ts.map +1 -0
  59. package/dist/discovery/metadata-validator.js +153 -0
  60. package/dist/discovery/metadata-validator.js.map +1 -0
  61. package/dist/discovery/peer-lookup.d.ts +26 -0
  62. package/dist/discovery/peer-lookup.d.ts.map +1 -0
  63. package/dist/discovery/peer-lookup.js +86 -0
  64. package/dist/discovery/peer-lookup.js.map +1 -0
  65. package/dist/discovery/peer-metadata.d.ts +31 -0
  66. package/dist/discovery/peer-metadata.d.ts.map +1 -0
  67. package/dist/discovery/peer-metadata.js +2 -0
  68. package/dist/discovery/peer-metadata.js.map +1 -0
  69. package/dist/discovery/peer-selector.d.ts +33 -0
  70. package/dist/discovery/peer-selector.d.ts.map +1 -0
  71. package/dist/discovery/peer-selector.js +80 -0
  72. package/dist/discovery/peer-selector.js.map +1 -0
  73. package/dist/discovery/profile-manager.d.ts +50 -0
  74. package/dist/discovery/profile-manager.d.ts.map +1 -0
  75. package/dist/discovery/profile-manager.js +105 -0
  76. package/dist/discovery/profile-manager.js.map +1 -0
  77. package/dist/discovery/profile-search.d.ts +27 -0
  78. package/dist/discovery/profile-search.d.ts.map +1 -0
  79. package/dist/discovery/profile-search.js +75 -0
  80. package/dist/discovery/profile-search.js.map +1 -0
  81. package/dist/discovery/reputation-verifier.d.ts +25 -0
  82. package/dist/discovery/reputation-verifier.d.ts.map +1 -0
  83. package/dist/discovery/reputation-verifier.js +27 -0
  84. package/dist/discovery/reputation-verifier.js.map +1 -0
  85. package/dist/index.d.ts +37 -0
  86. package/dist/index.d.ts.map +1 -0
  87. package/dist/index.js +32 -0
  88. package/dist/index.js.map +1 -0
  89. package/dist/interfaces/buyer-router.d.ts +21 -0
  90. package/dist/interfaces/buyer-router.d.ts.map +1 -0
  91. package/dist/interfaces/buyer-router.js +2 -0
  92. package/dist/interfaces/buyer-router.js.map +1 -0
  93. package/dist/interfaces/plugin.d.ts +31 -0
  94. package/dist/interfaces/plugin.d.ts.map +1 -0
  95. package/dist/interfaces/plugin.js +2 -0
  96. package/dist/interfaces/plugin.js.map +1 -0
  97. package/dist/interfaces/seller-provider.d.ts +69 -0
  98. package/dist/interfaces/seller-provider.d.ts.map +1 -0
  99. package/dist/interfaces/seller-provider.js +2 -0
  100. package/dist/interfaces/seller-provider.js.map +1 -0
  101. package/dist/metering/index.d.ts +7 -0
  102. package/dist/metering/index.d.ts.map +1 -0
  103. package/dist/metering/index.js +7 -0
  104. package/dist/metering/index.js.map +1 -0
  105. package/dist/metering/receipt-generator.d.ts +49 -0
  106. package/dist/metering/receipt-generator.d.ts.map +1 -0
  107. package/dist/metering/receipt-generator.js +74 -0
  108. package/dist/metering/receipt-generator.js.map +1 -0
  109. package/dist/metering/receipt-verifier.d.ts +52 -0
  110. package/dist/metering/receipt-verifier.d.ts.map +1 -0
  111. package/dist/metering/receipt-verifier.js +63 -0
  112. package/dist/metering/receipt-verifier.js.map +1 -0
  113. package/dist/metering/session-tracker.d.ts +59 -0
  114. package/dist/metering/session-tracker.d.ts.map +1 -0
  115. package/dist/metering/session-tracker.js +119 -0
  116. package/dist/metering/session-tracker.js.map +1 -0
  117. package/dist/metering/storage.d.ts +72 -0
  118. package/dist/metering/storage.d.ts.map +1 -0
  119. package/dist/metering/storage.js +446 -0
  120. package/dist/metering/storage.js.map +1 -0
  121. package/dist/metering/token-counter.d.ts +50 -0
  122. package/dist/metering/token-counter.d.ts.map +1 -0
  123. package/dist/metering/token-counter.js +96 -0
  124. package/dist/metering/token-counter.js.map +1 -0
  125. package/dist/metering/usage-aggregator.d.ts +46 -0
  126. package/dist/metering/usage-aggregator.d.ts.map +1 -0
  127. package/dist/metering/usage-aggregator.js +170 -0
  128. package/dist/metering/usage-aggregator.js.map +1 -0
  129. package/dist/node.d.ts +179 -0
  130. package/dist/node.d.ts.map +1 -0
  131. package/dist/node.js +1328 -0
  132. package/dist/node.js.map +1 -0
  133. package/dist/p2p/connection-auth.d.ts +35 -0
  134. package/dist/p2p/connection-auth.d.ts.map +1 -0
  135. package/dist/p2p/connection-auth.js +102 -0
  136. package/dist/p2p/connection-auth.js.map +1 -0
  137. package/dist/p2p/connection-manager.d.ts +101 -0
  138. package/dist/p2p/connection-manager.d.ts.map +1 -0
  139. package/dist/p2p/connection-manager.js +726 -0
  140. package/dist/p2p/connection-manager.js.map +1 -0
  141. package/dist/p2p/handshake.d.ts +47 -0
  142. package/dist/p2p/handshake.d.ts.map +1 -0
  143. package/dist/p2p/handshake.js +107 -0
  144. package/dist/p2p/handshake.js.map +1 -0
  145. package/dist/p2p/ice-config.d.ts +27 -0
  146. package/dist/p2p/ice-config.d.ts.map +1 -0
  147. package/dist/p2p/ice-config.js +43 -0
  148. package/dist/p2p/ice-config.js.map +1 -0
  149. package/dist/p2p/identity.d.ts +27 -0
  150. package/dist/p2p/identity.d.ts.map +1 -0
  151. package/dist/p2p/identity.js +76 -0
  152. package/dist/p2p/identity.js.map +1 -0
  153. package/dist/p2p/index.d.ts +12 -0
  154. package/dist/p2p/index.d.ts.map +1 -0
  155. package/dist/p2p/index.js +11 -0
  156. package/dist/p2p/index.js.map +1 -0
  157. package/dist/p2p/keepalive.d.ts +49 -0
  158. package/dist/p2p/keepalive.d.ts.map +1 -0
  159. package/dist/p2p/keepalive.js +93 -0
  160. package/dist/p2p/keepalive.js.map +1 -0
  161. package/dist/p2p/message-protocol.d.ts +50 -0
  162. package/dist/p2p/message-protocol.d.ts.map +1 -0
  163. package/dist/p2p/message-protocol.js +134 -0
  164. package/dist/p2p/message-protocol.js.map +1 -0
  165. package/dist/p2p/nat-traversal.d.ts +51 -0
  166. package/dist/p2p/nat-traversal.d.ts.map +1 -0
  167. package/dist/p2p/nat-traversal.js +135 -0
  168. package/dist/p2p/nat-traversal.js.map +1 -0
  169. package/dist/p2p/payment-codec.d.ts +20 -0
  170. package/dist/p2p/payment-codec.d.ts.map +1 -0
  171. package/dist/p2p/payment-codec.js +130 -0
  172. package/dist/p2p/payment-codec.js.map +1 -0
  173. package/dist/p2p/payment-mux.d.ts +49 -0
  174. package/dist/p2p/payment-mux.d.ts.map +1 -0
  175. package/dist/p2p/payment-mux.js +131 -0
  176. package/dist/p2p/payment-mux.js.map +1 -0
  177. package/dist/p2p/reconnect.d.ts +48 -0
  178. package/dist/p2p/reconnect.d.ts.map +1 -0
  179. package/dist/p2p/reconnect.js +89 -0
  180. package/dist/p2p/reconnect.js.map +1 -0
  181. package/dist/payments/balance-manager.d.ts +17 -0
  182. package/dist/payments/balance-manager.d.ts.map +1 -0
  183. package/dist/payments/balance-manager.js +54 -0
  184. package/dist/payments/balance-manager.js.map +1 -0
  185. package/dist/payments/buyer-payment-manager.d.ts +122 -0
  186. package/dist/payments/buyer-payment-manager.d.ts.map +1 -0
  187. package/dist/payments/buyer-payment-manager.js +280 -0
  188. package/dist/payments/buyer-payment-manager.js.map +1 -0
  189. package/dist/payments/disputes.d.ts +18 -0
  190. package/dist/payments/disputes.d.ts.map +1 -0
  191. package/dist/payments/disputes.js +47 -0
  192. package/dist/payments/disputes.js.map +1 -0
  193. package/dist/payments/evm/escrow-client.d.ts +61 -0
  194. package/dist/payments/evm/escrow-client.d.ts.map +1 -0
  195. package/dist/payments/evm/escrow-client.js +170 -0
  196. package/dist/payments/evm/escrow-client.js.map +1 -0
  197. package/dist/payments/evm/keypair.d.ts +21 -0
  198. package/dist/payments/evm/keypair.d.ts.map +1 -0
  199. package/dist/payments/evm/keypair.js +29 -0
  200. package/dist/payments/evm/keypair.js.map +1 -0
  201. package/dist/payments/evm/signatures.d.ts +11 -0
  202. package/dist/payments/evm/signatures.d.ts.map +1 -0
  203. package/dist/payments/evm/signatures.js +56 -0
  204. package/dist/payments/evm/signatures.js.map +1 -0
  205. package/dist/payments/evm/wallet.d.ts +5 -0
  206. package/dist/payments/evm/wallet.d.ts.map +1 -0
  207. package/dist/payments/evm/wallet.js +31 -0
  208. package/dist/payments/evm/wallet.js.map +1 -0
  209. package/dist/payments/index.d.ts +13 -0
  210. package/dist/payments/index.d.ts.map +1 -0
  211. package/dist/payments/index.js +14 -0
  212. package/dist/payments/index.js.map +1 -0
  213. package/dist/payments/settlement.d.ts +6 -0
  214. package/dist/payments/settlement.d.ts.map +1 -0
  215. package/dist/payments/settlement.js +25 -0
  216. package/dist/payments/settlement.js.map +1 -0
  217. package/dist/payments/types.d.ts +66 -0
  218. package/dist/payments/types.d.ts.map +1 -0
  219. package/dist/payments/types.js +2 -0
  220. package/dist/payments/types.js.map +1 -0
  221. package/dist/proxy/index.d.ts +4 -0
  222. package/dist/proxy/index.d.ts.map +1 -0
  223. package/dist/proxy/index.js +4 -0
  224. package/dist/proxy/index.js.map +1 -0
  225. package/dist/proxy/provider-detection.d.ts +20 -0
  226. package/dist/proxy/provider-detection.d.ts.map +1 -0
  227. package/dist/proxy/provider-detection.js +61 -0
  228. package/dist/proxy/provider-detection.js.map +1 -0
  229. package/dist/proxy/proxy-mux.d.ts +35 -0
  230. package/dist/proxy/proxy-mux.d.ts.map +1 -0
  231. package/dist/proxy/proxy-mux.js +137 -0
  232. package/dist/proxy/proxy-mux.js.map +1 -0
  233. package/dist/proxy/request-codec.d.ts +33 -0
  234. package/dist/proxy/request-codec.d.ts.map +1 -0
  235. package/dist/proxy/request-codec.js +238 -0
  236. package/dist/proxy/request-codec.js.map +1 -0
  237. package/dist/reputation/index.d.ts +7 -0
  238. package/dist/reputation/index.d.ts.map +1 -0
  239. package/dist/reputation/index.js +6 -0
  240. package/dist/reputation/index.js.map +1 -0
  241. package/dist/reputation/rating-manager.d.ts +20 -0
  242. package/dist/reputation/rating-manager.d.ts.map +1 -0
  243. package/dist/reputation/rating-manager.js +91 -0
  244. package/dist/reputation/rating-manager.js.map +1 -0
  245. package/dist/reputation/report-manager.d.ts +21 -0
  246. package/dist/reputation/report-manager.d.ts.map +1 -0
  247. package/dist/reputation/report-manager.js +70 -0
  248. package/dist/reputation/report-manager.js.map +1 -0
  249. package/dist/reputation/trust-engine.d.ts +36 -0
  250. package/dist/reputation/trust-engine.d.ts.map +1 -0
  251. package/dist/reputation/trust-engine.js +95 -0
  252. package/dist/reputation/trust-engine.js.map +1 -0
  253. package/dist/reputation/trust-score.d.ts +43 -0
  254. package/dist/reputation/trust-score.d.ts.map +1 -0
  255. package/dist/reputation/trust-score.js +34 -0
  256. package/dist/reputation/trust-score.js.map +1 -0
  257. package/dist/reputation/uptime-tracker.d.ts +51 -0
  258. package/dist/reputation/uptime-tracker.d.ts.map +1 -0
  259. package/dist/reputation/uptime-tracker.js +123 -0
  260. package/dist/reputation/uptime-tracker.js.map +1 -0
  261. package/dist/routing/default-router.d.ts +21 -0
  262. package/dist/routing/default-router.d.ts.map +1 -0
  263. package/dist/routing/default-router.js +60 -0
  264. package/dist/routing/default-router.js.map +1 -0
  265. package/dist/types/buyer.d.ts +36 -0
  266. package/dist/types/buyer.d.ts.map +1 -0
  267. package/dist/types/buyer.js +2 -0
  268. package/dist/types/buyer.js.map +1 -0
  269. package/dist/types/capability.d.ts +25 -0
  270. package/dist/types/capability.d.ts.map +1 -0
  271. package/dist/types/capability.js +2 -0
  272. package/dist/types/capability.js.map +1 -0
  273. package/dist/types/connection.d.ts +27 -0
  274. package/dist/types/connection.d.ts.map +1 -0
  275. package/dist/types/connection.js +11 -0
  276. package/dist/types/connection.js.map +1 -0
  277. package/dist/types/http.d.ts +19 -0
  278. package/dist/types/http.d.ts.map +1 -0
  279. package/dist/types/http.js +2 -0
  280. package/dist/types/http.js.map +1 -0
  281. package/dist/types/index.d.ts +15 -0
  282. package/dist/types/index.d.ts.map +1 -0
  283. package/dist/types/index.js +15 -0
  284. package/dist/types/index.js.map +1 -0
  285. package/dist/types/metering.d.ts +170 -0
  286. package/dist/types/metering.d.ts.map +1 -0
  287. package/dist/types/metering.js +2 -0
  288. package/dist/types/metering.js.map +1 -0
  289. package/dist/types/peer-profile.d.ts +24 -0
  290. package/dist/types/peer-profile.d.ts.map +1 -0
  291. package/dist/types/peer-profile.js +2 -0
  292. package/dist/types/peer-profile.js.map +1 -0
  293. package/dist/types/peer.d.ts +56 -0
  294. package/dist/types/peer.d.ts.map +1 -0
  295. package/dist/types/peer.js +11 -0
  296. package/dist/types/peer.js.map +1 -0
  297. package/dist/types/plugin-config.d.ts +31 -0
  298. package/dist/types/plugin-config.d.ts.map +1 -0
  299. package/dist/types/plugin-config.js +2 -0
  300. package/dist/types/plugin-config.js.map +1 -0
  301. package/dist/types/protocol.d.ts +141 -0
  302. package/dist/types/protocol.d.ts.map +1 -0
  303. package/dist/types/protocol.js +42 -0
  304. package/dist/types/protocol.js.map +1 -0
  305. package/dist/types/provider.d.ts +38 -0
  306. package/dist/types/provider.d.ts.map +1 -0
  307. package/dist/types/provider.js +11 -0
  308. package/dist/types/provider.js.map +1 -0
  309. package/dist/types/rating.d.ts +21 -0
  310. package/dist/types/rating.d.ts.map +1 -0
  311. package/dist/types/rating.js +2 -0
  312. package/dist/types/rating.js.map +1 -0
  313. package/dist/types/report.d.ts +20 -0
  314. package/dist/types/report.d.ts.map +1 -0
  315. package/dist/types/report.js +2 -0
  316. package/dist/types/report.js.map +1 -0
  317. package/dist/types/seller.d.ts +36 -0
  318. package/dist/types/seller.d.ts.map +1 -0
  319. package/dist/types/seller.js +2 -0
  320. package/dist/types/seller.js.map +1 -0
  321. package/dist/types/staking.d.ts +16 -0
  322. package/dist/types/staking.d.ts.map +1 -0
  323. package/dist/types/staking.js +6 -0
  324. package/dist/types/staking.js.map +1 -0
  325. package/dist/utils/debug.d.ts +4 -0
  326. package/dist/utils/debug.d.ts.map +1 -0
  327. package/dist/utils/debug.js +25 -0
  328. package/dist/utils/debug.js.map +1 -0
  329. package/dist/utils/hex.d.ts +3 -0
  330. package/dist/utils/hex.d.ts.map +1 -0
  331. package/dist/utils/hex.js +15 -0
  332. package/dist/utils/hex.js.map +1 -0
  333. package/package.json +62 -0
  334. package/scripts/ensure-node-native-modules.mjs +153 -0
  335. package/scripts/patch-ethers.js +44 -0
  336. package/src/config/encryption.test.ts +49 -0
  337. package/src/config/encryption.ts +53 -0
  338. package/src/config/plugin-config-manager.test.ts +92 -0
  339. package/src/config/plugin-config-manager.ts +153 -0
  340. package/src/config/plugin-loader.ts +90 -0
  341. package/src/discovery/announcer.ts +169 -0
  342. package/src/discovery/bootstrap.ts +57 -0
  343. package/src/discovery/default-metadata-resolver.ts +18 -0
  344. package/src/discovery/dht-health.ts +136 -0
  345. package/src/discovery/dht-node.ts +191 -0
  346. package/src/discovery/http-metadata-resolver.ts +47 -0
  347. package/src/discovery/index.ts +15 -0
  348. package/src/discovery/metadata-codec.ts +453 -0
  349. package/src/discovery/metadata-resolver.ts +7 -0
  350. package/src/discovery/metadata-server.ts +73 -0
  351. package/src/discovery/metadata-validator.ts +172 -0
  352. package/src/discovery/peer-lookup.ts +122 -0
  353. package/src/discovery/peer-metadata.ts +34 -0
  354. package/src/discovery/peer-selector.ts +134 -0
  355. package/src/discovery/profile-manager.ts +131 -0
  356. package/src/discovery/profile-search.ts +100 -0
  357. package/src/discovery/reputation-verifier.ts +54 -0
  358. package/src/index.ts +61 -0
  359. package/src/interfaces/buyer-router.ts +21 -0
  360. package/src/interfaces/plugin.ts +36 -0
  361. package/src/interfaces/seller-provider.ts +81 -0
  362. package/src/metering/index.ts +6 -0
  363. package/src/metering/receipt-generator.ts +105 -0
  364. package/src/metering/receipt-verifier.ts +102 -0
  365. package/src/metering/session-tracker.ts +145 -0
  366. package/src/metering/storage.ts +600 -0
  367. package/src/metering/token-counter.ts +127 -0
  368. package/src/metering/usage-aggregator.ts +236 -0
  369. package/src/node.ts +1698 -0
  370. package/src/p2p/connection-auth.ts +152 -0
  371. package/src/p2p/connection-manager.ts +916 -0
  372. package/src/p2p/handshake.ts +162 -0
  373. package/src/p2p/ice-config.ts +59 -0
  374. package/src/p2p/identity.ts +110 -0
  375. package/src/p2p/index.ts +11 -0
  376. package/src/p2p/keepalive.ts +118 -0
  377. package/src/p2p/message-protocol.ts +171 -0
  378. package/src/p2p/nat-traversal.ts +169 -0
  379. package/src/p2p/payment-codec.ts +165 -0
  380. package/src/p2p/payment-mux.ts +153 -0
  381. package/src/p2p/reconnect.ts +117 -0
  382. package/src/payments/balance-manager.ts +77 -0
  383. package/src/payments/buyer-payment-manager.ts +414 -0
  384. package/src/payments/disputes.ts +72 -0
  385. package/src/payments/evm/escrow-client.ts +263 -0
  386. package/src/payments/evm/keypair.ts +31 -0
  387. package/src/payments/evm/signatures.ts +103 -0
  388. package/src/payments/evm/wallet.ts +42 -0
  389. package/src/payments/index.ts +50 -0
  390. package/src/payments/settlement.ts +40 -0
  391. package/src/payments/types.ts +79 -0
  392. package/src/proxy/index.ts +3 -0
  393. package/src/proxy/provider-detection.ts +78 -0
  394. package/src/proxy/proxy-mux.ts +173 -0
  395. package/src/proxy/request-codec.ts +294 -0
  396. package/src/reputation/index.ts +6 -0
  397. package/src/reputation/rating-manager.ts +118 -0
  398. package/src/reputation/report-manager.ts +91 -0
  399. package/src/reputation/trust-engine.ts +120 -0
  400. package/src/reputation/trust-score.ts +74 -0
  401. package/src/reputation/uptime-tracker.ts +155 -0
  402. package/src/routing/default-router.ts +75 -0
  403. package/src/types/bittorrent-dht.d.ts +19 -0
  404. package/src/types/buyer.ts +37 -0
  405. package/src/types/capability.ts +34 -0
  406. package/src/types/connection.ts +29 -0
  407. package/src/types/http.ts +20 -0
  408. package/src/types/index.ts +14 -0
  409. package/src/types/metering.ts +175 -0
  410. package/src/types/nat-api.d.ts +29 -0
  411. package/src/types/peer-profile.ts +25 -0
  412. package/src/types/peer.ts +62 -0
  413. package/src/types/plugin-config.ts +31 -0
  414. package/src/types/protocol.ts +162 -0
  415. package/src/types/provider.ts +40 -0
  416. package/src/types/rating.ts +23 -0
  417. package/src/types/report.ts +30 -0
  418. package/src/types/seller.ts +38 -0
  419. package/src/types/staking.ts +23 -0
  420. package/src/utils/debug.ts +30 -0
  421. package/src/utils/hex.ts +14 -0
  422. package/tests/balance-manager.test.ts +156 -0
  423. package/tests/bootstrap.test.ts +108 -0
  424. package/tests/buyer-payment-manager.test.ts +358 -0
  425. package/tests/connection-auth.test.ts +87 -0
  426. package/tests/default-router.test.ts +148 -0
  427. package/tests/evm-keypair.test.ts +173 -0
  428. package/tests/identity.test.ts +133 -0
  429. package/tests/message-protocol.test.ts +212 -0
  430. package/tests/metadata-codec.test.ts +165 -0
  431. package/tests/metadata-validator.test.ts +261 -0
  432. package/tests/metering-storage.test.ts +244 -0
  433. package/tests/payment-codec.test.ts +95 -0
  434. package/tests/payment-mux.test.ts +191 -0
  435. package/tests/peer-selector.test.ts +184 -0
  436. package/tests/provider-detection.test.ts +107 -0
  437. package/tests/proxy-mux-security.test.ts +38 -0
  438. package/tests/receipt.test.ts +215 -0
  439. package/tests/reputation-integration.test.ts +195 -0
  440. package/tests/request-codec.test.ts +144 -0
  441. package/tests/token-counter.test.ts +122 -0
  442. package/tsconfig.json +9 -0
  443. package/vitest.config.ts +7 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keypair.d.ts","sourceRoot":"","sources":["../../../src/payments/evm/keypair.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAa,MAAM,QAAQ,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAO9D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAE/D"}
@@ -0,0 +1,29 @@
1
+ import { Wallet, keccak256 } from 'ethers';
2
+ /**
3
+ * Derive a secp256k1 private key from the Ed25519 identity seed.
4
+ * Domain-separated to ensure the derived key is independent from the Ed25519 key.
5
+ *
6
+ * Derivation: keccak256(ed25519_seed || "evm-payment-key") → secp256k1 private key
7
+ *
8
+ * The Ed25519 seed (identity.privateKey) is 32 bytes. We append a fixed
9
+ * domain separator string to prevent the derived key from colliding with
10
+ * any other use of the same seed. keccak256 produces a 32-byte output
11
+ * which is a valid secp256k1 private key (the probability of hitting an
12
+ * invalid key is astronomically low: ~1/2^128).
13
+ */
14
+ export function identityToEvmWallet(identity) {
15
+ const domainSeparator = new TextEncoder().encode('evm-payment-key');
16
+ const combined = new Uint8Array(identity.privateKey.length + domainSeparator.length);
17
+ combined.set(identity.privateKey, 0);
18
+ combined.set(domainSeparator, identity.privateKey.length);
19
+ const privateKey = keccak256(combined);
20
+ return new Wallet(privateKey);
21
+ }
22
+ /**
23
+ * Get the EVM address (0x-prefixed hex) for a Antseed Identity.
24
+ * This is the address that appears on-chain as the buyer or seller.
25
+ */
26
+ export function identityToEvmAddress(identity) {
27
+ return identityToEvmWallet(identity).address;
28
+ }
29
+ //# sourceMappingURL=keypair.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keypair.js","sourceRoot":"","sources":["../../../src/payments/evm/keypair.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAG3C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAkB;IACpD,MAAM,eAAe,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACrF,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACrC,QAAQ,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IACvC,OAAO,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAkB;IACrD,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type AbstractSigner } from 'ethers';
2
+ import type { Identity } from '../../p2p/identity.js';
3
+ export declare function buildLockMessageHash(sessionId: string, seller: string, amount: bigint): string;
4
+ export declare function buildSettlementMessageHash(sessionId: string, runningTotal: bigint, score: number): string;
5
+ export declare function buildExtendLockMessageHash(sessionId: string, seller: string, additionalAmount: bigint): string;
6
+ export declare function signMessageEcdsa(signer: AbstractSigner, messageHash: string): Promise<string>;
7
+ export declare function buildReceiptMessage(sessionId: Uint8Array, runningTotal: bigint, requestCount: number, responseHash: Uint8Array): Uint8Array;
8
+ export declare function buildAckMessage(sessionId: Uint8Array, runningTotal: bigint, requestCount: number): Uint8Array;
9
+ export declare function signMessageEd25519(identity: Identity, message: Uint8Array): Promise<Uint8Array>;
10
+ export declare function verifyMessageEd25519(publicKey: Uint8Array, signature: Uint8Array, message: Uint8Array): Promise<boolean>;
11
+ //# sourceMappingURL=signatures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signatures.d.ts","sourceRoot":"","sources":["../../../src/payments/evm/signatures.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAqC,MAAM,QAAQ,CAAC;AAChF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAOtD,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,MAAM,CAKR;AAED,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GACZ,MAAM,CAKR;AAED,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAKR;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,cAAc,EACtB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAEjB;AAMD,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,UAAU,EACrB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,UAAU,GACvB,UAAU,CAaZ;AAED,wBAAgB,eAAe,CAC7B,SAAS,EAAE,UAAU,EACrB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,UAAU,CAWZ;AAED,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,UAAU,CAAC,CAErB;AAED,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,UAAU,EACrB,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,OAAO,CAAC,CAElB"}
@@ -0,0 +1,56 @@
1
+ import { solidityPackedKeccak256, getBytes } from 'ethers';
2
+ import { signData, verifySignature } from '../../p2p/identity.js';
3
+ // =========================================================================
4
+ // ECDSA signatures (on-chain) — verified by contract via ecrecover
5
+ // =========================================================================
6
+ export function buildLockMessageHash(sessionId, seller, amount) {
7
+ return solidityPackedKeccak256(['bytes1', 'bytes32', 'address', 'uint256'], ['0x01', sessionId, seller, amount]);
8
+ }
9
+ export function buildSettlementMessageHash(sessionId, runningTotal, score) {
10
+ return solidityPackedKeccak256(['bytes32', 'uint256', 'uint8'], [sessionId, runningTotal, score]);
11
+ }
12
+ export function buildExtendLockMessageHash(sessionId, seller, additionalAmount) {
13
+ return solidityPackedKeccak256(['bytes1', 'bytes32', 'address', 'uint256'], ['0x02', sessionId, seller, additionalAmount]);
14
+ }
15
+ export async function signMessageEcdsa(signer, messageHash) {
16
+ return signer.signMessage(getBytes(messageHash));
17
+ }
18
+ // =========================================================================
19
+ // Ed25519 signatures (off-chain P2P) — bilateral receipt proof
20
+ // =========================================================================
21
+ export function buildReceiptMessage(sessionId, runningTotal, requestCount, responseHash) {
22
+ if (sessionId.length !== 32)
23
+ throw new Error(`sessionId must be 32 bytes, got ${sessionId.length}`);
24
+ if (responseHash.length !== 32)
25
+ throw new Error(`responseHash must be 32 bytes, got ${responseHash.length}`);
26
+ const msg = new Uint8Array(76);
27
+ msg.set(sessionId, 0);
28
+ const totalBuf = new ArrayBuffer(8);
29
+ new DataView(totalBuf).setBigUint64(0, runningTotal, true);
30
+ msg.set(new Uint8Array(totalBuf), 32);
31
+ const countBuf = new ArrayBuffer(4);
32
+ new DataView(countBuf).setUint32(0, requestCount, true);
33
+ msg.set(new Uint8Array(countBuf), 40);
34
+ msg.set(responseHash, 44);
35
+ return msg;
36
+ }
37
+ export function buildAckMessage(sessionId, runningTotal, requestCount) {
38
+ if (sessionId.length !== 32)
39
+ throw new Error(`sessionId must be 32 bytes, got ${sessionId.length}`);
40
+ const msg = new Uint8Array(44);
41
+ msg.set(sessionId, 0);
42
+ const totalBuf = new ArrayBuffer(8);
43
+ new DataView(totalBuf).setBigUint64(0, runningTotal, true);
44
+ msg.set(new Uint8Array(totalBuf), 32);
45
+ const countBuf = new ArrayBuffer(4);
46
+ new DataView(countBuf).setUint32(0, requestCount, true);
47
+ msg.set(new Uint8Array(countBuf), 40);
48
+ return msg;
49
+ }
50
+ export async function signMessageEd25519(identity, message) {
51
+ return signData(identity.privateKey, message);
52
+ }
53
+ export async function verifyMessageEd25519(publicKey, signature, message) {
54
+ return verifySignature(publicKey, signature, message);
55
+ }
56
+ //# sourceMappingURL=signatures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signatures.js","sourceRoot":"","sources":["../../../src/payments/evm/signatures.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Identity } from '../../p2p/identity.js';
2
+ import type { WalletInfo, ChainId } from '../types.js';
3
+ export declare function getWalletInfo(identity: Identity, rpcUrl: string, usdcAddress: string, chainId: ChainId): Promise<WalletInfo>;
4
+ export declare function getAddress(identity: Identity): string;
5
+ //# sourceMappingURL=wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/payments/evm/wallet.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAOvD,wBAAsB,aAAa,CACjC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,UAAU,CAAC,CAuBrB;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAErD"}
@@ -0,0 +1,31 @@
1
+ import { JsonRpcProvider, Contract, formatEther, formatUnits } from 'ethers';
2
+ import { identityToEvmWallet, identityToEvmAddress } from './keypair.js';
3
+ const ERC20_BALANCE_ABI = [
4
+ 'function balanceOf(address owner) external view returns (uint256)',
5
+ ];
6
+ export async function getWalletInfo(identity, rpcUrl, usdcAddress, chainId) {
7
+ const wallet = identityToEvmWallet(identity);
8
+ const provider = new JsonRpcProvider(rpcUrl);
9
+ const address = wallet.address;
10
+ const ethBalance = await provider.getBalance(address);
11
+ const balanceETH = formatEther(ethBalance);
12
+ const usdc = new Contract(usdcAddress, ERC20_BALANCE_ABI, provider);
13
+ let balanceUSDC = '0';
14
+ try {
15
+ const usdcRaw = await usdc.getFunction('balanceOf')(address);
16
+ balanceUSDC = formatUnits(usdcRaw, 6);
17
+ }
18
+ catch {
19
+ // Contract may not exist on local dev chain yet
20
+ }
21
+ return {
22
+ address,
23
+ chainId,
24
+ balanceETH,
25
+ balanceUSDC,
26
+ };
27
+ }
28
+ export function getAddress(identity) {
29
+ return identityToEvmAddress(identity);
30
+ }
31
+ //# sourceMappingURL=wallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../../src/payments/evm/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAG7E,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEzE,MAAM,iBAAiB,GAAG;IACxB,mEAAmE;CAC3D,CAAC;AAEX,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAkB,EAClB,MAAc,EACd,WAAmB,EACnB,OAAgB;IAEhB,MAAM,MAAM,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAE/B,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IAE3C,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IACpE,IAAI,WAAW,GAAG,GAAG,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,OAAO,GAAW,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC;QACrE,WAAW,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;IAClD,CAAC;IAED,OAAO;QACL,OAAO;QACP,OAAO;QACP,UAAU;QACV,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAkB;IAC3C,OAAO,oBAAoB,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,13 @@
1
+ export type { PaymentMethod, ChainId, WalletInfo, TransactionType, Transaction, PaymentConfig, CryptoPaymentConfig, SettlementResult, DisputeStatus, PaymentDispute, } from './types.js';
2
+ export { BalanceManager } from './balance-manager.js';
3
+ export type { UnifiedBalance } from './balance-manager.js';
4
+ export { calculateSettlement, isSettlementWithinEscrow, calculateRefund } from './settlement.js';
5
+ export { createDispute, detectDiscrepancy, resolveDispute, isDisputeExpired, calculateDisputedAmount, DISPUTE_TIMEOUT_MS, } from './disputes.js';
6
+ export { BaseEscrowClient } from './evm/escrow-client.js';
7
+ export type { BaseEscrowConfig, SessionInfo, ReputationInfo } from './evm/escrow-client.js';
8
+ export { identityToEvmWallet, identityToEvmAddress } from './evm/keypair.js';
9
+ export { signMessageEcdsa, signMessageEd25519, buildLockMessageHash, buildSettlementMessageHash, buildExtendLockMessageHash, buildReceiptMessage, buildAckMessage, verifyMessageEd25519, } from './evm/signatures.js';
10
+ export { getWalletInfo, getAddress } from './evm/wallet.js';
11
+ export { BuyerPaymentManager } from './buyer-payment-manager.js';
12
+ export type { BuyerPaymentConfig, BuyerSessionState, BuyerSessionStatus } from './buyer-payment-manager.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/payments/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,aAAa,EACb,OAAO,EACP,UAAU,EACV,eAAe,EACf,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,cAAc,GACf,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGjG,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,EAC1B,mBAAmB,EACnB,eAAe,EACf,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,14 @@
1
+ // Balance tracking (local transaction history)
2
+ export { BalanceManager } from './balance-manager.js';
3
+ // Off-chain settlement calculation
4
+ export { calculateSettlement, isSettlementWithinEscrow, calculateRefund } from './settlement.js';
5
+ // Off-chain dispute detection
6
+ export { createDispute, detectDiscrepancy, resolveDispute, isDisputeExpired, calculateDisputedAmount, DISPUTE_TIMEOUT_MS, } from './disputes.js';
7
+ // Base/EVM integration
8
+ export { BaseEscrowClient } from './evm/escrow-client.js';
9
+ export { identityToEvmWallet, identityToEvmAddress } from './evm/keypair.js';
10
+ export { signMessageEcdsa, signMessageEd25519, buildLockMessageHash, buildSettlementMessageHash, buildExtendLockMessageHash, buildReceiptMessage, buildAckMessage, verifyMessageEd25519, } from './evm/signatures.js';
11
+ export { getWalletInfo, getAddress } from './evm/wallet.js';
12
+ // Buyer payment manager
13
+ export { BuyerPaymentManager } from './buyer-payment-manager.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/payments/index.ts"],"names":[],"mappings":"AAcA,+CAA+C;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,mCAAmC;AACnC,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEjG,8BAA8B;AAC9B,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAEvB,uBAAuB;AACvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,EAC1B,mBAAmB,EACnB,eAAe,EACf,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE5D,wBAAwB;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { UsageReceipt } from '../types/metering.js';
2
+ import type { SettlementResult } from './types.js';
3
+ export declare function calculateSettlement(sessionId: string, receipts: UsageReceipt[], platformFeeRate: number): SettlementResult;
4
+ export declare function isSettlementWithinEscrow(settlementCostUSD: number, escrowAmountUSD: number): boolean;
5
+ export declare function calculateRefund(escrowAmountUSD: number, settlementCostUSD: number): number;
6
+ //# sourceMappingURL=settlement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settlement.d.ts","sourceRoot":"","sources":["../../src/payments/settlement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,YAAY,EAAE,EACxB,eAAe,EAAE,MAAM,GACtB,gBAAgB,CAkBlB;AAED,wBAAgB,wBAAwB,CACtC,iBAAiB,EAAE,MAAM,EACzB,eAAe,EAAE,MAAM,GACtB,OAAO,CAET;AAED,wBAAgB,eAAe,CAC7B,eAAe,EAAE,MAAM,EACvB,iBAAiB,EAAE,MAAM,GACxB,MAAM,CAER"}
@@ -0,0 +1,25 @@
1
+ export function calculateSettlement(sessionId, receipts, platformFeeRate) {
2
+ if (platformFeeRate < 0 || platformFeeRate > 1) {
3
+ throw new Error(`platformFeeRate must be between 0 and 1, got ${platformFeeRate}`);
4
+ }
5
+ const matching = receipts.filter((r) => r.sessionId === sessionId);
6
+ const totalTokens = matching.reduce((sum, r) => sum + r.tokens.totalTokens, 0);
7
+ const totalCostUSD = matching.reduce((sum, r) => sum + r.costCents, 0) / 100;
8
+ const platformFeeUSD = totalCostUSD * platformFeeRate;
9
+ const sellerPayoutUSD = totalCostUSD - platformFeeUSD;
10
+ return {
11
+ sessionId,
12
+ receipts: matching,
13
+ totalTokens,
14
+ totalCostUSD,
15
+ platformFeeUSD,
16
+ sellerPayoutUSD,
17
+ };
18
+ }
19
+ export function isSettlementWithinEscrow(settlementCostUSD, escrowAmountUSD) {
20
+ return settlementCostUSD <= escrowAmountUSD;
21
+ }
22
+ export function calculateRefund(escrowAmountUSD, settlementCostUSD) {
23
+ return Math.max(0, escrowAmountUSD - settlementCostUSD);
24
+ }
25
+ //# sourceMappingURL=settlement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settlement.js","sourceRoot":"","sources":["../../src/payments/settlement.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,mBAAmB,CACjC,SAAiB,EACjB,QAAwB,EACxB,eAAuB;IAEvB,IAAI,eAAe,GAAG,CAAC,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,gDAAgD,eAAe,EAAE,CAAC,CAAC;IACrF,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;IACnE,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC/E,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;IAC7E,MAAM,cAAc,GAAG,YAAY,GAAG,eAAe,CAAC;IACtD,MAAM,eAAe,GAAG,YAAY,GAAG,cAAc,CAAC;IAEtD,OAAO;QACL,SAAS;QACT,QAAQ,EAAE,QAAQ;QAClB,WAAW;QACX,YAAY;QACZ,cAAc;QACd,eAAe;KAChB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,iBAAyB,EACzB,eAAuB;IAEvB,OAAO,iBAAiB,IAAI,eAAe,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,eAAuB,EACvB,iBAAyB;IAEzB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,GAAG,iBAAiB,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,66 @@
1
+ import type { PeerId } from '../types/peer.js';
2
+ import type { UsageReceipt } from '../types/metering.js';
3
+ export type PaymentMethod = 'crypto';
4
+ export type ChainId = 'base-local' | 'base-sepolia' | 'base-mainnet';
5
+ export interface WalletInfo {
6
+ /** EVM address (0x-prefixed hex) */
7
+ address: string;
8
+ /** Base network */
9
+ chainId: ChainId;
10
+ /** ETH balance (formatted string, e.g. "0.05") — needed for gas on Base */
11
+ balanceETH: string;
12
+ /** USDC balance (formatted string, 6 decimals, e.g. "10.50") */
13
+ balanceUSDC: string;
14
+ }
15
+ export type TransactionType = 'escrow_lock' | 'escrow_release' | 'escrow_refund' | 'dispute_resolution';
16
+ export interface Transaction {
17
+ txId: string;
18
+ type: TransactionType;
19
+ amountUSD: number;
20
+ from: string;
21
+ to: string;
22
+ timestamp: number;
23
+ chainId?: ChainId;
24
+ txHash?: string;
25
+ status: 'pending' | 'confirmed' | 'failed';
26
+ }
27
+ export interface PaymentConfig {
28
+ crypto?: CryptoPaymentConfig;
29
+ }
30
+ export interface CryptoPaymentConfig {
31
+ /** Base network */
32
+ chainId: ChainId;
33
+ /** Base JSON-RPC URL (e.g. http://127.0.0.1:8545 for anvil) */
34
+ rpcUrl: string;
35
+ /** Deployed AntseedEscrow contract address */
36
+ contractAddress: string;
37
+ /** USDC token contract address */
38
+ usdcAddress: string;
39
+ /** Default lock amount for new sessions (USDC base units as string, e.g. "1000000" = 1 USDC) */
40
+ defaultLockAmountUSDC?: string;
41
+ }
42
+ export interface SettlementResult {
43
+ sessionId: string;
44
+ receipts: UsageReceipt[];
45
+ totalTokens: number;
46
+ totalCostUSD: number;
47
+ platformFeeUSD: number;
48
+ sellerPayoutUSD: number;
49
+ channelId?: string;
50
+ paymentTxHash?: string;
51
+ }
52
+ export type DisputeStatus = 'open' | 'resolved' | 'expired';
53
+ export interface PaymentDispute {
54
+ disputeId: string;
55
+ channelId: string;
56
+ sessionId: string;
57
+ initiatorPeerId: PeerId;
58
+ reason: string;
59
+ status: DisputeStatus;
60
+ buyerReceipts: UsageReceipt[];
61
+ sellerReceipts: UsageReceipt[];
62
+ createdAt: number;
63
+ resolvedAt: number | null;
64
+ resolution: string | null;
65
+ }
66
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/payments/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC;AAErC,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,cAAc,GAAG,cAAc,CAAC;AAErE,MAAM,WAAW,UAAU;IACzB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,2EAA2E;IAC3E,UAAU,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,eAAe,GACvB,aAAa,GACb,gBAAgB,GAChB,eAAe,GACf,oBAAoB,CAAC;AAEzB,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;CAC5C;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,mBAAmB,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,mBAAmB;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,+DAA+D;IAC/D,MAAM,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,eAAe,EAAE,MAAM,CAAC;IACxB,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,gGAAgG;IAChG,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;AAE5D,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,aAAa,CAAC;IACtB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,cAAc,EAAE,YAAY,EAAE,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/payments/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export { ProxyMux } from './proxy-mux.js';
2
+ export { encodeHttpRequest, decodeHttpRequest, encodeHttpResponse, decodeHttpResponse, encodeHttpResponseChunk, decodeHttpResponseChunk } from './request-codec.js';
3
+ export { detectProviderFromHeaders, detectProviderFromPath, resolveProvider, IDLEAI_PROVIDER_HEADER } from './provider-detection.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/proxy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACpK,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { ProxyMux } from './proxy-mux.js';
2
+ export { encodeHttpRequest, decodeHttpRequest, encodeHttpResponse, decodeHttpResponse, encodeHttpResponseChunk, decodeHttpResponseChunk } from './request-codec.js';
3
+ export { detectProviderFromHeaders, detectProviderFromPath, resolveProvider, IDLEAI_PROVIDER_HEADER } from './provider-detection.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/proxy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACpK,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { ProviderType } from '../types/metering.js';
2
+ export declare const ANTSEED_PROVIDER_HEADER = "x-antseed-provider";
3
+ /** @deprecated Use ANTSEED_PROVIDER_HEADER instead */
4
+ export declare const IDLEAI_PROVIDER_HEADER = "x-antseed-provider";
5
+ /**
6
+ * Return the provider encoded in an internal routing header, if valid.
7
+ */
8
+ export declare function detectProviderFromHeaders(headers: Record<string, string>): ProviderType | null;
9
+ /**
10
+ * Detect provider using request path heuristics.
11
+ */
12
+ export declare function detectProviderFromPath(path: string): ProviderType | null;
13
+ /**
14
+ * Resolve provider with priority:
15
+ * 1. explicit internal header
16
+ * 2. request path inference
17
+ * 3. fallback value
18
+ */
19
+ export declare function resolveProvider(path: string, headers: Record<string, string>, fallback: ProviderType): ProviderType;
20
+ //# sourceMappingURL=provider-detection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-detection.d.ts","sourceRoot":"","sources":["../../src/proxy/provider-detection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,eAAO,MAAM,uBAAuB,uBAAuB,CAAC;AAC5D,sDAAsD;AACtD,eAAO,MAAM,sBAAsB,uBAA0B,CAAC;AAsB9D;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,YAAY,GAAG,IAAI,CAO9F;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAsBxE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,QAAQ,EAAE,YAAY,GACrB,YAAY,CAEd"}
@@ -0,0 +1,61 @@
1
+ export const ANTSEED_PROVIDER_HEADER = 'x-antseed-provider';
2
+ /** @deprecated Use ANTSEED_PROVIDER_HEADER instead */
3
+ export const IDLEAI_PROVIDER_HEADER = ANTSEED_PROVIDER_HEADER;
4
+ const KNOWN_PROVIDERS = new Set([
5
+ 'anthropic',
6
+ 'openai',
7
+ 'google',
8
+ 'moonshot',
9
+ ]);
10
+ function getHeaderCaseInsensitive(headers, key) {
11
+ const target = key.toLowerCase();
12
+ for (const [headerName, value] of Object.entries(headers)) {
13
+ if (headerName.toLowerCase() === target) {
14
+ return value;
15
+ }
16
+ }
17
+ return undefined;
18
+ }
19
+ /**
20
+ * Return the provider encoded in an internal routing header, if valid.
21
+ */
22
+ export function detectProviderFromHeaders(headers) {
23
+ const raw = getHeaderCaseInsensitive(headers, ANTSEED_PROVIDER_HEADER);
24
+ if (!raw) {
25
+ return null;
26
+ }
27
+ const normalized = raw.trim().toLowerCase();
28
+ return KNOWN_PROVIDERS.has(normalized) ? normalized : null;
29
+ }
30
+ /**
31
+ * Detect provider using request path heuristics.
32
+ */
33
+ export function detectProviderFromPath(path) {
34
+ const normalizedPath = path.toLowerCase();
35
+ // Must be evaluated before OpenAI checks since moonshot can share OpenAI-style paths.
36
+ if (normalizedPath.includes('moonshot')) {
37
+ return 'moonshot';
38
+ }
39
+ if (normalizedPath.startsWith('/v1/messages') || normalizedPath.startsWith('/v1/complete')) {
40
+ return 'anthropic';
41
+ }
42
+ if (normalizedPath.startsWith('/v1/chat') ||
43
+ normalizedPath.startsWith('/v1/completions') ||
44
+ normalizedPath.startsWith('/v1/embeddings')) {
45
+ return 'openai';
46
+ }
47
+ if (normalizedPath.startsWith('/v1beta/') || normalizedPath.startsWith('/v1/models/gemini')) {
48
+ return 'google';
49
+ }
50
+ return null;
51
+ }
52
+ /**
53
+ * Resolve provider with priority:
54
+ * 1. explicit internal header
55
+ * 2. request path inference
56
+ * 3. fallback value
57
+ */
58
+ export function resolveProvider(path, headers, fallback) {
59
+ return detectProviderFromHeaders(headers) ?? detectProviderFromPath(path) ?? fallback;
60
+ }
61
+ //# sourceMappingURL=provider-detection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-detection.js","sourceRoot":"","sources":["../../src/proxy/provider-detection.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,uBAAuB,GAAG,oBAAoB,CAAC;AAC5D,sDAAsD;AACtD,MAAM,CAAC,MAAM,sBAAsB,GAAG,uBAAuB,CAAC;AAE9D,MAAM,eAAe,GAAG,IAAI,GAAG,CAAS;IACtC,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,UAAU;CACX,CAAC,CAAC;AAEH,SAAS,wBAAwB,CAC/B,OAA+B,EAC/B,GAAW;IAEX,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IACjC,KAAK,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1D,IAAI,UAAU,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;YACxC,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAA+B;IACvE,MAAM,GAAG,GAAG,wBAAwB,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;IACvE,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5C,OAAO,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAE1C,sFAAsF;IACtF,IAAI,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACxC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,IAAI,cAAc,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAC3F,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IACE,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC;QACrC,cAAc,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAC5C,cAAc,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAC3C,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,cAAc,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC5F,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,OAA+B,EAC/B,QAAsB;IAEtB,OAAO,yBAAyB,CAAC,OAAO,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC;AACxF,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { type FramedMessage } from "../types/protocol.js";
2
+ import type { PeerConnection } from "../p2p/connection-manager.js";
3
+ import type { SerializedHttpRequest, SerializedHttpResponse, SerializedHttpResponseChunk } from "../types/http.js";
4
+ type ResponseHandler = (response: SerializedHttpResponse) => void;
5
+ type ChunkHandler = (chunk: SerializedHttpResponseChunk) => void;
6
+ type RequestHandler = (request: SerializedHttpRequest) => void | Promise<void>;
7
+ /**
8
+ * Request/response multiplexer over DataChannel.
9
+ * Handles both buyer-side and seller-side proxy communication.
10
+ */
11
+ export declare class ProxyMux {
12
+ private readonly _connection;
13
+ private _messageIdCounter;
14
+ private readonly _responseHandlers;
15
+ private readonly _chunkHandlers;
16
+ private _requestHandler;
17
+ constructor(connection: PeerConnection);
18
+ /** Buyer side: send a proxy request and register response/chunk handlers. */
19
+ sendProxyRequest(request: SerializedHttpRequest, onResponse: ResponseHandler, onChunk: ChunkHandler): void;
20
+ /** Buyer side: cancel handlers for an in-flight request. */
21
+ cancelProxyRequest(requestId: string): void;
22
+ /** Seller side: register a handler for incoming proxy requests. */
23
+ onProxyRequest(handler: RequestHandler): void;
24
+ /** Seller side: send a complete proxy response. */
25
+ sendProxyResponse(response: SerializedHttpResponse): void;
26
+ /** Seller side: send a proxy response chunk. */
27
+ sendProxyChunk(chunk: SerializedHttpResponseChunk): void;
28
+ /** Route an incoming frame to the correct handler based on message type. */
29
+ handleFrame(frame: FramedMessage): Promise<void>;
30
+ /** Number of in-flight requests (buyer side). */
31
+ activeRequestCount(): number;
32
+ private _nextMessageId;
33
+ }
34
+ export {};
35
+ //# sourceMappingURL=proxy-mux.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-mux.d.ts","sourceRoot":"","sources":["../../src/proxy/proxy-mux.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAUnE,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACtB,2BAA2B,EAC5B,MAAM,kBAAkB,CAAC;AAE1B,KAAK,eAAe,GAAG,CAAC,QAAQ,EAAE,sBAAsB,KAAK,IAAI,CAAC;AAClE,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,2BAA2B,KAAK,IAAI,CAAC;AACjE,KAAK,cAAc,GAAG,CAAC,OAAO,EAAE,qBAAqB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE/E;;;GAGG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiB;IAC7C,OAAO,CAAC,iBAAiB,CAAK;IAG9B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAsC;IACxE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmC;IAGlE,OAAO,CAAC,eAAe,CAA+B;gBAE1C,UAAU,EAAE,cAAc;IAItC,6EAA6E;IAC7E,gBAAgB,CACd,OAAO,EAAE,qBAAqB,EAC9B,UAAU,EAAE,eAAe,EAC3B,OAAO,EAAE,YAAY,GACpB,IAAI;IAcP,4DAA4D;IAC5D,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAK3C,mEAAmE;IACnE,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAI7C,mDAAmD;IACnD,iBAAiB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAWzD,gDAAgD;IAChD,cAAc,CAAC,KAAK,EAAE,2BAA2B,GAAG,IAAI;IAexD,4EAA4E;IACtE,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA+DtD,iDAAiD;IACjD,kBAAkB,IAAI,MAAM;IAI5B,OAAO,CAAC,cAAc;CAKvB"}
@@ -0,0 +1,137 @@
1
+ import { MessageType } from "../types/protocol.js";
2
+ import { encodeFrame } from "../p2p/message-protocol.js";
3
+ import { encodeHttpRequest, decodeHttpRequest, encodeHttpResponse, decodeHttpResponse, encodeHttpResponseChunk, decodeHttpResponseChunk, } from "./request-codec.js";
4
+ /**
5
+ * Request/response multiplexer over DataChannel.
6
+ * Handles both buyer-side and seller-side proxy communication.
7
+ */
8
+ export class ProxyMux {
9
+ _connection;
10
+ _messageIdCounter = 0;
11
+ // Buyer side: pending requests awaiting responses
12
+ _responseHandlers = new Map();
13
+ _chunkHandlers = new Map();
14
+ // Seller side: handler for incoming proxy requests
15
+ _requestHandler = null;
16
+ constructor(connection) {
17
+ this._connection = connection;
18
+ }
19
+ /** Buyer side: send a proxy request and register response/chunk handlers. */
20
+ sendProxyRequest(request, onResponse, onChunk) {
21
+ this._responseHandlers.set(request.requestId, onResponse);
22
+ this._chunkHandlers.set(request.requestId, onChunk);
23
+ const payload = encodeHttpRequest(request);
24
+ const frame = encodeFrame({
25
+ type: MessageType.HttpRequest,
26
+ messageId: this._nextMessageId(),
27
+ payload,
28
+ });
29
+ this._connection.send(frame);
30
+ }
31
+ /** Buyer side: cancel handlers for an in-flight request. */
32
+ cancelProxyRequest(requestId) {
33
+ this._responseHandlers.delete(requestId);
34
+ this._chunkHandlers.delete(requestId);
35
+ }
36
+ /** Seller side: register a handler for incoming proxy requests. */
37
+ onProxyRequest(handler) {
38
+ this._requestHandler = handler;
39
+ }
40
+ /** Seller side: send a complete proxy response. */
41
+ sendProxyResponse(response) {
42
+ const payload = encodeHttpResponse(response);
43
+ const frame = encodeFrame({
44
+ type: MessageType.HttpResponse,
45
+ messageId: this._nextMessageId(),
46
+ payload,
47
+ });
48
+ this._connection.send(frame);
49
+ }
50
+ /** Seller side: send a proxy response chunk. */
51
+ sendProxyChunk(chunk) {
52
+ const type = chunk.done
53
+ ? MessageType.HttpResponseEnd
54
+ : MessageType.HttpResponseChunk;
55
+ const payload = encodeHttpResponseChunk(chunk);
56
+ const frame = encodeFrame({
57
+ type,
58
+ messageId: this._nextMessageId(),
59
+ payload,
60
+ });
61
+ this._connection.send(frame);
62
+ }
63
+ /** Route an incoming frame to the correct handler based on message type. */
64
+ async handleFrame(frame) {
65
+ try {
66
+ switch (frame.type) {
67
+ case MessageType.HttpRequest: {
68
+ // Seller side: incoming request from buyer
69
+ if (this._requestHandler) {
70
+ const request = decodeHttpRequest(frame.payload);
71
+ await this._requestHandler(request);
72
+ }
73
+ break;
74
+ }
75
+ case MessageType.HttpResponse: {
76
+ // Buyer side: complete response from seller
77
+ const response = decodeHttpResponse(frame.payload);
78
+ const handler = this._responseHandlers.get(response.requestId);
79
+ if (handler) {
80
+ this._responseHandlers.delete(response.requestId);
81
+ this._chunkHandlers.delete(response.requestId);
82
+ handler(response);
83
+ }
84
+ break;
85
+ }
86
+ case MessageType.HttpResponseChunk: {
87
+ // Buyer side: streaming chunk from seller
88
+ const chunk = decodeHttpResponseChunk(frame.payload);
89
+ const chunkHandler = this._chunkHandlers.get(chunk.requestId);
90
+ if (chunkHandler) {
91
+ chunkHandler(chunk);
92
+ }
93
+ break;
94
+ }
95
+ case MessageType.HttpResponseEnd: {
96
+ // Buyer side: final chunk (done=true) from seller
97
+ const endChunk = decodeHttpResponseChunk(frame.payload);
98
+ const endHandler = this._chunkHandlers.get(endChunk.requestId);
99
+ if (endHandler) {
100
+ endHandler(endChunk);
101
+ this._responseHandlers.delete(endChunk.requestId);
102
+ this._chunkHandlers.delete(endChunk.requestId);
103
+ }
104
+ break;
105
+ }
106
+ case MessageType.HttpResponseError: {
107
+ // Buyer side: error response from seller
108
+ const errorResponse = decodeHttpResponse(frame.payload);
109
+ const errorHandler = this._responseHandlers.get(errorResponse.requestId);
110
+ if (errorHandler) {
111
+ this._responseHandlers.delete(errorResponse.requestId);
112
+ this._chunkHandlers.delete(errorResponse.requestId);
113
+ errorHandler(errorResponse);
114
+ }
115
+ break;
116
+ }
117
+ default:
118
+ // Unknown message type — ignore
119
+ break;
120
+ }
121
+ }
122
+ catch (err) {
123
+ const message = err instanceof Error ? err.message : String(err);
124
+ throw new Error(`Failed to handle proxy frame type ${frame.type}: ${message}`);
125
+ }
126
+ }
127
+ /** Number of in-flight requests (buyer side). */
128
+ activeRequestCount() {
129
+ return this._responseHandlers.size;
130
+ }
131
+ _nextMessageId() {
132
+ const id = this._messageIdCounter;
133
+ this._messageIdCounter = (this._messageIdCounter + 1) & 0xFFFFFFFF;
134
+ return id;
135
+ }
136
+ }
137
+ //# sourceMappingURL=proxy-mux.js.map