perp-cli 0.3.3

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 (325) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +293 -0
  3. package/dist/__tests__/alert-logic.test.d.ts +1 -0
  4. package/dist/__tests__/alert-logic.test.js +107 -0
  5. package/dist/__tests__/arb-auto-3dex.test.d.ts +1 -0
  6. package/dist/__tests__/arb-auto-3dex.test.js +397 -0
  7. package/dist/__tests__/arb-history-stats.test.d.ts +1 -0
  8. package/dist/__tests__/arb-history-stats.test.js +176 -0
  9. package/dist/__tests__/arb-logic.test.d.ts +1 -0
  10. package/dist/__tests__/arb-logic.test.js +84 -0
  11. package/dist/__tests__/arb-manage.test.d.ts +1 -0
  12. package/dist/__tests__/arb-manage.test.js +253 -0
  13. package/dist/__tests__/arb-new-features.test.d.ts +1 -0
  14. package/dist/__tests__/arb-new-features.test.js +457 -0
  15. package/dist/__tests__/arb-sizing.test.d.ts +1 -0
  16. package/dist/__tests__/arb-sizing.test.js +48 -0
  17. package/dist/__tests__/arb-state.test.d.ts +1 -0
  18. package/dist/__tests__/arb-state.test.js +284 -0
  19. package/dist/__tests__/arb-userflow.test.d.ts +1 -0
  20. package/dist/__tests__/arb-userflow.test.js +945 -0
  21. package/dist/__tests__/arb-utils.test.d.ts +1 -0
  22. package/dist/__tests__/arb-utils.test.js +264 -0
  23. package/dist/__tests__/bot-conditions.test.d.ts +1 -0
  24. package/dist/__tests__/bot-conditions.test.js +341 -0
  25. package/dist/__tests__/client-id-tracker.test.d.ts +1 -0
  26. package/dist/__tests__/client-id-tracker.test.js +137 -0
  27. package/dist/__tests__/commands/new-atomic-commands.test.d.ts +1 -0
  28. package/dist/__tests__/commands/new-atomic-commands.test.js +502 -0
  29. package/dist/__tests__/commands/order-intent.test.d.ts +1 -0
  30. package/dist/__tests__/commands/order-intent.test.js +600 -0
  31. package/dist/__tests__/commands/trade-commands.test.d.ts +1 -0
  32. package/dist/__tests__/commands/trade-commands.test.js +821 -0
  33. package/dist/__tests__/config.test.d.ts +1 -0
  34. package/dist/__tests__/config.test.js +86 -0
  35. package/dist/__tests__/cross-chain-margin.test.d.ts +1 -0
  36. package/dist/__tests__/cross-chain-margin.test.js +287 -0
  37. package/dist/__tests__/dex-asset-map.test.d.ts +1 -0
  38. package/dist/__tests__/dex-asset-map.test.js +191 -0
  39. package/dist/__tests__/errors.test.d.ts +1 -0
  40. package/dist/__tests__/errors.test.js +110 -0
  41. package/dist/__tests__/event-stream.test.d.ts +1 -0
  42. package/dist/__tests__/event-stream.test.js +276 -0
  43. package/dist/__tests__/exchanges/interface.test.d.ts +1 -0
  44. package/dist/__tests__/exchanges/interface.test.js +132 -0
  45. package/dist/__tests__/exchanges/mock-adapter.d.ts +69 -0
  46. package/dist/__tests__/exchanges/mock-adapter.js +137 -0
  47. package/dist/__tests__/execution-log.test.d.ts +1 -0
  48. package/dist/__tests__/execution-log.test.js +106 -0
  49. package/dist/__tests__/funding-calc.test.d.ts +1 -0
  50. package/dist/__tests__/funding-calc.test.js +71 -0
  51. package/dist/__tests__/funding-history.test.d.ts +1 -0
  52. package/dist/__tests__/funding-history.test.js +343 -0
  53. package/dist/__tests__/funding-rates.test.d.ts +1 -0
  54. package/dist/__tests__/funding-rates.test.js +342 -0
  55. package/dist/__tests__/funding.test.d.ts +1 -0
  56. package/dist/__tests__/funding.test.js +173 -0
  57. package/dist/__tests__/gap-logic.test.d.ts +1 -0
  58. package/dist/__tests__/gap-logic.test.js +43 -0
  59. package/dist/__tests__/hip3-dex.test.d.ts +1 -0
  60. package/dist/__tests__/hip3-dex.test.js +234 -0
  61. package/dist/__tests__/integration/agent-features.integration.test.d.ts +1 -0
  62. package/dist/__tests__/integration/agent-features.integration.test.js +553 -0
  63. package/dist/__tests__/integration/atomic-commands.integration.test.d.ts +13 -0
  64. package/dist/__tests__/integration/atomic-commands.integration.test.js +246 -0
  65. package/dist/__tests__/integration/bridge-simulation.integration.test.d.ts +1 -0
  66. package/dist/__tests__/integration/bridge-simulation.integration.test.js +453 -0
  67. package/dist/__tests__/integration/bridge-strict.integration.test.d.ts +1 -0
  68. package/dist/__tests__/integration/bridge-strict.integration.test.js +812 -0
  69. package/dist/__tests__/integration/bridge.integration.test.d.ts +1 -0
  70. package/dist/__tests__/integration/bridge.integration.test.js +309 -0
  71. package/dist/__tests__/integration/cli-e2e.integration.test.d.ts +1 -0
  72. package/dist/__tests__/integration/cli-e2e.integration.test.js +202 -0
  73. package/dist/__tests__/integration/dex-arb.integration.test.d.ts +1 -0
  74. package/dist/__tests__/integration/dex-arb.integration.test.js +116 -0
  75. package/dist/__tests__/integration/envelope-consistency.integration.test.d.ts +13 -0
  76. package/dist/__tests__/integration/envelope-consistency.integration.test.js +205 -0
  77. package/dist/__tests__/integration/hip3-dex.integration.test.d.ts +1 -0
  78. package/dist/__tests__/integration/hip3-dex.integration.test.js +147 -0
  79. package/dist/__tests__/integration/hyperliquid.integration.test.d.ts +1 -0
  80. package/dist/__tests__/integration/hyperliquid.integration.test.js +79 -0
  81. package/dist/__tests__/integration/lighter.integration.test.d.ts +1 -0
  82. package/dist/__tests__/integration/lighter.integration.test.js +53 -0
  83. package/dist/__tests__/integration/new-commands-e2e.integration.test.d.ts +9 -0
  84. package/dist/__tests__/integration/new-commands-e2e.integration.test.js +236 -0
  85. package/dist/__tests__/integration/order-verification.integration.test.d.ts +1 -0
  86. package/dist/__tests__/integration/order-verification.integration.test.js +321 -0
  87. package/dist/__tests__/integration/pacifica.integration.test.d.ts +1 -0
  88. package/dist/__tests__/integration/pacifica.integration.test.js +75 -0
  89. package/dist/__tests__/integration/response-shapes.integration.test.d.ts +1 -0
  90. package/dist/__tests__/integration/response-shapes.integration.test.js +278 -0
  91. package/dist/__tests__/liquidity.test.d.ts +1 -0
  92. package/dist/__tests__/liquidity.test.js +225 -0
  93. package/dist/__tests__/plan-executor.test.d.ts +1 -0
  94. package/dist/__tests__/plan-executor.test.js +314 -0
  95. package/dist/__tests__/position-history.test.d.ts +1 -0
  96. package/dist/__tests__/position-history.test.js +367 -0
  97. package/dist/__tests__/retry.test.d.ts +1 -0
  98. package/dist/__tests__/retry.test.js +310 -0
  99. package/dist/__tests__/risk-assessment.test.d.ts +1 -0
  100. package/dist/__tests__/risk-assessment.test.js +145 -0
  101. package/dist/__tests__/security-adversarial.test.d.ts +1 -0
  102. package/dist/__tests__/security-adversarial.test.js +574 -0
  103. package/dist/__tests__/strategies.test.d.ts +1 -0
  104. package/dist/__tests__/strategies.test.js +539 -0
  105. package/dist/__tests__/trade-execution.test.d.ts +1 -0
  106. package/dist/__tests__/trade-execution.test.js +129 -0
  107. package/dist/__tests__/trade-validator.test.d.ts +1 -0
  108. package/dist/__tests__/trade-validator.test.js +655 -0
  109. package/dist/__tests__/utils.test.d.ts +1 -0
  110. package/dist/__tests__/utils.test.js +76 -0
  111. package/dist/api/public/hyperliquid.d.ts +18 -0
  112. package/dist/api/public/hyperliquid.js +82 -0
  113. package/dist/api/public/index.d.ts +8 -0
  114. package/dist/api/public/index.js +8 -0
  115. package/dist/api/public/lighter.d.ts +24 -0
  116. package/dist/api/public/lighter.js +100 -0
  117. package/dist/api/public/pacifica.d.ts +17 -0
  118. package/dist/api/public/pacifica.js +54 -0
  119. package/dist/api/public/urls.d.ts +12 -0
  120. package/dist/api/public/urls.js +33 -0
  121. package/dist/arb/history-stats.d.ts +44 -0
  122. package/dist/arb/history-stats.js +135 -0
  123. package/dist/arb/index.d.ts +4 -0
  124. package/dist/arb/index.js +4 -0
  125. package/dist/arb/sizing.d.ts +23 -0
  126. package/dist/arb/sizing.js +96 -0
  127. package/dist/arb/state.d.ts +51 -0
  128. package/dist/arb/state.js +112 -0
  129. package/dist/arb/utils.d.ts +81 -0
  130. package/dist/arb/utils.js +267 -0
  131. package/dist/arb-history-stats.d.ts +5 -0
  132. package/dist/arb-history-stats.js +5 -0
  133. package/dist/arb-sizing.d.ts +5 -0
  134. package/dist/arb-sizing.js +5 -0
  135. package/dist/arb-state.d.ts +5 -0
  136. package/dist/arb-state.js +5 -0
  137. package/dist/arb-utils.d.ts +5 -0
  138. package/dist/arb-utils.js +5 -0
  139. package/dist/bot/conditions.d.ts +32 -0
  140. package/dist/bot/conditions.js +141 -0
  141. package/dist/bot/config.d.ts +76 -0
  142. package/dist/bot/config.js +160 -0
  143. package/dist/bot/engine.d.ts +8 -0
  144. package/dist/bot/engine.js +519 -0
  145. package/dist/bot/presets.d.ts +11 -0
  146. package/dist/bot/presets.js +296 -0
  147. package/dist/bridge-engine.d.ts +133 -0
  148. package/dist/bridge-engine.js +1487 -0
  149. package/dist/cache.d.ts +25 -0
  150. package/dist/cache.js +99 -0
  151. package/dist/cli-spec.d.ts +50 -0
  152. package/dist/cli-spec.js +75 -0
  153. package/dist/client-id-tracker.d.ts +25 -0
  154. package/dist/client-id-tracker.js +76 -0
  155. package/dist/commands/account.d.ts +3 -0
  156. package/dist/commands/account.js +425 -0
  157. package/dist/commands/agent.d.ts +3 -0
  158. package/dist/commands/agent.js +386 -0
  159. package/dist/commands/alert.d.ts +2 -0
  160. package/dist/commands/alert.js +421 -0
  161. package/dist/commands/analytics.d.ts +3 -0
  162. package/dist/commands/analytics.js +311 -0
  163. package/dist/commands/arb/index.d.ts +3 -0
  164. package/dist/commands/arb/index.js +921 -0
  165. package/dist/commands/arb-auto.d.ts +54 -0
  166. package/dist/commands/arb-auto.js +1328 -0
  167. package/dist/commands/arb-manage.d.ts +5 -0
  168. package/dist/commands/arb-manage.js +5 -0
  169. package/dist/commands/arb.d.ts +2 -0
  170. package/dist/commands/arb.js +347 -0
  171. package/dist/commands/backtest.d.ts +2 -0
  172. package/dist/commands/backtest.js +327 -0
  173. package/dist/commands/bot.d.ts +3 -0
  174. package/dist/commands/bot.js +412 -0
  175. package/dist/commands/bridge.d.ts +2 -0
  176. package/dist/commands/bridge.js +396 -0
  177. package/dist/commands/dashboard.d.ts +3 -0
  178. package/dist/commands/dashboard.js +176 -0
  179. package/dist/commands/deposit.d.ts +4 -0
  180. package/dist/commands/deposit.js +573 -0
  181. package/dist/commands/dex.d.ts +3 -0
  182. package/dist/commands/dex.js +114 -0
  183. package/dist/commands/env.d.ts +2 -0
  184. package/dist/commands/env.js +136 -0
  185. package/dist/commands/funding.d.ts +2 -0
  186. package/dist/commands/funding.js +347 -0
  187. package/dist/commands/gap.d.ts +2 -0
  188. package/dist/commands/gap.js +305 -0
  189. package/dist/commands/health.d.ts +2 -0
  190. package/dist/commands/health.js +67 -0
  191. package/dist/commands/history.d.ts +2 -0
  192. package/dist/commands/history.js +235 -0
  193. package/dist/commands/init.d.ts +15 -0
  194. package/dist/commands/init.js +266 -0
  195. package/dist/commands/jobs.d.ts +2 -0
  196. package/dist/commands/jobs.js +133 -0
  197. package/dist/commands/manage.d.ts +4 -0
  198. package/dist/commands/manage.js +309 -0
  199. package/dist/commands/market.d.ts +3 -0
  200. package/dist/commands/market.js +225 -0
  201. package/dist/commands/plan.d.ts +3 -0
  202. package/dist/commands/plan.js +95 -0
  203. package/dist/commands/portfolio.d.ts +3 -0
  204. package/dist/commands/portfolio.js +169 -0
  205. package/dist/commands/rebalance.d.ts +3 -0
  206. package/dist/commands/rebalance.js +293 -0
  207. package/dist/commands/risk.d.ts +3 -0
  208. package/dist/commands/risk.js +169 -0
  209. package/dist/commands/run.d.ts +3 -0
  210. package/dist/commands/run.js +202 -0
  211. package/dist/commands/settings.d.ts +2 -0
  212. package/dist/commands/settings.js +102 -0
  213. package/dist/commands/stream.d.ts +5 -0
  214. package/dist/commands/stream.js +123 -0
  215. package/dist/commands/trade.d.ts +3 -0
  216. package/dist/commands/trade.js +1273 -0
  217. package/dist/commands/wallet.d.ts +14 -0
  218. package/dist/commands/wallet.js +602 -0
  219. package/dist/commands/withdraw.d.ts +3 -0
  220. package/dist/commands/withdraw.js +187 -0
  221. package/dist/config.d.ts +5 -0
  222. package/dist/config.js +68 -0
  223. package/dist/cross-chain-margin.d.ts +46 -0
  224. package/dist/cross-chain-margin.js +107 -0
  225. package/dist/dashboard/server.d.ts +80 -0
  226. package/dist/dashboard/server.js +340 -0
  227. package/dist/dashboard/ui.d.ts +4 -0
  228. package/dist/dashboard/ui.js +538 -0
  229. package/dist/dashboard/ws-feeds.d.ts +29 -0
  230. package/dist/dashboard/ws-feeds.js +660 -0
  231. package/dist/dex-asset-map.d.ts +80 -0
  232. package/dist/dex-asset-map.js +201 -0
  233. package/dist/errors.d.ts +109 -0
  234. package/dist/errors.js +84 -0
  235. package/dist/event-stream.d.ts +25 -0
  236. package/dist/event-stream.js +168 -0
  237. package/dist/exchanges/hyperliquid.d.ts +212 -0
  238. package/dist/exchanges/hyperliquid.js +931 -0
  239. package/dist/exchanges/interface.d.ts +95 -0
  240. package/dist/exchanges/interface.js +5 -0
  241. package/dist/exchanges/lighter.d.ts +159 -0
  242. package/dist/exchanges/lighter.js +793 -0
  243. package/dist/exchanges/pacifica.d.ts +51 -0
  244. package/dist/exchanges/pacifica.js +248 -0
  245. package/dist/execution-log.d.ts +36 -0
  246. package/dist/execution-log.js +102 -0
  247. package/dist/funding/history.d.ts +63 -0
  248. package/dist/funding/history.js +266 -0
  249. package/dist/funding/index.d.ts +3 -0
  250. package/dist/funding/index.js +3 -0
  251. package/dist/funding/normalize.d.ts +39 -0
  252. package/dist/funding/normalize.js +66 -0
  253. package/dist/funding/rates.d.ts +45 -0
  254. package/dist/funding/rates.js +172 -0
  255. package/dist/funding-history.d.ts +5 -0
  256. package/dist/funding-history.js +5 -0
  257. package/dist/funding-rates.d.ts +5 -0
  258. package/dist/funding-rates.js +5 -0
  259. package/dist/funding.d.ts +5 -0
  260. package/dist/funding.js +5 -0
  261. package/dist/index.d.ts +2 -0
  262. package/dist/index.js +458 -0
  263. package/dist/jobs.d.ts +37 -0
  264. package/dist/jobs.js +152 -0
  265. package/dist/liquidity.d.ts +34 -0
  266. package/dist/liquidity.js +100 -0
  267. package/dist/mcp-server.d.ts +9 -0
  268. package/dist/mcp-server.js +1206 -0
  269. package/dist/pacifica/client.d.ts +111 -0
  270. package/dist/pacifica/client.js +310 -0
  271. package/dist/pacifica/constants.d.ts +27 -0
  272. package/dist/pacifica/constants.js +47 -0
  273. package/dist/pacifica/deposit.d.ts +14 -0
  274. package/dist/pacifica/deposit.js +78 -0
  275. package/dist/pacifica/index.d.ts +6 -0
  276. package/dist/pacifica/index.js +11 -0
  277. package/dist/pacifica/signing.d.ts +49 -0
  278. package/dist/pacifica/signing.js +97 -0
  279. package/dist/pacifica/types/account.d.ts +42 -0
  280. package/dist/pacifica/types/account.js +1 -0
  281. package/dist/pacifica/types/index.d.ts +6 -0
  282. package/dist/pacifica/types/index.js +6 -0
  283. package/dist/pacifica/types/lake.d.ts +18 -0
  284. package/dist/pacifica/types/lake.js +1 -0
  285. package/dist/pacifica/types/market.d.ts +64 -0
  286. package/dist/pacifica/types/market.js +1 -0
  287. package/dist/pacifica/types/order.d.ts +92 -0
  288. package/dist/pacifica/types/order.js +1 -0
  289. package/dist/pacifica/types/position.d.ts +25 -0
  290. package/dist/pacifica/types/position.js +1 -0
  291. package/dist/pacifica/types/ws.d.ts +34 -0
  292. package/dist/pacifica/types/ws.js +41 -0
  293. package/dist/pacifica/ws-client.d.ts +42 -0
  294. package/dist/pacifica/ws-client.js +180 -0
  295. package/dist/plan-executor.d.ts +48 -0
  296. package/dist/plan-executor.js +280 -0
  297. package/dist/position-history.d.ts +68 -0
  298. package/dist/position-history.js +222 -0
  299. package/dist/rebalance.d.ts +64 -0
  300. package/dist/rebalance.js +142 -0
  301. package/dist/retry.d.ts +74 -0
  302. package/dist/retry.js +129 -0
  303. package/dist/risk.d.ts +48 -0
  304. package/dist/risk.js +156 -0
  305. package/dist/settings.d.ts +19 -0
  306. package/dist/settings.js +45 -0
  307. package/dist/shared-api.d.ts +5 -0
  308. package/dist/shared-api.js +5 -0
  309. package/dist/strategies/dca.d.ts +25 -0
  310. package/dist/strategies/dca.js +114 -0
  311. package/dist/strategies/funding-arb.d.ts +15 -0
  312. package/dist/strategies/funding-arb.js +281 -0
  313. package/dist/strategies/grid.d.ts +34 -0
  314. package/dist/strategies/grid.js +185 -0
  315. package/dist/strategies/trailing-stop.d.ts +17 -0
  316. package/dist/strategies/trailing-stop.js +121 -0
  317. package/dist/strategies/twap.d.ts +20 -0
  318. package/dist/strategies/twap.js +78 -0
  319. package/dist/trade-validator.d.ts +39 -0
  320. package/dist/trade-validator.js +154 -0
  321. package/dist/utils.d.ts +38 -0
  322. package/dist/utils.js +110 -0
  323. package/package.json +63 -0
  324. package/skills/perp-cli/SKILL.md +149 -0
  325. package/skills/perp-cli/references/commands.md +143 -0
