@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,50 @@
1
+ import { MessageType, type FramedMessage } from "../types/protocol.js";
2
+ /**
3
+ * Frame layout (9 bytes header + payload):
4
+ * [0] u8 — message type
5
+ * [1..4] u32 — message ID (big-endian)
6
+ * [5..8] u32 — payload length (big-endian)
7
+ * [9..] raw — payload bytes
8
+ */
9
+ /** Encode a FramedMessage into a binary buffer. */
10
+ export declare function encodeFrame(msg: FramedMessage): Uint8Array;
11
+ /**
12
+ * Decode a single FramedMessage from a binary buffer.
13
+ * Returns the message and the number of bytes consumed.
14
+ * Returns null if the buffer doesn't contain a complete frame.
15
+ */
16
+ export declare function decodeFrame(data: Uint8Array): {
17
+ message: FramedMessage;
18
+ bytesConsumed: number;
19
+ } | null;
20
+ /**
21
+ * Streaming frame decoder that handles partial frames across
22
+ * multiple data chunks (e.g., from a DataChannel).
23
+ */
24
+ export declare class FrameDecoder {
25
+ private _buffer;
26
+ /** Feed new data and return any complete frames. */
27
+ feed(chunk: Uint8Array): FramedMessage[];
28
+ /** Reset the internal buffer. */
29
+ reset(): void;
30
+ /** Number of buffered bytes not yet decoded. */
31
+ get bufferedBytes(): number;
32
+ }
33
+ /** Handler function for a specific message type. */
34
+ export type MessageHandler = (msg: FramedMessage) => void | Promise<void>;
35
+ /**
36
+ * Message multiplexer — routes decoded frames to registered handlers.
37
+ */
38
+ export declare class MessageMux {
39
+ private _handlers;
40
+ private _defaultHandler;
41
+ /** Register a handler for a specific message type. */
42
+ on(type: MessageType, handler: MessageHandler): void;
43
+ /** Remove a handler for a specific message type. */
44
+ off(type: MessageType, handler: MessageHandler): void;
45
+ /** Set a default handler for unregistered message types. */
46
+ setDefaultHandler(handler: MessageHandler): void;
47
+ /** Dispatch a framed message to registered handlers. */
48
+ dispatch(msg: FramedMessage): Promise<void>;
49
+ }
50
+ //# sourceMappingURL=message-protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-protocol.d.ts","sourceRoot":"","sources":["../../src/p2p/message-protocol.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,KAAK,aAAa,EAGnB,MAAM,sBAAsB,CAAC;AAE9B;;;;;;GAMG;AAEH,mDAAmD;AACnD,wBAAgB,WAAW,CAAC,GAAG,EAAE,aAAa,GAAG,UAAU,CAgB1D;AAUD;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,UAAU,GACf;IAAE,OAAO,EAAE,aAAa,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA+B1D;AAED;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAiC;IAEhD,oDAAoD;IACpD,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,aAAa,EAAE;IA0BxC,iCAAiC;IACjC,KAAK,IAAI,IAAI;IAIb,gDAAgD;IAChD,IAAI,aAAa,IAAI,MAAM,CAE1B;CACF;AAED,oDAAoD;AACpD,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1E;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,SAAS,CAA4C;IAC7D,OAAO,CAAC,eAAe,CAA+B;IAEtD,sDAAsD;IACtD,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAMpD,oDAAoD;IACpD,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IASrD,4DAA4D;IAC5D,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAIhD,wDAAwD;IAClD,QAAQ,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAUlD"}
@@ -0,0 +1,134 @@
1
+ import { MessageType, FRAME_HEADER_SIZE, MAX_PAYLOAD_SIZE, } from "../types/protocol.js";
2
+ /**
3
+ * Frame layout (9 bytes header + payload):
4
+ * [0] u8 — message type
5
+ * [1..4] u32 — message ID (big-endian)
6
+ * [5..8] u32 — payload length (big-endian)
7
+ * [9..] raw — payload bytes
8
+ */
9
+ /** Encode a FramedMessage into a binary buffer. */
10
+ export function encodeFrame(msg) {
11
+ if (msg.payload.length > MAX_PAYLOAD_SIZE) {
12
+ throw new Error(`Payload too large: ${msg.payload.length} > ${MAX_PAYLOAD_SIZE}`);
13
+ }
14
+ const frame = new Uint8Array(FRAME_HEADER_SIZE + msg.payload.length);
15
+ const view = new DataView(frame.buffer);
16
+ view.setUint8(0, msg.type);
17
+ view.setUint32(1, msg.messageId);
18
+ view.setUint32(5, msg.payload.length);
19
+ frame.set(msg.payload, FRAME_HEADER_SIZE);
20
+ return frame;
21
+ }
22
+ const VALID_MESSAGE_TYPES = new Set(Object.values(MessageType).filter((v) => typeof v === "number"));
23
+ function isValidMessageType(value) {
24
+ return VALID_MESSAGE_TYPES.has(value);
25
+ }
26
+ /**
27
+ * Decode a single FramedMessage from a binary buffer.
28
+ * Returns the message and the number of bytes consumed.
29
+ * Returns null if the buffer doesn't contain a complete frame.
30
+ */
31
+ export function decodeFrame(data) {
32
+ if (data.length < FRAME_HEADER_SIZE) {
33
+ return null;
34
+ }
35
+ const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
36
+ const rawType = view.getUint8(0);
37
+ if (!isValidMessageType(rawType)) {
38
+ return null;
39
+ }
40
+ const type = rawType;
41
+ const messageId = view.getUint32(1);
42
+ const payloadLength = view.getUint32(5);
43
+ if (payloadLength > MAX_PAYLOAD_SIZE) {
44
+ throw new Error(`Payload length ${payloadLength} exceeds maximum ${MAX_PAYLOAD_SIZE}`);
45
+ }
46
+ const totalLength = FRAME_HEADER_SIZE + payloadLength;
47
+ if (data.length < totalLength) {
48
+ return null; // incomplete frame
49
+ }
50
+ const payload = data.slice(FRAME_HEADER_SIZE, totalLength);
51
+ return {
52
+ message: { type, messageId, payload },
53
+ bytesConsumed: totalLength,
54
+ };
55
+ }
56
+ /**
57
+ * Streaming frame decoder that handles partial frames across
58
+ * multiple data chunks (e.g., from a DataChannel).
59
+ */
60
+ export class FrameDecoder {
61
+ _buffer = new Uint8Array(0);
62
+ /** Feed new data and return any complete frames. */
63
+ feed(chunk) {
64
+ // Append chunk to buffer
65
+ const newBuffer = new Uint8Array(this._buffer.length + chunk.length);
66
+ newBuffer.set(this._buffer, 0);
67
+ newBuffer.set(chunk, this._buffer.length);
68
+ this._buffer = newBuffer;
69
+ const messages = [];
70
+ while (true) {
71
+ let result;
72
+ try {
73
+ result = decodeFrame(this._buffer);
74
+ }
75
+ catch {
76
+ this._buffer = new Uint8Array(0);
77
+ break;
78
+ }
79
+ if (!result)
80
+ break;
81
+ messages.push(result.message);
82
+ this._buffer = this._buffer.slice(result.bytesConsumed);
83
+ }
84
+ return messages;
85
+ }
86
+ /** Reset the internal buffer. */
87
+ reset() {
88
+ this._buffer = new Uint8Array(0);
89
+ }
90
+ /** Number of buffered bytes not yet decoded. */
91
+ get bufferedBytes() {
92
+ return this._buffer.length;
93
+ }
94
+ }
95
+ /**
96
+ * Message multiplexer — routes decoded frames to registered handlers.
97
+ */
98
+ export class MessageMux {
99
+ _handlers = new Map();
100
+ _defaultHandler = null;
101
+ /** Register a handler for a specific message type. */
102
+ on(type, handler) {
103
+ const existing = this._handlers.get(type) ?? [];
104
+ existing.push(handler);
105
+ this._handlers.set(type, existing);
106
+ }
107
+ /** Remove a handler for a specific message type. */
108
+ off(type, handler) {
109
+ const existing = this._handlers.get(type);
110
+ if (!existing)
111
+ return;
112
+ const idx = existing.indexOf(handler);
113
+ if (idx !== -1) {
114
+ existing.splice(idx, 1);
115
+ }
116
+ }
117
+ /** Set a default handler for unregistered message types. */
118
+ setDefaultHandler(handler) {
119
+ this._defaultHandler = handler;
120
+ }
121
+ /** Dispatch a framed message to registered handlers. */
122
+ async dispatch(msg) {
123
+ const handlers = this._handlers.get(msg.type);
124
+ if (handlers && handlers.length > 0) {
125
+ for (const handler of handlers) {
126
+ await handler(msg);
127
+ }
128
+ }
129
+ else if (this._defaultHandler) {
130
+ await this._defaultHandler(msg);
131
+ }
132
+ }
133
+ }
134
+ //# sourceMappingURL=message-protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-protocol.js","sourceRoot":"","sources":["../../src/p2p/message-protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ export interface NatMapping {
2
+ /** The internal port that was mapped. */
3
+ internalPort: number;
4
+ /** The external port on the router (usually same as internal). */
5
+ externalPort: number;
6
+ /** The external/public IP address. */
7
+ externalIp: string;
8
+ /** Protocol that was mapped. */
9
+ protocol: "TCP" | "UDP";
10
+ }
11
+ export interface NatTraversalResult {
12
+ /** Whether UPnP/NAT-PMP mapping succeeded. */
13
+ success: boolean;
14
+ /** External IP if discovered. */
15
+ externalIp: string | null;
16
+ /** Successfully created mappings. */
17
+ mappings: NatMapping[];
18
+ }
19
+ /**
20
+ * Automatic NAT traversal via UPnP and NAT-PMP.
21
+ *
22
+ * Requests port forwarding from the router so that inbound connections
23
+ * from the internet can reach the seller's signaling port. This is
24
+ * transparent to the caller — just call `mapPorts()` after binding
25
+ * and `cleanup()` on shutdown.
26
+ */
27
+ export declare class NatTraversal {
28
+ private _nat;
29
+ private _mappings;
30
+ private _externalIp;
31
+ private _destroyed;
32
+ /**
33
+ * Attempt to map the given ports via UPnP/NAT-PMP.
34
+ *
35
+ * @param ports - Array of { port, protocol } to map.
36
+ * @param timeoutMs - How long to wait before giving up (default 10s).
37
+ * @returns Result indicating success and discovered external IP.
38
+ */
39
+ mapPorts(ports: Array<{
40
+ port: number;
41
+ protocol: "TCP" | "UDP";
42
+ }>, timeoutMs?: number): Promise<NatTraversalResult>;
43
+ private _doMapping;
44
+ /** The external IP discovered during mapping, if any. */
45
+ get externalIp(): string | null;
46
+ /** All active port mappings. */
47
+ get mappings(): readonly NatMapping[];
48
+ /** Remove all port mappings and clean up. */
49
+ cleanup(): Promise<void>;
50
+ }
51
+ //# sourceMappingURL=nat-traversal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nat-traversal.d.ts","sourceRoot":"","sources":["../../src/p2p/nat-traversal.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,UAAU;IACzB,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,YAAY,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,QAAQ,EAAE,KAAK,GAAG,KAAK,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,8CAA8C;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,iCAAiC;IACjC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,qCAAqC;IACrC,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB;AAED;;;;;;;GAOG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,UAAU,CAAS;IAE3B;;;;;;OAMG;IACG,QAAQ,CACZ,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,KAAK,GAAG,KAAK,CAAA;KAAE,CAAC,EACvD,SAAS,SAAS,GACjB,OAAO,CAAC,kBAAkB,CAAC;YAiChB,UAAU;IA8CxB,yDAAyD;IACzD,IAAI,UAAU,IAAI,MAAM,GAAG,IAAI,CAE9B;IAED,gCAAgC;IAChC,IAAI,QAAQ,IAAI,SAAS,UAAU,EAAE,CAEpC;IAED,6CAA6C;IACvC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAyB/B"}
@@ -0,0 +1,135 @@
1
+ import NatAPI from "@silentbot1/nat-api";
2
+ import { debugLog, debugWarn } from "../utils/debug.js";
3
+ /**
4
+ * Automatic NAT traversal via UPnP and NAT-PMP.
5
+ *
6
+ * Requests port forwarding from the router so that inbound connections
7
+ * from the internet can reach the seller's signaling port. This is
8
+ * transparent to the caller — just call `mapPorts()` after binding
9
+ * and `cleanup()` on shutdown.
10
+ */
11
+ export class NatTraversal {
12
+ _nat = null;
13
+ _mappings = [];
14
+ _externalIp = null;
15
+ _destroyed = false;
16
+ /**
17
+ * Attempt to map the given ports via UPnP/NAT-PMP.
18
+ *
19
+ * @param ports - Array of { port, protocol } to map.
20
+ * @param timeoutMs - How long to wait before giving up (default 10s).
21
+ * @returns Result indicating success and discovered external IP.
22
+ */
23
+ async mapPorts(ports, timeoutMs = 10_000) {
24
+ this._nat = new NatAPI({
25
+ enablePMP: true,
26
+ enableUPNP: true,
27
+ description: "Antseed P2P",
28
+ ttl: 7200,
29
+ });
30
+ const result = {
31
+ success: false,
32
+ externalIp: null,
33
+ mappings: [],
34
+ };
35
+ // Race against timeout
36
+ try {
37
+ await Promise.race([
38
+ this._doMapping(ports, result),
39
+ rejectAfter(timeoutMs, "NAT traversal timed out"),
40
+ ]);
41
+ }
42
+ catch (err) {
43
+ // Timeout or error — return partial result
44
+ const msg = err instanceof Error ? err.message : String(err);
45
+ debugWarn(`[NAT] ${msg}`);
46
+ }
47
+ this._mappings = result.mappings;
48
+ this._externalIp = result.externalIp;
49
+ result.success = result.mappings.length > 0;
50
+ return result;
51
+ }
52
+ async _doMapping(ports, result) {
53
+ if (!this._nat)
54
+ return;
55
+ // Try to get external IP first
56
+ try {
57
+ const ip = await this._nat.externalIp();
58
+ if (ip) {
59
+ result.externalIp = ip;
60
+ debugLog(`[NAT] External IP: ${ip}`);
61
+ }
62
+ }
63
+ catch {
64
+ debugWarn("[NAT] Could not determine external IP");
65
+ }
66
+ // Map each port
67
+ for (const { port, protocol } of ports) {
68
+ try {
69
+ const mapped = await this._nat.map({
70
+ publicPort: port,
71
+ privatePort: port,
72
+ protocol,
73
+ description: `Antseed ${protocol}`,
74
+ });
75
+ if (mapped) {
76
+ const mapping = {
77
+ internalPort: port,
78
+ externalPort: port,
79
+ externalIp: result.externalIp ?? "",
80
+ protocol,
81
+ };
82
+ result.mappings.push(mapping);
83
+ debugLog(`[NAT] Mapped ${protocol} port ${port}`);
84
+ }
85
+ else {
86
+ debugWarn(`[NAT] Failed to map ${protocol} port ${port}`);
87
+ }
88
+ }
89
+ catch (err) {
90
+ const msg = err instanceof Error ? err.message : String(err);
91
+ debugWarn(`[NAT] Error mapping ${protocol} port ${port}: ${msg}`);
92
+ }
93
+ }
94
+ }
95
+ /** The external IP discovered during mapping, if any. */
96
+ get externalIp() {
97
+ return this._externalIp;
98
+ }
99
+ /** All active port mappings. */
100
+ get mappings() {
101
+ return this._mappings;
102
+ }
103
+ /** Remove all port mappings and clean up. */
104
+ async cleanup() {
105
+ if (this._destroyed || !this._nat)
106
+ return;
107
+ this._destroyed = true;
108
+ for (const m of this._mappings) {
109
+ try {
110
+ await this._nat.unmap({
111
+ publicPort: m.externalPort,
112
+ privatePort: m.internalPort,
113
+ protocol: m.protocol,
114
+ });
115
+ }
116
+ catch {
117
+ // Best-effort cleanup
118
+ }
119
+ }
120
+ try {
121
+ await this._nat.destroy();
122
+ }
123
+ catch {
124
+ // Best-effort cleanup
125
+ }
126
+ this._mappings = [];
127
+ this._nat = null;
128
+ }
129
+ }
130
+ function rejectAfter(ms, message) {
131
+ return new Promise((_, reject) => {
132
+ setTimeout(() => reject(new Error(message)), ms);
133
+ });
134
+ }
135
+ //# sourceMappingURL=nat-traversal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nat-traversal.js","sourceRoot":"","sources":["../../src/p2p/nat-traversal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { SessionLockAuthPayload, SessionLockConfirmPayload, SessionLockRejectPayload, SellerReceiptPayload, BuyerAckPayload, SessionEndPayload, TopUpRequestPayload, TopUpAuthPayload, DisputeNotifyPayload } from '../types/protocol.js';
2
+ export declare function encodeSessionLockAuth(payload: SessionLockAuthPayload): Uint8Array;
3
+ export declare function encodeSessionLockConfirm(payload: SessionLockConfirmPayload): Uint8Array;
4
+ export declare function encodeSessionLockReject(payload: SessionLockRejectPayload): Uint8Array;
5
+ export declare function encodeSellerReceipt(payload: SellerReceiptPayload): Uint8Array;
6
+ export declare function encodeBuyerAck(payload: BuyerAckPayload): Uint8Array;
7
+ export declare function encodeSessionEnd(payload: SessionEndPayload): Uint8Array;
8
+ export declare function encodeTopUpRequest(payload: TopUpRequestPayload): Uint8Array;
9
+ export declare function encodeTopUpAuth(payload: TopUpAuthPayload): Uint8Array;
10
+ export declare function encodeDisputeNotify(payload: DisputeNotifyPayload): Uint8Array;
11
+ export declare function decodeSessionLockAuth(data: Uint8Array): SessionLockAuthPayload;
12
+ export declare function decodeSessionLockConfirm(data: Uint8Array): SessionLockConfirmPayload;
13
+ export declare function decodeSessionLockReject(data: Uint8Array): SessionLockRejectPayload;
14
+ export declare function decodeSellerReceipt(data: Uint8Array): SellerReceiptPayload;
15
+ export declare function decodeBuyerAck(data: Uint8Array): BuyerAckPayload;
16
+ export declare function decodeSessionEnd(data: Uint8Array): SessionEndPayload;
17
+ export declare function decodeTopUpRequest(data: Uint8Array): TopUpRequestPayload;
18
+ export declare function decodeTopUpAuth(data: Uint8Array): TopUpAuthPayload;
19
+ export declare function decodeDisputeNotify(data: Uint8Array): DisputeNotifyPayload;
20
+ //# sourceMappingURL=payment-codec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment-codec.d.ts","sourceRoot":"","sources":["../../src/p2p/payment-codec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,sBAAsB,CAAC;AAiC9B,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,UAAU,CAEjF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,yBAAyB,GAAG,UAAU,CAEvF;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,wBAAwB,GAAG,UAAU,CAErF;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,UAAU,CAE7E;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,UAAU,CAEnE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,UAAU,CAEvE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,UAAU,CAE3E;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,UAAU,CAErE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,UAAU,CAE7E;AAID,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,UAAU,GAAG,sBAAsB,CAO9E;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,GAAG,yBAAyB,CAMpF;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,UAAU,GAAG,wBAAwB,CAMlF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,oBAAoB,CAS1E;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,eAAe,CAQhE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,iBAAiB,CASpE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,mBAAmB,CAQxE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,gBAAgB,CAOlE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,oBAAoB,CAO1E"}
@@ -0,0 +1,130 @@
1
+ const encoder = new TextEncoder();
2
+ const decoder = new TextDecoder();
3
+ // --- Validation helpers ---
4
+ function parseJson(data) {
5
+ const raw = JSON.parse(decoder.decode(data));
6
+ if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) {
7
+ throw new Error('Expected JSON object');
8
+ }
9
+ return raw;
10
+ }
11
+ function requireString(obj, field) {
12
+ const val = obj[field];
13
+ if (typeof val !== 'string' || val.length === 0) {
14
+ throw new Error(`Missing or invalid string field: ${field}`);
15
+ }
16
+ return val;
17
+ }
18
+ function requireNumber(obj, field) {
19
+ const val = obj[field];
20
+ if (typeof val !== 'number' || !Number.isFinite(val)) {
21
+ throw new Error(`Missing or invalid number field: ${field}`);
22
+ }
23
+ return val;
24
+ }
25
+ // --- Encoders ---
26
+ export function encodeSessionLockAuth(payload) {
27
+ return encoder.encode(JSON.stringify(payload));
28
+ }
29
+ export function encodeSessionLockConfirm(payload) {
30
+ return encoder.encode(JSON.stringify(payload));
31
+ }
32
+ export function encodeSessionLockReject(payload) {
33
+ return encoder.encode(JSON.stringify(payload));
34
+ }
35
+ export function encodeSellerReceipt(payload) {
36
+ return encoder.encode(JSON.stringify(payload));
37
+ }
38
+ export function encodeBuyerAck(payload) {
39
+ return encoder.encode(JSON.stringify(payload));
40
+ }
41
+ export function encodeSessionEnd(payload) {
42
+ return encoder.encode(JSON.stringify(payload));
43
+ }
44
+ export function encodeTopUpRequest(payload) {
45
+ return encoder.encode(JSON.stringify(payload));
46
+ }
47
+ export function encodeTopUpAuth(payload) {
48
+ return encoder.encode(JSON.stringify(payload));
49
+ }
50
+ export function encodeDisputeNotify(payload) {
51
+ return encoder.encode(JSON.stringify(payload));
52
+ }
53
+ // --- Decoders (with runtime validation) ---
54
+ export function decodeSessionLockAuth(data) {
55
+ const obj = parseJson(data);
56
+ return {
57
+ sessionId: requireString(obj, 'sessionId'),
58
+ lockedAmount: requireString(obj, 'lockedAmount'),
59
+ buyerSig: requireString(obj, 'buyerSig'),
60
+ };
61
+ }
62
+ export function decodeSessionLockConfirm(data) {
63
+ const obj = parseJson(data);
64
+ return {
65
+ sessionId: requireString(obj, 'sessionId'),
66
+ txSignature: requireString(obj, 'txSignature'),
67
+ };
68
+ }
69
+ export function decodeSessionLockReject(data) {
70
+ const obj = parseJson(data);
71
+ return {
72
+ sessionId: requireString(obj, 'sessionId'),
73
+ reason: requireString(obj, 'reason'),
74
+ };
75
+ }
76
+ export function decodeSellerReceipt(data) {
77
+ const obj = parseJson(data);
78
+ return {
79
+ sessionId: requireString(obj, 'sessionId'),
80
+ runningTotal: requireString(obj, 'runningTotal'),
81
+ requestCount: requireNumber(obj, 'requestCount'),
82
+ responseHash: requireString(obj, 'responseHash'),
83
+ sellerSig: requireString(obj, 'sellerSig'),
84
+ };
85
+ }
86
+ export function decodeBuyerAck(data) {
87
+ const obj = parseJson(data);
88
+ return {
89
+ sessionId: requireString(obj, 'sessionId'),
90
+ runningTotal: requireString(obj, 'runningTotal'),
91
+ requestCount: requireNumber(obj, 'requestCount'),
92
+ buyerSig: requireString(obj, 'buyerSig'),
93
+ };
94
+ }
95
+ export function decodeSessionEnd(data) {
96
+ const obj = parseJson(data);
97
+ return {
98
+ sessionId: requireString(obj, 'sessionId'),
99
+ runningTotal: requireString(obj, 'runningTotal'),
100
+ requestCount: requireNumber(obj, 'requestCount'),
101
+ score: requireNumber(obj, 'score'),
102
+ buyerSig: requireString(obj, 'buyerSig'),
103
+ };
104
+ }
105
+ export function decodeTopUpRequest(data) {
106
+ const obj = parseJson(data);
107
+ return {
108
+ sessionId: requireString(obj, 'sessionId'),
109
+ additionalAmount: requireString(obj, 'additionalAmount'),
110
+ currentRunningTotal: requireString(obj, 'currentRunningTotal'),
111
+ currentLockedAmount: requireString(obj, 'currentLockedAmount'),
112
+ };
113
+ }
114
+ export function decodeTopUpAuth(data) {
115
+ const obj = parseJson(data);
116
+ return {
117
+ sessionId: requireString(obj, 'sessionId'),
118
+ additionalAmount: requireString(obj, 'additionalAmount'),
119
+ buyerSig: requireString(obj, 'buyerSig'),
120
+ };
121
+ }
122
+ export function decodeDisputeNotify(data) {
123
+ const obj = parseJson(data);
124
+ return {
125
+ sessionId: requireString(obj, 'sessionId'),
126
+ reason: requireString(obj, 'reason'),
127
+ txSignature: requireString(obj, 'txSignature'),
128
+ };
129
+ }
130
+ //# sourceMappingURL=payment-codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment-codec.js","sourceRoot":"","sources":["../../src/p2p/payment-codec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { PeerConnection } from './connection-manager.js';
2
+ import type { SessionLockAuthPayload, SessionLockConfirmPayload, SessionLockRejectPayload, SellerReceiptPayload, BuyerAckPayload, SessionEndPayload, TopUpRequestPayload, TopUpAuthPayload, DisputeNotifyPayload } from '../types/protocol.js';
3
+ import type { FramedMessage } from '../types/protocol.js';
4
+ export type PaymentMessageHandler<T> = (payload: T) => void | Promise<void>;
5
+ /**
6
+ * Multiplexes bilateral payment messages over a PeerConnection.
7
+ * Register handlers for each message type, then call handleFrame()
8
+ * when a payment-range frame arrives.
9
+ */
10
+ export declare class PaymentMux {
11
+ private _connection;
12
+ private _messageIdCounter;
13
+ private _onSessionLockAuth?;
14
+ private _onSessionLockConfirm?;
15
+ private _onSessionLockReject?;
16
+ private _onSellerReceipt?;
17
+ private _onBuyerAck?;
18
+ private _onSessionEnd?;
19
+ private _onTopUpRequest?;
20
+ private _onTopUpAuth?;
21
+ private _onDisputeNotify?;
22
+ constructor(connection: PeerConnection);
23
+ onSessionLockAuth(handler: PaymentMessageHandler<SessionLockAuthPayload>): void;
24
+ onSessionLockConfirm(handler: PaymentMessageHandler<SessionLockConfirmPayload>): void;
25
+ onSessionLockReject(handler: PaymentMessageHandler<SessionLockRejectPayload>): void;
26
+ onSellerReceipt(handler: PaymentMessageHandler<SellerReceiptPayload>): void;
27
+ onBuyerAck(handler: PaymentMessageHandler<BuyerAckPayload>): void;
28
+ onSessionEnd(handler: PaymentMessageHandler<SessionEndPayload>): void;
29
+ onTopUpRequest(handler: PaymentMessageHandler<TopUpRequestPayload>): void;
30
+ onTopUpAuth(handler: PaymentMessageHandler<TopUpAuthPayload>): void;
31
+ onDisputeNotify(handler: PaymentMessageHandler<DisputeNotifyPayload>): void;
32
+ sendSessionLockAuth(payload: SessionLockAuthPayload): void;
33
+ sendSessionLockConfirm(payload: SessionLockConfirmPayload): void;
34
+ sendSessionLockReject(payload: SessionLockRejectPayload): void;
35
+ sendSellerReceipt(payload: SellerReceiptPayload): void;
36
+ sendBuyerAck(payload: BuyerAckPayload): void;
37
+ sendSessionEnd(payload: SessionEndPayload): void;
38
+ sendTopUpRequest(payload: TopUpRequestPayload): void;
39
+ sendTopUpAuth(payload: TopUpAuthPayload): void;
40
+ sendDisputeNotify(payload: DisputeNotifyPayload): void;
41
+ /**
42
+ * Returns true if this frame is a payment message and was handled.
43
+ */
44
+ handleFrame(frame: FramedMessage): Promise<boolean>;
45
+ /** Check if a message type is in the payment range (0x50-0x5F). */
46
+ static isPaymentMessage(type: number): boolean;
47
+ private _send;
48
+ }
49
+ //# sourceMappingURL=payment-mux.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment-mux.d.ts","sourceRoot":"","sources":["../../src/p2p/payment-mux.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,KAAK,EACV,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,MAAM,MAAM,qBAAqB,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5E;;;;GAIG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,iBAAiB,CAAK;IAG9B,OAAO,CAAC,kBAAkB,CAAC,CAAgD;IAC3E,OAAO,CAAC,qBAAqB,CAAC,CAAmD;IACjF,OAAO,CAAC,oBAAoB,CAAC,CAAkD;IAC/E,OAAO,CAAC,gBAAgB,CAAC,CAA8C;IACvE,OAAO,CAAC,WAAW,CAAC,CAAyC;IAC7D,OAAO,CAAC,aAAa,CAAC,CAA2C;IACjE,OAAO,CAAC,eAAe,CAAC,CAA6C;IACrE,OAAO,CAAC,YAAY,CAAC,CAA0C;IAC/D,OAAO,CAAC,gBAAgB,CAAC,CAA8C;gBAE3D,UAAU,EAAE,cAAc;IAKtC,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,CAAC,sBAAsB,CAAC,GAAG,IAAI;IAG/E,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,CAAC,yBAAyB,CAAC,GAAG,IAAI;IAGrF,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,CAAC,wBAAwB,CAAC,GAAG,IAAI;IAGnF,eAAe,CAAC,OAAO,EAAE,qBAAqB,CAAC,oBAAoB,CAAC,GAAG,IAAI;IAG3E,UAAU,CAAC,OAAO,EAAE,qBAAqB,CAAC,eAAe,CAAC,GAAG,IAAI;IAGjE,YAAY,CAAC,OAAO,EAAE,qBAAqB,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAGrE,cAAc,CAAC,OAAO,EAAE,qBAAqB,CAAC,mBAAmB,CAAC,GAAG,IAAI;IAGzE,WAAW,CAAC,OAAO,EAAE,qBAAqB,CAAC,gBAAgB,CAAC,GAAG,IAAI;IAGnE,eAAe,CAAC,OAAO,EAAE,qBAAqB,CAAC,oBAAoB,CAAC,GAAG,IAAI;IAK3E,mBAAmB,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI;IAG1D,sBAAsB,CAAC,OAAO,EAAE,yBAAyB,GAAG,IAAI;IAGhE,qBAAqB,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI;IAG9D,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI;IAGtD,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAG5C,cAAc,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAGhD,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAGpD,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAG9C,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI;IAKtD;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAkCzD,mEAAmE;IACnE,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI9C,OAAO,CAAC,KAAK;CAQd"}