@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.
Files changed (371) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +258 -0
  3. package/dist/config/chains.d.ts +25 -0
  4. package/dist/config/chains.d.ts.map +1 -0
  5. package/dist/config/chains.js +85 -0
  6. package/dist/config/chains.js.map +1 -0
  7. package/dist/config/default.d.ts +39 -0
  8. package/dist/config/default.d.ts.map +1 -0
  9. package/dist/config/default.js +46 -0
  10. package/dist/config/default.js.map +1 -0
  11. package/dist/config/testnets.d.ts +31 -0
  12. package/dist/config/testnets.d.ts.map +1 -0
  13. package/dist/config/testnets.js +99 -0
  14. package/dist/config/testnets.js.map +1 -0
  15. package/dist/errors/inventory-errors.d.ts +31 -0
  16. package/dist/errors/inventory-errors.d.ts.map +1 -0
  17. package/dist/errors/inventory-errors.js +45 -0
  18. package/dist/errors/inventory-errors.js.map +1 -0
  19. package/dist/errors/settlement-errors.d.ts +27 -0
  20. package/dist/errors/settlement-errors.d.ts.map +1 -0
  21. package/dist/errors/settlement-errors.js +39 -0
  22. package/dist/errors/settlement-errors.js.map +1 -0
  23. package/dist/errors/solver-errors.d.ts +45 -0
  24. package/dist/errors/solver-errors.d.ts.map +1 -0
  25. package/dist/errors/solver-errors.js +66 -0
  26. package/dist/errors/solver-errors.js.map +1 -0
  27. package/dist/index.d.ts +34 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +28 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/parser/classifiers/intent-classifier.d.ts +40 -0
  32. package/dist/parser/classifiers/intent-classifier.d.ts.map +1 -0
  33. package/dist/parser/classifiers/intent-classifier.js +72 -0
  34. package/dist/parser/classifiers/intent-classifier.js.map +1 -0
  35. package/dist/parser/extractors/action.d.ts +32 -0
  36. package/dist/parser/extractors/action.d.ts.map +1 -0
  37. package/dist/parser/extractors/action.js +72 -0
  38. package/dist/parser/extractors/action.js.map +1 -0
  39. package/dist/parser/extractors/amount.d.ts +39 -0
  40. package/dist/parser/extractors/amount.d.ts.map +1 -0
  41. package/dist/parser/extractors/amount.js +113 -0
  42. package/dist/parser/extractors/amount.js.map +1 -0
  43. package/dist/parser/extractors/constraints.d.ts +37 -0
  44. package/dist/parser/extractors/constraints.d.ts.map +1 -0
  45. package/dist/parser/extractors/constraints.js +119 -0
  46. package/dist/parser/extractors/constraints.js.map +1 -0
  47. package/dist/parser/extractors/index.d.ts +5 -0
  48. package/dist/parser/extractors/index.d.ts.map +1 -0
  49. package/dist/parser/extractors/index.js +5 -0
  50. package/dist/parser/extractors/index.js.map +1 -0
  51. package/dist/parser/extractors/token.d.ts +24 -0
  52. package/dist/parser/extractors/token.d.ts.map +1 -0
  53. package/dist/parser/extractors/token.js +124 -0
  54. package/dist/parser/extractors/token.js.map +1 -0
  55. package/dist/parser/index.d.ts +125 -0
  56. package/dist/parser/index.d.ts.map +1 -0
  57. package/dist/parser/index.js +293 -0
  58. package/dist/parser/index.js.map +1 -0
  59. package/dist/parser/template/bridge.d.ts +37 -0
  60. package/dist/parser/template/bridge.d.ts.map +1 -0
  61. package/dist/parser/template/bridge.js +80 -0
  62. package/dist/parser/template/bridge.js.map +1 -0
  63. package/dist/parser/template/claim.d.ts +15 -0
  64. package/dist/parser/template/claim.d.ts.map +1 -0
  65. package/dist/parser/template/claim.js +36 -0
  66. package/dist/parser/template/claim.js.map +1 -0
  67. package/dist/parser/template/index.d.ts +28 -0
  68. package/dist/parser/template/index.d.ts.map +1 -0
  69. package/dist/parser/template/index.js +50 -0
  70. package/dist/parser/template/index.js.map +1 -0
  71. package/dist/parser/template/nft.d.ts +3 -0
  72. package/dist/parser/template/nft.d.ts.map +1 -0
  73. package/dist/parser/template/nft.js +19 -0
  74. package/dist/parser/template/nft.js.map +1 -0
  75. package/dist/parser/template/send.d.ts +24 -0
  76. package/dist/parser/template/send.d.ts.map +1 -0
  77. package/dist/parser/template/send.js +61 -0
  78. package/dist/parser/template/send.js.map +1 -0
  79. package/dist/parser/template/swap.d.ts +3 -0
  80. package/dist/parser/template/swap.d.ts.map +1 -0
  81. package/dist/parser/template/swap.js +21 -0
  82. package/dist/parser/template/swap.js.map +1 -0
  83. package/dist/parser/template/unknown.d.ts +3 -0
  84. package/dist/parser/template/unknown.d.ts.map +1 -0
  85. package/dist/parser/template/unknown.js +11 -0
  86. package/dist/parser/template/unknown.js.map +1 -0
  87. package/dist/parser/template/yield.d.ts +3 -0
  88. package/dist/parser/template/yield.d.ts.map +1 -0
  89. package/dist/parser/template/yield.js +25 -0
  90. package/dist/parser/template/yield.js.map +1 -0
  91. package/dist/parser/utils/normalize.d.ts +41 -0
  92. package/dist/parser/utils/normalize.d.ts.map +1 -0
  93. package/dist/parser/utils/normalize.js +71 -0
  94. package/dist/parser/utils/normalize.js.map +1 -0
  95. package/dist/parser/utils/parser-helpers.d.ts +20 -0
  96. package/dist/parser/utils/parser-helpers.d.ts.map +1 -0
  97. package/dist/parser/utils/parser-helpers.js +282 -0
  98. package/dist/parser/utils/parser-helpers.js.map +1 -0
  99. package/dist/parser/validators/schema.d.ts +14 -0
  100. package/dist/parser/validators/schema.d.ts.map +1 -0
  101. package/dist/parser/validators/schema.js +81 -0
  102. package/dist/parser/validators/schema.js.map +1 -0
  103. package/dist/sdk-factory.d.ts +55 -0
  104. package/dist/sdk-factory.d.ts.map +1 -0
  105. package/dist/sdk-factory.js +49 -0
  106. package/dist/sdk-factory.js.map +1 -0
  107. package/dist/services/token-resolver.d.ts +142 -0
  108. package/dist/services/token-resolver.d.ts.map +1 -0
  109. package/dist/services/token-resolver.js +254 -0
  110. package/dist/services/token-resolver.js.map +1 -0
  111. package/dist/shared/chain-registry/chain-names.d.ts +22 -0
  112. package/dist/shared/chain-registry/chain-names.d.ts.map +1 -0
  113. package/dist/shared/chain-registry/chain-names.js +49 -0
  114. package/dist/shared/chain-registry/chain-names.js.map +1 -0
  115. package/dist/shared/chain-registry/configs/arbitrum-sepolia.d.ts +9 -0
  116. package/dist/shared/chain-registry/configs/arbitrum-sepolia.d.ts.map +1 -0
  117. package/dist/shared/chain-registry/configs/arbitrum-sepolia.js +9 -0
  118. package/dist/shared/chain-registry/configs/arbitrum-sepolia.js.map +1 -0
  119. package/dist/shared/chain-registry/configs/base-sepolia.d.ts +9 -0
  120. package/dist/shared/chain-registry/configs/base-sepolia.d.ts.map +1 -0
  121. package/dist/shared/chain-registry/configs/base-sepolia.js +9 -0
  122. package/dist/shared/chain-registry/configs/base-sepolia.js.map +1 -0
  123. package/dist/shared/chain-registry/configs/ethereum.d.ts +7 -0
  124. package/dist/shared/chain-registry/configs/ethereum.d.ts.map +1 -0
  125. package/dist/shared/chain-registry/configs/ethereum.js +7 -0
  126. package/dist/shared/chain-registry/configs/ethereum.js.map +1 -0
  127. package/dist/shared/chain-registry/configs/polygon.d.ts +7 -0
  128. package/dist/shared/chain-registry/configs/polygon.d.ts.map +1 -0
  129. package/dist/shared/chain-registry/configs/polygon.js +7 -0
  130. package/dist/shared/chain-registry/configs/polygon.js.map +1 -0
  131. package/dist/shared/chain-registry/configs/sepolia.d.ts +9 -0
  132. package/dist/shared/chain-registry/configs/sepolia.d.ts.map +1 -0
  133. package/dist/shared/chain-registry/configs/sepolia.js +9 -0
  134. package/dist/shared/chain-registry/configs/sepolia.js.map +1 -0
  135. package/dist/shared/chain-registry/configs/unichain-sepolia.d.ts +9 -0
  136. package/dist/shared/chain-registry/configs/unichain-sepolia.d.ts.map +1 -0
  137. package/dist/shared/chain-registry/configs/unichain-sepolia.js +9 -0
  138. package/dist/shared/chain-registry/configs/unichain-sepolia.js.map +1 -0
  139. package/dist/shared/chain-registry/registry.d.ts +50 -0
  140. package/dist/shared/chain-registry/registry.d.ts.map +1 -0
  141. package/dist/shared/chain-registry/registry.js +72 -0
  142. package/dist/shared/chain-registry/registry.js.map +1 -0
  143. package/dist/shared/rpc/provider-manager.d.ts +111 -0
  144. package/dist/shared/rpc/provider-manager.d.ts.map +1 -0
  145. package/dist/shared/rpc/provider-manager.js +116 -0
  146. package/dist/shared/rpc/provider-manager.js.map +1 -0
  147. package/dist/shared/rpc/viem-provider.d.ts +78 -0
  148. package/dist/shared/rpc/viem-provider.d.ts.map +1 -0
  149. package/dist/shared/rpc/viem-provider.js +187 -0
  150. package/dist/shared/rpc/viem-provider.js.map +1 -0
  151. package/dist/shared/token-registry/enrichment.d.ts +48 -0
  152. package/dist/shared/token-registry/enrichment.d.ts.map +1 -0
  153. package/dist/shared/token-registry/enrichment.js +69 -0
  154. package/dist/shared/token-registry/enrichment.js.map +1 -0
  155. package/dist/shared/token-registry/registry.d.ts +119 -0
  156. package/dist/shared/token-registry/registry.d.ts.map +1 -0
  157. package/dist/shared/token-registry/registry.js +200 -0
  158. package/dist/shared/token-registry/registry.js.map +1 -0
  159. package/dist/shared/utils/erc20-utils.d.ts +24 -0
  160. package/dist/shared/utils/erc20-utils.d.ts.map +1 -0
  161. package/dist/shared/utils/erc20-utils.js +31 -0
  162. package/dist/shared/utils/erc20-utils.js.map +1 -0
  163. package/dist/shared/utils/retry.d.ts +57 -0
  164. package/dist/shared/utils/retry.d.ts.map +1 -0
  165. package/dist/shared/utils/retry.js +104 -0
  166. package/dist/shared/utils/retry.js.map +1 -0
  167. package/dist/shared/wallet-manager/viem-signer.d.ts +68 -0
  168. package/dist/shared/wallet-manager/viem-signer.d.ts.map +1 -0
  169. package/dist/shared/wallet-manager/viem-signer.js +116 -0
  170. package/dist/shared/wallet-manager/viem-signer.js.map +1 -0
  171. package/dist/shared/wallet-manager/wallet-manager.d.ts +96 -0
  172. package/dist/shared/wallet-manager/wallet-manager.d.ts.map +1 -0
  173. package/dist/shared/wallet-manager/wallet-manager.js +104 -0
  174. package/dist/shared/wallet-manager/wallet-manager.js.map +1 -0
  175. package/dist/solver/agent/agent-config.d.ts +62 -0
  176. package/dist/solver/agent/agent-config.d.ts.map +1 -0
  177. package/dist/solver/agent/agent-config.js +59 -0
  178. package/dist/solver/agent/agent-config.js.map +1 -0
  179. package/dist/solver/agent/index.d.ts +6 -0
  180. package/dist/solver/agent/index.d.ts.map +1 -0
  181. package/dist/solver/agent/index.js +6 -0
  182. package/dist/solver/agent/index.js.map +1 -0
  183. package/dist/solver/agent/liquidity-agent.d.ts +118 -0
  184. package/dist/solver/agent/liquidity-agent.d.ts.map +1 -0
  185. package/dist/solver/agent/liquidity-agent.js +285 -0
  186. package/dist/solver/agent/liquidity-agent.js.map +1 -0
  187. package/dist/solver/contracts/intent-settlement/index.d.ts +2 -0
  188. package/dist/solver/contracts/intent-settlement/index.d.ts.map +1 -0
  189. package/dist/solver/contracts/intent-settlement/index.js +2 -0
  190. package/dist/solver/contracts/intent-settlement/index.js.map +1 -0
  191. package/dist/solver/contracts/intent-settlement/intent-settlement.d.ts +22 -0
  192. package/dist/solver/contracts/intent-settlement/intent-settlement.d.ts.map +1 -0
  193. package/dist/solver/contracts/intent-settlement/intent-settlement.js +58 -0
  194. package/dist/solver/contracts/intent-settlement/intent-settlement.js.map +1 -0
  195. package/dist/solver/contracts/intent-settlement/viem-settlement-contract.d.ts +226 -0
  196. package/dist/solver/contracts/intent-settlement/viem-settlement-contract.d.ts.map +1 -0
  197. package/dist/solver/contracts/intent-settlement/viem-settlement-contract.js +204 -0
  198. package/dist/solver/contracts/intent-settlement/viem-settlement-contract.js.map +1 -0
  199. package/dist/solver/index.d.ts +87 -0
  200. package/dist/solver/index.d.ts.map +1 -0
  201. package/dist/solver/index.js +167 -0
  202. package/dist/solver/index.js.map +1 -0
  203. package/dist/solver/inventory/index.d.ts +7 -0
  204. package/dist/solver/inventory/index.d.ts.map +1 -0
  205. package/dist/solver/inventory/index.js +7 -0
  206. package/dist/solver/inventory/index.js.map +1 -0
  207. package/dist/solver/inventory/inventory-manager.d.ts +135 -0
  208. package/dist/solver/inventory/inventory-manager.d.ts.map +1 -0
  209. package/dist/solver/inventory/inventory-manager.js +323 -0
  210. package/dist/solver/inventory/inventory-manager.js.map +1 -0
  211. package/dist/solver/inventory/inventory-monitor.d.ts +72 -0
  212. package/dist/solver/inventory/inventory-monitor.d.ts.map +1 -0
  213. package/dist/solver/inventory/inventory-monitor.js +123 -0
  214. package/dist/solver/inventory/inventory-monitor.js.map +1 -0
  215. package/dist/solver/inventory/rebalancer.d.ts +78 -0
  216. package/dist/solver/inventory/rebalancer.d.ts.map +1 -0
  217. package/dist/solver/inventory/rebalancer.js +210 -0
  218. package/dist/solver/inventory/rebalancer.js.map +1 -0
  219. package/dist/solver/mempool/index.d.ts +8 -0
  220. package/dist/solver/mempool/index.d.ts.map +1 -0
  221. package/dist/solver/mempool/index.js +8 -0
  222. package/dist/solver/mempool/index.js.map +1 -0
  223. package/dist/solver/mempool/intent-filter.d.ts +49 -0
  224. package/dist/solver/mempool/intent-filter.d.ts.map +1 -0
  225. package/dist/solver/mempool/intent-filter.js +75 -0
  226. package/dist/solver/mempool/intent-filter.js.map +1 -0
  227. package/dist/solver/mempool/mempool-client.d.ts +105 -0
  228. package/dist/solver/mempool/mempool-client.d.ts.map +1 -0
  229. package/dist/solver/mempool/mempool-client.js +161 -0
  230. package/dist/solver/mempool/mempool-client.js.map +1 -0
  231. package/dist/solver/mempool/mempool-monitor.d.ts +71 -0
  232. package/dist/solver/mempool/mempool-monitor.d.ts.map +1 -0
  233. package/dist/solver/mempool/mempool-monitor.js +127 -0
  234. package/dist/solver/mempool/mempool-monitor.js.map +1 -0
  235. package/dist/solver/mempool/solution-submitter.d.ts +41 -0
  236. package/dist/solver/mempool/solution-submitter.d.ts.map +1 -0
  237. package/dist/solver/mempool/solution-submitter.js +71 -0
  238. package/dist/solver/mempool/solution-submitter.js.map +1 -0
  239. package/dist/solver/monitoring/alert-manager.d.ts +43 -0
  240. package/dist/solver/monitoring/alert-manager.d.ts.map +1 -0
  241. package/dist/solver/monitoring/alert-manager.js +69 -0
  242. package/dist/solver/monitoring/alert-manager.js.map +1 -0
  243. package/dist/solver/monitoring/health-checker.d.ts +53 -0
  244. package/dist/solver/monitoring/health-checker.d.ts.map +1 -0
  245. package/dist/solver/monitoring/health-checker.js +94 -0
  246. package/dist/solver/monitoring/health-checker.js.map +1 -0
  247. package/dist/solver/monitoring/index.d.ts +7 -0
  248. package/dist/solver/monitoring/index.d.ts.map +1 -0
  249. package/dist/solver/monitoring/index.js +7 -0
  250. package/dist/solver/monitoring/index.js.map +1 -0
  251. package/dist/solver/monitoring/profit-tracker.d.ts +47 -0
  252. package/dist/solver/monitoring/profit-tracker.d.ts.map +1 -0
  253. package/dist/solver/monitoring/profit-tracker.js +112 -0
  254. package/dist/solver/monitoring/profit-tracker.js.map +1 -0
  255. package/dist/solver/pricing/dynamic-pricing.d.ts +86 -0
  256. package/dist/solver/pricing/dynamic-pricing.d.ts.map +1 -0
  257. package/dist/solver/pricing/dynamic-pricing.js +189 -0
  258. package/dist/solver/pricing/dynamic-pricing.js.map +1 -0
  259. package/dist/solver/pricing/fee-calculator.d.ts +101 -0
  260. package/dist/solver/pricing/fee-calculator.d.ts.map +1 -0
  261. package/dist/solver/pricing/fee-calculator.js +149 -0
  262. package/dist/solver/pricing/fee-calculator.js.map +1 -0
  263. package/dist/solver/pricing/index.d.ts +7 -0
  264. package/dist/solver/pricing/index.d.ts.map +1 -0
  265. package/dist/solver/pricing/index.js +7 -0
  266. package/dist/solver/pricing/index.js.map +1 -0
  267. package/dist/solver/pricing/slippage-capture.d.ts +47 -0
  268. package/dist/solver/pricing/slippage-capture.d.ts.map +1 -0
  269. package/dist/solver/pricing/slippage-capture.js +63 -0
  270. package/dist/solver/pricing/slippage-capture.js.map +1 -0
  271. package/dist/solver/protocols/aggregators/lifi.d.ts +109 -0
  272. package/dist/solver/protocols/aggregators/lifi.d.ts.map +1 -0
  273. package/dist/solver/protocols/aggregators/lifi.js +110 -0
  274. package/dist/solver/protocols/aggregators/lifi.js.map +1 -0
  275. package/dist/solver/protocols/aggregators/swing.d.ts +67 -0
  276. package/dist/solver/protocols/aggregators/swing.d.ts.map +1 -0
  277. package/dist/solver/protocols/aggregators/swing.js +212 -0
  278. package/dist/solver/protocols/aggregators/swing.js.map +1 -0
  279. package/dist/solver/protocols/base-protocol.d.ts +42 -0
  280. package/dist/solver/protocols/base-protocol.d.ts.map +1 -0
  281. package/dist/solver/protocols/base-protocol.js +16 -0
  282. package/dist/solver/protocols/base-protocol.js.map +1 -0
  283. package/dist/solver/protocols/index.d.ts +10 -0
  284. package/dist/solver/protocols/index.d.ts.map +1 -0
  285. package/dist/solver/protocols/index.js +10 -0
  286. package/dist/solver/protocols/index.js.map +1 -0
  287. package/dist/solver/protocols/lending/aave.d.ts +51 -0
  288. package/dist/solver/protocols/lending/aave.d.ts.map +1 -0
  289. package/dist/solver/protocols/lending/aave.js +172 -0
  290. package/dist/solver/protocols/lending/aave.js.map +1 -0
  291. package/dist/solver/protocols/protocol-registry.d.ts +28 -0
  292. package/dist/solver/protocols/protocol-registry.d.ts.map +1 -0
  293. package/dist/solver/protocols/protocol-registry.js +40 -0
  294. package/dist/solver/protocols/protocol-registry.js.map +1 -0
  295. package/dist/solver/settlement/index.d.ts +7 -0
  296. package/dist/solver/settlement/index.d.ts.map +1 -0
  297. package/dist/solver/settlement/index.js +7 -0
  298. package/dist/solver/settlement/index.js.map +1 -0
  299. package/dist/solver/settlement/live-settlement-manager.d.ts +62 -0
  300. package/dist/solver/settlement/live-settlement-manager.d.ts.map +1 -0
  301. package/dist/solver/settlement/live-settlement-manager.js +68 -0
  302. package/dist/solver/settlement/live-settlement-manager.js.map +1 -0
  303. package/dist/solver/settlement/proof-generator.d.ts +48 -0
  304. package/dist/solver/settlement/proof-generator.d.ts.map +1 -0
  305. package/dist/solver/settlement/proof-generator.js +100 -0
  306. package/dist/solver/settlement/proof-generator.js.map +1 -0
  307. package/dist/solver/settlement/proof-verifier.d.ts +31 -0
  308. package/dist/solver/settlement/proof-verifier.d.ts.map +1 -0
  309. package/dist/solver/settlement/proof-verifier.js +46 -0
  310. package/dist/solver/settlement/proof-verifier.js.map +1 -0
  311. package/dist/solver/settlement/settlement-manager.d.ts +97 -0
  312. package/dist/solver/settlement/settlement-manager.d.ts.map +1 -0
  313. package/dist/solver/settlement/settlement-manager.js +220 -0
  314. package/dist/solver/settlement/settlement-manager.js.map +1 -0
  315. package/dist/solver/types/agent.d.ts +92 -0
  316. package/dist/solver/types/agent.d.ts.map +1 -0
  317. package/dist/solver/types/agent.js +8 -0
  318. package/dist/solver/types/agent.js.map +1 -0
  319. package/dist/solver/types/execution.d.ts +70 -0
  320. package/dist/solver/types/execution.d.ts.map +1 -0
  321. package/dist/solver/types/execution.js +7 -0
  322. package/dist/solver/types/execution.js.map +1 -0
  323. package/dist/solver/types/index.d.ts +13 -0
  324. package/dist/solver/types/index.d.ts.map +1 -0
  325. package/dist/solver/types/index.js +13 -0
  326. package/dist/solver/types/index.js.map +1 -0
  327. package/dist/solver/types/intent.d.ts +82 -0
  328. package/dist/solver/types/intent.d.ts.map +1 -0
  329. package/dist/solver/types/intent.js +33 -0
  330. package/dist/solver/types/intent.js.map +1 -0
  331. package/dist/solver/types/inventory.d.ts +83 -0
  332. package/dist/solver/types/inventory.d.ts.map +1 -0
  333. package/dist/solver/types/inventory.js +8 -0
  334. package/dist/solver/types/inventory.js.map +1 -0
  335. package/dist/solver/types/pricing.d.ts +59 -0
  336. package/dist/solver/types/pricing.d.ts.map +1 -0
  337. package/dist/solver/types/pricing.js +8 -0
  338. package/dist/solver/types/pricing.js.map +1 -0
  339. package/dist/solver/types/settlement.d.ts +98 -0
  340. package/dist/solver/types/settlement.d.ts.map +1 -0
  341. package/dist/solver/types/settlement.js +9 -0
  342. package/dist/solver/types/settlement.js.map +1 -0
  343. package/dist/types/chain.d.ts +66 -0
  344. package/dist/types/chain.d.ts.map +1 -0
  345. package/dist/types/chain.js +7 -0
  346. package/dist/types/chain.js.map +1 -0
  347. package/dist/types/common.d.ts +44 -0
  348. package/dist/types/common.d.ts.map +1 -0
  349. package/dist/types/common.js +8 -0
  350. package/dist/types/common.js.map +1 -0
  351. package/dist/types/entities.d.ts +61 -0
  352. package/dist/types/entities.d.ts.map +1 -0
  353. package/dist/types/entities.js +2 -0
  354. package/dist/types/entities.js.map +1 -0
  355. package/dist/types/index.d.ts +44 -0
  356. package/dist/types/index.d.ts.map +1 -0
  357. package/dist/types/index.js +8 -0
  358. package/dist/types/index.js.map +1 -0
  359. package/dist/types/intent.d.ts +70 -0
  360. package/dist/types/intent.d.ts.map +1 -0
  361. package/dist/types/intent.js +2 -0
  362. package/dist/types/intent.js.map +1 -0
  363. package/dist/types/templates.d.ts +18 -0
  364. package/dist/types/templates.d.ts.map +1 -0
  365. package/dist/types/templates.js +2 -0
  366. package/dist/types/templates.js.map +1 -0
  367. package/dist/types/token.d.ts +132 -0
  368. package/dist/types/token.d.ts.map +1 -0
  369. package/dist/types/token.js +8 -0
  370. package/dist/types/token.js.map +1 -0
  371. 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,5 @@
1
+ export { AmountExtractor } from "./amount";
2
+ export { TokenExtractor } from "./token";
3
+ export { ActionExtractor } from "./action";
4
+ export { ConstraintExtractor } from "./constraints";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -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,5 @@
1
+ export { AmountExtractor } from "./amount";
2
+ export { TokenExtractor } from "./token";
3
+ export { ActionExtractor } from "./action";
4
+ export { ConstraintExtractor } from "./constraints";
5
+ //# sourceMappingURL=index.js.map
@@ -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"}