envoy-pay 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/CHANGELOG.md +99 -0
- package/LICENSE +200 -0
- package/README.md +529 -0
- package/dist/cjs/adapters/base.js +174 -0
- package/dist/cjs/adapters/base.js.map +1 -0
- package/dist/cjs/adapters/evm.js +339 -0
- package/dist/cjs/adapters/evm.js.map +1 -0
- package/dist/cjs/adapters/index.js +15 -0
- package/dist/cjs/adapters/index.js.map +1 -0
- package/dist/cjs/adapters/ows.js +204 -0
- package/dist/cjs/adapters/ows.js.map +1 -0
- package/dist/cjs/adapters/solana.js +210 -0
- package/dist/cjs/adapters/solana.js.map +1 -0
- package/dist/cjs/adapters/stellar.js +173 -0
- package/dist/cjs/adapters/stellar.js.map +1 -0
- package/dist/cjs/adapters/stripe.js +338 -0
- package/dist/cjs/adapters/stripe.js.map +1 -0
- package/dist/cjs/adapters/types.js +3 -0
- package/dist/cjs/adapters/types.js.map +1 -0
- package/dist/cjs/client.js +309 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/contracts/abis/EnvoyFacilitator.js +197 -0
- package/dist/cjs/contracts/abis/EnvoyFacilitator.js.map +1 -0
- package/dist/cjs/contracts/addresses.js +42 -0
- package/dist/cjs/contracts/addresses.js.map +1 -0
- package/dist/cjs/contracts/facilitator.js +225 -0
- package/dist/cjs/contracts/facilitator.js.map +1 -0
- package/dist/cjs/contracts/index.js +21 -0
- package/dist/cjs/contracts/index.js.map +1 -0
- package/dist/cjs/facilitator/facilitator-service.js +305 -0
- package/dist/cjs/facilitator/facilitator-service.js.map +1 -0
- package/dist/cjs/facilitator/fee-calculator.js +134 -0
- package/dist/cjs/facilitator/fee-calculator.js.map +1 -0
- package/dist/cjs/facilitator/index.js +12 -0
- package/dist/cjs/facilitator/index.js.map +1 -0
- package/dist/cjs/facilitator/types.js +99 -0
- package/dist/cjs/facilitator/types.js.map +1 -0
- package/dist/cjs/identity/agent-card.js +143 -0
- package/dist/cjs/identity/agent-card.js.map +1 -0
- package/dist/cjs/identity/agent-identity.js +166 -0
- package/dist/cjs/identity/agent-identity.js.map +1 -0
- package/dist/cjs/identity/did-resolver.js +149 -0
- package/dist/cjs/identity/did-resolver.js.map +1 -0
- package/dist/cjs/identity/erc8004/abis.js +218 -0
- package/dist/cjs/identity/erc8004/abis.js.map +1 -0
- package/dist/cjs/identity/erc8004/identity.js +268 -0
- package/dist/cjs/identity/erc8004/identity.js.map +1 -0
- package/dist/cjs/identity/erc8004/index.js +36 -0
- package/dist/cjs/identity/erc8004/index.js.map +1 -0
- package/dist/cjs/identity/erc8004/reputation.js +110 -0
- package/dist/cjs/identity/erc8004/reputation.js.map +1 -0
- package/dist/cjs/identity/erc8004/types.js +3 -0
- package/dist/cjs/identity/erc8004/types.js.map +1 -0
- package/dist/cjs/identity/index.js +61 -0
- package/dist/cjs/identity/index.js.map +1 -0
- package/dist/cjs/identity/owner-registry.js +140 -0
- package/dist/cjs/identity/owner-registry.js.map +1 -0
- package/dist/cjs/identity/reputation.js +193 -0
- package/dist/cjs/identity/reputation.js.map +1 -0
- package/dist/cjs/identity/types.js +16 -0
- package/dist/cjs/identity/types.js.map +1 -0
- package/dist/cjs/index.js +72 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/logger.js +7 -0
- package/dist/cjs/logger.js.map +1 -0
- package/dist/cjs/monitor/evm-watcher.js +165 -0
- package/dist/cjs/monitor/evm-watcher.js.map +1 -0
- package/dist/cjs/monitor/index.js +32 -0
- package/dist/cjs/monitor/index.js.map +1 -0
- package/dist/cjs/monitor/multi-watcher.js +94 -0
- package/dist/cjs/monitor/multi-watcher.js.map +1 -0
- package/dist/cjs/monitor/solana-watcher.js +172 -0
- package/dist/cjs/monitor/solana-watcher.js.map +1 -0
- package/dist/cjs/monitor/stellar-watcher.js +125 -0
- package/dist/cjs/monitor/stellar-watcher.js.map +1 -0
- package/dist/cjs/mpp.js +187 -0
- package/dist/cjs/mpp.js.map +1 -0
- package/dist/cjs/policy.js +71 -0
- package/dist/cjs/policy.js.map +1 -0
- package/dist/cjs/providers/bridge.js +323 -0
- package/dist/cjs/providers/bridge.js.map +1 -0
- package/dist/cjs/providers/onchainos.js +210 -0
- package/dist/cjs/providers/onchainos.js.map +1 -0
- package/dist/cjs/requests/eip681.js +77 -0
- package/dist/cjs/requests/eip681.js.map +1 -0
- package/dist/cjs/requests/index.js +18 -0
- package/dist/cjs/requests/index.js.map +1 -0
- package/dist/cjs/requests/sep7.js +61 -0
- package/dist/cjs/requests/sep7.js.map +1 -0
- package/dist/cjs/requests/solana-pay.js +51 -0
- package/dist/cjs/requests/solana-pay.js.map +1 -0
- package/dist/cjs/requests/universal.js +40 -0
- package/dist/cjs/requests/universal.js.map +1 -0
- package/dist/cjs/server/index.js +35 -0
- package/dist/cjs/server/index.js.map +1 -0
- package/dist/cjs/server/mpp-gate.js +118 -0
- package/dist/cjs/server/mpp-gate.js.map +1 -0
- package/dist/cjs/server/payment-gate.js +92 -0
- package/dist/cjs/server/payment-gate.js.map +1 -0
- package/dist/cjs/server/receipt.js +52 -0
- package/dist/cjs/server/receipt.js.map +1 -0
- package/dist/cjs/server/webhook.js +122 -0
- package/dist/cjs/server/webhook.js.map +1 -0
- package/dist/cjs/server/x402-gate.js +103 -0
- package/dist/cjs/server/x402-gate.js.map +1 -0
- package/dist/cjs/solana.js +14 -0
- package/dist/cjs/solana.js.map +1 -0
- package/dist/cjs/stellar.js +14 -0
- package/dist/cjs/stellar.js.map +1 -0
- package/dist/cjs/wallet/balance-aggregator.js +149 -0
- package/dist/cjs/wallet/balance-aggregator.js.map +1 -0
- package/dist/cjs/wallet/chain-router.js +254 -0
- package/dist/cjs/wallet/chain-router.js.map +1 -0
- package/dist/cjs/wallet/index.js +15 -0
- package/dist/cjs/wallet/index.js.map +1 -0
- package/dist/cjs/wallet/intent-resolver.js +145 -0
- package/dist/cjs/wallet/intent-resolver.js.map +1 -0
- package/dist/cjs/wallet/session-manager.js +170 -0
- package/dist/cjs/wallet/session-manager.js.map +1 -0
- package/dist/cjs/wallet/types.js +14 -0
- package/dist/cjs/wallet/types.js.map +1 -0
- package/dist/cjs/wallet/unified-wallet.js +253 -0
- package/dist/cjs/wallet/unified-wallet.js.map +1 -0
- package/dist/esm/adapters/base.js +170 -0
- package/dist/esm/adapters/base.js.map +1 -0
- package/dist/esm/adapters/evm.js +334 -0
- package/dist/esm/adapters/evm.js.map +1 -0
- package/dist/esm/adapters/index.js +6 -0
- package/dist/esm/adapters/index.js.map +1 -0
- package/dist/esm/adapters/ows.js +194 -0
- package/dist/esm/adapters/ows.js.map +1 -0
- package/dist/esm/adapters/solana.js +206 -0
- package/dist/esm/adapters/solana.js.map +1 -0
- package/dist/esm/adapters/stellar.js +136 -0
- package/dist/esm/adapters/stellar.js.map +1 -0
- package/dist/esm/adapters/stripe.js +334 -0
- package/dist/esm/adapters/stripe.js.map +1 -0
- package/dist/esm/adapters/types.js +2 -0
- package/dist/esm/adapters/types.js.map +1 -0
- package/dist/esm/client.js +302 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/contracts/abis/EnvoyFacilitator.js +194 -0
- package/dist/esm/contracts/abis/EnvoyFacilitator.js.map +1 -0
- package/dist/esm/contracts/addresses.js +38 -0
- package/dist/esm/contracts/addresses.js.map +1 -0
- package/dist/esm/contracts/facilitator.js +218 -0
- package/dist/esm/contracts/facilitator.js.map +1 -0
- package/dist/esm/contracts/index.js +8 -0
- package/dist/esm/contracts/index.js.map +1 -0
- package/dist/esm/facilitator/facilitator-service.js +301 -0
- package/dist/esm/facilitator/facilitator-service.js.map +1 -0
- package/dist/esm/facilitator/fee-calculator.js +130 -0
- package/dist/esm/facilitator/fee-calculator.js.map +1 -0
- package/dist/esm/facilitator/index.js +5 -0
- package/dist/esm/facilitator/index.js.map +1 -0
- package/dist/esm/facilitator/types.js +96 -0
- package/dist/esm/facilitator/types.js.map +1 -0
- package/dist/esm/identity/agent-card.js +139 -0
- package/dist/esm/identity/agent-card.js.map +1 -0
- package/dist/esm/identity/agent-identity.js +162 -0
- package/dist/esm/identity/agent-identity.js.map +1 -0
- package/dist/esm/identity/did-resolver.js +145 -0
- package/dist/esm/identity/did-resolver.js.map +1 -0
- package/dist/esm/identity/erc8004/abis.js +215 -0
- package/dist/esm/identity/erc8004/abis.js.map +1 -0
- package/dist/esm/identity/erc8004/identity.js +250 -0
- package/dist/esm/identity/erc8004/identity.js.map +1 -0
- package/dist/esm/identity/erc8004/index.js +13 -0
- package/dist/esm/identity/erc8004/index.js.map +1 -0
- package/dist/esm/identity/erc8004/reputation.js +105 -0
- package/dist/esm/identity/erc8004/reputation.js.map +1 -0
- package/dist/esm/identity/erc8004/types.js +2 -0
- package/dist/esm/identity/erc8004/types.js.map +1 -0
- package/dist/esm/identity/index.js +19 -0
- package/dist/esm/identity/index.js.map +1 -0
- package/dist/esm/identity/owner-registry.js +136 -0
- package/dist/esm/identity/owner-registry.js.map +1 -0
- package/dist/esm/identity/reputation.js +189 -0
- package/dist/esm/identity/reputation.js.map +1 -0
- package/dist/esm/identity/types.js +15 -0
- package/dist/esm/identity/types.js.map +1 -0
- package/dist/esm/index.js +37 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/logger.js +3 -0
- package/dist/esm/logger.js.map +1 -0
- package/dist/esm/monitor/evm-watcher.js +162 -0
- package/dist/esm/monitor/evm-watcher.js.map +1 -0
- package/dist/esm/monitor/index.js +25 -0
- package/dist/esm/monitor/index.js.map +1 -0
- package/dist/esm/monitor/multi-watcher.js +91 -0
- package/dist/esm/monitor/multi-watcher.js.map +1 -0
- package/dist/esm/monitor/solana-watcher.js +169 -0
- package/dist/esm/monitor/solana-watcher.js.map +1 -0
- package/dist/esm/monitor/stellar-watcher.js +122 -0
- package/dist/esm/monitor/stellar-watcher.js.map +1 -0
- package/dist/esm/mpp.js +175 -0
- package/dist/esm/mpp.js.map +1 -0
- package/dist/esm/policy.js +67 -0
- package/dist/esm/policy.js.map +1 -0
- package/dist/esm/providers/bridge.js +319 -0
- package/dist/esm/providers/bridge.js.map +1 -0
- package/dist/esm/providers/onchainos.js +172 -0
- package/dist/esm/providers/onchainos.js.map +1 -0
- package/dist/esm/requests/eip681.js +74 -0
- package/dist/esm/requests/eip681.js.map +1 -0
- package/dist/esm/requests/index.js +11 -0
- package/dist/esm/requests/index.js.map +1 -0
- package/dist/esm/requests/sep7.js +58 -0
- package/dist/esm/requests/sep7.js.map +1 -0
- package/dist/esm/requests/solana-pay.js +48 -0
- package/dist/esm/requests/solana-pay.js.map +1 -0
- package/dist/esm/requests/universal.js +37 -0
- package/dist/esm/requests/universal.js.map +1 -0
- package/dist/esm/server/index.js +27 -0
- package/dist/esm/server/index.js.map +1 -0
- package/dist/esm/server/mpp-gate.js +115 -0
- package/dist/esm/server/mpp-gate.js.map +1 -0
- package/dist/esm/server/payment-gate.js +89 -0
- package/dist/esm/server/payment-gate.js.map +1 -0
- package/dist/esm/server/receipt.js +48 -0
- package/dist/esm/server/receipt.js.map +1 -0
- package/dist/esm/server/webhook.js +119 -0
- package/dist/esm/server/webhook.js.map +1 -0
- package/dist/esm/server/x402-gate.js +100 -0
- package/dist/esm/server/x402-gate.js.map +1 -0
- package/dist/esm/solana.js +8 -0
- package/dist/esm/solana.js.map +1 -0
- package/dist/esm/stellar.js +8 -0
- package/dist/esm/stellar.js.map +1 -0
- package/dist/esm/wallet/balance-aggregator.js +145 -0
- package/dist/esm/wallet/balance-aggregator.js.map +1 -0
- package/dist/esm/wallet/chain-router.js +250 -0
- package/dist/esm/wallet/chain-router.js.map +1 -0
- package/dist/esm/wallet/index.js +7 -0
- package/dist/esm/wallet/index.js.map +1 -0
- package/dist/esm/wallet/intent-resolver.js +141 -0
- package/dist/esm/wallet/intent-resolver.js.map +1 -0
- package/dist/esm/wallet/session-manager.js +166 -0
- package/dist/esm/wallet/session-manager.js.map +1 -0
- package/dist/esm/wallet/types.js +13 -0
- package/dist/esm/wallet/types.js.map +1 -0
- package/dist/esm/wallet/unified-wallet.js +249 -0
- package/dist/esm/wallet/unified-wallet.js.map +1 -0
- package/dist/types/adapters/base.d.ts +53 -0
- package/dist/types/adapters/base.d.ts.map +1 -0
- package/dist/types/adapters/evm.d.ts +93 -0
- package/dist/types/adapters/evm.d.ts.map +1 -0
- package/dist/types/adapters/index.d.ts +7 -0
- package/dist/types/adapters/index.d.ts.map +1 -0
- package/dist/types/adapters/ows.d.ts +123 -0
- package/dist/types/adapters/ows.d.ts.map +1 -0
- package/dist/types/adapters/solana.d.ts +77 -0
- package/dist/types/adapters/solana.d.ts.map +1 -0
- package/dist/types/adapters/stellar.d.ts +67 -0
- package/dist/types/adapters/stellar.d.ts.map +1 -0
- package/dist/types/adapters/stripe.d.ts +206 -0
- package/dist/types/adapters/stripe.d.ts.map +1 -0
- package/dist/types/adapters/types.d.ts +110 -0
- package/dist/types/adapters/types.d.ts.map +1 -0
- package/dist/types/client.d.ts +89 -0
- package/dist/types/client.d.ts.map +1 -0
- package/dist/types/contracts/abis/EnvoyFacilitator.d.ts +296 -0
- package/dist/types/contracts/abis/EnvoyFacilitator.d.ts.map +1 -0
- package/dist/types/contracts/addresses.d.ts +24 -0
- package/dist/types/contracts/addresses.d.ts.map +1 -0
- package/dist/types/contracts/facilitator.d.ts +172 -0
- package/dist/types/contracts/facilitator.d.ts.map +1 -0
- package/dist/types/contracts/index.d.ts +6 -0
- package/dist/types/contracts/index.d.ts.map +1 -0
- package/dist/types/facilitator/facilitator-service.d.ts +69 -0
- package/dist/types/facilitator/facilitator-service.d.ts.map +1 -0
- package/dist/types/facilitator/fee-calculator.d.ts +48 -0
- package/dist/types/facilitator/fee-calculator.d.ts.map +1 -0
- package/dist/types/facilitator/index.d.ts +5 -0
- package/dist/types/facilitator/index.d.ts.map +1 -0
- package/dist/types/facilitator/types.d.ts +221 -0
- package/dist/types/facilitator/types.d.ts.map +1 -0
- package/dist/types/identity/agent-card.d.ts +83 -0
- package/dist/types/identity/agent-card.d.ts.map +1 -0
- package/dist/types/identity/agent-identity.d.ts +102 -0
- package/dist/types/identity/agent-identity.d.ts.map +1 -0
- package/dist/types/identity/did-resolver.d.ts +70 -0
- package/dist/types/identity/did-resolver.d.ts.map +1 -0
- package/dist/types/identity/erc8004/abis.d.ts +336 -0
- package/dist/types/identity/erc8004/abis.d.ts.map +1 -0
- package/dist/types/identity/erc8004/identity.d.ts +109 -0
- package/dist/types/identity/erc8004/identity.d.ts.map +1 -0
- package/dist/types/identity/erc8004/index.d.ts +15 -0
- package/dist/types/identity/erc8004/index.d.ts.map +1 -0
- package/dist/types/identity/erc8004/reputation.d.ts +52 -0
- package/dist/types/identity/erc8004/reputation.d.ts.map +1 -0
- package/dist/types/identity/erc8004/types.d.ts +31 -0
- package/dist/types/identity/erc8004/types.d.ts.map +1 -0
- package/dist/types/identity/index.d.ts +10 -0
- package/dist/types/identity/index.d.ts.map +1 -0
- package/dist/types/identity/owner-registry.d.ts +68 -0
- package/dist/types/identity/owner-registry.d.ts.map +1 -0
- package/dist/types/identity/reputation.d.ts +66 -0
- package/dist/types/identity/reputation.d.ts.map +1 -0
- package/dist/types/identity/types.d.ts +182 -0
- package/dist/types/identity/types.d.ts.map +1 -0
- package/dist/types/index.d.ts +17 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/logger.d.ts +10 -0
- package/dist/types/logger.d.ts.map +1 -0
- package/dist/types/monitor/evm-watcher.d.ts +40 -0
- package/dist/types/monitor/evm-watcher.d.ts.map +1 -0
- package/dist/types/monitor/index.d.ts +25 -0
- package/dist/types/monitor/index.d.ts.map +1 -0
- package/dist/types/monitor/multi-watcher.d.ts +48 -0
- package/dist/types/monitor/multi-watcher.d.ts.map +1 -0
- package/dist/types/monitor/solana-watcher.d.ts +36 -0
- package/dist/types/monitor/solana-watcher.d.ts.map +1 -0
- package/dist/types/monitor/stellar-watcher.d.ts +34 -0
- package/dist/types/monitor/stellar-watcher.d.ts.map +1 -0
- package/dist/types/mpp.d.ts +153 -0
- package/dist/types/mpp.d.ts.map +1 -0
- package/dist/types/policy.d.ts +40 -0
- package/dist/types/policy.d.ts.map +1 -0
- package/dist/types/providers/bridge.d.ts +162 -0
- package/dist/types/providers/bridge.d.ts.map +1 -0
- package/dist/types/providers/onchainos.d.ts +128 -0
- package/dist/types/providers/onchainos.d.ts.map +1 -0
- package/dist/types/requests/eip681.d.ts +51 -0
- package/dist/types/requests/eip681.d.ts.map +1 -0
- package/dist/types/requests/index.d.ts +11 -0
- package/dist/types/requests/index.d.ts.map +1 -0
- package/dist/types/requests/sep7.d.ts +56 -0
- package/dist/types/requests/sep7.d.ts.map +1 -0
- package/dist/types/requests/solana-pay.d.ts +50 -0
- package/dist/types/requests/solana-pay.d.ts.map +1 -0
- package/dist/types/requests/universal.d.ts +28 -0
- package/dist/types/requests/universal.d.ts.map +1 -0
- package/dist/types/server/index.d.ts +27 -0
- package/dist/types/server/index.d.ts.map +1 -0
- package/dist/types/server/mpp-gate.d.ts +66 -0
- package/dist/types/server/mpp-gate.d.ts.map +1 -0
- package/dist/types/server/payment-gate.d.ts +33 -0
- package/dist/types/server/payment-gate.d.ts.map +1 -0
- package/dist/types/server/receipt.d.ts +52 -0
- package/dist/types/server/receipt.d.ts.map +1 -0
- package/dist/types/server/webhook.d.ts +46 -0
- package/dist/types/server/webhook.d.ts.map +1 -0
- package/dist/types/server/x402-gate.d.ts +70 -0
- package/dist/types/server/x402-gate.d.ts.map +1 -0
- package/dist/types/solana.d.ts +7 -0
- package/dist/types/solana.d.ts.map +1 -0
- package/dist/types/stellar.d.ts +7 -0
- package/dist/types/stellar.d.ts.map +1 -0
- package/dist/types/wallet/balance-aggregator.d.ts +51 -0
- package/dist/types/wallet/balance-aggregator.d.ts.map +1 -0
- package/dist/types/wallet/chain-router.d.ts +44 -0
- package/dist/types/wallet/chain-router.d.ts.map +1 -0
- package/dist/types/wallet/index.d.ts +7 -0
- package/dist/types/wallet/index.d.ts.map +1 -0
- package/dist/types/wallet/intent-resolver.d.ts +39 -0
- package/dist/types/wallet/intent-resolver.d.ts.map +1 -0
- package/dist/types/wallet/session-manager.d.ts +57 -0
- package/dist/types/wallet/session-manager.d.ts.map +1 -0
- package/dist/types/wallet/types.d.ts +161 -0
- package/dist/types/wallet/types.d.ts.map +1 -0
- package/dist/types/wallet/unified-wallet.d.ts +122 -0
- package/dist/types/wallet/unified-wallet.d.ts.map +1 -0
- package/package.json +194 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OwnerRegistry — Agent ↔ Owner binding with delegation levels.
|
|
3
|
+
*
|
|
4
|
+
* Implements the Validation Registry concept from ERC-8004,
|
|
5
|
+
* linking AI agents to their human/organizational owners with
|
|
6
|
+
* configurable delegation levels.
|
|
7
|
+
*
|
|
8
|
+
* Delegation levels:
|
|
9
|
+
* - `full` — Agent has full autonomy
|
|
10
|
+
* - `supervised` — Owner receives notifications
|
|
11
|
+
* - `restricted` — Owner must approve large transactions
|
|
12
|
+
* - `readonly` — Agent can only read, not transact
|
|
13
|
+
*
|
|
14
|
+
* @see ERC-8004 — Validation Registry
|
|
15
|
+
*/
|
|
16
|
+
export class OwnerRegistry {
|
|
17
|
+
/** In-memory registry (production: on-chain smart contract). */
|
|
18
|
+
records = new Map();
|
|
19
|
+
/** Reverse index: owner → agents. */
|
|
20
|
+
ownerIndex = new Map();
|
|
21
|
+
/**
|
|
22
|
+
* Register an agent-owner binding.
|
|
23
|
+
*/
|
|
24
|
+
register(agentDid, ownerAddress, delegationLevel = 'supervised', metadata) {
|
|
25
|
+
if (!agentDid || !ownerAddress) {
|
|
26
|
+
throw new Error('Agent DID and owner address are required');
|
|
27
|
+
}
|
|
28
|
+
const record = {
|
|
29
|
+
agentDid,
|
|
30
|
+
ownerAddress,
|
|
31
|
+
since: new Date(),
|
|
32
|
+
delegationLevel,
|
|
33
|
+
metadata,
|
|
34
|
+
};
|
|
35
|
+
this.records.set(agentDid, record);
|
|
36
|
+
// Update reverse index
|
|
37
|
+
if (!this.ownerIndex.has(ownerAddress)) {
|
|
38
|
+
this.ownerIndex.set(ownerAddress, new Set());
|
|
39
|
+
}
|
|
40
|
+
this.ownerIndex.get(ownerAddress).add(agentDid);
|
|
41
|
+
return record;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get the owner record for an agent.
|
|
45
|
+
*/
|
|
46
|
+
getOwner(agentDid) {
|
|
47
|
+
return this.records.get(agentDid) ?? null;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get all agents owned by a specific address.
|
|
51
|
+
*/
|
|
52
|
+
getAgentsByOwner(ownerAddress) {
|
|
53
|
+
const agentDids = this.ownerIndex.get(ownerAddress);
|
|
54
|
+
if (!agentDids)
|
|
55
|
+
return [];
|
|
56
|
+
return Array.from(agentDids)
|
|
57
|
+
.map((did) => this.records.get(did))
|
|
58
|
+
.filter((r) => r !== undefined);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Check if an address owns a specific agent.
|
|
62
|
+
*/
|
|
63
|
+
isOwner(agentDid, ownerAddress) {
|
|
64
|
+
const record = this.records.get(agentDid);
|
|
65
|
+
return record?.ownerAddress === ownerAddress;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get the delegation level for an agent.
|
|
69
|
+
*/
|
|
70
|
+
getDelegationLevel(agentDid) {
|
|
71
|
+
const record = this.records.get(agentDid);
|
|
72
|
+
return record?.delegationLevel ?? null;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Update the delegation level for an agent.
|
|
76
|
+
* Only the current owner can do this (enforcement is caller's responsibility).
|
|
77
|
+
*/
|
|
78
|
+
setDelegationLevel(agentDid, level) {
|
|
79
|
+
const record = this.records.get(agentDid);
|
|
80
|
+
if (!record)
|
|
81
|
+
return false;
|
|
82
|
+
record.delegationLevel = level;
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Transfer ownership of an agent to a new address.
|
|
87
|
+
*/
|
|
88
|
+
transferOwnership(agentDid, newOwnerAddress) {
|
|
89
|
+
const record = this.records.get(agentDid);
|
|
90
|
+
if (!record)
|
|
91
|
+
return false;
|
|
92
|
+
const oldOwner = record.ownerAddress;
|
|
93
|
+
// Update reverse index
|
|
94
|
+
this.ownerIndex.get(oldOwner)?.delete(agentDid);
|
|
95
|
+
if (!this.ownerIndex.has(newOwnerAddress)) {
|
|
96
|
+
this.ownerIndex.set(newOwnerAddress, new Set());
|
|
97
|
+
}
|
|
98
|
+
this.ownerIndex.get(newOwnerAddress).add(agentDid);
|
|
99
|
+
// Update record
|
|
100
|
+
record.ownerAddress = newOwnerAddress;
|
|
101
|
+
record.since = new Date();
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Remove an agent from the registry.
|
|
106
|
+
*/
|
|
107
|
+
unregister(agentDid) {
|
|
108
|
+
const record = this.records.get(agentDid);
|
|
109
|
+
if (!record)
|
|
110
|
+
return false;
|
|
111
|
+
this.ownerIndex.get(record.ownerAddress)?.delete(agentDid);
|
|
112
|
+
this.records.delete(agentDid);
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Check if an agent is allowed to perform an action based on delegation.
|
|
117
|
+
*/
|
|
118
|
+
canTransact(agentDid) {
|
|
119
|
+
const level = this.getDelegationLevel(agentDid);
|
|
120
|
+
return level !== null && level !== 'readonly';
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Check if an action requires owner approval.
|
|
124
|
+
*/
|
|
125
|
+
requiresApproval(agentDid) {
|
|
126
|
+
const level = this.getDelegationLevel(agentDid);
|
|
127
|
+
return level === 'restricted';
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Get the total number of registered agents.
|
|
131
|
+
*/
|
|
132
|
+
getAgentCount() {
|
|
133
|
+
return this.records.size;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=owner-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner-registry.js","sourceRoot":"","sources":["../../../src/identity/owner-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reputation — EAS-compatible reputation scoring for AI agents.
|
|
3
|
+
*
|
|
4
|
+
* Implements the Reputation Registry concept from ERC-8004, using
|
|
5
|
+
* an EAS-compatible schema for creating, storing, and querying
|
|
6
|
+
* reputation attestations.
|
|
7
|
+
*
|
|
8
|
+
* Features:
|
|
9
|
+
* - Create/revoke attestations
|
|
10
|
+
* - Aggregate scores by category
|
|
11
|
+
* - Compute overall trust score
|
|
12
|
+
* - Track payment reliability, task quality, uptime, etc.
|
|
13
|
+
*
|
|
14
|
+
* @see ERC-8004 — Reputation Registry
|
|
15
|
+
* @see https://attest.org — Ethereum Attestation Service
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Weights for each reputation category in the overall score.
|
|
19
|
+
*/
|
|
20
|
+
const CATEGORY_WEIGHTS = {
|
|
21
|
+
'payment-reliability': 0.30,
|
|
22
|
+
'task-quality': 0.25,
|
|
23
|
+
'response-time': 0.15,
|
|
24
|
+
'uptime': 0.15,
|
|
25
|
+
'security': 0.10,
|
|
26
|
+
'general': 0.05,
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Generate a unique attestation ID.
|
|
30
|
+
*/
|
|
31
|
+
function generateAttestationId() {
|
|
32
|
+
const ts = Date.now().toString(36);
|
|
33
|
+
const rand = Math.random().toString(36).substring(2, 10);
|
|
34
|
+
return `att_${ts}_${rand}`;
|
|
35
|
+
}
|
|
36
|
+
export class Reputation {
|
|
37
|
+
/** In-memory attestation store (production: EAS on-chain or IPFS). */
|
|
38
|
+
attestations = new Map();
|
|
39
|
+
/**
|
|
40
|
+
* Create a reputation attestation for an agent.
|
|
41
|
+
*
|
|
42
|
+
* @param attesterAddress - Who is creating the attestation
|
|
43
|
+
* @param options - Attestation details
|
|
44
|
+
* @returns The created attestation
|
|
45
|
+
*/
|
|
46
|
+
attest(attesterAddress, options) {
|
|
47
|
+
if (options.score < 0 || options.score > 100) {
|
|
48
|
+
throw new Error('Score must be between 0 and 100');
|
|
49
|
+
}
|
|
50
|
+
const attestation = {
|
|
51
|
+
id: generateAttestationId(),
|
|
52
|
+
attester: attesterAddress,
|
|
53
|
+
subject: options.subject,
|
|
54
|
+
score: options.score,
|
|
55
|
+
category: options.category,
|
|
56
|
+
comment: options.comment,
|
|
57
|
+
timestamp: new Date(),
|
|
58
|
+
expiresAt: options.validFor
|
|
59
|
+
? new Date(Date.now() + options.validFor)
|
|
60
|
+
: undefined,
|
|
61
|
+
isValid: true,
|
|
62
|
+
};
|
|
63
|
+
const existing = this.attestations.get(options.subject) ?? [];
|
|
64
|
+
existing.push(attestation);
|
|
65
|
+
this.attestations.set(options.subject, existing);
|
|
66
|
+
return attestation;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Revoke an attestation by ID.
|
|
70
|
+
*/
|
|
71
|
+
revoke(subject, attestationId) {
|
|
72
|
+
const attestations = this.attestations.get(subject);
|
|
73
|
+
if (!attestations)
|
|
74
|
+
return false;
|
|
75
|
+
const att = attestations.find((a) => a.id === attestationId);
|
|
76
|
+
if (!att)
|
|
77
|
+
return false;
|
|
78
|
+
att.isValid = false;
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Get the full reputation profile for an agent.
|
|
83
|
+
*/
|
|
84
|
+
getProfile(agentDid) {
|
|
85
|
+
const attestations = this.getValidAttestations(agentDid);
|
|
86
|
+
if (attestations.length === 0) {
|
|
87
|
+
return {
|
|
88
|
+
agentDid,
|
|
89
|
+
overallScore: 0,
|
|
90
|
+
totalAttestations: 0,
|
|
91
|
+
successRate: 0,
|
|
92
|
+
totalTransactions: 0,
|
|
93
|
+
categoryScores: {},
|
|
94
|
+
recentAttestations: [],
|
|
95
|
+
lastUpdated: new Date(),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
// Calculate category scores
|
|
99
|
+
const categoryScores = this.calculateCategoryScores(attestations);
|
|
100
|
+
// Calculate weighted overall score
|
|
101
|
+
const overallScore = this.calculateOverallScore(categoryScores);
|
|
102
|
+
// Calculate success rate (score >= 70 is "success")
|
|
103
|
+
const successCount = attestations.filter((a) => a.score >= 70).length;
|
|
104
|
+
const successRate = successCount / attestations.length;
|
|
105
|
+
return {
|
|
106
|
+
agentDid,
|
|
107
|
+
overallScore: Math.round(overallScore),
|
|
108
|
+
totalAttestations: attestations.length,
|
|
109
|
+
successRate: Math.round(successRate * 100) / 100,
|
|
110
|
+
totalTransactions: attestations.filter((a) => a.category === 'payment-reliability').length,
|
|
111
|
+
categoryScores,
|
|
112
|
+
recentAttestations: attestations.slice(-10),
|
|
113
|
+
lastUpdated: new Date(),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Get the overall score for an agent (0-100).
|
|
118
|
+
*/
|
|
119
|
+
getScore(agentDid) {
|
|
120
|
+
return this.getProfile(agentDid).overallScore;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Check if an agent meets a minimum trust threshold.
|
|
124
|
+
*/
|
|
125
|
+
meetsThreshold(agentDid, minScore) {
|
|
126
|
+
return this.getScore(agentDid) >= minScore;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Get all valid (non-expired, non-revoked) attestations for an agent.
|
|
130
|
+
*/
|
|
131
|
+
getValidAttestations(subject) {
|
|
132
|
+
const all = this.attestations.get(subject) ?? [];
|
|
133
|
+
const now = Date.now();
|
|
134
|
+
return all.filter((a) => {
|
|
135
|
+
if (!a.isValid)
|
|
136
|
+
return false;
|
|
137
|
+
if (a.expiresAt && a.expiresAt.getTime() < now)
|
|
138
|
+
return false;
|
|
139
|
+
return true;
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Get all attestations (including invalid) for an agent.
|
|
144
|
+
*/
|
|
145
|
+
getAllAttestations(subject) {
|
|
146
|
+
return [...(this.attestations.get(subject) ?? [])];
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Get the attestation count for an agent.
|
|
150
|
+
*/
|
|
151
|
+
getAttestationCount(subject) {
|
|
152
|
+
return this.getValidAttestations(subject).length;
|
|
153
|
+
}
|
|
154
|
+
// ─── Internal ──────────────────────────────────────────────────────
|
|
155
|
+
/**
|
|
156
|
+
* Calculate average scores per category.
|
|
157
|
+
*/
|
|
158
|
+
calculateCategoryScores(attestations) {
|
|
159
|
+
const categoryGroups = {};
|
|
160
|
+
for (const att of attestations) {
|
|
161
|
+
if (!categoryGroups[att.category]) {
|
|
162
|
+
categoryGroups[att.category] = [];
|
|
163
|
+
}
|
|
164
|
+
categoryGroups[att.category].push(att.score);
|
|
165
|
+
}
|
|
166
|
+
const result = {};
|
|
167
|
+
for (const [category, scores] of Object.entries(categoryGroups)) {
|
|
168
|
+
const avg = scores.reduce((a, b) => a + b, 0) / scores.length;
|
|
169
|
+
result[category] = Math.round(avg);
|
|
170
|
+
}
|
|
171
|
+
return result;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Calculate weighted overall score from category scores.
|
|
175
|
+
*/
|
|
176
|
+
calculateOverallScore(categoryScores) {
|
|
177
|
+
let weightedSum = 0;
|
|
178
|
+
let totalWeight = 0;
|
|
179
|
+
for (const [category, score] of Object.entries(categoryScores)) {
|
|
180
|
+
const weight = CATEGORY_WEIGHTS[category] ?? 0.05;
|
|
181
|
+
weightedSum += score * weight;
|
|
182
|
+
totalWeight += weight;
|
|
183
|
+
}
|
|
184
|
+
if (totalWeight === 0)
|
|
185
|
+
return 0;
|
|
186
|
+
return weightedSum / totalWeight;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=reputation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reputation.js","sourceRoot":"","sources":["../../../src/identity/reputation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Identity Layer Types — Agent identity, reputation, and ownership.
|
|
3
|
+
*
|
|
4
|
+
* Implements concepts from:
|
|
5
|
+
* - ERC-8004 "Trustless Agents" (Identity + Reputation + Validation registries)
|
|
6
|
+
* - W3C DID (Decentralized Identifiers)
|
|
7
|
+
* - EAS (Ethereum Attestation Service)
|
|
8
|
+
* - Stellar Protocol 25 (ZK-KYC selective disclosure)
|
|
9
|
+
*
|
|
10
|
+
* @see https://eips.ethereum.org/EIPS/eip-8004
|
|
11
|
+
* @see https://www.w3.org/TR/did-core/
|
|
12
|
+
* @see https://attest.org
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/identity/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// envoy — Celo-first agent payment SDK (x402 + MPP)
|
|
2
|
+
// https://github.com/envoy-pay/envoy-pay
|
|
3
|
+
//
|
|
4
|
+
// The default import is the lean Celo core: the agent client, on-chain
|
|
5
|
+
// settlement via the EnvoyFacilitator, ERC-8004 identity, an EVM payment
|
|
6
|
+
// adapter + watcher, and EIP-681 request URIs. Everything else is opt-in via
|
|
7
|
+
// subpath imports, so you only pay for what you use:
|
|
8
|
+
//
|
|
9
|
+
// envoy-pay/server 402 gating middleware (x402 / MPP) + webhooks
|
|
10
|
+
// envoy-pay/wallet unified multi-chain wallet abstraction
|
|
11
|
+
// envoy-pay/ows Open Wallet Standard — local key mgmt + signing
|
|
12
|
+
// envoy-pay/stripe Stripe MPP adapter (fiat + stablecoins)
|
|
13
|
+
// envoy-pay/solana Solana adapter + watcher + Solana Pay URIs
|
|
14
|
+
// envoy-pay/stellar Stellar adapter + watcher + SEP-7 URIs
|
|
15
|
+
// envoy-pay/okx OnchainOS (OKX DEX aggregator)
|
|
16
|
+
// envoy-pay/bridge cross-chain USDC bridge
|
|
17
|
+
// envoy-pay/monitor every chain watcher (incl. multi-chain)
|
|
18
|
+
// envoy-pay/requests every payment-request URI builder
|
|
19
|
+
// envoy-pay/facilitator hosted facilitation service (revenue engine)
|
|
20
|
+
// envoy-pay/contracts on-chain EnvoyFacilitator client (also re-exported here)
|
|
21
|
+
// envoy-pay/identity ERC-8004 + identity primitives (also re-exported here)
|
|
22
|
+
// ── Core ──────────────────────────────────────────────────────────────────
|
|
23
|
+
export { EnvoyClient } from './client.js';
|
|
24
|
+
export { PolicyEngine } from './policy.js';
|
|
25
|
+
// ── Protocol — x402 + MPP ───────────────────────────────────────────────────
|
|
26
|
+
export { parseMppChallenge, parseMppChallenges, decodeChallengeRequest, buildMppCredential, buildAuthorizationHeader, parseMppReceipt, detectProtocol, extractMppChallenges, base64urlEncode, base64urlDecode, } from './mpp.js';
|
|
27
|
+
// ── On-chain x402 adapter — Celo and any EVM chain ──────────────────────────
|
|
28
|
+
export { EvmPaymentAdapter, listEvmChains } from './adapters/evm.js';
|
|
29
|
+
// ── Watch a Celo / EVM address for incoming payments ────────────────────────
|
|
30
|
+
export { createEvmWatcher } from './monitor/evm-watcher.js';
|
|
31
|
+
// ── Payment-request URIs — EIP-681 (Celo / EVM) ─────────────────────────────
|
|
32
|
+
export { buildEip681Uri } from './requests/eip681.js';
|
|
33
|
+
// ── Identity — ERC-8004 (canonical) + off-chain primitives ──────────────────
|
|
34
|
+
export { AgentIdentity, DIDResolver, AgentCard, Reputation, OwnerRegistry, erc8004, } from './identity/index.js';
|
|
35
|
+
// ── Contracts — EnvoyFacilitator on-chain client (Celo) ─────────────────────
|
|
36
|
+
export { ENVOY_CONTRACT_ADDRESSES, getEnvoyAddresses, CELO_MAINNET, CELO_SEPOLIA, createEnvoyFacilitator, signPaymentAuth, paymentAuthDomain, paymentAuthTypedData, PAYMENT_AUTH_TYPES, ENVOY_FACILITATOR_ABI, } from './contracts/index.js';
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,yCAAyC;AACzC,EAAE;AACF,uEAAuE;AACvE,yEAAyE;AACzE,6EAA6E;AAC7E,qDAAqD;AACrD,EAAE;AACF,yEAAyE;AACzE,kEAAkE;AAClE,2EAA2E;AAC3E,mEAAmE;AACnE,sEAAsE;AACtE,kEAAkE;AAClE,0DAA0D;AAC1D,mDAAmD;AACnD,mEAAmE;AACnE,6DAA6D;AAC7D,wEAAwE;AACxE,oFAAoF;AACpF,kFAAkF;AAElF,6EAA6E;AAC7E,OAAO,EAAE,WAAW,EAAsB,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAgB,MAAM,UAAU,CAAC;AAGtD,+EAA+E;AAC/E,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,eAAe,GAChB,MAAM,OAAO,CAAC;AAYf,+EAA+E;AAC/E,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAalE,+EAA+E;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,+EAA+E;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGnD,+EAA+E;AAC/E,OAAO,EACL,aAAa,EACb,WAAW,EACX,SAAS,EACT,UAAU,EACV,aAAa,EACb,OAAO,GACR,MAAM,YAAY,CAAC;AAsBpB,+EAA+E;AAC/E,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAQA,sDAAsD;AACtD,MAAM,CAAC,MAAM,UAAU,GAAW,GAAG,EAAE,GAAE,CAAC,CAAC"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { noopLogger } from '../logger.js';
|
|
2
|
+
/**
|
|
3
|
+
* ERC-20 Transfer event topic hash.
|
|
4
|
+
* keccak256('Transfer(address,address,uint256)')
|
|
5
|
+
*/
|
|
6
|
+
const TRANSFER_TOPIC = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef';
|
|
7
|
+
/**
|
|
8
|
+
* Creates an EVM payment watcher using JSON-RPC polling.
|
|
9
|
+
*
|
|
10
|
+
* Monitors:
|
|
11
|
+
* 1. ERC-20 Transfer events TO the target address (USDC)
|
|
12
|
+
* 2. Native ETH transfers TO the target address (via block scanning)
|
|
13
|
+
*
|
|
14
|
+
* @returns Unsubscribe function to stop watching.
|
|
15
|
+
*/
|
|
16
|
+
export function createEvmWatcher(config) {
|
|
17
|
+
const log = config.logger ?? noopLogger;
|
|
18
|
+
const pollInterval = config.pollIntervalMs ?? 12000;
|
|
19
|
+
const chainName = config.chainName ?? 'EVM';
|
|
20
|
+
const chainId = config.chainId ?? 'eip155:1';
|
|
21
|
+
let running = true;
|
|
22
|
+
let lastBlock = 0;
|
|
23
|
+
let timer = null;
|
|
24
|
+
async function rpcCall(method, params) {
|
|
25
|
+
const response = await fetch(config.rpcUrl, {
|
|
26
|
+
method: 'POST',
|
|
27
|
+
headers: { 'Content-Type': 'application/json' },
|
|
28
|
+
body: JSON.stringify({ jsonrpc: '2.0', id: 1, method, params }),
|
|
29
|
+
});
|
|
30
|
+
const json = await response.json();
|
|
31
|
+
if (json.error)
|
|
32
|
+
throw new Error(`RPC error: ${json.error.message}`);
|
|
33
|
+
return json.result;
|
|
34
|
+
}
|
|
35
|
+
async function getLatestBlock() {
|
|
36
|
+
const hex = await rpcCall('eth_blockNumber', []);
|
|
37
|
+
return parseInt(hex, 16);
|
|
38
|
+
}
|
|
39
|
+
async function getErc20Transfers(fromBlock, toBlock) {
|
|
40
|
+
if (!config.usdcContractAddress)
|
|
41
|
+
return [];
|
|
42
|
+
const paddedAddress = '0x' + config.address.slice(2).toLowerCase().padStart(64, '0');
|
|
43
|
+
const logs = await rpcCall('eth_getLogs', [{
|
|
44
|
+
fromBlock: '0x' + fromBlock.toString(16),
|
|
45
|
+
toBlock: '0x' + toBlock.toString(16),
|
|
46
|
+
address: config.usdcContractAddress,
|
|
47
|
+
topics: [TRANSFER_TOPIC, null, paddedAddress],
|
|
48
|
+
}]);
|
|
49
|
+
if (!Array.isArray(logs))
|
|
50
|
+
return [];
|
|
51
|
+
return logs.map((logEntry) => {
|
|
52
|
+
const amount = BigInt(logEntry.data).toString();
|
|
53
|
+
const from = '0x' + logEntry.topics[1].slice(26);
|
|
54
|
+
return {
|
|
55
|
+
amount,
|
|
56
|
+
amountFormatted: formatUsdc(amount),
|
|
57
|
+
asset: 'USDC',
|
|
58
|
+
from,
|
|
59
|
+
transactionHash: logEntry.transactionHash,
|
|
60
|
+
chain: chainName,
|
|
61
|
+
caip2Id: chainId,
|
|
62
|
+
timestamp: new Date(),
|
|
63
|
+
confirmations: 1,
|
|
64
|
+
};
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
async function getNativeTransfers(fromBlock, toBlock) {
|
|
68
|
+
const payments = [];
|
|
69
|
+
const targetLower = config.address.toLowerCase();
|
|
70
|
+
for (let blockNum = fromBlock; blockNum <= toBlock; blockNum++) {
|
|
71
|
+
try {
|
|
72
|
+
const block = await rpcCall('eth_getBlockByNumber', ['0x' + blockNum.toString(16), true]);
|
|
73
|
+
if (!block?.transactions)
|
|
74
|
+
continue;
|
|
75
|
+
for (const tx of block.transactions) {
|
|
76
|
+
if (tx.to?.toLowerCase() === targetLower &&
|
|
77
|
+
tx.value && tx.value !== '0x0' && tx.value !== '0x') {
|
|
78
|
+
const amount = BigInt(tx.value).toString();
|
|
79
|
+
payments.push({
|
|
80
|
+
amount,
|
|
81
|
+
amountFormatted: formatEth(amount),
|
|
82
|
+
asset: 'ETH',
|
|
83
|
+
from: tx.from,
|
|
84
|
+
transactionHash: tx.hash,
|
|
85
|
+
chain: chainName,
|
|
86
|
+
caip2Id: chainId,
|
|
87
|
+
timestamp: new Date(parseInt(block.timestamp, 16) * 1000),
|
|
88
|
+
confirmations: 1,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
log(`[evm-watcher] ⚠️ Error scanning block ${blockNum}: ${err.message}`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return payments;
|
|
98
|
+
}
|
|
99
|
+
async function poll() {
|
|
100
|
+
if (!running)
|
|
101
|
+
return;
|
|
102
|
+
try {
|
|
103
|
+
const currentBlock = await getLatestBlock();
|
|
104
|
+
if (lastBlock === 0) {
|
|
105
|
+
lastBlock = currentBlock;
|
|
106
|
+
log(`[evm-watcher] 🔍 Started watching from block ${currentBlock} on ${chainName}`);
|
|
107
|
+
schedulePoll();
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (currentBlock <= lastBlock) {
|
|
111
|
+
schedulePoll();
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
const fromBlock = lastBlock + 1;
|
|
115
|
+
const toBlock = currentBlock;
|
|
116
|
+
log(`[evm-watcher] 📦 Scanning blocks ${fromBlock}–${toBlock} on ${chainName}`);
|
|
117
|
+
// Scan for ERC-20 and native transfers in parallel
|
|
118
|
+
const [erc20Payments, nativePayments] = await Promise.all([
|
|
119
|
+
getErc20Transfers(fromBlock, toBlock),
|
|
120
|
+
getNativeTransfers(fromBlock, toBlock),
|
|
121
|
+
]);
|
|
122
|
+
const allPayments = [...erc20Payments, ...nativePayments];
|
|
123
|
+
for (const payment of allPayments) {
|
|
124
|
+
log(`[evm-watcher] 💰 Incoming: ${payment.amountFormatted} ${payment.asset} from ${payment.from.slice(0, 10)}…`);
|
|
125
|
+
config.onPayment(payment);
|
|
126
|
+
}
|
|
127
|
+
lastBlock = toBlock;
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
log(`[evm-watcher] ❌ Poll error: ${err.message}`);
|
|
131
|
+
config.onError?.(err);
|
|
132
|
+
}
|
|
133
|
+
schedulePoll();
|
|
134
|
+
}
|
|
135
|
+
function schedulePoll() {
|
|
136
|
+
if (running && pollInterval > 0) {
|
|
137
|
+
timer = setTimeout(poll, pollInterval);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// Start polling
|
|
141
|
+
poll();
|
|
142
|
+
// Return unsubscribe function
|
|
143
|
+
return () => {
|
|
144
|
+
running = false;
|
|
145
|
+
if (timer)
|
|
146
|
+
clearTimeout(timer);
|
|
147
|
+
log(`[evm-watcher] 🛑 Stopped watching on ${chainName}`);
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
function formatUsdc(atomicAmount) {
|
|
151
|
+
const n = BigInt(atomicAmount);
|
|
152
|
+
const whole = n / 1000000n;
|
|
153
|
+
const frac = (n % 1000000n).toString().padStart(6, '0');
|
|
154
|
+
return `${whole}.${frac}`;
|
|
155
|
+
}
|
|
156
|
+
function formatEth(weiAmount) {
|
|
157
|
+
const n = BigInt(weiAmount);
|
|
158
|
+
const whole = n / 10n ** 18n;
|
|
159
|
+
const frac = ((n % 10n ** 18n) / 10n ** 12n).toString().padStart(6, '0');
|
|
160
|
+
return `${whole}.${frac}`;
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=evm-watcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evm-watcher.js","sourceRoot":"","sources":["../../../src/monitor/evm-watcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* envoy — Real-Time Payment Monitoring
|
|
3
|
+
*
|
|
4
|
+
* Chain-specific watchers that detect incoming payments
|
|
5
|
+
* and invoke callbacks in real-time.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { createEvmWatcher, createStellarWatcher } from 'envoy-pay/monitor';
|
|
10
|
+
*
|
|
11
|
+
* const unsub = createEvmWatcher({
|
|
12
|
+
* address: '0xYOUR_WALLET',
|
|
13
|
+
* rpcUrl: 'https://mainnet.base.org',
|
|
14
|
+
* onPayment: (event) => console.log('Received:', event),
|
|
15
|
+
* });
|
|
16
|
+
*
|
|
17
|
+
* // Stop watching
|
|
18
|
+
* unsub();
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export { createEvmWatcher } from './evm-watcher.js';
|
|
22
|
+
export { createStellarWatcher } from './stellar-watcher.js';
|
|
23
|
+
export { createSolanaWatcher } from './solana-watcher.js';
|
|
24
|
+
export { createMultiChainWatcher } from './multi-watcher.js';
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/monitor/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,gBAAgB,EAAyB,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAA6B,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAA4B,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAgC,MAAM,iBAAiB,CAAC"}
|