@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,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Amount Extractor
|
|
3
|
+
* Extracts numerical amounts from text
|
|
4
|
+
*/
|
|
5
|
+
export class AmountExtractor {
|
|
6
|
+
patterns;
|
|
7
|
+
constructor() {
|
|
8
|
+
this.patterns = this.initializePatterns();
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Extract all amount entities from text
|
|
12
|
+
*
|
|
13
|
+
* INPUT: Text string
|
|
14
|
+
* OUTPUT: Array of AmountEntity
|
|
15
|
+
*
|
|
16
|
+
* EXAMPLES:
|
|
17
|
+
* "1000 USDC" -> [{ value: 1000, rawText: "1000", unit: "USDC" }]
|
|
18
|
+
* "10k ETH" -> [{ value: 10000, rawText: "10k", unit: "ETH" }]
|
|
19
|
+
* "0.5 BTC" -> [{ value: 0.5, rawText: "0.5", unit: "BTC" }]
|
|
20
|
+
*
|
|
21
|
+
* TODO:
|
|
22
|
+
* 1. Match patterns for amounts
|
|
23
|
+
* 2. Parse numeric value (handle k, m suffixes)
|
|
24
|
+
* 3. Extract optional unit (token symbol)
|
|
25
|
+
* 4. Return array of AmountEntity
|
|
26
|
+
*/
|
|
27
|
+
extract(text) {
|
|
28
|
+
const rawEntities = [];
|
|
29
|
+
// Collect all potential matches
|
|
30
|
+
for (const pattern of this.patterns) {
|
|
31
|
+
// Reset lastIndex for global regex
|
|
32
|
+
pattern.lastIndex = 0;
|
|
33
|
+
let match;
|
|
34
|
+
while ((match = pattern.exec(text)) !== null) {
|
|
35
|
+
const rawText = match[0];
|
|
36
|
+
const groups = match.groups || {};
|
|
37
|
+
const numericPart = groups.value;
|
|
38
|
+
const suffix = groups.suffix || "";
|
|
39
|
+
const unit = groups.unit || undefined;
|
|
40
|
+
if (!numericPart)
|
|
41
|
+
continue;
|
|
42
|
+
rawEntities.push({
|
|
43
|
+
value: this.parseNumericValue(numericPart, suffix),
|
|
44
|
+
rawText,
|
|
45
|
+
unit,
|
|
46
|
+
position: [match.index, match.index + rawText.length],
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Sort by length (descending) to prefer longer matches (e.g. "1000 USDC" over "1000")
|
|
51
|
+
// If lengths are equal, prefer earlier position
|
|
52
|
+
rawEntities.sort((a, b) => {
|
|
53
|
+
const lenDiff = (b.position[1] - b.position[0]) - (a.position[1] - a.position[0]);
|
|
54
|
+
if (lenDiff !== 0)
|
|
55
|
+
return lenDiff;
|
|
56
|
+
return a.position[0] - b.position[0];
|
|
57
|
+
});
|
|
58
|
+
// Filter overlaps
|
|
59
|
+
const entities = [];
|
|
60
|
+
const occupiedmask = new Array(text.length).fill(false);
|
|
61
|
+
for (const entity of rawEntities) {
|
|
62
|
+
const [start, end] = entity.position;
|
|
63
|
+
// Check for overlap
|
|
64
|
+
let isOverlap = false;
|
|
65
|
+
for (let i = start; i < end; i++) {
|
|
66
|
+
if (occupiedmask[i]) {
|
|
67
|
+
isOverlap = true;
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (!isOverlap) {
|
|
72
|
+
entities.push(entity);
|
|
73
|
+
// Mark positions as occupied
|
|
74
|
+
for (let i = start; i < end; i++) {
|
|
75
|
+
occupiedmask[i] = true;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Sort valid entities by position
|
|
80
|
+
return entities.sort((a, b) => a.position[0] - b.position[0]);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Parse numeric value with k/m suffixes
|
|
84
|
+
*
|
|
85
|
+
* INPUT: Value string and suffix string
|
|
86
|
+
* OUTPUT: Numeric value
|
|
87
|
+
*/
|
|
88
|
+
parseNumericValue(value, suffix) {
|
|
89
|
+
const num = parseFloat(value);
|
|
90
|
+
const lowerSuffix = suffix.toLowerCase();
|
|
91
|
+
if (lowerSuffix === "k") {
|
|
92
|
+
return num * 1000;
|
|
93
|
+
}
|
|
94
|
+
else if (lowerSuffix === "m") {
|
|
95
|
+
return num * 1000000;
|
|
96
|
+
}
|
|
97
|
+
return num;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Initialize regex patterns for amount matching
|
|
101
|
+
*/
|
|
102
|
+
initializePatterns() {
|
|
103
|
+
return [
|
|
104
|
+
// Match: "1000 USDC", "10k ETH", "0.5 BTC", "1.5m DAI"
|
|
105
|
+
/(?<value>\d+(?:\.\d+)?)\s*(?<suffix>[km]?)\s*(?<unit>[A-Z]{2,10})/g,
|
|
106
|
+
// Match: "10k", "1.5m" (without unit)
|
|
107
|
+
/(?<value>\d+(?:\.\d+)?)\s*(?<suffix>[km])/gi,
|
|
108
|
+
// Match: plain numbers "1000", "0.5"
|
|
109
|
+
/\b(?<value>\d+(?:\.\d+)?)\b/g,
|
|
110
|
+
];
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=amount.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"amount.js","sourceRoot":"","sources":["../../../src/parser/extractors/amount.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ConstraintEntity } from "../../types";
|
|
2
|
+
/**
|
|
3
|
+
* Constraint Extractor
|
|
4
|
+
* Extracts constraints like slippage, deadline, gas limits
|
|
5
|
+
*/
|
|
6
|
+
export declare class ConstraintExtractor {
|
|
7
|
+
/**
|
|
8
|
+
* Extract constraint entities from text
|
|
9
|
+
*
|
|
10
|
+
* INPUT: Text string
|
|
11
|
+
* OUTPUT: Array of ConstraintEntity
|
|
12
|
+
*
|
|
13
|
+
* EXAMPLES:
|
|
14
|
+
* "max 1% slippage" -> [{ type: "slippage", value: 100, rawText: "max 1% slippage" }]
|
|
15
|
+
* "within 1 hour" -> [{ type: "deadline", value: 3600, rawText: "within 1 hour" }]
|
|
16
|
+
*
|
|
17
|
+
* EXTRACTS:
|
|
18
|
+
* 1. Slippage constraints (%, basis points)
|
|
19
|
+
* 2. Deadline constraints (time expressions)
|
|
20
|
+
* 3. Gas constraints
|
|
21
|
+
* 4. Price constraints
|
|
22
|
+
*/
|
|
23
|
+
extract(text: string): ConstraintEntity[];
|
|
24
|
+
/**
|
|
25
|
+
* Parse time expression to seconds
|
|
26
|
+
*
|
|
27
|
+
* INPUT: Time string like "1 hour", "30 minutes", "1 day"
|
|
28
|
+
* OUTPUT: Seconds
|
|
29
|
+
*
|
|
30
|
+
* EXAMPLES:
|
|
31
|
+
* "1 hour" -> 3600
|
|
32
|
+
* "30 minutes" -> 1800
|
|
33
|
+
* "1 day" -> 86400
|
|
34
|
+
*/
|
|
35
|
+
private parseTimeExpression;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=constraints.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constraints.d.ts","sourceRoot":"","sources":["../../../src/parser/extractors/constraints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,EAAE;IA4EzC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,mBAAmB;CAwB5B"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Constraint Extractor
|
|
3
|
+
* Extracts constraints like slippage, deadline, gas limits
|
|
4
|
+
*/
|
|
5
|
+
export class ConstraintExtractor {
|
|
6
|
+
/**
|
|
7
|
+
* Extract constraint entities from text
|
|
8
|
+
*
|
|
9
|
+
* INPUT: Text string
|
|
10
|
+
* OUTPUT: Array of ConstraintEntity
|
|
11
|
+
*
|
|
12
|
+
* EXAMPLES:
|
|
13
|
+
* "max 1% slippage" -> [{ type: "slippage", value: 100, rawText: "max 1% slippage" }]
|
|
14
|
+
* "within 1 hour" -> [{ type: "deadline", value: 3600, rawText: "within 1 hour" }]
|
|
15
|
+
*
|
|
16
|
+
* EXTRACTS:
|
|
17
|
+
* 1. Slippage constraints (%, basis points)
|
|
18
|
+
* 2. Deadline constraints (time expressions)
|
|
19
|
+
* 3. Gas constraints
|
|
20
|
+
* 4. Price constraints
|
|
21
|
+
*/
|
|
22
|
+
extract(text) {
|
|
23
|
+
const entities = [];
|
|
24
|
+
// Extract slippage
|
|
25
|
+
const slippageMatch = text.match(/(?:max|maximum)?\s*(\d+(?:\.\d+)?)\s*%?\s*slippage/i);
|
|
26
|
+
if (slippageMatch) {
|
|
27
|
+
const percentage = parseFloat(slippageMatch[1]);
|
|
28
|
+
entities.push({
|
|
29
|
+
type: "slippage",
|
|
30
|
+
value: percentage * 100, // Convert to basis points
|
|
31
|
+
rawText: slippageMatch[0],
|
|
32
|
+
position: [
|
|
33
|
+
slippageMatch.index,
|
|
34
|
+
slippageMatch.index + slippageMatch[0].length,
|
|
35
|
+
],
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
// Extract deadline
|
|
39
|
+
const deadlineMatch = text.match(/(?:within|in)\s+(\d+)\s*(hour|hr|minute|min|day|second|sec)s?/i);
|
|
40
|
+
if (deadlineMatch) {
|
|
41
|
+
const seconds = this.parseTimeExpression(deadlineMatch[0]);
|
|
42
|
+
entities.push({
|
|
43
|
+
type: "deadline",
|
|
44
|
+
value: seconds,
|
|
45
|
+
rawText: deadlineMatch[0],
|
|
46
|
+
position: [
|
|
47
|
+
deadlineMatch.index,
|
|
48
|
+
deadlineMatch.index + deadlineMatch[0].length,
|
|
49
|
+
],
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
// Extract gas limit (requires 'gas' keyword nearby)
|
|
53
|
+
const gasMatch = text.match(/(?:gas\s*(?:limit|cost|fee|under|max)|(?:max|under)\s*(?:\d+(?:\.\d+)?)\s*(?:ETH|gwei)\s*gas)\s*(\d+(?:\.\d+)?)\s*(ETH|gwei)/i)
|
|
54
|
+
|| text.match(/gas\s*(?:limit|cost|fee)?\s*(?:under|max|of)?\s*(\d+(?:\.\d+)?)\s*(ETH|gwei)/i);
|
|
55
|
+
if (gasMatch) {
|
|
56
|
+
let value = parseFloat(gasMatch[1]);
|
|
57
|
+
const unit = gasMatch[2].toLowerCase();
|
|
58
|
+
// Convert gwei to ETH
|
|
59
|
+
if (unit === 'gwei') {
|
|
60
|
+
value = value * 1e-9;
|
|
61
|
+
}
|
|
62
|
+
entities.push({
|
|
63
|
+
type: "gas",
|
|
64
|
+
value: value,
|
|
65
|
+
rawText: gasMatch[0],
|
|
66
|
+
position: [
|
|
67
|
+
gasMatch.index,
|
|
68
|
+
gasMatch.index + gasMatch[0].length,
|
|
69
|
+
],
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
// Extract price constraints (excludes time words like 'minutes', 'hours')
|
|
73
|
+
const priceMatch = text.match(/(?:max\s*price|under|below|no\s*more\s*than)\s*(\d+(?:\.\d+)?)\s*(?!(?:second|sec|minute|min|hour|hr|day)s?\b)([A-Z]{2,10})/i);
|
|
74
|
+
if (priceMatch) {
|
|
75
|
+
const value = parseFloat(priceMatch[1]);
|
|
76
|
+
entities.push({
|
|
77
|
+
type: "price",
|
|
78
|
+
value: value,
|
|
79
|
+
rawText: priceMatch[0],
|
|
80
|
+
position: [
|
|
81
|
+
priceMatch.index,
|
|
82
|
+
priceMatch.index + priceMatch[0].length,
|
|
83
|
+
],
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return entities;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Parse time expression to seconds
|
|
90
|
+
*
|
|
91
|
+
* INPUT: Time string like "1 hour", "30 minutes", "1 day"
|
|
92
|
+
* OUTPUT: Seconds
|
|
93
|
+
*
|
|
94
|
+
* EXAMPLES:
|
|
95
|
+
* "1 hour" -> 3600
|
|
96
|
+
* "30 minutes" -> 1800
|
|
97
|
+
* "1 day" -> 86400
|
|
98
|
+
*/
|
|
99
|
+
parseTimeExpression(timeStr) {
|
|
100
|
+
const secondMatch = timeStr.match(/(\d+)\s*(?:second|sec)/i);
|
|
101
|
+
if (secondMatch) {
|
|
102
|
+
return parseInt(secondMatch[1]);
|
|
103
|
+
}
|
|
104
|
+
const minuteMatch = timeStr.match(/(\d+)\s*(?:minute|min)/i);
|
|
105
|
+
if (minuteMatch) {
|
|
106
|
+
return parseInt(minuteMatch[1]) * 60;
|
|
107
|
+
}
|
|
108
|
+
const hourMatch = timeStr.match(/(\d+)\s*(?:hour|hr)/i);
|
|
109
|
+
if (hourMatch) {
|
|
110
|
+
return parseInt(hourMatch[1]) * 3600;
|
|
111
|
+
}
|
|
112
|
+
const dayMatch = timeStr.match(/(\d+)\s*day/i);
|
|
113
|
+
if (dayMatch) {
|
|
114
|
+
return parseInt(dayMatch[1]) * 86400;
|
|
115
|
+
}
|
|
116
|
+
return 3600; // Default 1 hour
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=constraints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constraints.js","sourceRoot":"","sources":["../../../src/parser/extractors/constraints.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/parser/extractors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/parser/extractors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { TokenEntity } from "../../types";
|
|
2
|
+
interface NftCollection {
|
|
3
|
+
name: string;
|
|
4
|
+
aliases: string[];
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Token Extractor
|
|
8
|
+
* Extracts token symbols and NFT collections from text
|
|
9
|
+
*/
|
|
10
|
+
export declare class TokenExtractor {
|
|
11
|
+
private knownTokens;
|
|
12
|
+
private knownCollections;
|
|
13
|
+
constructor(knownTokens?: Record<string, string>, knownCollections?: NftCollection[]);
|
|
14
|
+
/**
|
|
15
|
+
* Extract token entities from text
|
|
16
|
+
*
|
|
17
|
+
* INPUT: Text string
|
|
18
|
+
* OUTPUT: Array of TokenEntity
|
|
19
|
+
*/
|
|
20
|
+
extract(text: string): TokenEntity[];
|
|
21
|
+
private escapeRegExp;
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../src/parser/extractors/token.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AA8BD;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,gBAAgB,CAAkB;gBAGxC,WAAW,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EACxC,gBAAgB,CAAC,EAAE,aAAa,EAAE;IAiBpC;;;;;OAKG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE;IAmFpC,OAAO,CAAC,YAAY;CAGrB"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
// Static set of common English words to filter false positives
|
|
2
|
+
const COMMON_WORDS = new Set([
|
|
3
|
+
"TO",
|
|
4
|
+
"FROM",
|
|
5
|
+
"WITH",
|
|
6
|
+
"AND",
|
|
7
|
+
"OR",
|
|
8
|
+
"THE",
|
|
9
|
+
"FOR",
|
|
10
|
+
"OF",
|
|
11
|
+
"IN",
|
|
12
|
+
"ON",
|
|
13
|
+
"AT",
|
|
14
|
+
// Action words that should not be treated as token symbols
|
|
15
|
+
"SWAP",
|
|
16
|
+
"BUY",
|
|
17
|
+
"SELL",
|
|
18
|
+
"SEND",
|
|
19
|
+
"BRIDGE",
|
|
20
|
+
"CLAIM",
|
|
21
|
+
"STAKE",
|
|
22
|
+
"YIELD",
|
|
23
|
+
"MAX",
|
|
24
|
+
"MIN",
|
|
25
|
+
// Domain-specific words that are not token symbols
|
|
26
|
+
"NFT",
|
|
27
|
+
]);
|
|
28
|
+
/**
|
|
29
|
+
* Token Extractor
|
|
30
|
+
* Extracts token symbols and NFT collections from text
|
|
31
|
+
*/
|
|
32
|
+
export class TokenExtractor {
|
|
33
|
+
knownTokens;
|
|
34
|
+
knownCollections;
|
|
35
|
+
constructor(knownTokens = {}, knownCollections) {
|
|
36
|
+
this.knownTokens = { ...knownTokens };
|
|
37
|
+
// Default NFT collections — can be overridden via constructor
|
|
38
|
+
this.knownCollections = knownCollections ?? [
|
|
39
|
+
{ name: "Bored Ape Yacht Club", aliases: ["BAYC", "Bored Ape"] },
|
|
40
|
+
{ name: "Mutant Ape Yacht Club", aliases: ["MAYC", "Mutant Ape"] },
|
|
41
|
+
{ name: "CryptoPunks", aliases: ["Punks", "CryptoPunks"] },
|
|
42
|
+
{ name: "Azuki", aliases: ["Azuki"] },
|
|
43
|
+
{ name: "Doodles", aliases: ["Doodles"] },
|
|
44
|
+
{ name: "Clone X", aliases: ["CloneX", "Clone X"] },
|
|
45
|
+
{ name: "Moonbirds", aliases: ["Moonbirds"] },
|
|
46
|
+
{ name: "Pudgy Penguins", aliases: ["Pudgy Penguins", "Pudgy"] },
|
|
47
|
+
];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Extract token entities from text
|
|
51
|
+
*
|
|
52
|
+
* INPUT: Text string
|
|
53
|
+
* OUTPUT: Array of TokenEntity
|
|
54
|
+
*/
|
|
55
|
+
extract(text) {
|
|
56
|
+
const entities = [];
|
|
57
|
+
const matchedRanges = [];
|
|
58
|
+
// 1. Match NFT collections first (longer specific names take priority)
|
|
59
|
+
const potentialMatches = [];
|
|
60
|
+
const uniqueKeys = new Set();
|
|
61
|
+
for (const collection of this.knownCollections) {
|
|
62
|
+
for (const alias of [collection.name, ...collection.aliases]) {
|
|
63
|
+
const pattern = new RegExp(`\\b${this.escapeRegExp(alias)}\\b`, "ig");
|
|
64
|
+
let collectionMatch;
|
|
65
|
+
while ((collectionMatch = pattern.exec(text)) !== null) {
|
|
66
|
+
const start = collectionMatch.index;
|
|
67
|
+
const end = start + collectionMatch[0].length;
|
|
68
|
+
const key = `${start}-${end}`;
|
|
69
|
+
if (uniqueKeys.has(key))
|
|
70
|
+
continue;
|
|
71
|
+
uniqueKeys.add(key);
|
|
72
|
+
potentialMatches.push({
|
|
73
|
+
symbol: collection.name,
|
|
74
|
+
rawText: collectionMatch[0],
|
|
75
|
+
type: "collection",
|
|
76
|
+
position: [start, end],
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// Filter out matches that are contained within other (longer) matches
|
|
82
|
+
for (const match of potentialMatches) {
|
|
83
|
+
const isContained = potentialMatches.some((other) => other !== match &&
|
|
84
|
+
other.position[0] <= match.position[0] &&
|
|
85
|
+
other.position[1] >= match.position[1] &&
|
|
86
|
+
other.position[1] - other.position[0] >
|
|
87
|
+
match.position[1] - match.position[0]);
|
|
88
|
+
if (!isContained) {
|
|
89
|
+
entities.push(match);
|
|
90
|
+
matchedRanges.push(match.position);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// 2. Match fungible token symbols
|
|
94
|
+
const symbolPattern = /\b([A-Z]{2,10})\b/g;
|
|
95
|
+
let match;
|
|
96
|
+
while ((match = symbolPattern.exec(text)) !== null) {
|
|
97
|
+
const symbol = match[1];
|
|
98
|
+
const start = match.index;
|
|
99
|
+
const end = start + match[0].length;
|
|
100
|
+
// Skip common English words and action keywords
|
|
101
|
+
if (COMMON_WORDS.has(symbol))
|
|
102
|
+
continue;
|
|
103
|
+
// Skip if overlaps with already matched NFT
|
|
104
|
+
const isOverlapping = matchedRanges.some(([rStart, rEnd]) => (start >= rStart && start < rEnd) || (end > rStart && end <= rEnd));
|
|
105
|
+
if (isOverlapping)
|
|
106
|
+
continue;
|
|
107
|
+
entities.push({
|
|
108
|
+
symbol,
|
|
109
|
+
rawText: match[0],
|
|
110
|
+
type: "fungible",
|
|
111
|
+
address: this.knownTokens[symbol],
|
|
112
|
+
position: [start, end],
|
|
113
|
+
});
|
|
114
|
+
matchedRanges.push([start, end]);
|
|
115
|
+
}
|
|
116
|
+
// 3. Fuzzy matching (Optional/Future implementation)
|
|
117
|
+
// TODO: Implement fuzzy matching for token symbols
|
|
118
|
+
return entities;
|
|
119
|
+
}
|
|
120
|
+
escapeRegExp(string) {
|
|
121
|
+
return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/parser/extractors/token.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import type { ParserConfig, ParseResult } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Main Intent Parser Class
|
|
4
|
+
*
|
|
5
|
+
* Example usage:
|
|
6
|
+
* ```typescript
|
|
7
|
+
* const parser = new IntentParser();
|
|
8
|
+
* const result = parser.parse("Swap 1000 USDC to ETH with max 1% slippage");
|
|
9
|
+
* ```
|
|
10
|
+
*/
|
|
11
|
+
export declare class IntentParser {
|
|
12
|
+
private classifier;
|
|
13
|
+
private amountExtractor;
|
|
14
|
+
private tokenExtractor;
|
|
15
|
+
private actionExtractor;
|
|
16
|
+
private constraintExtractor;
|
|
17
|
+
private templates;
|
|
18
|
+
private config;
|
|
19
|
+
private tokenResolver;
|
|
20
|
+
constructor(config?: ParserConfig);
|
|
21
|
+
/**
|
|
22
|
+
* Parse natural language text into structured intent
|
|
23
|
+
*
|
|
24
|
+
* INPUT: Natural language string
|
|
25
|
+
* OUTPUT: ParseResult with StructuredIntent or error
|
|
26
|
+
*
|
|
27
|
+
* TODO:
|
|
28
|
+
* 1. Normalize input text
|
|
29
|
+
* 2. Classify intent type
|
|
30
|
+
* 3. Extract entities (amounts, tokens, actions, constraints)
|
|
31
|
+
* 4. Map entities to appropriate template
|
|
32
|
+
* 5. Validate result
|
|
33
|
+
* 6. Return structured intent
|
|
34
|
+
*/
|
|
35
|
+
parse(text: string): ParseResult;
|
|
36
|
+
/**
|
|
37
|
+
* Build structured intent from extracted entities and template
|
|
38
|
+
*
|
|
39
|
+
* INPUT:
|
|
40
|
+
* - intentType: Classified intent type
|
|
41
|
+
* - entities: All extracted entities
|
|
42
|
+
* - template: Intent template
|
|
43
|
+
* - originalText: Original user input
|
|
44
|
+
*
|
|
45
|
+
* OUTPUT: StructuredIntent
|
|
46
|
+
*
|
|
47
|
+
* TODO:
|
|
48
|
+
* 1. Map entities to parameters based on template
|
|
49
|
+
* 2. Fill in default values for missing fields
|
|
50
|
+
* 3. Build constraints
|
|
51
|
+
* 4. Calculate confidence score
|
|
52
|
+
* 5. Add metadata
|
|
53
|
+
*/
|
|
54
|
+
private buildIntent;
|
|
55
|
+
/**
|
|
56
|
+
* Async parse — sama seperti parse() tapi dengan token address resolution
|
|
57
|
+
*
|
|
58
|
+
* INPUT: Natural language string
|
|
59
|
+
* OUTPUT: Promise<ParseResult> (dengan inputTokenAddress/outputTokenAddress terisi)
|
|
60
|
+
*
|
|
61
|
+
* KAPAN PAKAI:
|
|
62
|
+
* - Gunakan parseAsync() jika tokenResolver.enabled = true
|
|
63
|
+
* - Gunakan parse() jika tidak butuh token address (tetap sync, backward compatible)
|
|
64
|
+
*
|
|
65
|
+
* BREAKING CHANGE MITIGATION:
|
|
66
|
+
* - parse() TETAP sync → tidak ada breaking change
|
|
67
|
+
* - parseAsync() BARU → consumer opt-in ke async behavior
|
|
68
|
+
*
|
|
69
|
+
* TODO [Phase 3]: Implement parseAsync
|
|
70
|
+
*
|
|
71
|
+
* FLOW:
|
|
72
|
+
* 1. Jalankan semua langkah sama seperti parse()
|
|
73
|
+
* 2. Setelah buildIntent, call resolveTokenAddresses()
|
|
74
|
+
* 3. Recalculate confidence (bonus jika address ditemukan)
|
|
75
|
+
* 4. Return ParseResult
|
|
76
|
+
*
|
|
77
|
+
* CONTOH:
|
|
78
|
+
* const result = await parser.parseAsync("swap 10 USDC to ETH");
|
|
79
|
+
* result.data?.parameters.inputTokenAddress // "0xA0b8..."
|
|
80
|
+
*/
|
|
81
|
+
parseAsync(text: string): Promise<ParseResult>;
|
|
82
|
+
/**
|
|
83
|
+
* Resolve token addresses in a StructuredIntent
|
|
84
|
+
*
|
|
85
|
+
* INPUT: StructuredIntent (akan di-mutate — address fields diisi)
|
|
86
|
+
* OUTPUT: void (mutates intent.parameters in-place)
|
|
87
|
+
*
|
|
88
|
+
* LOGIC:
|
|
89
|
+
* 1. Determine chain dari intent.parameters.sourceChain atau "ethereum"
|
|
90
|
+
* 2. Resolve inputToken jika ada
|
|
91
|
+
* 3. Resolve outputToken jika ada (gunakan targetChain untuk bridge)
|
|
92
|
+
* 4. Tambahkan warning ke metadata jika resolve gagal
|
|
93
|
+
*
|
|
94
|
+
* CONTOH:
|
|
95
|
+
* intent.parameters = { inputToken: "USDC", sourceChain: "Polygon" }
|
|
96
|
+
* → setelah resolve: { inputToken: "USDC", inputTokenAddress: "0x3c49...", sourceChain: "Polygon" }
|
|
97
|
+
*
|
|
98
|
+
* TODO [Phase 3]: Implement resolveTokenAddresses
|
|
99
|
+
*/
|
|
100
|
+
private resolveTokenAddresses;
|
|
101
|
+
/**
|
|
102
|
+
* Batch parse multiple intents (sync — tanpa token resolution)
|
|
103
|
+
*
|
|
104
|
+
* INPUT: Array of natural language strings
|
|
105
|
+
* OUTPUT: Array of ParseResult
|
|
106
|
+
*/
|
|
107
|
+
parseBatch(texts: string[]): ParseResult[];
|
|
108
|
+
/**
|
|
109
|
+
* Batch parse multiple intents (async — dengan token resolution)
|
|
110
|
+
*
|
|
111
|
+
* INPUT: Array of natural language strings
|
|
112
|
+
* OUTPUT: Promise<ParseResult[]>
|
|
113
|
+
*
|
|
114
|
+
* TODO [Phase 3]: Implement async batch parsing
|
|
115
|
+
*
|
|
116
|
+
* LOGIC:
|
|
117
|
+
* - Gunakan Promise.all() untuk parallel parsing
|
|
118
|
+
* - Setiap text di-parse via parseAsync()
|
|
119
|
+
* - Return array of results
|
|
120
|
+
*/
|
|
121
|
+
parseBatchAsync(texts: string[]): Promise<ParseResult[]>;
|
|
122
|
+
}
|
|
123
|
+
export * from "../types";
|
|
124
|
+
export { IntentParser as default };
|
|
125
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAoB,MAAM,UAAU,CAAC;AAe5E;;;;;;;;GAQG;AACH,qBAAa,YAAY;IACrB,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,MAAM,CAAyB;IAGvC,OAAO,CAAC,aAAa,CAAuB;gBAEhC,MAAM,GAAE,YAAiB;IA6BrC;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW;IAoDhC;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,WAAW;IAoDnB;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAwBpD;;;;;;;;;;;;;;;;;OAiBG;YACW,qBAAqB;IA0CnC;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE;IAI1C;;;;;;;;;;;;OAYG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CAGjE;AAGD,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,YAAY,IAAI,OAAO,EAAE,CAAC"}
|