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.
- package/README.md +278 -31
- package/dist/_stderr-filter.js +0 -1
- package/dist/agent-wallet/lighter-keystore.d.ts +11 -0
- package/dist/agent-wallet/lighter-keystore.js +92 -10
- package/dist/agent-wallet/passphrase.d.ts +1 -1
- package/dist/agent-wallet/passphrase.js +16 -3
- package/dist/agent-wallet/store.d.ts +37 -4
- package/dist/agent-wallet/store.js +132 -0
- package/dist/agent-wallet/venue-keystore.d.ts +14 -0
- package/dist/agent-wallet/venue-keystore.js +121 -0
- package/dist/api/public/hyperliquid.js +4 -4
- package/dist/api/public/lighter.js +5 -5
- package/dist/api/public/pacifica.d.ts +0 -1
- package/dist/api/public/pacifica.js +4 -13
- package/dist/api/public/urls.d.ts +9 -1
- package/dist/api/public/urls.js +35 -13
- package/dist/arb/file-lock.d.ts +11 -0
- package/dist/arb/file-lock.js +74 -0
- package/dist/arb/index.d.ts +2 -2
- package/dist/arb/index.js +2 -2
- package/dist/arb/pending-entry.d.ts +32 -0
- package/dist/arb/pending-entry.js +77 -0
- package/dist/arb/sizing.d.ts +6 -13
- package/dist/arb/sizing.js +12 -51
- package/dist/arb/state.d.ts +45 -12
- package/dist/arb/state.js +214 -42
- package/dist/arb/utils.d.ts +20 -6
- package/dist/arb/utils.js +43 -39
- package/dist/bot/conditions.d.ts +4 -4
- package/dist/bot/conditions.js +11 -6
- package/dist/bot/config.d.ts +17 -1
- package/dist/bot/config.js +48 -12
- package/dist/bot/engine.d.ts +61 -2
- package/dist/bot/engine.js +610 -144
- package/dist/bot/fill-size.d.ts +7 -0
- package/dist/bot/fill-size.js +18 -0
- package/dist/bot/index.d.ts +1 -1
- package/dist/bot/index.js +1 -1
- package/dist/bot/perp-order.d.ts +99 -0
- package/dist/bot/perp-order.js +299 -0
- package/dist/bot/presets.d.ts +7 -0
- package/dist/bot/presets.js +17 -0
- package/dist/bot/quarantine.d.ts +75 -0
- package/dist/bot/quarantine.js +190 -0
- package/dist/bot/quote-rules.d.ts +23 -0
- package/dist/bot/quote-rules.js +69 -0
- package/dist/bot/strategies/avellaneda-mm.d.ts +32 -2
- package/dist/bot/strategies/avellaneda-mm.js +72 -70
- package/dist/bot/strategies/basis-arb.js +2 -0
- package/dist/bot/strategies/dca-strategy.d.ts +2 -0
- package/dist/bot/strategies/dca-strategy.js +5 -0
- package/dist/bot/strategies/funding-arb-strategy.d.ts +43 -3
- package/dist/bot/strategies/funding-arb-strategy.js +571 -380
- package/dist/bot/strategies/funding-arb-utils.d.ts +48 -23
- package/dist/bot/strategies/funding-arb-utils.js +159 -195
- package/dist/bot/strategies/funding-arb-v2.d.ts +32 -0
- package/dist/bot/strategies/funding-arb-v2.js +258 -47
- package/dist/bot/strategies/funding-auto.js +215 -194
- package/dist/bot/strategies/spot-perp-arb-strategy.d.ts +14 -0
- package/dist/bot/strategies/spot-perp-arb-strategy.js +217 -50
- package/dist/bot/strategies/spot-perp-executor.d.ts +73 -19
- package/dist/bot/strategies/spot-perp-executor.js +319 -120
- package/dist/bot/strategies/spot-perp-state.d.ts +43 -0
- package/dist/bot/strategies/spot-perp-state.js +70 -0
- package/dist/bot/strategy-types.d.ts +6 -0
- package/dist/bot/tui/BotDashboard.d.ts +7 -2
- package/dist/bot/tui/BotDashboard.js +6 -3
- package/dist/bridge-engine.d.ts +120 -19
- package/dist/bridge-engine.js +710 -422
- package/dist/bridge-signers.d.ts +54 -0
- package/dist/bridge-signers.js +161 -0
- package/dist/cache.d.ts +4 -1
- package/dist/cache.js +11 -0
- package/dist/cli-flags.d.ts +50 -0
- package/dist/cli-flags.js +104 -0
- package/dist/cli-program.d.ts +35 -0
- package/dist/cli-program.js +286 -0
- package/dist/cli-spec.js +1 -1
- package/dist/client-id-tracker.js +11 -2
- package/dist/commands/account.d.ts +7 -1
- package/dist/commands/account.js +74 -84
- package/dist/commands/agent-import.d.ts +114 -0
- package/dist/commands/agent-import.js +794 -0
- package/dist/commands/agent.d.ts +232 -2
- package/dist/commands/agent.js +1858 -955
- package/dist/commands/alerts.d.ts +1 -0
- package/dist/commands/alerts.js +31 -28
- package/dist/commands/arb/index.d.ts +60 -1
- package/dist/commands/arb/index.js +381 -384
- package/dist/commands/arb-auto.d.ts +132 -4
- package/dist/commands/arb-auto.js +1474 -967
- package/dist/commands/arb.d.ts +3 -1
- package/dist/commands/arb.js +62 -30
- package/dist/commands/bot.js +127 -47
- package/dist/commands/bridge.d.ts +2 -1
- package/dist/commands/bridge.js +339 -192
- package/dist/commands/builder.d.ts +55 -0
- package/dist/commands/builder.js +387 -0
- package/dist/commands/funds-onchain.d.ts +32 -0
- package/dist/commands/funds-onchain.js +286 -0
- package/dist/commands/funds.d.ts +25 -0
- package/dist/commands/funds.js +939 -245
- package/dist/commands/history.js +72 -45
- package/dist/commands/init.d.ts +107 -15
- package/dist/commands/init.js +1116 -249
- package/dist/commands/jobs.d.ts +2 -1
- package/dist/commands/jobs.js +77 -15
- package/dist/commands/manage.js +136 -91
- package/dist/commands/market.d.ts +4 -1
- package/dist/commands/market.js +35 -32
- package/dist/commands/outcome.d.ts +10 -0
- package/dist/commands/outcome.js +396 -0
- package/dist/commands/plan.js +52 -12
- package/dist/commands/portfolio.d.ts +1 -0
- package/dist/commands/portfolio.js +60 -72
- package/dist/commands/rebalance.d.ts +2 -1
- package/dist/commands/rebalance.js +33 -43
- package/dist/commands/risk.js +46 -19
- package/dist/commands/settings.d.ts +1 -0
- package/dist/commands/settings.js +246 -51
- package/dist/commands/trade.d.ts +50 -0
- package/dist/commands/trade.js +1943 -695
- package/dist/commands/wallet.d.ts +30 -1
- package/dist/commands/wallet.js +316 -337
- package/dist/config.d.ts +60 -9
- package/dist/config.js +252 -82
- package/dist/constants.d.ts +29 -4
- package/dist/constants.js +62 -20
- package/dist/dashboard/server.d.ts +2 -0
- package/dist/dashboard/server.js +9 -6
- package/dist/dashboard/ui.js +6 -4
- package/dist/dashboard/ws-feeds.js +20 -8
- package/dist/dex-asset-map.js +5 -3
- package/dist/errors.d.ts +122 -0
- package/dist/errors.js +194 -0
- package/dist/event-stream.js +75 -19
- package/dist/evm-master-tx.d.ts +59 -0
- package/dist/evm-master-tx.js +154 -0
- package/dist/exchanges/adapter-network.d.ts +10 -0
- package/dist/exchanges/adapter-network.js +10 -0
- package/dist/exchanges/arcus/adapter.d.ts +196 -0
- package/dist/exchanges/arcus/adapter.js +1092 -0
- package/dist/exchanges/arcus/agent.d.ts +55 -0
- package/dist/exchanges/arcus/agent.js +188 -0
- package/dist/exchanges/arcus/client.d.ts +63 -0
- package/dist/exchanges/arcus/client.js +285 -0
- package/dist/exchanges/arcus/public.d.ts +65 -0
- package/dist/exchanges/arcus/public.js +138 -0
- package/dist/exchanges/arcus/signing.d.ts +176 -0
- package/dist/exchanges/arcus/signing.js +288 -0
- package/dist/exchanges/arcus/spot-chain.d.ts +60 -0
- package/dist/exchanges/arcus/spot-chain.js +241 -0
- package/dist/exchanges/arcus/spot-router.d.ts +177 -0
- package/dist/exchanges/arcus/spot-router.js +183 -0
- package/dist/exchanges/arcus/spot.d.ts +109 -0
- package/dist/exchanges/arcus/spot.js +645 -0
- package/dist/exchanges/aster-funds.d.ts +127 -0
- package/dist/exchanges/aster-funds.js +252 -0
- package/dist/exchanges/aster-nonce.d.ts +2 -0
- package/dist/exchanges/aster-nonce.js +107 -0
- package/dist/exchanges/aster-spot.d.ts +117 -0
- package/dist/exchanges/aster-spot.js +686 -0
- package/dist/exchanges/aster-typed-data.d.ts +133 -7
- package/dist/exchanges/aster-typed-data.js +121 -7
- package/dist/exchanges/aster.d.ts +219 -6
- package/dist/exchanges/aster.js +1023 -153
- package/dist/exchanges/builder-fee.d.ts +254 -0
- package/dist/exchanges/builder-fee.js +421 -0
- package/dist/exchanges/canonical-symbols.d.ts +32 -0
- package/dist/exchanges/canonical-symbols.js +96 -0
- package/dist/exchanges/capabilities.d.ts +7 -1
- package/dist/exchanges/capabilities.js +7 -0
- package/dist/exchanges/hl-signing.d.ts +165 -0
- package/dist/exchanges/hl-signing.js +158 -0
- package/dist/exchanges/hyperliquid-outcome.d.ts +211 -0
- package/dist/exchanges/hyperliquid-outcome.js +646 -0
- package/dist/exchanges/hyperliquid-spot.d.ts +44 -5
- package/dist/exchanges/hyperliquid-spot.js +308 -117
- package/dist/exchanges/hyperliquid.d.ts +462 -57
- package/dist/exchanges/hyperliquid.js +1575 -449
- package/dist/exchanges/index.d.ts +6 -0
- package/dist/exchanges/index.js +4 -0
- package/dist/exchanges/interface.d.ts +63 -10
- package/dist/exchanges/interface.js +18 -3
- package/dist/exchanges/ioc-outcome.d.ts +44 -0
- package/dist/exchanges/ioc-outcome.js +57 -0
- package/dist/exchanges/legacy-trading-v2.d.ts +39 -0
- package/dist/exchanges/legacy-trading-v2.js +940 -0
- package/dist/exchanges/lighter-public.d.ts +43 -0
- package/dist/exchanges/lighter-public.js +276 -0
- package/dist/exchanges/lighter-rh-deposit.d.ts +62 -0
- package/dist/exchanges/lighter-rh-deposit.js +185 -0
- package/dist/exchanges/lighter-signer.d.ts +123 -0
- package/dist/exchanges/lighter-signer.js +215 -0
- package/dist/exchanges/lighter-spot.d.ts +91 -13
- package/dist/exchanges/lighter-spot.js +595 -233
- package/dist/exchanges/lighter.d.ts +611 -39
- package/dist/exchanges/lighter.js +1890 -649
- package/dist/exchanges/ondo/adapter.d.ts +166 -0
- package/dist/exchanges/ondo/adapter.js +835 -0
- package/dist/exchanges/ondo/agent.d.ts +31 -0
- package/dist/exchanges/ondo/agent.js +101 -0
- package/dist/exchanges/ondo/client.d.ts +60 -0
- package/dist/exchanges/ondo/client.js +297 -0
- package/dist/exchanges/ondo/funds.d.ts +122 -0
- package/dist/exchanges/ondo/funds.js +290 -0
- package/dist/exchanges/ondo/public.d.ts +95 -0
- package/dist/exchanges/ondo/public.js +214 -0
- package/dist/exchanges/ondo/spot.d.ts +127 -0
- package/dist/exchanges/ondo/spot.js +392 -0
- package/dist/exchanges/outcome-interface.d.ts +140 -0
- package/dist/exchanges/outcome-interface.js +16 -0
- package/dist/exchanges/pacifica-spot.d.ts +83 -0
- package/dist/exchanges/pacifica-spot.js +324 -0
- package/dist/exchanges/pacifica-typed-data.d.ts +30 -13
- package/dist/exchanges/pacifica-typed-data.js +57 -9
- package/dist/exchanges/pacifica.d.ts +288 -4
- package/dist/exchanges/pacifica.js +1013 -76
- package/dist/exchanges/precision.d.ts +47 -0
- package/dist/exchanges/precision.js +209 -0
- package/dist/exchanges/qfex/adapter.d.ts +341 -0
- package/dist/exchanges/qfex/adapter.js +1383 -0
- package/dist/exchanges/qfex/agent.d.ts +58 -0
- package/dist/exchanges/qfex/agent.js +188 -0
- package/dist/exchanges/qfex/client.d.ts +54 -0
- package/dist/exchanges/qfex/client.js +138 -0
- package/dist/exchanges/qfex/errors.d.ts +70 -0
- package/dist/exchanges/qfex/errors.js +236 -0
- package/dist/exchanges/qfex/public.d.ts +122 -0
- package/dist/exchanges/qfex/public.js +268 -0
- package/dist/exchanges/qfex/signing.d.ts +160 -0
- package/dist/exchanges/qfex/signing.js +283 -0
- package/dist/exchanges/qfex/ws-transport.d.ts +294 -0
- package/dist/exchanges/qfex/ws-transport.js +798 -0
- package/dist/exchanges/rate-limiter.d.ts +12 -0
- package/dist/exchanges/rate-limiter.js +64 -0
- package/dist/exchanges/registry.d.ts +14 -2
- package/dist/exchanges/registry.js +20 -32
- package/dist/exchanges/slippage.d.ts +37 -0
- package/dist/exchanges/slippage.js +70 -0
- package/dist/exchanges/spot-factory.d.ts +166 -0
- package/dist/exchanges/spot-factory.js +431 -0
- package/dist/exchanges/spot-interface.d.ts +98 -4
- package/dist/exchanges/spot-interface.js +27 -1
- package/dist/exchanges/spot-result.d.ts +79 -0
- package/dist/exchanges/spot-result.js +273 -0
- package/dist/exchanges/trading-v2.d.ts +117 -0
- package/dist/exchanges/trading-v2.js +301 -0
- package/dist/exchanges/venue-types.d.ts +231 -0
- package/dist/exchanges/venue-types.js +87 -0
- package/dist/exchanges/venue.d.ts +211 -0
- package/dist/exchanges/venue.js +132 -0
- package/dist/exchanges/venues/arcus.d.ts +8 -0
- package/dist/exchanges/venues/arcus.js +109 -0
- package/dist/exchanges/venues/aster.d.ts +49 -0
- package/dist/exchanges/venues/aster.js +176 -0
- package/dist/exchanges/venues/create-helpers.d.ts +18 -0
- package/dist/exchanges/venues/create-helpers.js +199 -0
- package/dist/exchanges/venues/hyperliquid.d.ts +23 -0
- package/dist/exchanges/venues/hyperliquid.js +126 -0
- package/dist/exchanges/venues/index.d.ts +16 -0
- package/dist/exchanges/venues/index.js +26 -0
- package/dist/exchanges/venues/lighter-family.d.ts +92 -0
- package/dist/exchanges/venues/lighter-family.js +166 -0
- package/dist/exchanges/venues/lighter-rh.d.ts +7 -0
- package/dist/exchanges/venues/lighter-rh.js +58 -0
- package/dist/exchanges/venues/lighter.d.ts +6 -0
- package/dist/exchanges/venues/lighter.js +55 -0
- package/dist/exchanges/venues/ondo.d.ts +34 -0
- package/dist/exchanges/venues/ondo.js +140 -0
- package/dist/exchanges/venues/pacifica.d.ts +8 -0
- package/dist/exchanges/venues/pacifica.js +95 -0
- package/dist/exchanges/venues/qfex.d.ts +28 -0
- package/dist/exchanges/venues/qfex.js +132 -0
- package/dist/execution-log.js +10 -2
- package/dist/funding/legacy-public.d.ts +31 -0
- package/dist/funding/legacy-public.js +369 -0
- package/dist/funding/normalize.d.ts +28 -16
- package/dist/funding/normalize.js +61 -29
- package/dist/funding/rates.d.ts +46 -11
- package/dist/funding/rates.js +228 -277
- package/dist/guardrail/perp-guardrail.js +0 -0
- package/dist/index.js +157 -682
- package/dist/jobs.d.ts +84 -6
- package/dist/jobs.js +239 -41
- package/dist/landing.d.ts +14 -0
- package/dist/landing.js +36 -0
- package/dist/mcp-server.d.ts +14 -4
- package/dist/mcp-server.js +820 -402
- package/dist/mcp-trade-guard.d.ts +16 -0
- package/dist/mcp-trade-guard.js +59 -0
- package/dist/pacifica/client.d.ts +41 -10
- package/dist/pacifica/client.js +167 -63
- package/dist/pacifica/constants.d.ts +0 -1
- package/dist/pacifica/constants.js +0 -5
- package/dist/pacifica/deposit.d.ts +30 -3
- package/dist/pacifica/deposit.js +119 -2
- package/dist/pacifica/faucet.d.ts +29 -0
- package/dist/pacifica/faucet.js +100 -0
- package/dist/pacifica/sign-tx.d.ts +15 -0
- package/dist/pacifica/sign-tx.js +41 -0
- package/dist/pacifica/types/account.d.ts +28 -4
- package/dist/pacifica/types/lake.d.ts +20 -5
- package/dist/pacifica/types/lake.js +4 -0
- package/dist/pacifica/types/market.d.ts +5 -0
- package/dist/pacifica/types/order.d.ts +4 -1
- package/dist/pacifica/types/position.d.ts +9 -1
- package/dist/plan-executor.d.ts +10 -5
- package/dist/plan-executor.js +165 -54
- package/dist/position-history.js +13 -0
- package/dist/rebalance.d.ts +26 -2
- package/dist/rebalance.js +86 -7
- package/dist/relay-swap.d.ts +232 -0
- package/dist/relay-swap.js +630 -0
- package/dist/risk.js +5 -1
- package/dist/secret-env.d.ts +15 -0
- package/dist/secret-env.js +36 -0
- package/dist/settings.d.ts +169 -6
- package/dist/settings.js +219 -38
- package/dist/signer/ows-evm.d.ts +13 -0
- package/dist/signer/ows-evm.js +22 -0
- package/dist/smart-order.d.ts +9 -0
- package/dist/smart-order.js +53 -8
- package/dist/strategies/dca.d.ts +6 -2
- package/dist/strategies/dca.js +66 -26
- package/dist/strategies/funding-arb.d.ts +11 -1
- package/dist/strategies/funding-arb.js +202 -89
- package/dist/strategies/grid.d.ts +31 -0
- package/dist/strategies/grid.js +89 -11
- package/dist/strategies/pending-stop.d.ts +8 -0
- package/dist/strategies/pending-stop.js +12 -0
- package/dist/strategies/split-order.d.ts +45 -17
- package/dist/strategies/split-order.js +157 -91
- package/dist/strategies/trailing-stop.d.ts +2 -1
- package/dist/strategies/trailing-stop.js +52 -6
- package/dist/strategies/twap.d.ts +6 -1
- package/dist/strategies/twap.js +39 -11
- package/dist/trade-validator.d.ts +22 -0
- package/dist/trade-validator.js +119 -15
- package/dist/utils/numeric.d.ts +46 -0
- package/dist/utils/numeric.js +79 -0
- package/dist/utils.d.ts +19 -0
- package/dist/utils.js +96 -19
- package/dist/withdraw-gate.d.ts +49 -0
- package/dist/withdraw-gate.js +131 -0
- package/package.json +15 -6
- package/skills/perp-cli/SKILL.md +338 -134
- package/skills/perp-cli/references/agent-operations.md +181 -92
- package/skills/perp-cli/references/commands.md +475 -132
- package/skills/perp-cli/references/strategies.md +44 -38
- package/skills/perp-cli/scripts/arb-monitor.sh +22 -17
- package/skills/perp-cli/scripts/funding-analysis.sh +20 -10
- package/skills/perp-cli/scripts/preflight.sh +21 -14
- package/skills/perp-cli/scripts/spot-perp-scan.sh +12 -7
- package/skills/perp-cli/scripts/validate-arb.sh +33 -16
- package/vendor/lighter-signer/SHA256SUMS +2 -0
- package/vendor/lighter-signer/VERSION +8 -0
- package/vendor/lighter-signer/lighter-signer.wasm +0 -0
- package/vendor/lighter-signer/wasm_exec.js +575 -0
- package/dist/bot/strategies/funding-arb-v2-strategy.d.ts +0 -42
- 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
|
-
|
|
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
|
|
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
|
-
|
|
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;
|