@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,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chain Names — Human-Readable Display Names
|
|
3
|
+
*
|
|
4
|
+
* Static lookup map for well-known EVM chain IDs.
|
|
5
|
+
* Zero external dependencies — used across error messages and logging.
|
|
6
|
+
*
|
|
7
|
+
* Stage 3 — Phase G (Production Hardening)
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Well-known EVM chain ID → human-readable name.
|
|
11
|
+
*/
|
|
12
|
+
export const CHAIN_NAMES = {
|
|
13
|
+
// Mainnets
|
|
14
|
+
1: "Ethereum",
|
|
15
|
+
10: "Optimism",
|
|
16
|
+
56: "BNB Chain",
|
|
17
|
+
100: "Gnosis",
|
|
18
|
+
137: "Polygon",
|
|
19
|
+
250: "Fantom",
|
|
20
|
+
324: "zkSync Era",
|
|
21
|
+
8453: "Base",
|
|
22
|
+
42161: "Arbitrum One",
|
|
23
|
+
43114: "Avalanche",
|
|
24
|
+
59144: "Linea",
|
|
25
|
+
534352: "Scroll",
|
|
26
|
+
// Testnets
|
|
27
|
+
5: "Goerli",
|
|
28
|
+
1301: "Unichain Sepolia",
|
|
29
|
+
11155111: "Sepolia",
|
|
30
|
+
84532: "Base Sepolia",
|
|
31
|
+
421614: "Arbitrum Sepolia",
|
|
32
|
+
11155420: "Optimism Sepolia",
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Get a human-readable display name for a chain ID.
|
|
36
|
+
*
|
|
37
|
+
* Returns `"Ethereum (1)"` for known chains or `"Unknown Chain (99999)"` for unknown.
|
|
38
|
+
*
|
|
39
|
+
* @param chainId - Numeric EVM chain ID
|
|
40
|
+
* @returns Display string like `"Arbitrum One (42161)"`
|
|
41
|
+
*/
|
|
42
|
+
export function getChainDisplayName(chainId) {
|
|
43
|
+
const name = CHAIN_NAMES[chainId];
|
|
44
|
+
if (name) {
|
|
45
|
+
return `${name} (${chainId})`;
|
|
46
|
+
}
|
|
47
|
+
return `Unknown Chain (${chainId})`;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=chain-names.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain-names.js","sourceRoot":"","sources":["../../../src/shared/chain-registry/chain-names.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAA2B;IAC/C,WAAW;IACX,CAAC,EAAE,UAAU;IACb,EAAE,EAAE,UAAU;IACd,EAAE,EAAE,WAAW;IACf,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,YAAY;IACjB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,cAAc;IACrB,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAEhB,WAAW;IACX,CAAC,EAAE,QAAQ;IACX,IAAI,EAAE,kBAAkB;IACxB,QAAQ,EAAE,SAAS;IACnB,KAAK,EAAE,cAAc;IACrB,MAAM,EAAE,kBAAkB;IAC1B,QAAQ,EAAE,kBAAkB;CAC/B,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe;IAC/C,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,IAAI,EAAE,CAAC;QACP,OAAO,GAAG,IAAI,KAAK,OAAO,GAAG,CAAC;IAClC,CAAC;IACD,OAAO,kBAAkB,OAAO,GAAG,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Arbitrum Sepolia Testnet Chain Config
|
|
3
|
+
*
|
|
4
|
+
* Re-export from centralized testnets config for convenience.
|
|
5
|
+
*
|
|
6
|
+
* Stage 3 — Live Integration
|
|
7
|
+
*/
|
|
8
|
+
export { ARBITRUM_SEPOLIA_CONFIG } from "../../../config/testnets";
|
|
9
|
+
//# sourceMappingURL=arbitrum-sepolia.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arbitrum-sepolia.d.ts","sourceRoot":"","sources":["../../../../src/shared/chain-registry/configs/arbitrum-sepolia.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Arbitrum Sepolia Testnet Chain Config
|
|
3
|
+
*
|
|
4
|
+
* Re-export from centralized testnets config for convenience.
|
|
5
|
+
*
|
|
6
|
+
* Stage 3 — Live Integration
|
|
7
|
+
*/
|
|
8
|
+
export { ARBITRUM_SEPOLIA_CONFIG } from "../../../config/testnets";
|
|
9
|
+
//# sourceMappingURL=arbitrum-sepolia.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arbitrum-sepolia.js","sourceRoot":"","sources":["../../../../src/shared/chain-registry/configs/arbitrum-sepolia.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-sepolia.d.ts","sourceRoot":"","sources":["../../../../src/shared/chain-registry/configs/base-sepolia.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-sepolia.js","sourceRoot":"","sources":["../../../../src/shared/chain-registry/configs/base-sepolia.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ethereum.d.ts","sourceRoot":"","sources":["../../../../src/shared/chain-registry/configs/ethereum.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ethereum.js","sourceRoot":"","sources":["../../../../src/shared/chain-registry/configs/ethereum.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polygon.d.ts","sourceRoot":"","sources":["../../../../src/shared/chain-registry/configs/polygon.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polygon.js","sourceRoot":"","sources":["../../../../src/shared/chain-registry/configs/polygon.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sepolia.d.ts","sourceRoot":"","sources":["../../../../src/shared/chain-registry/configs/sepolia.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sepolia.js","sourceRoot":"","sources":["../../../../src/shared/chain-registry/configs/sepolia.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unichain Sepolia Testnet Chain Config
|
|
3
|
+
*
|
|
4
|
+
* Re-export from centralized testnets config for convenience.
|
|
5
|
+
*
|
|
6
|
+
* Stage 3 — Live Integration
|
|
7
|
+
*/
|
|
8
|
+
export { UNICHAIN_SEPOLIA_CONFIG } from "../../../config/testnets";
|
|
9
|
+
//# sourceMappingURL=unichain-sepolia.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unichain-sepolia.d.ts","sourceRoot":"","sources":["../../../../src/shared/chain-registry/configs/unichain-sepolia.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unichain Sepolia Testnet Chain Config
|
|
3
|
+
*
|
|
4
|
+
* Re-export from centralized testnets config for convenience.
|
|
5
|
+
*
|
|
6
|
+
* Stage 3 — Live Integration
|
|
7
|
+
*/
|
|
8
|
+
export { UNICHAIN_SEPOLIA_CONFIG } from "../../../config/testnets";
|
|
9
|
+
//# sourceMappingURL=unichain-sepolia.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unichain-sepolia.js","sourceRoot":"","sources":["../../../../src/shared/chain-registry/configs/unichain-sepolia.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chain Registry
|
|
3
|
+
*
|
|
4
|
+
* Central registry for all supported EVM chain configurations.
|
|
5
|
+
* Singleton-like pattern — register once, lookup by chainId.
|
|
6
|
+
*
|
|
7
|
+
* USAGE:
|
|
8
|
+
* const registry = new ChainRegistry();
|
|
9
|
+
* registry.register(ETHEREUM_CONFIG);
|
|
10
|
+
* registry.register(POLYGON_CONFIG);
|
|
11
|
+
*
|
|
12
|
+
* const eth = registry.get(1);
|
|
13
|
+
* console.log(eth.name); // "Ethereum"
|
|
14
|
+
*/
|
|
15
|
+
import type { ChainConfig } from "../../types/chain";
|
|
16
|
+
import type { ChainId } from "../../types/common";
|
|
17
|
+
export declare class ChainRegistry {
|
|
18
|
+
private chains;
|
|
19
|
+
/**
|
|
20
|
+
* Register a chain configuration.
|
|
21
|
+
* Throws if chain with same ID is already registered.
|
|
22
|
+
*/
|
|
23
|
+
register(config: ChainConfig): void;
|
|
24
|
+
/**
|
|
25
|
+
* Register multiple chains at once.
|
|
26
|
+
*/
|
|
27
|
+
registerAll(configs: ChainConfig[]): void;
|
|
28
|
+
/**
|
|
29
|
+
* Get chain config by ID.
|
|
30
|
+
* Throws if chain is not registered.
|
|
31
|
+
*/
|
|
32
|
+
get(chainId: ChainId): ChainConfig;
|
|
33
|
+
/**
|
|
34
|
+
* Check if a chain is registered.
|
|
35
|
+
*/
|
|
36
|
+
has(chainId: ChainId): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Get all registered chain configs.
|
|
39
|
+
*/
|
|
40
|
+
list(): ChainConfig[];
|
|
41
|
+
/**
|
|
42
|
+
* Get all registered chain IDs.
|
|
43
|
+
*/
|
|
44
|
+
listIds(): ChainId[];
|
|
45
|
+
/**
|
|
46
|
+
* Get number of registered chains.
|
|
47
|
+
*/
|
|
48
|
+
get size(): number;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/shared/chain-registry/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAGlD,qBAAa,aAAa;IACtB,OAAO,CAAC,MAAM,CAAwC;IAEtD;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IASnC;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI;IAMzC;;;OAGG;IACH,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW;IAQlC;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAI9B;;OAEG;IACH,IAAI,IAAI,WAAW,EAAE;IAIrB;;OAEG;IACH,OAAO,IAAI,OAAO,EAAE;IAIpB;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;CACJ"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chain Registry
|
|
3
|
+
*
|
|
4
|
+
* Central registry for all supported EVM chain configurations.
|
|
5
|
+
* Singleton-like pattern — register once, lookup by chainId.
|
|
6
|
+
*
|
|
7
|
+
* USAGE:
|
|
8
|
+
* const registry = new ChainRegistry();
|
|
9
|
+
* registry.register(ETHEREUM_CONFIG);
|
|
10
|
+
* registry.register(POLYGON_CONFIG);
|
|
11
|
+
*
|
|
12
|
+
* const eth = registry.get(1);
|
|
13
|
+
* console.log(eth.name); // "Ethereum"
|
|
14
|
+
*/
|
|
15
|
+
import { getChainDisplayName } from "./chain-names";
|
|
16
|
+
export class ChainRegistry {
|
|
17
|
+
chains = new Map();
|
|
18
|
+
/**
|
|
19
|
+
* Register a chain configuration.
|
|
20
|
+
* Throws if chain with same ID is already registered.
|
|
21
|
+
*/
|
|
22
|
+
register(config) {
|
|
23
|
+
if (this.chains.has(config.id)) {
|
|
24
|
+
throw new Error(`Chain ${config.id} (${config.name}) is already registered`);
|
|
25
|
+
}
|
|
26
|
+
this.chains.set(config.id, config);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Register multiple chains at once.
|
|
30
|
+
*/
|
|
31
|
+
registerAll(configs) {
|
|
32
|
+
for (const config of configs) {
|
|
33
|
+
this.register(config);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Get chain config by ID.
|
|
38
|
+
* Throws if chain is not registered.
|
|
39
|
+
*/
|
|
40
|
+
get(chainId) {
|
|
41
|
+
const config = this.chains.get(chainId);
|
|
42
|
+
if (!config) {
|
|
43
|
+
throw new Error(`Chain ${getChainDisplayName(chainId)} is not registered`);
|
|
44
|
+
}
|
|
45
|
+
return config;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Check if a chain is registered.
|
|
49
|
+
*/
|
|
50
|
+
has(chainId) {
|
|
51
|
+
return this.chains.has(chainId);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get all registered chain configs.
|
|
55
|
+
*/
|
|
56
|
+
list() {
|
|
57
|
+
return Array.from(this.chains.values());
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get all registered chain IDs.
|
|
61
|
+
*/
|
|
62
|
+
listIds() {
|
|
63
|
+
return Array.from(this.chains.keys());
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get number of registered chains.
|
|
67
|
+
*/
|
|
68
|
+
get size() {
|
|
69
|
+
return this.chains.size;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/shared/chain-registry/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEpD,MAAM,OAAO,aAAa;IACd,MAAM,GAA8B,IAAI,GAAG,EAAE,CAAC;IAEtD;;;OAGG;IACH,QAAQ,CAAC,MAAmB;QACxB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACX,SAAS,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,IAAI,yBAAyB,CAC9D,CAAC;QACN,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,OAAsB;QAC9B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,GAAG,CAAC,OAAgB;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,SAAS,mBAAmB,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC/E,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,OAAgB;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,IAAI;QACA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,OAAO;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC5B,CAAC;CACJ"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RPC Provider Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages JSON-RPC provider connections to multiple chains.
|
|
5
|
+
* Features: caching, fallback URLs, basic ERC20 balance queries.
|
|
6
|
+
*
|
|
7
|
+
* NOTE: Ini adalah lightweight abstraction.
|
|
8
|
+
* Provider-specific logic (ethers.JsonRpcProvider / viem publicClient)
|
|
9
|
+
* diinject via factory pattern.
|
|
10
|
+
*
|
|
11
|
+
* USAGE:
|
|
12
|
+
* const rpm = new RPCProviderManager(chainRegistry);
|
|
13
|
+
* const balance = await rpm.getTokenBalance(137, usdcAddr, walletAddr);
|
|
14
|
+
*/
|
|
15
|
+
import type { ChainConfig } from "../../types/chain";
|
|
16
|
+
import type { Address, ChainId } from "../../types/common";
|
|
17
|
+
/**
|
|
18
|
+
* Abstract RPC Provider interface
|
|
19
|
+
*
|
|
20
|
+
* Abstraction atas JSON-RPC calls. Implement with ethers.js, viem, or fetch.
|
|
21
|
+
*/
|
|
22
|
+
export interface IRPCProvider {
|
|
23
|
+
/** Chain ID this provider is connected to */
|
|
24
|
+
chainId: ChainId;
|
|
25
|
+
/** Call a contract view function */
|
|
26
|
+
call(to: Address, data: string): Promise<string>;
|
|
27
|
+
/** Get current block number */
|
|
28
|
+
getBlockNumber(): Promise<number>;
|
|
29
|
+
/** Get transaction receipt */
|
|
30
|
+
getTransactionReceipt(txHash: string): Promise<{
|
|
31
|
+
status: number;
|
|
32
|
+
blockNumber: number;
|
|
33
|
+
gasUsed: string;
|
|
34
|
+
} | null>;
|
|
35
|
+
/** Get gas price in wei */
|
|
36
|
+
getGasPrice(): Promise<string>;
|
|
37
|
+
/** Check if provider is healthy */
|
|
38
|
+
isHealthy(): Promise<boolean>;
|
|
39
|
+
/**
|
|
40
|
+
* Send a signed (serialized) transaction to the network.
|
|
41
|
+
* Returns the transaction hash.
|
|
42
|
+
*
|
|
43
|
+
* Stage 3 — Phase B addition
|
|
44
|
+
*/
|
|
45
|
+
sendRawTransaction?(signedTx: `0x${string}`): Promise<string>;
|
|
46
|
+
/**
|
|
47
|
+
* Estimate gas required for a transaction.
|
|
48
|
+
*
|
|
49
|
+
* Stage 3 — Phase B addition
|
|
50
|
+
*/
|
|
51
|
+
estimateGas?(tx: {
|
|
52
|
+
to: Address;
|
|
53
|
+
data?: string;
|
|
54
|
+
value?: bigint;
|
|
55
|
+
from?: Address;
|
|
56
|
+
}): Promise<bigint>;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Provider factory function type
|
|
60
|
+
*
|
|
61
|
+
* Given a chain config, create an IRPCProvider.
|
|
62
|
+
* Memungkinkan inject ethers.js atau viem tanpa hard dependency.
|
|
63
|
+
*/
|
|
64
|
+
export type ProviderFactory = (config: ChainConfig) => IRPCProvider;
|
|
65
|
+
/**
|
|
66
|
+
* RPCProviderManager
|
|
67
|
+
*
|
|
68
|
+
* Central manager for all RPC providers across chains.
|
|
69
|
+
* Auto-creates and caches providers per chain.
|
|
70
|
+
*/
|
|
71
|
+
export declare class RPCProviderManager {
|
|
72
|
+
private providers;
|
|
73
|
+
private chainConfigs;
|
|
74
|
+
private providerFactory?;
|
|
75
|
+
constructor(providerFactory?: ProviderFactory);
|
|
76
|
+
/**
|
|
77
|
+
* Set or update the provider factory after instantiation.
|
|
78
|
+
*/
|
|
79
|
+
setProviderFactory(factory: ProviderFactory): void;
|
|
80
|
+
/**
|
|
81
|
+
* Register a chain config (called by initialization logic)
|
|
82
|
+
*/
|
|
83
|
+
registerChain(config: ChainConfig): void;
|
|
84
|
+
/**
|
|
85
|
+
* Register multiple chain configs
|
|
86
|
+
*/
|
|
87
|
+
registerChains(configs: ChainConfig[]): void;
|
|
88
|
+
/**
|
|
89
|
+
* Get or create a provider for a specific chain.
|
|
90
|
+
* Providers are cached after first creation.
|
|
91
|
+
*
|
|
92
|
+
* Throws if no provider factory is configured or chain is not registered.
|
|
93
|
+
*/
|
|
94
|
+
getProvider(chainId: ChainId): IRPCProvider;
|
|
95
|
+
/**
|
|
96
|
+
* Get ERC20 token balance for a wallet on a specific chain.
|
|
97
|
+
*
|
|
98
|
+
* Calls balanceOf(address) on the token contract.
|
|
99
|
+
* Returns balance in token's smallest unit.
|
|
100
|
+
*/
|
|
101
|
+
getTokenBalance(chainId: ChainId, tokenAddress: Address, walletAddress: Address): Promise<bigint>;
|
|
102
|
+
/**
|
|
103
|
+
* Check if all registered chains have healthy providers.
|
|
104
|
+
*/
|
|
105
|
+
checkHealth(): Promise<Map<ChainId, boolean>>;
|
|
106
|
+
/**
|
|
107
|
+
* Clear all cached providers (for testing or reconnection).
|
|
108
|
+
*/
|
|
109
|
+
clearProviders(): void;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=provider-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-manager.d.ts","sourceRoot":"","sources":["../../../src/shared/rpc/provider-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAG3D;;;;GAIG;AACH,MAAM,WAAW,YAAY;IACzB,6CAA6C;IAC7C,OAAO,EAAE,OAAO,CAAC;IAEjB,oCAAoC;IACpC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEjD,+BAA+B;IAC/B,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAElC,8BAA8B;IAC9B,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAC3C,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;KACnB,GAAG,IAAI,CAAC,CAAC;IAEV,2BAA2B;IAC3B,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAE/B,mCAAmC;IACnC,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9B;;;;;OAKG;IACH,kBAAkB,CAAC,CAAC,QAAQ,EAAE,KAAK,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9D;;;;OAIG;IACH,WAAW,CAAC,CAAC,EAAE,EAAE;QACb,EAAE,EAAE,OAAO,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,OAAO,CAAC;KAClB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACvB;AAED;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,WAAW,KAAK,YAAY,CAAC;AAEpE;;;;;GAKG;AACH,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,SAAS,CAAyC;IAC1D,OAAO,CAAC,YAAY,CAAwC;IAC5D,OAAO,CAAC,eAAe,CAAC,CAAkB;gBAE9B,eAAe,CAAC,EAAE,eAAe;IAI7C;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAIlD;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAIxC;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI;IAM5C;;;;;OAKG;IACH,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY;IAuB3C;;;;;OAKG;IACG,eAAe,CACjB,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,OAAO,EACrB,aAAa,EAAE,OAAO,GACvB,OAAO,CAAC,MAAM,CAAC;IAkBlB;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAgBnD;;OAEG;IACH,cAAc,IAAI,IAAI;CAGzB"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RPC Provider Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages JSON-RPC provider connections to multiple chains.
|
|
5
|
+
* Features: caching, fallback URLs, basic ERC20 balance queries.
|
|
6
|
+
*
|
|
7
|
+
* NOTE: Ini adalah lightweight abstraction.
|
|
8
|
+
* Provider-specific logic (ethers.JsonRpcProvider / viem publicClient)
|
|
9
|
+
* diinject via factory pattern.
|
|
10
|
+
*
|
|
11
|
+
* USAGE:
|
|
12
|
+
* const rpm = new RPCProviderManager(chainRegistry);
|
|
13
|
+
* const balance = await rpm.getTokenBalance(137, usdcAddr, walletAddr);
|
|
14
|
+
*/
|
|
15
|
+
import { getChainDisplayName } from "../chain-registry/chain-names";
|
|
16
|
+
/**
|
|
17
|
+
* RPCProviderManager
|
|
18
|
+
*
|
|
19
|
+
* Central manager for all RPC providers across chains.
|
|
20
|
+
* Auto-creates and caches providers per chain.
|
|
21
|
+
*/
|
|
22
|
+
export class RPCProviderManager {
|
|
23
|
+
providers = new Map();
|
|
24
|
+
chainConfigs = new Map();
|
|
25
|
+
providerFactory;
|
|
26
|
+
constructor(providerFactory) {
|
|
27
|
+
this.providerFactory = providerFactory;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Set or update the provider factory after instantiation.
|
|
31
|
+
*/
|
|
32
|
+
setProviderFactory(factory) {
|
|
33
|
+
this.providerFactory = factory;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Register a chain config (called by initialization logic)
|
|
37
|
+
*/
|
|
38
|
+
registerChain(config) {
|
|
39
|
+
this.chainConfigs.set(config.id, config);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Register multiple chain configs
|
|
43
|
+
*/
|
|
44
|
+
registerChains(configs) {
|
|
45
|
+
for (const config of configs) {
|
|
46
|
+
this.registerChain(config);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get or create a provider for a specific chain.
|
|
51
|
+
* Providers are cached after first creation.
|
|
52
|
+
*
|
|
53
|
+
* Throws if no provider factory is configured or chain is not registered.
|
|
54
|
+
*/
|
|
55
|
+
getProvider(chainId) {
|
|
56
|
+
// Return cached provider
|
|
57
|
+
const cached = this.providers.get(chainId);
|
|
58
|
+
if (cached)
|
|
59
|
+
return cached;
|
|
60
|
+
// Create new provider
|
|
61
|
+
const config = this.chainConfigs.get(chainId);
|
|
62
|
+
if (!config) {
|
|
63
|
+
throw new Error(`Chain ${getChainDisplayName(chainId)} is not registered in RPCProviderManager`);
|
|
64
|
+
}
|
|
65
|
+
if (!this.providerFactory) {
|
|
66
|
+
throw new Error("RPCProviderManager requires a providerFactory. " +
|
|
67
|
+
"Provide one via constructor.");
|
|
68
|
+
}
|
|
69
|
+
const provider = this.providerFactory(config);
|
|
70
|
+
this.providers.set(chainId, provider);
|
|
71
|
+
return provider;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Get ERC20 token balance for a wallet on a specific chain.
|
|
75
|
+
*
|
|
76
|
+
* Calls balanceOf(address) on the token contract.
|
|
77
|
+
* Returns balance in token's smallest unit.
|
|
78
|
+
*/
|
|
79
|
+
async getTokenBalance(chainId, tokenAddress, walletAddress) {
|
|
80
|
+
const provider = this.getProvider(chainId);
|
|
81
|
+
// ERC20 balanceOf(address) selector = 0x70a08231
|
|
82
|
+
// ABI encode: selector + padded address
|
|
83
|
+
const data = "0x70a08231" +
|
|
84
|
+
walletAddress.slice(2).padStart(64, "0");
|
|
85
|
+
const result = await provider.call(tokenAddress, data);
|
|
86
|
+
// Parse hex result to bigint
|
|
87
|
+
if (!result || result === "0x" || result === "0x0") {
|
|
88
|
+
return 0n;
|
|
89
|
+
}
|
|
90
|
+
return BigInt(result);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Check if all registered chains have healthy providers.
|
|
94
|
+
*/
|
|
95
|
+
async checkHealth() {
|
|
96
|
+
const results = new Map();
|
|
97
|
+
for (const chainId of this.chainConfigs.keys()) {
|
|
98
|
+
try {
|
|
99
|
+
const provider = this.getProvider(chainId);
|
|
100
|
+
const healthy = await provider.isHealthy();
|
|
101
|
+
results.set(chainId, healthy);
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
results.set(chainId, false);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return results;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Clear all cached providers (for testing or reconnection).
|
|
111
|
+
*/
|
|
112
|
+
clearProviders() {
|
|
113
|
+
this.providers.clear();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=provider-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-manager.js","sourceRoot":"","sources":["../../../src/shared/rpc/provider-manager.ts"],"names":[],"mappings":"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"}
|