@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,75 @@
1
+ /**
2
+ * In-memory search index for cached peer profiles.
3
+ */
4
+ export class ProfileSearchIndex {
5
+ profiles = new Map();
6
+ addProfile(profile) {
7
+ this.profiles.set(profile.peerId, profile);
8
+ }
9
+ removeProfile(peerId) {
10
+ this.profiles.delete(peerId);
11
+ }
12
+ getProfile(peerId) {
13
+ return this.profiles.get(peerId) ?? null;
14
+ }
15
+ getAllProfiles() {
16
+ return Array.from(this.profiles.values());
17
+ }
18
+ /**
19
+ * Search profiles with relevance scoring.
20
+ */
21
+ search(query) {
22
+ const results = [];
23
+ for (const profile of this.profiles.values()) {
24
+ let score = 0;
25
+ // Filter by capability (hard filter)
26
+ if (query.capability) {
27
+ if (!profile.capabilities.includes(query.capability))
28
+ continue;
29
+ score += 10;
30
+ }
31
+ // Filter by region (boost score)
32
+ if (query.region) {
33
+ if (profile.region.toLowerCase() === query.region.toLowerCase()) {
34
+ score += 5;
35
+ }
36
+ }
37
+ // Tag matching (boost score)
38
+ if (query.tags && query.tags.length > 0) {
39
+ const profileTags = new Set(profile.tags.map(t => t.toLowerCase()));
40
+ let tagMatches = 0;
41
+ for (const tag of query.tags) {
42
+ if (profileTags.has(tag.toLowerCase())) {
43
+ tagMatches++;
44
+ }
45
+ }
46
+ if (tagMatches > 0) {
47
+ score += tagMatches * 3;
48
+ }
49
+ }
50
+ // Text search in name and description
51
+ if (query.text) {
52
+ const text = query.text.toLowerCase();
53
+ if (profile.displayName.toLowerCase().includes(text)) {
54
+ score += 8;
55
+ }
56
+ if (profile.description.toLowerCase().includes(text)) {
57
+ score += 4;
58
+ }
59
+ if (profile.tags.some(t => t.toLowerCase().includes(text))) {
60
+ score += 2;
61
+ }
62
+ }
63
+ if (score > 0) {
64
+ results.push({ profile, relevanceScore: score });
65
+ }
66
+ }
67
+ // Sort by relevance (descending)
68
+ results.sort((a, b) => b.relevanceScore - a.relevanceScore);
69
+ return results;
70
+ }
71
+ get size() {
72
+ return this.profiles.size;
73
+ }
74
+ }
75
+ //# sourceMappingURL=profile-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile-search.js","sourceRoot":"","sources":["../../src/discovery/profile-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { BaseEscrowClient } from "../payments/evm/escrow-client.js";
2
+ import type { PeerMetadata } from "./peer-metadata.js";
3
+ export interface ReputationVerification {
4
+ /** Whether the claimed reputation matches on-chain data. */
5
+ valid: boolean;
6
+ /** The actual on-chain reputation score (weighted average). */
7
+ actualReputation: number;
8
+ /** The actual on-chain session count. */
9
+ actualSessionCount: number;
10
+ /** The actual on-chain dispute count. */
11
+ actualDisputeCount: number;
12
+ /** The claimed on-chain reputation score from metadata. */
13
+ claimedReputation?: number;
14
+ /** The claimed on-chain session count from metadata. */
15
+ claimedSessionCount?: number;
16
+ /** The claimed on-chain dispute count from metadata. */
17
+ claimedDisputeCount?: number;
18
+ }
19
+ /**
20
+ * Verify a peer's claimed on-chain reputation against the Base contract.
21
+ * Queries the escrow contract using the peer's evmAddress and compares
22
+ * claimed vs actual reputation values.
23
+ */
24
+ export declare function verifyReputation(escrowClient: BaseEscrowClient, metadata: PeerMetadata): Promise<ReputationVerification>;
25
+ //# sourceMappingURL=reputation-verifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reputation-verifier.d.ts","sourceRoot":"","sources":["../../src/discovery/reputation-verifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,sBAAsB;IACrC,4DAA4D;IAC5D,KAAK,EAAE,OAAO,CAAC;IACf,+DAA+D;IAC/D,gBAAgB,EAAE,MAAM,CAAC;IACzB,yCAAyC;IACzC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,yCAAyC;IACzC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,2DAA2D;IAC3D,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,wDAAwD;IACxD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,wDAAwD;IACxD,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,gBAAgB,EAC9B,QAAQ,EAAE,YAAY,GACrB,OAAO,CAAC,sBAAsB,CAAC,CAyBjC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Verify a peer's claimed on-chain reputation against the Base contract.
3
+ * Queries the escrow contract using the peer's evmAddress and compares
4
+ * claimed vs actual reputation values.
5
+ */
6
+ export async function verifyReputation(escrowClient, metadata) {
7
+ if (!metadata.evmAddress) {
8
+ throw new Error("Metadata does not contain an evmAddress");
9
+ }
10
+ const reputation = await escrowClient.getReputation(metadata.evmAddress);
11
+ const actualReputation = reputation.weightedAverage;
12
+ const actualSessionCount = reputation.sessionCount;
13
+ const actualDisputeCount = reputation.disputeCount;
14
+ const valid = metadata.onChainReputation === actualReputation &&
15
+ metadata.onChainSessionCount === actualSessionCount &&
16
+ metadata.onChainDisputeCount === actualDisputeCount;
17
+ return {
18
+ valid,
19
+ actualReputation,
20
+ actualSessionCount,
21
+ actualDisputeCount,
22
+ claimedReputation: metadata.onChainReputation,
23
+ claimedSessionCount: metadata.onChainSessionCount,
24
+ claimedDisputeCount: metadata.onChainDisputeCount,
25
+ };
26
+ }
27
+ //# sourceMappingURL=reputation-verifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reputation-verifier.js","sourceRoot":"","sources":["../../src/discovery/reputation-verifier.ts"],"names":[],"mappings":"AAoBA;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,YAA8B,EAC9B,QAAsB;IAEtB,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAEzE,MAAM,gBAAgB,GAAG,UAAU,CAAC,eAAe,CAAC;IACpD,MAAM,kBAAkB,GAAG,UAAU,CAAC,YAAY,CAAC;IACnD,MAAM,kBAAkB,GAAG,UAAU,CAAC,YAAY,CAAC;IAEnD,MAAM,KAAK,GACT,QAAQ,CAAC,iBAAiB,KAAK,gBAAgB;QAC/C,QAAQ,CAAC,mBAAmB,KAAK,kBAAkB;QACnD,QAAQ,CAAC,mBAAmB,KAAK,kBAAkB,CAAC;IAEtD,OAAO;QACL,KAAK;QACL,gBAAgB;QAChB,kBAAkB;QAClB,kBAAkB;QAClB,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB;QAC7C,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB;QACjD,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB;KAClD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,37 @@
1
+ export { AntseedNode, type NodeConfig, type BuyerPaymentConfig, type NodePaymentsConfig } from './node.js';
2
+ export type { Provider, TaskRequest, TaskEvent, SkillRequest, SkillResponse } from './interfaces/seller-provider.js';
3
+ export type { Router } from './interfaces/buyer-router.js';
4
+ export * from './types/index.js';
5
+ export { loadOrCreateIdentity, type Identity } from './p2p/identity.js';
6
+ export { DHTNode, DEFAULT_DHT_CONFIG } from './discovery/dht-node.js';
7
+ export { OFFICIAL_BOOTSTRAP_NODES, mergeBootstrapNodes, toBootstrapConfig } from './discovery/bootstrap.js';
8
+ export { type PeerMetadata, type ProviderAnnouncement } from './discovery/peer-metadata.js';
9
+ export { MetadataServer, type MetadataServerConfig } from './discovery/metadata-server.js';
10
+ export { MeteringStorage } from './metering/storage.js';
11
+ export { BalanceManager } from './payments/balance-manager.js';
12
+ export { BaseEscrowClient, type BaseEscrowConfig } from './payments/evm/escrow-client.js';
13
+ export { identityToEvmWallet, identityToEvmAddress } from './payments/evm/keypair.js';
14
+ export { NatTraversal, type NatMapping, type NatTraversalResult } from './p2p/nat-traversal.js';
15
+ export { BuyerPaymentManager } from './payments/buyer-payment-manager.js';
16
+ export type { BuyerSessionState, BuyerSessionStatus } from './payments/buyer-payment-manager.js';
17
+ export { ProxyMux } from './proxy/proxy-mux.js';
18
+ export { resolveProvider } from './proxy/provider-detection.js';
19
+ export { DefaultRouter, type DefaultRouterConfig } from './routing/default-router.js';
20
+ export type { AntseedPlugin, AntseedProviderPlugin, AntseedRouterPlugin, PluginConfigKey, ConfigField } from './interfaces/plugin.js';
21
+ export { ProfileManager } from './discovery/profile-manager.js';
22
+ export type { PeerProfile, ProfileCapability } from './types/peer-profile.js';
23
+ export { TrustScoreEngine } from './reputation/trust-engine.js';
24
+ export { UptimeTracker } from './reputation/uptime-tracker.js';
25
+ export { computeTrustScore, DEFAULT_TRUST_WEIGHTS } from './reputation/trust-score.js';
26
+ export type { TrustScore, TrustComponents } from './reputation/trust-score.js';
27
+ export type { UptimeWindow, PeerUptimeRecord } from './reputation/uptime-tracker.js';
28
+ export { ReportManager } from './reputation/report-manager.js';
29
+ export type { PeerReport, ReportReason, ReportEvidence, ReportStatus } from './types/report.js';
30
+ export { RatingManager } from './reputation/rating-manager.js';
31
+ export type { PeerRating, RatingDimension, AggregateRating } from './types/rating.js';
32
+ export { ProfileSearchIndex } from './discovery/profile-search.js';
33
+ export type { ProfileSearchQuery, ProfileSearchResult } from './discovery/profile-search.js';
34
+ export { encryptValue, decryptValue, deriveMachineKey, generateSalt } from './config/encryption.js';
35
+ export { loadPluginConfig, savePluginConfig, addInstance, removeInstance, getInstance, getInstances, updateInstanceConfig, } from './config/plugin-config-manager.js';
36
+ export { loadPluginModule, loadAllPlugins, type LoadedProvider, type LoadedRouter, } from './config/plugin-loader.js';
37
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,32 @@
1
+ // Main facade
2
+ export { AntseedNode } from './node.js';
3
+ // Types (re-export everything)
4
+ export * from './types/index.js';
5
+ // Submodule re-exports (commonly used)
6
+ export { loadOrCreateIdentity } from './p2p/identity.js';
7
+ export { DHTNode, DEFAULT_DHT_CONFIG } from './discovery/dht-node.js';
8
+ export { OFFICIAL_BOOTSTRAP_NODES, mergeBootstrapNodes, toBootstrapConfig } from './discovery/bootstrap.js';
9
+ export { MetadataServer } from './discovery/metadata-server.js';
10
+ export { MeteringStorage } from './metering/storage.js';
11
+ export { BalanceManager } from './payments/balance-manager.js';
12
+ export { BaseEscrowClient } from './payments/evm/escrow-client.js';
13
+ export { identityToEvmWallet, identityToEvmAddress } from './payments/evm/keypair.js';
14
+ export { NatTraversal } from './p2p/nat-traversal.js';
15
+ export { BuyerPaymentManager } from './payments/buyer-payment-manager.js';
16
+ export { ProxyMux } from './proxy/proxy-mux.js';
17
+ export { resolveProvider } from './proxy/provider-detection.js';
18
+ export { DefaultRouter } from './routing/default-router.js';
19
+ export { ProfileManager } from './discovery/profile-manager.js';
20
+ // Reputation
21
+ export { TrustScoreEngine } from './reputation/trust-engine.js';
22
+ export { UptimeTracker } from './reputation/uptime-tracker.js';
23
+ export { computeTrustScore, DEFAULT_TRUST_WEIGHTS } from './reputation/trust-score.js';
24
+ export { ReportManager } from './reputation/report-manager.js';
25
+ export { RatingManager } from './reputation/rating-manager.js';
26
+ // Profile search
27
+ export { ProfileSearchIndex } from './discovery/profile-search.js';
28
+ // Plugin config & loading
29
+ export { encryptValue, decryptValue, deriveMachineKey, generateSalt } from './config/encryption.js';
30
+ export { loadPluginConfig, savePluginConfig, addInstance, removeInstance, getInstance, getInstances, updateInstanceConfig, } from './config/plugin-config-manager.js';
31
+ export { loadPluginModule, loadAllPlugins, } from './config/plugin-loader.js';
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EAAE,WAAW,EAAqE,MAAM,WAAW,CAAC;AAI3G,+BAA+B;AAC/B,cAAc,kBAAkB,CAAC;AAEjC,uCAAuC;AACvC,OAAO,EAAE,oBAAoB,EAAiB,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE5G,OAAO,EAAE,cAAc,EAA6B,MAAM,gCAAgC,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAyB,MAAM,iCAAiC,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtF,OAAO,EAAE,YAAY,EAA4C,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE1E,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,aAAa,EAA4B,MAAM,6BAA6B,CAAC;AAGtF,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGhE,aAAa;AACb,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAGvF,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAG/D,iBAAiB;AACjB,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGnE,0BAA0B;AAC1B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACnG,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,WAAW,EACX,YAAY,EACZ,oBAAoB,GACrB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EACL,gBAAgB,EAChB,cAAc,GAGf,MAAM,2BAA2B,CAAA"}
@@ -0,0 +1,21 @@
1
+ import type { PeerInfo } from '../types/peer.js';
2
+ import type { SerializedHttpRequest } from '../types/http.js';
3
+ /**
4
+ * Interface that buyer nodes implement for peer selection.
5
+ *
6
+ * The SDK discovers available sellers via DHT. Your router decides
7
+ * which seller to send each request to based on price, latency,
8
+ * reputation, capacity, or any custom logic.
9
+ *
10
+ * If you don't provide a router, the SDK uses a default that selects
11
+ * the cheapest peer with reputation above a minimum threshold.
12
+ */
13
+ export interface Router {
14
+ selectPeer(req: SerializedHttpRequest, peers: PeerInfo[]): PeerInfo | null;
15
+ onResult(peer: PeerInfo, result: {
16
+ success: boolean;
17
+ latencyMs: number;
18
+ tokens: number;
19
+ }): void;
20
+ }
21
+ //# sourceMappingURL=buyer-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buyer-router.d.ts","sourceRoot":"","sources":["../../src/interfaces/buyer-router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAE9D;;;;;;;;;GASG;AACH,MAAM,WAAW,MAAM;IACrB,UAAU,CAAC,GAAG,EAAE,qBAAqB,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,QAAQ,GAAG,IAAI,CAAC;IAC3E,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE;QAC/B,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,IAAI,CAAC;CACV"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=buyer-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buyer-router.js","sourceRoot":"","sources":["../../src/interfaces/buyer-router.ts"],"names":[],"mappings":""}
@@ -0,0 +1,31 @@
1
+ import type { Provider } from './seller-provider.js';
2
+ import type { Router } from './buyer-router.js';
3
+ export interface ConfigField {
4
+ key: string;
5
+ label: string;
6
+ type: 'string' | 'number' | 'boolean' | 'secret' | 'string[]';
7
+ required?: boolean;
8
+ default?: unknown;
9
+ description?: string;
10
+ }
11
+ /** @deprecated Use ConfigField instead */
12
+ export type PluginConfigKey = ConfigField;
13
+ export interface AntseedPluginBase {
14
+ name: string;
15
+ displayName: string;
16
+ version: string;
17
+ description: string;
18
+ configSchema?: ConfigField[];
19
+ /** @deprecated Use configSchema instead */
20
+ configKeys?: ConfigField[];
21
+ }
22
+ export interface AntseedProviderPlugin extends AntseedPluginBase {
23
+ type: 'provider';
24
+ createProvider(config: Record<string, string>): Provider | Promise<Provider>;
25
+ }
26
+ export interface AntseedRouterPlugin extends AntseedPluginBase {
27
+ type: 'router';
28
+ createRouter(config: Record<string, string>): Router | Promise<Router>;
29
+ }
30
+ export type AntseedPlugin = AntseedProviderPlugin | AntseedRouterPlugin;
31
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/interfaces/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE/C,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAA;IAC7D,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,0CAA0C;AAC1C,MAAM,MAAM,eAAe,GAAG,WAAW,CAAA;AAEzC,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,WAAW,EAAE,CAAA;IAC5B,2CAA2C;IAC3C,UAAU,CAAC,EAAE,WAAW,EAAE,CAAA;CAC3B;AAED,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB;IAC9D,IAAI,EAAE,UAAU,CAAA;IAChB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CAC7E;AAED,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D,IAAI,EAAE,QAAQ,CAAA;IACd,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CACvE;AAED,MAAM,MAAM,aAAa,GAAG,qBAAqB,GAAG,mBAAmB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/interfaces/plugin.ts"],"names":[],"mappings":""}
@@ -0,0 +1,69 @@
1
+ import type { SerializedHttpRequest, SerializedHttpResponse } from '../types/http.js';
2
+ import type { ProviderCapability } from '../types/capability.js';
3
+ export interface ProviderTokenPricingUsdPerMillion {
4
+ inputUsdPerMillion: number;
5
+ outputUsdPerMillion: number;
6
+ }
7
+ export interface ProviderPricing {
8
+ defaults: ProviderTokenPricingUsdPerMillion;
9
+ models?: Record<string, ProviderTokenPricingUsdPerMillion>;
10
+ }
11
+ /**
12
+ * Interface that seller nodes implement to provide inference.
13
+ *
14
+ * Each provider represents one upstream LLM service (e.g., Anthropic, OpenAI, local LLM).
15
+ * The SDK handles P2P connections, discovery, metering, and payments.
16
+ * You just handle the HTTP request → response conversion.
17
+ */
18
+ export interface Provider {
19
+ /** Unique name for this provider (e.g., 'anthropic', 'openai', 'my-local-llm') */
20
+ name: string;
21
+ /** Model IDs this provider supports (e.g., ['claude-sonnet-4-5-20250929', 'claude-opus-4-0-20250514']) */
22
+ models: string[];
23
+ /** Seller pricing in USD per 1M tokens (defaults + optional per-model overrides). */
24
+ pricing: ProviderPricing;
25
+ /** Maximum concurrent requests this provider can handle */
26
+ maxConcurrency: number;
27
+ /**
28
+ * Handle an incoming inference request and return the response.
29
+ */
30
+ handleRequest(req: SerializedHttpRequest): Promise<SerializedHttpResponse>;
31
+ /** Optional startup hook — validate credentials, warm caches, etc. */
32
+ init?(): Promise<void>;
33
+ /** Return current and maximum concurrent request counts */
34
+ getCapacity(): {
35
+ current: number;
36
+ max: number;
37
+ };
38
+ /** Capabilities beyond inference (optional — defaults to ['inference']) */
39
+ capabilities?: ProviderCapability[];
40
+ /** Handle a long-running agent task. Returns an async iterable of events. */
41
+ handleTask?(task: TaskRequest): AsyncIterable<TaskEvent>;
42
+ /** Handle a one-shot skill request. */
43
+ handleSkill?(skill: SkillRequest): Promise<SkillResponse>;
44
+ }
45
+ export interface TaskRequest {
46
+ taskId: string;
47
+ capability: ProviderCapability;
48
+ input: unknown;
49
+ metadata?: Record<string, unknown>;
50
+ }
51
+ export interface TaskEvent {
52
+ taskId: string;
53
+ type: 'status' | 'progress' | 'intermediate' | 'final';
54
+ data: unknown;
55
+ timestamp: number;
56
+ }
57
+ export interface SkillRequest {
58
+ skillId: string;
59
+ capability: ProviderCapability;
60
+ input: unknown;
61
+ inputSchema?: Record<string, unknown>;
62
+ }
63
+ export interface SkillResponse {
64
+ skillId: string;
65
+ output: unknown;
66
+ outputSchema?: Record<string, unknown>;
67
+ durationMs: number;
68
+ }
69
+ //# sourceMappingURL=seller-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seller-provider.d.ts","sourceRoot":"","sources":["../../src/interfaces/seller-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AACtF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,MAAM,WAAW,iCAAiC;IAChD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,iCAAiC,CAAC;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iCAAiC,CAAC,CAAC;CAC5D;AAED;;;;;;GAMG;AACH,MAAM,WAAW,QAAQ;IACvB,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAC;IAEb,0GAA0G;IAC1G,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB,qFAAqF;IACrF,OAAO,EAAE,eAAe,CAAC;IAEzB,2DAA2D;IAC3D,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,aAAa,CAAC,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAE3E,sEAAsE;IACtE,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB,2DAA2D;IAC3D,WAAW,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAEhD,2EAA2E;IAC3E,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAEpC,6EAA6E;IAC7E,UAAU,CAAC,CAAC,IAAI,EAAE,WAAW,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IAEzD,uCAAuC;IACvC,WAAW,CAAC,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CAC3D;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,kBAAkB,CAAC;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,cAAc,GAAG,OAAO,CAAC;IACvD,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=seller-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seller-provider.js","sourceRoot":"","sources":["../../src/interfaces/seller-provider.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ export { estimateTokens, estimateTokensFromContentLength, estimateTokensFromStreamBytes, BYTES_PER_TOKEN, MIN_REQUEST_TOKENS, MIN_RESPONSE_TOKENS } from './token-counter.js';
2
+ export { MeteringStorage } from './storage.js';
3
+ export { ReceiptGenerator, buildSignaturePayload, calculateCost, type Signer } from './receipt-generator.js';
4
+ export { ReceiptVerifier, type SignatureVerifier, type VerifierOptions } from './receipt-verifier.js';
5
+ export { SessionTracker } from './session-tracker.js';
6
+ export { UsageAggregator, type AggregationGranularity, type TimePeriod } from './usage-aggregator.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/metering/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,+BAA+B,EAAE,6BAA6B,EAAE,eAAe,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9K,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,aAAa,EAAE,KAAK,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC7G,OAAO,EAAE,eAAe,EAAE,KAAK,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACtG,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { estimateTokens, estimateTokensFromContentLength, estimateTokensFromStreamBytes, BYTES_PER_TOKEN, MIN_REQUEST_TOKENS, MIN_RESPONSE_TOKENS } from './token-counter.js';
2
+ export { MeteringStorage } from './storage.js';
3
+ export { ReceiptGenerator, buildSignaturePayload, calculateCost } from './receipt-generator.js';
4
+ export { ReceiptVerifier } from './receipt-verifier.js';
5
+ export { SessionTracker } from './session-tracker.js';
6
+ export { UsageAggregator } from './usage-aggregator.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/metering/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,+BAA+B,EAAE,6BAA6B,EAAE,eAAe,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9K,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,aAAa,EAAe,MAAM,wBAAwB,CAAC;AAC7G,OAAO,EAAE,eAAe,EAAgD,MAAM,uBAAuB,CAAC;AACtG,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAgD,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,49 @@
1
+ import type { ProviderType, TokenCount, UsageReceipt } from '../types/metering.js';
2
+ /**
3
+ * Interface for signing data with the seller's Ed25519 private key.
4
+ * The actual implementation lives in the identity module (PRD-01).
5
+ */
6
+ export interface Signer {
7
+ /**
8
+ * Sign a message with the seller's Ed25519 private key.
9
+ * @param message - UTF-8 string to sign
10
+ * @returns Hex-encoded signature
11
+ */
12
+ sign(message: string): string;
13
+ /** The seller's peer ID (Ed25519 public key hex) */
14
+ peerId: string;
15
+ }
16
+ /**
17
+ * Build the canonical string representation of receipt data for signing.
18
+ * The order and format must be deterministic so both sides produce the
19
+ * same string from the same receipt data.
20
+ */
21
+ export declare function buildSignaturePayload(receipt: Omit<UsageReceipt, 'signature'>): string;
22
+ /**
23
+ * Calculate the cost in USD cents from token count and price.
24
+ *
25
+ * @param totalTokens - Total estimated tokens
26
+ * @param unitPriceCentsPerThousandTokens - Unit price in USD cents per 1,000 tokens
27
+ * @returns Cost in USD cents (rounded to nearest cent)
28
+ */
29
+ export declare function calculateCost(totalTokens: number, unitPriceCentsPerThousandTokens: number): number;
30
+ /**
31
+ * Generates signed usage receipts for the seller side.
32
+ */
33
+ export declare class ReceiptGenerator {
34
+ private readonly signer;
35
+ constructor(signer: Signer);
36
+ /**
37
+ * Generate a signed receipt for a completed request.
38
+ *
39
+ * @param sessionId - The buyer session ID
40
+ * @param eventId - The metering event ID
41
+ * @param provider - Provider used
42
+ * @param buyerPeerId - Buyer's peer ID
43
+ * @param tokens - Token estimate
44
+ * @param unitPriceCentsPerThousandTokens - Effective unit price in USD cents per 1,000 tokens
45
+ * @returns Signed UsageReceipt
46
+ */
47
+ generate(sessionId: string, eventId: string, provider: ProviderType, buyerPeerId: string, tokens: TokenCount, unitPriceCentsPerThousandTokens: number): UsageReceipt;
48
+ }
49
+ //# sourceMappingURL=receipt-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receipt-generator.d.ts","sourceRoot":"","sources":["../../src/metering/receipt-generator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEnF;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB;;;;OAIG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IAE9B,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG,MAAM,CAYtF;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,+BAA+B,EAAE,MAAM,GAAG,MAAM,CAGlG;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,MAAM,EAAE,MAAM;IAI1B;;;;;;;;;;OAUG;IACH,QAAQ,CACN,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,YAAY,EACtB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,UAAU,EAClB,+BAA+B,EAAE,MAAM,GACtC,YAAY;CA0BhB"}
@@ -0,0 +1,74 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ /**
3
+ * Build the canonical string representation of receipt data for signing.
4
+ * The order and format must be deterministic so both sides produce the
5
+ * same string from the same receipt data.
6
+ */
7
+ export function buildSignaturePayload(receipt) {
8
+ return [
9
+ receipt.receiptId,
10
+ receipt.sessionId,
11
+ receipt.eventId,
12
+ receipt.timestamp.toString(),
13
+ receipt.provider,
14
+ receipt.sellerPeerId,
15
+ receipt.buyerPeerId,
16
+ receipt.tokens.totalTokens.toString(),
17
+ receipt.costCents.toString(),
18
+ ].join('|');
19
+ }
20
+ /**
21
+ * Calculate the cost in USD cents from token count and price.
22
+ *
23
+ * @param totalTokens - Total estimated tokens
24
+ * @param unitPriceCentsPerThousandTokens - Unit price in USD cents per 1,000 tokens
25
+ * @returns Cost in USD cents (rounded to nearest cent)
26
+ */
27
+ export function calculateCost(totalTokens, unitPriceCentsPerThousandTokens) {
28
+ const raw = (totalTokens / 1000) * unitPriceCentsPerThousandTokens;
29
+ return raw > 0 ? Math.max(1, Math.round(raw)) : 0;
30
+ }
31
+ /**
32
+ * Generates signed usage receipts for the seller side.
33
+ */
34
+ export class ReceiptGenerator {
35
+ signer;
36
+ constructor(signer) {
37
+ this.signer = signer;
38
+ }
39
+ /**
40
+ * Generate a signed receipt for a completed request.
41
+ *
42
+ * @param sessionId - The buyer session ID
43
+ * @param eventId - The metering event ID
44
+ * @param provider - Provider used
45
+ * @param buyerPeerId - Buyer's peer ID
46
+ * @param tokens - Token estimate
47
+ * @param unitPriceCentsPerThousandTokens - Effective unit price in USD cents per 1,000 tokens
48
+ * @returns Signed UsageReceipt
49
+ */
50
+ generate(sessionId, eventId, provider, buyerPeerId, tokens, unitPriceCentsPerThousandTokens) {
51
+ const receiptId = randomUUID();
52
+ const timestamp = Date.now();
53
+ const costCents = calculateCost(tokens.totalTokens, unitPriceCentsPerThousandTokens);
54
+ const receiptData = {
55
+ receiptId,
56
+ sessionId,
57
+ eventId,
58
+ timestamp,
59
+ provider,
60
+ sellerPeerId: this.signer.peerId,
61
+ buyerPeerId,
62
+ tokens,
63
+ unitPriceCentsPerThousandTokens,
64
+ costCents,
65
+ };
66
+ const payload = buildSignaturePayload(receiptData);
67
+ const signature = this.signer.sign(payload);
68
+ return {
69
+ ...receiptData,
70
+ signature,
71
+ };
72
+ }
73
+ }
74
+ //# sourceMappingURL=receipt-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receipt-generator.js","sourceRoot":"","sources":["../../src/metering/receipt-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAmBzC;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAwC;IAC5E,OAAO;QACL,OAAO,CAAC,SAAS;QACjB,OAAO,CAAC,SAAS;QACjB,OAAO,CAAC,OAAO;QACf,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE;QAC5B,OAAO,CAAC,QAAQ;QAChB,OAAO,CAAC,YAAY;QACpB,OAAO,CAAC,WAAW;QACnB,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE;QACrC,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE;KAC7B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,WAAmB,EAAE,+BAAuC;IACxF,MAAM,GAAG,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,+BAA+B,CAAC;IACnE,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,gBAAgB;IACV,MAAM,CAAS;IAEhC,YAAY,MAAc;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;;;;;;;;;OAUG;IACH,QAAQ,CACN,SAAiB,EACjB,OAAe,EACf,QAAsB,EACtB,WAAmB,EACnB,MAAkB,EAClB,+BAAuC;QAEvC,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,+BAA+B,CAAC,CAAC;QAErF,MAAM,WAAW,GAAoC;YACnD,SAAS;YACT,SAAS;YACT,OAAO;YACP,SAAS;YACT,QAAQ;YACR,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;YAChC,WAAW;YACX,MAAM;YACN,+BAA+B;YAC/B,SAAS;SACV,CAAC;QAEF,MAAM,OAAO,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE5C,OAAO;YACL,GAAG,WAAW;YACd,SAAS;SACV,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,52 @@
1
+ import type { UsageReceipt, TokenCount, ReceiptVerification } from '../types/metering.js';
2
+ /**
3
+ * Interface for verifying Ed25519 signatures.
4
+ * The actual implementation lives in the identity module (PRD-01).
5
+ */
6
+ export interface SignatureVerifier {
7
+ /**
8
+ * Verify an Ed25519 signature.
9
+ * @param message - The original signed message (UTF-8 string)
10
+ * @param signature - Hex-encoded signature
11
+ * @param publicKeyHex - Signer's Ed25519 public key (hex)
12
+ * @returns true if signature is valid
13
+ */
14
+ verify(message: string, signature: string, publicKeyHex: string): boolean;
15
+ }
16
+ export interface VerifierOptions {
17
+ /**
18
+ * Maximum acceptable percentage difference between buyer and seller
19
+ * token estimates before flagging as disputed.
20
+ * Default: 15 (percent)
21
+ */
22
+ disputeThresholdPercent: number;
23
+ }
24
+ /**
25
+ * Verifies seller-issued usage receipts on the buyer side.
26
+ */
27
+ export declare class ReceiptVerifier {
28
+ private readonly signatureVerifier;
29
+ private readonly options;
30
+ constructor(signatureVerifier: SignatureVerifier, options?: Partial<VerifierOptions>);
31
+ /**
32
+ * Verify a receipt against the buyer's independent token estimate.
33
+ *
34
+ * Verification steps:
35
+ * 1. Verify the Ed25519 signature using the seller's public key
36
+ * 2. Compare seller's token estimate with buyer's estimate
37
+ * 3. Calculate percentage difference
38
+ * 4. Flag as disputed if difference exceeds threshold
39
+ *
40
+ * @param receipt - The seller's signed receipt
41
+ * @param buyerEstimate - The buyer's independent token estimate
42
+ * @returns ReceiptVerification result
43
+ */
44
+ verify(receipt: UsageReceipt, buyerEstimate: TokenCount): ReceiptVerification;
45
+ /**
46
+ * Calculate the percentage difference between two token counts.
47
+ * Formula: abs(a - b) / max(a, b) * 100
48
+ * Returns 0 if both are 0.
49
+ */
50
+ static calculatePercentageDifference(a: number, b: number): number;
51
+ }
52
+ //# sourceMappingURL=receipt-verifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receipt-verifier.d.ts","sourceRoot":"","sources":["../../src/metering/receipt-verifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAG1F;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;;;OAMG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;CAC3E;AAED,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAMD;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IACtD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;gBAE9B,iBAAiB,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC;IAKpF;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,GAAG,mBAAmB;IAmC7E;;;;OAIG;IACH,MAAM,CAAC,6BAA6B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;CAKnE"}