@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,127 @@
1
+ import type { ProviderType, TokenCount } from '../types/metering.js';
2
+
3
+ /**
4
+ * Provider-specific bytes-to-token ratios.
5
+ *
6
+ * These are empirical averages. The actual ratio depends on the
7
+ * tokenizer and content, but for billing estimates they are
8
+ * sufficiently accurate (typically within 10-15%).
9
+ *
10
+ * Rationale:
11
+ * - English text averages ~4 bytes per token across most tokenizers
12
+ * - JSON overhead (keys, brackets, quotes) increases the ratio
13
+ * - Request bodies include system prompts, tool definitions, etc.
14
+ * - Response bodies include JSON wrapping around the actual content
15
+ */
16
+ export const BYTES_PER_TOKEN: Record<string, number> = {
17
+ anthropic: 4.2, // Claude tokenizer, JSON Messages API
18
+ openai: 4.0, // tiktoken cl100k_base, JSON Chat API
19
+ google: 4.1, // Gemini tokenizer, JSON generateContent API
20
+ moonshot: 4.0, // Similar to OpenAI tokenizer
21
+ default: 4.0, // Fallback for unknown providers
22
+ };
23
+
24
+ /**
25
+ * Minimum token estimate when Content-Length is missing or zero.
26
+ * LLM API requests always have some tokens (at least a system prompt).
27
+ */
28
+ export const MIN_REQUEST_TOKENS = 100;
29
+ export const MIN_RESPONSE_TOKENS = 10;
30
+
31
+ /**
32
+ * Estimate token count from HTTP Content-Length header value.
33
+ *
34
+ * @param contentLength - Value of Content-Length header (bytes), or null if absent
35
+ * @param provider - Provider type for selecting bytes-per-token ratio
36
+ * @param direction - Whether this is a request (input) or response (output)
37
+ * @returns Estimated token count
38
+ */
39
+ export function estimateTokensFromContentLength(
40
+ contentLength: number | null,
41
+ provider: ProviderType,
42
+ direction: 'request' | 'response'
43
+ ): number {
44
+ if (contentLength === null || contentLength === 0) {
45
+ return direction === 'request' ? MIN_REQUEST_TOKENS : MIN_RESPONSE_TOKENS;
46
+ }
47
+
48
+ const ratio = BYTES_PER_TOKEN[provider] ?? BYTES_PER_TOKEN['default']!;
49
+ return Math.max(
50
+ Math.ceil(contentLength / ratio),
51
+ direction === 'request' ? MIN_REQUEST_TOKENS : MIN_RESPONSE_TOKENS
52
+ );
53
+ }
54
+
55
+ /**
56
+ * Estimate token count from accumulated SSE stream chunk sizes.
57
+ * Used when Content-Length is not available (streaming responses).
58
+ *
59
+ * @param totalBytes - Total bytes received across all SSE chunks
60
+ * @param provider - Provider type
61
+ * @returns Estimated token count
62
+ */
63
+ export function estimateTokensFromStreamBytes(
64
+ totalBytes: number,
65
+ provider: ProviderType
66
+ ): number {
67
+ if (totalBytes === 0) return MIN_RESPONSE_TOKENS;
68
+
69
+ const ratio = BYTES_PER_TOKEN[provider] ?? BYTES_PER_TOKEN['default']!;
70
+ // SSE streams have additional overhead: "data: " prefix, newlines, event framing
71
+ // Approximately 15-20% of stream bytes are SSE overhead, not content
72
+ const contentBytes = totalBytes * 0.82;
73
+ return Math.max(Math.ceil(contentBytes / ratio), MIN_RESPONSE_TOKENS);
74
+ }
75
+
76
+ /**
77
+ * Build a complete TokenCount from request and response metadata.
78
+ *
79
+ * @param requestContentLength - Request Content-Length header value (bytes), or null
80
+ * @param responseContentLength - Response Content-Length header value (bytes), or null
81
+ * @param provider - Provider type
82
+ * @param isStreaming - Whether the response was an SSE stream
83
+ * @param streamTotalBytes - Total bytes from stream chunks (only if isStreaming)
84
+ */
85
+ export function estimateTokens(
86
+ requestContentLength: number | null,
87
+ responseContentLength: number | null,
88
+ provider: ProviderType,
89
+ isStreaming: boolean,
90
+ streamTotalBytes?: number
91
+ ): TokenCount {
92
+ const inputTokens = estimateTokensFromContentLength(
93
+ requestContentLength,
94
+ provider,
95
+ 'request'
96
+ );
97
+
98
+ let outputTokens: number;
99
+ let method: TokenCount['method'];
100
+ let confidence: TokenCount['confidence'];
101
+
102
+ if (isStreaming && streamTotalBytes !== undefined) {
103
+ outputTokens = estimateTokensFromStreamBytes(streamTotalBytes, provider);
104
+ method = 'chunk-accumulation';
105
+ confidence = 'medium';
106
+ } else if (responseContentLength !== null && responseContentLength > 0) {
107
+ outputTokens = estimateTokensFromContentLength(
108
+ responseContentLength,
109
+ provider,
110
+ 'response'
111
+ );
112
+ method = 'content-length';
113
+ confidence = 'high';
114
+ } else {
115
+ outputTokens = MIN_RESPONSE_TOKENS;
116
+ method = 'fallback';
117
+ confidence = 'low';
118
+ }
119
+
120
+ return {
121
+ inputTokens,
122
+ outputTokens,
123
+ totalTokens: inputTokens + outputTokens,
124
+ method,
125
+ confidence,
126
+ };
127
+ }
@@ -0,0 +1,236 @@
1
+ import type { UsageAggregate, SessionMetrics, ProviderType } from '../types/metering.js';
2
+
3
+ export type AggregationGranularity = 'daily' | 'weekly' | 'monthly';
4
+
5
+ /**
6
+ * Time period boundaries for aggregation.
7
+ */
8
+ export interface TimePeriod {
9
+ start: number; // ms since epoch
10
+ end: number; // ms since epoch
11
+ }
12
+
13
+ /**
14
+ * Aggregates session metrics into time-period summaries.
15
+ */
16
+ export class UsageAggregator {
17
+ /**
18
+ * Aggregate a list of session metrics into time-period buckets.
19
+ *
20
+ * @param sessions - Session metrics to aggregate
21
+ * @param granularity - Time period granularity
22
+ * @param topPeerCount - Number of top peers to include (default: 5)
23
+ * @returns Array of UsageAggregate, one per period that has data
24
+ */
25
+ aggregate(
26
+ sessions: SessionMetrics[],
27
+ granularity: AggregationGranularity,
28
+ topPeerCount: number = 5
29
+ ): UsageAggregate[] {
30
+ if (sessions.length === 0) return [];
31
+
32
+ // Group sessions by period
33
+ const buckets = new Map<string, SessionMetrics[]>();
34
+
35
+ for (const session of sessions) {
36
+ const period = this.getPeriod(session.startedAt, granularity);
37
+ const key = `${period.start}`;
38
+ const bucket = buckets.get(key);
39
+ if (bucket) {
40
+ bucket.push(session);
41
+ } else {
42
+ buckets.set(key, [session]);
43
+ }
44
+ }
45
+
46
+ // Build aggregates
47
+ const aggregates: UsageAggregate[] = [];
48
+
49
+ for (const [_key, bucketSessions] of buckets) {
50
+ const period = this.getPeriod(bucketSessions[0]!.startedAt, granularity);
51
+ aggregates.push(this.buildAggregate(bucketSessions, period, granularity, topPeerCount));
52
+ }
53
+
54
+ // Sort by period start
55
+ aggregates.sort((a, b) => a.periodStart - b.periodStart);
56
+
57
+ return aggregates;
58
+ }
59
+
60
+ /**
61
+ * Get the time period that a timestamp falls into.
62
+ */
63
+ getPeriod(timestamp: number, granularity: AggregationGranularity): TimePeriod {
64
+ const date = new Date(timestamp);
65
+
66
+ switch (granularity) {
67
+ case 'daily': {
68
+ const start = new Date(Date.UTC(
69
+ date.getUTCFullYear(),
70
+ date.getUTCMonth(),
71
+ date.getUTCDate()
72
+ ));
73
+ const end = new Date(Date.UTC(
74
+ date.getUTCFullYear(),
75
+ date.getUTCMonth(),
76
+ date.getUTCDate() + 1
77
+ ));
78
+ return { start: start.getTime(), end: end.getTime() };
79
+ }
80
+ case 'weekly': {
81
+ // Monday 00:00 UTC to next Monday 00:00 UTC
82
+ const dayOfWeek = date.getUTCDay();
83
+ // getUTCDay() returns 0 for Sunday, 1 for Monday, etc.
84
+ // We want Monday as the start, so offset: Monday=0, Tue=1, ..., Sun=6
85
+ const daysFromMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1;
86
+ const monday = new Date(Date.UTC(
87
+ date.getUTCFullYear(),
88
+ date.getUTCMonth(),
89
+ date.getUTCDate() - daysFromMonday
90
+ ));
91
+ const nextMonday = new Date(monday.getTime() + 7 * 24 * 60 * 60 * 1000);
92
+ return { start: monday.getTime(), end: nextMonday.getTime() };
93
+ }
94
+ case 'monthly': {
95
+ const start = new Date(Date.UTC(
96
+ date.getUTCFullYear(),
97
+ date.getUTCMonth(),
98
+ 1
99
+ ));
100
+ const end = new Date(Date.UTC(
101
+ date.getUTCFullYear(),
102
+ date.getUTCMonth() + 1,
103
+ 1
104
+ ));
105
+ return { start: start.getTime(), end: end.getTime() };
106
+ }
107
+ }
108
+ }
109
+
110
+ /**
111
+ * Get aggregates for a specific date range.
112
+ *
113
+ * @param sessions - All available session metrics
114
+ * @param startDate - Start of range (ms since epoch)
115
+ * @param endDate - End of range (ms since epoch)
116
+ * @param granularity - Bucket granularity
117
+ * @param topPeerCount - Number of top peers to include (default: 5)
118
+ */
119
+ aggregateRange(
120
+ sessions: SessionMetrics[],
121
+ startDate: number,
122
+ endDate: number,
123
+ granularity: AggregationGranularity,
124
+ topPeerCount: number = 5
125
+ ): UsageAggregate[] {
126
+ const filtered = sessions.filter(
127
+ (s) => s.startedAt >= startDate && s.startedAt < endDate
128
+ );
129
+ return this.aggregate(filtered, granularity, topPeerCount);
130
+ }
131
+
132
+ /**
133
+ * Get a single aggregate for all-time usage.
134
+ */
135
+ aggregateAll(sessions: SessionMetrics[]): UsageAggregate {
136
+ if (sessions.length === 0) {
137
+ return {
138
+ periodStart: 0,
139
+ periodEnd: 0,
140
+ granularity: 'monthly',
141
+ totalSessions: 0,
142
+ totalRequests: 0,
143
+ totalTokens: 0,
144
+ totalCostCents: 0,
145
+ byProvider: {},
146
+ topPeers: [],
147
+ };
148
+ }
149
+
150
+ let minStart = Infinity;
151
+ let maxEnd = -Infinity;
152
+
153
+ for (const s of sessions) {
154
+ if (s.startedAt < minStart) minStart = s.startedAt;
155
+ const end = s.endedAt ?? s.startedAt;
156
+ if (end > maxEnd) maxEnd = end;
157
+ }
158
+
159
+ return this.buildAggregate(
160
+ sessions,
161
+ { start: minStart, end: maxEnd },
162
+ 'monthly',
163
+ sessions.length // Include all peers in all-time view
164
+ );
165
+ }
166
+
167
+ /**
168
+ * Build a single UsageAggregate from a list of sessions.
169
+ */
170
+ private buildAggregate(
171
+ sessions: SessionMetrics[],
172
+ period: TimePeriod,
173
+ granularity: AggregationGranularity,
174
+ topPeerCount: number
175
+ ): UsageAggregate {
176
+ const byProvider: Record<ProviderType, { requests: number; tokens: number; costCents: number }> = {};
177
+ const peerMap = new Map<string, { requests: number; tokens: number; costCents: number }>();
178
+
179
+ let totalRequests = 0;
180
+ let totalTokens = 0;
181
+ let totalCostCents = 0;
182
+
183
+ for (const session of sessions) {
184
+ totalRequests += session.totalRequests;
185
+ totalTokens += session.totalTokens;
186
+ totalCostCents += session.totalCostCents;
187
+
188
+ // Provider breakdown
189
+ const providerEntry = byProvider[session.provider];
190
+ if (providerEntry) {
191
+ providerEntry.requests += session.totalRequests;
192
+ providerEntry.tokens += session.totalTokens;
193
+ providerEntry.costCents += session.totalCostCents;
194
+ } else {
195
+ byProvider[session.provider] = {
196
+ requests: session.totalRequests,
197
+ tokens: session.totalTokens,
198
+ costCents: session.totalCostCents,
199
+ };
200
+ }
201
+
202
+ // Peer breakdown (use sellerPeerId as the peer identifier)
203
+ const peerId = session.sellerPeerId;
204
+ const peerEntry = peerMap.get(peerId);
205
+ if (peerEntry) {
206
+ peerEntry.requests += session.totalRequests;
207
+ peerEntry.tokens += session.totalTokens;
208
+ peerEntry.costCents += session.totalCostCents;
209
+ } else {
210
+ peerMap.set(peerId, {
211
+ requests: session.totalRequests,
212
+ tokens: session.totalTokens,
213
+ costCents: session.totalCostCents,
214
+ });
215
+ }
216
+ }
217
+
218
+ // Sort peers by costCents descending, take top N
219
+ const topPeers = Array.from(peerMap.entries())
220
+ .map(([peerId, data]) => ({ peerId, ...data }))
221
+ .sort((a, b) => b.costCents - a.costCents)
222
+ .slice(0, topPeerCount);
223
+
224
+ return {
225
+ periodStart: period.start,
226
+ periodEnd: period.end,
227
+ granularity,
228
+ totalSessions: sessions.length,
229
+ totalRequests,
230
+ totalTokens,
231
+ totalCostCents,
232
+ byProvider,
233
+ topPeers,
234
+ };
235
+ }
236
+ }