@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,280 @@
1
+ import { randomBytes } from 'node:crypto';
2
+ import { BaseEscrowClient } from './evm/escrow-client.js';
3
+ import { identityToEvmWallet, identityToEvmAddress } from './evm/keypair.js';
4
+ import { buildLockMessageHash, buildSettlementMessageHash, buildExtendLockMessageHash, signMessageEcdsa, buildAckMessage, signMessageEd25519, } from './evm/signatures.js';
5
+ import { bytesToHex, hexToBytes } from '../utils/hex.js';
6
+ import { debugLog, debugWarn } from '../utils/debug.js';
7
+ /**
8
+ * Manages buyer-side bilateral payment sessions across seller connections.
9
+ *
10
+ * Handles the full lifecycle: lock initiation, receipt acknowledgement,
11
+ * top-up approval, and session settlement.
12
+ */
13
+ export class BuyerPaymentManager {
14
+ _identity;
15
+ _signer;
16
+ _escrowClient;
17
+ _config;
18
+ _sessions = new Map();
19
+ constructor(identity, config) {
20
+ this._identity = identity;
21
+ this._config = config;
22
+ this._signer = identityToEvmWallet(identity);
23
+ this._escrowClient = new BaseEscrowClient({
24
+ rpcUrl: config.rpcUrl,
25
+ contractAddress: config.contractAddress,
26
+ usdcAddress: config.usdcAddress,
27
+ });
28
+ }
29
+ get signer() {
30
+ return this._signer;
31
+ }
32
+ /** @deprecated Use .signer instead */
33
+ get wallet() {
34
+ return this._signer;
35
+ }
36
+ /** Replace the signer at runtime (e.g. with a WalletConnect signer). */
37
+ setSigner(signer) {
38
+ this._signer = signer;
39
+ }
40
+ get escrowClient() {
41
+ return this._escrowClient;
42
+ }
43
+ /** Get a snapshot of all active sessions. */
44
+ getActiveSessions() {
45
+ return [...this._sessions.values()].filter((s) => s.status !== 'ended');
46
+ }
47
+ /** Get the session for a given seller peer, if it exists. */
48
+ getSession(sellerPeerId) {
49
+ return this._sessions.get(sellerPeerId);
50
+ }
51
+ // ── Lock initiation ─────────────────────────────────────────────
52
+ /**
53
+ * Generate a session ID, sign a lock authorization, and send it
54
+ * to the seller via PaymentMux.
55
+ */
56
+ async initiateLock(sellerPeerId, sellerEvmAddress, paymentMux, lockAmount) {
57
+ const amount = lockAmount ?? this._config.defaultLockAmountUSDC;
58
+ const amountBigInt = BigInt(amount);
59
+ // Generate a 32-byte session ID as 0x-prefixed hex (bytes32)
60
+ const sessionIdBytes = randomBytes(32);
61
+ const sessionId = '0x' + sessionIdBytes.toString('hex');
62
+ debugLog(`[BuyerPayment] Initiating lock: session=${sessionId.slice(0, 18)}... seller=${sellerPeerId.slice(0, 12)}... amount=${amount}`);
63
+ // Sign the lock message with ECDSA (for on-chain verification)
64
+ const messageHash = buildLockMessageHash(sessionId, sellerEvmAddress, amountBigInt);
65
+ const buyerSig = await signMessageEcdsa(this._signer, messageHash);
66
+ // Store session state
67
+ const now = Date.now();
68
+ const session = {
69
+ sessionId,
70
+ sellerPeerId,
71
+ sellerEvmAddress,
72
+ lockedAmount: amountBigInt,
73
+ status: 'pending',
74
+ txSignature: null,
75
+ lastRunningTotal: 0n,
76
+ lastRequestCount: 0,
77
+ createdAt: now,
78
+ updatedAt: now,
79
+ };
80
+ this._sessions.set(sellerPeerId, session);
81
+ // Send the lock auth message
82
+ paymentMux.sendSessionLockAuth({
83
+ sessionId,
84
+ lockedAmount: amount,
85
+ buyerSig,
86
+ });
87
+ return sessionId;
88
+ }
89
+ // ── Lock confirmation / rejection handlers ──────────────────────
90
+ /**
91
+ * Called when the seller confirms the lock was committed on-chain.
92
+ */
93
+ handleLockConfirm(sellerPeerId, payload) {
94
+ const session = this._sessions.get(sellerPeerId);
95
+ if (!session) {
96
+ debugWarn(`[BuyerPayment] Lock confirm for unknown seller: ${sellerPeerId.slice(0, 12)}...`);
97
+ return;
98
+ }
99
+ if (session.sessionId !== payload.sessionId) {
100
+ debugWarn(`[BuyerPayment] Lock confirm session mismatch: expected=${session.sessionId.slice(0, 18)}... got=${payload.sessionId.slice(0, 18)}...`);
101
+ return;
102
+ }
103
+ session.status = 'confirmed';
104
+ session.txSignature = payload.txSignature;
105
+ session.updatedAt = Date.now();
106
+ debugLog(`[BuyerPayment] Lock confirmed: session=${session.sessionId.slice(0, 18)}... tx=${payload.txSignature.slice(0, 12)}...`);
107
+ }
108
+ /**
109
+ * Called when the seller rejects the lock.
110
+ */
111
+ handleLockReject(sellerPeerId, payload) {
112
+ const session = this._sessions.get(sellerPeerId);
113
+ if (!session) {
114
+ debugWarn(`[BuyerPayment] Lock reject for unknown seller: ${sellerPeerId.slice(0, 12)}...`);
115
+ return;
116
+ }
117
+ debugWarn(`[BuyerPayment] Lock rejected: session=${session.sessionId.slice(0, 18)}... reason=${payload.reason}`);
118
+ this._sessions.delete(sellerPeerId);
119
+ }
120
+ // ── Receipt handling ────────────────────────────────────────────
121
+ /**
122
+ * Handle a running-total receipt from the seller.
123
+ * If autoAck is enabled, automatically counter-sign and send BuyerAck.
124
+ */
125
+ async handleSellerReceipt(sellerPeerId, receipt, paymentMux) {
126
+ const session = this._sessions.get(sellerPeerId);
127
+ if (!session) {
128
+ debugWarn(`[BuyerPayment] Receipt for unknown seller: ${sellerPeerId.slice(0, 12)}...`);
129
+ return;
130
+ }
131
+ if (session.status === 'confirmed') {
132
+ session.status = 'active';
133
+ }
134
+ // Update running total
135
+ session.lastRunningTotal = BigInt(receipt.runningTotal);
136
+ session.lastRequestCount = receipt.requestCount;
137
+ session.updatedAt = Date.now();
138
+ debugLog(`[BuyerPayment] Receipt: session=${session.sessionId.slice(0, 18)}... total=${receipt.runningTotal} count=${receipt.requestCount}`);
139
+ const autoAck = this._config.autoAck ?? true;
140
+ if (autoAck) {
141
+ // Build ack message and sign with Ed25519
142
+ const sessionIdBytes = hexToBytes(session.sessionId.startsWith('0x') ? session.sessionId.slice(2) : session.sessionId);
143
+ const ackMsg = buildAckMessage(sessionIdBytes, BigInt(receipt.runningTotal), receipt.requestCount);
144
+ const sigBytes = await signMessageEd25519(this._identity, ackMsg);
145
+ const buyerSig = bytesToHex(sigBytes);
146
+ paymentMux.sendBuyerAck({
147
+ sessionId: session.sessionId,
148
+ runningTotal: receipt.runningTotal,
149
+ requestCount: receipt.requestCount,
150
+ buyerSig,
151
+ });
152
+ debugLog(`[BuyerPayment] Auto-ack sent for session=${session.sessionId.slice(0, 18)}...`);
153
+ }
154
+ }
155
+ // ── Top-up handling ─────────────────────────────────────────────
156
+ /**
157
+ * Handle a top-up request from the seller.
158
+ * If autoTopUp is enabled and budget allows, sign and send TopUpAuth.
159
+ * Otherwise, end the session.
160
+ */
161
+ async handleTopUpRequest(sellerPeerId, request, paymentMux) {
162
+ const session = this._sessions.get(sellerPeerId);
163
+ if (!session) {
164
+ debugWarn(`[BuyerPayment] Top-up for unknown seller: ${sellerPeerId.slice(0, 12)}...`);
165
+ return;
166
+ }
167
+ const additionalAmount = BigInt(request.additionalAmount);
168
+ const maxBudget = BigInt(this._config.maxSessionBudgetUSDC ?? '10000000');
169
+ const newTotal = session.lockedAmount + additionalAmount;
170
+ const autoTopUp = this._config.autoTopUp ?? true;
171
+ debugLog(`[BuyerPayment] Top-up request: session=${session.sessionId.slice(0, 18)}... additional=${request.additionalAmount} newTotal=${newTotal}`);
172
+ if (autoTopUp && newTotal <= maxBudget) {
173
+ // Check on-chain balance
174
+ const buyerAddr = identityToEvmAddress(this._identity);
175
+ const account = await this._escrowClient.getBuyerAccount(buyerAddr);
176
+ if (account.available >= additionalAmount) {
177
+ // Sign extend-lock authorization
178
+ const messageHash = buildExtendLockMessageHash(session.sessionId, session.sellerEvmAddress, additionalAmount);
179
+ const buyerSig = await signMessageEcdsa(this._signer, messageHash);
180
+ session.lockedAmount = newTotal;
181
+ session.updatedAt = Date.now();
182
+ paymentMux.sendTopUpAuth({
183
+ sessionId: session.sessionId,
184
+ additionalAmount: request.additionalAmount,
185
+ buyerSig,
186
+ });
187
+ debugLog(`[BuyerPayment] Top-up authorized: session=${session.sessionId.slice(0, 18)}...`);
188
+ return;
189
+ }
190
+ debugWarn(`[BuyerPayment] Insufficient balance for top-up. Available=${account.available}, requested=${additionalAmount}`);
191
+ }
192
+ // Cannot or will not top up — end the session
193
+ debugLog(`[BuyerPayment] Declining top-up, ending session=${session.sessionId.slice(0, 18)}...`);
194
+ await this.endSession(sellerPeerId, paymentMux, 80);
195
+ }
196
+ // ── Session end ─────────────────────────────────────────────────
197
+ /**
198
+ * End a session with the given seller. Signs a settlement message
199
+ * with ECDSA and sends SessionEnd.
200
+ */
201
+ async endSession(sellerPeerId, paymentMux, score = 80) {
202
+ const session = this._sessions.get(sellerPeerId);
203
+ if (!session) {
204
+ debugWarn(`[BuyerPayment] Cannot end session for unknown seller: ${sellerPeerId.slice(0, 12)}...`);
205
+ return;
206
+ }
207
+ if (session.status === 'ending' || session.status === 'ended') {
208
+ return;
209
+ }
210
+ session.status = 'ending';
211
+ session.updatedAt = Date.now();
212
+ debugLog(`[BuyerPayment] Ending session=${session.sessionId.slice(0, 18)}... total=${session.lastRunningTotal} score=${score}`);
213
+ // Sign settlement message with ECDSA
214
+ const messageHash = buildSettlementMessageHash(session.sessionId, session.lastRunningTotal, score);
215
+ const buyerSig = await signMessageEcdsa(this._signer, messageHash);
216
+ paymentMux.sendSessionEnd({
217
+ sessionId: session.sessionId,
218
+ runningTotal: session.lastRunningTotal.toString(),
219
+ requestCount: session.lastRequestCount,
220
+ score,
221
+ buyerSig,
222
+ });
223
+ session.status = 'ended';
224
+ session.updatedAt = Date.now();
225
+ debugLog(`[BuyerPayment] Session ended: ${session.sessionId.slice(0, 18)}...`);
226
+ }
227
+ // ── Escrow operations ───────────────────────────────────────────
228
+ /**
229
+ * Deposit USDC into the escrow contract.
230
+ * @param amount Amount in USDC base units (6 decimals).
231
+ */
232
+ async deposit(amount) {
233
+ debugLog(`[BuyerPayment] Depositing ${amount} to escrow`);
234
+ return this._escrowClient.deposit(this._signer, amount);
235
+ }
236
+ /**
237
+ * Withdraw USDC from the escrow contract.
238
+ * @param amount Amount in USDC base units (6 decimals).
239
+ */
240
+ async withdraw(amount) {
241
+ debugLog(`[BuyerPayment] Withdrawing ${amount} from escrow`);
242
+ return this._escrowClient.withdraw(this._signer, amount);
243
+ }
244
+ /**
245
+ * Get the buyer's on-chain escrow balance.
246
+ */
247
+ async getBalance() {
248
+ const buyerAddr = identityToEvmAddress(this._identity);
249
+ return this._escrowClient.getBuyerAccount(buyerAddr);
250
+ }
251
+ // ── Dispute helpers ─────────────────────────────────────────────
252
+ /**
253
+ * Release an expired lock (buyer reclaims funds).
254
+ */
255
+ async releaseExpiredLock(sessionId) {
256
+ debugLog(`[BuyerPayment] Releasing expired lock: session=${sessionId.slice(0, 18)}...`);
257
+ return this._escrowClient.releaseExpiredLock(this._signer, sessionId);
258
+ }
259
+ /**
260
+ * Respond to a dispute opened by the seller.
261
+ */
262
+ async respondToDispute(sessionId) {
263
+ debugLog(`[BuyerPayment] Responding to dispute: session=${sessionId.slice(0, 18)}...`);
264
+ return this._escrowClient.respondDispute(this._signer, sessionId);
265
+ }
266
+ /**
267
+ * Check if a session lock has been confirmed (for polling).
268
+ */
269
+ isLockConfirmed(sellerPeerId) {
270
+ const session = this._sessions.get(sellerPeerId);
271
+ return session?.status === 'confirmed' || session?.status === 'active';
272
+ }
273
+ /**
274
+ * Check if a session lock has been rejected (for polling).
275
+ */
276
+ isLockRejected(sellerPeerId) {
277
+ return !this._sessions.has(sellerPeerId);
278
+ }
279
+ }
280
+ //# sourceMappingURL=buyer-payment-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buyer-payment-manager.js","sourceRoot":"","sources":["../../src/payments/buyer-payment-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { PeerId } from '../types/peer.js';
2
+ import type { UsageReceipt } from '../types/metering.js';
3
+ import type { PaymentDispute } from './types.js';
4
+ export declare const DISPUTE_TIMEOUT_MS: number;
5
+ export declare function createDispute(channel: {
6
+ channelId: string;
7
+ sessionId: string;
8
+ }, initiatorPeerId: PeerId, reason: string, buyerReceipts: UsageReceipt[], sellerReceipts: UsageReceipt[]): PaymentDispute;
9
+ export declare function detectDiscrepancy(buyerReceipts: UsageReceipt[], sellerReceipts: UsageReceipt[], thresholdPercent: number): {
10
+ discrepancyDetected: boolean;
11
+ buyerTotal: number;
12
+ sellerTotal: number;
13
+ diffPercent: number;
14
+ };
15
+ export declare function resolveDispute(dispute: PaymentDispute, resolution: string): PaymentDispute;
16
+ export declare function isDisputeExpired(dispute: PaymentDispute): boolean;
17
+ export declare function calculateDisputedAmount(buyerReceipts: UsageReceipt[], sellerReceipts: UsageReceipt[]): number;
18
+ //# sourceMappingURL=disputes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disputes.d.ts","sourceRoot":"","sources":["../../src/payments/disputes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,eAAO,MAAM,kBAAkB,QAAsB,CAAC;AAEtD,wBAAgB,aAAa,CAC3B,OAAO,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EACjD,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,YAAY,EAAE,EAC7B,cAAc,EAAE,YAAY,EAAE,GAC7B,cAAc,CAchB;AAED,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,YAAY,EAAE,EAC7B,cAAc,EAAE,YAAY,EAAE,EAC9B,gBAAgB,EAAE,MAAM,GACvB;IAAE,mBAAmB,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAahG;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,GACjB,cAAc,CAOhB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAEjE;AAED,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,YAAY,EAAE,EAC7B,cAAc,EAAE,YAAY,EAAE,GAC7B,MAAM,CAIR"}
@@ -0,0 +1,47 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ export const DISPUTE_TIMEOUT_MS = 72 * 60 * 60 * 1000;
3
+ export function createDispute(channel, initiatorPeerId, reason, buyerReceipts, sellerReceipts) {
4
+ return {
5
+ disputeId: randomUUID(),
6
+ channelId: channel.channelId,
7
+ sessionId: channel.sessionId,
8
+ initiatorPeerId,
9
+ reason,
10
+ status: 'open',
11
+ buyerReceipts,
12
+ sellerReceipts,
13
+ createdAt: Date.now(),
14
+ resolvedAt: null,
15
+ resolution: null,
16
+ };
17
+ }
18
+ export function detectDiscrepancy(buyerReceipts, sellerReceipts, thresholdPercent) {
19
+ const buyerTotal = buyerReceipts.reduce((sum, r) => sum + r.tokens.totalTokens, 0);
20
+ const sellerTotal = sellerReceipts.reduce((sum, r) => sum + r.tokens.totalTokens, 0);
21
+ const max = Math.max(buyerTotal, sellerTotal);
22
+ const diffPercent = max === 0 ? 0 : (Math.abs(buyerTotal - sellerTotal) / max) * 100;
23
+ const discrepancyDetected = diffPercent > thresholdPercent;
24
+ return {
25
+ discrepancyDetected,
26
+ buyerTotal,
27
+ sellerTotal,
28
+ diffPercent,
29
+ };
30
+ }
31
+ export function resolveDispute(dispute, resolution) {
32
+ return {
33
+ ...dispute,
34
+ status: 'resolved',
35
+ resolvedAt: Date.now(),
36
+ resolution,
37
+ };
38
+ }
39
+ export function isDisputeExpired(dispute) {
40
+ return Date.now() - dispute.createdAt > DISPUTE_TIMEOUT_MS;
41
+ }
42
+ export function calculateDisputedAmount(buyerReceipts, sellerReceipts) {
43
+ const buyerTotalUsd = buyerReceipts.reduce((sum, r) => sum + r.costCents, 0) / 100;
44
+ const sellerTotalUsd = sellerReceipts.reduce((sum, r) => sum + r.costCents, 0) / 100;
45
+ return Math.abs(buyerTotalUsd - sellerTotalUsd);
46
+ }
47
+ //# sourceMappingURL=disputes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disputes.js","sourceRoot":"","sources":["../../src/payments/disputes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAKzC,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEtD,MAAM,UAAU,aAAa,CAC3B,OAAiD,EACjD,eAAuB,EACvB,MAAc,EACd,aAA6B,EAC7B,cAA8B;IAE9B,OAAO;QACL,SAAS,EAAE,UAAU,EAAE;QACvB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,eAAe;QACf,MAAM;QACN,MAAM,EAAE,MAAM;QACd,aAAa;QACb,cAAc;QACd,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,UAAU,EAAE,IAAI;QAChB,UAAU,EAAE,IAAI;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,aAA6B,EAC7B,cAA8B,EAC9B,gBAAwB;IAExB,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACnF,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACrF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACrF,MAAM,mBAAmB,GAAG,WAAW,GAAG,gBAAgB,CAAC;IAE3D,OAAO;QACL,mBAAmB;QACnB,UAAU;QACV,WAAW;QACX,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,OAAuB,EACvB,UAAkB;IAElB,OAAO;QACL,GAAG,OAAO;QACV,MAAM,EAAE,UAAU;QAClB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;QACtB,UAAU;KACX,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAuB;IACtD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,GAAG,kBAAkB,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,aAA6B,EAC7B,cAA8B;IAE9B,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;IACnF,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;IACrF,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,cAAc,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { JsonRpcProvider, type AbstractSigner } from 'ethers';
2
+ export interface BaseEscrowConfig {
3
+ /** Base JSON-RPC endpoint (e.g. http://127.0.0.1:8545 for anvil) */
4
+ rpcUrl: string;
5
+ /** Deployed AntseedEscrow contract address */
6
+ contractAddress: string;
7
+ /** USDC token contract address */
8
+ usdcAddress: string;
9
+ /** Confirmation commitment level (not used on EVM, reserved for future) */
10
+ commitment?: 'latest' | 'finalized';
11
+ }
12
+ export interface SessionInfo {
13
+ buyer: string;
14
+ seller: string;
15
+ lockedAmount: bigint;
16
+ status: number;
17
+ expiresAt: number;
18
+ settledAmount: bigint;
19
+ score: number;
20
+ disputeClaimedAmount: bigint;
21
+ disputeOpenedAt: number;
22
+ disputeBuyerResponded: boolean;
23
+ }
24
+ export interface ReputationInfo {
25
+ totalWeightedScore: bigint;
26
+ totalWeight: bigint;
27
+ sessionCount: number;
28
+ disputeCount: number;
29
+ weightedAverage: number;
30
+ }
31
+ export declare class BaseEscrowClient {
32
+ private readonly _provider;
33
+ private readonly _contractAddress;
34
+ private readonly _usdcAddress;
35
+ private readonly _nonceCursor;
36
+ constructor(config: BaseEscrowConfig);
37
+ get provider(): JsonRpcProvider;
38
+ get contractAddress(): string;
39
+ get usdcAddress(): string;
40
+ private _ensureConnected;
41
+ private reserveNonce;
42
+ private _prepareEscrowWrite;
43
+ deposit(signer: AbstractSigner, amount: bigint): Promise<string>;
44
+ withdraw(signer: AbstractSigner, amount: bigint): Promise<string>;
45
+ commitLock(seller: AbstractSigner, buyerAddr: string, sessionId: string, amount: bigint, buyerSig: string): Promise<string>;
46
+ extendLock(seller: AbstractSigner, sessionId: string, additionalAmount: bigint, buyerSig: string): Promise<string>;
47
+ settle(seller: AbstractSigner, sessionId: string, runningTotal: bigint, score: number, buyerSig: string): Promise<string>;
48
+ openDispute(caller: AbstractSigner, sessionId: string, claimedAmount: bigint): Promise<string>;
49
+ respondDispute(buyer: AbstractSigner, sessionId: string): Promise<string>;
50
+ resolveDispute(caller: AbstractSigner, sessionId: string): Promise<string>;
51
+ releaseExpiredLock(buyer: AbstractSigner, sessionId: string): Promise<string>;
52
+ getBuyerAccount(buyerAddr: string): Promise<{
53
+ deposited: bigint;
54
+ committed: bigint;
55
+ available: bigint;
56
+ }>;
57
+ getSession(sessionId: string): Promise<SessionInfo>;
58
+ getReputation(sellerAddr: string): Promise<ReputationInfo>;
59
+ getUSDCBalance(ownerAddr: string): Promise<bigint>;
60
+ }
61
+ //# sourceMappingURL=escrow-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escrow-client.d.ts","sourceRoot":"","sources":["../../../src/payments/evm/escrow-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,170 @@
1
+ import { Contract, JsonRpcProvider } from 'ethers';
2
+ const ESCROW_ABI = [
3
+ // Deposit & Withdraw
4
+ 'function deposit(uint256 amount) external',
5
+ 'function withdraw(uint256 amount) external',
6
+ // Session lifecycle
7
+ 'function commitLock(bytes32 sessionId, address buyer, uint256 amount, bytes calldata buyerSig) external',
8
+ 'function extendLock(bytes32 sessionId, uint256 additionalAmount, bytes calldata buyerSig) external',
9
+ 'function settle(bytes32 sessionId, uint256 runningTotal, uint8 score, bytes calldata buyerSig) external',
10
+ // Disputes
11
+ 'function openDispute(bytes32 sessionId, uint256 claimedAmount) external',
12
+ 'function respondDispute(bytes32 sessionId) external',
13
+ 'function resolveDispute(bytes32 sessionId) external',
14
+ // Expired lock
15
+ 'function releaseExpiredLock(bytes32 sessionId) external',
16
+ // View functions
17
+ 'function buyers(address) external view returns (uint256 deposited, uint256 committed)',
18
+ 'function sessions(bytes32) external view returns (address buyer, address seller, uint256 lockedAmount, uint8 status, uint64 expiresAt, uint256 settledAmount, uint8 score, uint256 disputeClaimedAmount, uint64 disputeOpenedAt, bool disputeBuyerResponded, bool exists)',
19
+ 'function reputations(address) external view returns (uint256 totalWeightedScore, uint256 totalWeight, uint256 sessionCount, uint256 disputeCount)',
20
+ ];
21
+ const ERC20_ABI = [
22
+ 'function approve(address spender, uint256 amount) external returns (bool)',
23
+ 'function balanceOf(address owner) external view returns (uint256)',
24
+ 'function allowance(address owner, address spender) external view returns (uint256)',
25
+ ];
26
+ export class BaseEscrowClient {
27
+ _provider;
28
+ _contractAddress;
29
+ _usdcAddress;
30
+ _nonceCursor = new Map();
31
+ constructor(config) {
32
+ this._provider = new JsonRpcProvider(config.rpcUrl);
33
+ this._contractAddress = config.contractAddress;
34
+ this._usdcAddress = config.usdcAddress;
35
+ }
36
+ get provider() { return this._provider; }
37
+ get contractAddress() { return this._contractAddress; }
38
+ get usdcAddress() { return this._usdcAddress; }
39
+ _ensureConnected(signer) {
40
+ if (signer.provider) {
41
+ return signer;
42
+ }
43
+ return signer.connect(this._provider);
44
+ }
45
+ async reserveNonce(address) {
46
+ const networkNonce = await this._provider.getTransactionCount(address, 'pending');
47
+ const cachedNext = this._nonceCursor.get(address);
48
+ const nonce = cachedNext === undefined ? networkNonce : Math.max(networkNonce, cachedNext);
49
+ this._nonceCursor.set(address, nonce + 1);
50
+ return nonce;
51
+ }
52
+ async _prepareEscrowWrite(signer) {
53
+ const connected = this._ensureConnected(signer);
54
+ const signerAddress = await connected.getAddress();
55
+ const nonce = await this.reserveNonce(signerAddress);
56
+ const contract = new Contract(this._contractAddress, ESCROW_ABI, connected);
57
+ return { contract, nonce };
58
+ }
59
+ async deposit(signer, amount) {
60
+ const connected = this._ensureConnected(signer);
61
+ const signerAddress = await connected.getAddress();
62
+ const usdc = new Contract(this._usdcAddress, ERC20_ABI, connected);
63
+ const approveNonce = await this.reserveNonce(signerAddress);
64
+ const approveTx = await usdc.getFunction('approve')(this._contractAddress, amount, { nonce: approveNonce });
65
+ await approveTx.wait();
66
+ const contract = new Contract(this._contractAddress, ESCROW_ABI, connected);
67
+ const depositNonce = await this.reserveNonce(signerAddress);
68
+ const tx = await contract.getFunction('deposit')(amount, { nonce: depositNonce });
69
+ const receipt = await tx.wait();
70
+ return receipt.hash;
71
+ }
72
+ async withdraw(signer, amount) {
73
+ const { contract, nonce } = await this._prepareEscrowWrite(signer);
74
+ const tx = await contract.getFunction('withdraw')(amount, { nonce });
75
+ const receipt = await tx.wait();
76
+ return receipt.hash;
77
+ }
78
+ async commitLock(seller, buyerAddr, sessionId, amount, buyerSig) {
79
+ const { contract, nonce } = await this._prepareEscrowWrite(seller);
80
+ const tx = await contract.getFunction('commitLock')(sessionId, buyerAddr, amount, buyerSig, { nonce });
81
+ const receipt = await tx.wait();
82
+ return receipt.hash;
83
+ }
84
+ async extendLock(seller, sessionId, additionalAmount, buyerSig) {
85
+ const { contract, nonce } = await this._prepareEscrowWrite(seller);
86
+ const tx = await contract.getFunction('extendLock')(sessionId, additionalAmount, buyerSig, { nonce });
87
+ const receipt = await tx.wait();
88
+ return receipt.hash;
89
+ }
90
+ async settle(seller, sessionId, runningTotal, score, buyerSig) {
91
+ const { contract, nonce } = await this._prepareEscrowWrite(seller);
92
+ const tx = await contract.getFunction('settle')(sessionId, runningTotal, score, buyerSig, { nonce });
93
+ const receipt = await tx.wait();
94
+ return receipt.hash;
95
+ }
96
+ async openDispute(caller, sessionId, claimedAmount) {
97
+ const { contract, nonce } = await this._prepareEscrowWrite(caller);
98
+ const tx = await contract.getFunction('openDispute')(sessionId, claimedAmount, { nonce });
99
+ const receipt = await tx.wait();
100
+ return receipt.hash;
101
+ }
102
+ async respondDispute(buyer, sessionId) {
103
+ const { contract, nonce } = await this._prepareEscrowWrite(buyer);
104
+ const tx = await contract.getFunction('respondDispute')(sessionId, { nonce });
105
+ const receipt = await tx.wait();
106
+ return receipt.hash;
107
+ }
108
+ async resolveDispute(caller, sessionId) {
109
+ const { contract, nonce } = await this._prepareEscrowWrite(caller);
110
+ const tx = await contract.getFunction('resolveDispute')(sessionId, { nonce });
111
+ const receipt = await tx.wait();
112
+ return receipt.hash;
113
+ }
114
+ async releaseExpiredLock(buyer, sessionId) {
115
+ const { contract, nonce } = await this._prepareEscrowWrite(buyer);
116
+ const tx = await contract.getFunction('releaseExpiredLock')(sessionId, { nonce });
117
+ const receipt = await tx.wait();
118
+ return receipt.hash;
119
+ }
120
+ async getBuyerAccount(buyerAddr) {
121
+ const contract = new Contract(this._contractAddress, ESCROW_ABI, this._provider);
122
+ const result = await contract.getFunction('buyers')(buyerAddr);
123
+ const deposited = result[0];
124
+ const committed = result[1];
125
+ return {
126
+ deposited,
127
+ committed,
128
+ available: deposited - committed,
129
+ };
130
+ }
131
+ async getSession(sessionId) {
132
+ const contract = new Contract(this._contractAddress, ESCROW_ABI, this._provider);
133
+ const result = await contract.getFunction('sessions')(sessionId);
134
+ return {
135
+ buyer: result[0],
136
+ seller: result[1],
137
+ lockedAmount: result[2],
138
+ status: Number(result[3]),
139
+ expiresAt: Number(result[4]),
140
+ settledAmount: result[5],
141
+ score: Number(result[6]),
142
+ disputeClaimedAmount: result[7],
143
+ disputeOpenedAt: Number(result[8]),
144
+ disputeBuyerResponded: result[9],
145
+ };
146
+ }
147
+ async getReputation(sellerAddr) {
148
+ const contract = new Contract(this._contractAddress, ESCROW_ABI, this._provider);
149
+ const result = await contract.getFunction('reputations')(sellerAddr);
150
+ const totalWeightedScore = result[0];
151
+ const totalWeight = result[1];
152
+ const sessionCount = Number(result[2]);
153
+ const disputeCount = Number(result[3]);
154
+ const weightedAverage = totalWeight > 0n
155
+ ? Number(totalWeightedScore / totalWeight)
156
+ : 50;
157
+ return {
158
+ totalWeightedScore,
159
+ totalWeight,
160
+ sessionCount,
161
+ disputeCount,
162
+ weightedAverage,
163
+ };
164
+ }
165
+ async getUSDCBalance(ownerAddr) {
166
+ const usdc = new Contract(this._usdcAddress, ERC20_ABI, this._provider);
167
+ return usdc.getFunction('balanceOf')(ownerAddr);
168
+ }
169
+ }
170
+ //# sourceMappingURL=escrow-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escrow-client.js","sourceRoot":"","sources":["../../../src/payments/evm/escrow-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { Wallet } from 'ethers';
2
+ import type { Identity } from '../../p2p/identity.js';
3
+ /**
4
+ * Derive a secp256k1 private key from the Ed25519 identity seed.
5
+ * Domain-separated to ensure the derived key is independent from the Ed25519 key.
6
+ *
7
+ * Derivation: keccak256(ed25519_seed || "evm-payment-key") → secp256k1 private key
8
+ *
9
+ * The Ed25519 seed (identity.privateKey) is 32 bytes. We append a fixed
10
+ * domain separator string to prevent the derived key from colliding with
11
+ * any other use of the same seed. keccak256 produces a 32-byte output
12
+ * which is a valid secp256k1 private key (the probability of hitting an
13
+ * invalid key is astronomically low: ~1/2^128).
14
+ */
15
+ export declare function identityToEvmWallet(identity: Identity): Wallet;
16
+ /**
17
+ * Get the EVM address (0x-prefixed hex) for a Antseed Identity.
18
+ * This is the address that appears on-chain as the buyer or seller.
19
+ */
20
+ export declare function identityToEvmAddress(identity: Identity): string;
21
+ //# sourceMappingURL=keypair.d.ts.map