@@ -0,0 +1,296 @@
1
+ const DEFAULT_RISK = {
2
+ max_position_usd: 1000,
3
+ max_daily_loss: 100,
4
+ max_drawdown: 200,
5
+ pause_after_loss_sec: 300,
6
+ max_open_bots: 5,
7
+ };
8
+ // ── Grid Presets ──
9
+ const gridConservative = {
10
+ name: "grid-conservative",
11
+ description: "Wide range (±5%), 8 grids, small size, no leverage — low risk sideways strategy",
12
+ strategy: "grid",
13
+ risk: "low",
14
+ buildConfig: (exchange, symbol) => ({
15
+ name: `grid-conservative-${symbol.toLowerCase()}-${Date.now().toString(36)}`,
16
+ exchange,
17
+ symbol,
18
+ strategy: {
19
+ type: "grid",
20
+ grids: 8,
21
+ size: 0.05,
22
+ side: "neutral",
23
+ range_mode: "auto",
24
+ range_pct: 5,
25
+ rebalance: true,
26
+ rebalance_cooldown: 120,
27
+ },
28
+ entry_conditions: [{ type: "volatility_below", value: 8 }],
29
+ exit_conditions: [
30
+ { type: "volatility_above", value: 15 },
31
+ { type: "time_after", value: 86400 },
32
+ ],
33
+ risk: { ...DEFAULT_RISK, max_drawdown: 50, max_daily_loss: 30 },
34
+ monitor_interval_sec: 15,
35
+ }),
36
+ };
37
+ const gridStandard = {
38
+ name: "grid-standard",
39
+ description: "Medium range (±3%), 12 grids, moderate size — balanced grid trading",
40
+ strategy: "grid",
41
+ risk: "medium",
42
+ buildConfig: (exchange, symbol) => ({
43
+ name: `grid-standard-${symbol.toLowerCase()}-${Date.now().toString(36)}`,
44
+ exchange,
45
+ symbol,
46
+ strategy: {
47
+ type: "grid",
48
+ grids: 12,
49
+ size: 0.1,
50
+ side: "neutral",
51
+ range_mode: "auto",
52
+ range_pct: 3,
53
+ rebalance: true,
54
+ rebalance_cooldown: 60,
55
+ },
56
+ entry_conditions: [{ type: "always", value: 0 }],
57
+ exit_conditions: [
58
+ { type: "volatility_above", value: 12 },
59
+ ],
60
+ risk: { ...DEFAULT_RISK, max_drawdown: 100, max_daily_loss: 50 },
61
+ monitor_interval_sec: 10,
62
+ }),
63
+ };
64
+ const gridAggressive = {
65
+ name: "grid-aggressive",
66
+ description: "Tight range (±1.5%), 20 grids, 5x leverage — high frequency, high risk",
67
+ strategy: "grid",
68
+ risk: "high",
69
+ buildConfig: (exchange, symbol) => ({
70
+ name: `grid-aggressive-${symbol.toLowerCase()}-${Date.now().toString(36)}`,
71
+ exchange,
72
+ symbol,
73
+ strategy: {
74
+ type: "grid",
75
+ grids: 20,
76
+ size: 0.2,
77
+ side: "neutral",
78
+ range_mode: "auto",
79
+ range_pct: 1.5,
80
+ rebalance: true,
81
+ rebalance_cooldown: 30,
82
+ leverage: 5,
83
+ },
84
+ entry_conditions: [{ type: "volatility_below", value: 5 }],
85
+ exit_conditions: [
86
+ { type: "volatility_above", value: 8 },
87
+ ],
88
+ risk: { ...DEFAULT_RISK, max_drawdown: 200, max_daily_loss: 100, max_position_usd: 5000 },
89
+ monitor_interval_sec: 5,
90
+ }),
91
+ };
92
+ const gridLongBias = {
93
+ name: "grid-long-bias",
94
+ description: "Long-biased grid (±3%), 10 grids — profit from uptrend + range trading",
95
+ strategy: "grid",
96
+ risk: "medium",
97
+ buildConfig: (exchange, symbol) => ({
98
+ name: `grid-long-${symbol.toLowerCase()}-${Date.now().toString(36)}`,
99
+ exchange,
100
+ symbol,
101
+ strategy: {
102
+ type: "grid",
103
+ grids: 10,
104
+ size: 0.1,
105
+ side: "long",
106
+ range_mode: "auto",
107
+ range_pct: 3,
108
+ rebalance: true,
109
+ rebalance_cooldown: 60,
110
+ },
111
+ entry_conditions: [{ type: "always", value: 0 }],
112
+ exit_conditions: [],
113
+ risk: { ...DEFAULT_RISK, max_drawdown: 150, max_daily_loss: 75 },
114
+ monitor_interval_sec: 10,
115
+ }),
116
+ };
117
+ // ── DCA Presets ──
118
+ const dcaDaily = {
119
+ name: "dca-daily",
120
+ description: "Buy once per day, 30 orders — steady accumulation over 1 month",
121
+ strategy: "dca",
122
+ risk: "low",
123
+ buildConfig: (exchange, symbol) => ({
124
+ name: `dca-daily-${symbol.toLowerCase()}-${Date.now().toString(36)}`,
125
+ exchange,
126
+ symbol,
127
+ strategy: {
128
+ type: "dca",
129
+ amount: 0.01,
130
+ interval_sec: 86400,
131
+ total_orders: 30,
132
+ },
133
+ entry_conditions: [{ type: "always", value: 0 }],
134
+ exit_conditions: [],
135
+ risk: { ...DEFAULT_RISK, max_drawdown: 100, max_daily_loss: 50 },
136
+ monitor_interval_sec: 3600,
137
+ }),
138
+ };
139
+ const dcaDipBuyer = {
140
+ name: "dca-dip-buyer",
141
+ description: "Buy only when volatility is high — accumulate during dips",
142
+ strategy: "dca",
143
+ risk: "medium",
144
+ buildConfig: (exchange, symbol) => ({
145
+ name: `dca-dip-${symbol.toLowerCase()}-${Date.now().toString(36)}`,
146
+ exchange,
147
+ symbol,
148
+ strategy: {
149
+ type: "dca",
150
+ amount: 0.02,
151
+ interval_sec: 3600,
152
+ total_orders: 0, // unlimited
153
+ },
154
+ entry_conditions: [{ type: "volatility_above", value: 5 }],
155
+ exit_conditions: [
156
+ { type: "volatility_below", value: 2 },
157
+ ],
158
+ risk: { ...DEFAULT_RISK, max_drawdown: 200, max_daily_loss: 100 },
159
+ monitor_interval_sec: 1800,
160
+ }),
161
+ };
162
+ const dcaHourly = {
163
+ name: "dca-hourly",
164
+ description: "Buy every hour, 24 orders — short-term aggressive accumulation",
165
+ strategy: "dca",
166
+ risk: "medium",
167
+ buildConfig: (exchange, symbol) => ({
168
+ name: `dca-hourly-${symbol.toLowerCase()}-${Date.now().toString(36)}`,
169
+ exchange,
170
+ symbol,
171
+ strategy: {
172
+ type: "dca",
173
+ amount: 0.005,
174
+ interval_sec: 3600,
175
+ total_orders: 24,
176
+ },
177
+ entry_conditions: [{ type: "always", value: 0 }],
178
+ exit_conditions: [],
179
+ risk: { ...DEFAULT_RISK, max_drawdown: 50, max_daily_loss: 30 },
180
+ monitor_interval_sec: 600,
181
+ }),
182
+ };
183
+ const dcaSeller = {
184
+ name: "dca-seller",
185
+ description: "Sell (short) periodically — dollar-cost average out of a position",
186
+ strategy: "dca",
187
+ risk: "medium",
188
+ buildConfig: (exchange, symbol) => ({
189
+ name: `dca-sell-${symbol.toLowerCase()}-${Date.now().toString(36)}`,
190
+ exchange,
191
+ symbol,
192
+ strategy: {
193
+ type: "dca",
194
+ amount: 0.01,
195
+ interval_sec: 3600,
196
+ total_orders: 24,
197
+ },
198
+ entry_conditions: [{ type: "always", value: 0 }],
199
+ exit_conditions: [],
200
+ risk: { ...DEFAULT_RISK, max_drawdown: 100, max_daily_loss: 50 },
201
+ monitor_interval_sec: 600,
202
+ }),
203
+ };
204
+ // ── Funding Arb Presets ──
205
+ const arbConservative = {
206
+ name: "arb-conservative",
207
+ description: "High spread threshold (30%), small size ($30/leg), 2 max positions",
208
+ strategy: "funding-arb",
209
+ risk: "low",
210
+ buildConfig: (exchange, _symbol) => ({
211
+ name: `arb-conservative-${Date.now().toString(36)}`,
212
+ exchange,
213
+ symbol: "ETH",
214
+ strategy: {
215
+ type: "funding-arb",
216
+ min_spread: 30,
217
+ close_spread: 10,
218
+ size_usd: 30,
219
+ max_positions: 2,
220
+ exchanges: ["pacifica", "hyperliquid"],
221
+ },
222
+ entry_conditions: [{ type: "always", value: 0 }],
223
+ exit_conditions: [],
224
+ risk: { ...DEFAULT_RISK, max_drawdown: 100, max_daily_loss: 50, max_position_usd: 200 },
225
+ monitor_interval_sec: 120,
226
+ }),
227
+ };
228
+ const arbStandard = {
229
+ name: "arb-standard",
230
+ description: "Medium spread (20%), $50/leg, 3 positions, 3 exchanges",
231
+ strategy: "funding-arb",
232
+ risk: "medium",
233
+ buildConfig: (exchange, _symbol) => ({
234
+ name: `arb-standard-${Date.now().toString(36)}`,
235
+ exchange,
236
+ symbol: "ETH",
237
+ strategy: {
238
+ type: "funding-arb",
239
+ min_spread: 20,
240
+ close_spread: 5,
241
+ size_usd: 50,
242
+ max_positions: 3,
243
+ exchanges: ["pacifica", "hyperliquid", "lighter"],
244
+ },
245
+ entry_conditions: [{ type: "always", value: 0 }],
246
+ exit_conditions: [],
247
+ risk: { ...DEFAULT_RISK, max_drawdown: 200, max_daily_loss: 100, max_position_usd: 500 },
248
+ monitor_interval_sec: 60,
249
+ }),
250
+ };
251
+ const arbAggressive = {
252
+ name: "arb-aggressive",
253
+ description: "Low spread (10%), $100/leg, 5 positions — captures smaller opportunities",
254
+ strategy: "funding-arb",
255
+ risk: "high",
256
+ buildConfig: (exchange, _symbol) => ({
257
+ name: `arb-aggressive-${Date.now().toString(36)}`,
258
+ exchange,
259
+ symbol: "ETH",
260
+ strategy: {
261
+ type: "funding-arb",
262
+ min_spread: 10,
263
+ close_spread: 3,
264
+ size_usd: 100,
265
+ max_positions: 5,
266
+ exchanges: ["pacifica", "hyperliquid", "lighter"],
267
+ },
268
+ entry_conditions: [{ type: "always", value: 0 }],
269
+ exit_conditions: [],
270
+ risk: { ...DEFAULT_RISK, max_drawdown: 500, max_daily_loss: 200, max_position_usd: 2000 },
271
+ monitor_interval_sec: 30,
272
+ }),
273
+ };
274
+ // ── Registry ──
275
+ export const PRESETS = [
276
+ // Grid
277
+ gridConservative,
278
+ gridStandard,
279
+ gridAggressive,
280
+ gridLongBias,
281
+ // DCA
282
+ dcaDaily,
283
+ dcaDipBuyer,
284
+ dcaHourly,
285
+ dcaSeller,
286
+ // Funding Arb
287
+ arbConservative,
288
+ arbStandard,
289
+ arbAggressive,
290
+ ];
291
+ export function getPreset(name) {
292
+ return PRESETS.find(p => p.name === name);
293
+ }
294
+ export function getPresetsByStrategy(strategy) {
295
+ return PRESETS.filter(p => p.strategy === strategy);
296
+ }
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Unified bridge engine: Circle CCTP V2 (primary, $0 fee) + Relay + deBridge DLN (fallback).
3
+ *
4
+ * CCTP V2 routes (all tested with real TX):
5
+ * Sol→EVM: Circle auto-relay (free)
6
+ * EVM→EVM: attestation poll + manual receiveMessage on dest chain
7
+ * EVM→Sol: attestation poll + Solana receiveMessage (ALT + 400k CU)
8
+ *
9
+ * Handles USDC bridging between Solana ↔ Arbitrum ↔ Base ↔ HyperCore
10
+ * for cross-exchange rebalancing in funding arb.
11
+ */
12
+ export declare const CHAIN_IDS: {
13
+ readonly solana: 7565164;
14
+ readonly arbitrum: 42161;
15
+ readonly base: 8453;
16
+ };
17
+ export declare const USDC_ADDRESSES: Record<string, string>;
18
+ export declare const EXCHANGE_TO_CHAIN: Record<string, string>;
19
+ /**
20
+ * Check USDC balance on an EVM chain.
21
+ * Returns balance in USDC (human-readable).
22
+ */
23
+ export declare function getEvmUsdcBalance(chain: string, address: string): Promise<number>;
24
+ /**
25
+ * Check USDC balance on Solana.
26
+ * Returns balance in USDC (human-readable).
27
+ */
28
+ export declare function getSolanaUsdcBalance(ownerPubkey: string): Promise<number>;
29
+ /**
30
+ * Check USDC balance for a bridge source chain + address.
31
+ */
32
+ export declare function checkBridgeBalance(srcChain: string, senderAddress: string, requiredAmount: number): Promise<{
33
+ balance: number;
34
+ sufficient: boolean;
35
+ }>;
36
+ /**
37
+ * Get native gas token balance (ETH for EVM, SOL for Solana).
38
+ * Returns balance in human-readable units.
39
+ */
40
+ export declare function getNativeGasBalance(chain: string, address: string): Promise<number>;
41
+ /**
42
+ * Check gas balance on source (and optionally destination) chains before bridging.
43
+ * Returns errors for any chain with insufficient gas.
44
+ */
45
+ export declare function checkBridgeGasBalance(srcChain: string, srcAddress: string, dstChain: string, dstAddress: string, needsDstGas: boolean): Promise<{
46
+ ok: boolean;
47
+ errors: string[];
48
+ }>;
49
+ export interface BridgeQuote {
50
+ provider: "debridge" | "cctp" | "relay";
51
+ srcChain: string;
52
+ dstChain: string;
53
+ amountIn: number;
54
+ amountOut: number;
55
+ fee: number;
56
+ estimatedTime: number;
57
+ gasIncluded: boolean;
58
+ gasNote?: string;
59
+ raw: unknown;
60
+ }
61
+ export interface BridgeResult {
62
+ provider: string;
63
+ txHash: string;
64
+ srcChain: string;
65
+ dstChain: string;
66
+ amountIn: number;
67
+ amountOut: number;
68
+ receiveTxHash?: string;
69
+ }
70
+ /**
71
+ * Get a bridge quote via deBridge DLN.
72
+ */
73
+ export declare function getDebridgeQuote(srcChain: string, dstChain: string, amountUsdc: number, senderAddress: string, recipientAddress: string): Promise<BridgeQuote>;
74
+ /**
75
+ * Execute a deBridge bridge transaction.
76
+ * Returns the TX hash after signing and submitting.
77
+ */
78
+ export declare function executeDebridgeBridge(bridgeQuote: BridgeQuote, signerKey: string): Promise<BridgeResult>;
79
+ export declare const CCTP_DOMAINS: Record<string, number>;
80
+ export declare const EVM_TOKEN_MINTER_V2 = "0xfd78EE919681417d192449715b2594ab58f5D002";
81
+ /**
82
+ * Get a CCTP V2 bridge quote. Supports EVM ↔ EVM, Solana ↔ EVM, and → HyperCore.
83
+ *
84
+ * Uses Circle Forwarding Service when available (all routes except →Solana):
85
+ * - Circle handles dst chain mint automatically, no manual receiveMessage needed.
86
+ * - Service fee ~$0.20 (included in maxFee).
87
+ *
88
+ * @param fast - If true, use fast finality (1000): ~1-2 min, $1-1.3 + $0.20 forwarding.
89
+ * If false (default), use standard finality (2000): ~2-5 min, ~$0.20 forwarding.
90
+ */
91
+ export declare function getCctpQuote(srcChain: string, dstChain: string, amountUsdc: number, fast?: boolean): Promise<BridgeQuote>;
92
+ /**
93
+ * Execute a CCTP V2 bridge. Routes to the appropriate implementation.
94
+ *
95
+ * @param fast - If true, use fast finality (1000): Circle auto-relays, no manual receiveMessage.
96
+ * If false (default), use standard finality (2000): cheaper but requires manual relay.
97
+ */
98
+ export declare function executeCctpBridge(srcChain: string, dstChain: string, amountUsdc: number, signerKey: string, recipientAddress: string, dstSignerKey?: string, // EVM key for receiveMessage (Solana→EVM) or Solana key for receiveMessage (EVM→Solana)
99
+ fast?: boolean): Promise<BridgeResult>;
100
+ /**
101
+ * Call receiveMessage on Solana MessageTransmitter V2 to complete an EVM→Solana bridge.
102
+ * This mints USDC on Solana after the attestation is ready.
103
+ */
104
+ export declare function executeSolanaReceiveMessage(messageHex: string, // "0x..." CCTP message from Iris API
105
+ attestationHex: string, // "0x..." attestation from Iris API
106
+ recipientAddress: string, // Solana wallet pubkey (base58)
107
+ payerKey: string): Promise<string>;
108
+ export declare function getRelayQuote(srcChain: string, dstChain: string, amountUsdc: number, senderAddress: string, recipientAddress: string): Promise<BridgeQuote>;
109
+ export declare function executeRelayBridge(bridgeQuote: BridgeQuote, signerKey: string): Promise<BridgeResult>;
110
+ /**
111
+ * Get the best bridge quote. Strategy:
112
+ * - CCTP primary ($0 fee) for all routes: Solana↔EVM, EVM↔EVM, →HyperCore
113
+ * - Relay + deBridge DLN in parallel, pick cheapest
114
+ */
115
+ /**
116
+ * Get quotes from ALL available providers in parallel.
117
+ * Returns sorted by amountOut (best first).
118
+ */
119
+ export declare function getAllQuotes(srcChain: string, dstChain: string, amountUsdc: number, senderAddress: string, recipientAddress: string): Promise<BridgeQuote[]>;
120
+ /**
121
+ * Get the best quote across all providers.
122
+ */
123
+ export declare function getBestQuote(srcChain: string, dstChain: string, amountUsdc: number, senderAddress: string, recipientAddress: string): Promise<BridgeQuote>;
124
+ /**
125
+ * Execute a bridge using the specified or best available provider.
126
+ * @param provider - Optional: force a specific provider ("cctp" | "relay" | "debridge")
127
+ */
128
+ export declare function executeBestBridge(srcChain: string, dstChain: string, amountUsdc: number, signerKey: string, senderAddress: string, recipientAddress: string, dstSignerKey?: string, // Optional EVM key for manual receiveMessage (standard finality)
129
+ provider?: "cctp" | "relay" | "debridge", fast?: boolean): Promise<BridgeResult>;
130
+ /**
131
+ * Check bridge order status via deBridge.
132
+ */
133
+ export declare function checkDebridgeStatus(orderId: string): Promise<Record<string, unknown>>;