@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.
- package/README.md +411 -0
- package/contracts/AntseedEscrow.sol +310 -0
- package/contracts/MockUSDC.sol +64 -0
- package/contracts/README.md +102 -0
- package/dist/config/encryption.d.ts +17 -0
- package/dist/config/encryption.d.ts.map +1 -0
- package/dist/config/encryption.js +49 -0
- package/dist/config/encryption.js.map +1 -0
- package/dist/config/plugin-config-manager.d.ts +31 -0
- package/dist/config/plugin-config-manager.d.ts.map +1 -0
- package/dist/config/plugin-config-manager.js +135 -0
- package/dist/config/plugin-config-manager.js.map +1 -0
- package/dist/config/plugin-loader.d.ts +25 -0
- package/dist/config/plugin-loader.d.ts.map +1 -0
- package/dist/config/plugin-loader.js +64 -0
- package/dist/config/plugin-loader.js.map +1 -0
- package/dist/discovery/announcer.d.ts +44 -0
- package/dist/discovery/announcer.d.ts.map +1 -0
- package/dist/discovery/announcer.js +129 -0
- package/dist/discovery/announcer.js.map +1 -0
- package/dist/discovery/bootstrap.d.ts +13 -0
- package/dist/discovery/bootstrap.d.ts.map +1 -0
- package/dist/discovery/bootstrap.js +39 -0
- package/dist/discovery/bootstrap.js.map +1 -0
- package/dist/discovery/default-metadata-resolver.d.ts +16 -0
- package/dist/discovery/default-metadata-resolver.d.ts.map +1 -0
- package/dist/discovery/default-metadata-resolver.js +16 -0
- package/dist/discovery/default-metadata-resolver.js.map +1 -0
- package/dist/discovery/dht-health.d.ts +38 -0
- package/dist/discovery/dht-health.d.ts.map +1 -0
- package/dist/discovery/dht-health.js +101 -0
- package/dist/discovery/dht-health.js.map +1 -0
- package/dist/discovery/dht-node.d.ts +34 -0
- package/dist/discovery/dht-node.d.ts.map +1 -0
- package/dist/discovery/dht-node.js +168 -0
- package/dist/discovery/dht-node.js.map +1 -0
- package/dist/discovery/http-metadata-resolver.d.ts +15 -0
- package/dist/discovery/http-metadata-resolver.d.ts.map +1 -0
- package/dist/discovery/http-metadata-resolver.js +33 -0
- package/dist/discovery/http-metadata-resolver.js.map +1 -0
- package/dist/discovery/index.d.ts +16 -0
- package/dist/discovery/index.d.ts.map +1 -0
- package/dist/discovery/index.js +15 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/discovery/metadata-codec.d.ts +22 -0
- package/dist/discovery/metadata-codec.d.ts.map +1 -0
- package/dist/discovery/metadata-codec.js +390 -0
- package/dist/discovery/metadata-codec.js.map +1 -0
- package/dist/discovery/metadata-resolver.d.ts +9 -0
- package/dist/discovery/metadata-resolver.d.ts.map +1 -0
- package/dist/discovery/metadata-resolver.js +2 -0
- package/dist/discovery/metadata-resolver.js.map +1 -0
- package/dist/discovery/metadata-server.d.ts +16 -0
- package/dist/discovery/metadata-server.d.ts.map +1 -0
- package/dist/discovery/metadata-server.js +59 -0
- package/dist/discovery/metadata-server.js.map +1 -0
- package/dist/discovery/metadata-validator.d.ts +12 -0
- package/dist/discovery/metadata-validator.d.ts.map +1 -0
- package/dist/discovery/metadata-validator.js +153 -0
- package/dist/discovery/metadata-validator.js.map +1 -0
- package/dist/discovery/peer-lookup.d.ts +26 -0
- package/dist/discovery/peer-lookup.d.ts.map +1 -0
- package/dist/discovery/peer-lookup.js +86 -0
- package/dist/discovery/peer-lookup.js.map +1 -0
- package/dist/discovery/peer-metadata.d.ts +31 -0
- package/dist/discovery/peer-metadata.d.ts.map +1 -0
- package/dist/discovery/peer-metadata.js +2 -0
- package/dist/discovery/peer-metadata.js.map +1 -0
- package/dist/discovery/peer-selector.d.ts +33 -0
- package/dist/discovery/peer-selector.d.ts.map +1 -0
- package/dist/discovery/peer-selector.js +80 -0
- package/dist/discovery/peer-selector.js.map +1 -0
- package/dist/discovery/profile-manager.d.ts +50 -0
- package/dist/discovery/profile-manager.d.ts.map +1 -0
- package/dist/discovery/profile-manager.js +105 -0
- package/dist/discovery/profile-manager.js.map +1 -0
- package/dist/discovery/profile-search.d.ts +27 -0
- package/dist/discovery/profile-search.d.ts.map +1 -0
- package/dist/discovery/profile-search.js +75 -0
- package/dist/discovery/profile-search.js.map +1 -0
- package/dist/discovery/reputation-verifier.d.ts +25 -0
- package/dist/discovery/reputation-verifier.d.ts.map +1 -0
- package/dist/discovery/reputation-verifier.js +27 -0
- package/dist/discovery/reputation-verifier.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/buyer-router.d.ts +21 -0
- package/dist/interfaces/buyer-router.d.ts.map +1 -0
- package/dist/interfaces/buyer-router.js +2 -0
- package/dist/interfaces/buyer-router.js.map +1 -0
- package/dist/interfaces/plugin.d.ts +31 -0
- package/dist/interfaces/plugin.d.ts.map +1 -0
- package/dist/interfaces/plugin.js +2 -0
- package/dist/interfaces/plugin.js.map +1 -0
- package/dist/interfaces/seller-provider.d.ts +69 -0
- package/dist/interfaces/seller-provider.d.ts.map +1 -0
- package/dist/interfaces/seller-provider.js +2 -0
- package/dist/interfaces/seller-provider.js.map +1 -0
- package/dist/metering/index.d.ts +7 -0
- package/dist/metering/index.d.ts.map +1 -0
- package/dist/metering/index.js +7 -0
- package/dist/metering/index.js.map +1 -0
- package/dist/metering/receipt-generator.d.ts +49 -0
- package/dist/metering/receipt-generator.d.ts.map +1 -0
- package/dist/metering/receipt-generator.js +74 -0
- package/dist/metering/receipt-generator.js.map +1 -0
- package/dist/metering/receipt-verifier.d.ts +52 -0
- package/dist/metering/receipt-verifier.d.ts.map +1 -0
- package/dist/metering/receipt-verifier.js +63 -0
- package/dist/metering/receipt-verifier.js.map +1 -0
- package/dist/metering/session-tracker.d.ts +59 -0
- package/dist/metering/session-tracker.d.ts.map +1 -0
- package/dist/metering/session-tracker.js +119 -0
- package/dist/metering/session-tracker.js.map +1 -0
- package/dist/metering/storage.d.ts +72 -0
- package/dist/metering/storage.d.ts.map +1 -0
- package/dist/metering/storage.js +446 -0
- package/dist/metering/storage.js.map +1 -0
- package/dist/metering/token-counter.d.ts +50 -0
- package/dist/metering/token-counter.d.ts.map +1 -0
- package/dist/metering/token-counter.js +96 -0
- package/dist/metering/token-counter.js.map +1 -0
- package/dist/metering/usage-aggregator.d.ts +46 -0
- package/dist/metering/usage-aggregator.d.ts.map +1 -0
- package/dist/metering/usage-aggregator.js +170 -0
- package/dist/metering/usage-aggregator.js.map +1 -0
- package/dist/node.d.ts +179 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +1328 -0
- package/dist/node.js.map +1 -0
- package/dist/p2p/connection-auth.d.ts +35 -0
- package/dist/p2p/connection-auth.d.ts.map +1 -0
- package/dist/p2p/connection-auth.js +102 -0
- package/dist/p2p/connection-auth.js.map +1 -0
- package/dist/p2p/connection-manager.d.ts +101 -0
- package/dist/p2p/connection-manager.d.ts.map +1 -0
- package/dist/p2p/connection-manager.js +726 -0
- package/dist/p2p/connection-manager.js.map +1 -0
- package/dist/p2p/handshake.d.ts +47 -0
- package/dist/p2p/handshake.d.ts.map +1 -0
- package/dist/p2p/handshake.js +107 -0
- package/dist/p2p/handshake.js.map +1 -0
- package/dist/p2p/ice-config.d.ts +27 -0
- package/dist/p2p/ice-config.d.ts.map +1 -0
- package/dist/p2p/ice-config.js +43 -0
- package/dist/p2p/ice-config.js.map +1 -0
- package/dist/p2p/identity.d.ts +27 -0
- package/dist/p2p/identity.d.ts.map +1 -0
- package/dist/p2p/identity.js +76 -0
- package/dist/p2p/identity.js.map +1 -0
- package/dist/p2p/index.d.ts +12 -0
- package/dist/p2p/index.d.ts.map +1 -0
- package/dist/p2p/index.js +11 -0
- package/dist/p2p/index.js.map +1 -0
- package/dist/p2p/keepalive.d.ts +49 -0
- package/dist/p2p/keepalive.d.ts.map +1 -0
- package/dist/p2p/keepalive.js +93 -0
- package/dist/p2p/keepalive.js.map +1 -0
- package/dist/p2p/message-protocol.d.ts +50 -0
- package/dist/p2p/message-protocol.d.ts.map +1 -0
- package/dist/p2p/message-protocol.js +134 -0
- package/dist/p2p/message-protocol.js.map +1 -0
- package/dist/p2p/nat-traversal.d.ts +51 -0
- package/dist/p2p/nat-traversal.d.ts.map +1 -0
- package/dist/p2p/nat-traversal.js +135 -0
- package/dist/p2p/nat-traversal.js.map +1 -0
- package/dist/p2p/payment-codec.d.ts +20 -0
- package/dist/p2p/payment-codec.d.ts.map +1 -0
- package/dist/p2p/payment-codec.js +130 -0
- package/dist/p2p/payment-codec.js.map +1 -0
- package/dist/p2p/payment-mux.d.ts +49 -0
- package/dist/p2p/payment-mux.d.ts.map +1 -0
- package/dist/p2p/payment-mux.js +131 -0
- package/dist/p2p/payment-mux.js.map +1 -0
- package/dist/p2p/reconnect.d.ts +48 -0
- package/dist/p2p/reconnect.d.ts.map +1 -0
- package/dist/p2p/reconnect.js +89 -0
- package/dist/p2p/reconnect.js.map +1 -0
- package/dist/payments/balance-manager.d.ts +17 -0
- package/dist/payments/balance-manager.d.ts.map +1 -0
- package/dist/payments/balance-manager.js +54 -0
- package/dist/payments/balance-manager.js.map +1 -0
- package/dist/payments/buyer-payment-manager.d.ts +122 -0
- package/dist/payments/buyer-payment-manager.d.ts.map +1 -0
- package/dist/payments/buyer-payment-manager.js +280 -0
- package/dist/payments/buyer-payment-manager.js.map +1 -0
- package/dist/payments/disputes.d.ts +18 -0
- package/dist/payments/disputes.d.ts.map +1 -0
- package/dist/payments/disputes.js +47 -0
- package/dist/payments/disputes.js.map +1 -0
- package/dist/payments/evm/escrow-client.d.ts +61 -0
- package/dist/payments/evm/escrow-client.d.ts.map +1 -0
- package/dist/payments/evm/escrow-client.js +170 -0
- package/dist/payments/evm/escrow-client.js.map +1 -0
- package/dist/payments/evm/keypair.d.ts +21 -0
- package/dist/payments/evm/keypair.d.ts.map +1 -0
- package/dist/payments/evm/keypair.js +29 -0
- package/dist/payments/evm/keypair.js.map +1 -0
- package/dist/payments/evm/signatures.d.ts +11 -0
- package/dist/payments/evm/signatures.d.ts.map +1 -0
- package/dist/payments/evm/signatures.js +56 -0
- package/dist/payments/evm/signatures.js.map +1 -0
- package/dist/payments/evm/wallet.d.ts +5 -0
- package/dist/payments/evm/wallet.d.ts.map +1 -0
- package/dist/payments/evm/wallet.js +31 -0
- package/dist/payments/evm/wallet.js.map +1 -0
- package/dist/payments/index.d.ts +13 -0
- package/dist/payments/index.d.ts.map +1 -0
- package/dist/payments/index.js +14 -0
- package/dist/payments/index.js.map +1 -0
- package/dist/payments/settlement.d.ts +6 -0
- package/dist/payments/settlement.d.ts.map +1 -0
- package/dist/payments/settlement.js +25 -0
- package/dist/payments/settlement.js.map +1 -0
- package/dist/payments/types.d.ts +66 -0
- package/dist/payments/types.d.ts.map +1 -0
- package/dist/payments/types.js +2 -0
- package/dist/payments/types.js.map +1 -0
- package/dist/proxy/index.d.ts +4 -0
- package/dist/proxy/index.d.ts.map +1 -0
- package/dist/proxy/index.js +4 -0
- package/dist/proxy/index.js.map +1 -0
- package/dist/proxy/provider-detection.d.ts +20 -0
- package/dist/proxy/provider-detection.d.ts.map +1 -0
- package/dist/proxy/provider-detection.js +61 -0
- package/dist/proxy/provider-detection.js.map +1 -0
- package/dist/proxy/proxy-mux.d.ts +35 -0
- package/dist/proxy/proxy-mux.d.ts.map +1 -0
- package/dist/proxy/proxy-mux.js +137 -0
- package/dist/proxy/proxy-mux.js.map +1 -0
- package/dist/proxy/request-codec.d.ts +33 -0
- package/dist/proxy/request-codec.d.ts.map +1 -0
- package/dist/proxy/request-codec.js +238 -0
- package/dist/proxy/request-codec.js.map +1 -0
- package/dist/reputation/index.d.ts +7 -0
- package/dist/reputation/index.d.ts.map +1 -0
- package/dist/reputation/index.js +6 -0
- package/dist/reputation/index.js.map +1 -0
- package/dist/reputation/rating-manager.d.ts +20 -0
- package/dist/reputation/rating-manager.d.ts.map +1 -0
- package/dist/reputation/rating-manager.js +91 -0
- package/dist/reputation/rating-manager.js.map +1 -0
- package/dist/reputation/report-manager.d.ts +21 -0
- package/dist/reputation/report-manager.d.ts.map +1 -0
- package/dist/reputation/report-manager.js +70 -0
- package/dist/reputation/report-manager.js.map +1 -0
- package/dist/reputation/trust-engine.d.ts +36 -0
- package/dist/reputation/trust-engine.d.ts.map +1 -0
- package/dist/reputation/trust-engine.js +95 -0
- package/dist/reputation/trust-engine.js.map +1 -0
- package/dist/reputation/trust-score.d.ts +43 -0
- package/dist/reputation/trust-score.d.ts.map +1 -0
- package/dist/reputation/trust-score.js +34 -0
- package/dist/reputation/trust-score.js.map +1 -0
- package/dist/reputation/uptime-tracker.d.ts +51 -0
- package/dist/reputation/uptime-tracker.d.ts.map +1 -0
- package/dist/reputation/uptime-tracker.js +123 -0
- package/dist/reputation/uptime-tracker.js.map +1 -0
- package/dist/routing/default-router.d.ts +21 -0
- package/dist/routing/default-router.d.ts.map +1 -0
- package/dist/routing/default-router.js +60 -0
- package/dist/routing/default-router.js.map +1 -0
- package/dist/types/buyer.d.ts +36 -0
- package/dist/types/buyer.d.ts.map +1 -0
- package/dist/types/buyer.js +2 -0
- package/dist/types/buyer.js.map +1 -0
- package/dist/types/capability.d.ts +25 -0
- package/dist/types/capability.d.ts.map +1 -0
- package/dist/types/capability.js +2 -0
- package/dist/types/capability.js.map +1 -0
- package/dist/types/connection.d.ts +27 -0
- package/dist/types/connection.d.ts.map +1 -0
- package/dist/types/connection.js +11 -0
- package/dist/types/connection.js.map +1 -0
- package/dist/types/http.d.ts +19 -0
- package/dist/types/http.d.ts.map +1 -0
- package/dist/types/http.js +2 -0
- package/dist/types/http.js.map +1 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +15 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/metering.d.ts +170 -0
- package/dist/types/metering.d.ts.map +1 -0
- package/dist/types/metering.js +2 -0
- package/dist/types/metering.js.map +1 -0
- package/dist/types/peer-profile.d.ts +24 -0
- package/dist/types/peer-profile.d.ts.map +1 -0
- package/dist/types/peer-profile.js +2 -0
- package/dist/types/peer-profile.js.map +1 -0
- package/dist/types/peer.d.ts +56 -0
- package/dist/types/peer.d.ts.map +1 -0
- package/dist/types/peer.js +11 -0
- package/dist/types/peer.js.map +1 -0
- package/dist/types/plugin-config.d.ts +31 -0
- package/dist/types/plugin-config.d.ts.map +1 -0
- package/dist/types/plugin-config.js +2 -0
- package/dist/types/plugin-config.js.map +1 -0
- package/dist/types/protocol.d.ts +141 -0
- package/dist/types/protocol.d.ts.map +1 -0
- package/dist/types/protocol.js +42 -0
- package/dist/types/protocol.js.map +1 -0
- package/dist/types/provider.d.ts +38 -0
- package/dist/types/provider.d.ts.map +1 -0
- package/dist/types/provider.js +11 -0
- package/dist/types/provider.js.map +1 -0
- package/dist/types/rating.d.ts +21 -0
- package/dist/types/rating.d.ts.map +1 -0
- package/dist/types/rating.js +2 -0
- package/dist/types/rating.js.map +1 -0
- package/dist/types/report.d.ts +20 -0
- package/dist/types/report.d.ts.map +1 -0
- package/dist/types/report.js +2 -0
- package/dist/types/report.js.map +1 -0
- package/dist/types/seller.d.ts +36 -0
- package/dist/types/seller.d.ts.map +1 -0
- package/dist/types/seller.js +2 -0
- package/dist/types/seller.js.map +1 -0
- package/dist/types/staking.d.ts +16 -0
- package/dist/types/staking.d.ts.map +1 -0
- package/dist/types/staking.js +6 -0
- package/dist/types/staking.js.map +1 -0
- package/dist/utils/debug.d.ts +4 -0
- package/dist/utils/debug.d.ts.map +1 -0
- package/dist/utils/debug.js +25 -0
- package/dist/utils/debug.js.map +1 -0
- package/dist/utils/hex.d.ts +3 -0
- package/dist/utils/hex.d.ts.map +1 -0
- package/dist/utils/hex.js +15 -0
- package/dist/utils/hex.js.map +1 -0
- package/package.json +62 -0
- package/scripts/ensure-node-native-modules.mjs +153 -0
- package/scripts/patch-ethers.js +44 -0
- package/src/config/encryption.test.ts +49 -0
- package/src/config/encryption.ts +53 -0
- package/src/config/plugin-config-manager.test.ts +92 -0
- package/src/config/plugin-config-manager.ts +153 -0
- package/src/config/plugin-loader.ts +90 -0
- package/src/discovery/announcer.ts +169 -0
- package/src/discovery/bootstrap.ts +57 -0
- package/src/discovery/default-metadata-resolver.ts +18 -0
- package/src/discovery/dht-health.ts +136 -0
- package/src/discovery/dht-node.ts +191 -0
- package/src/discovery/http-metadata-resolver.ts +47 -0
- package/src/discovery/index.ts +15 -0
- package/src/discovery/metadata-codec.ts +453 -0
- package/src/discovery/metadata-resolver.ts +7 -0
- package/src/discovery/metadata-server.ts +73 -0
- package/src/discovery/metadata-validator.ts +172 -0
- package/src/discovery/peer-lookup.ts +122 -0
- package/src/discovery/peer-metadata.ts +34 -0
- package/src/discovery/peer-selector.ts +134 -0
- package/src/discovery/profile-manager.ts +131 -0
- package/src/discovery/profile-search.ts +100 -0
- package/src/discovery/reputation-verifier.ts +54 -0
- package/src/index.ts +61 -0
- package/src/interfaces/buyer-router.ts +21 -0
- package/src/interfaces/plugin.ts +36 -0
- package/src/interfaces/seller-provider.ts +81 -0
- package/src/metering/index.ts +6 -0
- package/src/metering/receipt-generator.ts +105 -0
- package/src/metering/receipt-verifier.ts +102 -0
- package/src/metering/session-tracker.ts +145 -0
- package/src/metering/storage.ts +600 -0
- package/src/metering/token-counter.ts +127 -0
- package/src/metering/usage-aggregator.ts +236 -0
- package/src/node.ts +1698 -0
- package/src/p2p/connection-auth.ts +152 -0
- package/src/p2p/connection-manager.ts +916 -0
- package/src/p2p/handshake.ts +162 -0
- package/src/p2p/ice-config.ts +59 -0
- package/src/p2p/identity.ts +110 -0
- package/src/p2p/index.ts +11 -0
- package/src/p2p/keepalive.ts +118 -0
- package/src/p2p/message-protocol.ts +171 -0
- package/src/p2p/nat-traversal.ts +169 -0
- package/src/p2p/payment-codec.ts +165 -0
- package/src/p2p/payment-mux.ts +153 -0
- package/src/p2p/reconnect.ts +117 -0
- package/src/payments/balance-manager.ts +77 -0
- package/src/payments/buyer-payment-manager.ts +414 -0
- package/src/payments/disputes.ts +72 -0
- package/src/payments/evm/escrow-client.ts +263 -0
- package/src/payments/evm/keypair.ts +31 -0
- package/src/payments/evm/signatures.ts +103 -0
- package/src/payments/evm/wallet.ts +42 -0
- package/src/payments/index.ts +50 -0
- package/src/payments/settlement.ts +40 -0
- package/src/payments/types.ts +79 -0
- package/src/proxy/index.ts +3 -0
- package/src/proxy/provider-detection.ts +78 -0
- package/src/proxy/proxy-mux.ts +173 -0
- package/src/proxy/request-codec.ts +294 -0
- package/src/reputation/index.ts +6 -0
- package/src/reputation/rating-manager.ts +118 -0
- package/src/reputation/report-manager.ts +91 -0
- package/src/reputation/trust-engine.ts +120 -0
- package/src/reputation/trust-score.ts +74 -0
- package/src/reputation/uptime-tracker.ts +155 -0
- package/src/routing/default-router.ts +75 -0
- package/src/types/bittorrent-dht.d.ts +19 -0
- package/src/types/buyer.ts +37 -0
- package/src/types/capability.ts +34 -0
- package/src/types/connection.ts +29 -0
- package/src/types/http.ts +20 -0
- package/src/types/index.ts +14 -0
- package/src/types/metering.ts +175 -0
- package/src/types/nat-api.d.ts +29 -0
- package/src/types/peer-profile.ts +25 -0
- package/src/types/peer.ts +62 -0
- package/src/types/plugin-config.ts +31 -0
- package/src/types/protocol.ts +162 -0
- package/src/types/provider.ts +40 -0
- package/src/types/rating.ts +23 -0
- package/src/types/report.ts +30 -0
- package/src/types/seller.ts +38 -0
- package/src/types/staking.ts +23 -0
- package/src/utils/debug.ts +30 -0
- package/src/utils/hex.ts +14 -0
- package/tests/balance-manager.test.ts +156 -0
- package/tests/bootstrap.test.ts +108 -0
- package/tests/buyer-payment-manager.test.ts +358 -0
- package/tests/connection-auth.test.ts +87 -0
- package/tests/default-router.test.ts +148 -0
- package/tests/evm-keypair.test.ts +173 -0
- package/tests/identity.test.ts +133 -0
- package/tests/message-protocol.test.ts +212 -0
- package/tests/metadata-codec.test.ts +165 -0
- package/tests/metadata-validator.test.ts +261 -0
- package/tests/metering-storage.test.ts +244 -0
- package/tests/payment-codec.test.ts +95 -0
- package/tests/payment-mux.test.ts +191 -0
- package/tests/peer-selector.test.ts +184 -0
- package/tests/provider-detection.test.ts +107 -0
- package/tests/proxy-mux-security.test.ts +38 -0
- package/tests/receipt.test.ts +215 -0
- package/tests/reputation-integration.test.ts +195 -0
- package/tests/request-codec.test.ts +144 -0
- package/tests/token-counter.test.ts +122 -0
- package/tsconfig.json +9 -0
- package/vitest.config.ts +7 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider type - using string for flexibility with custom providers.
|
|
3
|
+
*/
|
|
4
|
+
export type ProviderType = 'anthropic' | 'openai' | 'google' | 'moonshot' | string;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Token count estimate derived from HTTP content-length.
|
|
8
|
+
* NOT exact -- this is a heuristic estimate.
|
|
9
|
+
*/
|
|
10
|
+
export interface TokenCount {
|
|
11
|
+
/** Estimated input tokens (from request content-length) */
|
|
12
|
+
inputTokens: number;
|
|
13
|
+
/** Estimated output tokens (from response content-length) */
|
|
14
|
+
outputTokens: number;
|
|
15
|
+
/** Total estimated tokens */
|
|
16
|
+
totalTokens: number;
|
|
17
|
+
/** The estimation method used */
|
|
18
|
+
method: 'content-length' | 'chunk-accumulation' | 'fallback';
|
|
19
|
+
/**
|
|
20
|
+
* Confidence level of the estimate.
|
|
21
|
+
* 'high' = Content-Length header was present.
|
|
22
|
+
* 'medium' = accumulated from stream chunks.
|
|
23
|
+
* 'low' = fallback estimate based on request path / defaults.
|
|
24
|
+
*/
|
|
25
|
+
confidence: 'high' | 'medium' | 'low';
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* A single metering event for one request/response cycle.
|
|
30
|
+
*/
|
|
31
|
+
export interface MeteringEvent {
|
|
32
|
+
/** Unique event ID (UUIDv4) */
|
|
33
|
+
eventId: string;
|
|
34
|
+
/** Session this event belongs to */
|
|
35
|
+
sessionId: string;
|
|
36
|
+
/** Timestamp of the request (ms since epoch) */
|
|
37
|
+
timestamp: number;
|
|
38
|
+
/** Provider used */
|
|
39
|
+
provider: ProviderType;
|
|
40
|
+
/** Seller peer ID */
|
|
41
|
+
sellerPeerId: string;
|
|
42
|
+
/** Buyer peer ID */
|
|
43
|
+
buyerPeerId: string;
|
|
44
|
+
/** Token estimate */
|
|
45
|
+
tokens: TokenCount;
|
|
46
|
+
/** Request latency in ms (from send to first byte) */
|
|
47
|
+
latencyMs: number;
|
|
48
|
+
/** HTTP status code of the response */
|
|
49
|
+
statusCode: number;
|
|
50
|
+
/** Whether the response was streamed (SSE) */
|
|
51
|
+
wasStreaming: boolean;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Signed usage receipt produced by the seller after each request.
|
|
56
|
+
* The receipt is the unit of billing -- payments settle based on receipts.
|
|
57
|
+
*/
|
|
58
|
+
export interface UsageReceipt {
|
|
59
|
+
/** Unique receipt ID (UUIDv4) */
|
|
60
|
+
receiptId: string;
|
|
61
|
+
/** Session ID this receipt belongs to */
|
|
62
|
+
sessionId: string;
|
|
63
|
+
/** Corresponding metering event ID */
|
|
64
|
+
eventId: string;
|
|
65
|
+
/** Timestamp of receipt creation (ms since epoch) */
|
|
66
|
+
timestamp: number;
|
|
67
|
+
/** Provider used */
|
|
68
|
+
provider: ProviderType;
|
|
69
|
+
/** Seller's peer ID */
|
|
70
|
+
sellerPeerId: string;
|
|
71
|
+
/** Buyer's peer ID */
|
|
72
|
+
buyerPeerId: string;
|
|
73
|
+
/** Seller's token estimate */
|
|
74
|
+
tokens: TokenCount;
|
|
75
|
+
/** Effective unit price in USD cents per 1,000 tokens (derived from seller offer pricing). */
|
|
76
|
+
unitPriceCentsPerThousandTokens: number;
|
|
77
|
+
/** Total cost in USD cents: (totalTokens / 1000) * unitPriceCentsPerThousandTokens */
|
|
78
|
+
costCents: number;
|
|
79
|
+
/**
|
|
80
|
+
* Ed25519 signature over the receipt data (hex string).
|
|
81
|
+
* Signs: receiptId + sessionId + eventId + timestamp + provider
|
|
82
|
+
* + sellerPeerId + buyerPeerId + totalTokens + costCents
|
|
83
|
+
*/
|
|
84
|
+
signature: string;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Result of buyer verifying a seller's receipt.
|
|
89
|
+
*/
|
|
90
|
+
export interface ReceiptVerification {
|
|
91
|
+
/** The receipt being verified */
|
|
92
|
+
receiptId: string;
|
|
93
|
+
/** Whether the signature is valid */
|
|
94
|
+
signatureValid: boolean;
|
|
95
|
+
/** Buyer's independent token estimate */
|
|
96
|
+
buyerTokenEstimate: TokenCount;
|
|
97
|
+
/** Seller's token estimate (from receipt) */
|
|
98
|
+
sellerTokenEstimate: TokenCount;
|
|
99
|
+
/** Absolute difference in total tokens */
|
|
100
|
+
tokenDifference: number;
|
|
101
|
+
/**
|
|
102
|
+
* Percentage difference: abs(seller - buyer) / max(seller, buyer) * 100
|
|
103
|
+
*/
|
|
104
|
+
percentageDifference: number;
|
|
105
|
+
/**
|
|
106
|
+
* Whether the discrepancy exceeds the acceptable threshold.
|
|
107
|
+
* Default threshold: 15%
|
|
108
|
+
*/
|
|
109
|
+
disputed: boolean;
|
|
110
|
+
/** Verification timestamp */
|
|
111
|
+
verifiedAt: number;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Aggregated metrics for a single session.
|
|
116
|
+
*/
|
|
117
|
+
export interface SessionMetrics {
|
|
118
|
+
/** Session ID */
|
|
119
|
+
sessionId: string;
|
|
120
|
+
/** Seller's peer ID */
|
|
121
|
+
sellerPeerId: string;
|
|
122
|
+
/** Buyer's peer ID */
|
|
123
|
+
buyerPeerId: string;
|
|
124
|
+
/** Provider used */
|
|
125
|
+
provider: ProviderType;
|
|
126
|
+
/** Session start time */
|
|
127
|
+
startedAt: number;
|
|
128
|
+
/** Session end time (null if still active) */
|
|
129
|
+
endedAt: number | null;
|
|
130
|
+
/** Total requests in this session */
|
|
131
|
+
totalRequests: number;
|
|
132
|
+
/** Total estimated tokens */
|
|
133
|
+
totalTokens: number;
|
|
134
|
+
/** Total cost in USD cents (sum of receipt costs) */
|
|
135
|
+
totalCostCents: number;
|
|
136
|
+
/** Average latency in ms */
|
|
137
|
+
avgLatencyMs: number;
|
|
138
|
+
/** Number of peer switches during this session */
|
|
139
|
+
peerSwitches: number;
|
|
140
|
+
/** Number of disputed receipts */
|
|
141
|
+
disputedReceipts: number;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Aggregated usage over a time period.
|
|
146
|
+
*/
|
|
147
|
+
export interface UsageAggregate {
|
|
148
|
+
/** Start of aggregation period */
|
|
149
|
+
periodStart: number;
|
|
150
|
+
/** End of aggregation period */
|
|
151
|
+
periodEnd: number;
|
|
152
|
+
/** Granularity of the period */
|
|
153
|
+
granularity: 'daily' | 'weekly' | 'monthly';
|
|
154
|
+
/** Total sessions in this period */
|
|
155
|
+
totalSessions: number;
|
|
156
|
+
/** Total requests */
|
|
157
|
+
totalRequests: number;
|
|
158
|
+
/** Total estimated tokens */
|
|
159
|
+
totalTokens: number;
|
|
160
|
+
/** Total cost/earnings in USD cents */
|
|
161
|
+
totalCostCents: number;
|
|
162
|
+
/** Breakdown by provider */
|
|
163
|
+
byProvider: Record<ProviderType, {
|
|
164
|
+
requests: number;
|
|
165
|
+
tokens: number;
|
|
166
|
+
costCents: number;
|
|
167
|
+
}>;
|
|
168
|
+
/** Breakdown by peer (top N) */
|
|
169
|
+
topPeers: Array<{
|
|
170
|
+
peerId: string;
|
|
171
|
+
requests: number;
|
|
172
|
+
tokens: number;
|
|
173
|
+
costCents: number;
|
|
174
|
+
}>;
|
|
175
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
declare module "@silentbot1/nat-api" {
|
|
2
|
+
interface NatAPIOptions {
|
|
3
|
+
ttl?: number;
|
|
4
|
+
description?: string;
|
|
5
|
+
gateway?: string;
|
|
6
|
+
autoUpdate?: boolean;
|
|
7
|
+
enablePMP?: boolean;
|
|
8
|
+
enableUPNP?: boolean;
|
|
9
|
+
upnpPermanentFallback?: boolean;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
interface MapOptions {
|
|
13
|
+
publicPort: number;
|
|
14
|
+
privatePort: number;
|
|
15
|
+
protocol?: "TCP" | "UDP";
|
|
16
|
+
ttl?: number;
|
|
17
|
+
description?: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
class NatAPI {
|
|
21
|
+
constructor(opts?: NatAPIOptions);
|
|
22
|
+
map(publicPort: number | MapOptions, privatePort?: number): Promise<boolean>;
|
|
23
|
+
unmap(publicPort: number | MapOptions, privatePort?: number): Promise<void>;
|
|
24
|
+
externalIp(): Promise<string>;
|
|
25
|
+
destroy(): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export default NatAPI;
|
|
29
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { PeerId } from './peer.js';
|
|
2
|
+
import type { ProviderCapability } from './capability.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Alias for profile capabilities — uses the canonical ProviderCapability type.
|
|
6
|
+
*/
|
|
7
|
+
export type ProfileCapability = ProviderCapability;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Full peer profile — richer than PeerMetadata (which is DHT wire format).
|
|
11
|
+
* This is the profile that peers create and publish.
|
|
12
|
+
*/
|
|
13
|
+
export interface PeerProfile {
|
|
14
|
+
peerId: PeerId;
|
|
15
|
+
displayName: string;
|
|
16
|
+
description: string;
|
|
17
|
+
tags: string[];
|
|
18
|
+
capabilities: ProfileCapability[];
|
|
19
|
+
region: string;
|
|
20
|
+
languages: string[];
|
|
21
|
+
website?: string;
|
|
22
|
+
avatar?: string;
|
|
23
|
+
createdAt: number;
|
|
24
|
+
updatedAt: number;
|
|
25
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A PeerId is the hex-encoded Ed25519 public key (64 hex chars = 32 bytes).
|
|
3
|
+
* This is the canonical identifier for any peer in the network.
|
|
4
|
+
*/
|
|
5
|
+
export type PeerId = string & { readonly __brand: "PeerId" };
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Validates and brands a string as a PeerId.
|
|
9
|
+
* Must be exactly 64 lowercase hex characters.
|
|
10
|
+
*/
|
|
11
|
+
export function toPeerId(hex: string): PeerId {
|
|
12
|
+
if (!/^[0-9a-f]{64}$/.test(hex)) {
|
|
13
|
+
throw new Error(`Invalid PeerId: expected 64 hex chars, got "${hex.slice(0, 20)}..."`);
|
|
14
|
+
}
|
|
15
|
+
return hex as PeerId;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface TokenPricingUsdPerMillion {
|
|
19
|
+
inputUsdPerMillion: number;
|
|
20
|
+
outputUsdPerMillion: number;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface ProviderPricingMatrixEntry {
|
|
24
|
+
defaults: TokenPricingUsdPerMillion;
|
|
25
|
+
models?: Record<string, TokenPricingUsdPerMillion>;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** Information about a known peer. */
|
|
29
|
+
export interface PeerInfo {
|
|
30
|
+
/** Unique peer identifier (Ed25519 public key hex). */
|
|
31
|
+
peerId: PeerId;
|
|
32
|
+
/** Human-readable label, optional. */
|
|
33
|
+
displayName?: string;
|
|
34
|
+
/** Last known STUN-resolved public address. */
|
|
35
|
+
publicAddress?: string;
|
|
36
|
+
/** Last seen timestamp (Unix ms). */
|
|
37
|
+
lastSeen: number;
|
|
38
|
+
/** LLM providers this peer is offering (empty if buyer-only). */
|
|
39
|
+
providers: string[];
|
|
40
|
+
/** Reputation score (0-100). */
|
|
41
|
+
reputationScore?: number;
|
|
42
|
+
/** Provider/model-aware pricing map announced by seller. */
|
|
43
|
+
providerPricing?: Record<string, ProviderPricingMatrixEntry>;
|
|
44
|
+
/** Deterministic fallback default input price (USD per 1M tokens). */
|
|
45
|
+
defaultInputUsdPerMillion?: number;
|
|
46
|
+
/** Deterministic fallback default output price (USD per 1M tokens). */
|
|
47
|
+
defaultOutputUsdPerMillion?: number;
|
|
48
|
+
/** Maximum concurrent requests the peer can handle. */
|
|
49
|
+
maxConcurrency?: number;
|
|
50
|
+
/** Current number of requests the peer is handling. */
|
|
51
|
+
currentLoad?: number;
|
|
52
|
+
/** Computed trust score (0-100) from the trust engine. */
|
|
53
|
+
trustScore?: number;
|
|
54
|
+
/** EVM address of the peer (0x-prefixed hex). */
|
|
55
|
+
evmAddress?: string;
|
|
56
|
+
/** On-chain reputation score (0-100) from the Base escrow contract. */
|
|
57
|
+
onChainReputation?: number;
|
|
58
|
+
/** On-chain session count from the Base escrow contract. */
|
|
59
|
+
onChainSessionCount?: number;
|
|
60
|
+
/** On-chain dispute count from the Base escrow contract. */
|
|
61
|
+
onChainDisputeCount?: number;
|
|
62
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin instance configuration stored in ~/.antseed/config.json.
|
|
3
|
+
*/
|
|
4
|
+
export interface PluginInstanceConfig {
|
|
5
|
+
/** Unique instance ID (e.g., "my-anthropic", "cheap-openrouter") */
|
|
6
|
+
id: string
|
|
7
|
+
/** npm package name (e.g., "@antseed/provider-anthropic") */
|
|
8
|
+
package: string
|
|
9
|
+
/** Plugin type */
|
|
10
|
+
type: 'provider' | 'router'
|
|
11
|
+
/** Instance configuration (secrets are encrypted at rest) */
|
|
12
|
+
config: Record<string, unknown>
|
|
13
|
+
/** Whether this instance is enabled. Default: true */
|
|
14
|
+
enabled?: boolean
|
|
15
|
+
/** ISO timestamp when instance was created */
|
|
16
|
+
createdAt?: string
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Top-level plugin config file structure.
|
|
21
|
+
*/
|
|
22
|
+
export interface PluginConfigFile {
|
|
23
|
+
/** Plugin instances */
|
|
24
|
+
instances: PluginInstanceConfig[]
|
|
25
|
+
/** Encryption metadata */
|
|
26
|
+
encryption?: {
|
|
27
|
+
algorithm: string
|
|
28
|
+
kdf: string
|
|
29
|
+
salt: string
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
export enum MessageType {
|
|
2
|
+
HandshakeInit = 0x01,
|
|
3
|
+
HandshakeAck = 0x02,
|
|
4
|
+
Ping = 0x10,
|
|
5
|
+
Pong = 0x11,
|
|
6
|
+
HttpRequest = 0x20,
|
|
7
|
+
HttpResponse = 0x21,
|
|
8
|
+
HttpResponseChunk = 0x22,
|
|
9
|
+
HttpResponseEnd = 0x23,
|
|
10
|
+
HttpResponseError = 0x24,
|
|
11
|
+
// Task/Agent message types
|
|
12
|
+
TaskRequest = 0x30,
|
|
13
|
+
TaskEvent = 0x31,
|
|
14
|
+
TaskComplete = 0x32,
|
|
15
|
+
TaskError = 0x33,
|
|
16
|
+
// Skill message types
|
|
17
|
+
SkillRequest = 0x40,
|
|
18
|
+
SkillResponse = 0x41,
|
|
19
|
+
|
|
20
|
+
// --- Bilateral Payment Protocol (0x50-0x5F) ---
|
|
21
|
+
SessionLockAuth = 0x50,
|
|
22
|
+
SessionLockConfirm = 0x51,
|
|
23
|
+
SessionLockReject = 0x52,
|
|
24
|
+
SellerReceipt = 0x53,
|
|
25
|
+
BuyerAck = 0x54,
|
|
26
|
+
SessionEnd = 0x55,
|
|
27
|
+
TopUpRequest = 0x56,
|
|
28
|
+
TopUpAuth = 0x57,
|
|
29
|
+
DisputeNotify = 0x58,
|
|
30
|
+
|
|
31
|
+
// Report message types
|
|
32
|
+
PeerReport = 0x60,
|
|
33
|
+
ReportAck = 0x61,
|
|
34
|
+
|
|
35
|
+
// Rating message types
|
|
36
|
+
PeerRating = 0x70,
|
|
37
|
+
RatingQuery = 0x71,
|
|
38
|
+
RatingResponse = 0x72,
|
|
39
|
+
|
|
40
|
+
Disconnect = 0xF0,
|
|
41
|
+
Error = 0xFF,
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export interface FramedMessage {
|
|
45
|
+
type: MessageType;
|
|
46
|
+
messageId: number;
|
|
47
|
+
payload: Uint8Array;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export const FRAME_HEADER_SIZE = 9;
|
|
51
|
+
export const MAX_PAYLOAD_SIZE = 64 * 1024 * 1024;
|
|
52
|
+
|
|
53
|
+
// ─── Bilateral Payment Messages ─────────────────────────────────
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Buyer authorizes locking funds for a session.
|
|
57
|
+
* Contains the buyer's ECDSA signature over keccak256(sessionId, seller, amount).
|
|
58
|
+
*/
|
|
59
|
+
export interface SessionLockAuthPayload {
|
|
60
|
+
/** 32-byte session ID as hex string */
|
|
61
|
+
sessionId: string;
|
|
62
|
+
/** Amount to lock in USDC base units (6 decimals) */
|
|
63
|
+
lockedAmount: string;
|
|
64
|
+
/** Buyer's ECDSA signature over keccak256(sessionId || seller || amount) as hex */
|
|
65
|
+
buyerSig: string;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Seller confirms the lock was committed on-chain.
|
|
70
|
+
*/
|
|
71
|
+
export interface SessionLockConfirmPayload {
|
|
72
|
+
sessionId: string;
|
|
73
|
+
/** Base transaction hash for the commit_lock instruction */
|
|
74
|
+
txSignature: string;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Seller rejects the lock (insufficient funds, invalid sig, etc).
|
|
79
|
+
*/
|
|
80
|
+
export interface SessionLockRejectPayload {
|
|
81
|
+
sessionId: string;
|
|
82
|
+
reason: string;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Running-total receipt signed by seller after processing a request.
|
|
87
|
+
* Each receipt supersedes the previous one.
|
|
88
|
+
*/
|
|
89
|
+
export interface SellerReceiptPayload {
|
|
90
|
+
sessionId: string;
|
|
91
|
+
/** Cumulative cost of all requests in this session (USDC base units) */
|
|
92
|
+
runningTotal: string;
|
|
93
|
+
/** Number of requests processed so far */
|
|
94
|
+
requestCount: number;
|
|
95
|
+
/** SHA-256 hash of the response body (hex) for proof of work */
|
|
96
|
+
responseHash: string;
|
|
97
|
+
/** Seller's Ed25519 signature over (sessionId || runningTotal || requestCount || responseHash) */
|
|
98
|
+
sellerSig: string;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Buyer acknowledges the seller's receipt by counter-signing.
|
|
103
|
+
*/
|
|
104
|
+
export interface BuyerAckPayload {
|
|
105
|
+
sessionId: string;
|
|
106
|
+
/** Must match seller's runningTotal */
|
|
107
|
+
runningTotal: string;
|
|
108
|
+
/** Must match seller's requestCount */
|
|
109
|
+
requestCount: number;
|
|
110
|
+
/** Buyer's Ed25519 signature over (sessionId || runningTotal || requestCount) */
|
|
111
|
+
buyerSig: string;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Buyer ends the session with a final score.
|
|
116
|
+
*/
|
|
117
|
+
export interface SessionEndPayload {
|
|
118
|
+
sessionId: string;
|
|
119
|
+
/** Final running total (must match last ack'd receipt) */
|
|
120
|
+
runningTotal: string;
|
|
121
|
+
/** Final request count */
|
|
122
|
+
requestCount: number;
|
|
123
|
+
/** Quality score 0-100 */
|
|
124
|
+
score: number;
|
|
125
|
+
/** Buyer's ECDSA signature over keccak256(sessionId || runningTotal || score) as hex */
|
|
126
|
+
buyerSig: string;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Seller requests additional funds when budget is running low.
|
|
131
|
+
*/
|
|
132
|
+
export interface TopUpRequestPayload {
|
|
133
|
+
sessionId: string;
|
|
134
|
+
/** Additional USDC amount requested (base units) */
|
|
135
|
+
additionalAmount: string;
|
|
136
|
+
/** Current running total for context */
|
|
137
|
+
currentRunningTotal: string;
|
|
138
|
+
/** Current locked amount for context */
|
|
139
|
+
currentLockedAmount: string;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Buyer authorizes a top-up.
|
|
144
|
+
*/
|
|
145
|
+
export interface TopUpAuthPayload {
|
|
146
|
+
sessionId: string;
|
|
147
|
+
/** Additional amount authorized (USDC base units) */
|
|
148
|
+
additionalAmount: string;
|
|
149
|
+
/** Buyer's ECDSA signature over keccak256(sessionId || seller || additionalAmount) as hex */
|
|
150
|
+
buyerSig: string;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Notify counterparty that a dispute has been opened on-chain.
|
|
155
|
+
*/
|
|
156
|
+
export interface DisputeNotifyPayload {
|
|
157
|
+
sessionId: string;
|
|
158
|
+
/** Reason for the dispute */
|
|
159
|
+
reason: string;
|
|
160
|
+
/** Base tx hash of the open_dispute instruction */
|
|
161
|
+
txSignature: string;
|
|
162
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** @deprecated Each plugin manages its own upstream. Use plugin configSchema instead. */
|
|
2
|
+
export enum KnownProvider {
|
|
3
|
+
OpenAI = "openai",
|
|
4
|
+
Anthropic = "anthropic",
|
|
5
|
+
Google = "google",
|
|
6
|
+
Mistral = "mistral",
|
|
7
|
+
Cohere = "cohere",
|
|
8
|
+
Moonshot = "moonshot",
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface TokenProviderState {
|
|
12
|
+
accessToken: string;
|
|
13
|
+
refreshToken?: string;
|
|
14
|
+
expiresAt?: number;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Resolves auth tokens dynamically (e.g. OAuth refresh, keychain read).
|
|
19
|
+
*/
|
|
20
|
+
export interface TokenProvider {
|
|
21
|
+
/** Get a valid access token. May refresh if expired. */
|
|
22
|
+
getToken(): Promise<string>;
|
|
23
|
+
/** Clean up resources. */
|
|
24
|
+
stop(): void;
|
|
25
|
+
/** Current provider state for persistence (if available). */
|
|
26
|
+
getState?(): TokenProviderState | null;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface ProviderConfig {
|
|
30
|
+
provider: KnownProvider;
|
|
31
|
+
baseUrl: string;
|
|
32
|
+
authHeaderName: string;
|
|
33
|
+
authHeaderValue: string;
|
|
34
|
+
allowedModels: string[];
|
|
35
|
+
maxConcurrency: number;
|
|
36
|
+
/** Optional dynamic token provider (OAuth, keychain, etc.). */
|
|
37
|
+
tokenProvider?: TokenProvider;
|
|
38
|
+
/** Extra headers injected into upstream requests (e.g. OAuth beta flags). */
|
|
39
|
+
extraHeaders?: Record<string, string>;
|
|
40
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { PeerId } from './peer.js';
|
|
2
|
+
|
|
3
|
+
export type RatingDimension = 'quality' | 'speed' | 'reliability' | 'value' | 'overall';
|
|
4
|
+
|
|
5
|
+
export interface PeerRating {
|
|
6
|
+
ratingId: string;
|
|
7
|
+
raterPeerId: PeerId;
|
|
8
|
+
targetPeerId: PeerId;
|
|
9
|
+
sessionId: string;
|
|
10
|
+
dimensions: Record<RatingDimension, 1 | 2 | 3 | 4 | 5>;
|
|
11
|
+
comment?: string;
|
|
12
|
+
timestamp: number;
|
|
13
|
+
/** Ed25519 signature (hex) */
|
|
14
|
+
signature: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface AggregateRating {
|
|
18
|
+
peerId: PeerId;
|
|
19
|
+
averageByDimension: Record<RatingDimension, number>;
|
|
20
|
+
overallAverage: number;
|
|
21
|
+
totalRatings: number;
|
|
22
|
+
lastUpdated: number;
|
|
23
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { PeerId } from './peer.js';
|
|
2
|
+
|
|
3
|
+
export type ReportReason =
|
|
4
|
+
| 'bad-quality'
|
|
5
|
+
| 'overcharging'
|
|
6
|
+
| 'timeout'
|
|
7
|
+
| 'harmful-content'
|
|
8
|
+
| 'fraud'
|
|
9
|
+
| 'impersonation'
|
|
10
|
+
| 'other';
|
|
11
|
+
|
|
12
|
+
export type ReportStatus = 'pending' | 'acknowledged' | 'resolved' | 'dismissed';
|
|
13
|
+
|
|
14
|
+
export interface ReportEvidence {
|
|
15
|
+
type: 'receipt' | 'log' | 'screenshot' | 'text';
|
|
16
|
+
data: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface PeerReport {
|
|
20
|
+
reportId: string;
|
|
21
|
+
reporterPeerId: PeerId;
|
|
22
|
+
targetPeerId: PeerId;
|
|
23
|
+
reason: ReportReason;
|
|
24
|
+
evidence: ReportEvidence[];
|
|
25
|
+
sessionId?: string;
|
|
26
|
+
timestamp: number;
|
|
27
|
+
status: ReportStatus;
|
|
28
|
+
/** Ed25519 signature over report data (hex string) */
|
|
29
|
+
signature: string;
|
|
30
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { ProviderType } from './metering.js';
|
|
2
|
+
|
|
3
|
+
export interface SellerProviderPricingConfig {
|
|
4
|
+
inputUsdPerMillion: number;
|
|
5
|
+
outputUsdPerMillion: number;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Per-provider capacity and pricing configuration for sellers.
|
|
10
|
+
*/
|
|
11
|
+
export interface SellerProviderConfig {
|
|
12
|
+
/** Provider identifier (must match a key in AntseedConfig.providers) */
|
|
13
|
+
type: ProviderType;
|
|
14
|
+
/** Whether this provider is enabled for selling */
|
|
15
|
+
enabled: boolean;
|
|
16
|
+
/** Plan limit in messages per hour. */
|
|
17
|
+
planLimitMsgPerHour: number;
|
|
18
|
+
/** Reserve floor in messages per hour. */
|
|
19
|
+
reserveFloorMsgPerHour: number;
|
|
20
|
+
/** Default pricing in USD per 1M tokens. */
|
|
21
|
+
pricing: SellerProviderPricingConfig;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Top-level seller configuration.
|
|
26
|
+
*/
|
|
27
|
+
export interface SellerConfig {
|
|
28
|
+
/** Whether seller mode is enabled */
|
|
29
|
+
enabled: boolean;
|
|
30
|
+
/** Maximum number of concurrent buyer connections */
|
|
31
|
+
maxConcurrentBuyers: number;
|
|
32
|
+
/** Per-provider selling configuration */
|
|
33
|
+
providers: SellerProviderConfig[];
|
|
34
|
+
/** Session timeout in ms. Default: 300_000 (5 minutes). */
|
|
35
|
+
sessionTimeoutMs: number;
|
|
36
|
+
/** DHT re-announce interval in ms. Default: 60_000 (1 minute). */
|
|
37
|
+
announceIntervalMs: number;
|
|
38
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { PeerId } from './peer.js';
|
|
2
|
+
|
|
3
|
+
export type StakeStatus = 'active' | 'slashed' | 'withdrawn';
|
|
4
|
+
|
|
5
|
+
export interface StakeInfo {
|
|
6
|
+
peerId: PeerId;
|
|
7
|
+
amountUSDC: number;
|
|
8
|
+
stakedAt: number;
|
|
9
|
+
lockPeriodDays: number;
|
|
10
|
+
status: StakeStatus;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface StakeConfig {
|
|
14
|
+
minStakeUSDC: number;
|
|
15
|
+
lockPeriodDays: number;
|
|
16
|
+
slashPercentage: number;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export const DEFAULT_STAKE_CONFIG: StakeConfig = {
|
|
20
|
+
minStakeUSDC: 100,
|
|
21
|
+
lockPeriodDays: 30,
|
|
22
|
+
slashPercentage: 10,
|
|
23
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
function normalizeDebugValue(value: string | undefined): string {
|
|
2
|
+
return (value ?? '').trim().toLowerCase();
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
export function isDebugEnabled(): boolean {
|
|
6
|
+
const fromAntseed = normalizeDebugValue(process.env['ANTSEED_DEBUG']);
|
|
7
|
+
if (
|
|
8
|
+
fromAntseed === '1' ||
|
|
9
|
+
fromAntseed === 'true' ||
|
|
10
|
+
fromAntseed === 'yes' ||
|
|
11
|
+
fromAntseed === 'on'
|
|
12
|
+
) {
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const fromDebug = normalizeDebugValue(process.env['DEBUG']);
|
|
17
|
+
return fromDebug === '*' || fromDebug.includes('antseed');
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function debugLog(...args: unknown[]): void {
|
|
21
|
+
if (isDebugEnabled()) {
|
|
22
|
+
console.log(...args);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function debugWarn(...args: unknown[]): void {
|
|
27
|
+
if (isDebugEnabled()) {
|
|
28
|
+
console.warn(...args);
|
|
29
|
+
}
|
|
30
|
+
}
|
package/src/utils/hex.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function hexToBytes(hex: string): Uint8Array {
|
|
2
|
+
if (hex.length % 2 !== 0) throw new Error("Hex string must have even length");
|
|
3
|
+
const bytes = new Uint8Array(hex.length / 2);
|
|
4
|
+
for (let i = 0; i < hex.length; i += 2) {
|
|
5
|
+
bytes[i / 2] = parseInt(hex.slice(i, i + 2), 16);
|
|
6
|
+
}
|
|
7
|
+
return bytes;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function bytesToHex(bytes: Uint8Array): string {
|
|
11
|
+
return Array.from(bytes)
|
|
12
|
+
.map((b) => b.toString(16).padStart(2, "0"))
|
|
13
|
+
.join("");
|
|
14
|
+
}
|