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,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentCard — Capability and metadata registry for AI agents.
|
|
3
|
+
*
|
|
4
|
+
* Implements the ERC-8004 Identity Registry concept: each agent has
|
|
5
|
+
* a structured card describing its capabilities, service endpoints,
|
|
6
|
+
* owner, and multi-chain addresses.
|
|
7
|
+
*
|
|
8
|
+
* AgentCards are portable — they can be serialized to JSON and stored
|
|
9
|
+
* on IPFS, or registered on-chain as NFT metadata (ERC-721).
|
|
10
|
+
*
|
|
11
|
+
* @see ERC-8004 — Identity Registry (NFT-based agent IDs)
|
|
12
|
+
* @see Google A2A Protocol — AgentCard discovery
|
|
13
|
+
*/
|
|
14
|
+
export class AgentCard {
|
|
15
|
+
data;
|
|
16
|
+
createdAt;
|
|
17
|
+
updatedAt;
|
|
18
|
+
constructor(data) {
|
|
19
|
+
this.validateCard(data);
|
|
20
|
+
this.data = { ...data };
|
|
21
|
+
this.createdAt = new Date();
|
|
22
|
+
this.updatedAt = new Date();
|
|
23
|
+
}
|
|
24
|
+
// ═══ Getters ══════════════════════════════════════════════════════
|
|
25
|
+
get name() { return this.data.name; }
|
|
26
|
+
get version() { return this.data.version; }
|
|
27
|
+
get description() { return this.data.description; }
|
|
28
|
+
get capabilities() { return [...this.data.capabilities]; }
|
|
29
|
+
get owner() { return this.data.owner; }
|
|
30
|
+
get endpoints() { return this.data.endpoints ? { ...this.data.endpoints } : undefined; }
|
|
31
|
+
get addresses() { return this.data.addresses ? [...this.data.addresses] : undefined; }
|
|
32
|
+
get tags() { return this.data.tags ? [...this.data.tags] : []; }
|
|
33
|
+
get iconUrl() { return this.data.iconUrl; }
|
|
34
|
+
// ═══ Capability Checks ════════════════════════════════════════════
|
|
35
|
+
/**
|
|
36
|
+
* Check if this agent has a specific capability.
|
|
37
|
+
*/
|
|
38
|
+
hasCapability(capability) {
|
|
39
|
+
return this.data.capabilities.includes(capability.toLowerCase());
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Check if this agent has ALL of the specified capabilities.
|
|
43
|
+
*/
|
|
44
|
+
hasAllCapabilities(capabilities) {
|
|
45
|
+
return capabilities.every((c) => this.hasCapability(c));
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Check if this agent has ANY of the specified capabilities.
|
|
49
|
+
*/
|
|
50
|
+
hasAnyCapability(capabilities) {
|
|
51
|
+
return capabilities.some((c) => this.hasCapability(c));
|
|
52
|
+
}
|
|
53
|
+
// ═══ Updates ══════════════════════════════════════════════════════
|
|
54
|
+
/**
|
|
55
|
+
* Add a capability to the agent card.
|
|
56
|
+
*/
|
|
57
|
+
addCapability(capability) {
|
|
58
|
+
const lower = capability.toLowerCase();
|
|
59
|
+
if (!this.data.capabilities.includes(lower)) {
|
|
60
|
+
this.data.capabilities.push(lower);
|
|
61
|
+
this.updatedAt = new Date();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Remove a capability from the agent card.
|
|
66
|
+
*/
|
|
67
|
+
removeCapability(capability) {
|
|
68
|
+
const lower = capability.toLowerCase();
|
|
69
|
+
const index = this.data.capabilities.indexOf(lower);
|
|
70
|
+
if (index === -1)
|
|
71
|
+
return false;
|
|
72
|
+
this.data.capabilities.splice(index, 1);
|
|
73
|
+
this.updatedAt = new Date();
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Update a service endpoint.
|
|
78
|
+
*/
|
|
79
|
+
setEndpoint(type, url) {
|
|
80
|
+
if (!this.data.endpoints) {
|
|
81
|
+
this.data.endpoints = {};
|
|
82
|
+
}
|
|
83
|
+
this.data.endpoints[type] = url;
|
|
84
|
+
this.updatedAt = new Date();
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Add a chain address to the agent card.
|
|
88
|
+
*/
|
|
89
|
+
addAddress(chain, caip2Id, address) {
|
|
90
|
+
if (!this.data.addresses) {
|
|
91
|
+
this.data.addresses = [];
|
|
92
|
+
}
|
|
93
|
+
// Don't add duplicates
|
|
94
|
+
const exists = this.data.addresses.some((a) => a.caip2Id === caip2Id && a.address === address);
|
|
95
|
+
if (!exists) {
|
|
96
|
+
this.data.addresses.push({ chain, caip2Id, address });
|
|
97
|
+
this.updatedAt = new Date();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// ═══ Serialization ════════════════════════════════════════════════
|
|
101
|
+
/**
|
|
102
|
+
* Serialize to JSON (for IPFS, on-chain storage, etc.)
|
|
103
|
+
*/
|
|
104
|
+
toJSON() {
|
|
105
|
+
return {
|
|
106
|
+
...this.data,
|
|
107
|
+
createdAt: this.createdAt.toISOString(),
|
|
108
|
+
updatedAt: this.updatedAt.toISOString(),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Create an AgentCard from JSON.
|
|
113
|
+
*/
|
|
114
|
+
static fromJSON(json) {
|
|
115
|
+
return new AgentCard(json);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get the raw data.
|
|
119
|
+
*/
|
|
120
|
+
getData() {
|
|
121
|
+
return { ...this.data };
|
|
122
|
+
}
|
|
123
|
+
// ═══ Validation ═══════════════════════════════════════════════════
|
|
124
|
+
validateCard(data) {
|
|
125
|
+
if (!data.name || data.name.trim().length === 0) {
|
|
126
|
+
throw new Error('Agent name is required');
|
|
127
|
+
}
|
|
128
|
+
if (!data.version || !/^\d+\.\d+\.\d+/.test(data.version)) {
|
|
129
|
+
throw new Error('Agent version must be semver (e.g., "1.0.0")');
|
|
130
|
+
}
|
|
131
|
+
if (!data.capabilities || data.capabilities.length === 0) {
|
|
132
|
+
throw new Error('Agent must have at least one capability');
|
|
133
|
+
}
|
|
134
|
+
if (!data.owner || data.owner.trim().length === 0) {
|
|
135
|
+
throw new Error('Agent owner address is required');
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=agent-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-card.js","sourceRoot":"","sources":["../../../src/identity/agent-card.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentIdentity — Main facade for the identity layer.
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates DIDResolver, AgentCard, Reputation, and OwnerRegistry
|
|
5
|
+
* into a single, cohesive interface. This is the primary object that
|
|
6
|
+
* agents and the EnvoyClient interact with.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* const identity = new AgentIdentity({
|
|
11
|
+
* metadata: {
|
|
12
|
+
* name: 'Trading Bot Alpha',
|
|
13
|
+
* version: '1.0.0',
|
|
14
|
+
* capabilities: ['trade', 'analyze'],
|
|
15
|
+
* owner: '0xOwner...',
|
|
16
|
+
* },
|
|
17
|
+
* signerAddress: '0xAgent...',
|
|
18
|
+
* signerChainId: 'eip155:8453',
|
|
19
|
+
* });
|
|
20
|
+
*
|
|
21
|
+
* // Other agents can verify:
|
|
22
|
+
* const score = identity.getReputationScore();
|
|
23
|
+
* const canTrust = identity.meetsThreshold(70);
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
import { DIDResolver } from './did-resolver.js';
|
|
27
|
+
import { AgentCard } from './agent-card.js';
|
|
28
|
+
import { Reputation } from './reputation.js';
|
|
29
|
+
import { OwnerRegistry } from './owner-registry.js';
|
|
30
|
+
export class AgentIdentity {
|
|
31
|
+
/** The agent's DID. */
|
|
32
|
+
did;
|
|
33
|
+
/** The agent's DID Document. */
|
|
34
|
+
didDocument;
|
|
35
|
+
/** The agent's card (capabilities, metadata). */
|
|
36
|
+
card;
|
|
37
|
+
/** Shared modules (can be used across multiple agents). */
|
|
38
|
+
didResolver;
|
|
39
|
+
reputation;
|
|
40
|
+
ownerRegistry;
|
|
41
|
+
log;
|
|
42
|
+
constructor(options) {
|
|
43
|
+
this.log = options.logger ?? (() => { });
|
|
44
|
+
// Initialize modules
|
|
45
|
+
this.didResolver = new DIDResolver();
|
|
46
|
+
this.reputation = new Reputation();
|
|
47
|
+
this.ownerRegistry = new OwnerRegistry();
|
|
48
|
+
// Create agent card
|
|
49
|
+
this.card = new AgentCard(options.metadata);
|
|
50
|
+
// Register DID
|
|
51
|
+
const { did, document } = this.didResolver.create(options.signerAddress, options.signerChainId, options.metadata);
|
|
52
|
+
this.did = did;
|
|
53
|
+
this.didDocument = document;
|
|
54
|
+
// Register ownership
|
|
55
|
+
this.ownerRegistry.register(this.did, options.metadata.owner, 'supervised');
|
|
56
|
+
this.log(`[Identity] 🆔 Agent identity created: ${this.did}`);
|
|
57
|
+
this.log(`[Identity] 🏷️ Name: ${options.metadata.name} v${options.metadata.version}`);
|
|
58
|
+
this.log(`[Identity] 🎯 Capabilities: ${options.metadata.capabilities.join(', ')}`);
|
|
59
|
+
}
|
|
60
|
+
// ═══ Identity API ═════════════════════════════════════════════════
|
|
61
|
+
/**
|
|
62
|
+
* Get the agent's DID string.
|
|
63
|
+
*/
|
|
64
|
+
getDID() {
|
|
65
|
+
return this.did;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get the agent's card data.
|
|
69
|
+
*/
|
|
70
|
+
getCard() {
|
|
71
|
+
return this.card.getData();
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Check if this agent has a specific capability.
|
|
75
|
+
*/
|
|
76
|
+
hasCapability(capability) {
|
|
77
|
+
return this.card.hasCapability(capability);
|
|
78
|
+
}
|
|
79
|
+
// ═══ Reputation API ═══════════════════════════════════════════════
|
|
80
|
+
/**
|
|
81
|
+
* Get this agent's reputation score (0-100).
|
|
82
|
+
*/
|
|
83
|
+
getReputationScore() {
|
|
84
|
+
return this.reputation.getScore(this.did);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Get this agent's full reputation profile.
|
|
88
|
+
*/
|
|
89
|
+
getReputationProfile() {
|
|
90
|
+
return this.reputation.getProfile(this.did);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Check if this agent meets a minimum trust threshold.
|
|
94
|
+
*/
|
|
95
|
+
meetsThreshold(minScore) {
|
|
96
|
+
return this.reputation.meetsThreshold(this.did, minScore);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Create a reputation attestation for ANOTHER agent.
|
|
100
|
+
*/
|
|
101
|
+
attestAgent(options) {
|
|
102
|
+
this.log(`[Identity] ⭐ Attesting ${options.subject}: ${options.score}/100 (${options.category})`);
|
|
103
|
+
return this.reputation.attest(this.didDocument.controller, options);
|
|
104
|
+
}
|
|
105
|
+
// ═══ Ownership API ════════════════════════════════════════════════
|
|
106
|
+
/**
|
|
107
|
+
* Get this agent's owner.
|
|
108
|
+
*/
|
|
109
|
+
getOwner() {
|
|
110
|
+
return this.ownerRegistry.getOwner(this.did);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Get this agent's delegation level.
|
|
114
|
+
*/
|
|
115
|
+
getDelegationLevel() {
|
|
116
|
+
return this.ownerRegistry.getDelegationLevel(this.did);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Check if this agent can transact (not readonly).
|
|
120
|
+
*/
|
|
121
|
+
canTransact() {
|
|
122
|
+
return this.ownerRegistry.canTransact(this.did);
|
|
123
|
+
}
|
|
124
|
+
// ═══ Resolution API (for discovering other agents) ════════════════
|
|
125
|
+
/**
|
|
126
|
+
* Resolve another agent's identity by DID.
|
|
127
|
+
*/
|
|
128
|
+
resolveAgent(agentDid, options) {
|
|
129
|
+
const didDoc = this.didResolver.resolve(agentDid);
|
|
130
|
+
if (!didDoc)
|
|
131
|
+
return null;
|
|
132
|
+
const includeRep = options?.includeReputation ?? true;
|
|
133
|
+
const includeOwner = options?.includeOwnership ?? true;
|
|
134
|
+
// We don't have the card in this context — return a minimal version
|
|
135
|
+
const resolved = {
|
|
136
|
+
did: didDoc,
|
|
137
|
+
card: {
|
|
138
|
+
name: 'Unknown',
|
|
139
|
+
version: '0.0.0',
|
|
140
|
+
capabilities: [],
|
|
141
|
+
owner: didDoc.controller,
|
|
142
|
+
},
|
|
143
|
+
reputation: includeRep ? this.reputation.getProfile(agentDid) : undefined,
|
|
144
|
+
ownership: includeOwner ? this.ownerRegistry.getOwner(agentDid) ?? undefined : undefined,
|
|
145
|
+
};
|
|
146
|
+
return resolved;
|
|
147
|
+
}
|
|
148
|
+
// ═══ Serialization ════════════════════════════════════════════════
|
|
149
|
+
/**
|
|
150
|
+
* Export the full identity as a portable JSON object.
|
|
151
|
+
*/
|
|
152
|
+
toJSON() {
|
|
153
|
+
return {
|
|
154
|
+
did: this.did,
|
|
155
|
+
didDocument: this.didDocument,
|
|
156
|
+
card: this.card.toJSON(),
|
|
157
|
+
reputation: this.reputation.getProfile(this.did),
|
|
158
|
+
ownership: this.ownerRegistry.getOwner(this.did),
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=agent-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-identity.js","sourceRoot":"","sources":["../../../src/identity/agent-identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DIDResolver — W3C Decentralized Identifier resolution for envoy agents.
|
|
3
|
+
*
|
|
4
|
+
* Implements a custom DID method `did:asg:agent:<chain>:<address>` that
|
|
5
|
+
* resolves to a DID Document containing the agent's public keys,
|
|
6
|
+
* service endpoints, and ownership information.
|
|
7
|
+
*
|
|
8
|
+
* Format: did:asg:agent:<caip2-chain>:<address>
|
|
9
|
+
* @example "did:asg:agent:eip155:8453:0x1234abcd..."
|
|
10
|
+
* @example "did:asg:agent:stellar:pubnet:GABC..."
|
|
11
|
+
* @example "did:asg:agent:solana:mainnet:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp..."
|
|
12
|
+
*
|
|
13
|
+
* @see https://www.w3.org/TR/did-core/
|
|
14
|
+
* @see ERC-8004 — Identity Registry
|
|
15
|
+
*/
|
|
16
|
+
export class DIDResolver {
|
|
17
|
+
/** In-memory registry (production: on-chain or IPFS). */
|
|
18
|
+
registry = new Map();
|
|
19
|
+
/**
|
|
20
|
+
* Create a DID for an agent.
|
|
21
|
+
*
|
|
22
|
+
* @param address - The agent's primary address
|
|
23
|
+
* @param chainId - CAIP-2 chain identifier
|
|
24
|
+
* @param card - Agent card metadata
|
|
25
|
+
* @returns The generated DID and DID Document
|
|
26
|
+
*/
|
|
27
|
+
create(address, chainId, card) {
|
|
28
|
+
const did = this.buildDID(address, chainId);
|
|
29
|
+
const verificationMethod = {
|
|
30
|
+
id: `${did}#key-1`,
|
|
31
|
+
type: this.getKeyType(chainId),
|
|
32
|
+
controller: did,
|
|
33
|
+
publicKeyMultibase: this.addressToMultibase(address),
|
|
34
|
+
};
|
|
35
|
+
const services = [];
|
|
36
|
+
if (card.endpoints?.a2a) {
|
|
37
|
+
services.push({
|
|
38
|
+
id: `${did}#a2a`,
|
|
39
|
+
type: 'A2AEndpoint',
|
|
40
|
+
serviceEndpoint: card.endpoints.a2a,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
if (card.endpoints?.mcp) {
|
|
44
|
+
services.push({
|
|
45
|
+
id: `${did}#mcp`,
|
|
46
|
+
type: 'MCPEndpoint',
|
|
47
|
+
serviceEndpoint: card.endpoints.mcp,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
if (card.endpoints?.payment) {
|
|
51
|
+
services.push({
|
|
52
|
+
id: `${did}#payment`,
|
|
53
|
+
type: 'PaymentEndpoint',
|
|
54
|
+
serviceEndpoint: card.endpoints.payment,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
const document = {
|
|
58
|
+
id: did,
|
|
59
|
+
controller: card.owner,
|
|
60
|
+
verificationMethod: [verificationMethod],
|
|
61
|
+
service: services,
|
|
62
|
+
created: new Date(),
|
|
63
|
+
updated: new Date(),
|
|
64
|
+
};
|
|
65
|
+
this.registry.set(did, document);
|
|
66
|
+
return { did, document };
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Resolve a DID to its DID Document.
|
|
70
|
+
*/
|
|
71
|
+
resolve(did) {
|
|
72
|
+
return this.registry.get(did) ?? null;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Parse a DID string into its components.
|
|
76
|
+
*/
|
|
77
|
+
parse(did) {
|
|
78
|
+
const parts = did.split(':');
|
|
79
|
+
// did:asg:agent:<chainType>:<chainId>:<address>
|
|
80
|
+
// Minimum: did:asg:agent:chain:address = 5 parts
|
|
81
|
+
if (parts.length < 5 || parts[0] !== 'did' || parts[1] !== 'asg') {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
const method = parts[1]; // "asg"
|
|
85
|
+
const submethod = parts[2]; // "agent"
|
|
86
|
+
// Chain can be multi-part (e.g., "eip155:8453")
|
|
87
|
+
// Address is always the last part
|
|
88
|
+
const address = parts[parts.length - 1];
|
|
89
|
+
const chain = parts.slice(3, parts.length - 1).join(':');
|
|
90
|
+
return { method, submethod, chain, address };
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Validate that a DID string is well-formed.
|
|
94
|
+
*/
|
|
95
|
+
validate(did) {
|
|
96
|
+
const parsed = this.parse(did);
|
|
97
|
+
if (!parsed)
|
|
98
|
+
return false;
|
|
99
|
+
return (parsed.method === 'asg' &&
|
|
100
|
+
parsed.submethod === 'agent' &&
|
|
101
|
+
parsed.chain.length > 0 &&
|
|
102
|
+
parsed.address.length > 0);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Update a DID Document's service endpoints.
|
|
106
|
+
*/
|
|
107
|
+
updateServices(did, services) {
|
|
108
|
+
const doc = this.registry.get(did);
|
|
109
|
+
if (!doc)
|
|
110
|
+
return false;
|
|
111
|
+
doc.service = services;
|
|
112
|
+
doc.updated = new Date();
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Deactivate (delete) a DID Document.
|
|
117
|
+
*/
|
|
118
|
+
deactivate(did) {
|
|
119
|
+
return this.registry.delete(did);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* List all registered DIDs.
|
|
123
|
+
*/
|
|
124
|
+
listAll() {
|
|
125
|
+
return Array.from(this.registry.keys());
|
|
126
|
+
}
|
|
127
|
+
// ─── Internal ──────────────────────────────────────────────────────
|
|
128
|
+
buildDID(address, chainId) {
|
|
129
|
+
return `did:asg:agent:${chainId}:${address}`;
|
|
130
|
+
}
|
|
131
|
+
getKeyType(chainId) {
|
|
132
|
+
if (chainId.startsWith('eip155'))
|
|
133
|
+
return 'EcdsaSecp256k1VerificationKey2019';
|
|
134
|
+
if (chainId.startsWith('stellar'))
|
|
135
|
+
return 'Ed25519VerificationKey2020';
|
|
136
|
+
if (chainId.startsWith('solana'))
|
|
137
|
+
return 'Ed25519VerificationKey2020';
|
|
138
|
+
return 'JsonWebKey2020';
|
|
139
|
+
}
|
|
140
|
+
addressToMultibase(address) {
|
|
141
|
+
// Multibase-encode the address (simplified: just prefix with 'z' for base58btc)
|
|
142
|
+
return `z${address}`;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=did-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"did-resolver.js","sourceRoot":"","sources":["../../../src/identity/did-resolver.ts"],"names":[],"mappings":"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"}
|