perp-cli 0.12.15 → 0.14.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 (361) hide show
  1. package/README.md +278 -31
  2. package/dist/_stderr-filter.js +0 -1
  3. package/dist/agent-wallet/lighter-keystore.d.ts +11 -0
  4. package/dist/agent-wallet/lighter-keystore.js +92 -10
  5. package/dist/agent-wallet/passphrase.d.ts +1 -1
  6. package/dist/agent-wallet/passphrase.js +16 -3
  7. package/dist/agent-wallet/store.d.ts +37 -4
  8. package/dist/agent-wallet/store.js +132 -0
  9. package/dist/agent-wallet/venue-keystore.d.ts +14 -0
  10. package/dist/agent-wallet/venue-keystore.js +121 -0
  11. package/dist/api/public/hyperliquid.js +4 -4
  12. package/dist/api/public/lighter.js +5 -5
  13. package/dist/api/public/pacifica.d.ts +0 -1
  14. package/dist/api/public/pacifica.js +4 -13
  15. package/dist/api/public/urls.d.ts +9 -1
  16. package/dist/api/public/urls.js +35 -13
  17. package/dist/arb/file-lock.d.ts +11 -0
  18. package/dist/arb/file-lock.js +74 -0
  19. package/dist/arb/index.d.ts +2 -2
  20. package/dist/arb/index.js +2 -2
  21. package/dist/arb/pending-entry.d.ts +32 -0
  22. package/dist/arb/pending-entry.js +77 -0
  23. package/dist/arb/sizing.d.ts +6 -13
  24. package/dist/arb/sizing.js +12 -51
  25. package/dist/arb/state.d.ts +45 -12
  26. package/dist/arb/state.js +214 -42
  27. package/dist/arb/utils.d.ts +20 -6
  28. package/dist/arb/utils.js +43 -39
  29. package/dist/bot/conditions.d.ts +4 -4
  30. package/dist/bot/conditions.js +11 -6
  31. package/dist/bot/config.d.ts +17 -1
  32. package/dist/bot/config.js +48 -12
  33. package/dist/bot/engine.d.ts +61 -2
  34. package/dist/bot/engine.js +610 -144
  35. package/dist/bot/fill-size.d.ts +7 -0
  36. package/dist/bot/fill-size.js +18 -0
  37. package/dist/bot/index.d.ts +1 -1
  38. package/dist/bot/index.js +1 -1
  39. package/dist/bot/perp-order.d.ts +99 -0
  40. package/dist/bot/perp-order.js +299 -0
  41. package/dist/bot/presets.d.ts +7 -0
  42. package/dist/bot/presets.js +17 -0
  43. package/dist/bot/quarantine.d.ts +75 -0
  44. package/dist/bot/quarantine.js +190 -0
  45. package/dist/bot/quote-rules.d.ts +23 -0
  46. package/dist/bot/quote-rules.js +69 -0
  47. package/dist/bot/strategies/avellaneda-mm.d.ts +32 -2
  48. package/dist/bot/strategies/avellaneda-mm.js +72 -70
  49. package/dist/bot/strategies/basis-arb.js +2 -0
  50. package/dist/bot/strategies/dca-strategy.d.ts +2 -0
  51. package/dist/bot/strategies/dca-strategy.js +5 -0
  52. package/dist/bot/strategies/funding-arb-strategy.d.ts +43 -3
  53. package/dist/bot/strategies/funding-arb-strategy.js +571 -380
  54. package/dist/bot/strategies/funding-arb-utils.d.ts +48 -23
  55. package/dist/bot/strategies/funding-arb-utils.js +159 -195
  56. package/dist/bot/strategies/funding-arb-v2.d.ts +32 -0
  57. package/dist/bot/strategies/funding-arb-v2.js +258 -47
  58. package/dist/bot/strategies/funding-auto.js +215 -194
  59. package/dist/bot/strategies/spot-perp-arb-strategy.d.ts +14 -0
  60. package/dist/bot/strategies/spot-perp-arb-strategy.js +217 -50
  61. package/dist/bot/strategies/spot-perp-executor.d.ts +73 -19
  62. package/dist/bot/strategies/spot-perp-executor.js +319 -120
  63. package/dist/bot/strategies/spot-perp-state.d.ts +43 -0
  64. package/dist/bot/strategies/spot-perp-state.js +70 -0
  65. package/dist/bot/strategy-types.d.ts +6 -0
  66. package/dist/bot/tui/BotDashboard.d.ts +7 -2
  67. package/dist/bot/tui/BotDashboard.js +6 -3
  68. package/dist/bridge-engine.d.ts +120 -19
  69. package/dist/bridge-engine.js +710 -422
  70. package/dist/bridge-signers.d.ts +54 -0
  71. package/dist/bridge-signers.js +161 -0
  72. package/dist/cache.d.ts +4 -1
  73. package/dist/cache.js +11 -0
  74. package/dist/cli-flags.d.ts +50 -0
  75. package/dist/cli-flags.js +104 -0
  76. package/dist/cli-program.d.ts +35 -0
  77. package/dist/cli-program.js +286 -0
  78. package/dist/cli-spec.js +1 -1
  79. package/dist/client-id-tracker.js +11 -2
  80. package/dist/commands/account.d.ts +7 -1
  81. package/dist/commands/account.js +74 -84
  82. package/dist/commands/agent-import.d.ts +114 -0
  83. package/dist/commands/agent-import.js +794 -0
  84. package/dist/commands/agent.d.ts +232 -2
  85. package/dist/commands/agent.js +1858 -955
  86. package/dist/commands/alerts.d.ts +1 -0
  87. package/dist/commands/alerts.js +31 -28
  88. package/dist/commands/arb/index.d.ts +60 -1
  89. package/dist/commands/arb/index.js +381 -384
  90. package/dist/commands/arb-auto.d.ts +132 -4
  91. package/dist/commands/arb-auto.js +1474 -967
  92. package/dist/commands/arb.d.ts +3 -1
  93. package/dist/commands/arb.js +62 -30
  94. package/dist/commands/bot.js +127 -47
  95. package/dist/commands/bridge.d.ts +2 -1
  96. package/dist/commands/bridge.js +339 -192
  97. package/dist/commands/builder.d.ts +55 -0
  98. package/dist/commands/builder.js +387 -0
  99. package/dist/commands/funds-onchain.d.ts +32 -0
  100. package/dist/commands/funds-onchain.js +286 -0
  101. package/dist/commands/funds.d.ts +25 -0
  102. package/dist/commands/funds.js +939 -245
  103. package/dist/commands/history.js +72 -45
  104. package/dist/commands/init.d.ts +107 -15
  105. package/dist/commands/init.js +1116 -249
  106. package/dist/commands/jobs.d.ts +2 -1
  107. package/dist/commands/jobs.js +77 -15
  108. package/dist/commands/manage.js +136 -91
  109. package/dist/commands/market.d.ts +4 -1
  110. package/dist/commands/market.js +35 -32
  111. package/dist/commands/outcome.d.ts +10 -0
  112. package/dist/commands/outcome.js +396 -0
  113. package/dist/commands/plan.js +52 -12
  114. package/dist/commands/portfolio.d.ts +1 -0
  115. package/dist/commands/portfolio.js +60 -72
  116. package/dist/commands/rebalance.d.ts +2 -1
  117. package/dist/commands/rebalance.js +33 -43
  118. package/dist/commands/risk.js +46 -19
  119. package/dist/commands/settings.d.ts +1 -0
  120. package/dist/commands/settings.js +246 -51
  121. package/dist/commands/trade.d.ts +50 -0
  122. package/dist/commands/trade.js +1943 -695
  123. package/dist/commands/wallet.d.ts +30 -1
  124. package/dist/commands/wallet.js +316 -337
  125. package/dist/config.d.ts +60 -9
  126. package/dist/config.js +252 -82
  127. package/dist/constants.d.ts +29 -4
  128. package/dist/constants.js +62 -20
  129. package/dist/dashboard/server.d.ts +2 -0
  130. package/dist/dashboard/server.js +9 -6
  131. package/dist/dashboard/ui.js +6 -4
  132. package/dist/dashboard/ws-feeds.js +20 -8
  133. package/dist/dex-asset-map.js +5 -3
  134. package/dist/errors.d.ts +122 -0
  135. package/dist/errors.js +194 -0
  136. package/dist/event-stream.js +75 -19
  137. package/dist/evm-master-tx.d.ts +59 -0
  138. package/dist/evm-master-tx.js +154 -0
  139. package/dist/exchanges/adapter-network.d.ts +10 -0
  140. package/dist/exchanges/adapter-network.js +10 -0
  141. package/dist/exchanges/arcus/adapter.d.ts +196 -0
  142. package/dist/exchanges/arcus/adapter.js +1092 -0
  143. package/dist/exchanges/arcus/agent.d.ts +55 -0
  144. package/dist/exchanges/arcus/agent.js +188 -0
  145. package/dist/exchanges/arcus/client.d.ts +63 -0
  146. package/dist/exchanges/arcus/client.js +285 -0
  147. package/dist/exchanges/arcus/public.d.ts +65 -0
  148. package/dist/exchanges/arcus/public.js +138 -0
  149. package/dist/exchanges/arcus/signing.d.ts +176 -0
  150. package/dist/exchanges/arcus/signing.js +288 -0
  151. package/dist/exchanges/arcus/spot-chain.d.ts +60 -0
  152. package/dist/exchanges/arcus/spot-chain.js +241 -0
  153. package/dist/exchanges/arcus/spot-router.d.ts +177 -0
  154. package/dist/exchanges/arcus/spot-router.js +183 -0
  155. package/dist/exchanges/arcus/spot.d.ts +109 -0
  156. package/dist/exchanges/arcus/spot.js +645 -0
  157. package/dist/exchanges/aster-funds.d.ts +127 -0
  158. package/dist/exchanges/aster-funds.js +252 -0
  159. package/dist/exchanges/aster-nonce.d.ts +2 -0
  160. package/dist/exchanges/aster-nonce.js +107 -0
  161. package/dist/exchanges/aster-spot.d.ts +117 -0
  162. package/dist/exchanges/aster-spot.js +686 -0
  163. package/dist/exchanges/aster-typed-data.d.ts +133 -7
  164. package/dist/exchanges/aster-typed-data.js +121 -7
  165. package/dist/exchanges/aster.d.ts +219 -6
  166. package/dist/exchanges/aster.js +1023 -153
  167. package/dist/exchanges/builder-fee.d.ts +254 -0
  168. package/dist/exchanges/builder-fee.js +421 -0
  169. package/dist/exchanges/canonical-symbols.d.ts +32 -0
  170. package/dist/exchanges/canonical-symbols.js +96 -0
  171. package/dist/exchanges/capabilities.d.ts +7 -1
  172. package/dist/exchanges/capabilities.js +7 -0
  173. package/dist/exchanges/hl-signing.d.ts +165 -0
  174. package/dist/exchanges/hl-signing.js +158 -0
  175. package/dist/exchanges/hyperliquid-outcome.d.ts +211 -0
  176. package/dist/exchanges/hyperliquid-outcome.js +646 -0
  177. package/dist/exchanges/hyperliquid-spot.d.ts +44 -5
  178. package/dist/exchanges/hyperliquid-spot.js +308 -117
  179. package/dist/exchanges/hyperliquid.d.ts +462 -57
  180. package/dist/exchanges/hyperliquid.js +1575 -449
  181. package/dist/exchanges/index.d.ts +6 -0
  182. package/dist/exchanges/index.js +4 -0
  183. package/dist/exchanges/interface.d.ts +63 -10
  184. package/dist/exchanges/interface.js +18 -3
  185. package/dist/exchanges/ioc-outcome.d.ts +44 -0
  186. package/dist/exchanges/ioc-outcome.js +57 -0
  187. package/dist/exchanges/legacy-trading-v2.d.ts +39 -0
  188. package/dist/exchanges/legacy-trading-v2.js +940 -0
  189. package/dist/exchanges/lighter-public.d.ts +43 -0
  190. package/dist/exchanges/lighter-public.js +276 -0
  191. package/dist/exchanges/lighter-rh-deposit.d.ts +62 -0
  192. package/dist/exchanges/lighter-rh-deposit.js +185 -0
  193. package/dist/exchanges/lighter-signer.d.ts +123 -0
  194. package/dist/exchanges/lighter-signer.js +215 -0
  195. package/dist/exchanges/lighter-spot.d.ts +91 -13
  196. package/dist/exchanges/lighter-spot.js +595 -233
  197. package/dist/exchanges/lighter.d.ts +611 -39
  198. package/dist/exchanges/lighter.js +1890 -649
  199. package/dist/exchanges/ondo/adapter.d.ts +166 -0
  200. package/dist/exchanges/ondo/adapter.js +835 -0
  201. package/dist/exchanges/ondo/agent.d.ts +31 -0
  202. package/dist/exchanges/ondo/agent.js +101 -0
  203. package/dist/exchanges/ondo/client.d.ts +60 -0
  204. package/dist/exchanges/ondo/client.js +297 -0
  205. package/dist/exchanges/ondo/funds.d.ts +122 -0
  206. package/dist/exchanges/ondo/funds.js +290 -0
  207. package/dist/exchanges/ondo/public.d.ts +95 -0
  208. package/dist/exchanges/ondo/public.js +214 -0
  209. package/dist/exchanges/ondo/spot.d.ts +127 -0
  210. package/dist/exchanges/ondo/spot.js +392 -0
  211. package/dist/exchanges/outcome-interface.d.ts +140 -0
  212. package/dist/exchanges/outcome-interface.js +16 -0
  213. package/dist/exchanges/pacifica-spot.d.ts +83 -0
  214. package/dist/exchanges/pacifica-spot.js +324 -0
  215. package/dist/exchanges/pacifica-typed-data.d.ts +30 -13
  216. package/dist/exchanges/pacifica-typed-data.js +57 -9
  217. package/dist/exchanges/pacifica.d.ts +288 -4
  218. package/dist/exchanges/pacifica.js +1013 -76
  219. package/dist/exchanges/precision.d.ts +47 -0
  220. package/dist/exchanges/precision.js +209 -0
  221. package/dist/exchanges/qfex/adapter.d.ts +341 -0
  222. package/dist/exchanges/qfex/adapter.js +1383 -0
  223. package/dist/exchanges/qfex/agent.d.ts +58 -0
  224. package/dist/exchanges/qfex/agent.js +188 -0
  225. package/dist/exchanges/qfex/client.d.ts +54 -0
  226. package/dist/exchanges/qfex/client.js +138 -0
  227. package/dist/exchanges/qfex/errors.d.ts +70 -0
  228. package/dist/exchanges/qfex/errors.js +236 -0
  229. package/dist/exchanges/qfex/public.d.ts +122 -0
  230. package/dist/exchanges/qfex/public.js +268 -0
  231. package/dist/exchanges/qfex/signing.d.ts +160 -0
  232. package/dist/exchanges/qfex/signing.js +283 -0
  233. package/dist/exchanges/qfex/ws-transport.d.ts +294 -0
  234. package/dist/exchanges/qfex/ws-transport.js +798 -0
  235. package/dist/exchanges/rate-limiter.d.ts +12 -0
  236. package/dist/exchanges/rate-limiter.js +64 -0
  237. package/dist/exchanges/registry.d.ts +14 -2
  238. package/dist/exchanges/registry.js +20 -32
  239. package/dist/exchanges/slippage.d.ts +37 -0
  240. package/dist/exchanges/slippage.js +70 -0
  241. package/dist/exchanges/spot-factory.d.ts +166 -0
  242. package/dist/exchanges/spot-factory.js +431 -0
  243. package/dist/exchanges/spot-interface.d.ts +98 -4
  244. package/dist/exchanges/spot-interface.js +27 -1
  245. package/dist/exchanges/spot-result.d.ts +79 -0
  246. package/dist/exchanges/spot-result.js +273 -0
  247. package/dist/exchanges/trading-v2.d.ts +117 -0
  248. package/dist/exchanges/trading-v2.js +301 -0
  249. package/dist/exchanges/venue-types.d.ts +231 -0
  250. package/dist/exchanges/venue-types.js +87 -0
  251. package/dist/exchanges/venue.d.ts +211 -0
  252. package/dist/exchanges/venue.js +132 -0
  253. package/dist/exchanges/venues/arcus.d.ts +8 -0
  254. package/dist/exchanges/venues/arcus.js +109 -0
  255. package/dist/exchanges/venues/aster.d.ts +49 -0
  256. package/dist/exchanges/venues/aster.js +176 -0
  257. package/dist/exchanges/venues/create-helpers.d.ts +18 -0
  258. package/dist/exchanges/venues/create-helpers.js +199 -0
  259. package/dist/exchanges/venues/hyperliquid.d.ts +23 -0
  260. package/dist/exchanges/venues/hyperliquid.js +126 -0
  261. package/dist/exchanges/venues/index.d.ts +16 -0
  262. package/dist/exchanges/venues/index.js +26 -0
  263. package/dist/exchanges/venues/lighter-family.d.ts +92 -0
  264. package/dist/exchanges/venues/lighter-family.js +166 -0
  265. package/dist/exchanges/venues/lighter-rh.d.ts +7 -0
  266. package/dist/exchanges/venues/lighter-rh.js +58 -0
  267. package/dist/exchanges/venues/lighter.d.ts +6 -0
  268. package/dist/exchanges/venues/lighter.js +55 -0
  269. package/dist/exchanges/venues/ondo.d.ts +34 -0
  270. package/dist/exchanges/venues/ondo.js +140 -0
  271. package/dist/exchanges/venues/pacifica.d.ts +8 -0
  272. package/dist/exchanges/venues/pacifica.js +95 -0
  273. package/dist/exchanges/venues/qfex.d.ts +28 -0
  274. package/dist/exchanges/venues/qfex.js +132 -0
  275. package/dist/execution-log.js +10 -2
  276. package/dist/funding/legacy-public.d.ts +31 -0
  277. package/dist/funding/legacy-public.js +369 -0
  278. package/dist/funding/normalize.d.ts +28 -16
  279. package/dist/funding/normalize.js +61 -29
  280. package/dist/funding/rates.d.ts +46 -11
  281. package/dist/funding/rates.js +228 -277
  282. package/dist/guardrail/perp-guardrail.js +0 -0
  283. package/dist/index.js +157 -682
  284. package/dist/jobs.d.ts +84 -6
  285. package/dist/jobs.js +239 -41
  286. package/dist/landing.d.ts +14 -0
  287. package/dist/landing.js +36 -0
  288. package/dist/mcp-server.d.ts +14 -4
  289. package/dist/mcp-server.js +820 -402
  290. package/dist/mcp-trade-guard.d.ts +16 -0
  291. package/dist/mcp-trade-guard.js +59 -0
  292. package/dist/pacifica/client.d.ts +41 -10
  293. package/dist/pacifica/client.js +167 -63
  294. package/dist/pacifica/constants.d.ts +0 -1
  295. package/dist/pacifica/constants.js +0 -5
  296. package/dist/pacifica/deposit.d.ts +30 -3
  297. package/dist/pacifica/deposit.js +119 -2
  298. package/dist/pacifica/faucet.d.ts +29 -0
  299. package/dist/pacifica/faucet.js +100 -0
  300. package/dist/pacifica/sign-tx.d.ts +15 -0
  301. package/dist/pacifica/sign-tx.js +41 -0
  302. package/dist/pacifica/types/account.d.ts +28 -4
  303. package/dist/pacifica/types/lake.d.ts +20 -5
  304. package/dist/pacifica/types/lake.js +4 -0
  305. package/dist/pacifica/types/market.d.ts +5 -0
  306. package/dist/pacifica/types/order.d.ts +4 -1
  307. package/dist/pacifica/types/position.d.ts +9 -1
  308. package/dist/plan-executor.d.ts +10 -5
  309. package/dist/plan-executor.js +165 -54
  310. package/dist/position-history.js +13 -0
  311. package/dist/rebalance.d.ts +26 -2
  312. package/dist/rebalance.js +86 -7
  313. package/dist/relay-swap.d.ts +232 -0
  314. package/dist/relay-swap.js +630 -0
  315. package/dist/risk.js +5 -1
  316. package/dist/secret-env.d.ts +15 -0
  317. package/dist/secret-env.js +36 -0
  318. package/dist/settings.d.ts +169 -6
  319. package/dist/settings.js +219 -38
  320. package/dist/signer/ows-evm.d.ts +13 -0
  321. package/dist/signer/ows-evm.js +22 -0
  322. package/dist/smart-order.d.ts +9 -0
  323. package/dist/smart-order.js +53 -8
  324. package/dist/strategies/dca.d.ts +6 -2
  325. package/dist/strategies/dca.js +66 -26
  326. package/dist/strategies/funding-arb.d.ts +11 -1
  327. package/dist/strategies/funding-arb.js +202 -89
  328. package/dist/strategies/grid.d.ts +31 -0
  329. package/dist/strategies/grid.js +89 -11
  330. package/dist/strategies/pending-stop.d.ts +8 -0
  331. package/dist/strategies/pending-stop.js +12 -0
  332. package/dist/strategies/split-order.d.ts +45 -17
  333. package/dist/strategies/split-order.js +157 -91
  334. package/dist/strategies/trailing-stop.d.ts +2 -1
  335. package/dist/strategies/trailing-stop.js +52 -6
  336. package/dist/strategies/twap.d.ts +6 -1
  337. package/dist/strategies/twap.js +39 -11
  338. package/dist/trade-validator.d.ts +22 -0
  339. package/dist/trade-validator.js +119 -15
  340. package/dist/utils/numeric.d.ts +46 -0
  341. package/dist/utils/numeric.js +79 -0
  342. package/dist/utils.d.ts +19 -0
  343. package/dist/utils.js +96 -19
  344. package/dist/withdraw-gate.d.ts +49 -0
  345. package/dist/withdraw-gate.js +131 -0
  346. package/package.json +15 -6
  347. package/skills/perp-cli/SKILL.md +338 -134
  348. package/skills/perp-cli/references/agent-operations.md +181 -92
  349. package/skills/perp-cli/references/commands.md +475 -132
  350. package/skills/perp-cli/references/strategies.md +44 -38
  351. package/skills/perp-cli/scripts/arb-monitor.sh +22 -17
  352. package/skills/perp-cli/scripts/funding-analysis.sh +20 -10
  353. package/skills/perp-cli/scripts/preflight.sh +21 -14
  354. package/skills/perp-cli/scripts/spot-perp-scan.sh +12 -7
  355. package/skills/perp-cli/scripts/validate-arb.sh +33 -16
  356. package/vendor/lighter-signer/SHA256SUMS +2 -0
  357. package/vendor/lighter-signer/VERSION +8 -0
  358. package/vendor/lighter-signer/lighter-signer.wasm +0 -0
  359. package/vendor/lighter-signer/wasm_exec.js +575 -0
  360. package/dist/bot/strategies/funding-arb-v2-strategy.d.ts +0 -42
  361. package/dist/bot/strategies/funding-arb-v2-strategy.js +0 -864
