@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,47 @@
1
+ /**
2
+ * Profit Tracker — Phase H
3
+ *
4
+ * Tracks expected vs actual profit for solved intents and provides
5
+ * aggregate statistics for the LiquidityAgent operator.
6
+ *
7
+ * Used by: LiquidityAgent
8
+ */
9
+ import type { PricingResult } from "../types/pricing";
10
+ export interface ProfitRecord {
11
+ intentId: string;
12
+ pricing: PricingResult;
13
+ success?: boolean;
14
+ actualGasUsed?: string;
15
+ netProfit?: string;
16
+ timestamp: number;
17
+ }
18
+ export interface ProfitStats {
19
+ totalProfit: string;
20
+ totalGasCost: string;
21
+ successCount: number;
22
+ failCount: number;
23
+ avgProfit: string;
24
+ totalAttempts: number;
25
+ }
26
+ export declare class ProfitTracker {
27
+ private records;
28
+ /** Timestamp of the first ever recordAttempt call — used for ROI period */
29
+ private startedAt;
30
+ /**
31
+ * Record an intent that the agent is attempting to solve
32
+ */
33
+ recordAttempt(intentId: string, pricing: PricingResult): void;
34
+ /**
35
+ * Record the final result of an attempted intent
36
+ */
37
+ recordResult(intentId: string, success: boolean, gasUsed?: string): void;
38
+ /**
39
+ * Get aggregate statistics
40
+ */
41
+ getStats(periodMs?: number): ProfitStats;
42
+ /**
43
+ * Get annualized ROI percentage based on capital deployed
44
+ */
45
+ getROI(capitalDeployed: string): number;
46
+ }
47
+ //# sourceMappingURL=profit-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profit-tracker.d.ts","sourceRoot":"","sources":["../../../src/solver/monitoring/profit-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,WAAW,YAAY;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,aAAa;IACtB,OAAO,CAAC,OAAO,CAAwC;IACvD,2EAA2E;IAC3E,OAAO,CAAC,SAAS,CAAuB;IAExC;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI;IAkB7D;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAqBxE;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW;IAmCxC;;OAEG;IACH,MAAM,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM;CAuB1C"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Profit Tracker — Phase H
3
+ *
4
+ * Tracks expected vs actual profit for solved intents and provides
5
+ * aggregate statistics for the LiquidityAgent operator.
6
+ *
7
+ * Used by: LiquidityAgent
8
+ */
9
+ export class ProfitTracker {
10
+ records = new Map();
11
+ /** Timestamp of the first ever recordAttempt call — used for ROI period */
12
+ startedAt = null;
13
+ /**
14
+ * Record an intent that the agent is attempting to solve
15
+ */
16
+ recordAttempt(intentId, pricing) {
17
+ // Guard: warn if this intent is already tracked but not yet resolved
18
+ const existing = this.records.get(intentId);
19
+ if (existing && existing.success === undefined) {
20
+ console.warn(`[ProfitTracker] Overwriting in-flight record for intent: ${intentId}`);
21
+ }
22
+ if (this.startedAt === null) {
23
+ this.startedAt = Date.now();
24
+ }
25
+ this.records.set(intentId, {
26
+ intentId,
27
+ pricing,
28
+ timestamp: Date.now(),
29
+ });
30
+ }
31
+ /**
32
+ * Record the final result of an attempted intent
33
+ */
34
+ recordResult(intentId, success, gasUsed) {
35
+ const record = this.records.get(intentId);
36
+ if (!record) {
37
+ console.warn(`[ProfitTracker] Cannot record result for unknown intent: ${intentId}`);
38
+ return;
39
+ }
40
+ record.success = success;
41
+ record.actualGasUsed = gasUsed ?? record.pricing.gasCost;
42
+ if (success) {
43
+ // Net Profit = Total Fee Collected - Actual Gas Spent
44
+ const totalFee = BigInt(record.pricing.totalFee);
45
+ const actualGas = BigInt(record.actualGasUsed);
46
+ record.netProfit = (totalFee - actualGas).toString();
47
+ }
48
+ else {
49
+ // Unsuccessful translates to 0 net revenue (with actual loss = gas wasted)
50
+ record.netProfit = "0";
51
+ }
52
+ }
53
+ /**
54
+ * Get aggregate statistics
55
+ */
56
+ getStats(periodMs) {
57
+ let totalProfit = 0n;
58
+ let totalGasCost = 0n;
59
+ let successCount = 0;
60
+ let failCount = 0;
61
+ const now = Date.now();
62
+ for (const record of this.records.values()) {
63
+ if (periodMs && now - record.timestamp > periodMs) {
64
+ continue;
65
+ }
66
+ if (record.success === true) {
67
+ successCount++;
68
+ totalProfit += BigInt(record.netProfit || "0");
69
+ totalGasCost += BigInt(record.actualGasUsed || "0");
70
+ }
71
+ else if (record.success === false) {
72
+ failCount++;
73
+ }
74
+ }
75
+ const totalAttempts = successCount + failCount;
76
+ const avgProfit = successCount > 0 ? (totalProfit / BigInt(successCount)).toString() : "0";
77
+ return {
78
+ totalProfit: totalProfit.toString(),
79
+ totalGasCost: totalGasCost.toString(),
80
+ successCount,
81
+ failCount,
82
+ avgProfit,
83
+ totalAttempts,
84
+ };
85
+ }
86
+ /**
87
+ * Get annualized ROI percentage based on capital deployed
88
+ */
89
+ getROI(capitalDeployed) {
90
+ const capital = BigInt(capitalDeployed);
91
+ if (capital === 0n)
92
+ return 0;
93
+ const stats = this.getStats();
94
+ if (stats.totalProfit === "0" || this.startedAt === null)
95
+ return 0;
96
+ // Safe precision: divide big-int profit by capital without converting
97
+ // both to float until we have the ratio (which is << 2^53 in practice)
98
+ const profitBn = BigInt(stats.totalProfit);
99
+ // Represent ratio as numerator/denominator pair, then convert to float
100
+ const ratioNumerator = Number(profitBn * 10000000n / capital); // 7 decimal places of room
101
+ const roiPeriod = ratioNumerator / 10_000_000;
102
+ // Use the tracked startedAt so we only iterate records once (in getStats)
103
+ const elapsedMs = Date.now() - this.startedAt;
104
+ if (elapsedMs === 0)
105
+ return 0;
106
+ const yearsElapsed = elapsedMs / (365 * 24 * 3600 * 1000);
107
+ if (yearsElapsed === 0)
108
+ return 0;
109
+ return (roiPeriod / yearsElapsed) * 100; // Returns percentage %
110
+ }
111
+ }
112
+ //# sourceMappingURL=profit-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profit-tracker.js","sourceRoot":"","sources":["../../../src/solver/monitoring/profit-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Dynamic Pricing
3
+ *
4
+ * Menyesuaikan fee multiplier berdasarkan kondisi inventory saat ini.
5
+ * Semakin langka inventory di chain tertentu, semakin tinggi harga yang dikenakan.
6
+ *
7
+ * TUJUAN:
8
+ * - Mencegah pengurasan inventory satu chain secara cepat (flood protection)
9
+ * - Mendorong rebalancing secara ekonomi: harga tinggi → solver rebalance lebih cepat
10
+ * - Memberikan keunggulan kompetitif di kondisi surplus (harga lebih rendah = lebih sering menang)
11
+ *
12
+ * INVENTORY MULTIPLIER TABLE:
13
+ * ≥ 80% capacity → 0.8x (surplus, bersaing aggressive)
14
+ * 50–79% capacity → 1.0x (normal)
15
+ * 20–49% capacity → 1.5x (low, mulai naikkan harga)
16
+ * < 20% capacity → 2.0x (critical, hampir habis)
17
+ *
18
+ * FORMULA:
19
+ * finalFee = baseFee * inventoryMultiplier
20
+ *
21
+ * NOTE: Multiplier diterapkan HANYA ke baseFee, bukan ke gasCost.
22
+ * gasCost selalu tetap (reflek biaya aktual, bukan inventory state).
23
+ */
24
+ import type { PricingConfig, PricingResult } from "../types/pricing";
25
+ import type { SolverIntent } from "../types/intent";
26
+ import type { ChainId } from "../../types/common";
27
+ import type { InventoryManager } from "../inventory/inventory-manager";
28
+ export declare class DynamicPricing {
29
+ private readonly config;
30
+ private readonly inventoryManager;
31
+ private readonly feeCalculator;
32
+ private readonly slippageCapture;
33
+ constructor(config: PricingConfig, inventoryManager: InventoryManager);
34
+ /**
35
+ * Hitung harga final untuk sebuah intent dengan dynamic multiplier.
36
+ *
37
+ * Langkah:
38
+ * 1. Extract params dari SolverIntent (amount, sourceChain, targetChain, maxSlippage)
39
+ * 2. Hitung base pricing via FeeCalculator
40
+ * 3. Apply inventory multiplier dari getInventoryMultiplier()
41
+ * 4. Re-compute totalFee dan solverProfit dengan nilai yang sudah di-adjust
42
+ *
43
+ * @param intent - SolverIntent yang akan di-price
44
+ * @returns PricingResult dengan multiplier sudah diterapkan
45
+ */
46
+ getPrice(intent: SolverIntent): PricingResult;
47
+ /**
48
+ * Tentukan inventory multiplier (sebagai number) berdasarkan kapasitas chain.
49
+ *
50
+ * "Kapasitas" didefinisikan sebagai proporsi balance chain ini terhadap total semua chain.
51
+ * capacity = getBalance(chainId, token) / getTotalBalance(token)
52
+ *
53
+ * MULTIPLIER TIERS:
54
+ * capacity >= 0.8 → 0.8 (surplus mode)
55
+ * capacity >= 0.5 → 1.0 (normal)
56
+ * capacity >= 0.2 → 1.5 (low inventory)
57
+ * capacity < 0.2 → 2.0 (critical)
58
+ *
59
+ * @param chainId - Chain yang akan di-check inventory-nya
60
+ * @param amount - Amount yang dibutuhkan (unused, tersedia untuk future use)
61
+ * @param token - Token symbol untuk inventory check (default: "USDC")
62
+ * @returns Multiplier float (0.8 / 1.0 / 1.5 / 2.0)
63
+ */
64
+ getInventoryMultiplier(chainId: ChainId, amount: bigint, token?: string): number;
65
+ /**
66
+ * Cek apakah inventory di chain tertentu sudah terlalu kritis
67
+ * untuk menerima intent baru (reject outright, bukan hanya naikkan harga).
68
+ *
69
+ * Hard limit: inventory < 5% capacity (critical floor).
70
+ * Bahkan dengan multiplier 2.0x, menerima intent di kondisi ini
71
+ * berisiko menguras habis inventory.
72
+ *
73
+ * @param chainId - Chain yang akan di-check
74
+ * @param amount - Amount intent yang diminta
75
+ * @param token - Token symbol untuk inventory check (default: "USDC")
76
+ * @returns true jika harus di-reject, false jika aman diterima
77
+ */
78
+ shouldReject(chainId: ChainId, amount: bigint, token?: string): boolean;
79
+ /**
80
+ * Kembalikan tier (multiplierNum, multiplierDen, value) untuk chain berdasarkan kapasitas.
81
+ * Menggunakan BigInt fraction (num/den) untuk menghindari float precision loss
82
+ * saat diaplikasikan ke baseFee yang mungkin sangat besar (token 18 desimal).
83
+ */
84
+ private _getTierForChain;
85
+ }
86
+ //# sourceMappingURL=dynamic-pricing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-pricing.d.ts","sourceRoot":"","sources":["../../../src/solver/pricing/dynamic-pricing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AA6BvE,qBAAa,cAAc;IAKnB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IALrC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;gBAG7B,MAAM,EAAE,aAAa,EACrB,gBAAgB,EAAE,gBAAgB;IAUvD;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,aAAa;IAsD7C;;;;;;;;;;;;;;;;OAgBG;IACH,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,SAA0B,GAAG,MAAM;IAIjG;;;;;;;;;;;;OAYG;IACH,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,SAA0B,GAAG,OAAO;IAsBxF;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;CAiB3B"}
@@ -0,0 +1,189 @@
1
+ /**
2
+ * Dynamic Pricing
3
+ *
4
+ * Menyesuaikan fee multiplier berdasarkan kondisi inventory saat ini.
5
+ * Semakin langka inventory di chain tertentu, semakin tinggi harga yang dikenakan.
6
+ *
7
+ * TUJUAN:
8
+ * - Mencegah pengurasan inventory satu chain secara cepat (flood protection)
9
+ * - Mendorong rebalancing secara ekonomi: harga tinggi → solver rebalance lebih cepat
10
+ * - Memberikan keunggulan kompetitif di kondisi surplus (harga lebih rendah = lebih sering menang)
11
+ *
12
+ * INVENTORY MULTIPLIER TABLE:
13
+ * ≥ 80% capacity → 0.8x (surplus, bersaing aggressive)
14
+ * 50–79% capacity → 1.0x (normal)
15
+ * 20–49% capacity → 1.5x (low, mulai naikkan harga)
16
+ * < 20% capacity → 2.0x (critical, hampir habis)
17
+ *
18
+ * FORMULA:
19
+ * finalFee = baseFee * inventoryMultiplier
20
+ *
21
+ * NOTE: Multiplier diterapkan HANYA ke baseFee, bukan ke gasCost.
22
+ * gasCost selalu tetap (reflek biaya aktual, bukan inventory state).
23
+ */
24
+ import { FeeCalculator } from "./fee-calculator";
25
+ import { SlippageCapture } from "./slippage-capture";
26
+ // ─────────────────────────────────────────────
27
+ // Internal Helpers
28
+ // ─────────────────────────────────────────────
29
+ /**
30
+ * Inventory tier definitions.
31
+ * Each tier has a capacity threshold (inclusive lower bound) and a multiplier.
32
+ * Tiers are checked from highest to lowest.
33
+ *
34
+ * Multiplier is expressed as [numerator, denominator] to enable lossless BigInt math.
35
+ * e.g. 0.8x → [8, 10], 1.5x → [15, 10], 2.0x → [20, 10]
36
+ */
37
+ const INVENTORY_TIERS = [
38
+ { threshold: 0.8, multiplierNum: 8n, multiplierDen: 10n, value: 0.8 },
39
+ { threshold: 0.5, multiplierNum: 10n, multiplierDen: 10n, value: 1.0 },
40
+ { threshold: 0.2, multiplierNum: 15n, multiplierDen: 10n, value: 1.5 },
41
+ { threshold: 0, multiplierNum: 20n, multiplierDen: 10n, value: 2.0 }, // critical fallback
42
+ ];
43
+ /** Capacity below this triggers hard rejection regardless of price */
44
+ const CRITICAL_CAPACITY_FLOOR = 0.05;
45
+ /** Default settlement token for inventory checks */
46
+ const DEFAULT_INVENTORY_TOKEN = "USDC";
47
+ export class DynamicPricing {
48
+ config;
49
+ inventoryManager;
50
+ feeCalculator;
51
+ slippageCapture;
52
+ constructor(config, inventoryManager) {
53
+ this.config = config;
54
+ this.inventoryManager = inventoryManager;
55
+ this.feeCalculator = new FeeCalculator(config);
56
+ this.slippageCapture = new SlippageCapture(config);
57
+ }
58
+ // ─────────────────────────────────────────────
59
+ // Public API
60
+ // ─────────────────────────────────────────────
61
+ /**
62
+ * Hitung harga final untuk sebuah intent dengan dynamic multiplier.
63
+ *
64
+ * Langkah:
65
+ * 1. Extract params dari SolverIntent (amount, sourceChain, targetChain, maxSlippage)
66
+ * 2. Hitung base pricing via FeeCalculator
67
+ * 3. Apply inventory multiplier dari getInventoryMultiplier()
68
+ * 4. Re-compute totalFee dan solverProfit dengan nilai yang sudah di-adjust
69
+ *
70
+ * @param intent - SolverIntent yang akan di-price
71
+ * @returns PricingResult dengan multiplier sudah diterapkan
72
+ */
73
+ getPrice(intent) {
74
+ // 1. Extract intent parameters
75
+ const params = intent.parsedIntent.parameters;
76
+ if (intent.parsedIntent.intentType !== "bridge") {
77
+ throw new Error(`Unsupported intent type for pricing: ${intent.parsedIntent.intentType}`);
78
+ }
79
+ if (!params.inputAmount || !params.inputToken || !params.sourceChain || !params.targetChain) {
80
+ throw new Error("Invalid bridge intent: missing required parameters");
81
+ }
82
+ const amount = BigInt(params.inputAmount);
83
+ const sourceChain = Number(params.sourceChain);
84
+ const targetChain = Number(params.targetChain);
85
+ const maxSlippageBps = intent.parsedIntent.constraints.maxSlippage ?? 100;
86
+ // Use the intent's token symbol for inventory checks (default to USDC for stablecoins)
87
+ const token = typeof params.inputToken === "string" ? params.inputToken : DEFAULT_INVENTORY_TOKEN;
88
+ // 2. Get base fees from FeeCalculator
89
+ const rawPricing = this.feeCalculator.calculate({
90
+ amount,
91
+ sourceChain,
92
+ targetChain,
93
+ token,
94
+ maxSlippageBps,
95
+ });
96
+ // 3. Apply inventory multiplier using BigInt arithmetic (no float precision loss)
97
+ const { multiplierNum, multiplierDen } = this._getTierForChain(targetChain, token);
98
+ const baseFeeVal = BigInt(rawPricing.baseFee);
99
+ const adjustedBaseFee = (baseFeeVal * multiplierNum) / multiplierDen;
100
+ // 4. Reconstruct totals with adjusted base fee
101
+ const gasCost = BigInt(rawPricing.gasCost);
102
+ const slippageCapture = BigInt(rawPricing.slippageCapture);
103
+ const totalFee = adjustedBaseFee + gasCost + slippageCapture;
104
+ let userReceives = amount - totalFee;
105
+ if (userReceives < 0n)
106
+ userReceives = 0n;
107
+ const solverProfit = totalFee - gasCost;
108
+ return {
109
+ baseFee: adjustedBaseFee.toString(),
110
+ gasCost: gasCost.toString(),
111
+ slippageCapture: slippageCapture.toString(),
112
+ totalFee: totalFee.toString(),
113
+ userPays: amount.toString(),
114
+ userReceives: userReceives.toString(),
115
+ solverProfit: solverProfit.toString(),
116
+ };
117
+ }
118
+ /**
119
+ * Tentukan inventory multiplier (sebagai number) berdasarkan kapasitas chain.
120
+ *
121
+ * "Kapasitas" didefinisikan sebagai proporsi balance chain ini terhadap total semua chain.
122
+ * capacity = getBalance(chainId, token) / getTotalBalance(token)
123
+ *
124
+ * MULTIPLIER TIERS:
125
+ * capacity >= 0.8 → 0.8 (surplus mode)
126
+ * capacity >= 0.5 → 1.0 (normal)
127
+ * capacity >= 0.2 → 1.5 (low inventory)
128
+ * capacity < 0.2 → 2.0 (critical)
129
+ *
130
+ * @param chainId - Chain yang akan di-check inventory-nya
131
+ * @param amount - Amount yang dibutuhkan (unused, tersedia untuk future use)
132
+ * @param token - Token symbol untuk inventory check (default: "USDC")
133
+ * @returns Multiplier float (0.8 / 1.0 / 1.5 / 2.0)
134
+ */
135
+ getInventoryMultiplier(chainId, amount, token = DEFAULT_INVENTORY_TOKEN) {
136
+ return this._getTierForChain(chainId, token).value;
137
+ }
138
+ /**
139
+ * Cek apakah inventory di chain tertentu sudah terlalu kritis
140
+ * untuk menerima intent baru (reject outright, bukan hanya naikkan harga).
141
+ *
142
+ * Hard limit: inventory < 5% capacity (critical floor).
143
+ * Bahkan dengan multiplier 2.0x, menerima intent di kondisi ini
144
+ * berisiko menguras habis inventory.
145
+ *
146
+ * @param chainId - Chain yang akan di-check
147
+ * @param amount - Amount intent yang diminta
148
+ * @param token - Token symbol untuk inventory check (default: "USDC")
149
+ * @returns true jika harus di-reject, false jika aman diterima
150
+ */
151
+ shouldReject(chainId, amount, token = DEFAULT_INVENTORY_TOKEN) {
152
+ // 1. Check strict availability first (includes reserve check)
153
+ if (!this.inventoryManager.canFulfill(chainId, token, amount)) {
154
+ return true;
155
+ }
156
+ // 2. Check hard capacity floor
157
+ const current = this.inventoryManager.getBalance(chainId, token);
158
+ const total = this.inventoryManager.getTotalBalance(token);
159
+ if (total === 0n)
160
+ return true; // Should be caught by canFulfill, but safety guard
161
+ const capacity = Number(current) / Number(total);
162
+ // Reject if capacity is critically low to force rebalancing before draining chain
163
+ return capacity < CRITICAL_CAPACITY_FLOOR;
164
+ }
165
+ // ─────────────────────────────────────────────
166
+ // Private Helpers
167
+ // ─────────────────────────────────────────────
168
+ /**
169
+ * Kembalikan tier (multiplierNum, multiplierDen, value) untuk chain berdasarkan kapasitas.
170
+ * Menggunakan BigInt fraction (num/den) untuk menghindari float precision loss
171
+ * saat diaplikasikan ke baseFee yang mungkin sangat besar (token 18 desimal).
172
+ */
173
+ _getTierForChain(chainId, token) {
174
+ const current = this.inventoryManager.getBalance(chainId, token);
175
+ const total = this.inventoryManager.getTotalBalance(token);
176
+ // No inventory anywhere → critical tier
177
+ if (total === 0n)
178
+ return INVENTORY_TIERS[INVENTORY_TIERS.length - 1];
179
+ const capacity = Number(current) / Number(total);
180
+ // Find first matching tier (ordered highest threshold → lowest)
181
+ for (const tier of INVENTORY_TIERS) {
182
+ if (capacity >= tier.threshold)
183
+ return tier;
184
+ }
185
+ // Should never reach here as last tier has threshold 0
186
+ return INVENTORY_TIERS[INVENTORY_TIERS.length - 1];
187
+ }
188
+ }
189
+ //# sourceMappingURL=dynamic-pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-pricing.js","sourceRoot":"","sources":["../../../src/solver/pricing/dynamic-pricing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Fee Calculator
3
+ *
4
+ * Menghitung total biaya yang dikenakan solver kepada user.
5
+ * Fee terdiri dari tiga komponen:
6
+ *
7
+ * 1. BASE FEE — persentase dari amount (default 0.5%)
8
+ * 2. GAS COST — estimasi biaya gas dalam token (USDC)
9
+ * 3. SLIPPAGE CAPTURE — bagian dari max slippage user yang solver ambil
10
+ *
11
+ * FORMULA:
12
+ * totalFee = baseFee + gasCost + slippageCapture
13
+ * userReceives = amount - totalFee
14
+ * solverProfit = totalFee - gasCost
15
+ *
16
+ * EXAMPLE (1000 USDC, ETH→Polygon):
17
+ * baseFee = 5 USDC (0.5%)
18
+ * gasCost = 3 USDC (ETH mainnet involved)
19
+ * slippageCapture = 5 USDC (50% of 1% max slippage on 1000 USDC)
20
+ * totalFee = 13 USDC
21
+ * solverProfit = 10 USDC
22
+ */
23
+ import type { PricingConfig, PricingResult } from "../types/pricing";
24
+ import type { ChainId } from "../../types/common";
25
+ /**
26
+ * Parameters untuk kalkulasi fee tunggal.
27
+ */
28
+ export interface FeeCalculationParams {
29
+ /** Amount yang di-bridge dalam token smallest unit (e.g., 1000 USDC = 1_000_000_000n untuk 6 decimals) */
30
+ amount: bigint;
31
+ /** Chain tempat user menyimpan dana (source) */
32
+ sourceChain: ChainId;
33
+ /** Chain tujuan pengiriman (target) */
34
+ targetChain: ChainId;
35
+ /** Token symbol (e.g., "USDC") */
36
+ token: string;
37
+ /** Max slippage yang diizinkan user, dalam basis points (100 = 1%) */
38
+ maxSlippageBps: number;
39
+ /** Jumlah desimal token (6 untuk USDC, 18 untuk ETH) */
40
+ tokenDecimals?: number;
41
+ }
42
+ export declare class FeeCalculator {
43
+ private readonly config;
44
+ private readonly slippageCapture;
45
+ constructor(config: PricingConfig);
46
+ /**
47
+ * Hitung full fee breakdown untuk sebuah bridge intent.
48
+ *
49
+ * Langkah:
50
+ * 1. Hitung base fee dari `amount * baseFeePercent`, clamp ke [minFee, maxFee]
51
+ * 2. Estimasi gas cost via `estimateGasCost()`
52
+ * 3. Hitung slippage capture via `SlippageCapture.calculate()`
53
+ * 4. Gabungkan menjadi PricingResult
54
+ *
55
+ * @param params - FeeCalculationParams
56
+ * @returns PricingResult dengan semua fee breakdown
57
+ */
58
+ calculate(params: FeeCalculationParams): PricingResult;
59
+ /**
60
+ * Hitung base fee saja dari sebuah amount.
61
+ *
62
+ * Berguna untuk quick check profitabilitas tanpa full pricing.
63
+ *
64
+ * @param amount - Amount dalam token's smallest unit
65
+ * @param tokenDecimals - Jumlah desimal token (default 6 untuk USDC)
66
+ * @returns Base fee dalam token's smallest unit (bigint)
67
+ */
68
+ calculateBaseFee(amount: bigint, tokenDecimals?: number): bigint;
69
+ /**
70
+ * Estimasi biaya gas dalam token equivalent (USDC).
71
+ *
72
+ * Logika:
73
+ * - Cross-chain (sourceChain !== targetChain) jauh lebih mahal dari single-chain
74
+ * - Ethereum mainnet memiliki gas cost tertinggi karena konsensus proof-of-stake
75
+ * dan tingginya demand block space
76
+ * - L2 (Polygon, Arbitrum) jauh lebih murah
77
+ *
78
+ * Gunakan hardcoded baseline yang akan diganti real gas oracle di Phase I.
79
+ *
80
+ * @param sourceChain - Chain ID asal
81
+ * @param targetChain - Chain ID tujuan (opsional, untuk cross-chain estimate)
82
+ * @returns Gas cost estimasi dalam USDC (6 decimals, bigint)
83
+ */
84
+ estimateGasCost(sourceChain: ChainId, targetChain?: ChainId): bigint;
85
+ /**
86
+ * Cek apakah sebuah intent worth solving (profitable setelah fee).
87
+ *
88
+ * Intent tidak worth solving jika:
89
+ * - Amount terlalu kecil sehingga fee > amount
90
+ * - Cross-chain gas cost > baseFee (loss scenario)
91
+ *
92
+ * Note: Slippage capture diabaikan di sini (conservative check).
93
+ *
94
+ * @param amount - Amount dalam token's smallest unit
95
+ * @param sourceChain - Chain ID asal
96
+ * @param targetChain - Chain ID tujuan
97
+ * @returns true jika worth solving, false jika tidak
98
+ */
99
+ isWorthSolving(amount: bigint, sourceChain: ChainId, targetChain: ChainId): boolean;
100
+ }
101
+ //# sourceMappingURL=fee-calculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fee-calculator.d.ts","sourceRoot":"","sources":["../../../src/solver/pricing/fee-calculator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAMlD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,0GAA0G;IAC1G,MAAM,EAAE,MAAM,CAAC;IAEf,gDAAgD;IAChD,WAAW,EAAE,OAAO,CAAC;IAErB,uCAAuC;IACvC,WAAW,EAAE,OAAO,CAAC;IAErB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IAEd,sEAAsE;IACtE,cAAc,EAAE,MAAM,CAAC;IAEvB,wDAAwD;IACxD,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,aAAa;IAIlB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAH3B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;gBAG7B,MAAM,EAAE,aAAa;IAS1C;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,MAAM,EAAE,oBAAoB,GAAG,aAAa;IA8BtD;;;;;;;;OAQG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,SAAI,GAAG,MAAM;IAmB3D;;;;;;;;;;;;;;OAcG;IACH,eAAe,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM;IAmBpE;;;;;;;;;;;;;OAaG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO;CAStF"}