@terkoizmy/intent-sdk 1.0.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/LICENSE +21 -0
- package/README.md +258 -0
- package/dist/config/chains.d.ts +25 -0
- package/dist/config/chains.d.ts.map +1 -0
- package/dist/config/chains.js +85 -0
- package/dist/config/chains.js.map +1 -0
- package/dist/config/default.d.ts +39 -0
- package/dist/config/default.d.ts.map +1 -0
- package/dist/config/default.js +46 -0
- package/dist/config/default.js.map +1 -0
- package/dist/config/testnets.d.ts +31 -0
- package/dist/config/testnets.d.ts.map +1 -0
- package/dist/config/testnets.js +99 -0
- package/dist/config/testnets.js.map +1 -0
- package/dist/errors/inventory-errors.d.ts +31 -0
- package/dist/errors/inventory-errors.d.ts.map +1 -0
- package/dist/errors/inventory-errors.js +45 -0
- package/dist/errors/inventory-errors.js.map +1 -0
- package/dist/errors/settlement-errors.d.ts +27 -0
- package/dist/errors/settlement-errors.d.ts.map +1 -0
- package/dist/errors/settlement-errors.js +39 -0
- package/dist/errors/settlement-errors.js.map +1 -0
- package/dist/errors/solver-errors.d.ts +45 -0
- package/dist/errors/solver-errors.d.ts.map +1 -0
- package/dist/errors/solver-errors.js +66 -0
- package/dist/errors/solver-errors.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/parser/classifiers/intent-classifier.d.ts +40 -0
- package/dist/parser/classifiers/intent-classifier.d.ts.map +1 -0
- package/dist/parser/classifiers/intent-classifier.js +72 -0
- package/dist/parser/classifiers/intent-classifier.js.map +1 -0
- package/dist/parser/extractors/action.d.ts +32 -0
- package/dist/parser/extractors/action.d.ts.map +1 -0
- package/dist/parser/extractors/action.js +72 -0
- package/dist/parser/extractors/action.js.map +1 -0
- package/dist/parser/extractors/amount.d.ts +39 -0
- package/dist/parser/extractors/amount.d.ts.map +1 -0
- package/dist/parser/extractors/amount.js +113 -0
- package/dist/parser/extractors/amount.js.map +1 -0
- package/dist/parser/extractors/constraints.d.ts +37 -0
- package/dist/parser/extractors/constraints.d.ts.map +1 -0
- package/dist/parser/extractors/constraints.js +119 -0
- package/dist/parser/extractors/constraints.js.map +1 -0
- package/dist/parser/extractors/index.d.ts +5 -0
- package/dist/parser/extractors/index.d.ts.map +1 -0
- package/dist/parser/extractors/index.js +5 -0
- package/dist/parser/extractors/index.js.map +1 -0
- package/dist/parser/extractors/token.d.ts +24 -0
- package/dist/parser/extractors/token.d.ts.map +1 -0
- package/dist/parser/extractors/token.js +124 -0
- package/dist/parser/extractors/token.js.map +1 -0
- package/dist/parser/index.d.ts +125 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +293 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/template/bridge.d.ts +37 -0
- package/dist/parser/template/bridge.d.ts.map +1 -0
- package/dist/parser/template/bridge.js +80 -0
- package/dist/parser/template/bridge.js.map +1 -0
- package/dist/parser/template/claim.d.ts +15 -0
- package/dist/parser/template/claim.d.ts.map +1 -0
- package/dist/parser/template/claim.js +36 -0
- package/dist/parser/template/claim.js.map +1 -0
- package/dist/parser/template/index.d.ts +28 -0
- package/dist/parser/template/index.d.ts.map +1 -0
- package/dist/parser/template/index.js +50 -0
- package/dist/parser/template/index.js.map +1 -0
- package/dist/parser/template/nft.d.ts +3 -0
- package/dist/parser/template/nft.d.ts.map +1 -0
- package/dist/parser/template/nft.js +19 -0
- package/dist/parser/template/nft.js.map +1 -0
- package/dist/parser/template/send.d.ts +24 -0
- package/dist/parser/template/send.d.ts.map +1 -0
- package/dist/parser/template/send.js +61 -0
- package/dist/parser/template/send.js.map +1 -0
- package/dist/parser/template/swap.d.ts +3 -0
- package/dist/parser/template/swap.d.ts.map +1 -0
- package/dist/parser/template/swap.js +21 -0
- package/dist/parser/template/swap.js.map +1 -0
- package/dist/parser/template/unknown.d.ts +3 -0
- package/dist/parser/template/unknown.d.ts.map +1 -0
- package/dist/parser/template/unknown.js +11 -0
- package/dist/parser/template/unknown.js.map +1 -0
- package/dist/parser/template/yield.d.ts +3 -0
- package/dist/parser/template/yield.d.ts.map +1 -0
- package/dist/parser/template/yield.js +25 -0
- package/dist/parser/template/yield.js.map +1 -0
- package/dist/parser/utils/normalize.d.ts +41 -0
- package/dist/parser/utils/normalize.d.ts.map +1 -0
- package/dist/parser/utils/normalize.js +71 -0
- package/dist/parser/utils/normalize.js.map +1 -0
- package/dist/parser/utils/parser-helpers.d.ts +20 -0
- package/dist/parser/utils/parser-helpers.d.ts.map +1 -0
- package/dist/parser/utils/parser-helpers.js +282 -0
- package/dist/parser/utils/parser-helpers.js.map +1 -0
- package/dist/parser/validators/schema.d.ts +14 -0
- package/dist/parser/validators/schema.d.ts.map +1 -0
- package/dist/parser/validators/schema.js +81 -0
- package/dist/parser/validators/schema.js.map +1 -0
- package/dist/sdk-factory.d.ts +55 -0
- package/dist/sdk-factory.d.ts.map +1 -0
- package/dist/sdk-factory.js +49 -0
- package/dist/sdk-factory.js.map +1 -0
- package/dist/services/token-resolver.d.ts +142 -0
- package/dist/services/token-resolver.d.ts.map +1 -0
- package/dist/services/token-resolver.js +254 -0
- package/dist/services/token-resolver.js.map +1 -0
- package/dist/shared/chain-registry/chain-names.d.ts +22 -0
- package/dist/shared/chain-registry/chain-names.d.ts.map +1 -0
- package/dist/shared/chain-registry/chain-names.js +49 -0
- package/dist/shared/chain-registry/chain-names.js.map +1 -0
- package/dist/shared/chain-registry/configs/arbitrum-sepolia.d.ts +9 -0
- package/dist/shared/chain-registry/configs/arbitrum-sepolia.d.ts.map +1 -0
- package/dist/shared/chain-registry/configs/arbitrum-sepolia.js +9 -0
- package/dist/shared/chain-registry/configs/arbitrum-sepolia.js.map +1 -0
- package/dist/shared/chain-registry/configs/base-sepolia.d.ts +9 -0
- package/dist/shared/chain-registry/configs/base-sepolia.d.ts.map +1 -0
- package/dist/shared/chain-registry/configs/base-sepolia.js +9 -0
- package/dist/shared/chain-registry/configs/base-sepolia.js.map +1 -0
- package/dist/shared/chain-registry/configs/ethereum.d.ts +7 -0
- package/dist/shared/chain-registry/configs/ethereum.d.ts.map +1 -0
- package/dist/shared/chain-registry/configs/ethereum.js +7 -0
- package/dist/shared/chain-registry/configs/ethereum.js.map +1 -0
- package/dist/shared/chain-registry/configs/polygon.d.ts +7 -0
- package/dist/shared/chain-registry/configs/polygon.d.ts.map +1 -0
- package/dist/shared/chain-registry/configs/polygon.js +7 -0
- package/dist/shared/chain-registry/configs/polygon.js.map +1 -0
- package/dist/shared/chain-registry/configs/sepolia.d.ts +9 -0
- package/dist/shared/chain-registry/configs/sepolia.d.ts.map +1 -0
- package/dist/shared/chain-registry/configs/sepolia.js +9 -0
- package/dist/shared/chain-registry/configs/sepolia.js.map +1 -0
- package/dist/shared/chain-registry/configs/unichain-sepolia.d.ts +9 -0
- package/dist/shared/chain-registry/configs/unichain-sepolia.d.ts.map +1 -0
- package/dist/shared/chain-registry/configs/unichain-sepolia.js +9 -0
- package/dist/shared/chain-registry/configs/unichain-sepolia.js.map +1 -0
- package/dist/shared/chain-registry/registry.d.ts +50 -0
- package/dist/shared/chain-registry/registry.d.ts.map +1 -0
- package/dist/shared/chain-registry/registry.js +72 -0
- package/dist/shared/chain-registry/registry.js.map +1 -0
- package/dist/shared/rpc/provider-manager.d.ts +111 -0
- package/dist/shared/rpc/provider-manager.d.ts.map +1 -0
- package/dist/shared/rpc/provider-manager.js +116 -0
- package/dist/shared/rpc/provider-manager.js.map +1 -0
- package/dist/shared/rpc/viem-provider.d.ts +78 -0
- package/dist/shared/rpc/viem-provider.d.ts.map +1 -0
- package/dist/shared/rpc/viem-provider.js +187 -0
- package/dist/shared/rpc/viem-provider.js.map +1 -0
- package/dist/shared/token-registry/enrichment.d.ts +48 -0
- package/dist/shared/token-registry/enrichment.d.ts.map +1 -0
- package/dist/shared/token-registry/enrichment.js +69 -0
- package/dist/shared/token-registry/enrichment.js.map +1 -0
- package/dist/shared/token-registry/registry.d.ts +119 -0
- package/dist/shared/token-registry/registry.d.ts.map +1 -0
- package/dist/shared/token-registry/registry.js +200 -0
- package/dist/shared/token-registry/registry.js.map +1 -0
- package/dist/shared/utils/erc20-utils.d.ts +24 -0
- package/dist/shared/utils/erc20-utils.d.ts.map +1 -0
- package/dist/shared/utils/erc20-utils.js +31 -0
- package/dist/shared/utils/erc20-utils.js.map +1 -0
- package/dist/shared/utils/retry.d.ts +57 -0
- package/dist/shared/utils/retry.d.ts.map +1 -0
- package/dist/shared/utils/retry.js +104 -0
- package/dist/shared/utils/retry.js.map +1 -0
- package/dist/shared/wallet-manager/viem-signer.d.ts +68 -0
- package/dist/shared/wallet-manager/viem-signer.d.ts.map +1 -0
- package/dist/shared/wallet-manager/viem-signer.js +116 -0
- package/dist/shared/wallet-manager/viem-signer.js.map +1 -0
- package/dist/shared/wallet-manager/wallet-manager.d.ts +96 -0
- package/dist/shared/wallet-manager/wallet-manager.d.ts.map +1 -0
- package/dist/shared/wallet-manager/wallet-manager.js +104 -0
- package/dist/shared/wallet-manager/wallet-manager.js.map +1 -0
- package/dist/solver/agent/agent-config.d.ts +62 -0
- package/dist/solver/agent/agent-config.d.ts.map +1 -0
- package/dist/solver/agent/agent-config.js +59 -0
- package/dist/solver/agent/agent-config.js.map +1 -0
- package/dist/solver/agent/index.d.ts +6 -0
- package/dist/solver/agent/index.d.ts.map +1 -0
- package/dist/solver/agent/index.js +6 -0
- package/dist/solver/agent/index.js.map +1 -0
- package/dist/solver/agent/liquidity-agent.d.ts +118 -0
- package/dist/solver/agent/liquidity-agent.d.ts.map +1 -0
- package/dist/solver/agent/liquidity-agent.js +285 -0
- package/dist/solver/agent/liquidity-agent.js.map +1 -0
- package/dist/solver/contracts/intent-settlement/index.d.ts +2 -0
- package/dist/solver/contracts/intent-settlement/index.d.ts.map +1 -0
- package/dist/solver/contracts/intent-settlement/index.js +2 -0
- package/dist/solver/contracts/intent-settlement/index.js.map +1 -0
- package/dist/solver/contracts/intent-settlement/intent-settlement.d.ts +22 -0
- package/dist/solver/contracts/intent-settlement/intent-settlement.d.ts.map +1 -0
- package/dist/solver/contracts/intent-settlement/intent-settlement.js +58 -0
- package/dist/solver/contracts/intent-settlement/intent-settlement.js.map +1 -0
- package/dist/solver/contracts/intent-settlement/viem-settlement-contract.d.ts +226 -0
- package/dist/solver/contracts/intent-settlement/viem-settlement-contract.d.ts.map +1 -0
- package/dist/solver/contracts/intent-settlement/viem-settlement-contract.js +204 -0
- package/dist/solver/contracts/intent-settlement/viem-settlement-contract.js.map +1 -0
- package/dist/solver/index.d.ts +87 -0
- package/dist/solver/index.d.ts.map +1 -0
- package/dist/solver/index.js +167 -0
- package/dist/solver/index.js.map +1 -0
- package/dist/solver/inventory/index.d.ts +7 -0
- package/dist/solver/inventory/index.d.ts.map +1 -0
- package/dist/solver/inventory/index.js +7 -0
- package/dist/solver/inventory/index.js.map +1 -0
- package/dist/solver/inventory/inventory-manager.d.ts +135 -0
- package/dist/solver/inventory/inventory-manager.d.ts.map +1 -0
- package/dist/solver/inventory/inventory-manager.js +323 -0
- package/dist/solver/inventory/inventory-manager.js.map +1 -0
- package/dist/solver/inventory/inventory-monitor.d.ts +72 -0
- package/dist/solver/inventory/inventory-monitor.d.ts.map +1 -0
- package/dist/solver/inventory/inventory-monitor.js +123 -0
- package/dist/solver/inventory/inventory-monitor.js.map +1 -0
- package/dist/solver/inventory/rebalancer.d.ts +78 -0
- package/dist/solver/inventory/rebalancer.d.ts.map +1 -0
- package/dist/solver/inventory/rebalancer.js +210 -0
- package/dist/solver/inventory/rebalancer.js.map +1 -0
- package/dist/solver/mempool/index.d.ts +8 -0
- package/dist/solver/mempool/index.d.ts.map +1 -0
- package/dist/solver/mempool/index.js +8 -0
- package/dist/solver/mempool/index.js.map +1 -0
- package/dist/solver/mempool/intent-filter.d.ts +49 -0
- package/dist/solver/mempool/intent-filter.d.ts.map +1 -0
- package/dist/solver/mempool/intent-filter.js +75 -0
- package/dist/solver/mempool/intent-filter.js.map +1 -0
- package/dist/solver/mempool/mempool-client.d.ts +105 -0
- package/dist/solver/mempool/mempool-client.d.ts.map +1 -0
- package/dist/solver/mempool/mempool-client.js +161 -0
- package/dist/solver/mempool/mempool-client.js.map +1 -0
- package/dist/solver/mempool/mempool-monitor.d.ts +71 -0
- package/dist/solver/mempool/mempool-monitor.d.ts.map +1 -0
- package/dist/solver/mempool/mempool-monitor.js +127 -0
- package/dist/solver/mempool/mempool-monitor.js.map +1 -0
- package/dist/solver/mempool/solution-submitter.d.ts +41 -0
- package/dist/solver/mempool/solution-submitter.d.ts.map +1 -0
- package/dist/solver/mempool/solution-submitter.js +71 -0
- package/dist/solver/mempool/solution-submitter.js.map +1 -0
- package/dist/solver/monitoring/alert-manager.d.ts +43 -0
- package/dist/solver/monitoring/alert-manager.d.ts.map +1 -0
- package/dist/solver/monitoring/alert-manager.js +69 -0
- package/dist/solver/monitoring/alert-manager.js.map +1 -0
- package/dist/solver/monitoring/health-checker.d.ts +53 -0
- package/dist/solver/monitoring/health-checker.d.ts.map +1 -0
- package/dist/solver/monitoring/health-checker.js +94 -0
- package/dist/solver/monitoring/health-checker.js.map +1 -0
- package/dist/solver/monitoring/index.d.ts +7 -0
- package/dist/solver/monitoring/index.d.ts.map +1 -0
- package/dist/solver/monitoring/index.js +7 -0
- package/dist/solver/monitoring/index.js.map +1 -0
- package/dist/solver/monitoring/profit-tracker.d.ts +47 -0
- package/dist/solver/monitoring/profit-tracker.d.ts.map +1 -0
- package/dist/solver/monitoring/profit-tracker.js +112 -0
- package/dist/solver/monitoring/profit-tracker.js.map +1 -0
- package/dist/solver/pricing/dynamic-pricing.d.ts +86 -0
- package/dist/solver/pricing/dynamic-pricing.d.ts.map +1 -0
- package/dist/solver/pricing/dynamic-pricing.js +189 -0
- package/dist/solver/pricing/dynamic-pricing.js.map +1 -0
- package/dist/solver/pricing/fee-calculator.d.ts +101 -0
- package/dist/solver/pricing/fee-calculator.d.ts.map +1 -0
- package/dist/solver/pricing/fee-calculator.js +149 -0
- package/dist/solver/pricing/fee-calculator.js.map +1 -0
- package/dist/solver/pricing/index.d.ts +7 -0
- package/dist/solver/pricing/index.d.ts.map +1 -0
- package/dist/solver/pricing/index.js +7 -0
- package/dist/solver/pricing/index.js.map +1 -0
- package/dist/solver/pricing/slippage-capture.d.ts +47 -0
- package/dist/solver/pricing/slippage-capture.d.ts.map +1 -0
- package/dist/solver/pricing/slippage-capture.js +63 -0
- package/dist/solver/pricing/slippage-capture.js.map +1 -0
- package/dist/solver/protocols/aggregators/lifi.d.ts +109 -0
- package/dist/solver/protocols/aggregators/lifi.d.ts.map +1 -0
- package/dist/solver/protocols/aggregators/lifi.js +110 -0
- package/dist/solver/protocols/aggregators/lifi.js.map +1 -0
- package/dist/solver/protocols/aggregators/swing.d.ts +67 -0
- package/dist/solver/protocols/aggregators/swing.d.ts.map +1 -0
- package/dist/solver/protocols/aggregators/swing.js +212 -0
- package/dist/solver/protocols/aggregators/swing.js.map +1 -0
- package/dist/solver/protocols/base-protocol.d.ts +42 -0
- package/dist/solver/protocols/base-protocol.d.ts.map +1 -0
- package/dist/solver/protocols/base-protocol.js +16 -0
- package/dist/solver/protocols/base-protocol.js.map +1 -0
- package/dist/solver/protocols/index.d.ts +10 -0
- package/dist/solver/protocols/index.d.ts.map +1 -0
- package/dist/solver/protocols/index.js +10 -0
- package/dist/solver/protocols/index.js.map +1 -0
- package/dist/solver/protocols/lending/aave.d.ts +51 -0
- package/dist/solver/protocols/lending/aave.d.ts.map +1 -0
- package/dist/solver/protocols/lending/aave.js +172 -0
- package/dist/solver/protocols/lending/aave.js.map +1 -0
- package/dist/solver/protocols/protocol-registry.d.ts +28 -0
- package/dist/solver/protocols/protocol-registry.d.ts.map +1 -0
- package/dist/solver/protocols/protocol-registry.js +40 -0
- package/dist/solver/protocols/protocol-registry.js.map +1 -0
- package/dist/solver/settlement/index.d.ts +7 -0
- package/dist/solver/settlement/index.d.ts.map +1 -0
- package/dist/solver/settlement/index.js +7 -0
- package/dist/solver/settlement/index.js.map +1 -0
- package/dist/solver/settlement/live-settlement-manager.d.ts +62 -0
- package/dist/solver/settlement/live-settlement-manager.d.ts.map +1 -0
- package/dist/solver/settlement/live-settlement-manager.js +68 -0
- package/dist/solver/settlement/live-settlement-manager.js.map +1 -0
- package/dist/solver/settlement/proof-generator.d.ts +48 -0
- package/dist/solver/settlement/proof-generator.d.ts.map +1 -0
- package/dist/solver/settlement/proof-generator.js +100 -0
- package/dist/solver/settlement/proof-generator.js.map +1 -0
- package/dist/solver/settlement/proof-verifier.d.ts +31 -0
- package/dist/solver/settlement/proof-verifier.d.ts.map +1 -0
- package/dist/solver/settlement/proof-verifier.js +46 -0
- package/dist/solver/settlement/proof-verifier.js.map +1 -0
- package/dist/solver/settlement/settlement-manager.d.ts +97 -0
- package/dist/solver/settlement/settlement-manager.d.ts.map +1 -0
- package/dist/solver/settlement/settlement-manager.js +220 -0
- package/dist/solver/settlement/settlement-manager.js.map +1 -0
- package/dist/solver/types/agent.d.ts +92 -0
- package/dist/solver/types/agent.d.ts.map +1 -0
- package/dist/solver/types/agent.js +8 -0
- package/dist/solver/types/agent.js.map +1 -0
- package/dist/solver/types/execution.d.ts +70 -0
- package/dist/solver/types/execution.d.ts.map +1 -0
- package/dist/solver/types/execution.js +7 -0
- package/dist/solver/types/execution.js.map +1 -0
- package/dist/solver/types/index.d.ts +13 -0
- package/dist/solver/types/index.d.ts.map +1 -0
- package/dist/solver/types/index.js +13 -0
- package/dist/solver/types/index.js.map +1 -0
- package/dist/solver/types/intent.d.ts +82 -0
- package/dist/solver/types/intent.d.ts.map +1 -0
- package/dist/solver/types/intent.js +33 -0
- package/dist/solver/types/intent.js.map +1 -0
- package/dist/solver/types/inventory.d.ts +83 -0
- package/dist/solver/types/inventory.d.ts.map +1 -0
- package/dist/solver/types/inventory.js +8 -0
- package/dist/solver/types/inventory.js.map +1 -0
- package/dist/solver/types/pricing.d.ts +59 -0
- package/dist/solver/types/pricing.d.ts.map +1 -0
- package/dist/solver/types/pricing.js +8 -0
- package/dist/solver/types/pricing.js.map +1 -0
- package/dist/solver/types/settlement.d.ts +98 -0
- package/dist/solver/types/settlement.d.ts.map +1 -0
- package/dist/solver/types/settlement.js +9 -0
- package/dist/solver/types/settlement.js.map +1 -0
- package/dist/types/chain.d.ts +66 -0
- package/dist/types/chain.d.ts.map +1 -0
- package/dist/types/chain.js +7 -0
- package/dist/types/chain.js.map +1 -0
- package/dist/types/common.d.ts +44 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +8 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/entities.d.ts +61 -0
- package/dist/types/entities.d.ts.map +1 -0
- package/dist/types/entities.js +2 -0
- package/dist/types/entities.js.map +1 -0
- package/dist/types/index.d.ts +44 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/intent.d.ts +70 -0
- package/dist/types/intent.d.ts.map +1 -0
- package/dist/types/intent.js +2 -0
- package/dist/types/intent.js.map +1 -0
- package/dist/types/templates.d.ts +18 -0
- package/dist/types/templates.d.ts.map +1 -0
- package/dist/types/templates.js +2 -0
- package/dist/types/templates.js.map +1 -0
- package/dist/types/token.d.ts +132 -0
- package/dist/types/token.d.ts.map +1 -0
- package/dist/types/token.js +8 -0
- package/dist/types/token.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mempool Monitor — Phase G
|
|
3
|
+
*
|
|
4
|
+
* The main orchestrator of the mempool integration pipeline.
|
|
5
|
+
* Listens for intents, filters them, solves viable ones via LiquidityAgent,
|
|
6
|
+
* and submits results back to the mempool.
|
|
7
|
+
*
|
|
8
|
+
* Pipeline:
|
|
9
|
+
* new_intent event → IntentFilter.shouldSolve() → LiquidityAgent.solve()
|
|
10
|
+
* → SolutionSubmitter.submit()
|
|
11
|
+
*
|
|
12
|
+
* Stats tracking:
|
|
13
|
+
* - received: total intents from mempool
|
|
14
|
+
* - filtered: intents passing shouldSolve (attempted)
|
|
15
|
+
* - solved: successfully completed solves
|
|
16
|
+
* - failed: solve attempts that returned success=false
|
|
17
|
+
*
|
|
18
|
+
* Used by: LiquidityAgent.start() (Phase K wiring)
|
|
19
|
+
*/
|
|
20
|
+
import type { LiquidityAgent } from "../agent/liquidity-agent";
|
|
21
|
+
import type { MempoolClient } from "./mempool-client";
|
|
22
|
+
import type { IntentFilter } from "./intent-filter";
|
|
23
|
+
import type { SolutionSubmitter } from "./solution-submitter";
|
|
24
|
+
export interface MempoolStats {
|
|
25
|
+
/** Total intents received from mempool */
|
|
26
|
+
received: number;
|
|
27
|
+
/** Intents that passed shouldSolve (were attempted) */
|
|
28
|
+
filtered: number;
|
|
29
|
+
/** Intents successfully solved */
|
|
30
|
+
solved: number;
|
|
31
|
+
/** Solve attempts that failed */
|
|
32
|
+
failed: number;
|
|
33
|
+
}
|
|
34
|
+
export declare class MempoolMonitor {
|
|
35
|
+
private readonly client;
|
|
36
|
+
private readonly filter;
|
|
37
|
+
private readonly agent;
|
|
38
|
+
private readonly submitter;
|
|
39
|
+
private running;
|
|
40
|
+
private stats;
|
|
41
|
+
/** Bound handler saved for proper off() unregistration */
|
|
42
|
+
private boundIntentHandler;
|
|
43
|
+
constructor(client: MempoolClient, filter: IntentFilter, agent: LiquidityAgent, submitter: SolutionSubmitter);
|
|
44
|
+
/**
|
|
45
|
+
* Start listening to mempool intent events.
|
|
46
|
+
*
|
|
47
|
+
* Attaches "new_intent" listener on the client.
|
|
48
|
+
* Also listens for "intent_solved" to update dedup cache.
|
|
49
|
+
*/
|
|
50
|
+
start(): void;
|
|
51
|
+
/**
|
|
52
|
+
* Stop listening and clean up event handlers.
|
|
53
|
+
*/
|
|
54
|
+
stop(): void;
|
|
55
|
+
/**
|
|
56
|
+
* Get current processing stats.
|
|
57
|
+
*
|
|
58
|
+
* @returns Snapshot of received/filtered/solved/failed counters
|
|
59
|
+
*/
|
|
60
|
+
getStats(): MempoolStats;
|
|
61
|
+
/** Whether the monitor is currently listening */
|
|
62
|
+
isRunning(): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Process a single incoming intent through the full pipeline.
|
|
65
|
+
*
|
|
66
|
+
* Errors within the solve pipeline are caught here so that
|
|
67
|
+
* one bad intent doesn't crash the monitor loop.
|
|
68
|
+
*/
|
|
69
|
+
private handleIntent;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=mempool-monitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mempool-monitor.d.ts","sourceRoot":"","sources":["../../../src/solver/mempool/mempool-monitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAM9D,MAAM,WAAW,YAAY;IACzB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;CAClB;AAMD,qBAAa,cAAc;IAanB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAf9B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAKX;IAEF,0DAA0D;IAC1D,OAAO,CAAC,kBAAkB,CAAiC;gBAGtC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,iBAAiB;IAYjD;;;;;OAKG;IACH,KAAK,IAAI,IAAI;IAYb;;OAEG;IACH,IAAI,IAAI,IAAI;IAUZ;;;;OAIG;IACH,QAAQ,IAAI,YAAY;IAIxB,iDAAiD;IACjD,SAAS,IAAI,OAAO;IAQpB;;;;;OAKG;YACW,YAAY;CA+B7B"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mempool Monitor — Phase G
|
|
3
|
+
*
|
|
4
|
+
* The main orchestrator of the mempool integration pipeline.
|
|
5
|
+
* Listens for intents, filters them, solves viable ones via LiquidityAgent,
|
|
6
|
+
* and submits results back to the mempool.
|
|
7
|
+
*
|
|
8
|
+
* Pipeline:
|
|
9
|
+
* new_intent event → IntentFilter.shouldSolve() → LiquidityAgent.solve()
|
|
10
|
+
* → SolutionSubmitter.submit()
|
|
11
|
+
*
|
|
12
|
+
* Stats tracking:
|
|
13
|
+
* - received: total intents from mempool
|
|
14
|
+
* - filtered: intents passing shouldSolve (attempted)
|
|
15
|
+
* - solved: successfully completed solves
|
|
16
|
+
* - failed: solve attempts that returned success=false
|
|
17
|
+
*
|
|
18
|
+
* Used by: LiquidityAgent.start() (Phase K wiring)
|
|
19
|
+
*/
|
|
20
|
+
// ─────────────────────────────────────────────
|
|
21
|
+
// MempoolMonitor
|
|
22
|
+
// ─────────────────────────────────────────────
|
|
23
|
+
export class MempoolMonitor {
|
|
24
|
+
client;
|
|
25
|
+
filter;
|
|
26
|
+
agent;
|
|
27
|
+
submitter;
|
|
28
|
+
running = false;
|
|
29
|
+
stats = {
|
|
30
|
+
received: 0,
|
|
31
|
+
filtered: 0,
|
|
32
|
+
solved: 0,
|
|
33
|
+
failed: 0,
|
|
34
|
+
};
|
|
35
|
+
/** Bound handler saved for proper off() unregistration */
|
|
36
|
+
boundIntentHandler;
|
|
37
|
+
constructor(client, filter, agent, submitter) {
|
|
38
|
+
this.client = client;
|
|
39
|
+
this.filter = filter;
|
|
40
|
+
this.agent = agent;
|
|
41
|
+
this.submitter = submitter;
|
|
42
|
+
// Bind once so we can unregister the same reference in stop()
|
|
43
|
+
this.boundIntentHandler = (intent) => {
|
|
44
|
+
void this.handleIntent(intent);
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// ─────────────────────────────────────────
|
|
48
|
+
// Public API
|
|
49
|
+
// ─────────────────────────────────────────
|
|
50
|
+
/**
|
|
51
|
+
* Start listening to mempool intent events.
|
|
52
|
+
*
|
|
53
|
+
* Attaches "new_intent" listener on the client.
|
|
54
|
+
* Also listens for "intent_solved" to update dedup cache.
|
|
55
|
+
*/
|
|
56
|
+
start() {
|
|
57
|
+
if (this.running)
|
|
58
|
+
return;
|
|
59
|
+
this.running = true;
|
|
60
|
+
this.client.on("new_intent", this.boundIntentHandler);
|
|
61
|
+
// When another solver solves an intent, mark it in our filter cache
|
|
62
|
+
this.client.on("intent_solved", (payload) => {
|
|
63
|
+
this.filter.markSolved(payload.intentId);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Stop listening and clean up event handlers.
|
|
68
|
+
*/
|
|
69
|
+
stop() {
|
|
70
|
+
if (!this.running)
|
|
71
|
+
return;
|
|
72
|
+
this.running = false;
|
|
73
|
+
this.client.off("new_intent", this.boundIntentHandler);
|
|
74
|
+
// Note: we leave "intent_solved" registered for the duration it was
|
|
75
|
+
// attached, it's harmless as it only updates a Set and will be GC'd
|
|
76
|
+
// when the client is destroyed.
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Get current processing stats.
|
|
80
|
+
*
|
|
81
|
+
* @returns Snapshot of received/filtered/solved/failed counters
|
|
82
|
+
*/
|
|
83
|
+
getStats() {
|
|
84
|
+
return { ...this.stats };
|
|
85
|
+
}
|
|
86
|
+
/** Whether the monitor is currently listening */
|
|
87
|
+
isRunning() {
|
|
88
|
+
return this.running;
|
|
89
|
+
}
|
|
90
|
+
// ─────────────────────────────────────────
|
|
91
|
+
// Private
|
|
92
|
+
// ─────────────────────────────────────────
|
|
93
|
+
/**
|
|
94
|
+
* Process a single incoming intent through the full pipeline.
|
|
95
|
+
*
|
|
96
|
+
* Errors within the solve pipeline are caught here so that
|
|
97
|
+
* one bad intent doesn't crash the monitor loop.
|
|
98
|
+
*/
|
|
99
|
+
async handleIntent(intent) {
|
|
100
|
+
this.stats.received++;
|
|
101
|
+
// 1. Filter
|
|
102
|
+
if (!this.filter.shouldSolve(intent)) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
this.stats.filtered++;
|
|
106
|
+
// 2. Solve
|
|
107
|
+
try {
|
|
108
|
+
const result = await this.agent.solve(intent);
|
|
109
|
+
if (result.success) {
|
|
110
|
+
this.stats.solved++;
|
|
111
|
+
// 3. Submit
|
|
112
|
+
this.submitter.submit(intent.intentId, result);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
this.stats.failed++;
|
|
116
|
+
// Log failure reason at debug level — not alertable
|
|
117
|
+
console.debug(`[MempoolMonitor] Intent ${intent.intentId} solve failed: ${result.error}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
this.stats.failed++;
|
|
122
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
123
|
+
console.error(`[MempoolMonitor] Unexpected error solving ${intent.intentId}:`, message);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=mempool-monitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mempool-monitor.js","sourceRoot":"","sources":["../../../src/solver/mempool/mempool-monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solution Submitter — Phase G
|
|
3
|
+
*
|
|
4
|
+
* Formats and submits a solved intent's result back to the mempool server.
|
|
5
|
+
* Handles race conditions where another solver already claimed the intent.
|
|
6
|
+
*
|
|
7
|
+
* Used by: MempoolMonitor
|
|
8
|
+
*/
|
|
9
|
+
import type { SolutionResult } from "../types/agent";
|
|
10
|
+
import type { MempoolClient } from "./mempool-client";
|
|
11
|
+
/** Result of a submission attempt */
|
|
12
|
+
export interface SubmitOutcome {
|
|
13
|
+
/** Whether submission was sent successfully */
|
|
14
|
+
submitted: boolean;
|
|
15
|
+
/** Whether submission was skipped because the intent was already solved */
|
|
16
|
+
alreadySolved: boolean;
|
|
17
|
+
/** Error if submission failed for some other reason */
|
|
18
|
+
error?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare class SolutionSubmitter {
|
|
21
|
+
private readonly client;
|
|
22
|
+
constructor(client: MempoolClient);
|
|
23
|
+
/**
|
|
24
|
+
* Submit a solution result to the mempool server.
|
|
25
|
+
*
|
|
26
|
+
* On success: sends the txHash + profit to the server.
|
|
27
|
+
* On "already solved" race condition: logs a warning and skips silently.
|
|
28
|
+
* On failure: logs the error and returns error outcome.
|
|
29
|
+
*
|
|
30
|
+
* @param intentId - The intent being submitted
|
|
31
|
+
* @param result - SolutionResult from LiquidityAgent.solve()
|
|
32
|
+
* @returns SubmitOutcome describing what happened
|
|
33
|
+
*/
|
|
34
|
+
submit(intentId: string, result: SolutionResult): SubmitOutcome;
|
|
35
|
+
/**
|
|
36
|
+
* Detect "already solved" error messages from the mempool server.
|
|
37
|
+
* Protocol-agnostic heuristic covering common error wordings.
|
|
38
|
+
*/
|
|
39
|
+
private isAlreadySolvedError;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=solution-submitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solution-submitter.d.ts","sourceRoot":"","sources":["../../../src/solver/mempool/solution-submitter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,qCAAqC;AACrC,MAAM,WAAW,aAAa;IAC1B,+CAA+C;IAC/C,SAAS,EAAE,OAAO,CAAC;IACnB,2EAA2E;IAC3E,aAAa,EAAE,OAAO,CAAC;IACvB,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,iBAAiB;IACd,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,aAAa;IAMlD;;;;;;;;;;OAUG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,aAAa;IA0C/D;;;OAGG;IACH,OAAO,CAAC,oBAAoB;CAS/B"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solution Submitter — Phase G
|
|
3
|
+
*
|
|
4
|
+
* Formats and submits a solved intent's result back to the mempool server.
|
|
5
|
+
* Handles race conditions where another solver already claimed the intent.
|
|
6
|
+
*
|
|
7
|
+
* Used by: MempoolMonitor
|
|
8
|
+
*/
|
|
9
|
+
export class SolutionSubmitter {
|
|
10
|
+
client;
|
|
11
|
+
constructor(client) {
|
|
12
|
+
this.client = client;
|
|
13
|
+
}
|
|
14
|
+
// ─────────────────────────────────────────
|
|
15
|
+
// Public API
|
|
16
|
+
// ─────────────────────────────────────────
|
|
17
|
+
/**
|
|
18
|
+
* Submit a solution result to the mempool server.
|
|
19
|
+
*
|
|
20
|
+
* On success: sends the txHash + profit to the server.
|
|
21
|
+
* On "already solved" race condition: logs a warning and skips silently.
|
|
22
|
+
* On failure: logs the error and returns error outcome.
|
|
23
|
+
*
|
|
24
|
+
* @param intentId - The intent being submitted
|
|
25
|
+
* @param result - SolutionResult from LiquidityAgent.solve()
|
|
26
|
+
* @returns SubmitOutcome describing what happened
|
|
27
|
+
*/
|
|
28
|
+
submit(intentId, result) {
|
|
29
|
+
if (!result.success) {
|
|
30
|
+
// Don't submit failed solutions — they don't need to go to mempool
|
|
31
|
+
return { submitted: false, alreadySolved: false };
|
|
32
|
+
}
|
|
33
|
+
if (!this.client.isConnected()) {
|
|
34
|
+
console.warn(`[SolutionSubmitter] Cannot submit ${intentId}: not connected to mempool`);
|
|
35
|
+
return {
|
|
36
|
+
submitted: false,
|
|
37
|
+
alreadySolved: false,
|
|
38
|
+
error: "Not connected to mempool",
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
this.client.submitSolution(intentId, result.txHash, result.metadata?.sourceChainId?.toString(), result.profit);
|
|
43
|
+
return { submitted: true, alreadySolved: false };
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
47
|
+
// Detect "already solved" — another solver was faster
|
|
48
|
+
if (this.isAlreadySolvedError(message)) {
|
|
49
|
+
console.warn(`[SolutionSubmitter] Intent ${intentId} already solved by another solver`);
|
|
50
|
+
return { submitted: false, alreadySolved: true };
|
|
51
|
+
}
|
|
52
|
+
console.error(`[SolutionSubmitter] Failed to submit ${intentId}:`, message);
|
|
53
|
+
return { submitted: false, alreadySolved: false, error: message };
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// ─────────────────────────────────────────
|
|
57
|
+
// Private
|
|
58
|
+
// ─────────────────────────────────────────
|
|
59
|
+
/**
|
|
60
|
+
* Detect "already solved" error messages from the mempool server.
|
|
61
|
+
* Protocol-agnostic heuristic covering common error wordings.
|
|
62
|
+
*/
|
|
63
|
+
isAlreadySolvedError(message) {
|
|
64
|
+
const lower = message.toLowerCase();
|
|
65
|
+
return (lower.includes("already solved") ||
|
|
66
|
+
lower.includes("already claimed") ||
|
|
67
|
+
lower.includes("intent_not_found") ||
|
|
68
|
+
lower.includes("duplicate"));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=solution-submitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solution-submitter.js","sourceRoot":"","sources":["../../../src/solver/mempool/solution-submitter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAeH,MAAM,OAAO,iBAAiB;IACG;IAA7B,YAA6B,MAAqB;QAArB,WAAM,GAAN,MAAM,CAAe;IAAI,CAAC;IAEvD,4CAA4C;IAC5C,aAAa;IACb,4CAA4C;IAE5C;;;;;;;;;;OAUG;IACH,MAAM,CAAC,QAAgB,EAAE,MAAsB;QAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAClB,mEAAmE;YACnE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;QACtD,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,qCAAqC,QAAQ,4BAA4B,CAAC,CAAC;YACxF,OAAO;gBACH,SAAS,EAAE,KAAK;gBAChB,aAAa,EAAE,KAAK;gBACpB,KAAK,EAAE,0BAA0B;aACpC,CAAC;QACN,CAAC;QAED,IAAI,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,cAAc,CACtB,QAAQ,EACR,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,EAC1C,MAAM,CAAC,MAAM,CAChB,CAAC;YAEF,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;QACrD,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAEjE,sDAAsD;YACtD,IAAI,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrC,OAAO,CAAC,IAAI,CAAC,8BAA8B,QAAQ,mCAAmC,CAAC,CAAC;gBACxF,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;YACrD,CAAC;YAED,OAAO,CAAC,KAAK,CAAC,wCAAwC,QAAQ,GAAG,EAAE,OAAO,CAAC,CAAC;YAC5E,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QACtE,CAAC;IACL,CAAC;IAED,4CAA4C;IAC5C,UAAU;IACV,4CAA4C;IAE5C;;;OAGG;IACK,oBAAoB,CAAC,OAAe;QACxC,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QACpC,OAAO,CACH,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAChC,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACjC,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAClC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAC9B,CAAC;IACN,CAAC;CACJ"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Alert Manager — Phase H
|
|
3
|
+
*
|
|
4
|
+
* Provides a structured way to report and track system alerts
|
|
5
|
+
* like low inventory or failed claim transactions.
|
|
6
|
+
*
|
|
7
|
+
* Used by: SettlementManager, DynamicPricing, Rebalancer
|
|
8
|
+
*/
|
|
9
|
+
import type { ChainId } from "../../types/common";
|
|
10
|
+
export type AlertLevel = "info" | "warning" | "critical";
|
|
11
|
+
export interface Alert {
|
|
12
|
+
id: string;
|
|
13
|
+
level: AlertLevel;
|
|
14
|
+
message: string;
|
|
15
|
+
timestamp: number;
|
|
16
|
+
context?: Record<string, unknown>;
|
|
17
|
+
}
|
|
18
|
+
export declare class AlertManager {
|
|
19
|
+
private alerts;
|
|
20
|
+
private readonly MAX_ALERTS;
|
|
21
|
+
private nextId;
|
|
22
|
+
/**
|
|
23
|
+
* Create a generalized structured alert
|
|
24
|
+
*/
|
|
25
|
+
alert(level: AlertLevel, message: string, context?: Record<string, unknown>): void;
|
|
26
|
+
/**
|
|
27
|
+
* Helper to create a standardized low inventory warning
|
|
28
|
+
*/
|
|
29
|
+
alertLowInventory(chainId: ChainId, token: string, available: string, threshold: string): void;
|
|
30
|
+
/**
|
|
31
|
+
* Helper to create a critical alert when a settlement claim fails repeatedly
|
|
32
|
+
*/
|
|
33
|
+
alertFailedClaim(intentId: string, reason: string, attempt: number): void;
|
|
34
|
+
/**
|
|
35
|
+
* Retrieve stored alerts, optionally filtered by severity
|
|
36
|
+
*/
|
|
37
|
+
getAlerts(level?: AlertLevel): Alert[];
|
|
38
|
+
/**
|
|
39
|
+
* Clear all stored alerts
|
|
40
|
+
*/
|
|
41
|
+
clearAlerts(): void;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=alert-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert-manager.d.ts","sourceRoot":"","sources":["../../../src/solver/monitoring/alert-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;AAEzD,MAAM,WAAW,KAAK;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,qBAAa,YAAY;IACrB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,MAAM,CAAK;IAEnB;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IA2BlF;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAQ9F;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAQzE;;OAEG;IACH,SAAS,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,KAAK,EAAE;IAOtC;;OAEG;IACH,WAAW,IAAI,IAAI;CAGtB"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Alert Manager — Phase H
|
|
3
|
+
*
|
|
4
|
+
* Provides a structured way to report and track system alerts
|
|
5
|
+
* like low inventory or failed claim transactions.
|
|
6
|
+
*
|
|
7
|
+
* Used by: SettlementManager, DynamicPricing, Rebalancer
|
|
8
|
+
*/
|
|
9
|
+
export class AlertManager {
|
|
10
|
+
alerts = [];
|
|
11
|
+
MAX_ALERTS = 1000;
|
|
12
|
+
nextId = 1;
|
|
13
|
+
/**
|
|
14
|
+
* Create a generalized structured alert
|
|
15
|
+
*/
|
|
16
|
+
alert(level, message, context) {
|
|
17
|
+
const item = {
|
|
18
|
+
id: `alert-${this.nextId++}`,
|
|
19
|
+
level,
|
|
20
|
+
message,
|
|
21
|
+
timestamp: Date.now(),
|
|
22
|
+
context,
|
|
23
|
+
};
|
|
24
|
+
this.alerts.push(item);
|
|
25
|
+
// Keep memory bounded
|
|
26
|
+
if (this.alerts.length > this.MAX_ALERTS) {
|
|
27
|
+
this.alerts.shift();
|
|
28
|
+
}
|
|
29
|
+
// Production-ready: emit to stdout/stderr in standardized format
|
|
30
|
+
// Could be piped to external monitoring tools (Datadog, Sentry, etc.)
|
|
31
|
+
if (level === "critical") {
|
|
32
|
+
console.error(`[ALERT:CRITICAL] ${message}`, context ? context : "");
|
|
33
|
+
}
|
|
34
|
+
else if (level === "warning") {
|
|
35
|
+
console.warn(`[ALERT:WARNING] ${message}`, context ? context : "");
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
console.info(`[ALERT:INFO] ${message}`, context ? context : "");
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Helper to create a standardized low inventory warning
|
|
43
|
+
*/
|
|
44
|
+
alertLowInventory(chainId, token, available, threshold) {
|
|
45
|
+
this.alert("warning", `Low inventory on chain ${chainId} for ${token}: available ${available} < threshold ${threshold}`, { chainId, token, available, threshold });
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Helper to create a critical alert when a settlement claim fails repeatedly
|
|
49
|
+
*/
|
|
50
|
+
alertFailedClaim(intentId, reason, attempt) {
|
|
51
|
+
this.alert("critical", `Failed claim for intent ${intentId} on attempt ${attempt}. Reason: ${reason}`, { intentId, reason, attempt });
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Retrieve stored alerts, optionally filtered by severity
|
|
55
|
+
*/
|
|
56
|
+
getAlerts(level) {
|
|
57
|
+
if (level) {
|
|
58
|
+
return this.alerts.filter((a) => a.level === level);
|
|
59
|
+
}
|
|
60
|
+
return [...this.alerts];
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Clear all stored alerts
|
|
64
|
+
*/
|
|
65
|
+
clearAlerts() {
|
|
66
|
+
this.alerts = [];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=alert-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert-manager.js","sourceRoot":"","sources":["../../../src/solver/monitoring/alert-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAcH,MAAM,OAAO,YAAY;IACb,MAAM,GAAY,EAAE,CAAC;IACZ,UAAU,GAAG,IAAI,CAAC;IAC3B,MAAM,GAAG,CAAC,CAAC;IAEnB;;OAEG;IACH,KAAK,CAAC,KAAiB,EAAE,OAAe,EAAE,OAAiC;QACvE,MAAM,IAAI,GAAU;YAChB,EAAE,EAAE,SAAS,IAAI,CAAC,MAAM,EAAE,EAAE;YAC5B,KAAK;YACL,OAAO;YACP,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,OAAO;SACV,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEvB,sBAAsB;QACtB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;QAED,iEAAiE;QACjE,sEAAsE;QACtE,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;aAAM,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,mBAAmB,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACvE,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,IAAI,CAAC,gBAAgB,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC;IACL,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,OAAgB,EAAE,KAAa,EAAE,SAAiB,EAAE,SAAiB;QACnF,IAAI,CAAC,KAAK,CACN,SAAS,EACT,0BAA0B,OAAO,QAAQ,KAAK,eAAe,SAAS,gBAAgB,SAAS,EAAE,EACjG,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAC3C,CAAC;IACN,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,QAAgB,EAAE,MAAc,EAAE,OAAe;QAC9D,IAAI,CAAC,KAAK,CACN,UAAU,EACV,2BAA2B,QAAQ,eAAe,OAAO,aAAa,MAAM,EAAE,EAC9E,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAChC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAkB;QACxB,IAAI,KAAK,EAAE,CAAC;YACR,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,WAAW;QACP,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACrB,CAAC;CACJ"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Health Checker — Phase H
|
|
3
|
+
*
|
|
4
|
+
* Aggregates health status of all critical solver subsystems
|
|
5
|
+
* (RPC, Inventory, Mempool).
|
|
6
|
+
*
|
|
7
|
+
* Used by: Monitoring dashboard / AlertManager
|
|
8
|
+
*/
|
|
9
|
+
import type { InventoryManager } from "../inventory/inventory-manager";
|
|
10
|
+
import type { MempoolClient } from "../mempool/mempool-client";
|
|
11
|
+
import type { RPCProviderManager } from "../../shared/rpc/provider-manager";
|
|
12
|
+
export interface HealthCheckResult {
|
|
13
|
+
healthy: boolean;
|
|
14
|
+
checks: {
|
|
15
|
+
rpc: {
|
|
16
|
+
healthy: boolean;
|
|
17
|
+
details?: string;
|
|
18
|
+
};
|
|
19
|
+
inventory: {
|
|
20
|
+
healthy: boolean;
|
|
21
|
+
details?: string;
|
|
22
|
+
};
|
|
23
|
+
mempool: {
|
|
24
|
+
healthy: boolean;
|
|
25
|
+
details?: string;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
timestamp: number;
|
|
29
|
+
}
|
|
30
|
+
export declare class HealthChecker {
|
|
31
|
+
private readonly deps;
|
|
32
|
+
/** Cached result from last check() call */
|
|
33
|
+
private lastResult;
|
|
34
|
+
/** TTL for isHealthy() cache in ms (default 10 seconds) */
|
|
35
|
+
private readonly cacheTtlMs;
|
|
36
|
+
constructor(deps: {
|
|
37
|
+
inventoryManager: InventoryManager;
|
|
38
|
+
mempoolClient: MempoolClient;
|
|
39
|
+
rpcProviderManager: RPCProviderManager;
|
|
40
|
+
}, cacheTtlMs?: number);
|
|
41
|
+
/**
|
|
42
|
+
* Perform a full health check across all subsystems
|
|
43
|
+
* @returns Detailed health check result
|
|
44
|
+
*/
|
|
45
|
+
check(): Promise<HealthCheckResult>;
|
|
46
|
+
/**
|
|
47
|
+
* Quick boolean check of overall health.
|
|
48
|
+
* Result is cached for `cacheTtlMs` to avoid per-call network calls.
|
|
49
|
+
* Pass `force = true` to skip the cache.
|
|
50
|
+
*/
|
|
51
|
+
isHealthy(force?: boolean): Promise<boolean>;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=health-checker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-checker.d.ts","sourceRoot":"","sources":["../../../src/solver/monitoring/health-checker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAE5E,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE;QACJ,GAAG,EAAE;YAAE,OAAO,EAAE,OAAO,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC5C,SAAS,EAAE;YAAE,OAAO,EAAE,OAAO,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAClD,OAAO,EAAE;YAAE,OAAO,EAAE,OAAO,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACnD,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,aAAa;IAOlB,OAAO,CAAC,QAAQ,CAAC,IAAI;IANzB,2CAA2C;IAC3C,OAAO,CAAC,UAAU,CAAkC;IACpD,2DAA2D;IAC3D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAGf,IAAI,EAAE;QACnB,gBAAgB,EAAE,gBAAgB,CAAC;QACnC,aAAa,EAAE,aAAa,CAAC;QAC7B,kBAAkB,EAAE,kBAAkB,CAAC;KAC1C,EACD,UAAU,SAAS;IAKvB;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,iBAAiB,CAAC;IA4DzC;;;;OAIG;IACG,SAAS,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;CAQnD"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Health Checker — Phase H
|
|
3
|
+
*
|
|
4
|
+
* Aggregates health status of all critical solver subsystems
|
|
5
|
+
* (RPC, Inventory, Mempool).
|
|
6
|
+
*
|
|
7
|
+
* Used by: Monitoring dashboard / AlertManager
|
|
8
|
+
*/
|
|
9
|
+
export class HealthChecker {
|
|
10
|
+
deps;
|
|
11
|
+
/** Cached result from last check() call */
|
|
12
|
+
lastResult = null;
|
|
13
|
+
/** TTL for isHealthy() cache in ms (default 10 seconds) */
|
|
14
|
+
cacheTtlMs;
|
|
15
|
+
constructor(deps, cacheTtlMs = 10_000) {
|
|
16
|
+
this.deps = deps;
|
|
17
|
+
this.cacheTtlMs = cacheTtlMs;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Perform a full health check across all subsystems
|
|
21
|
+
* @returns Detailed health check result
|
|
22
|
+
*/
|
|
23
|
+
async check() {
|
|
24
|
+
const { inventoryManager, mempoolClient, rpcProviderManager } = this.deps;
|
|
25
|
+
// 1. RPC Check
|
|
26
|
+
let rpcHealthy = true;
|
|
27
|
+
let rpcDetails = "All providers ok";
|
|
28
|
+
try {
|
|
29
|
+
const rpcHealth = await rpcProviderManager.checkHealth();
|
|
30
|
+
let failedCount = 0;
|
|
31
|
+
for (const [, isHealthy] of rpcHealth.entries()) {
|
|
32
|
+
if (!isHealthy)
|
|
33
|
+
failedCount++;
|
|
34
|
+
}
|
|
35
|
+
if (failedCount > 0) {
|
|
36
|
+
rpcHealthy = false;
|
|
37
|
+
rpcDetails = `${failedCount} provider(s) down`;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
rpcHealthy = false;
|
|
42
|
+
rpcDetails = e instanceof Error ? e.message : "RPC check failed";
|
|
43
|
+
console.error(`[HealthChecker] RPC check threw:`, rpcDetails);
|
|
44
|
+
}
|
|
45
|
+
// 2. Inventory Check
|
|
46
|
+
let inventoryHealthy = false;
|
|
47
|
+
let inventoryDetails = "No available balances";
|
|
48
|
+
try {
|
|
49
|
+
const snapshot = inventoryManager.getSnapshot();
|
|
50
|
+
if (snapshot.balances && snapshot.balances.length > 0) {
|
|
51
|
+
// Determine healthy if there's > 0 balance globally or tracked chains have some value
|
|
52
|
+
for (const bal of snapshot.balances) {
|
|
53
|
+
if (BigInt(bal.available) > 0n) {
|
|
54
|
+
inventoryHealthy = true;
|
|
55
|
+
inventoryDetails = "Balances available";
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
const msg = e instanceof Error ? e.message : "Inventory check failed";
|
|
63
|
+
inventoryDetails = msg;
|
|
64
|
+
console.error(`[HealthChecker] Inventory check threw:`, msg);
|
|
65
|
+
}
|
|
66
|
+
// 3. Mempool Check
|
|
67
|
+
const mempoolHealthy = mempoolClient.isConnected();
|
|
68
|
+
const mempoolDetails = mempoolHealthy ? "Connected" : "Disconnected";
|
|
69
|
+
const healthy = rpcHealthy && inventoryHealthy && mempoolHealthy;
|
|
70
|
+
return {
|
|
71
|
+
healthy,
|
|
72
|
+
checks: {
|
|
73
|
+
rpc: { healthy: rpcHealthy, details: rpcDetails },
|
|
74
|
+
inventory: { healthy: inventoryHealthy, details: inventoryDetails },
|
|
75
|
+
mempool: { healthy: mempoolHealthy, details: mempoolDetails },
|
|
76
|
+
},
|
|
77
|
+
timestamp: Date.now(),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Quick boolean check of overall health.
|
|
82
|
+
* Result is cached for `cacheTtlMs` to avoid per-call network calls.
|
|
83
|
+
* Pass `force = true` to skip the cache.
|
|
84
|
+
*/
|
|
85
|
+
async isHealthy(force = false) {
|
|
86
|
+
const now = Date.now();
|
|
87
|
+
if (!force && this.lastResult && (now - this.lastResult.timestamp) < this.cacheTtlMs) {
|
|
88
|
+
return this.lastResult.healthy;
|
|
89
|
+
}
|
|
90
|
+
this.lastResult = await this.check();
|
|
91
|
+
return this.lastResult.healthy;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=health-checker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-checker.js","sourceRoot":"","sources":["../../../src/solver/monitoring/health-checker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/solver/monitoring/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/solver/monitoring/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
|