@@ -1,8 +1,161 @@
1
1
  import { Keypair } from "@solana/web3.js";
2
2
  import { PacificaClient, type Network } from "../pacifica/index.js";
3
3
  import type { ExchangeAdapter, ExchangeMarketInfo, ExchangePosition, ExchangeOrder, ExchangeBalance, ExchangeTrade, ExchangeFundingPayment, ExchangeKline } from "./interface.js";
4
+ import type { ResolvedSlippage } from "./slippage.js";
4
5
  import type { SolanaSigner } from "../signer/index.js";
5
6
  import type { AgentMeta } from "../settings.js";
7
+ import type { TimeInForce as PacificaTif } from "../pacifica/types/order.js";
8
+ import type { IocOutcome } from "./ioc-outcome.js";
9
+ import { type BuilderApproval, type BuilderDecision, type BuilderFeeGate, type BuilderTarget } from "./builder-fee.js";
10
+ /**
11
+ * CLI TIF → Pacifica TIF (design §13.3). GTC / IOC / ALO / TOB are native; venue
12
+ * aliases GTT → GTC and GTX → ALO; no TIF → GTC (uniform default). FOK (never
13
+ * emulated) and unknown values → uniform CAPABILITY_UNSUPPORTED.
14
+ */
15
+ export declare function pacificaTif(tif: string | undefined): PacificaTif;
16
+ export declare function pacificaClientOrderId(tif: PacificaTif): string;
17
+ /**
18
+ * A caller's client order id: Pacifica takes a "Full UUID string" (docs.pacifica.fi rest-api
19
+ * orders/create-limit-order + create-market-order: `client_order_id` | Full UUID string | optional
20
+ * | "Client-defined order ID" | f47ac10b-58cc-4372-a567-0e02b2c3d479). Anything else →
21
+ * INVALID_PARAMS before sending. An id in the reserved generated layout (`5ac1f` + TIF code) must
22
+ * state the order's own TIF `tif` (amend trusts it); null `tif` = the order has none (market).
23
+ */
24
+ export declare function requirePacificaClientOrderId(id: string, tif: PacificaTif | null): string;
25
+ /** TIF encoded in a generated client_order_id; null = not generated here (attributes unknown). */
26
+ export declare function pacificaTifOf(clientOrderId: unknown): PacificaTif | null;
27
+ /**
28
+ * The order's current `/orders/history_by_id` row. The array position is not a documented
29
+ * ordering and is never used: the row with the largest `created_at` wins (a timestamp tie →
30
+ * the single terminal row among them; several terminal rows tied → null). When rows lack a
31
+ * numeric `created_at`, only an explicit terminal row (filled / cancelled / rejected) for
32
+ * that order id is taken, and only when it is the only one. null = not proven (the caller
33
+ * polls again or reports pending). Rows of another order id are ignored.
34
+ */
35
+ export declare function pacificaLatestHistoryRow(rows: unknown, orderId: string): Record<string, unknown> | null;
36
+ /**
37
+ * Venue-final state of a placed order, read from its `/orders/history_by_id` rows
38
+ * (order_status open / partially_filled / filled / cancelled / rejected — docs
39
+ * rest-api/orders/get-order-history-by-id). Attached to the raw create / edit result as
40
+ * `orderOutcome`. open = resting (or an untriggered stop); a resting / cancelled order with
41
+ * a fill → partiallyFilled.
42
+ */
43
+ export interface PacificaOrderOutcome {
44
+ status: "open" | "partiallyFilled" | "filled" | "cancelled" | "rejected";
45
+ final: true;
46
+ /** Venue order_status / event_type of the row the outcome was read from. */
47
+ venueStatus: string;
48
+ eventType: string | null;
49
+ orderId: string;
50
+ filledSize: string;
51
+ /** The row's price / initial_amount as the venue reports them (null = not reported). */
52
+ price: string | null;
53
+ size: string | null;
54
+ source: "history_by_id";
55
+ }
56
+ /**
57
+ * The order's outcome from its history_by_id rows (pacificaLatestHistoryRow), or null when not
58
+ * proven: no row for `orderId`, an unknown order_status, or no decimal filled_amount.
59
+ * `terminalOnly` (IOC): an open / partially_filled row is not an outcome (the order never rests).
60
+ * `expect` (price / size sent): a row whose price or initial_amount differ is not this
61
+ * placement / edit yet → null.
62
+ */
63
+ export declare function pacificaOrderOutcomeOf(rows: unknown, orderId: string, opts?: {
64
+ terminalOnly?: boolean;
65
+ expect?: {
66
+ price: string | null;
67
+ size: string | null;
68
+ };
69
+ }): PacificaOrderOutcome | null;
70
+ /**
71
+ * A create-order POST the venue refused with HTTP 422 (Pacifica "Business Logic Error", error-codes
72
+ * doc) is a definite pre-trade rejection — no order was created. Live testnet 2026-10-02:
73
+ * POST /orders/create_market 422 {"success":false,"error":"No reasonable price found for SOL-USDC",
74
+ * "code":0,"error_id":"no_reasonable_price"} (an empty book). → ORDER_REJECTED carrying the venue's
75
+ * error / code / error_id — but ONLY for the documented validation codes
76
+ * (PACIFICA_DEFINITE_CREATE_CODES / _ERROR_IDS). Internal or unknown codes → ORDER_PENDING (the
77
+ * order may exist). Anything else (other status, unparseable body, not a create path, already a
78
+ * PerpError) → `e` unchanged.
79
+ */
80
+ export declare function pacificaCreateRejection(e: unknown, what: string): unknown;
81
+ /**
82
+ * 422 business codes that say a create was validated and REFUSED (docs.pacifica.fi api
83
+ * error-codes, read 2026-10-05): 1 ACCOUNT_NOT_FOUND, 3 BOOK_NOT_FOUND, 4 INVALID_TICK_LEVEL,
84
+ * 5 INSUFFICIENT_BALANCE, 7/8 ORDER_AMOUNT_TOO_LOW/HIGH, 10 OPEN_ORDER_LIMIT_REACHED,
85
+ * 13 POSITION_NOT_FOUND, 16–23 stop / order-type / reduce-only validation, 25 NO_REASONABLE_PRICE,
86
+ * 28 IMMEDIATE_LIQUIDATION, 30 PRICE_TOO_FAR_FROM_MARK, 36 DUPLICATE_CLIENT_ORDER_ID,
87
+ * 38 TRADING_DISABLED, 41 OPEN_INTEREST_LIMIT_EXCEEDED, 49 POSITION_TPSL_LIMIT_EXCEEDED,
88
+ * 50 INVALID_BUILDER_CODE, 51 UNSUPPORTED_OPERATION, 52 INVALID_TICK_SIZE,
89
+ * 53 ORDER_BLOCKED_BY_LOAN_POOL_STRESS, 55/56 ASSET_NOT_FOUND/NOT_ACTIVE, 59 INVALID_AMOUNT,
90
+ * 62 INSUFFICIENT_SPOT_BALANCE, 63 MISSING_MARK_PRICE, 106–108 spot restrictions,
91
+ * 119 ORACLE_NOT_AVAILABLE. NOT listed (outcome unknown): 0 INTERNAL, 14 DATABASE_ERROR,
92
+ * 26 CHANNEL_CLOSED, 27 RESPONSE_DROPPED and every undocumented code.
93
+ */
94
+ export declare const PACIFICA_DEFINITE_CREATE_CODES: ReadonlySet<number>;
95
+ /**
96
+ * `error_id` values that are definite on their own: the venue sends some validation refusals
97
+ * under code 0 with a specific error_id (live testnet 2026-10-02: an empty book →
98
+ * {"code":0,"error_id":"no_reasonable_price"}).
99
+ * Live mainnet 2026-10-05: a reduce-only limit with no position →
100
+ * {"code":0,"error_id":"no_position_for_reduce_only_order"} ("No position found for reduce-only order").
101
+ */
102
+ export declare const PACIFICA_DEFINITE_CREATE_ERROR_IDS: ReadonlySet<string>;
103
+ /**
104
+ * Pacifica's documented USDC withdrawal minimum (docs.pacifica.fi "Deposits & Withdrawals":
105
+ * "Minimum withdrawal: $1. Fees: $1 per withdrawal (gas)"). Not the whole rule: testnet refused
106
+ * exactly 1 USDC on 2026-10-02 with 422 code 29 WITHDRAW_AMOUNT_TOO_LOW, so amounts at or just
107
+ * above it are left to the venue (pacificaWithdrawRejection maps the refusal).
108
+ */
109
+ export declare const PACIFICA_WITHDRAW_MIN_USDC = "1";
110
+ /**
111
+ * A withdraw POST the venue refused with HTTP 422 (Business Logic Error — nothing was withdrawn):
112
+ * code 29 WITHDRAW_AMOUNT_TOO_LOW → INVALID_PARAMS, code 9 OVER_WITHDRAWAL → INSUFFICIENT_BALANCE,
113
+ * any other explicit refusal → ACTION_REJECTED (codes: docs.pacifica.fi api error-codes). Anything
114
+ * else (other status, unparseable body, already a PerpError) → `e` unchanged (outcome unknown).
115
+ */
116
+ export declare function pacificaWithdrawRejection(e: unknown, amount: string): unknown;
117
+ export declare function pacificaRefused(e: unknown): boolean;
118
+ /** A cancel the venue refused (HTTP 4xx), settled from the order's own history_by_id rows. */
119
+ export type PacificaCancelRefusal = {
120
+ kind: "failed";
121
+ error: string;
122
+ } | {
123
+ kind: "pending";
124
+ reason: string;
125
+ };
126
+ /**
127
+ * What a refused cancel (POST /orders/cancel 4xx, e.g. 422 {"error":"Failed to cancel order","code":5}
128
+ * for an already-filled market order — live testnet 2026-10-02) means for the order, from its
129
+ * history_by_id read (`history` = the read's data, or the read's error):
130
+ * - terminal row (filled / cancelled / rejected) → failed: nothing was cancelled by this request;
131
+ * - GET 404 "Order history not found" → failed: the venue has no such order;
132
+ * - a still-open row, no row, or any other read failure → pending (not proven either way).
133
+ * Never "cancelled".
134
+ */
135
+ export declare function pacificaCancelRefusalOf(orderId: string, refusal: string, history: {
136
+ data: unknown;
137
+ } | {
138
+ error: unknown;
139
+ }): PacificaCancelRefusal;
140
+ /** Result of a TIF-preserving amend (see PacificaAdapter.amendKeepingTif). */
141
+ export interface PacificaAmendResult {
142
+ method: "nativeAmend" | "cancelReplace";
143
+ /** TIF of the amended / replacement order. */
144
+ tif: PacificaTif;
145
+ /** Order id after the amend: the edited order (native) or the replacement (null = no replacement placed). */
146
+ orderId: string | null;
147
+ clientOrderId: string | null;
148
+ filledBeforeCancel: string | null;
149
+ replacedSize: string | null;
150
+ /** The original order's terminal history row said "filled" (it filled completely before the cancel). */
151
+ filledCompletely: boolean;
152
+ /** Venue-final state of the edited / replacement order (history_by_id); null = unresolved or none placed. */
153
+ outcome: PacificaOrderOutcome | null;
154
+ notes: string[];
155
+ venueRaw: unknown;
156
+ }
157
+ /** Pacifica order_type of a stop / TP / SL order (stop_market, stop_limit, take_profit_*, stop_loss_*). */
158
+ export declare function isPacificaStopType(type: string): boolean;
6
159
  export declare class PacificaAdapter implements ExchangeAdapter {
7
160
  readonly name = "pacifica";
8
161
  readonly chain = "solana";
@@ -27,8 +180,17 @@ export declare class PacificaAdapter implements ExchangeAdapter {
27
180
  private _marketsCache;
28
181
  private _marketsCacheTime;
29
182
  private static readonly CACHE_TTL;
30
- constructor(keypair: Keypair, network?: Network, builderCode?: string, hasRealKey?: boolean);
183
+ /** Venue network — part of every account cache key (the same key exists on mainnet and testnet). */
184
+ private _network;
185
+ /**
186
+ * Builder-fee gate (settings builder.pacifica + confirmed approval); null = not configured.
187
+ * Set by createPacifica (venues/create-helpers.ts) — the adapter never reads settings.
188
+ */
189
+ builderFee: BuilderFeeGate | null;
190
+ constructor(keypair: Keypair, network?: Network, hasRealKey?: boolean);
31
191
  private ensureSigner;
192
+ /** Resolve the active signer tier and sync agent_wallet on the client (used by PacificaSpotAdapter). */
193
+ prepareSigning(): void;
32
194
  /**
33
195
  * Inject an external Solana signer (Tier 2 — OWS master).
34
196
  * Backward-compatible: existing callers (e.g. `perp -e pacifica --ows ...`
@@ -46,11 +208,27 @@ export declare class PacificaAdapter implements ExchangeAdapter {
46
208
  get activeSignerTier(): "agent" | "master" | "pk" | null;
47
209
  /** Resolve the active signer across three tiers. Mirrors AsterAdapter._resolveSigner. */
48
210
  private _resolveSigner;
211
+ /**
212
+ * The owner (master) Solana signer for on-chain transactions (deposit, test-token
213
+ * mint) — never the agent, which cannot move funds.
214
+ */
215
+ masterSolanaSigner(): SolanaSigner;
49
216
  /** Access the underlying Keypair (only available with LocalSolanaSigner). */
50
217
  get keypair(): Keypair;
51
218
  private _getPrices;
52
219
  private _getPositions;
53
220
  get publicKey(): string;
221
+ /** Builder decision for the next perp order (cached approval read; never throws). */
222
+ builderDecision(): Promise<BuilderDecision>;
223
+ /** builder_code to send with the next perp order, or null (not configured / not approved). */
224
+ private builderCode;
225
+ /**
226
+ * Approval of `target.identity` on this account (GET /account/builder_codes/approvals).
227
+ * Pacifica's builder sets its own rate up to the approved max_fee_rate, so the code is
228
+ * attached only while that max ≤ target.feeBps (the user's consent); a higher approved max
229
+ * is "aboveConsent" (not attached, real max reported).
230
+ */
231
+ builderApprovalOf(target: BuilderTarget): Promise<BuilderApproval>;
54
232
  get sdk(): PacificaClient;
55
233
  get signer(): (msg: Uint8Array) => Promise<Uint8Array>;
56
234
  getMarkets(): Promise<ExchangeMarketInfo[]>;
@@ -60,25 +238,131 @@ export declare class PacificaAdapter implements ExchangeAdapter {
60
238
  }>;
61
239
  getBalance(): Promise<ExchangeBalance>;
62
240
  getPositions(): Promise<ExchangePosition[]>;
241
+ /**
242
+ * The leverage this account applies to `symbol`: its GET /account/settings `margin_settings`
243
+ * entry ("Current leverage set by the user"); no entry → the market's max leverage (docs
244
+ * get-account-settings: "leverage default to max ... will return blank"). Unreadable → EXCHANGE_ERROR.
245
+ */
246
+ marketLeverage(symbol: string): Promise<number>;
63
247
  getOpenOrders(): Promise<ExchangeOrder[]>;
64
- marketOrder(symbol: string, side: "buy" | "sell", size: string, opts?: {
65
- reduceOnly?: boolean;
248
+ marketOrder(symbol: string, side: "buy" | "sell", size: string, opts: {
249
+ reduceOnly: boolean;
250
+ slippage: ResolvedSlippage;
251
+ clientOrderId?: string;
66
252
  }): Promise<unknown>;
253
+ /**
254
+ * Venue-final outcome of a raw marketOrder() result (IocOutcomeCapable, design §13.10 #4),
255
+ * parsed from the result's content (so copies of it work): its `fillReport` — the terminal
256
+ * history_by_id row (filled / cancelled / rejected) with a reported filled_amount — for the
257
+ * same order id as the create response. null otherwise — reduce-only orders (not polled),
258
+ * a poll that timed out or saw only non-terminal rows, any other raw value. Never guesses.
259
+ */
260
+ iocOutcomeOf(raw: unknown): IocOutcome | null;
261
+ /**
262
+ * Venue-final outcome of a placed / edited order: polls `/orders/history_by_id` (bounded,
263
+ * 6 × 500 ms) until pacificaOrderOutcomeOf proves one. null = still unknown (the caller
264
+ * reports pending). Read failures poll again; the last one is logged when nothing resolved.
265
+ */
266
+ resolveOrderOutcome(orderId: string, what: string, opts?: {
267
+ terminalOnly?: boolean;
268
+ expect?: {
269
+ price: string | null;
270
+ size: string | null;
271
+ };
272
+ }): Promise<PacificaOrderOutcome | null>;
273
+ /** The raw create result with its resolved `orderOutcome` attached (unchanged when there is no order id / a body error / no outcome). */
274
+ private withOrderOutcome;
275
+ /**
276
+ * Limit order. The create response is only an ack ({ order_id }); the placement outcome
277
+ * (resting / filled / cancelled / rejected) is read back from history_by_id and attached as
278
+ * `orderOutcome` (IOC: terminal rows only). Unresolved → no `orderOutcome` (pending).
279
+ */
67
280
  limitOrder(symbol: string, side: "buy" | "sell", price: string, size: string, opts?: {
68
281
  reduceOnly?: boolean;
69
282
  tif?: string;
283
+ clientOrderId?: string;
70
284
  }): Promise<unknown>;
71
285
  cancelOrder(symbol: string, orderId: string): Promise<unknown>;
72
- cancelAllOrders(symbol?: string): Promise<unknown>;
286
+ /**
287
+ * The account's order carrying `clientOrderId`, from the venue's own listings — both document
288
+ * the field: GET /orders and GET /orders/history rows carry `client_order_id` ("CLOID of order
289
+ * if assigned by user", docs.pacifica.fi rest-api orders/get-open-orders, get-order-history).
290
+ * Open orders first, then the latest order-history page (the venue's default page, 100 rows).
291
+ * null = not among them. history_by_id itself takes only `order_id`, so this resolves the id.
292
+ */
293
+ orderByClientId(clientOrderId: string): Promise<{
294
+ orderId: string;
295
+ symbol: string;
296
+ type: string;
297
+ open: boolean;
298
+ } | null>;
299
+ /**
300
+ * Venue-final state of one order from a single `/orders/history_by_id` read (`trade status`).
301
+ * null outcome = the rows prove no state yet (reported pending). A 404 → ORDER_NOT_FOUND.
302
+ */
303
+ orderStatusById(orderId: string): Promise<{
304
+ outcome: PacificaOrderOutcome | null;
305
+ clientOrderId: string | null;
306
+ venueRaw: unknown;
307
+ }>;
308
+ /** A refused cancel of `orderId` (pacificaRefused error) settled from one history_by_id read (pacificaCancelRefusalOf). */
309
+ cancelRefusalOutcome(orderId: string, refusal: unknown): Promise<PacificaCancelRefusal>;
310
+ cancelAllOrders(symbol?: string): Promise<unknown[]>;
311
+ /** Stop / TP / SL rows (incl. position-level TP/SL) go to /orders/stop/cancel; /orders/cancel refuses them (422). */
312
+ private _cancelListed;
313
+ /**
314
+ * Native edit (POST /orders/edit). Venue semantics (docs rest-api/orders/edit-order,
315
+ * read 2026-10-02): the edit cancels the original and creates a new order with the same
316
+ * side, reduce-only and client_order_id, a new order_id, and TIF = ALO (post-only) —
317
+ * whatever the original TIF was. Post-only is therefore always kept (an ALO original
318
+ * stays ALO); a GTC / TOB original becomes ALO and is rejected instead of crossing.
319
+ * The original TIF is not readable (GET /orders has no tif field), so the conversion
320
+ * cannot be detected per order; callers report it (execution tifSent "ALO").
321
+ */
73
322
  editOrder(symbol: string, orderId: string, price: string, size: string): Promise<unknown>;
323
+ /**
324
+ * Amend that keeps the order's TIF (design §13.4, §13.10 #10). `size` = new open size.
325
+ * TIF = `tif` when the caller gives one, else the TIF encoded in the order's generated
326
+ * client_order_id; unknown → uniform CAPABILITY_UNSUPPORTED (never guessed).
327
+ * - ALO: native edit (the venue re-creates the order as ALO, keeping its client_order_id).
328
+ * - GTC / TOB: cancel → read the fill at cancel → replace with
329
+ * size − (filledAtCancel − filledAtRead) at the same TIF / side / reduce-only (≤ 0 or below
330
+ * the lot → no replacement, reported). Cancel outcome unknown → ORDER_PENDING (no replace);
331
+ * cancel ok but the fill at cancel unreadable or the replacement refused → ORDER_PARTIAL
332
+ * { cancelled, placed: null }; replacement outcome unknown → ORDER_PENDING.
333
+ */
334
+ amendKeepingTif(symbol: string, orderId: string, price: string, size: string, tif: PacificaTif | null, forceTif?: boolean): Promise<PacificaAmendResult>;
335
+ /** Cancel a stop / TP / SL order (POST /orders/stop/cancel). An explicit venue refusal → ORDER_REJECTED. */
336
+ cancelStopOrder(symbol: string, orderId: string): Promise<unknown>;
337
+ /** Open position-level TP/SL orders (order_type take_profit_* / stop_loss_*) on `symbol`. */
338
+ positionTpSlOrders(symbol: string): Promise<Array<{
339
+ orderId: string;
340
+ type: string;
341
+ stopPrice: string | null;
342
+ }>>;
343
+ /**
344
+ * Position-level TP/SL (POST /positions/tpsl). `positionSide` = the position's side; the
345
+ * venue's `side` field is the TP/SL orders' (CLOSING) side: long → "ask", short → "bid"
346
+ * (pacifica-fi/python-sdk rest/create_position_tpsl.py: a BTC long sends side "ask"; the
347
+ * position side was refused live on testnet 2026-10-02 with 422 "Invalid stop order side").
348
+ * Covers the whole position. An explicit venue refusal → ORDER_REJECTED.
349
+ */
350
+ setPositionTpSl(symbol: string, positionSide: "long" | "short", tpsl: {
351
+ tp: string | null;
352
+ tpLimit: string | null;
353
+ sl: string | null;
354
+ }): Promise<unknown>;
74
355
  setLeverage(symbol: string, leverage: number, marginMode?: "cross" | "isolated"): Promise<{
75
356
  symbol: string;
76
357
  leverage: number;
77
358
  marginMode: "cross" | "isolated";
78
359
  }>;
360
+ /** CLI trigger-type → Pacifica `trigger_price_type` value. Omitted ⇒ venue default (mark_price). */
361
+ private static readonly TRIGGER_TYPE;
79
362
  stopOrder(symbol: string, side: "buy" | "sell", size: string, triggerPrice: string, opts?: {
80
363
  limitPrice?: string;
81
364
  reduceOnly?: boolean;
365
+ triggerType?: "mark" | "last" | "mid";
82
366
  }): Promise<unknown>;
83
367
  withdraw(amount: string, destination: string, _opts?: {
84
368
  assetId?: number;