@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,310 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.24;
3
+
4
+ interface IERC20 {
5
+ function transferFrom(address from, address to, uint256 value) external returns (bool);
6
+ function transfer(address to, uint256 value) external returns (bool);
7
+ }
8
+
9
+ /**
10
+ * @title AntseedEscrow
11
+ * @notice Session-scoped USDC escrow used by Antseed payment channels.
12
+ * @dev State mapping matches node/src/payments/crypto/escrow.ts STATE_MAP:
13
+ * 0=open, 1=active, 2=disputed, 3=settled, 4=closed.
14
+ */
15
+ contract AntseedEscrow {
16
+ enum ChannelState {
17
+ Open,
18
+ Active,
19
+ Disputed,
20
+ Settled,
21
+ Closed
22
+ }
23
+
24
+ struct Channel {
25
+ address buyer;
26
+ address seller;
27
+ uint256 amount;
28
+ ChannelState state;
29
+ uint64 createdAt;
30
+ uint64 disputedAt;
31
+ }
32
+
33
+ IERC20 public immutable usdc;
34
+ address public owner;
35
+ address public arbiter;
36
+ address public feeCollector;
37
+ uint64 public disputeTimeout;
38
+
39
+ mapping(bytes32 => Channel) private channels;
40
+
41
+ bool private locked;
42
+
43
+ event ChannelDeposited(bytes32 indexed sessionId, address indexed buyer, address indexed seller, uint256 amount);
44
+ event ChannelReleased(bytes32 indexed sessionId, address indexed seller, uint256 amount, address caller);
45
+ event ChannelSettled(
46
+ bytes32 indexed sessionId,
47
+ address indexed seller,
48
+ uint256 sellerAmount,
49
+ address indexed feeCollector,
50
+ uint256 platformAmount,
51
+ address buyer,
52
+ uint256 buyerRefund,
53
+ address caller
54
+ );
55
+ event ChannelRefunded(bytes32 indexed sessionId, address indexed buyer, uint256 amount, address caller);
56
+ event ChannelDisputed(bytes32 indexed sessionId, address indexed caller);
57
+ event ArbiterUpdated(address indexed previousArbiter, address indexed newArbiter);
58
+ event FeeCollectorUpdated(address indexed previousFeeCollector, address indexed newFeeCollector);
59
+ event DisputeTimeoutUpdated(uint64 previousTimeout, uint64 newTimeout);
60
+ event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
61
+
62
+ error InvalidAddress();
63
+ error InvalidSession();
64
+ error InvalidAmount();
65
+ error SessionExists();
66
+ error InvalidState();
67
+ error NotAuthorized();
68
+ error NotOwner();
69
+ error NotArbiter();
70
+ error InvalidSplit();
71
+ error DisputeTimeoutNotReached();
72
+ error Reentrancy();
73
+ error TransferFailed();
74
+
75
+ modifier nonReentrant() {
76
+ if (locked) revert Reentrancy();
77
+ locked = true;
78
+ _;
79
+ locked = false;
80
+ }
81
+
82
+ modifier onlyOwner() {
83
+ if (msg.sender != owner) revert NotOwner();
84
+ _;
85
+ }
86
+
87
+ constructor(address usdcToken, address initialArbiter) {
88
+ if (usdcToken == address(0)) revert InvalidAddress();
89
+ usdc = IERC20(usdcToken);
90
+ owner = msg.sender;
91
+ arbiter = initialArbiter == address(0) ? msg.sender : initialArbiter;
92
+ feeCollector = msg.sender;
93
+ disputeTimeout = 72 hours;
94
+ }
95
+
96
+ function setArbiter(address newArbiter) external onlyOwner {
97
+ if (newArbiter == address(0)) revert InvalidAddress();
98
+ emit ArbiterUpdated(arbiter, newArbiter);
99
+ arbiter = newArbiter;
100
+ }
101
+
102
+ function transferOwnership(address newOwner) external onlyOwner {
103
+ if (newOwner == address(0)) revert InvalidAddress();
104
+ emit OwnershipTransferred(owner, newOwner);
105
+ owner = newOwner;
106
+ }
107
+
108
+ function setFeeCollector(address newFeeCollector) external onlyOwner {
109
+ if (newFeeCollector == address(0)) revert InvalidAddress();
110
+ emit FeeCollectorUpdated(feeCollector, newFeeCollector);
111
+ feeCollector = newFeeCollector;
112
+ }
113
+
114
+ function setDisputeTimeout(uint64 newTimeout) external onlyOwner {
115
+ if (newTimeout == 0) revert InvalidAmount();
116
+ emit DisputeTimeoutUpdated(disputeTimeout, newTimeout);
117
+ disputeTimeout = newTimeout;
118
+ }
119
+
120
+ /**
121
+ * @notice Lock buyer funds for a session.
122
+ * @param sessionId keccak256(sessionIdString) from ethers.id(sessionId)
123
+ * @param seller seller wallet address
124
+ * @param amount USDC amount in token base units (6 decimals)
125
+ */
126
+ function deposit(bytes32 sessionId, address seller, uint256 amount) external nonReentrant {
127
+ if (sessionId == bytes32(0)) revert InvalidSession();
128
+ if (seller == address(0)) revert InvalidAddress();
129
+ if (amount == 0) revert InvalidAmount();
130
+
131
+ Channel storage channel = channels[sessionId];
132
+ if (channel.buyer != address(0)) revert SessionExists();
133
+
134
+ channel.buyer = msg.sender;
135
+ channel.seller = seller;
136
+ channel.amount = amount;
137
+ channel.state = ChannelState.Active;
138
+ channel.createdAt = uint64(block.timestamp);
139
+ channel.disputedAt = 0;
140
+
141
+ _safeTransferFrom(msg.sender, address(this), amount);
142
+ emit ChannelDeposited(sessionId, msg.sender, seller, amount);
143
+ }
144
+
145
+ /**
146
+ * @notice Release escrow to seller.
147
+ * @dev Active channel: buyer/seller/arbiter can release.
148
+ * Disputed channel: only arbiter can release.
149
+ */
150
+ function release(bytes32 sessionId) external nonReentrant {
151
+ Channel storage channel = channels[sessionId];
152
+ if (channel.state != ChannelState.Active && channel.state != ChannelState.Disputed) {
153
+ revert InvalidState();
154
+ }
155
+ _authorizeForSettlement(channel);
156
+
157
+ uint256 amount = channel.amount;
158
+ channel.amount = 0;
159
+ channel.state = ChannelState.Settled;
160
+ channel.disputedAt = 0;
161
+
162
+ _safeTransfer(channel.seller, amount);
163
+ emit ChannelReleased(sessionId, channel.seller, amount, msg.sender);
164
+ }
165
+
166
+ /**
167
+ * @notice Settle escrow by splitting funds between seller, platform fee collector, and buyer refund.
168
+ * @dev Active channel: buyer/seller/arbiter can settle.
169
+ * Disputed channel: only arbiter can settle.
170
+ */
171
+ function settle(bytes32 sessionId, uint256 sellerAmount, uint256 platformAmount) external nonReentrant {
172
+ Channel storage channel = channels[sessionId];
173
+ if (channel.state != ChannelState.Active && channel.state != ChannelState.Disputed) {
174
+ revert InvalidState();
175
+ }
176
+ _authorizeForSettlement(channel);
177
+
178
+ uint256 amount = channel.amount;
179
+ if (sellerAmount > amount || platformAmount > amount - sellerAmount) {
180
+ revert InvalidSplit();
181
+ }
182
+ uint256 buyerRefund = amount - sellerAmount - platformAmount;
183
+
184
+ channel.amount = 0;
185
+ channel.state = ChannelState.Settled;
186
+ channel.disputedAt = 0;
187
+
188
+ if (sellerAmount > 0) {
189
+ _safeTransfer(channel.seller, sellerAmount);
190
+ }
191
+ if (platformAmount > 0) {
192
+ _safeTransfer(feeCollector, platformAmount);
193
+ }
194
+ if (buyerRefund > 0) {
195
+ _safeTransfer(channel.buyer, buyerRefund);
196
+ }
197
+
198
+ emit ChannelSettled(
199
+ sessionId,
200
+ channel.seller,
201
+ sellerAmount,
202
+ feeCollector,
203
+ platformAmount,
204
+ channel.buyer,
205
+ buyerRefund,
206
+ msg.sender
207
+ );
208
+ }
209
+
210
+ /**
211
+ * @notice Mark an active channel as disputed.
212
+ */
213
+ function dispute(bytes32 sessionId) external {
214
+ Channel storage channel = channels[sessionId];
215
+ if (channel.state != ChannelState.Active) revert InvalidState();
216
+ if (msg.sender != channel.buyer && msg.sender != channel.seller && msg.sender != arbiter) {
217
+ revert NotAuthorized();
218
+ }
219
+
220
+ channel.state = ChannelState.Disputed;
221
+ channel.disputedAt = uint64(block.timestamp);
222
+ emit ChannelDisputed(sessionId, msg.sender);
223
+ }
224
+
225
+ /**
226
+ * @notice Refund escrow to buyer.
227
+ * @dev Active channel: buyer/arbiter can refund.
228
+ * Disputed channel: only arbiter can refund.
229
+ */
230
+ function refund(bytes32 sessionId) external nonReentrant {
231
+ Channel storage channel = channels[sessionId];
232
+ if (channel.state != ChannelState.Active && channel.state != ChannelState.Disputed) {
233
+ revert InvalidState();
234
+ }
235
+
236
+ if (channel.state == ChannelState.Active) {
237
+ if (msg.sender != channel.buyer && msg.sender != arbiter) {
238
+ revert NotAuthorized();
239
+ }
240
+ } else if (msg.sender != arbiter) {
241
+ revert NotArbiter();
242
+ }
243
+
244
+ uint256 amount = channel.amount;
245
+ channel.amount = 0;
246
+ channel.state = ChannelState.Closed;
247
+ channel.disputedAt = 0;
248
+
249
+ _safeTransfer(channel.buyer, amount);
250
+ emit ChannelRefunded(sessionId, channel.buyer, amount, msg.sender);
251
+ }
252
+
253
+ /**
254
+ * @notice Resolve stale disputes by refunding the buyer after the dispute timeout.
255
+ */
256
+ function resolveDisputeTimeout(bytes32 sessionId) external nonReentrant {
257
+ Channel storage channel = channels[sessionId];
258
+ if (channel.state != ChannelState.Disputed) revert InvalidState();
259
+ if (uint64(block.timestamp) < channel.disputedAt + disputeTimeout) {
260
+ revert DisputeTimeoutNotReached();
261
+ }
262
+
263
+ uint256 amount = channel.amount;
264
+ channel.amount = 0;
265
+ channel.state = ChannelState.Closed;
266
+ channel.disputedAt = 0;
267
+
268
+ _safeTransfer(channel.buyer, amount);
269
+ emit ChannelRefunded(sessionId, channel.buyer, amount, msg.sender);
270
+ }
271
+
272
+ function getChannel(bytes32 sessionId)
273
+ external
274
+ view
275
+ returns (address buyer, address seller, uint256 amount, uint8 state)
276
+ {
277
+ Channel storage channel = channels[sessionId];
278
+ return (channel.buyer, channel.seller, channel.amount, uint8(channel.state));
279
+ }
280
+
281
+ function _safeTransferFrom(address from, address to, uint256 value) private {
282
+ (bool ok, bytes memory ret) = address(usdc).call(
283
+ abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, value)
284
+ );
285
+ if (!ok || (ret.length > 0 && !abi.decode(ret, (bool)))) {
286
+ revert TransferFailed();
287
+ }
288
+ }
289
+
290
+ function _safeTransfer(address to, uint256 value) private {
291
+ (bool ok, bytes memory ret) = address(usdc).call(
292
+ abi.encodeWithSelector(IERC20.transfer.selector, to, value)
293
+ );
294
+ if (!ok || (ret.length > 0 && !abi.decode(ret, (bool)))) {
295
+ revert TransferFailed();
296
+ }
297
+ }
298
+
299
+ function _authorizeForSettlement(Channel storage channel) private view {
300
+ if (channel.state == ChannelState.Active) {
301
+ if (msg.sender != channel.buyer && msg.sender != channel.seller && msg.sender != arbiter) {
302
+ revert NotAuthorized();
303
+ }
304
+ return;
305
+ }
306
+ if (msg.sender != arbiter) {
307
+ revert NotArbiter();
308
+ }
309
+ }
310
+ }
@@ -0,0 +1,64 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.24;
3
+
4
+ /**
5
+ * @title MockUSDC
6
+ * @notice Minimal ERC20 used for local escrow integration tests and examples.
7
+ */
8
+ contract MockUSDC {
9
+ string public constant name = "Mock USD Coin";
10
+ string public constant symbol = "USDC";
11
+ uint8 public constant decimals = 6;
12
+
13
+ uint256 public totalSupply;
14
+
15
+ mapping(address => uint256) public balanceOf;
16
+ mapping(address => mapping(address => uint256)) public allowance;
17
+
18
+ event Transfer(address indexed from, address indexed to, uint256 value);
19
+ event Approval(address indexed owner, address indexed spender, uint256 value);
20
+
21
+ error InsufficientBalance();
22
+ error InsufficientAllowance();
23
+ error InvalidAddress();
24
+
25
+ function mint(address to, uint256 amount) external {
26
+ if (to == address(0)) revert InvalidAddress();
27
+ totalSupply += amount;
28
+ balanceOf[to] += amount;
29
+ emit Transfer(address(0), to, amount);
30
+ }
31
+
32
+ function approve(address spender, uint256 amount) external returns (bool) {
33
+ allowance[msg.sender][spender] = amount;
34
+ emit Approval(msg.sender, spender, amount);
35
+ return true;
36
+ }
37
+
38
+ function transfer(address to, uint256 amount) external returns (bool) {
39
+ _transfer(msg.sender, to, amount);
40
+ return true;
41
+ }
42
+
43
+ function transferFrom(address from, address to, uint256 amount) external returns (bool) {
44
+ uint256 allowed = allowance[from][msg.sender];
45
+ if (allowed < amount) revert InsufficientAllowance();
46
+
47
+ if (allowed != type(uint256).max) {
48
+ allowance[from][msg.sender] = allowed - amount;
49
+ emit Approval(from, msg.sender, allowance[from][msg.sender]);
50
+ }
51
+
52
+ _transfer(from, to, amount);
53
+ return true;
54
+ }
55
+
56
+ function _transfer(address from, address to, uint256 amount) private {
57
+ if (to == address(0)) revert InvalidAddress();
58
+ if (balanceOf[from] < amount) revert InsufficientBalance();
59
+
60
+ balanceOf[from] -= amount;
61
+ balanceOf[to] += amount;
62
+ emit Transfer(from, to, amount);
63
+ }
64
+ }
@@ -0,0 +1,102 @@
1
+ # Antseed Escrow Contract
2
+
3
+ `AntseedEscrow.sol` is the on-chain escrow contract used by the payment channel flow.
4
+
5
+ ## Contract Paths
6
+
7
+ - `node/contracts/AntseedEscrow.sol` - production escrow contract
8
+ - `node/contracts/MockUSDC.sol` - test-only ERC20 used for local integration flows
9
+
10
+ ## ABI Compatibility
11
+
12
+ The contract exposes the runtime methods expected by `BaseEscrowClient`:
13
+
14
+ - `deposit(bytes32 sessionId, address seller, uint256 amount)`
15
+ - `release(bytes32 sessionId)`
16
+ - `settle(bytes32 sessionId, uint256 sellerAmount, uint256 platformAmount)`
17
+ - `dispute(bytes32 sessionId)`
18
+ - `refund(bytes32 sessionId)`
19
+ - `resolveDisputeTimeout(bytes32 sessionId)`
20
+ - `getChannel(bytes32 sessionId) returns (address buyer, address seller, uint256 amount, uint8 state)`
21
+
22
+ Owner/admin methods:
23
+
24
+ - `setArbiter(address)`
25
+ - `setFeeCollector(address)`
26
+ - `setDisputeTimeout(uint64 seconds)`
27
+
28
+ Deployment uses the constructor signature:
29
+
30
+ - `constructor(address usdcToken, address initialArbiter)`
31
+
32
+ Channel states are encoded as:
33
+
34
+ - `0 = open`
35
+ - `1 = active`
36
+ - `2 = disputed`
37
+ - `3 = settled`
38
+ - `4 = closed`
39
+
40
+ ## Compile
41
+
42
+ Example using Foundry (`forge`):
43
+
44
+ ```bash
45
+ cd node
46
+ forge build --root . --contracts contracts --out contracts/out
47
+ ```
48
+
49
+ Example using `solc`:
50
+
51
+ ```bash
52
+ solc --optimize --bin --abi node/contracts/AntseedEscrow.sol -o node/contracts/out
53
+ ```
54
+
55
+ ## Deploy (TypeScript Helper)
56
+
57
+ Deploy the compiled contract using ethers.js or your preferred toolchain. The constructor expects `(address usdcToken, address initialArbiter)`.
58
+
59
+ For programmatic deployment, use `BaseEscrowClient` from `@antseed/node`:
60
+
61
+ ```ts
62
+ import { BaseEscrowClient } from '@antseed/node';
63
+
64
+ const client = new BaseEscrowClient({
65
+ rpcUrl: process.env.RPC_URL!,
66
+ contractAddress: deployedAddress,
67
+ usdcAddress: process.env.USDC_ADDRESS!,
68
+ });
69
+ ```
70
+
71
+ ## End-to-End Integration Test
72
+
73
+ A full on-chain test lives in:
74
+
75
+ - `node/tests/escrow-contract.integration.test.ts`
76
+
77
+ It compiles `AntseedEscrow.sol` + `MockUSDC.sol`, starts a local Anvil chain, deploys the contract, and exercises:
78
+
79
+ - `deposit -> release`
80
+ - `deposit -> dispute -> arbiter refund`
81
+ - `deposit -> settle(seller/platform/refund split)`
82
+ - `deposit -> dispute -> resolveDisputeTimeout`
83
+
84
+ Run only this suite:
85
+
86
+ ```bash
87
+ cd node
88
+ npm test -- escrow-contract.integration.test.ts
89
+ ```
90
+
91
+ The test auto-skips when `anvil` or `forge` is unavailable.
92
+
93
+ ## Operational Notes
94
+
95
+ - `deposit` sets `buyer = msg.sender`; it expects an approved USDC `transferFrom`.
96
+ - `release` while active can be called by buyer/seller/arbiter.
97
+ - `release` while disputed requires arbiter.
98
+ - `settle` while active can be called by buyer/seller/arbiter.
99
+ - `settle` while disputed requires arbiter and supports explicit seller/platform payouts with automatic buyer refund remainder.
100
+ - `refund` while active can be called by buyer/arbiter.
101
+ - `refund` while disputed requires arbiter.
102
+ - `resolveDisputeTimeout` allows anyone to refund a stale disputed channel after `disputeTimeout`.
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Derive an encryption key from a machine-specific seed.
3
+ */
4
+ export declare function deriveMachineKey(salt: Buffer): Buffer;
5
+ /**
6
+ * Encrypt a string value. Returns base64-encoded ciphertext with IV and auth tag prepended.
7
+ */
8
+ export declare function encryptValue(plaintext: string, key: Buffer): string;
9
+ /**
10
+ * Decrypt a base64-encoded value produced by encryptValue.
11
+ */
12
+ export declare function decryptValue(encoded: string, key: Buffer): string;
13
+ /**
14
+ * Generate a fresh random salt for key derivation.
15
+ */
16
+ export declare function generateSalt(): Buffer;
17
+ //# sourceMappingURL=encryption.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../../src/config/encryption.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOrD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAOnE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CASjE;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC"}
@@ -0,0 +1,49 @@
1
+ import { createCipheriv, createDecipheriv, randomBytes, scryptSync } from 'node:crypto';
2
+ import { hostname, homedir } from 'node:os';
3
+ const ALGORITHM = 'aes-256-gcm';
4
+ const SALT_LENGTH = 32;
5
+ const IV_LENGTH = 16;
6
+ const TAG_LENGTH = 16;
7
+ const KEY_LENGTH = 32;
8
+ /**
9
+ * Derive an encryption key from a machine-specific seed.
10
+ */
11
+ export function deriveMachineKey(salt) {
12
+ const seed = [
13
+ process.env['USER'] ?? process.env['USERNAME'] ?? '',
14
+ hostname(),
15
+ homedir(),
16
+ ].join(':');
17
+ return scryptSync(seed, salt, KEY_LENGTH);
18
+ }
19
+ /**
20
+ * Encrypt a string value. Returns base64-encoded ciphertext with IV and auth tag prepended.
21
+ */
22
+ export function encryptValue(plaintext, key) {
23
+ const iv = randomBytes(IV_LENGTH);
24
+ const cipher = createCipheriv(ALGORITHM, key, iv);
25
+ const encrypted = Buffer.concat([cipher.update(plaintext, 'utf-8'), cipher.final()]);
26
+ const tag = cipher.getAuthTag();
27
+ const combined = Buffer.concat([iv, tag, encrypted]);
28
+ return combined.toString('base64');
29
+ }
30
+ /**
31
+ * Decrypt a base64-encoded value produced by encryptValue.
32
+ */
33
+ export function decryptValue(encoded, key) {
34
+ const combined = Buffer.from(encoded, 'base64');
35
+ const iv = combined.subarray(0, IV_LENGTH);
36
+ const tag = combined.subarray(IV_LENGTH, IV_LENGTH + TAG_LENGTH);
37
+ const ciphertext = combined.subarray(IV_LENGTH + TAG_LENGTH);
38
+ const decipher = createDecipheriv(ALGORITHM, key, iv);
39
+ decipher.setAuthTag(tag);
40
+ const decrypted = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
41
+ return decrypted.toString('utf-8');
42
+ }
43
+ /**
44
+ * Generate a fresh random salt for key derivation.
45
+ */
46
+ export function generateSalt() {
47
+ return randomBytes(SALT_LENGTH);
48
+ }
49
+ //# sourceMappingURL=encryption.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.js","sourceRoot":"","sources":["../../src/config/encryption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACvF,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAE3C,MAAM,SAAS,GAAG,aAAa,CAAA;AAC/B,MAAM,WAAW,GAAG,EAAE,CAAA;AACtB,MAAM,SAAS,GAAG,EAAE,CAAA;AACpB,MAAM,UAAU,GAAG,EAAE,CAAA;AACrB,MAAM,UAAU,GAAG,EAAE,CAAA;AAErB;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,IAAI,GAAG;QACX,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE;QACpD,QAAQ,EAAE;QACV,OAAO,EAAE;KACV,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACX,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAA;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,SAAiB,EAAE,GAAW;IACzD,MAAM,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC,CAAA;IACjC,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,CAAA;IACjD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IACpF,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,EAAE,CAAA;IAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAA;IACpD,OAAO,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,GAAW;IACvD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IAC/C,MAAM,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;IAC1C,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,UAAU,CAAC,CAAA;IAChE,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,GAAG,UAAU,CAAC,CAAA;IAC5D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,CAAA;IACrD,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;IACxB,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IAChF,OAAO,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,WAAW,CAAC,WAAW,CAAC,CAAA;AACjC,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { PluginInstanceConfig, PluginConfigFile } from '../types/plugin-config.js';
2
+ import type { ConfigField } from '../interfaces/plugin.js';
3
+ /**
4
+ * Load plugin config file. Returns empty config if file doesn't exist.
5
+ */
6
+ export declare function loadPluginConfig(configPath: string): Promise<PluginConfigFile>;
7
+ /**
8
+ * Save plugin config file. Preserves non-plugin fields.
9
+ */
10
+ export declare function savePluginConfig(configPath: string, pluginConfig: PluginConfigFile): Promise<void>;
11
+ /**
12
+ * Add a plugin instance with encrypted secrets.
13
+ */
14
+ export declare function addInstance(configPath: string, instance: PluginInstanceConfig, schema?: ConfigField[]): Promise<void>;
15
+ /**
16
+ * Remove an instance by ID.
17
+ */
18
+ export declare function removeInstance(configPath: string, instanceId: string): Promise<void>;
19
+ /**
20
+ * Get a single instance with decrypted secrets.
21
+ */
22
+ export declare function getInstance(configPath: string, instanceId: string): Promise<PluginInstanceConfig | null>;
23
+ /**
24
+ * Get all instances with decrypted secrets.
25
+ */
26
+ export declare function getInstances(configPath: string): Promise<PluginInstanceConfig[]>;
27
+ /**
28
+ * Update config for an existing instance.
29
+ */
30
+ export declare function updateInstanceConfig(configPath: string, instanceId: string, newConfig: Record<string, unknown>, schema?: ConfigField[]): Promise<void>;
31
+ //# sourceMappingURL=plugin-config-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-config-manager.d.ts","sourceRoot":"","sources":["../../src/config/plugin-config-manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AACvF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAS1D;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAcpF;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBxG;AAiCD;;GAEG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,CAAC,EAAE,WAAW,EAAE,GACrB,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI1F;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAQ9G;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAMtF;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,MAAM,CAAC,EAAE,WAAW,EAAE,GACrB,OAAO,CAAC,IAAI,CAAC,CAQf"}