agentwallet-sdk 4.0.5 → 5.0.1
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 +154 -158
- package/dist/abi.d.ts +396 -46
- package/dist/abi.d.ts.map +1 -1
- package/dist/abi.js +0 -2
- package/dist/abi.js.map +1 -1
- package/dist/ap2/index.d.ts +185 -0
- package/dist/ap2/index.d.ts.map +1 -0
- package/dist/ap2/index.js +255 -0
- package/dist/ap2/index.js.map +1 -0
- package/dist/bridge/abis.d.ts.map +1 -1
- package/dist/bridge/abis.js +0 -2
- package/dist/bridge/abis.js.map +1 -1
- package/dist/bridge/client.d.ts +28 -43
- package/dist/bridge/client.d.ts.map +1 -1
- package/dist/bridge/client.js +0 -2
- package/dist/bridge/client.js.map +1 -1
- package/dist/bridge/index.d.ts +1 -0
- package/dist/bridge/index.d.ts.map +1 -1
- package/dist/bridge/index.js +0 -2
- package/dist/bridge/index.js.map +1 -1
- package/dist/bridge/types.d.ts +48 -32
- package/dist/bridge/types.d.ts.map +1 -1
- package/dist/bridge/types.js +0 -2
- package/dist/bridge/types.js.map +1 -1
- package/dist/bridge/unified.d.ts +101 -0
- package/dist/bridge/unified.d.ts.map +1 -0
- package/dist/bridge/unified.js +284 -0
- package/dist/bridge/unified.js.map +1 -0
- package/dist/chains.d.ts +62 -0
- package/dist/chains.d.ts.map +1 -0
- package/dist/chains.js +108 -0
- package/dist/chains.js.map +1 -0
- package/dist/escrow/MutualStakeEscrow.d.ts +75 -0
- package/dist/escrow/MutualStakeEscrow.d.ts.map +1 -0
- package/dist/escrow/MutualStakeEscrow.js +339 -0
- package/dist/escrow/MutualStakeEscrow.js.map +1 -0
- package/dist/escrow/types.d.ts +59 -0
- package/dist/escrow/types.d.ts.map +1 -0
- package/dist/escrow/types.js +11 -0
- package/dist/escrow/types.js.map +1 -0
- package/dist/escrow/verifiers.d.ts +26 -0
- package/dist/escrow/verifiers.d.ts.map +1 -0
- package/dist/escrow/verifiers.js +53 -0
- package/dist/escrow/verifiers.js.map +1 -0
- package/dist/fiat/index.d.ts +10 -0
- package/dist/fiat/index.d.ts.map +1 -0
- package/dist/fiat/index.js +9 -0
- package/dist/fiat/index.js.map +1 -0
- package/dist/fiat/onramp.d.ts +101 -0
- package/dist/fiat/onramp.d.ts.map +1 -0
- package/dist/fiat/onramp.js +155 -0
- package/dist/fiat/onramp.js.map +1 -0
- package/dist/fiat/providers/index.d.ts +16 -0
- package/dist/fiat/providers/index.d.ts.map +1 -0
- package/dist/fiat/providers/index.js +30 -0
- package/dist/fiat/providers/index.js.map +1 -0
- package/dist/fiat/providers/moonpay.d.ts +22 -0
- package/dist/fiat/providers/moonpay.d.ts.map +1 -0
- package/dist/fiat/providers/moonpay.js +107 -0
- package/dist/fiat/providers/moonpay.js.map +1 -0
- package/dist/fiat/providers/stripe.d.ts +26 -0
- package/dist/fiat/providers/stripe.d.ts.map +1 -0
- package/dist/fiat/providers/stripe.js +135 -0
- package/dist/fiat/providers/stripe.js.map +1 -0
- package/dist/fiat/providers/transak.d.ts +26 -0
- package/dist/fiat/providers/transak.d.ts.map +1 -0
- package/dist/fiat/providers/transak.js +119 -0
- package/dist/fiat/providers/transak.js.map +1 -0
- package/dist/fiat/types.d.ts +106 -0
- package/dist/fiat/types.d.ts.map +1 -0
- package/dist/fiat/types.js +13 -0
- package/dist/fiat/types.js.map +1 -0
- package/dist/flash/executor.d.ts +119 -0
- package/dist/flash/executor.d.ts.map +1 -0
- package/dist/flash/executor.js +195 -0
- package/dist/flash/executor.js.map +1 -0
- package/dist/flash/index.d.ts +28 -0
- package/dist/flash/index.d.ts.map +1 -0
- package/dist/flash/index.js +29 -0
- package/dist/flash/index.js.map +1 -0
- package/dist/flash/scanner.d.ts +133 -0
- package/dist/flash/scanner.d.ts.map +1 -0
- package/dist/flash/scanner.js +212 -0
- package/dist/flash/scanner.js.map +1 -0
- package/dist/flash/types.d.ts +136 -0
- package/dist/flash/types.d.ts.map +1 -0
- package/dist/flash/types.js +23 -0
- package/dist/flash/types.js.map +1 -0
- package/dist/gas/index.d.ts +4 -0
- package/dist/gas/index.d.ts.map +1 -0
- package/dist/gas/index.js +3 -0
- package/dist/gas/index.js.map +1 -0
- package/dist/gas/sponsor.d.ts +70 -0
- package/dist/gas/sponsor.d.ts.map +1 -0
- package/dist/gas/sponsor.js +193 -0
- package/dist/gas/sponsor.js.map +1 -0
- package/dist/gas/types.d.ts +76 -0
- package/dist/gas/types.d.ts.map +1 -0
- package/dist/gas/types.js +21 -0
- package/dist/gas/types.js.map +1 -0
- package/dist/identity/agent-identity.d.ts +276 -0
- package/dist/identity/agent-identity.d.ts.map +1 -0
- package/dist/identity/agent-identity.js +300 -0
- package/dist/identity/agent-identity.js.map +1 -0
- package/dist/identity/erc6551.d.ts +441 -0
- package/dist/identity/erc6551.d.ts.map +1 -0
- package/dist/identity/erc6551.js +517 -0
- package/dist/identity/erc6551.js.map +1 -0
- package/dist/identity/erc8004.d.ts +296 -141
- package/dist/identity/erc8004.d.ts.map +1 -1
- package/dist/identity/erc8004.js +43 -12
- package/dist/identity/erc8004.js.map +1 -1
- package/dist/identity/index.d.ts +6 -2
- package/dist/identity/index.d.ts.map +1 -1
- package/dist/identity/index.js +3 -2
- package/dist/identity/index.js.map +1 -1
- package/dist/identity/reputation.d.ts +318 -0
- package/dist/identity/reputation.d.ts.map +1 -0
- package/dist/identity/reputation.js +272 -0
- package/dist/identity/reputation.js.map +1 -0
- package/dist/identity/validation.d.ts +284 -0
- package/dist/identity/validation.d.ts.map +1 -0
- package/dist/identity/validation.js +226 -0
- package/dist/identity/validation.js.map +1 -0
- package/dist/index.d.ts +32624 -1011
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -12
- package/dist/index.js.map +1 -1
- package/dist/mev/index.d.ts +4 -0
- package/dist/mev/index.d.ts.map +1 -0
- package/dist/mev/index.js +8 -0
- package/dist/mev/index.js.map +1 -0
- package/dist/mev/protection.d.ts +54 -0
- package/dist/mev/protection.d.ts.map +1 -0
- package/dist/mev/protection.js +185 -0
- package/dist/mev/protection.js.map +1 -0
- package/dist/mev/risk.d.ts +19 -0
- package/dist/mev/risk.d.ts.map +1 -0
- package/dist/mev/risk.js +95 -0
- package/dist/mev/risk.js.map +1 -0
- package/dist/mev/types.d.ts +49 -0
- package/dist/mev/types.d.ts.map +1 -0
- package/dist/mev/types.js +2 -0
- package/dist/mev/types.js.map +1 -0
- package/dist/plugins/elizaos.d.ts +26 -14
- package/dist/plugins/elizaos.d.ts.map +1 -1
- package/dist/plugins/elizaos.js +0 -2
- package/dist/plugins/elizaos.js.map +1 -1
- package/dist/policy/SpendingPolicy.d.ts +89 -15
- package/dist/policy/SpendingPolicy.d.ts.map +1 -1
- package/dist/policy/SpendingPolicy.js +0 -2
- package/dist/policy/SpendingPolicy.js.map +1 -1
- package/dist/policy/SpendingPolicy.test.d.ts +2 -0
- package/dist/policy/SpendingPolicy.test.d.ts.map +1 -0
- package/dist/policy/SpendingPolicy.test.js +143 -0
- package/dist/policy/SpendingPolicy.test.js.map +1 -0
- package/dist/settlement/index.d.ts +4 -0
- package/dist/settlement/index.d.ts.map +1 -0
- package/dist/settlement/index.js +3 -0
- package/dist/settlement/index.js.map +1 -0
- package/dist/settlement/types.d.ts +66 -0
- package/dist/settlement/types.d.ts.map +1 -0
- package/dist/settlement/types.js +37 -0
- package/dist/settlement/types.js.map +1 -0
- package/dist/settlement/verifier.d.ts +75 -0
- package/dist/settlement/verifier.d.ts.map +1 -0
- package/dist/settlement/verifier.js +354 -0
- package/dist/settlement/verifier.js.map +1 -0
- package/dist/solana/bridge.d.ts +144 -0
- package/dist/solana/bridge.d.ts.map +1 -0
- package/dist/solana/bridge.js +352 -0
- package/dist/solana/bridge.js.map +1 -0
- package/dist/solana/index.d.ts +8 -0
- package/dist/solana/index.d.ts.map +1 -0
- package/dist/solana/index.js +6 -0
- package/dist/solana/index.js.map +1 -0
- package/dist/solana/swap.d.ts +85 -0
- package/dist/solana/swap.d.ts.map +1 -0
- package/dist/solana/swap.js +173 -0
- package/dist/solana/swap.js.map +1 -0
- package/dist/solana/types.d.ts +126 -0
- package/dist/solana/types.d.ts.map +1 -0
- package/dist/solana/types.js +10 -0
- package/dist/solana/types.js.map +1 -0
- package/dist/solana/wallet.d.ts +83 -0
- package/dist/solana/wallet.d.ts.map +1 -0
- package/dist/solana/wallet.js +164 -0
- package/dist/solana/wallet.js.map +1 -0
- package/dist/solana/x402.d.ts +69 -0
- package/dist/solana/x402.d.ts.map +1 -0
- package/dist/solana/x402.js +154 -0
- package/dist/solana/x402.js.map +1 -0
- package/dist/solver/adapter.d.ts +47 -0
- package/dist/solver/adapter.d.ts.map +1 -0
- package/dist/solver/adapter.js +146 -0
- package/dist/solver/adapter.js.map +1 -0
- package/dist/solver/analyzer.d.ts +48 -0
- package/dist/solver/analyzer.d.ts.map +1 -0
- package/dist/solver/analyzer.js +171 -0
- package/dist/solver/analyzer.js.map +1 -0
- package/dist/solver/builder.d.ts +31 -0
- package/dist/solver/builder.d.ts.map +1 -0
- package/dist/solver/builder.js +60 -0
- package/dist/solver/builder.js.map +1 -0
- package/dist/solver/index.d.ts +22 -0
- package/dist/solver/index.d.ts.map +1 -0
- package/dist/solver/index.js +25 -0
- package/dist/solver/index.js.map +1 -0
- package/dist/solver/types.d.ts +115 -0
- package/dist/solver/types.d.ts.map +1 -0
- package/dist/solver/types.js +10 -0
- package/dist/solver/types.js.map +1 -0
- package/dist/spend-guard/index.d.ts +125 -0
- package/dist/spend-guard/index.d.ts.map +1 -0
- package/dist/spend-guard/index.js +150 -0
- package/dist/spend-guard/index.js.map +1 -0
- package/dist/swap/SwapModule.d.ts +28 -39
- package/dist/swap/SwapModule.d.ts.map +1 -1
- package/dist/swap/SwapModule.js +2 -4
- package/dist/swap/SwapModule.js.map +1 -1
- package/dist/swap/abi.d.ts.map +1 -1
- package/dist/swap/abi.js +0 -2
- package/dist/swap/abi.js.map +1 -1
- package/dist/swap/index.d.ts +1 -0
- package/dist/swap/index.d.ts.map +1 -1
- package/dist/swap/index.js +0 -2
- package/dist/swap/index.js.map +1 -1
- package/dist/swap/router/cache.d.ts +13 -0
- package/dist/swap/router/cache.d.ts.map +1 -0
- package/dist/swap/router/cache.js +30 -0
- package/dist/swap/router/cache.js.map +1 -0
- package/dist/swap/router/flashbots.d.ts +10 -0
- package/dist/swap/router/flashbots.d.ts.map +1 -0
- package/dist/swap/router/flashbots.js +43 -0
- package/dist/swap/router/flashbots.js.map +1 -0
- package/dist/swap/router/health.d.ts +17 -0
- package/dist/swap/router/health.d.ts.map +1 -0
- package/dist/swap/router/health.js +38 -0
- package/dist/swap/router/health.js.map +1 -0
- package/dist/swap/router/index.d.ts +10 -0
- package/dist/swap/router/index.d.ts.map +1 -0
- package/dist/swap/router/index.js +10 -0
- package/dist/swap/router/index.js.map +1 -0
- package/dist/swap/router/providers/cowswap.d.ts +11 -0
- package/dist/swap/router/providers/cowswap.d.ts.map +1 -0
- package/dist/swap/router/providers/cowswap.js +79 -0
- package/dist/swap/router/providers/cowswap.js.map +1 -0
- package/dist/swap/router/providers/index.d.ts +20 -0
- package/dist/swap/router/providers/index.d.ts.map +1 -0
- package/dist/swap/router/providers/index.js +32 -0
- package/dist/swap/router/providers/index.js.map +1 -0
- package/dist/swap/router/providers/jupiter.d.ts +12 -0
- package/dist/swap/router/providers/jupiter.d.ts.map +1 -0
- package/dist/swap/router/providers/jupiter.js +73 -0
- package/dist/swap/router/providers/jupiter.js.map +1 -0
- package/dist/swap/router/providers/lifi.d.ts +11 -0
- package/dist/swap/router/providers/lifi.d.ts.map +1 -0
- package/dist/swap/router/providers/lifi.js +123 -0
- package/dist/swap/router/providers/lifi.js.map +1 -0
- package/dist/swap/router/providers/oneinch.d.ts +13 -0
- package/dist/swap/router/providers/oneinch.d.ts.map +1 -0
- package/dist/swap/router/providers/oneinch.js +71 -0
- package/dist/swap/router/providers/oneinch.js.map +1 -0
- package/dist/swap/router/providers/paraswap.d.ts +11 -0
- package/dist/swap/router/providers/paraswap.d.ts.map +1 -0
- package/dist/swap/router/providers/paraswap.js +73 -0
- package/dist/swap/router/providers/paraswap.js.map +1 -0
- package/dist/swap/router/providers/uniswap.d.ts +31 -0
- package/dist/swap/router/providers/uniswap.d.ts.map +1 -0
- package/dist/swap/router/providers/uniswap.js +237 -0
- package/dist/swap/router/providers/uniswap.js.map +1 -0
- package/dist/swap/router/providers/zerox.d.ts +13 -0
- package/dist/swap/router/providers/zerox.d.ts.map +1 -0
- package/dist/swap/router/providers/zerox.js +94 -0
- package/dist/swap/router/providers/zerox.js.map +1 -0
- package/dist/swap/router/router.d.ts +86 -0
- package/dist/swap/router/router.d.ts.map +1 -0
- package/dist/swap/router/router.js +224 -0
- package/dist/swap/router/router.js.map +1 -0
- package/dist/swap/router/rsi/engine.d.ts +60 -0
- package/dist/swap/router/rsi/engine.d.ts.map +1 -0
- package/dist/swap/router/rsi/engine.js +483 -0
- package/dist/swap/router/rsi/engine.js.map +1 -0
- package/dist/swap/router/rsi/index.d.ts +3 -0
- package/dist/swap/router/rsi/index.d.ts.map +1 -0
- package/dist/swap/router/rsi/index.js +3 -0
- package/dist/swap/router/rsi/index.js.map +1 -0
- package/dist/swap/router/rsi/types.d.ts +106 -0
- package/dist/swap/router/rsi/types.d.ts.map +1 -0
- package/dist/swap/router/rsi/types.js +3 -0
- package/dist/swap/router/rsi/types.js.map +1 -0
- package/dist/swap/router/types.d.ts +120 -0
- package/dist/swap/router/types.d.ts.map +1 -0
- package/dist/swap/router/types.js +16 -0
- package/dist/swap/router/types.js.map +1 -0
- package/dist/swap/types.d.ts +41 -7
- package/dist/swap/types.d.ts.map +1 -1
- package/dist/swap/types.js +1 -3
- package/dist/swap/types.js.map +1 -1
- package/dist/tax/engine.d.ts +131 -0
- package/dist/tax/engine.d.ts.map +1 -0
- package/dist/tax/engine.js +307 -0
- package/dist/tax/engine.js.map +1 -0
- package/dist/tax/index.d.ts +9 -0
- package/dist/tax/index.d.ts.map +1 -0
- package/dist/tax/index.js +12 -0
- package/dist/tax/index.js.map +1 -0
- package/dist/tax/lots.d.ts +60 -0
- package/dist/tax/lots.d.ts.map +1 -0
- package/dist/tax/lots.js +129 -0
- package/dist/tax/lots.js.map +1 -0
- package/dist/tax/types.d.ts +113 -0
- package/dist/tax/types.d.ts.map +1 -0
- package/dist/tax/types.js +18 -0
- package/dist/tax/types.js.map +1 -0
- package/dist/types.d.ts +106 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +1 -1
- package/dist/x402/__tests__/budget.test.d.ts +2 -0
- package/dist/x402/__tests__/budget.test.d.ts.map +1 -0
- package/dist/x402/__tests__/budget.test.js +114 -0
- package/dist/x402/__tests__/budget.test.js.map +1 -0
- package/dist/x402/__tests__/client.test.d.ts +2 -0
- package/dist/x402/__tests__/client.test.d.ts.map +1 -0
- package/dist/x402/__tests__/client.test.js +107 -0
- package/dist/x402/__tests__/client.test.js.map +1 -0
- package/dist/x402/budget.d.ts +23 -15
- package/dist/x402/budget.d.ts.map +1 -1
- package/dist/x402/budget.js +0 -2
- package/dist/x402/budget.js.map +1 -1
- package/dist/x402/chains/abstract/index.d.ts +87 -59
- package/dist/x402/chains/abstract/index.d.ts.map +1 -1
- package/dist/x402/chains/abstract/index.js +0 -2
- package/dist/x402/chains/abstract/index.js.map +1 -1
- package/dist/x402/client.d.ts +27 -13
- package/dist/x402/client.d.ts.map +1 -1
- package/dist/x402/client.js +0 -2
- package/dist/x402/client.js.map +1 -1
- package/dist/x402/index.d.ts +2 -0
- package/dist/x402/index.d.ts.map +1 -1
- package/dist/x402/index.js +0 -2
- package/dist/x402/index.js.map +1 -1
- package/dist/x402/middleware.d.ts +4 -4
- package/dist/x402/middleware.d.ts.map +1 -1
- package/dist/x402/middleware.js +0 -2
- package/dist/x402/middleware.js.map +1 -1
- package/dist/x402/types.d.ts +88 -5
- package/dist/x402/types.d.ts.map +1 -1
- package/dist/x402/types.js +0 -2
- package/dist/x402/types.js.map +1 -1
- package/dist/yield/index.d.ts +26 -0
- package/dist/yield/index.d.ts.map +1 -0
- package/dist/yield/index.js +29 -0
- package/dist/yield/index.js.map +1 -0
- package/dist/yield/rates.d.ts +114 -0
- package/dist/yield/rates.d.ts.map +1 -0
- package/dist/yield/rates.js +351 -0
- package/dist/yield/rates.js.map +1 -0
- package/dist/yield/types.d.ts +134 -0
- package/dist/yield/types.d.ts.map +1 -0
- package/dist/yield/types.js +24 -0
- package/dist/yield/types.js.map +1 -0
- package/dist/yield/vault.d.ts +112 -0
- package/dist/yield/vault.d.ts.map +1 -0
- package/dist/yield/vault.js +264 -0
- package/dist/yield/vault.js.map +1 -0
- package/package.json +18 -32
- package/dist/__tests__/identity.did.test.d.ts +0 -2
- package/dist/__tests__/identity.did.test.d.ts.map +0 -1
- package/dist/__tests__/identity.did.test.js +0 -56
- package/dist/__tests__/identity.did.test.js.map +0 -1
- package/dist/__tests__/staking.test.d.ts +0 -2
- package/dist/__tests__/staking.test.d.ts.map +0 -1
- package/dist/__tests__/staking.test.js +0 -70
- package/dist/__tests__/staking.test.js.map +0 -1
- package/dist/__tests__/verify.test.d.ts +0 -2
- package/dist/__tests__/verify.test.d.ts.map +0 -1
- package/dist/__tests__/verify.test.js +0 -57
- package/dist/__tests__/verify.test.js.map +0 -1
- package/dist/identity/did.d.ts +0 -66
- package/dist/identity/did.d.ts.map +0 -1
- package/dist/identity/did.js +0 -186
- package/dist/identity/did.js.map +0 -1
- package/dist/staking/AgentStakingPool.d.ts +0 -100
- package/dist/staking/AgentStakingPool.d.ts.map +0 -1
- package/dist/staking/AgentStakingPool.js +0 -298
- package/dist/staking/AgentStakingPool.js.map +0 -1
- package/dist/staking/index.d.ts +0 -2
- package/dist/staking/index.d.ts.map +0 -1
- package/dist/staking/index.js +0 -2
- package/dist/staking/index.js.map +0 -1
- package/dist/verify/index.d.ts +0 -2
- package/dist/verify/index.d.ts.map +0 -1
- package/dist/verify/index.js +0 -2
- package/dist/verify/index.js.map +0 -1
- package/dist/verify/verifyAgent.d.ts +0 -42
- package/dist/verify/verifyAgent.d.ts.map +0 -1
- package/dist/verify/verifyAgent.js +0 -216
- package/dist/verify/verifyAgent.js.map +0 -1
package/dist/mev/risk.js
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/** Popular tokens that are heavily watched by MEV bots */
|
|
2
|
+
const POPULAR_TOKENS = new Set([
|
|
3
|
+
'ETH', 'WETH', 'USDC', 'USDT', 'DAI', 'WBTC', 'SOL', 'WSOL',
|
|
4
|
+
]);
|
|
5
|
+
/** Deterministic MEV risk scorer — no external calls required */
|
|
6
|
+
export class MEVRiskAssessor {
|
|
7
|
+
/**
|
|
8
|
+
* Assess MEV risk for a proposed swap.
|
|
9
|
+
* Scoring model produces a 0-100 risk score mapped to a risk level.
|
|
10
|
+
*/
|
|
11
|
+
assess(params) {
|
|
12
|
+
const { fromToken, toToken, amountUsd, slippageBps, gasPriceGwei, chain } = params;
|
|
13
|
+
let score = 0;
|
|
14
|
+
// 1. Size risk
|
|
15
|
+
if (amountUsd >= 10000)
|
|
16
|
+
score += 40;
|
|
17
|
+
else if (amountUsd >= 1000)
|
|
18
|
+
score += 20;
|
|
19
|
+
else if (amountUsd >= 100)
|
|
20
|
+
score += 10;
|
|
21
|
+
// < $100 = 0 pts
|
|
22
|
+
// 2. Slippage risk (high slippage = easy sandwich)
|
|
23
|
+
if (slippageBps > 200)
|
|
24
|
+
score += 20;
|
|
25
|
+
else if (slippageBps >= 50)
|
|
26
|
+
score += 10;
|
|
27
|
+
// 3. Popular pair risk (heavily watched by bots)
|
|
28
|
+
if (this.isPopularPair(fromToken, toToken))
|
|
29
|
+
score += 15;
|
|
30
|
+
// 4. Gas spike risk (high gas = bots are active)
|
|
31
|
+
if (gasPriceGwei > 100)
|
|
32
|
+
score += 25;
|
|
33
|
+
else if (gasPriceGwei > 50)
|
|
34
|
+
score += 15;
|
|
35
|
+
// 5. Chain risk
|
|
36
|
+
const chainLower = chain.toLowerCase();
|
|
37
|
+
if (chainLower === 'ethereum' || chainLower === 'mainnet')
|
|
38
|
+
score += 10;
|
|
39
|
+
else if (chainLower === 'arbitrum')
|
|
40
|
+
score += 5;
|
|
41
|
+
else if (chainLower === 'base')
|
|
42
|
+
score += 3;
|
|
43
|
+
// Cap at 100
|
|
44
|
+
score = Math.min(100, score);
|
|
45
|
+
// Map score to risk level
|
|
46
|
+
let riskLevel;
|
|
47
|
+
if (score >= 76)
|
|
48
|
+
riskLevel = 'critical';
|
|
49
|
+
else if (score >= 51)
|
|
50
|
+
riskLevel = 'high';
|
|
51
|
+
else if (score >= 26)
|
|
52
|
+
riskLevel = 'medium';
|
|
53
|
+
else
|
|
54
|
+
riskLevel = 'low';
|
|
55
|
+
// Recommended method by risk level
|
|
56
|
+
let recommendedMethod;
|
|
57
|
+
if (riskLevel === 'critical')
|
|
58
|
+
recommendedMethod = 'flashbots-bundle';
|
|
59
|
+
else if (riskLevel === 'high')
|
|
60
|
+
recommendedMethod = 'flashbots-protect';
|
|
61
|
+
else if (riskLevel === 'medium')
|
|
62
|
+
recommendedMethod = 'private-rpc';
|
|
63
|
+
else
|
|
64
|
+
recommendedMethod = 'none';
|
|
65
|
+
// Estimated savings: risk-weighted sandwich loss model
|
|
66
|
+
// ~0.5-2% of swap size; simplified: amountUsd * riskScore/100 * 0.01
|
|
67
|
+
const estimatedSavingsUsd = amountUsd * (score / 100) * 0.01;
|
|
68
|
+
// Derive factor labels
|
|
69
|
+
const gasPrice = gasPriceGwei > 100 ? 'spike' :
|
|
70
|
+
gasPriceGwei > 50 ? 'high' :
|
|
71
|
+
gasPriceGwei > 20 ? 'normal' : 'low';
|
|
72
|
+
const tokenPairLiquidity = this.isPopularPair(fromToken, toToken) ? 'high' : 'low';
|
|
73
|
+
const marketVolatility = gasPriceGwei > 100 ? 'extreme' :
|
|
74
|
+
gasPriceGwei > 50 ? 'volatile' : 'stable';
|
|
75
|
+
return {
|
|
76
|
+
riskLevel,
|
|
77
|
+
riskScore: score,
|
|
78
|
+
factors: {
|
|
79
|
+
swapSizeUsd: amountUsd,
|
|
80
|
+
slippageBps,
|
|
81
|
+
tokenPairLiquidity,
|
|
82
|
+
marketVolatility,
|
|
83
|
+
gasPrice,
|
|
84
|
+
isPopularPair: this.isPopularPair(fromToken, toToken),
|
|
85
|
+
},
|
|
86
|
+
recommendedMethod,
|
|
87
|
+
estimatedSavingsUsd,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/** Check if a token pair is "popular" (highly watched by MEV bots) */
|
|
91
|
+
isPopularPair(fromToken, toToken) {
|
|
92
|
+
return POPULAR_TOKENS.has(fromToken.toUpperCase()) && POPULAR_TOKENS.has(toToken.toUpperCase());
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=risk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"risk.js","sourceRoot":"","sources":["../../src/mev/risk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export type MEVRiskLevel = 'low' | 'medium' | 'high' | 'critical';
|
|
2
|
+
export type ProtectionMethod = 'flashbots-protect' | 'flashbots-bundle' | 'cowswap-order' | 'private-rpc' | 'none';
|
|
3
|
+
export interface MEVRiskAssessment {
|
|
4
|
+
riskLevel: MEVRiskLevel;
|
|
5
|
+
riskScore: number;
|
|
6
|
+
factors: {
|
|
7
|
+
swapSizeUsd: number;
|
|
8
|
+
slippageBps: number;
|
|
9
|
+
tokenPairLiquidity: 'high' | 'medium' | 'low';
|
|
10
|
+
marketVolatility: 'stable' | 'volatile' | 'extreme';
|
|
11
|
+
gasPrice: 'low' | 'normal' | 'high' | 'spike';
|
|
12
|
+
isPopularPair: boolean;
|
|
13
|
+
};
|
|
14
|
+
recommendedMethod: ProtectionMethod;
|
|
15
|
+
estimatedSavingsUsd: number;
|
|
16
|
+
}
|
|
17
|
+
export interface MEVProtectionConfig {
|
|
18
|
+
enabled: boolean;
|
|
19
|
+
/** Risk threshold above which protection is auto-applied */
|
|
20
|
+
autoProtectAboveRisk?: MEVRiskLevel;
|
|
21
|
+
/** Flashbots RPC endpoint */
|
|
22
|
+
flashbotsRpcUrl?: string;
|
|
23
|
+
/** MEV Blocker RPC (alternative) */
|
|
24
|
+
mevBlockerRpcUrl?: string;
|
|
25
|
+
/** Max extra latency accepted for protection (ms) */
|
|
26
|
+
maxProtectionLatencyMs?: number;
|
|
27
|
+
/** Minimum swap USD value to trigger protection */
|
|
28
|
+
minSwapUsdForProtection?: number;
|
|
29
|
+
}
|
|
30
|
+
export interface ProtectedSwapResult {
|
|
31
|
+
success: boolean;
|
|
32
|
+
txHash?: string;
|
|
33
|
+
protectionMethod: ProtectionMethod;
|
|
34
|
+
bundleHash?: string;
|
|
35
|
+
riskAssessment: MEVRiskAssessment;
|
|
36
|
+
/** Gas saved vs public mempool (estimated) */
|
|
37
|
+
gasSavedGwei?: number;
|
|
38
|
+
/** MEV loss avoided (estimated USD) */
|
|
39
|
+
mevSavedUsd?: number;
|
|
40
|
+
blockNumber?: number;
|
|
41
|
+
latencyMs: number;
|
|
42
|
+
}
|
|
43
|
+
export interface FlashbotsBundle {
|
|
44
|
+
transactions: string[];
|
|
45
|
+
blockNumber: string;
|
|
46
|
+
minTimestamp?: number;
|
|
47
|
+
maxTimestamp?: number;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mev/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAElE,MAAM,MAAM,gBAAgB,GACxB,mBAAmB,GACnB,kBAAkB,GAClB,eAAe,GACf,aAAa,GACb,MAAM,CAAC;AAEX,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,YAAY,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,kBAAkB,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;QAC9C,gBAAgB,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;QACpD,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;QAC9C,aAAa,EAAE,OAAO,CAAC;KACxB,CAAC;IACF,iBAAiB,EAAE,gBAAgB,CAAC;IACpC,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,4DAA4D;IAC5D,oBAAoB,CAAC,EAAE,YAAY,CAAC;IACpC,6BAA6B;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oCAAoC;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qDAAqD;IACrD,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,mDAAmD;IACnD,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,iBAAiB,CAAC;IAClC,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/mev/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,12 +1,34 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @elizaos/plugin-agentwallet
|
|
3
|
+
*
|
|
4
|
+
* ElizaOS plugin for agentwallet-sdk — non-custodial AI agent wallet with
|
|
5
|
+
* x402 payment support, CCTP V2 cross-chain transfers, and on-chain spend limits.
|
|
6
|
+
*
|
|
7
|
+
* Your agent holds its own private key. No custodian. No KYC.
|
|
8
|
+
*/
|
|
9
|
+
import type { Plugin } from '@elizaos/core';
|
|
10
|
+
import { createWallet } from '../index.js';
|
|
11
|
+
type AgentWallet = ReturnType<typeof createWallet>;
|
|
12
|
+
export interface AgentWalletPluginConfig {
|
|
13
|
+
/** Agent private key — stays in your environment, never transmitted */
|
|
14
|
+
privateKey: `0x${string}`;
|
|
15
|
+
/** Deployed AgentAccountV2 contract address */
|
|
16
|
+
accountAddress: `0x${string}`;
|
|
17
|
+
/** Chain to connect to (default: 'base') */
|
|
18
|
+
chain?: 'base' | 'base-sepolia' | 'ethereum' | 'arbitrum' | 'polygon' | 'etherlink';
|
|
19
|
+
/** Optional custom RPC URL */
|
|
20
|
+
rpcUrl?: string;
|
|
21
|
+
/** Optional daily x402 spend limit in USDC base units (default: 50 USDC = 50_000_000n) */
|
|
22
|
+
x402DailyLimit?: bigint;
|
|
23
|
+
}
|
|
2
24
|
/**
|
|
3
25
|
* Get or create the agent wallet singleton.
|
|
4
26
|
*/
|
|
5
|
-
export declare function getAgentWallet(config:
|
|
27
|
+
export declare function getAgentWallet(config: AgentWalletPluginConfig): AgentWallet;
|
|
6
28
|
/**
|
|
7
29
|
* Create an x402-enabled fetch function for the agent to pay APIs automatically.
|
|
8
30
|
*/
|
|
9
|
-
export declare function createAgentFetch(config:
|
|
31
|
+
export declare function createAgentFetch(config: AgentWalletPluginConfig): typeof fetch;
|
|
10
32
|
/**
|
|
11
33
|
* ElizaOS Plugin definition for agentwallet-sdk.
|
|
12
34
|
*
|
|
@@ -24,17 +46,7 @@ export declare function createAgentFetch(config: any): (input: any, init: any) =
|
|
|
24
46
|
* }
|
|
25
47
|
* ```
|
|
26
48
|
*/
|
|
27
|
-
declare const AgentWalletPlugin:
|
|
28
|
-
name: string;
|
|
29
|
-
description: string;
|
|
30
|
-
actions: never[];
|
|
31
|
-
providers: {
|
|
32
|
-
name: string;
|
|
33
|
-
description: string;
|
|
34
|
-
get(runtime: any): Promise<string>;
|
|
35
|
-
}[];
|
|
36
|
-
evaluators: never[];
|
|
37
|
-
};
|
|
49
|
+
declare const AgentWalletPlugin: Plugin;
|
|
38
50
|
export default AgentWalletPlugin;
|
|
39
51
|
export { AgentWalletPlugin };
|
|
40
52
|
//# sourceMappingURL=elizaos.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elizaos.d.ts","sourceRoot":"","sources":["../../src/plugins/elizaos.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"elizaos.d.ts","sourceRoot":"","sources":["../../src/plugins/elizaos.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EACL,YAAY,EAGb,MAAM,aAAa,CAAC;AAGrB,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AAInD,MAAM,WAAW,uBAAuB;IACtC,uEAAuE;IACvE,UAAU,EAAE,KAAK,MAAM,EAAE,CAAC;IAC1B,+CAA+C;IAC/C,cAAc,EAAE,KAAK,MAAM,EAAE,CAAC;IAC9B,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;IACpF,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0FAA0F;IAC1F,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAID;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,uBAAuB,GAAG,WAAW,CAuB3E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,gBAK/D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,QAAA,MAAM,iBAAiB,EAAE,MAiCxB,CAAC;AAEF,eAAe,iBAAiB,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
|
package/dist/plugins/elizaos.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
1
|
import { createWallet, createX402Fetch, } from '../index.js';
|
|
3
2
|
import { createWalletClient, http } from 'viem';
|
|
4
3
|
import { privateKeyToAccount } from 'viem/accounts';
|
|
@@ -87,5 +86,4 @@ const AgentWalletPlugin = {
|
|
|
87
86
|
};
|
|
88
87
|
export default AgentWalletPlugin;
|
|
89
88
|
export { AgentWalletPlugin };
|
|
90
|
-
//# sourceMappingURL=elizaos.js.map
|
|
91
89
|
//# sourceMappingURL=elizaos.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elizaos.js","sourceRoot":"","sources":["../../src/plugins/elizaos.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"elizaos.js","sourceRoot":"","sources":["../../src/plugins/elizaos.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,32 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SpendingPolicy — Programmable spending guardrails for AI agents.
|
|
3
|
+
*
|
|
4
|
+
* Beats PolicyLayer.com to market with:
|
|
5
|
+
* - MerchantAllowlist — allowlist-only merchant enforcement
|
|
6
|
+
* - RollingSpendCap — time-windowed spend limits
|
|
7
|
+
* - DraftThenApprove — human-in-the-loop for large transactions
|
|
8
|
+
* - AuditTrail — immutable local log of every payment attempt
|
|
9
|
+
* - FailClosed — policy errors always reject, never approve
|
|
10
|
+
*
|
|
11
|
+
* @module policy/SpendingPolicy
|
|
12
|
+
*/
|
|
13
|
+
/** A payment the agent wants to make. */
|
|
14
|
+
export interface PaymentIntent {
|
|
15
|
+
/** Merchant contract address or domain (e.g. "0xABC..." or "api.example.com") */
|
|
16
|
+
merchant: string;
|
|
17
|
+
/** Amount in the smallest token unit (e.g. USDC micro-cents = 6 decimals). Use number for JS safety in tests; real on-chain code passes BigInt via adapter. */
|
|
18
|
+
amount: number;
|
|
19
|
+
/** ISO-8601 timestamp string. Defaults to now if omitted. */
|
|
20
|
+
timestamp?: string;
|
|
21
|
+
/** Optional human-readable label */
|
|
22
|
+
description?: string;
|
|
23
|
+
}
|
|
24
|
+
export type PolicyStatus = 'approved' | 'rejected' | 'draft';
|
|
25
|
+
/** Result returned by SpendingPolicy.check(). */
|
|
26
|
+
export interface PolicyResult {
|
|
27
|
+
status: PolicyStatus;
|
|
28
|
+
reason?: string;
|
|
29
|
+
draftId?: string;
|
|
30
|
+
}
|
|
31
|
+
/** A queued draft transaction awaiting approval. */
|
|
32
|
+
export interface DraftEntry {
|
|
33
|
+
draftId: string;
|
|
34
|
+
payment: PaymentIntent;
|
|
35
|
+
queuedAt: string;
|
|
36
|
+
approved: boolean;
|
|
37
|
+
rejected: boolean;
|
|
38
|
+
}
|
|
39
|
+
/** Immutable record written to the audit log. */
|
|
40
|
+
export interface AuditEntry {
|
|
41
|
+
id: string;
|
|
42
|
+
timestamp: string;
|
|
43
|
+
merchant: string;
|
|
44
|
+
amount: number;
|
|
45
|
+
status: PolicyStatus;
|
|
46
|
+
reason?: string;
|
|
47
|
+
draftId?: string;
|
|
48
|
+
}
|
|
49
|
+
/** Configuration passed to SpendingPolicy constructor. */
|
|
50
|
+
export interface SpendingPolicyConfig {
|
|
51
|
+
/**
|
|
52
|
+
* MerchantAllowlist: list of allowed contract addresses or domains.
|
|
53
|
+
* If provided and non-empty, only these merchants are allowed.
|
|
54
|
+
* Pass an empty array [] to disable allowlist enforcement (allow all).
|
|
55
|
+
*/
|
|
56
|
+
merchantAllowlist?: string[];
|
|
57
|
+
/**
|
|
58
|
+
* RollingSpendCap: maximum cumulative spend in a rolling time window.
|
|
59
|
+
* Set to undefined to disable.
|
|
60
|
+
*/
|
|
61
|
+
rollingCap?: {
|
|
62
|
+
/** Max amount (same units as PaymentIntent.amount) */
|
|
63
|
+
maxAmount: number;
|
|
64
|
+
/** Window size in milliseconds (e.g. 86_400_000 for 24 h) */
|
|
65
|
+
windowMs: number;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* DraftThenApprove: payments above this threshold are placed in draft status
|
|
69
|
+
* for human (or another agent) approval rather than executed immediately.
|
|
70
|
+
* Set to undefined to disable.
|
|
71
|
+
*/
|
|
72
|
+
draftThreshold?: number;
|
|
73
|
+
}
|
|
1
74
|
export declare class SpendingPolicy {
|
|
2
|
-
|
|
75
|
+
private config;
|
|
76
|
+
private allowlist;
|
|
77
|
+
private spendWindow;
|
|
78
|
+
private auditLog;
|
|
79
|
+
private drafts;
|
|
80
|
+
constructor(config: SpendingPolicyConfig);
|
|
3
81
|
/**
|
|
4
82
|
* FailClosed: wraps the actual check logic so that ANY unhandled error
|
|
5
83
|
* produces a rejection rather than inadvertently approving a payment.
|
|
6
84
|
*/
|
|
7
|
-
check(payment:
|
|
8
|
-
status: string;
|
|
9
|
-
}>;
|
|
85
|
+
check(payment: PaymentIntent): Promise<PolicyResult>;
|
|
10
86
|
/**
|
|
11
87
|
* Write a payment attempt to the immutable audit log.
|
|
12
88
|
*/
|
|
13
|
-
log(payment:
|
|
89
|
+
log(payment: PaymentIntent, result: PolicyResult): Promise<void>;
|
|
14
90
|
/** Return a copy of the current merchant allowlist. */
|
|
15
|
-
getMerchantAllowlist():
|
|
91
|
+
getMerchantAllowlist(): string[];
|
|
16
92
|
/** Add a merchant address/domain to the allowlist at runtime. */
|
|
17
|
-
addMerchant(address:
|
|
93
|
+
addMerchant(address: string): void;
|
|
18
94
|
/** Return the full, immutable audit log (copy). */
|
|
19
|
-
getAuditLog():
|
|
95
|
+
getAuditLog(): AuditEntry[];
|
|
20
96
|
/** Approve a queued draft by its draftId. Returns false if not found. */
|
|
21
|
-
approveDraft(draftId:
|
|
97
|
+
approveDraft(draftId: string): boolean;
|
|
22
98
|
/** Reject a queued draft by its draftId. Returns false if not found. */
|
|
23
|
-
rejectDraft(draftId:
|
|
99
|
+
rejectDraft(draftId: string): boolean;
|
|
24
100
|
/** Return all pending (not yet approved or rejected) drafts. */
|
|
25
|
-
getPendingDrafts():
|
|
101
|
+
getPendingDrafts(): DraftEntry[];
|
|
26
102
|
/** Return all drafts. */
|
|
27
|
-
getAllDrafts():
|
|
28
|
-
_check
|
|
29
|
-
status: string;
|
|
30
|
-
}>;
|
|
103
|
+
getAllDrafts(): DraftEntry[];
|
|
104
|
+
private _check;
|
|
31
105
|
}
|
|
32
106
|
//# sourceMappingURL=SpendingPolicy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpendingPolicy.d.ts","sourceRoot":"","sources":["../../src/policy/SpendingPolicy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SpendingPolicy.d.ts","sourceRoot":"","sources":["../../src/policy/SpendingPolicy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,yCAAyC;AACzC,MAAM,WAAW,aAAa;IAC5B,iFAAiF;IACjF,QAAQ,EAAE,MAAM,CAAC;IACjB,+JAA+J;IAC/J,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;AAE7D,iDAAiD;AACjD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,oDAAoD;AACpD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,iDAAiD;AACjD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,0DAA0D;AAC1D,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE7B;;;OAGG;IACH,UAAU,CAAC,EAAE;QACX,sDAAsD;QACtD,SAAS,EAAE,MAAM,CAAC;QAClB,6DAA6D;QAC7D,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IAEF;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAWD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,WAAW,CAAwC;IAC3D,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,MAAM,CAA0B;gBAE5B,MAAM,EAAE,oBAAoB;IAYxC;;;OAGG;IACG,KAAK,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAW1D;;OAEG;IACG,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAatE,uDAAuD;IACvD,oBAAoB,IAAI,MAAM,EAAE;IAIhC,iEAAiE;IACjE,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIlC,mDAAmD;IACnD,WAAW,IAAI,UAAU,EAAE;IAM3B,yEAAyE;IACzE,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOtC,wEAAwE;IACxE,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOrC,gEAAgE;IAChE,gBAAgB,IAAI,UAAU,EAAE;IAMhC,yBAAyB;IACzB,YAAY,IAAI,UAAU,EAAE;YAMd,MAAM;CAmErB"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
1
|
/**
|
|
3
2
|
* SpendingPolicy — Programmable spending guardrails for AI agents.
|
|
4
3
|
*
|
|
@@ -153,5 +152,4 @@ export class SpendingPolicy {
|
|
|
153
152
|
return result;
|
|
154
153
|
}
|
|
155
154
|
}
|
|
156
|
-
//# sourceMappingURL=SpendingPolicy.js.map
|
|
157
155
|
//# sourceMappingURL=SpendingPolicy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpendingPolicy.js","sourceRoot":"","sources":["../../src/policy/SpendingPolicy.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"SpendingPolicy.js","sourceRoot":"","sources":["../../src/policy/SpendingPolicy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpendingPolicy.test.d.ts","sourceRoot":"","sources":["../../src/policy/SpendingPolicy.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { SpendingPolicy } from './SpendingPolicy.js';
|
|
3
|
+
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
4
|
+
function makePayment(overrides = {}) {
|
|
5
|
+
return {
|
|
6
|
+
merchant: '0xAllowedMerchant',
|
|
7
|
+
amount: 10,
|
|
8
|
+
...overrides,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
function makePolicy(config) {
|
|
12
|
+
return new SpendingPolicy(config);
|
|
13
|
+
}
|
|
14
|
+
// ─── MerchantAllowlist ────────────────────────────────────────────────────────
|
|
15
|
+
describe('MerchantAllowlist', () => {
|
|
16
|
+
it('allowlisted merchant passes', async () => {
|
|
17
|
+
const policy = makePolicy({ merchantAllowlist: ['0xallowedmerchant'] });
|
|
18
|
+
const result = await policy.check(makePayment({ merchant: '0xAllowedMerchant' }));
|
|
19
|
+
expect(result.status).toBe('approved');
|
|
20
|
+
});
|
|
21
|
+
it('non-allowlisted merchant is blocked', async () => {
|
|
22
|
+
const policy = makePolicy({ merchantAllowlist: ['0xallowedmerchant'] });
|
|
23
|
+
const result = await policy.check(makePayment({ merchant: '0xEvilMerchant' }));
|
|
24
|
+
expect(result.status).toBe('rejected');
|
|
25
|
+
expect(result.reason).toMatch(/not on the allowlist/i);
|
|
26
|
+
});
|
|
27
|
+
it('addMerchant allows previously blocked merchant', async () => {
|
|
28
|
+
const policy = makePolicy({ merchantAllowlist: ['0xallowedmerchant'] });
|
|
29
|
+
policy.addMerchant('0xNewMerchant');
|
|
30
|
+
const result = await policy.check(makePayment({ merchant: '0xNewMerchant' }));
|
|
31
|
+
expect(result.status).toBe('approved');
|
|
32
|
+
});
|
|
33
|
+
it('getMerchantAllowlist returns current allowlist', () => {
|
|
34
|
+
const policy = makePolicy({ merchantAllowlist: ['0xA', '0xB'] });
|
|
35
|
+
const list = policy.getMerchantAllowlist();
|
|
36
|
+
expect(list).toContain('0xa');
|
|
37
|
+
expect(list).toContain('0xb');
|
|
38
|
+
expect(list.length).toBe(2);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
// ─── RollingSpendCap ──────────────────────────────────────────────────────────
|
|
42
|
+
describe('RollingSpendCap', () => {
|
|
43
|
+
it('allows payment under the rolling cap', async () => {
|
|
44
|
+
const policy = makePolicy({
|
|
45
|
+
rollingCap: { maxAmount: 100, windowMs: 86400000 },
|
|
46
|
+
});
|
|
47
|
+
const result = await policy.check(makePayment({ amount: 50 }));
|
|
48
|
+
expect(result.status).toBe('approved');
|
|
49
|
+
});
|
|
50
|
+
it('blocks payment that would exceed the rolling cap', async () => {
|
|
51
|
+
const policy = makePolicy({
|
|
52
|
+
rollingCap: { maxAmount: 100, windowMs: 86400000 },
|
|
53
|
+
});
|
|
54
|
+
// First spend: 80
|
|
55
|
+
await policy.check(makePayment({ amount: 80 }));
|
|
56
|
+
// Second spend: 30 — total 110 > 100
|
|
57
|
+
const result = await policy.check(makePayment({ amount: 30 }));
|
|
58
|
+
expect(result.status).toBe('rejected');
|
|
59
|
+
expect(result.reason).toMatch(/rolling spend cap exceeded/i);
|
|
60
|
+
});
|
|
61
|
+
it('allows payment exactly at the rolling cap', async () => {
|
|
62
|
+
const policy = makePolicy({
|
|
63
|
+
rollingCap: { maxAmount: 100, windowMs: 86400000 },
|
|
64
|
+
});
|
|
65
|
+
await policy.check(makePayment({ amount: 50 }));
|
|
66
|
+
const result = await policy.check(makePayment({ amount: 50 }));
|
|
67
|
+
expect(result.status).toBe('approved');
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
// ─── DraftThenApprove ─────────────────────────────────────────────────────────
|
|
71
|
+
describe('DraftThenApprove', () => {
|
|
72
|
+
it('queues payment at or above draft threshold', async () => {
|
|
73
|
+
const policy = makePolicy({ draftThreshold: 500 });
|
|
74
|
+
const result = await policy.check(makePayment({ amount: 500 }));
|
|
75
|
+
expect(result.status).toBe('draft');
|
|
76
|
+
expect(result.draftId).toBeTruthy();
|
|
77
|
+
});
|
|
78
|
+
it('approves payment below draft threshold immediately', async () => {
|
|
79
|
+
const policy = makePolicy({ draftThreshold: 500 });
|
|
80
|
+
const result = await policy.check(makePayment({ amount: 499 }));
|
|
81
|
+
expect(result.status).toBe('approved');
|
|
82
|
+
});
|
|
83
|
+
it('queued draft appears in getPendingDrafts()', async () => {
|
|
84
|
+
const policy = makePolicy({ draftThreshold: 100 });
|
|
85
|
+
const result = await policy.check(makePayment({ amount: 200 }));
|
|
86
|
+
const pending = policy.getPendingDrafts();
|
|
87
|
+
expect(pending.length).toBe(1);
|
|
88
|
+
expect(pending[0].draftId).toBe(result.draftId);
|
|
89
|
+
});
|
|
90
|
+
it('approveDraft marks draft approved and removes from pending', async () => {
|
|
91
|
+
const policy = makePolicy({ draftThreshold: 100 });
|
|
92
|
+
const result = await policy.check(makePayment({ amount: 200 }));
|
|
93
|
+
const draftId = result.draftId;
|
|
94
|
+
expect(policy.approveDraft(draftId)).toBe(true);
|
|
95
|
+
expect(policy.getPendingDrafts().length).toBe(0);
|
|
96
|
+
const draft = policy.getAllDrafts().find((d) => d.draftId === draftId);
|
|
97
|
+
expect(draft.approved).toBe(true);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
// ─── AuditTrail ───────────────────────────────────────────────────────────────
|
|
101
|
+
describe('AuditTrail', () => {
|
|
102
|
+
it('creates an audit entry for every payment attempt', async () => {
|
|
103
|
+
const policy = makePolicy({});
|
|
104
|
+
await policy.check(makePayment({ amount: 10 }));
|
|
105
|
+
await policy.check(makePayment({ amount: 20 }));
|
|
106
|
+
const log = policy.getAuditLog();
|
|
107
|
+
expect(log.length).toBe(2);
|
|
108
|
+
});
|
|
109
|
+
it('audit entry records merchant, amount, and status', async () => {
|
|
110
|
+
const policy = makePolicy({ merchantAllowlist: ['0xgood'] });
|
|
111
|
+
await policy.check(makePayment({ merchant: '0xBad', amount: 99 }));
|
|
112
|
+
const entry = policy.getAuditLog()[0];
|
|
113
|
+
expect(entry.merchant).toBe('0xBad');
|
|
114
|
+
expect(entry.amount).toBe(99);
|
|
115
|
+
expect(entry.status).toBe('rejected');
|
|
116
|
+
});
|
|
117
|
+
it('audit log is append-only (getAuditLog returns copy)', async () => {
|
|
118
|
+
const policy = makePolicy({});
|
|
119
|
+
await policy.check(makePayment());
|
|
120
|
+
const log = policy.getAuditLog();
|
|
121
|
+
log.push({ id: 'tamper', timestamp: '', merchant: '', amount: 0, status: 'approved' });
|
|
122
|
+
// Original log should still have only 1 entry
|
|
123
|
+
expect(policy.getAuditLog().length).toBe(1);
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
// ─── FailClosed ───────────────────────────────────────────────────────────────
|
|
127
|
+
describe('FailClosed', () => {
|
|
128
|
+
it('rejects payment when policy engine throws an error', async () => {
|
|
129
|
+
const policy = makePolicy({ merchantAllowlist: ['0xgood'] });
|
|
130
|
+
// Corrupt internal state to trigger an error inside _check
|
|
131
|
+
// We spy on the private method by monkey-patching to throw
|
|
132
|
+
const original = policy._check.bind(policy);
|
|
133
|
+
policy._check = async () => {
|
|
134
|
+
throw new Error('Simulated internal policy crash');
|
|
135
|
+
};
|
|
136
|
+
const result = await policy.check(makePayment());
|
|
137
|
+
expect(result.status).toBe('rejected');
|
|
138
|
+
expect(result.reason).toMatch(/fail-closed/i);
|
|
139
|
+
// Restore
|
|
140
|
+
policy._check = original;
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
//# sourceMappingURL=SpendingPolicy.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpendingPolicy.test.js","sourceRoot":"","sources":["../../src/policy/SpendingPolicy.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { SettlementVerifier } from './verifier.js';
|
|
2
|
+
export type { SettlementVerifierConfig, SettlementStatus, SettlementResult, BridgeSettlementResult, BridgeSettlementStatus, PaymentSettlementResult, } from './types.js';
|
|
3
|
+
export { SETTLEMENT_ALCHEMY_NETWORKS, SETTLEMENT_PUBLIC_RPCS, CIRCLE_ATTESTATION_API, ERC20_TRANSFER_TOPIC, SOLANA_RPC_URL, } from './types.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/settlement/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,YAAY,EACV,wBAAwB,EACxB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,GACf,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/settlement/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AASnD,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,GACf,MAAM,YAAY,CAAC"}
|