@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,81 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Zod schemas for validation
|
|
4
|
+
*/
|
|
5
|
+
const IntentParametersSchema = z
|
|
6
|
+
.object({
|
|
7
|
+
inputToken: z.string().optional(),
|
|
8
|
+
inputTokenAddress: z.string().optional(),
|
|
9
|
+
inputAmount: z.string().optional(),
|
|
10
|
+
outputToken: z.string().optional(),
|
|
11
|
+
outputTokenAddress: z.string().optional(),
|
|
12
|
+
minOutputAmount: z.string().optional(),
|
|
13
|
+
recipient: z.string().optional(),
|
|
14
|
+
riskLevel: z.enum(["low", "medium", "high"]).optional(),
|
|
15
|
+
diversificationRequired: z.boolean().optional(),
|
|
16
|
+
preferredProtocols: z.array(z.string()).optional(),
|
|
17
|
+
targetAPY: z.string().optional(),
|
|
18
|
+
collection: z.string().optional(),
|
|
19
|
+
collectionAddress: z.string().optional(),
|
|
20
|
+
traits: z.record(z.string(), z.string()).optional(),
|
|
21
|
+
maxPrice: z.string().optional(),
|
|
22
|
+
})
|
|
23
|
+
.passthrough();
|
|
24
|
+
const IntentConstraintsSchema = z
|
|
25
|
+
.object({
|
|
26
|
+
deadline: z.number(),
|
|
27
|
+
maxSlippage: z.number().optional(),
|
|
28
|
+
maxGasCost: z.string().optional(),
|
|
29
|
+
minProtocols: z.number().optional(),
|
|
30
|
+
maxExposurePerProtocol: z.number().optional(),
|
|
31
|
+
preferredDEXs: z.array(z.string()).optional(),
|
|
32
|
+
preferredMarketplaces: z.array(z.string()).optional(),
|
|
33
|
+
})
|
|
34
|
+
.passthrough();
|
|
35
|
+
const StructuredIntentSchema = z.object({
|
|
36
|
+
intentType: z.enum([
|
|
37
|
+
"swap",
|
|
38
|
+
"yield_strategy",
|
|
39
|
+
"nft_purchase",
|
|
40
|
+
"send",
|
|
41
|
+
"bridge",
|
|
42
|
+
"claim",
|
|
43
|
+
"unknown",
|
|
44
|
+
]),
|
|
45
|
+
parameters: IntentParametersSchema,
|
|
46
|
+
constraints: IntentConstraintsSchema,
|
|
47
|
+
metadata: z.object({
|
|
48
|
+
originalText: z.string(),
|
|
49
|
+
confidence: z.number().min(0).max(1),
|
|
50
|
+
parsedAt: z.number(),
|
|
51
|
+
warnings: z.array(z.string()).optional(),
|
|
52
|
+
}),
|
|
53
|
+
});
|
|
54
|
+
/**
|
|
55
|
+
* Validate structured intent
|
|
56
|
+
*
|
|
57
|
+
* INPUT: StructuredIntent
|
|
58
|
+
* OUTPUT: { success: boolean, error?: string }
|
|
59
|
+
*
|
|
60
|
+
* TODO: Implement validation logic
|
|
61
|
+
*/
|
|
62
|
+
export function validateIntent(intent) {
|
|
63
|
+
try {
|
|
64
|
+
StructuredIntentSchema.parse(intent);
|
|
65
|
+
return { success: true };
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
if (error instanceof z.ZodError) {
|
|
69
|
+
return {
|
|
70
|
+
success: false,
|
|
71
|
+
// @ts-ignore
|
|
72
|
+
error: error.errors.map((e) => e.message).join(", "),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
success: false,
|
|
77
|
+
error: "Unknown validation error",
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/parser/validators/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK Factory — Convenience function to create Parser + Solver
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* import { createIntentSDK } from "@terkoizmy/intent-sdk";
|
|
6
|
+
*
|
|
7
|
+
* const { parser, solver } = createIntentSDK({
|
|
8
|
+
* agent: {
|
|
9
|
+
* privateKey: "0x...",
|
|
10
|
+
* mode: "simulate",
|
|
11
|
+
* supportedChains: [1, 42161],
|
|
12
|
+
* supportedTokens: ["USDC"],
|
|
13
|
+
* },
|
|
14
|
+
* contractAddress: "0x...",
|
|
15
|
+
* });
|
|
16
|
+
*/
|
|
17
|
+
import { IntentParser } from "./parser";
|
|
18
|
+
import { IntentSolver } from "./solver";
|
|
19
|
+
import type { LiquidityAgentConfig } from "./solver/agent/agent-config";
|
|
20
|
+
import type { ParserConfig } from "./parser";
|
|
21
|
+
export interface SDKConfig {
|
|
22
|
+
/** Parser configuration (optional — sensible defaults used) */
|
|
23
|
+
parser?: ParserConfig;
|
|
24
|
+
/** Solver configuration (required for solver functionality) */
|
|
25
|
+
solver: LiquidityAgentConfig;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Create a fully configured Intent SDK with both parser and solver.
|
|
29
|
+
*
|
|
30
|
+
* @param config - SDK configuration
|
|
31
|
+
* @returns Object containing `parser` and `solver` instances
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* const { parser, solver } = createIntentSDK({
|
|
36
|
+
* solver: {
|
|
37
|
+
* agent: {
|
|
38
|
+
* privateKey: process.env.SOLVER_PRIVATE_KEY!,
|
|
39
|
+
* mode: "live",
|
|
40
|
+
* supportedChains: [1, 42161],
|
|
41
|
+
* supportedTokens: ["USDC"],
|
|
42
|
+
* },
|
|
43
|
+
* contractAddress: process.env.SETTLEMENT_CONTRACT!,
|
|
44
|
+
* },
|
|
45
|
+
* });
|
|
46
|
+
*
|
|
47
|
+
* await solver.initialize();
|
|
48
|
+
* const parsed = parser.parse("Bridge 100 USDC from Ethereum to Arbitrum");
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export declare function createIntentSDK(config: SDKConfig): {
|
|
52
|
+
parser: IntentParser;
|
|
53
|
+
solver: IntentSolver;
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=sdk-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk-factory.d.ts","sourceRoot":"","sources":["../src/sdk-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,WAAW,SAAS;IACtB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB,+DAA+D;IAC/D,MAAM,EAAE,oBAAoB,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS;;;EAKhD"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK Factory — Convenience function to create Parser + Solver
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* import { createIntentSDK } from "@terkoizmy/intent-sdk";
|
|
6
|
+
*
|
|
7
|
+
* const { parser, solver } = createIntentSDK({
|
|
8
|
+
* agent: {
|
|
9
|
+
* privateKey: "0x...",
|
|
10
|
+
* mode: "simulate",
|
|
11
|
+
* supportedChains: [1, 42161],
|
|
12
|
+
* supportedTokens: ["USDC"],
|
|
13
|
+
* },
|
|
14
|
+
* contractAddress: "0x...",
|
|
15
|
+
* });
|
|
16
|
+
*/
|
|
17
|
+
import { IntentParser } from "./parser";
|
|
18
|
+
import { IntentSolver } from "./solver";
|
|
19
|
+
/**
|
|
20
|
+
* Create a fully configured Intent SDK with both parser and solver.
|
|
21
|
+
*
|
|
22
|
+
* @param config - SDK configuration
|
|
23
|
+
* @returns Object containing `parser` and `solver` instances
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const { parser, solver } = createIntentSDK({
|
|
28
|
+
* solver: {
|
|
29
|
+
* agent: {
|
|
30
|
+
* privateKey: process.env.SOLVER_PRIVATE_KEY!,
|
|
31
|
+
* mode: "live",
|
|
32
|
+
* supportedChains: [1, 42161],
|
|
33
|
+
* supportedTokens: ["USDC"],
|
|
34
|
+
* },
|
|
35
|
+
* contractAddress: process.env.SETTLEMENT_CONTRACT!,
|
|
36
|
+
* },
|
|
37
|
+
* });
|
|
38
|
+
*
|
|
39
|
+
* await solver.initialize();
|
|
40
|
+
* const parsed = parser.parse("Bridge 100 USDC from Ethereum to Arbitrum");
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export function createIntentSDK(config) {
|
|
44
|
+
return {
|
|
45
|
+
parser: new IntentParser(config.parser),
|
|
46
|
+
solver: new IntentSolver(config.solver),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=sdk-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk-factory.js","sourceRoot":"","sources":["../src/sdk-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAYxC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC7C,OAAO;QACH,MAAM,EAAE,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC;QACvC,MAAM,EAAE,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC;KAC1C,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import type { ResolvedToken, TokenResolverConfig } from "../types/token";
|
|
2
|
+
/**
|
|
3
|
+
* Token Resolver Service
|
|
4
|
+
*
|
|
5
|
+
* Resolve token symbol + chain → contract address menggunakan Swing.xyz API.
|
|
6
|
+
* Includes built-in caching untuk menghindari API call berulang.
|
|
7
|
+
*
|
|
8
|
+
* API ENDPOINT: https://platform.swing.xyz/api/v1/tokens?chain={chain}&symbol={symbol}
|
|
9
|
+
* - Public API, tidak perlu API key
|
|
10
|
+
* - Support EVM chains (Ethereum, Polygon, Arbitrum, etc.) + Solana
|
|
11
|
+
* - Response: { symbol, name, address, decimals, price, chain, logo }
|
|
12
|
+
*
|
|
13
|
+
* CONTOH PENGGUNAAN:
|
|
14
|
+
* const resolver = new TokenResolver({ enabled: true, cacheTTL: 300_000, timeout: 5000 });
|
|
15
|
+
* const token = await resolver.resolve("USDC", "polygon");
|
|
16
|
+
* // → { symbol: "USDC", address: "0x3c499c...", decimals: 6, chain: "polygon" }
|
|
17
|
+
*
|
|
18
|
+
* CACHING:
|
|
19
|
+
* - Cache key: "${SYMBOL}:${chain}" (e.g., "USDC:polygon")
|
|
20
|
+
* - TTL: configurable, default 5 menit
|
|
21
|
+
* - Jika cache hit dan belum expired → return cached, skip API call
|
|
22
|
+
*
|
|
23
|
+
* ERROR HANDLING:
|
|
24
|
+
* - Jika API down / timeout → return null (parser tetap berfungsi tanpa address)
|
|
25
|
+
* - Jika token tidak ditemukan → return null
|
|
26
|
+
* - Tidak throw error — selalu graceful
|
|
27
|
+
*/
|
|
28
|
+
export declare class TokenResolver {
|
|
29
|
+
private config;
|
|
30
|
+
private cache;
|
|
31
|
+
private static readonly BASE_URL;
|
|
32
|
+
/**
|
|
33
|
+
* Constructor
|
|
34
|
+
*
|
|
35
|
+
* INPUT: TokenResolverConfig
|
|
36
|
+
* - enabled: boolean (default: true)
|
|
37
|
+
* - cacheTTL: number in ms (default: 300_000 = 5 min)
|
|
38
|
+
* - timeout: number in ms (default: 5000)
|
|
39
|
+
* - customResolver?: (symbol, chain) => Promise<ResolvedToken | null>
|
|
40
|
+
*/
|
|
41
|
+
constructor(config?: Partial<TokenResolverConfig>);
|
|
42
|
+
/**
|
|
43
|
+
* Resolve a token symbol on a specific chain to its contract address
|
|
44
|
+
*
|
|
45
|
+
* INPUT:
|
|
46
|
+
* - symbol: Token symbol, e.g., "USDC", "ETH", "WBTC"
|
|
47
|
+
* - chain: Chain name, e.g., "ethereum", "polygon", "solana"
|
|
48
|
+
*
|
|
49
|
+
* OUTPUT:
|
|
50
|
+
* - Promise<ResolvedToken | null>
|
|
51
|
+
* - Returns null jika: disabled, token not found, API error, timeout
|
|
52
|
+
*
|
|
53
|
+
* FLOW:
|
|
54
|
+
* 1. Jika disabled → return null
|
|
55
|
+
* 2. Jika customResolver disediakan → gunakan itu
|
|
56
|
+
* 3. Check cache → jika hit dan belum expired → return cached
|
|
57
|
+
* 4. Call Swing.xyz API
|
|
58
|
+
* 5. Parse response → map ke ResolvedToken
|
|
59
|
+
* 6. Simpan ke cache
|
|
60
|
+
* 7. Return ResolvedToken
|
|
61
|
+
*
|
|
62
|
+
* ERROR: Tidak throw. Jika terjadi error apapun → return null
|
|
63
|
+
*/
|
|
64
|
+
resolve(symbol: string, chain: string): Promise<ResolvedToken | null>;
|
|
65
|
+
/**
|
|
66
|
+
* Resolve multiple tokens in parallel
|
|
67
|
+
*
|
|
68
|
+
* INPUT:
|
|
69
|
+
* - tokens: Array of { symbol, chain } objects
|
|
70
|
+
*
|
|
71
|
+
* OUTPUT:
|
|
72
|
+
* - Promise<Map<string, ResolvedToken | null>>
|
|
73
|
+
* - Map key = "SYMBOL:chain" (e.g., "USDC:polygon")
|
|
74
|
+
*
|
|
75
|
+
* CONTOH:
|
|
76
|
+
* const results = await resolver.resolveMany([
|
|
77
|
+
* { symbol: "USDC", chain: "ethereum" },
|
|
78
|
+
* { symbol: "ETH", chain: "polygon" },
|
|
79
|
+
* ]);
|
|
80
|
+
* // results.get("USDC:ethereum") → { address: "0xA0b8..." }
|
|
81
|
+
*/
|
|
82
|
+
resolveMany(tokens: Array<{
|
|
83
|
+
symbol: string;
|
|
84
|
+
chain: string;
|
|
85
|
+
}>): Promise<Map<string, ResolvedToken | null>>;
|
|
86
|
+
/**
|
|
87
|
+
* Fetch token data from Swing.xyz API
|
|
88
|
+
*
|
|
89
|
+
* INPUT:
|
|
90
|
+
* - symbol: Token symbol (e.g., "USDC")
|
|
91
|
+
* - chain: Chain name (e.g., "polygon")
|
|
92
|
+
*
|
|
93
|
+
* OUTPUT:
|
|
94
|
+
* - Promise<ResolvedToken | null>
|
|
95
|
+
*
|
|
96
|
+
* API CALL:
|
|
97
|
+
* GET https://platform.swing.xyz/api/v1/tokens?chain={chain}&symbol={symbol}
|
|
98
|
+
* Headers: { "x-swing-environment": "" }
|
|
99
|
+
*
|
|
100
|
+
* RESPONSE SHAPE (array):
|
|
101
|
+
* [{ symbol, name, address, decimals, logo, chain, price, ... }]
|
|
102
|
+
*
|
|
103
|
+
* MAPPING:
|
|
104
|
+
* SwingTokenResponse → ResolvedToken:
|
|
105
|
+
* - symbol → symbol
|
|
106
|
+
* - address → address
|
|
107
|
+
* - decimals → decimals
|
|
108
|
+
* - chain → chain
|
|
109
|
+
* - name → name
|
|
110
|
+
* - price → price
|
|
111
|
+
* - logo → logoUrl
|
|
112
|
+
*
|
|
113
|
+
* ERROR HANDLING:
|
|
114
|
+
* - Wrap in try/catch
|
|
115
|
+
* - Use AbortController for timeout
|
|
116
|
+
* - Return null on any error
|
|
117
|
+
*/
|
|
118
|
+
private fetchFromSwing;
|
|
119
|
+
/**
|
|
120
|
+
* Generate cache key dari symbol dan chain
|
|
121
|
+
*
|
|
122
|
+
* INPUT: symbol ("USDC"), chain ("polygon")
|
|
123
|
+
* OUTPUT: "USDC:polygon" (symbol uppercase, chain lowercase)
|
|
124
|
+
*/
|
|
125
|
+
private getCacheKey;
|
|
126
|
+
/**
|
|
127
|
+
* Get dari cache jika ada dan belum expired
|
|
128
|
+
*
|
|
129
|
+
* INPUT: Cache key (e.g., "USDC:polygon")
|
|
130
|
+
* OUTPUT: ResolvedToken | null
|
|
131
|
+
*
|
|
132
|
+
* LOGIC:
|
|
133
|
+
* 1. Check apakah key ada di Map
|
|
134
|
+
* 2. Check apakah (now - cachedAt) < cacheTTL
|
|
135
|
+
* 3. Jika expired → delete entry, return null
|
|
136
|
+
* 4. Jika valid → return token
|
|
137
|
+
*/
|
|
138
|
+
private getFromCache;
|
|
139
|
+
private setCache;
|
|
140
|
+
clearCache(): void;
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=token-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-resolver.d.ts","sourceRoot":"","sources":["../../src/services/token-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,aAAa,EACb,mBAAmB,EAGtB,MAAM,gBAAgB,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,aAAa;IACtB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,KAAK,CAA+B;IAE5C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CACe;IAE/C;;;;;;;;OAQG;gBACS,MAAM,GAAE,OAAO,CAAC,mBAAmB,CAAM;IAYrD;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IA0B3E;;;;;;;;;;;;;;;;OAgBG;IACG,WAAW,CACb,MAAM,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GACjD,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC,CAAC;IAqB7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;YACW,cAAc;IAoD5B;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAInB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,QAAQ;IAahB,UAAU,IAAI,IAAI;CAGrB"}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token Resolver Service
|
|
3
|
+
*
|
|
4
|
+
* Resolve token symbol + chain → contract address menggunakan Swing.xyz API.
|
|
5
|
+
* Includes built-in caching untuk menghindari API call berulang.
|
|
6
|
+
*
|
|
7
|
+
* API ENDPOINT: https://platform.swing.xyz/api/v1/tokens?chain={chain}&symbol={symbol}
|
|
8
|
+
* - Public API, tidak perlu API key
|
|
9
|
+
* - Support EVM chains (Ethereum, Polygon, Arbitrum, etc.) + Solana
|
|
10
|
+
* - Response: { symbol, name, address, decimals, price, chain, logo }
|
|
11
|
+
*
|
|
12
|
+
* CONTOH PENGGUNAAN:
|
|
13
|
+
* const resolver = new TokenResolver({ enabled: true, cacheTTL: 300_000, timeout: 5000 });
|
|
14
|
+
* const token = await resolver.resolve("USDC", "polygon");
|
|
15
|
+
* // → { symbol: "USDC", address: "0x3c499c...", decimals: 6, chain: "polygon" }
|
|
16
|
+
*
|
|
17
|
+
* CACHING:
|
|
18
|
+
* - Cache key: "${SYMBOL}:${chain}" (e.g., "USDC:polygon")
|
|
19
|
+
* - TTL: configurable, default 5 menit
|
|
20
|
+
* - Jika cache hit dan belum expired → return cached, skip API call
|
|
21
|
+
*
|
|
22
|
+
* ERROR HANDLING:
|
|
23
|
+
* - Jika API down / timeout → return null (parser tetap berfungsi tanpa address)
|
|
24
|
+
* - Jika token tidak ditemukan → return null
|
|
25
|
+
* - Tidak throw error — selalu graceful
|
|
26
|
+
*/
|
|
27
|
+
export class TokenResolver {
|
|
28
|
+
config;
|
|
29
|
+
cache;
|
|
30
|
+
static BASE_URL = "https://platform.swing.xyz/api/v1/tokens";
|
|
31
|
+
/**
|
|
32
|
+
* Constructor
|
|
33
|
+
*
|
|
34
|
+
* INPUT: TokenResolverConfig
|
|
35
|
+
* - enabled: boolean (default: true)
|
|
36
|
+
* - cacheTTL: number in ms (default: 300_000 = 5 min)
|
|
37
|
+
* - timeout: number in ms (default: 5000)
|
|
38
|
+
* - customResolver?: (symbol, chain) => Promise<ResolvedToken | null>
|
|
39
|
+
*/
|
|
40
|
+
constructor(config = {}) {
|
|
41
|
+
this.config = {
|
|
42
|
+
enabled: config.enabled ?? true,
|
|
43
|
+
cacheTTL: config.cacheTTL ?? 300_000,
|
|
44
|
+
timeout: config.timeout ?? 5000,
|
|
45
|
+
maxCacheSize: config.maxCacheSize ?? 1000,
|
|
46
|
+
customResolver: config.customResolver,
|
|
47
|
+
};
|
|
48
|
+
this.cache = new Map();
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Resolve a token symbol on a specific chain to its contract address
|
|
52
|
+
*
|
|
53
|
+
* INPUT:
|
|
54
|
+
* - symbol: Token symbol, e.g., "USDC", "ETH", "WBTC"
|
|
55
|
+
* - chain: Chain name, e.g., "ethereum", "polygon", "solana"
|
|
56
|
+
*
|
|
57
|
+
* OUTPUT:
|
|
58
|
+
* - Promise<ResolvedToken | null>
|
|
59
|
+
* - Returns null jika: disabled, token not found, API error, timeout
|
|
60
|
+
*
|
|
61
|
+
* FLOW:
|
|
62
|
+
* 1. Jika disabled → return null
|
|
63
|
+
* 2. Jika customResolver disediakan → gunakan itu
|
|
64
|
+
* 3. Check cache → jika hit dan belum expired → return cached
|
|
65
|
+
* 4. Call Swing.xyz API
|
|
66
|
+
* 5. Parse response → map ke ResolvedToken
|
|
67
|
+
* 6. Simpan ke cache
|
|
68
|
+
* 7. Return ResolvedToken
|
|
69
|
+
*
|
|
70
|
+
* ERROR: Tidak throw. Jika terjadi error apapun → return null
|
|
71
|
+
*/
|
|
72
|
+
async resolve(symbol, chain) {
|
|
73
|
+
// Step 1: Early return jika disabled
|
|
74
|
+
if (!this.config.enabled)
|
|
75
|
+
return null;
|
|
76
|
+
// Step 2: Jika customResolver disediakan, gunakan itu
|
|
77
|
+
if (this.config.customResolver) {
|
|
78
|
+
return this.config.customResolver(symbol, chain);
|
|
79
|
+
}
|
|
80
|
+
// Step 3: Check cache
|
|
81
|
+
const cacheKey = this.getCacheKey(symbol, chain);
|
|
82
|
+
const cached = this.getFromCache(cacheKey);
|
|
83
|
+
if (cached)
|
|
84
|
+
return cached;
|
|
85
|
+
// Step 4: Call Swing.xyz API via fetchFromSwing()
|
|
86
|
+
const resolved = await this.fetchFromSwing(symbol, chain);
|
|
87
|
+
// Step 5: Cache result jika berhasil
|
|
88
|
+
if (resolved) {
|
|
89
|
+
this.setCache(cacheKey, resolved);
|
|
90
|
+
}
|
|
91
|
+
// Step 6: Return result
|
|
92
|
+
return resolved;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Resolve multiple tokens in parallel
|
|
96
|
+
*
|
|
97
|
+
* INPUT:
|
|
98
|
+
* - tokens: Array of { symbol, chain } objects
|
|
99
|
+
*
|
|
100
|
+
* OUTPUT:
|
|
101
|
+
* - Promise<Map<string, ResolvedToken | null>>
|
|
102
|
+
* - Map key = "SYMBOL:chain" (e.g., "USDC:polygon")
|
|
103
|
+
*
|
|
104
|
+
* CONTOH:
|
|
105
|
+
* const results = await resolver.resolveMany([
|
|
106
|
+
* { symbol: "USDC", chain: "ethereum" },
|
|
107
|
+
* { symbol: "ETH", chain: "polygon" },
|
|
108
|
+
* ]);
|
|
109
|
+
* // results.get("USDC:ethereum") → { address: "0xA0b8..." }
|
|
110
|
+
*/
|
|
111
|
+
async resolveMany(tokens) {
|
|
112
|
+
// Step 1: Map each token ke Promise<[key, ResolvedToken | null]>
|
|
113
|
+
const promises = tokens.map(async ({ symbol, chain }) => {
|
|
114
|
+
const key = this.getCacheKey(symbol, chain);
|
|
115
|
+
const resolved = await this.resolve(symbol, chain);
|
|
116
|
+
return [key, resolved];
|
|
117
|
+
});
|
|
118
|
+
// Step 2: Promise.allSettled() untuk parallel execution
|
|
119
|
+
const results = await Promise.allSettled(promises);
|
|
120
|
+
// Step 3: Build result map
|
|
121
|
+
const resultMap = new Map();
|
|
122
|
+
for (const result of results) {
|
|
123
|
+
if (result.status === "fulfilled") {
|
|
124
|
+
resultMap.set(result.value[0], result.value[1]);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return resultMap;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Fetch token data from Swing.xyz API
|
|
131
|
+
*
|
|
132
|
+
* INPUT:
|
|
133
|
+
* - symbol: Token symbol (e.g., "USDC")
|
|
134
|
+
* - chain: Chain name (e.g., "polygon")
|
|
135
|
+
*
|
|
136
|
+
* OUTPUT:
|
|
137
|
+
* - Promise<ResolvedToken | null>
|
|
138
|
+
*
|
|
139
|
+
* API CALL:
|
|
140
|
+
* GET https://platform.swing.xyz/api/v1/tokens?chain={chain}&symbol={symbol}
|
|
141
|
+
* Headers: { "x-swing-environment": "" }
|
|
142
|
+
*
|
|
143
|
+
* RESPONSE SHAPE (array):
|
|
144
|
+
* [{ symbol, name, address, decimals, logo, chain, price, ... }]
|
|
145
|
+
*
|
|
146
|
+
* MAPPING:
|
|
147
|
+
* SwingTokenResponse → ResolvedToken:
|
|
148
|
+
* - symbol → symbol
|
|
149
|
+
* - address → address
|
|
150
|
+
* - decimals → decimals
|
|
151
|
+
* - chain → chain
|
|
152
|
+
* - name → name
|
|
153
|
+
* - price → price
|
|
154
|
+
* - logo → logoUrl
|
|
155
|
+
*
|
|
156
|
+
* ERROR HANDLING:
|
|
157
|
+
* - Wrap in try/catch
|
|
158
|
+
* - Use AbortController for timeout
|
|
159
|
+
* - Return null on any error
|
|
160
|
+
*/
|
|
161
|
+
async fetchFromSwing(symbol, chain) {
|
|
162
|
+
// Step 1: Build URL
|
|
163
|
+
const url = `${TokenResolver.BASE_URL}?chain=${encodeURIComponent(chain)}&symbol=${encodeURIComponent(symbol)}`;
|
|
164
|
+
// Step 2: Setup AbortController for timeout
|
|
165
|
+
const controller = new AbortController();
|
|
166
|
+
const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);
|
|
167
|
+
try {
|
|
168
|
+
// Step 3: Fetch
|
|
169
|
+
const response = await fetch(url, {
|
|
170
|
+
headers: { "x-swing-environment": "" },
|
|
171
|
+
signal: controller.signal,
|
|
172
|
+
});
|
|
173
|
+
clearTimeout(timeoutId);
|
|
174
|
+
// Step 4: Parse response
|
|
175
|
+
if (!response.ok)
|
|
176
|
+
return null;
|
|
177
|
+
const data = await response.json();
|
|
178
|
+
// Handle Swing API response format wrapped in "value" if present (some APIs wrap list in value object)
|
|
179
|
+
// Based on user provided curl output: {"value": [...], "Count": 1} is possible?
|
|
180
|
+
// Wait, previous curl output showed:
|
|
181
|
+
// { "value": [ ... ] }
|
|
182
|
+
// So we need to access data.value if it exists.
|
|
183
|
+
const tokens = Array.isArray(data) ? data : (data.value || []);
|
|
184
|
+
// Step 5: Validasi — API return array, ambil pertama
|
|
185
|
+
if (!tokens || tokens.length === 0)
|
|
186
|
+
return null;
|
|
187
|
+
const token = tokens[0];
|
|
188
|
+
// Step 6: Map ke ResolvedToken
|
|
189
|
+
return {
|
|
190
|
+
symbol: token.symbol,
|
|
191
|
+
address: token.address,
|
|
192
|
+
decimals: token.decimals,
|
|
193
|
+
chain: token.chain,
|
|
194
|
+
name: token.name,
|
|
195
|
+
price: token.price,
|
|
196
|
+
logoUrl: token.logo,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
finally {
|
|
203
|
+
clearTimeout(timeoutId);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Generate cache key dari symbol dan chain
|
|
208
|
+
*
|
|
209
|
+
* INPUT: symbol ("USDC"), chain ("polygon")
|
|
210
|
+
* OUTPUT: "USDC:polygon" (symbol uppercase, chain lowercase)
|
|
211
|
+
*/
|
|
212
|
+
getCacheKey(symbol, chain) {
|
|
213
|
+
return `${symbol.toUpperCase()}:${chain.toLowerCase()}`;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Get dari cache jika ada dan belum expired
|
|
217
|
+
*
|
|
218
|
+
* INPUT: Cache key (e.g., "USDC:polygon")
|
|
219
|
+
* OUTPUT: ResolvedToken | null
|
|
220
|
+
*
|
|
221
|
+
* LOGIC:
|
|
222
|
+
* 1. Check apakah key ada di Map
|
|
223
|
+
* 2. Check apakah (now - cachedAt) < cacheTTL
|
|
224
|
+
* 3. Jika expired → delete entry, return null
|
|
225
|
+
* 4. Jika valid → return token
|
|
226
|
+
*/
|
|
227
|
+
getFromCache(key) {
|
|
228
|
+
const entry = this.cache.get(key);
|
|
229
|
+
if (!entry)
|
|
230
|
+
return null;
|
|
231
|
+
const isExpired = Date.now() - entry.cachedAt > this.config.cacheTTL;
|
|
232
|
+
if (isExpired) {
|
|
233
|
+
this.cache.delete(key);
|
|
234
|
+
return null;
|
|
235
|
+
}
|
|
236
|
+
return entry.token;
|
|
237
|
+
}
|
|
238
|
+
setCache(key, token) {
|
|
239
|
+
// Evict oldest entry if cache is full
|
|
240
|
+
if (this.cache.size >= this.config.maxCacheSize) {
|
|
241
|
+
const oldestKey = this.cache.keys().next().value;
|
|
242
|
+
if (oldestKey)
|
|
243
|
+
this.cache.delete(oldestKey);
|
|
244
|
+
}
|
|
245
|
+
this.cache.set(key, {
|
|
246
|
+
token,
|
|
247
|
+
cachedAt: Date.now(),
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
clearCache() {
|
|
251
|
+
this.cache.clear();
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=token-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-resolver.js","sourceRoot":"","sources":["../../src/services/token-resolver.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,OAAO,aAAa;IACd,MAAM,CAAsB;IAC5B,KAAK,CAA+B;IAEpC,MAAM,CAAU,QAAQ,GAC5B,0CAA0C,CAAC;IAE/C;;;;;;;;OAQG;IACH,YAAY,SAAuC,EAAE;QACjD,IAAI,CAAC,MAAM,GAAG;YACV,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI;YAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,OAAO;YACpC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI;YAC/B,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,IAAI;YACzC,cAAc,EAAE,MAAM,CAAC,cAAc;SACxC,CAAC;QAEF,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,KAAa;QACvC,qCAAqC;QACrC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAEtC,sDAAsD;QACtD,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC;QAED,sBAAsB;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QAE1B,kDAAkD;QAClD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAE1D,qCAAqC;QACrC,IAAI,QAAQ,EAAE,CAAC;YACX,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC;QAED,wBAAwB;QACxB,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK,CAAC,WAAW,CACb,MAAgD;QAEhD,iEAAiE;QACjE,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;YACpD,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC5C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAU,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,wDAAwD;QACxD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAEnD,2BAA2B;QAC3B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAgC,CAAC;QAC1D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAChC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACpD,CAAC;QACL,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACK,KAAK,CAAC,cAAc,CACxB,MAAc,EACd,KAAa;QAEb,oBAAoB;QACpB,MAAM,GAAG,GAAG,GAAG,aAAa,CAAC,QAAQ,UAAU,kBAAkB,CAAC,KAAK,CAAC,WAAW,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QAEhH,4CAA4C;QAC5C,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE5E,IAAI,CAAC;YACD,gBAAgB;YAChB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAC9B,OAAO,EAAE,EAAE,qBAAqB,EAAE,EAAE,EAAE;gBACtC,MAAM,EAAE,UAAU,CAAC,MAAM;aAC5B,CAAC,CAAC;YACH,YAAY,CAAC,SAAS,CAAC,CAAC;YAExB,yBAAyB;YACzB,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,OAAO,IAAI,CAAC;YAC9B,MAAM,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAExC,uGAAuG;YACvG,gFAAgF;YAChF,qCAAqC;YACrC,uBAAuB;YACvB,gDAAgD;YAEhD,MAAM,MAAM,GAAyB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAErF,qDAAqD;YACrD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YAChD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAExB,+BAA+B;YAC/B,OAAO;gBACH,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,OAAO,EAAE,KAAK,CAAC,IAAI;aACtB,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QAChB,CAAC;gBAAS,CAAC;YACP,YAAY,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACK,WAAW,CAAC,MAAc,EAAE,KAAa;QAC7C,OAAO,GAAG,MAAM,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;IAC5D,CAAC;IAED;;;;;;;;;;;OAWG;IACK,YAAY,CAAC,GAAW;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QACrE,IAAI,SAAS,EAAE,CAAC;YACZ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,KAAK,CAAC,KAAK,CAAC;IACvB,CAAC;IAEO,QAAQ,CAAC,GAAW,EAAE,KAAoB;QAC9C,sCAAsC;QACtC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YACjD,IAAI,SAAS;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;YAChB,KAAK;YACL,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE;SACvB,CAAC,CAAC;IACP,CAAC;IAED,UAAU;QACN,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
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 declare const CHAIN_NAMES: Record<number, string>;
|
|
13
|
+
/**
|
|
14
|
+
* Get a human-readable display name for a chain ID.
|
|
15
|
+
*
|
|
16
|
+
* Returns `"Ethereum (1)"` for known chains or `"Unknown Chain (99999)"` for unknown.
|
|
17
|
+
*
|
|
18
|
+
* @param chainId - Numeric EVM chain ID
|
|
19
|
+
* @returns Display string like `"Arbitrum One (42161)"`
|
|
20
|
+
*/
|
|
21
|
+
export declare function getChainDisplayName(chainId: number): string;
|
|
22
|
+
//# sourceMappingURL=chain-names.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain-names.d.ts","sourceRoot":"","sources":["../../../src/shared/chain-registry/chain-names.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAsB9C,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAM3D"}
|