@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,21 @@
1
+ import type { PeerId } from './peer.js';
2
+ export type RatingDimension = 'quality' | 'speed' | 'reliability' | 'value' | 'overall';
3
+ export interface PeerRating {
4
+ ratingId: string;
5
+ raterPeerId: PeerId;
6
+ targetPeerId: PeerId;
7
+ sessionId: string;
8
+ dimensions: Record<RatingDimension, 1 | 2 | 3 | 4 | 5>;
9
+ comment?: string;
10
+ timestamp: number;
11
+ /** Ed25519 signature (hex) */
12
+ signature: string;
13
+ }
14
+ export interface AggregateRating {
15
+ peerId: PeerId;
16
+ averageByDimension: Record<RatingDimension, number>;
17
+ overallAverage: number;
18
+ totalRatings: number;
19
+ lastUpdated: number;
20
+ }
21
+ //# sourceMappingURL=rating.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rating.d.ts","sourceRoot":"","sources":["../../src/types/rating.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAExC,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,OAAO,GAAG,aAAa,GAAG,OAAO,GAAG,SAAS,CAAC;AAExF,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IACpD,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=rating.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rating.js","sourceRoot":"","sources":["../../src/types/rating.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import type { PeerId } from './peer.js';
2
+ export type ReportReason = 'bad-quality' | 'overcharging' | 'timeout' | 'harmful-content' | 'fraud' | 'impersonation' | 'other';
3
+ export type ReportStatus = 'pending' | 'acknowledged' | 'resolved' | 'dismissed';
4
+ export interface ReportEvidence {
5
+ type: 'receipt' | 'log' | 'screenshot' | 'text';
6
+ data: string;
7
+ }
8
+ export interface PeerReport {
9
+ reportId: string;
10
+ reporterPeerId: PeerId;
11
+ targetPeerId: PeerId;
12
+ reason: ReportReason;
13
+ evidence: ReportEvidence[];
14
+ sessionId?: string;
15
+ timestamp: number;
16
+ status: ReportStatus;
17
+ /** Ed25519 signature over report data (hex string) */
18
+ signature: string;
19
+ }
20
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/types/report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAExC,MAAM,MAAM,YAAY,GACpB,aAAa,GACb,cAAc,GACd,SAAS,GACT,iBAAiB,GACjB,OAAO,GACP,eAAe,GACf,OAAO,CAAC;AAEZ,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,cAAc,GAAG,UAAU,GAAG,WAAW,CAAC;AAEjF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,GAAG,KAAK,GAAG,YAAY,GAAG,MAAM,CAAC;IAChD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,YAAY,CAAC;IACrB,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/types/report.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ import type { ProviderType } from './metering.js';
2
+ export interface SellerProviderPricingConfig {
3
+ inputUsdPerMillion: number;
4
+ outputUsdPerMillion: number;
5
+ }
6
+ /**
7
+ * Per-provider capacity and pricing configuration for sellers.
8
+ */
9
+ export interface SellerProviderConfig {
10
+ /** Provider identifier (must match a key in AntseedConfig.providers) */
11
+ type: ProviderType;
12
+ /** Whether this provider is enabled for selling */
13
+ enabled: boolean;
14
+ /** Plan limit in messages per hour. */
15
+ planLimitMsgPerHour: number;
16
+ /** Reserve floor in messages per hour. */
17
+ reserveFloorMsgPerHour: number;
18
+ /** Default pricing in USD per 1M tokens. */
19
+ pricing: SellerProviderPricingConfig;
20
+ }
21
+ /**
22
+ * Top-level seller configuration.
23
+ */
24
+ export interface SellerConfig {
25
+ /** Whether seller mode is enabled */
26
+ enabled: boolean;
27
+ /** Maximum number of concurrent buyer connections */
28
+ maxConcurrentBuyers: number;
29
+ /** Per-provider selling configuration */
30
+ providers: SellerProviderConfig[];
31
+ /** Session timeout in ms. Default: 300_000 (5 minutes). */
32
+ sessionTimeoutMs: number;
33
+ /** DHT re-announce interval in ms. Default: 60_000 (1 minute). */
34
+ announceIntervalMs: number;
35
+ }
36
+ //# sourceMappingURL=seller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seller.d.ts","sourceRoot":"","sources":["../../src/types/seller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,WAAW,2BAA2B;IAC1C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,wEAAwE;IACxE,IAAI,EAAE,YAAY,CAAC;IACnB,mDAAmD;IACnD,OAAO,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,0CAA0C;IAC1C,sBAAsB,EAAE,MAAM,CAAC;IAC/B,4CAA4C;IAC5C,OAAO,EAAE,2BAA2B,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,qCAAqC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,qDAAqD;IACrD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,yCAAyC;IACzC,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAClC,2DAA2D;IAC3D,gBAAgB,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,kBAAkB,EAAE,MAAM,CAAC;CAC5B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=seller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seller.js","sourceRoot":"","sources":["../../src/types/seller.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import type { PeerId } from './peer.js';
2
+ export type StakeStatus = 'active' | 'slashed' | 'withdrawn';
3
+ export interface StakeInfo {
4
+ peerId: PeerId;
5
+ amountUSDC: number;
6
+ stakedAt: number;
7
+ lockPeriodDays: number;
8
+ status: StakeStatus;
9
+ }
10
+ export interface StakeConfig {
11
+ minStakeUSDC: number;
12
+ lockPeriodDays: number;
13
+ slashPercentage: number;
14
+ }
15
+ export declare const DEFAULT_STAKE_CONFIG: StakeConfig;
16
+ //# sourceMappingURL=staking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staking.d.ts","sourceRoot":"","sources":["../../src/types/staking.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAExC,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;AAE7D,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,oBAAoB,EAAE,WAIlC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export const DEFAULT_STAKE_CONFIG = {
2
+ minStakeUSDC: 100,
3
+ lockPeriodDays: 30,
4
+ slashPercentage: 10,
5
+ };
6
+ //# sourceMappingURL=staking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staking.js","sourceRoot":"","sources":["../../src/types/staking.ts"],"names":[],"mappings":"AAkBA,MAAM,CAAC,MAAM,oBAAoB,GAAgB;IAC/C,YAAY,EAAE,GAAG;IACjB,cAAc,EAAE,EAAE;IAClB,eAAe,EAAE,EAAE;CACpB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function isDebugEnabled(): boolean;
2
+ export declare function debugLog(...args: unknown[]): void;
3
+ export declare function debugWarn(...args: unknown[]): void;
4
+ //# sourceMappingURL=debug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/utils/debug.ts"],"names":[],"mappings":"AAIA,wBAAgB,cAAc,IAAI,OAAO,CAaxC;AAED,wBAAgB,QAAQ,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAIjD;AAED,wBAAgB,SAAS,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAIlD"}
@@ -0,0 +1,25 @@
1
+ function normalizeDebugValue(value) {
2
+ return (value ?? '').trim().toLowerCase();
3
+ }
4
+ export function isDebugEnabled() {
5
+ const fromAntseed = normalizeDebugValue(process.env['ANTSEED_DEBUG']);
6
+ if (fromAntseed === '1' ||
7
+ fromAntseed === 'true' ||
8
+ fromAntseed === 'yes' ||
9
+ fromAntseed === 'on') {
10
+ return true;
11
+ }
12
+ const fromDebug = normalizeDebugValue(process.env['DEBUG']);
13
+ return fromDebug === '*' || fromDebug.includes('antseed');
14
+ }
15
+ export function debugLog(...args) {
16
+ if (isDebugEnabled()) {
17
+ console.log(...args);
18
+ }
19
+ }
20
+ export function debugWarn(...args) {
21
+ if (isDebugEnabled()) {
22
+ console.warn(...args);
23
+ }
24
+ }
25
+ //# sourceMappingURL=debug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/utils/debug.ts"],"names":[],"mappings":"AAAA,SAAS,mBAAmB,CAAC,KAAyB;IACpD,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,WAAW,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;IACtE,IACE,WAAW,KAAK,GAAG;QACnB,WAAW,KAAK,MAAM;QACtB,WAAW,KAAK,KAAK;QACrB,WAAW,KAAK,IAAI,EACpB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5D,OAAO,SAAS,KAAK,GAAG,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAG,IAAe;IACzC,IAAI,cAAc,EAAE,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAG,IAAe;IAC1C,IAAI,cAAc,EAAE,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACxB,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function hexToBytes(hex: string): Uint8Array;
2
+ export declare function bytesToHex(bytes: Uint8Array): string;
3
+ //# sourceMappingURL=hex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hex.d.ts","sourceRoot":"","sources":["../../src/utils/hex.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAOlD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAIpD"}
@@ -0,0 +1,15 @@
1
+ export function hexToBytes(hex) {
2
+ if (hex.length % 2 !== 0)
3
+ throw new Error("Hex string must have even length");
4
+ const bytes = new Uint8Array(hex.length / 2);
5
+ for (let i = 0; i < hex.length; i += 2) {
6
+ bytes[i / 2] = parseInt(hex.slice(i, i + 2), 16);
7
+ }
8
+ return bytes;
9
+ }
10
+ export function bytesToHex(bytes) {
11
+ return Array.from(bytes)
12
+ .map((b) => b.toString(16).padStart(2, "0"))
13
+ .join("");
14
+ }
15
+ //# sourceMappingURL=hex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hex.js","sourceRoot":"","sources":["../../src/utils/hex.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAiB;IAC1C,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;SACrB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAC3C,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC"}
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "@antseed/node",
3
+ "version": "0.1.0",
4
+ "description": "Antseed Network protocol SDK — P2P inference marketplace",
5
+ "type": "module",
6
+ "engines": {
7
+ "node": ">=20.0.0"
8
+ },
9
+ "main": "dist/index.js",
10
+ "types": "dist/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "import": "./dist/index.js",
14
+ "types": "./dist/index.d.ts"
15
+ },
16
+ "./p2p": {
17
+ "import": "./dist/p2p/index.js",
18
+ "types": "./dist/p2p/index.d.ts"
19
+ },
20
+ "./discovery": {
21
+ "import": "./dist/discovery/index.js",
22
+ "types": "./dist/discovery/index.d.ts"
23
+ },
24
+ "./metering": {
25
+ "import": "./dist/metering/index.js",
26
+ "types": "./dist/metering/index.d.ts"
27
+ },
28
+ "./payments": {
29
+ "import": "./dist/payments/index.js",
30
+ "types": "./dist/payments/index.d.ts"
31
+ },
32
+ "./types": {
33
+ "import": "./dist/types/index.js",
34
+ "types": "./dist/types/index.d.ts"
35
+ }
36
+ },
37
+ "scripts": {
38
+ "postinstall": "node scripts/patch-ethers.js",
39
+ "ensure:native": "node scripts/ensure-node-native-modules.mjs",
40
+ "build": "tsc",
41
+ "pretest": "npm run ensure:native",
42
+ "test": "\"$npm_node_execpath\" ./node_modules/vitest/vitest.mjs run",
43
+ "typecheck": "tsc --noEmit"
44
+ },
45
+ "dependencies": {
46
+ "@noble/ed25519": "^2.1.0",
47
+ "@silentbot1/nat-api": "^0.4.9",
48
+ "better-sqlite3": "^12.6.2",
49
+ "bittorrent-dht": "^11.0.11",
50
+ "ethers": "~6.16.0",
51
+ "node-datachannel": "^0.7.0"
52
+ },
53
+ "optionalDependencies": {
54
+ "keytar": "^7.9.0"
55
+ },
56
+ "devDependencies": {
57
+ "@types/better-sqlite3": "^7.6.13",
58
+ "@types/node": "^20.11.0",
59
+ "typescript": "^5.3.0",
60
+ "vitest": "^1.2.0"
61
+ }
62
+ }
@@ -0,0 +1,153 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { execFileSync } from 'node:child_process';
4
+ import { existsSync, readFileSync, writeFileSync } from 'node:fs';
5
+ import { createRequire } from 'node:module';
6
+ import path from 'node:path';
7
+ import { fileURLToPath } from 'node:url';
8
+
9
+ const __filename = fileURLToPath(import.meta.url);
10
+ const __dirname = path.dirname(__filename);
11
+ const nodePackageDir = path.resolve(__dirname, '..');
12
+ const packageJsonPath = path.resolve(nodePackageDir, 'package.json');
13
+ const markerPath = path.resolve(nodePackageDir, 'node_modules', 'better-sqlite3', '.node-runtime-meta.json');
14
+ const runtime = {
15
+ nodeExec: process.execPath,
16
+ nodeArch: process.arch,
17
+ nodeVersion: process.version,
18
+ };
19
+
20
+ function readMarker() {
21
+ if (!existsSync(markerPath)) return null;
22
+ try {
23
+ const raw = readFileSync(markerPath, 'utf8');
24
+ const parsed = JSON.parse(raw);
25
+ if (!parsed || typeof parsed !== 'object') return null;
26
+ return parsed;
27
+ } catch {
28
+ return null;
29
+ }
30
+ }
31
+
32
+ function markerMatches(marker) {
33
+ return marker?.nodeExec === runtime.nodeExec
34
+ && marker?.nodeArch === runtime.nodeArch
35
+ && marker?.nodeVersion === runtime.nodeVersion;
36
+ }
37
+
38
+ function writeMarker() {
39
+ writeFileSync(
40
+ markerPath,
41
+ JSON.stringify({ ...runtime, updatedAt: new Date().toISOString() }, null, 2),
42
+ 'utf8',
43
+ );
44
+ }
45
+
46
+ function loadBetterSqlite3() {
47
+ try {
48
+ const req = createRequire(packageJsonPath);
49
+ const Database = req('better-sqlite3');
50
+ const db = new Database(':memory:');
51
+ db.close();
52
+ return { ok: true, reason: null };
53
+ } catch (err) {
54
+ const message = err instanceof Error ? err.message : String(err);
55
+ return { ok: false, reason: message };
56
+ }
57
+ }
58
+
59
+ function resolveNpmCli() {
60
+ const envNpmExecPath = process.env.npm_execpath;
61
+ if (envNpmExecPath && existsSync(envNpmExecPath)) {
62
+ return envNpmExecPath;
63
+ }
64
+
65
+ try {
66
+ const resolved = execFileSync(
67
+ process.execPath,
68
+ ['-p', "require.resolve('npm/bin/npm-cli.js')"],
69
+ { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] },
70
+ ).trim();
71
+ if (resolved.length > 0 && existsSync(resolved)) {
72
+ return resolved;
73
+ }
74
+ } catch {
75
+ // fall through
76
+ }
77
+
78
+ try {
79
+ const prefix = execFileSync(
80
+ 'npm',
81
+ ['config', 'get', 'prefix'],
82
+ { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] },
83
+ ).trim();
84
+ const fromPrefix = path.resolve(prefix, 'lib', 'node_modules', 'npm', 'bin', 'npm-cli.js');
85
+ if (existsSync(fromPrefix)) {
86
+ return fromPrefix;
87
+ }
88
+ } catch {
89
+ // fall through
90
+ }
91
+
92
+ const commonCandidates = [
93
+ '/usr/local/lib/node_modules/npm/bin/npm-cli.js',
94
+ '/opt/homebrew/lib/node_modules/npm/bin/npm-cli.js',
95
+ path.resolve(path.dirname(process.execPath), '..', 'lib', 'node_modules', 'npm', 'bin', 'npm-cli.js'),
96
+ ];
97
+ for (const candidate of commonCandidates) {
98
+ if (existsSync(candidate)) {
99
+ return candidate;
100
+ }
101
+ }
102
+
103
+ return '';
104
+ }
105
+
106
+ function rebuildBetterSqlite3() {
107
+ const npmCli = resolveNpmCli();
108
+ if (!existsSync(npmCli)) {
109
+ throw new Error(`Unable to locate npm-cli.js for runtime ${process.execPath}`);
110
+ }
111
+
112
+ execFileSync(
113
+ process.execPath,
114
+ [npmCli, 'rebuild', 'better-sqlite3', '--build-from-source'],
115
+ {
116
+ cwd: nodePackageDir,
117
+ stdio: 'inherit',
118
+ env: {
119
+ ...process.env,
120
+ npm_config_arch: process.arch,
121
+ npm_config_build_from_source: 'true',
122
+ },
123
+ },
124
+ );
125
+ }
126
+
127
+ if (!existsSync(path.resolve(nodePackageDir, 'node_modules', 'better-sqlite3'))) {
128
+ console.log('[native] better-sqlite3 not installed; skipping.');
129
+ process.exit(0);
130
+ }
131
+
132
+ const marker = readMarker();
133
+ if (markerMatches(marker)) {
134
+ const loaded = loadBetterSqlite3();
135
+ if (loaded.ok) {
136
+ console.log(`[native] better-sqlite3 already aligned for Node ${runtime.nodeVersion} (${runtime.nodeArch}).`);
137
+ process.exit(0);
138
+ }
139
+ }
140
+
141
+ const before = loadBetterSqlite3();
142
+ if (!before.ok) {
143
+ console.log(`[native] rebuilding better-sqlite3 for Node ${runtime.nodeVersion} (${runtime.nodeArch})...`);
144
+ rebuildBetterSqlite3();
145
+ }
146
+
147
+ const after = loadBetterSqlite3();
148
+ if (!after.ok) {
149
+ throw new Error(`[native] better-sqlite3 failed to load after rebuild: ${after.reason}`);
150
+ }
151
+
152
+ writeMarker();
153
+ console.log('[native] better-sqlite3 runtime alignment complete.');
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Patches ethers v6 lib.esm/index.d.ts to avoid type-checking raw TypeScript sources.
3
+ *
4
+ * ethers v6 ships a lib.esm/index.d.ts that re-exports directly from the package's
5
+ * own TypeScript source tree (src.ts/). Because these are .ts files (not .d.ts),
6
+ * TypeScript's skipLibCheck does not apply to them and they fail under strict settings.
7
+ *
8
+ * The fix: redirect the two offending lines to the CJS build's ethers.d.ts, which
9
+ * contains only compiled, relative-path imports and is clean under any tsconfig.
10
+ *
11
+ * Related: https://github.com/ethers-io/ethers.js/issues/4014
12
+ */
13
+
14
+ import { readFileSync, writeFileSync, existsSync } from 'node:fs'
15
+ import { resolve, dirname } from 'node:path'
16
+ import { fileURLToPath } from 'node:url'
17
+
18
+ const __dirname = fileURLToPath(new URL('.', import.meta.url))
19
+ const indexDts = resolve(__dirname, '../node_modules/ethers/lib.esm/index.d.ts')
20
+
21
+ if (!existsSync(indexDts)) {
22
+ // ethers not installed (optional dep scenario) — skip silently
23
+ process.exit(0)
24
+ }
25
+
26
+ const original = readFileSync(indexDts, 'utf-8')
27
+
28
+ if (!original.includes('../src.ts/ethers.ts')) {
29
+ // Already patched or a fixed version of ethers — nothing to do
30
+ process.exit(0)
31
+ }
32
+
33
+ const patched = original
34
+ .replace(
35
+ 'import * as ethers from "../src.ts/ethers.ts";',
36
+ 'import * as ethers from "../lib.commonjs/ethers.js";'
37
+ )
38
+ .replace(
39
+ 'export * from "../src.ts/ethers.ts";',
40
+ 'export * from "../lib.commonjs/ethers.js";'
41
+ )
42
+
43
+ writeFileSync(indexDts, patched, 'utf-8')
44
+ console.log('patched ethers/lib.esm/index.d.ts → uses compiled CJS declarations')
@@ -0,0 +1,49 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import { encryptValue, decryptValue, deriveMachineKey, generateSalt } from './encryption.js'
3
+
4
+ describe('encryption', () => {
5
+ it('should round-trip encrypt and decrypt', () => {
6
+ const salt = generateSalt()
7
+ const key = deriveMachineKey(salt)
8
+ const plaintext = 'sk-ant-api03-secret-key-value'
9
+ const encrypted = encryptValue(plaintext, key)
10
+ expect(encrypted).not.toBe(plaintext)
11
+ const decrypted = decryptValue(encrypted, key)
12
+ expect(decrypted).toBe(plaintext)
13
+ })
14
+
15
+ it('should produce different ciphertexts for same input (random IV)', () => {
16
+ const salt = generateSalt()
17
+ const key = deriveMachineKey(salt)
18
+ const plaintext = 'test-secret'
19
+ const a = encryptValue(plaintext, key)
20
+ const b = encryptValue(plaintext, key)
21
+ expect(a).not.toBe(b)
22
+ })
23
+
24
+ it('should fail to decrypt with wrong key', () => {
25
+ const salt1 = generateSalt()
26
+ const salt2 = generateSalt()
27
+ const key1 = deriveMachineKey(salt1)
28
+ const key2 = deriveMachineKey(salt2)
29
+ const encrypted = encryptValue('secret', key1)
30
+ expect(() => decryptValue(encrypted, key2)).toThrow()
31
+ })
32
+
33
+ it('should handle empty string', () => {
34
+ const salt = generateSalt()
35
+ const key = deriveMachineKey(salt)
36
+ const encrypted = encryptValue('', key)
37
+ const decrypted = decryptValue(encrypted, key)
38
+ expect(decrypted).toBe('')
39
+ })
40
+
41
+ it('should handle unicode', () => {
42
+ const salt = generateSalt()
43
+ const key = deriveMachineKey(salt)
44
+ const plaintext = 'héllo wörld 🔑'
45
+ const encrypted = encryptValue(plaintext, key)
46
+ const decrypted = decryptValue(encrypted, key)
47
+ expect(decrypted).toBe(plaintext)
48
+ })
49
+ })
@@ -0,0 +1,53 @@
1
+ import { createCipheriv, createDecipheriv, randomBytes, scryptSync } from 'node:crypto'
2
+ import { hostname, homedir } from 'node:os'
3
+
4
+ const ALGORITHM = 'aes-256-gcm'
5
+ const SALT_LENGTH = 32
6
+ const IV_LENGTH = 16
7
+ const TAG_LENGTH = 16
8
+ const KEY_LENGTH = 32
9
+
10
+ /**
11
+ * Derive an encryption key from a machine-specific seed.
12
+ */
13
+ export function deriveMachineKey(salt: Buffer): Buffer {
14
+ const seed = [
15
+ process.env['USER'] ?? process.env['USERNAME'] ?? '',
16
+ hostname(),
17
+ homedir(),
18
+ ].join(':')
19
+ return scryptSync(seed, salt, KEY_LENGTH)
20
+ }
21
+
22
+ /**
23
+ * Encrypt a string value. Returns base64-encoded ciphertext with IV and auth tag prepended.
24
+ */
25
+ export function encryptValue(plaintext: string, key: Buffer): string {
26
+ const iv = randomBytes(IV_LENGTH)
27
+ const cipher = createCipheriv(ALGORITHM, key, iv)
28
+ const encrypted = Buffer.concat([cipher.update(plaintext, 'utf-8'), cipher.final()])
29
+ const tag = cipher.getAuthTag()
30
+ const combined = Buffer.concat([iv, tag, encrypted])
31
+ return combined.toString('base64')
32
+ }
33
+
34
+ /**
35
+ * Decrypt a base64-encoded value produced by encryptValue.
36
+ */
37
+ export function decryptValue(encoded: string, key: Buffer): string {
38
+ const combined = Buffer.from(encoded, 'base64')
39
+ const iv = combined.subarray(0, IV_LENGTH)
40
+ const tag = combined.subarray(IV_LENGTH, IV_LENGTH + TAG_LENGTH)
41
+ const ciphertext = combined.subarray(IV_LENGTH + TAG_LENGTH)
42
+ const decipher = createDecipheriv(ALGORITHM, key, iv)
43
+ decipher.setAuthTag(tag)
44
+ const decrypted = Buffer.concat([decipher.update(ciphertext), decipher.final()])
45
+ return decrypted.toString('utf-8')
46
+ }
47
+
48
+ /**
49
+ * Generate a fresh random salt for key derivation.
50
+ */
51
+ export function generateSalt(): Buffer {
52
+ return randomBytes(SALT_LENGTH)
53
+ }