@ostium/builder-sdk 0.2.0 → 0.3.1
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/dist/cli.js +74 -17
- package/dist/index.cjs +74 -17
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +21 -3
- package/dist/index.d.ts +21 -3
- package/dist/index.js +74 -17
- package/dist/index.js.map +1 -1
- package/package.json +4 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/internal/erc20.ts","../src/internal/decimal.ts","../src/internal/precision.ts","../src/internal/validation.ts","../src/internal/open-builder.ts","../src/internal/contracts.ts","../src/types.ts","../src/config.ts","../src/errors.ts","../src/signer/self.ts","../src/internal/contract.ts","../src/encoder.ts","../src/signer/delegated.ts","../src/signer/index.ts","../src/submitter/self.ts","../src/submitter/gasless.ts","../src/submitter/index.ts","../src/data/config.ts","../src/data/errors.ts","../src/data/queries.ts","../src/data/internal/pagination.ts","../src/data/internal/precision.ts","../src/data/internal/decimal.ts","../src/data/internal/calculations.ts","../src/data/internal/pair-names.ts","../src/data/internal/pricing.ts","../src/data/internal/aggregations.ts","../src/data/internal/formatters.ts","../src/data/internal/position-updates.ts","../src/data/internal/sim-slippage.ts","../src/data/client.ts","../src/client.ts"],"names":["OrderType","CancelOrderType","OstiumErrorCode","arbitrumSepolia","arbitrum","http","privateKeyToAccount","toLightSmartAccount","OstiumSubgraphErrorCode","parseUsdc","parseLeverage","CalculateDynamicPriceImpact","createPublicClient","createWalletClient","formatUnits"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Minimal ERC20 ABI for allowance/approve\n */\n\nexport const ERC20_ABI = [\n {\n inputs: [\n { internalType: 'address', name: 'owner', type: 'address' as const },\n { internalType: 'address', name: 'spender', type: 'address' as const },\n ],\n name: 'allowance',\n outputs: [{ internalType: 'uint256', name: '', type: 'uint256' as const }],\n stateMutability: 'view' as const,\n type: 'function' as const,\n },\n {\n inputs: [\n { internalType: 'address', name: 'spender', type: 'address' as const },\n { internalType: 'uint256', name: 'amount', type: 'uint256' as const },\n ],\n name: 'approve',\n outputs: [{ internalType: 'bool', name: '', type: 'bool' as const }],\n stateMutability: 'nonpayable' as const,\n type: 'function' as const,\n },\n {\n inputs: [\n { internalType: 'address', name: 'account', type: 'address' as const },\n ],\n name: 'balanceOf',\n outputs: [{ internalType: 'uint256', name: '', type: 'uint256' as const }],\n stateMutability: 'view' as const,\n type: 'function' as const,\n },\n {\n inputs: [\n { internalType: 'address', name: 'to', type: 'address' as const },\n { internalType: 'uint256', name: 'amount', type: 'uint256' as const },\n ],\n name: 'transfer',\n outputs: [{ internalType: 'bool', name: '', type: 'bool' as const }],\n stateMutability: 'nonpayable' as const,\n type: 'function' as const,\n },\n] as const;\n","/**\n * Decimal conversion utilities for trading precision\n * Critical: All values must be scaled correctly for smart contract calls\n */\n\n/**\n * Parse a USDC amount string to bigint with 6 decimals\n * @param amount - Amount in USDC (e.g., \"100.50\" = 100.50 USDC)\n * @returns Bigint representation with 6 decimal precision\n */\nexport function parseUsdc(amount: string | number): bigint {\n const amountStr = typeof amount === 'number' ? amount.toString() : amount;\n if (!amountStr || amountStr === '0') return 0n;\n\n if (!/^\\d+(\\.\\d+)?$/.test(amountStr)) {\n throw new Error(`Invalid USDC amount: ${amountStr}`);\n }\n\n const [intPart, decPart = ''] = amountStr.split('.');\n const paddedDec = decPart.padEnd(6, '0').slice(0, 6);\n return BigInt(intPart + paddedDec);\n}\n\n/**\n * Parse a price string to bigint with 18 decimals.\n * Uses string manipulation to avoid floating-point precision loss.\n * @param price - Price as string (e.g., \"1900.50\")\n * @returns Bigint representation with 18 decimal precision\n */\nexport function parsePrice(price: string | number): bigint {\n const priceStr = typeof price === 'number' ? price.toString() : price;\n if (!priceStr || priceStr === '0') return 0n;\n\n if (!/^-?\\d+(\\.\\d+)?$/.test(priceStr)) {\n throw new Error(`Invalid price: ${priceStr}`);\n }\n\n const isNegative = priceStr.startsWith('-');\n const absStr = isNegative ? priceStr.slice(1) : priceStr;\n const [intPart, decPart = ''] = absStr.split('.');\n const paddedDec = decPart.padEnd(18, '0').slice(0, 18);\n const result = BigInt(intPart + paddedDec);\n\n return isNegative ? -result : result;\n}\n\n/**\n * Parse leverage to contract format (leverage × 100).\n * @param leverage - Leverage as number (e.g., 20 for 20x)\n * @returns Bigint (e.g., 2000 for 20x)\n */\nexport function parseLeverage(leverage: number): bigint {\n if (leverage <= 0 || !Number.isFinite(leverage)) {\n throw new Error(`Invalid leverage: ${leverage}`);\n }\n return BigInt(Math.round(leverage * 100));\n}\n","/**\n * Precision constants for decimal conversions\n * Critical for trading calculations - all values must be scaled correctly\n */\n\nexport const PRECISION_6 = 1000000n; // USDC (6 decimals)\nexport const PRECISION_18 = 1000000000000000000n; // Prices (18 decimals)\n\nexport const DEFAULT_SLIPPAGE_PERCENTAGE = 0.25;\n\nexport const MIN_COLLATERAL_USD = 5;\nexport const MAX_COLLATERAL_USD = 2_000_000;\n\nexport const ORDER_TYPE_MAP: Record<string, number> = {\n 'market': 0, // OpenOrderType.MARKET\n 'limit': 1, // OpenOrderType.LIMIT\n 'stop': 2, // OpenOrderType.STOP\n};\n","/**\n * Validation helpers for API requests\n */\n\nimport { ORDER_TYPE_MAP } from './precision.js';\nimport type { ApiOpen, ApiCloseAction, ApiCancelAction } from './api-schema.js';\nimport type { OpenOrderType } from './ostium-schema.js';\nimport type { ModifyInput } from './builder-types.js';\n\nconst DECIMAL_RE = /^-?\\d+(\\.\\d+)?$/;\n\nfunction assertDecimal(value: string, label: string): void {\n if (!DECIMAL_RE.test(value)) {\n throw new Error(`Invalid ${label}: \"${value}\" is not a valid decimal number`);\n }\n if (parseFloat(value) <= 0) {\n throw new Error(`Invalid ${label}: must be greater than zero, got \"${value}\"`);\n }\n}\n\nfunction assertNonNegativeDecimal(value: string, label: string): void {\n if (!DECIMAL_RE.test(value)) {\n throw new Error(`Invalid ${label}: \"${value}\" is not a valid decimal number`);\n }\n if (parseFloat(value) < 0) {\n throw new Error(`Invalid ${label}: must be non-negative, got \"${value}\"`);\n }\n}\n\n/**\n * Extract the contract OpenOrderType from an ApiOpen request.\n */\nexport function extractOpenType(open: ApiOpen): OpenOrderType {\n return ORDER_TYPE_MAP[open.t];\n}\n\n/**\n * Validate TP/SL direction relative to the open price.\n */\nexport function validateTpSlDirection(\n open: ApiOpen,\n tp: bigint,\n sl: bigint,\n openPrice: bigint,\n): void {\n if (open.b) {\n if (tp > 0n && tp <= openPrice) {\n throw new Error(`Take profit (${open.tp}) must be above open price (${open.p}) for long positions`);\n }\n if (sl > 0n && sl >= openPrice) {\n throw new Error(`Stop loss (${open.sl}) must be below open price (${open.p}) for long positions`);\n }\n } else {\n if (tp > 0n && tp >= openPrice) {\n throw new Error(`Take profit (${open.tp}) must be below open price (${open.p}) for short positions`);\n }\n if (sl > 0n && sl <= openPrice) {\n throw new Error(`Stop loss (${open.sl}) must be above open price (${open.p}) for short positions`);\n }\n }\n}\n\n/**\n * Validate close parameters.\n */\nexport function validateCloseParams(close: ApiCloseAction): void {\n if (close.r < 1 || close.r > 100) {\n throw new Error(`Close percentage must be 1–100, got ${close.r}`);\n }\n assertDecimal(close.p, 'close price');\n}\n\n/**\n * Validate cancel parameters.\n */\nexport function validateCancelParams(cancel: ApiCancelAction): void {\n if (cancel.t === 'limit') {\n if (cancel.a === undefined || cancel.a < 0) {\n throw new Error(`Invalid pair index for limit cancel: ${cancel.a}`);\n }\n if (cancel.i === undefined || cancel.i < 0) {\n throw new Error(`Invalid order index for limit cancel: ${cancel.i}`);\n }\n } else {\n if (cancel.o === undefined || cancel.o < 0) {\n throw new Error(`Invalid order ID for ${cancel.t} cancel: ${cancel.o}`);\n }\n }\n}\n\n/**\n * Validate modify parameters.\n */\nexport function validateModifyParams(input: ModifyInput): void {\n if (input.a < 0) {\n throw new Error(`Invalid pair index: ${input.a}`);\n }\n if (input.i < 0) {\n throw new Error(`Invalid trade/order index: ${input.i}`);\n }\n if (!input.p && !input.tp && !input.sl) {\n throw new Error('At least one of price, takeProfit, or stopLoss must be provided');\n }\n if (input.p) {\n assertDecimal(input.p, 'price');\n }\n if (input.tp) {\n assertNonNegativeDecimal(input.tp, 'take profit');\n }\n if (input.sl) {\n assertNonNegativeDecimal(input.sl, 'stop loss');\n }\n}\n","/**\n * Trade-building helpers — converts public API params into contract-ready structs.\n */\n\nimport type { ApiOpen, ApiBuilder } from './api-schema.js';\nimport type { OstiumTrade, BuilderFee, OpenOrderType } from './ostium-schema.js';\nimport type { OpenBuilderConfig } from './builder-types.js';\nimport { parseUsdc, parsePrice, parseLeverage } from './decimal.js';\nimport { extractOpenType, validateTpSlDirection } from './validation.js';\nimport { MIN_COLLATERAL_USD } from './precision.js';\n\nconst DEFAULT_CONFIG: Required<OpenBuilderConfig> = {\n defaultLeverage: 1,\n maxLeverage: 100,\n minOpenSize: MIN_COLLATERAL_USD,\n};\n\nexport function buildTrade(\n open: ApiOpen,\n traderAddress: string,\n config: OpenBuilderConfig = {}\n): { trade: OstiumTrade; orderType: OpenOrderType } {\n const mergedConfig = { ...DEFAULT_CONFIG, ...config };\n\n const collateralUsd = parseFloat(open.s);\n if (collateralUsd < mergedConfig.minOpenSize) {\n throw new Error(`Collateral ${open.s} below minimum ${mergedConfig.minOpenSize}`);\n }\n\n const leverageNum = parseFloat(open.l);\n if (leverageNum > mergedConfig.maxLeverage) {\n throw new Error(`Leverage ${open.l} exceeds maximum ${mergedConfig.maxLeverage}`);\n }\n\n const collateral = parseUsdc(open.s);\n const openPrice = parsePrice(open.p);\n const leverage = parseLeverage(leverageNum);\n const tp = open.tp ? parsePrice(open.tp) : 0n;\n const sl = open.sl ? parsePrice(open.sl) : 0n;\n\n if (tp > 0n || sl > 0n) {\n validateTpSlDirection(open, tp, sl, openPrice);\n }\n\n const trade: OstiumTrade = {\n collateral,\n openPrice,\n tp,\n sl,\n trader: traderAddress as `0x${string}`,\n leverage,\n pairIndex: BigInt(open.a),\n index: 0n,\n buy: open.b,\n isDayTrade: open.d ?? false,\n };\n\n return { trade, orderType: extractOpenType(open) };\n}\n\nexport function buildBuilderFee(builder?: ApiBuilder): BuilderFee {\n if (!builder) {\n return {\n builder: '0x0000000000000000000000000000000000000000',\n builderFee: 0n,\n };\n }\n // builder.f is in basis points (e.g. 10 = 0.1%). The contract stores it directly.\n return {\n builder: builder.b as `0x${string}`,\n builderFee: BigInt(builder.f),\n };\n}\n","/**\n * Contract addresses for Ostium on Arbitrum\n */\n\nimport { type Address } from 'viem';\n\nexport const ARBITRUM_MAINNET = {\n chainId: 42161,\n contracts: {\n usdc: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831' as Address,\n trading: '0x6D0bA1f9996DBD8885827e1b2e8f6593e7702411' as Address,\n tradingStorage: '0xcCd5891083A8acD2074690F65d3024E7D13d66E7' as Address,\n },\n};\n\nexport const ARBITRUM_TESTNET = {\n chainId: 421614,\n contracts: {\n usdc: '0xe73B11Fb1e3eeEe8AF2a23079A4410Fe1B370548' as Address,\n trading: '0x2A9B9c988393f46a2537B0ff11E98c2C15a95afe' as Address,\n tradingStorage: '0x0b9F5243B29938668c9Cfbd7557A389EC7Ef88b8' as Address,\n },\n};\n\nexport function getNetworkConfig(isTestnet: boolean = false) {\n return isTestnet ? ARBITRUM_TESTNET : ARBITRUM_MAINNET;\n}\n","import type { Hex, Address } from 'viem';\n\nexport enum OrderType {\n Market = 'market',\n Limit = 'limit',\n Stop = 'stop',\n}\n\nexport enum CancelOrderType {\n Limit = 'limit',\n PendingOpen = 'pendingOpen',\n PendingClose = 'pendingClose',\n}\n\nexport interface OpenTradeParams {\n /**\n * Trading pair id — same value as `Pair.pairId` returned by `getPairs()`.\n * Accepts both the numeric string (e.g. `\"0\"`) and a plain `number`.\n */\n pairId: string | number;\n /** true = long, false = short. */\n buy: boolean;\n /** Entry price as a decimal string (e.g. \"65000.50\"). */\n price: string;\n /** Collateral in USD as a decimal string (e.g. \"100.00\", minimum $5). */\n collateral: string;\n /** Leverage as a decimal string (e.g. \"10\" for 10×, max 100×). */\n leverage: string;\n /** Order type. */\n type: OrderType;\n /** Take profit price as a decimal string. Optional. */\n takeProfit?: string;\n /** Stop loss price as a decimal string. Optional. */\n stopLoss?: string;\n /** Per-trade slippage override in basis points. Overrides client default. */\n slippage?: number;\n /**\n * Mark the trade as a day trade. Must be `true` when the desired leverage\n * exceeds `pair.overnightMaxLeverage` (and `overnightMaxLeverage > 0`).\n * Day trades are automatically closed before market close if not manually\n * closed beforehand. Defaults to `false`.\n */\n isDayTrade?: boolean;\n}\n\nexport interface CloseTradeParams {\n /**\n * Trading pair id — same value as `Position.pairId` returned by `getOpenPositions`.\n * Accepts both the numeric string (e.g. `\"0\"`) and a plain `number` for ergonomics.\n */\n pairId: string | number;\n /**\n * Position index within the pair — same value as `Position.idx` returned by\n * `getOpenPositions`. Identifies which of the trader's open positions to close.\n */\n idx: number;\n /** Current market price as a decimal string. */\n price: string;\n /** Percentage to close (1–100). */\n closePercent: number;\n /** Per-trade slippage override in basis points. */\n slippage?: number;\n /**\n * When true, verifies USDC allowance covers the oracle fee before submitting.\n * Skip by default if you know allowance is sufficient.\n */\n checkAllowance?: boolean;\n}\n\n/**\n * Cancel a pending limit order.\n */\nexport interface CancelLimitOrderParams {\n type: CancelOrderType.Limit;\n /**\n * Trading pair id — same value as `OpenOrder.pairId` returned by `getOpenOrders`.\n * Accepts both the numeric string (e.g. `\"0\"`) and a plain `number`.\n */\n pairId: string | number;\n /**\n * Limit order index within the pair — same value as `OpenOrder.idx` returned\n * by `getOpenOrders`. Identifies which limit order to cancel.\n */\n idx: number;\n}\n\n/**\n * Cancel a timed-out market open order.\n */\nexport interface CancelPendingOpenParams {\n type: CancelOrderType.PendingOpen;\n /** Market order ID from the original openTrade submission. */\n orderId: number;\n}\n\n/**\n * Cancel a timed-out market close order.\n */\nexport interface CancelPendingCloseParams {\n type: CancelOrderType.PendingClose;\n /** Market order ID from the original closeTrade submission. */\n orderId: number;\n /**\n * If true, re-submits the close order after cancelling the timed-out one.\n * Defaults to false (cancel only, trade remains open).\n */\n retry?: boolean;\n}\n\nexport type CancelOrderParams =\n | CancelLimitOrderParams\n | CancelPendingOpenParams\n | CancelPendingCloseParams;\n\nexport interface ModifyOrderParams {\n /**\n * Trading pair id.\n * - Updating TP/SL on an open position → use `Position.pairId` from `getOpenPositions`.\n * - Updating a limit order's trigger price → use `OpenOrder.pairId` from `getOpenOrders`.\n * Accepts both the numeric string (e.g. `\"0\"`) and a plain `number`.\n */\n pairId: string | number;\n /**\n * Slot index within the pair.\n * - Updating TP/SL on an open position → use `Position.idx`.\n * - Updating a limit order → use `OpenOrder.idx`.\n */\n idx: number;\n /** New limit-order trigger price. Required when modifying a limit order's price. */\n price?: string;\n /** New take profit price. */\n takeProfit?: string;\n /** New stop loss price. */\n stopLoss?: string;\n}\n\nexport interface UpdateCollateralParams {\n /**\n * Trading pair id — same value as `Position.pairId` returned by `getOpenPositions`.\n * Accepts both the numeric string (e.g. `\"0\"`) and a plain `number`.\n */\n pairId: string | number;\n /**\n * Position index within the pair — same value as `Position.idx` returned by\n * `getOpenPositions`. Identifies which position to top up or partially withdraw from.\n */\n idx: number;\n /**\n * Amount in USD as a decimal string.\n * Positive → add collateral (topUpCollateral).\n * Negative → remove collateral (removeCollateral).\n */\n amount: string;\n}\n\nexport interface Balances {\n /** USDC balance as a decimal string (e.g. `\"1234.567890\"`). */\n usdc: string;\n /** ETH balance as a decimal string (e.g. `\"0.001234567890123456789\"`). */\n eth: string;\n /** USDC allowance granted to the TradingStorage contract as a decimal string. Max approval is preserved exactly. */\n allowance: string;\n}\n\nexport interface AllowanceStatus {\n /** Current USDC allowance (6 decimals, raw bigint). */\n current: bigint;\n /** Required USDC allowance (6 decimals, raw bigint). */\n required: bigint;\n /** true if current >= required. */\n sufficient: boolean;\n}\n\nexport interface SubmissionResult {\n txHash: Hex;\n /** Set for gasless submissions — the Safe smart account address that sent the UserOp. */\n smartAccountAddress?: Address;\n}\n\nexport interface BuiltSafeTxCall {\n to: Address;\n data: Hex;\n value: bigint;\n}\n\nexport interface BuiltEoaTxRequest {\n kind: 'eoa';\n to: Address;\n data: Hex;\n value: bigint;\n from: Address;\n traderAddress: Address;\n}\n\nexport interface BuiltSafeTxRequest {\n kind: 'safe';\n safeAddress: Address;\n traderAddress: Address;\n calls: [BuiltSafeTxCall];\n}\n\nexport type BuiltTxRequest = BuiltEoaTxRequest | BuiltSafeTxRequest;\n\n/** Internal encoded transaction before signer.prepare(). */\nexport interface EncodedTx {\n to: Address;\n data: Hex;\n value: bigint;\n}\n","import type { Hex, Address } from 'viem';\n\nexport const DEFAULT_PIMLICO_URL = 'https://builder.ostium.io/v1/pimlico/sponsor?chainId=42161';\nexport const DEFAULT_PIMLICO_URL_TESTNET = 'https://builder.ostium.io/v1/pimlico/sponsor?chainId=421614';\n\nexport type ClientMode =\n | 'self-self'\n | 'self-gasless'\n | 'delegated-self'\n | 'delegated-gasless';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Named factory param types (preferred API)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** Shared optional settings available in every mode. */\ninterface CommonParams {\n /** Use Arbitrum Sepolia testnet. Defaults to false (mainnet). */\n testnet?: boolean;\n /** Default slippage tolerance in basis points (e.g. 25 = 0.25%). Defaults to 25. */\n slippageBps?: number;\n /**\n * Optional builder fee sharing.\n * `feeBps` is in basis points — max 50 (0.5%).\n */\n builder?: {\n address: Address;\n feeBps: number;\n };\n /**\n * Override the Ostium subgraph endpoint used by built-in read methods\n * (`getPairs`, `getOpenPositions`, etc.). Defaults to the mainnet or testnet\n * subgraph based on `testnet`.\n */\n subgraphUrl?: string;\n /**\n * Override the builder API base URL used for live prices, OHLC candles, and\n * the WebSocket stream. Defaults to `https://builder.ostium.io`.\n */\n builderApiUrl?: string;\n}\n\nexport interface SelfSelfSubmitParams extends CommonParams {\n /** Private key of the trader's EOA. This account holds USDC, owns all positions, and pays gas. */\n traderPrivateKey: Hex;\n /** Arbitrum One (or Sepolia) RPC URL. */\n rpcUrl: string;\n}\n\nexport interface SelfSelfBuildParams extends CommonParams {\n /** Trader EOA address. Used to build unsigned transactions without SDK submission. */\n traderAddress: Address;\n /** Optional Arbitrum RPC URL for reads/simulation. Defaults to the chain public RPC. */\n rpcUrl?: string;\n}\n\n/**\n * **Self + Self** — simplest mode.\n *\n * Your EOA is the trader: it holds USDC, owns all positions, and pays gas\n * for every transaction directly.\n */\nexport type SelfSelfParams = SelfSelfSubmitParams | SelfSelfBuildParams;\n\nexport interface SelfGaslessSubmitParams extends CommonParams {\n /** Private key of the trader's EOA. This account holds USDC and owns all positions. A Safe is derived from this key to relay trades gaslessly. */\n traderPrivateKey: Hex;\n /** Pimlico-compatible bundler/paymaster RPC URL. Defaults to `https://builder.ostium.io/v1/pimlico/sponsor?chainId=42161`. */\n pimlicoUrl?: string;\n /** Arbitrum RPC URL for reads/simulation. Defaults to public Arbitrum RPC when omitted. */\n rpcUrl?: string;\n /** Pimlico sponsorship policy ID. */\n sponsorshipPolicyId?: string;\n}\n\nexport interface SelfGaslessBuildParams extends CommonParams {\n /** Trader EOA address that owns USDC and positions. */\n traderAddress: Address;\n /** Safe smart-account address that will submit delegated calls. */\n safeAddress: Address;\n /** Optional Arbitrum RPC URL for reads/simulation. Defaults to the chain public RPC. */\n rpcUrl?: string;\n}\n\n/**\n * **Self + Gasless** — your EOA owns everything; a Safe acts as a transparent gasless relay.\n *\n * Submit-capable clients derive the Safe from `traderPrivateKey`. Build-only\n * clients provide both `traderAddress` and `safeAddress`.\n */\nexport type SelfGaslessParams = SelfGaslessSubmitParams | SelfGaslessBuildParams;\n\nexport interface DelegatedSelfSubmitParams extends CommonParams {\n /** Private key of the delegate EOA. This account signs and pays gas for all transactions. */\n delegatePrivateKey: Hex;\n /**\n * Address of the trader this delegate acts for.\n * The trader must have called `setDelegate(delegateAddress)` on the trading contract.\n */\n traderAddress: Address;\n /** Arbitrum One (or Sepolia) RPC URL. */\n rpcUrl: string;\n}\n\nexport interface DelegatedSelfBuildParams extends CommonParams {\n /** Address of the trader this delegate acts for. */\n traderAddress: Address;\n /** Delegate EOA address that will submit the transaction. */\n delegateAddress: Address;\n /** Optional Arbitrum RPC URL for reads/simulation. Defaults to the chain public RPC. */\n rpcUrl?: string;\n}\n\n/**\n * **Delegated + Self** — a dedicated delegate EOA signs and pays gas on behalf of a separate trader address.\n */\nexport type DelegatedSelfParams = DelegatedSelfSubmitParams | DelegatedSelfBuildParams;\n\nexport interface DelegatedGaslessSubmitParams extends CommonParams {\n /** Private key of the delegate EOA. A Safe smart account is derived from this key and submits UserOperations via Pimlico. */\n delegatePrivateKey: Hex;\n /**\n * Address of the trader this delegate acts for.\n * The trader must have called `setDelegate(safeAddress)` on the trading contract,\n * where `safeAddress` is the Safe derived from `delegatePrivateKey`.\n */\n traderAddress: Address;\n /** Pimlico-compatible bundler/paymaster RPC URL. Defaults to `https://builder.ostium.io/v1/pimlico/sponsor?chainId=42161`. */\n pimlicoUrl?: string;\n /** Arbitrum RPC URL for reads/simulation. Defaults to public Arbitrum RPC when omitted. */\n rpcUrl?: string;\n /** Pimlico sponsorship policy ID. */\n sponsorshipPolicyId?: string;\n}\n\nexport interface DelegatedGaslessBuildParams extends CommonParams {\n /** Address of the trader this delegate acts for. */\n traderAddress: Address;\n /** Delegate EOA address that owns the Safe. */\n delegateAddress: Address;\n /** Safe smart-account address that will submit delegated calls. */\n safeAddress: Address;\n /** Optional Arbitrum RPC URL for reads/simulation. Defaults to the chain public RPC. */\n rpcUrl?: string;\n}\n\n/**\n * **Delegated + Gasless** — a Safe derived from the delegate key submits sponsored UserOperations on behalf of the trader.\n */\nexport type DelegatedGaslessParams = DelegatedGaslessSubmitParams | DelegatedGaslessBuildParams;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Internal generic config\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface OstiumClientConfig extends CommonParams {\n mode?: ClientMode;\n privateKey?: Hex;\n traderAddress?: Address;\n delegateAddress?: Address;\n safeAddress?: Address;\n rpcUrl?: string;\n pimlicoUrl?: string;\n sponsorshipPolicyId?: string;\n}\n\nexport function hasPrivateKey(config: OstiumClientConfig): config is OstiumClientConfig & { privateKey: Hex } {\n return typeof config.privateKey === 'string' && config.privateKey.length > 0;\n}\n\nexport function resolveMode(config: OstiumClientConfig): ClientMode {\n if (config.mode) return config.mode;\n if (config.privateKey) {\n if (config.pimlicoUrl) return config.traderAddress ? 'delegated-gasless' : 'self-gasless';\n return config.traderAddress ? 'delegated-self' : 'self-self';\n }\n if (config.safeAddress && config.delegateAddress && config.traderAddress) return 'delegated-gasless';\n if (config.safeAddress && config.traderAddress) return 'self-gasless';\n if (config.delegateAddress && config.traderAddress) return 'delegated-self';\n if (config.traderAddress) return 'self-self';\n throw new Error('Unable to infer client mode from config');\n}\n\nexport function isGasless(config: OstiumClientConfig): boolean {\n const mode = resolveMode(config);\n return mode === 'self-gasless' || mode === 'delegated-gasless';\n}\n\nexport function isDelegated(config: OstiumClientConfig): boolean {\n const mode = resolveMode(config);\n return mode === 'delegated-self' || mode === 'delegated-gasless';\n}\n","export enum OstiumErrorCode {\n INVALID_CONFIG = 'INVALID_CONFIG',\n VALIDATION_FAILED = 'VALIDATION_FAILED',\n ALLOWANCE_INSUFFICIENT = 'ALLOWANCE_INSUFFICIENT',\n SUBMISSION_FAILED = 'SUBMISSION_FAILED',\n DELEGATION_FAILED = 'DELEGATION_FAILED',\n CONTRACT_ERROR = 'CONTRACT_ERROR',\n NETWORK_ERROR = 'NETWORK_ERROR',\n}\n\nexport class OstiumError extends Error {\n constructor(\n message: string,\n public readonly code: OstiumErrorCode,\n public readonly cause?: unknown,\n ) {\n super(message);\n this.name = 'OstiumError';\n }\n}\n","import type { Address } from 'viem';\nimport type { EncodedTx } from '../types.js';\nimport type { SignerStrategy } from './index.js';\n\n/**\n * Self signer — the private key belongs to the trader directly.\n * Transactions are submitted as-is without any delegation wrapping.\n *\n * In Self + Self mode: traderAddress = EOA derived from privateKey.\n * In Self + Gasless mode: NOT used — that mode uses DelegatedSignerStrategy\n * because the EOA is the trader and the Safe is the delegate.\n */\nexport class SelfSignerStrategy implements SignerStrategy {\n readonly traderAddress: Address;\n\n constructor(traderAddress: Address) {\n this.traderAddress = traderAddress;\n }\n\n prepare(encoded: EncodedTx): EncodedTx {\n return encoded;\n }\n}\n","/**\n * Trading contract ABI\n */\n\nimport { type Abi } from 'viem';\n\n/**\n * Trading contract ABI - used by the SDK encoder\n */\nexport const TRADING_ABI = [\n {\n \"inputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"AboveMaxAllowedCollateral\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"AlreadyMarketClosed\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"BelowFees\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"BelowMinLevPos\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"DelegateForbidden\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"DelegateReentrant\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"DelegatedActionFailed\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ExposureLimits\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidCallData\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidInitialization\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidNonce\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidSignature\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"a\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"IsContract\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"IsDone\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"IsPaused\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"MaxPendingMarketOrdersReached\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n }\n ],\n \"name\": \"MaxTradesPerPairReached\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"a\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"NoDelegate\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"NoLimitFound\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"NoTradeFound\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"NoTradeToTimeoutFound\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"NotCloseMarketTimeoutOrder\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"caller\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"NotDelegate\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"a\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"NotGov\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"NotInitializing\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"a\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"NotManager\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"NotOpenMarketTimeoutOrder\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"a\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"NotTradesUpKeep\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"NotYourOrder\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"NullAddr\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"index\",\n \"type\": \"uint16\"\n }\n ],\n \"name\": \"PairNotListed\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"bits\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"SafeCastOverflowedUintDowncast\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"SignatureExpired\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"TriggerPending\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"WaitTimeout\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint32\",\n \"name\": \"leverage\",\n \"type\": \"uint32\"\n }\n ],\n \"name\": \"WrongLeverage\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"WrongParams\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"WrongSL\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"WrongTP\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tradeId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"enum IOstiumTradingStorage.LimitOrder\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"AutomationCloseOrderInitiated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"AutomationOpenOrderInitiated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"delegator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"delegate\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"DelegateAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"delegator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"delegate\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"DelegateRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"bool\",\n \"name\": \"done\",\n \"type\": \"bool\"\n }\n ],\n \"name\": \"Done\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint64\",\n \"name\": \"version\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"Initialized\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tradeId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n }\n ],\n \"name\": \"MarketCloseFailed\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tradeId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n }\n ],\n \"name\": \"MarketCloseOrderInitiated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tradeId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint16\",\n \"name\": \"closePercentage\",\n \"type\": \"uint16\"\n }\n ],\n \"name\": \"MarketCloseOrderInitiatedV2\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tradeId\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"block\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"wantedPrice\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"slippageP\",\n \"type\": \"uint32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"collateral\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"openPrice\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"tp\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"sl\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"leverage\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"buy\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"isDayTrade\",\n \"type\": \"bool\"\n }\n ],\n \"internalType\": \"struct IOstiumTradingStorage.Trade\",\n \"name\": \"trade\",\n \"type\": \"tuple\"\n }\n ],\n \"indexed\": false,\n \"internalType\": \"struct IOstiumTradingStorage.PendingMarketOrder\",\n \"name\": \"order\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"MarketCloseTimeoutExecuted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tradeId\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"block\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"wantedPrice\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"slippageP\",\n \"type\": \"uint32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"collateral\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"openPrice\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"tp\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"sl\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"leverage\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"buy\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"isDayTrade\",\n \"type\": \"bool\"\n }\n ],\n \"internalType\": \"struct IOstiumTradingStorage.Trade\",\n \"name\": \"trade\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"percentage\",\n \"type\": \"uint16\"\n }\n ],\n \"indexed\": false,\n \"internalType\": \"struct IOstiumTradingStorage.PendingMarketOrderV2\",\n \"name\": \"order\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"MarketCloseTimeoutExecutedV2\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n }\n ],\n \"name\": \"MarketOpenOrderInitiated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"block\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"wantedPrice\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"slippageP\",\n \"type\": \"uint32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"collateral\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"openPrice\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"tp\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"sl\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"leverage\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"buy\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"isDayTrade\",\n \"type\": \"bool\"\n }\n ],\n \"internalType\": \"struct IOstiumTradingStorage.Trade\",\n \"name\": \"trade\",\n \"type\": \"tuple\"\n }\n ],\n \"indexed\": false,\n \"internalType\": \"struct IOstiumTradingStorage.PendingMarketOrder\",\n \"name\": \"order\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"MarketOpenTimeoutExecuted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"block\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"wantedPrice\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"slippageP\",\n \"type\": \"uint32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"collateral\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"openPrice\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"tp\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"sl\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"leverage\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"buy\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"isDayTrade\",\n \"type\": \"bool\"\n }\n ],\n \"internalType\": \"struct IOstiumTradingStorage.Trade\",\n \"name\": \"trade\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"percentage\",\n \"type\": \"uint16\"\n }\n ],\n \"indexed\": false,\n \"internalType\": \"struct IOstiumTradingStorage.PendingMarketOrderV2\",\n \"name\": \"order\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"MarketOpenTimeoutExecutedV2\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint16\",\n \"name\": \"value\",\n \"type\": \"uint16\"\n }\n ],\n \"name\": \"MarketOrdersTimeoutUpdated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"MaxAllowedCollateralUpdated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"OpenLimitCanceled\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"OpenLimitPlaced\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"collateral\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"openPrice\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"tp\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"sl\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"leverage\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"buy\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"isDayTrade\",\n \"type\": \"bool\"\n }\n ],\n \"indexed\": false,\n \"internalType\": \"struct IOstiumTradingStorage.Trade\",\n \"name\": \"trade\",\n \"type\": \"tuple\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"enum IOstiumTradingStorage.OpenOrderType\",\n \"name\": \"orderType\",\n \"type\": \"uint8\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"builder\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"builderFee\",\n \"type\": \"uint32\"\n }\n ],\n \"indexed\": false,\n \"internalType\": \"struct IOstiumTradingStorage.BuilderFee\",\n \"name\": \"builderFee\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"OpenLimitPlacedV2\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint192\",\n \"name\": \"newPrice\",\n \"type\": \"uint192\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint192\",\n \"name\": \"newTp\",\n \"type\": \"uint192\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint192\",\n \"name\": \"newSl\",\n \"type\": \"uint192\"\n }\n ],\n \"name\": \"OpenLimitUpdated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tradeId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"OracleFeeCharged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"OracleFeeChargedLimitCancelled\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tradeId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"OracleFeeRefunded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"bool\",\n \"name\": \"paused\",\n \"type\": \"bool\"\n }\n ],\n \"name\": \"Paused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tradeId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"removeAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"RemoveCollateralInitiated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tradeId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"removeAmount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"reason\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"RemoveCollateralRejected\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tradeId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint192\",\n \"name\": \"newSl\",\n \"type\": \"uint192\"\n }\n ],\n \"name\": \"SlUpdated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tradeId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"topUpAmount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint32\",\n \"name\": \"newLeverage\",\n \"type\": \"uint32\"\n }\n ],\n \"name\": \"TopUpCollateralExecuted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tradeId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint192\",\n \"name\": \"newTp\",\n \"type\": \"uint192\"\n }\n ],\n \"name\": \"TpUpdated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint16\",\n \"name\": \"value\",\n \"type\": \"uint16\"\n }\n ],\n \"name\": \"TriggerTimeoutUpdated\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"DELEGATION_TYPEHASH\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"DOMAIN_SEPARATOR\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"_msgSender\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"cancelOpenLimitOrder\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"closePercentage\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"marketPrice\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"slippageP\",\n \"type\": \"uint32\"\n }\n ],\n \"name\": \"closeTradeMarket\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_order\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"retry\",\n \"type\": \"bool\"\n }\n ],\n \"name\": \"closeTradeMarketTimeout\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"delegatableNonces\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"call_data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"delegatedAction\",\n \"outputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"delegator\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"delegations\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"done\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"enum IOstiumTradingStorage.LimitOrder\",\n \"name\": \"orderType\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"priceTimestamp\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"executeAutomationOrder\",\n \"outputs\": [\n {\n \"internalType\": \"enum IOstiumTrading.AutomationOrderStatus\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IOstiumRegistry\",\n \"name\": \"_registry\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_maxAllowedCollateral\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"_marketOrdersTimeout\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"_triggerTimeout\",\n \"type\": \"uint16\"\n }\n ],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"isDone\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"isPaused\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"marketOrdersTimeout\",\n \"outputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"\",\n \"type\": \"uint16\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"maxAllowedCollateral\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"collateral\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"openPrice\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"tp\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"sl\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"leverage\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"buy\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"isDayTrade\",\n \"type\": \"bool\"\n }\n ],\n \"internalType\": \"struct IOstiumTradingStorage.Trade\",\n \"name\": \"t\",\n \"type\": \"tuple\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"builder\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"builderFee\",\n \"type\": \"uint32\"\n }\n ],\n \"internalType\": \"struct IOstiumTradingStorage.BuilderFee\",\n \"name\": \"bf\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"enum IOstiumTradingStorage.OpenOrderType\",\n \"name\": \"orderType\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"slippageP\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"openTrade\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_order\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"openTradeMarketTimeout\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"pause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"registry\",\n \"outputs\": [\n {\n \"internalType\": \"contract IOstiumRegistry\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"removeAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"removeCollateral\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"removeDelegate\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"delegate\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setDelegate\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"delegator\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"delegate\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"expiry\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"setDelegateWithSignature\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setMarketOrdersTimeout\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setMaxAllowedCollateral\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setTriggerTimeout\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"topUpAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"topUpCollateral\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"triggerTimeout\",\n \"outputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"\",\n \"type\": \"uint16\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"price\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"tp\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"sl\",\n \"type\": \"uint192\"\n }\n ],\n \"name\": \"updateOpenLimitOrder\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"newSl\",\n \"type\": \"uint192\"\n }\n ],\n \"name\": \"updateSl\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"newTp\",\n \"type\": \"uint192\"\n }\n ],\n \"name\": \"updateTp\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n] as const satisfies Abi;\n\n","/**\n * ABI encoders for all Ostium trading contract function calls.\n */\n\nimport { type Address, type Hex, encodeFunctionData, getAddress } from 'viem';\nimport { TRADING_ABI } from './internal/contract.js';\nimport { ERC20_ABI } from './internal/erc20.js';\nimport type { OstiumTrade, BuilderFee } from './internal/ostium-schema.js';\nimport { OpenOrderType } from './internal/ostium-schema.js';\nimport type { EncodedTx } from './types.js';\n\nfunction tx(to: Address, data: Hex): EncodedTx {\n return { to, data, value: 0n };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Trading contract encoders\n// ────────────────────────────────────────────────────────────────────────────\n\nexport function encodeOpenTrade(\n trade: OstiumTrade,\n builderFee: BuilderFee,\n orderType: OpenOrderType,\n slippageP: bigint,\n tradingAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: TRADING_ABI,\n functionName: 'openTrade',\n args: [\n {\n collateral: trade.collateral,\n openPrice: trade.openPrice,\n tp: trade.tp,\n sl: trade.sl,\n trader: trade.trader,\n leverage: Number(trade.leverage),\n pairIndex: Number(trade.pairIndex),\n index: Number(trade.index),\n buy: trade.buy,\n isDayTrade: trade.isDayTrade ?? false\n },\n {\n builder: builderFee.builder,\n builderFee: Number(builderFee.builderFee),\n },\n orderType,\n slippageP,\n ],\n });\n return tx(tradingAddress, data);\n}\n\nexport function encodeCloseTradeMarket(\n pairIndex: bigint,\n index: bigint,\n closePercentage: bigint,\n marketPrice: bigint,\n slippageP: bigint,\n tradingAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: TRADING_ABI,\n functionName: 'closeTradeMarket',\n args: [Number(pairIndex), Number(index), Number(closePercentage), marketPrice, Number(slippageP)],\n });\n return tx(tradingAddress, data);\n}\n\nexport function encodeCancelLimitOrder(\n pairIndex: bigint,\n orderIndex: bigint,\n tradingAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: TRADING_ABI,\n functionName: 'cancelOpenLimitOrder',\n args: [Number(pairIndex), Number(orderIndex)],\n });\n return tx(tradingAddress, data);\n}\n\nexport function encodeCloseTradeMarketTimeout(\n orderId: bigint,\n retry: boolean,\n tradingAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: TRADING_ABI,\n functionName: 'closeTradeMarketTimeout',\n args: [orderId, retry],\n });\n return tx(tradingAddress, data);\n}\n\nexport function encodeOpenTradeMarketTimeout(\n orderId: bigint,\n tradingAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: TRADING_ABI,\n functionName: 'openTradeMarketTimeout',\n args: [orderId],\n });\n return tx(tradingAddress, data);\n}\n\nexport function encodeUpdateOpenLimitOrder(\n pairIndex: bigint,\n orderIndex: bigint,\n price: bigint,\n tp: bigint,\n sl: bigint,\n tradingAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: TRADING_ABI,\n functionName: 'updateOpenLimitOrder',\n args: [Number(pairIndex), Number(orderIndex), price, tp, sl],\n });\n return tx(tradingAddress, data);\n}\n\nexport function encodeUpdateTp(\n pairIndex: bigint,\n index: bigint,\n newTp: bigint,\n tradingAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: TRADING_ABI,\n functionName: 'updateTp',\n args: [Number(pairIndex), Number(index), newTp],\n });\n return tx(tradingAddress, data);\n}\n\nexport function encodeUpdateSl(\n pairIndex: bigint,\n index: bigint,\n newSl: bigint,\n tradingAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: TRADING_ABI,\n functionName: 'updateSl',\n args: [Number(pairIndex), Number(index), newSl],\n });\n return tx(tradingAddress, data);\n}\n\nexport function encodeTopUpCollateral(\n pairIndex: bigint,\n index: bigint,\n amount: bigint,\n tradingAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: TRADING_ABI,\n functionName: 'topUpCollateral',\n args: [Number(pairIndex), Number(index), amount],\n });\n return tx(tradingAddress, data);\n}\n\nexport function encodeRemoveCollateral(\n pairIndex: bigint,\n index: bigint,\n amount: bigint,\n tradingAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: TRADING_ABI,\n functionName: 'removeCollateral',\n args: [Number(pairIndex), Number(index), amount],\n });\n return tx(tradingAddress, data);\n}\n\nexport function encodeSetDelegate(\n delegateAddress: Address,\n tradingAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: TRADING_ABI,\n functionName: 'setDelegate',\n args: [getAddress(delegateAddress)],\n });\n return tx(tradingAddress, data);\n}\n\nexport function encodeRemoveDelegate(tradingAddress: Address): EncodedTx {\n const data = encodeFunctionData({\n abi: TRADING_ABI,\n functionName: 'removeDelegate',\n args: [],\n });\n return tx(tradingAddress, data);\n}\n\n/**\n * Wraps inner calldata in delegatedAction(trader, callData).\n * Used internally by the DelegatedSignerStrategy.\n */\nexport function encodeDelegatedAction(\n traderAddress: Address,\n callData: Hex,\n tradingAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: TRADING_ABI,\n functionName: 'delegatedAction',\n args: [getAddress(traderAddress), callData],\n });\n return tx(tradingAddress, data);\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// ERC-20 encoders\n// ────────────────────────────────────────────────────────────────────────────\n\nexport function encodeUsdcApprove(\n spender: Address,\n amount: bigint,\n usdcAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: ERC20_ABI,\n functionName: 'approve',\n args: [getAddress(spender), amount],\n });\n return tx(usdcAddress, data);\n}\n\nexport function encodeErc20Transfer(\n to: Address,\n amount: bigint,\n tokenAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: ERC20_ABI,\n functionName: 'transfer',\n args: [getAddress(to), amount],\n });\n return tx(tokenAddress, data);\n}\n","import type { Address } from 'viem';\nimport type { EncodedTx } from '../types.js';\nimport type { SignerStrategy } from './index.js';\nimport { encodeDelegatedAction } from '../encoder.js';\n\n/**\n * Delegated signer — the private key belongs to a delegate account that has\n * been granted access via trading.setDelegate() by the actual trader.\n *\n * prepare() wraps every transaction in delegatedAction(traderAddress, callData)\n * so the delegate can execute the trade on the trader's behalf.\n */\nexport class DelegatedSignerStrategy implements SignerStrategy {\n readonly traderAddress: Address;\n\n constructor(traderAddress: Address) {\n this.traderAddress = traderAddress;\n }\n\n prepare(encoded: EncodedTx): EncodedTx {\n return encodeDelegatedAction(this.traderAddress, encoded.data, encoded.to);\n }\n}\n","import type { Address } from 'viem';\nimport type { EncodedTx } from '../types.js';\nimport type { ClientMode } from '../config.js';\nimport { SelfSignerStrategy } from './self.js';\nimport { DelegatedSignerStrategy } from './delegated.js';\n\nexport interface SignerStrategy {\n /**\n * The on-chain trading account. Used as trade.trader in all contract calls\n * and as the owner of USDC allowances.\n */\n readonly traderAddress: Address;\n\n /**\n * Prepare a transaction for submission.\n * - Self mode: returns tx unchanged.\n * - Delegated mode: wraps data in delegatedAction(traderAddress, data).\n */\n prepare(encoded: EncodedTx): EncodedTx;\n}\n\n/**\n * @param selfGasless - true when in Self + Gasless mode (EOA = trader, Safe = delegate).\n * In this mode we use DelegatedSignerStrategy even though `traderAddress` is not set\n * in the config — the Safe submits delegatedAction(eoaAddress, callData) on behalf of\n * the EOA, so all contract calls must be wrapped.\n */\nexport function createSigner(\n mode: ClientMode,\n traderAddress: Address,\n): SignerStrategy {\n if (mode !== 'self-self') {\n return new DelegatedSignerStrategy(traderAddress);\n }\n return new SelfSignerStrategy(traderAddress);\n}\n","import { createWalletClient, http, type Address } from 'viem';\nimport { privateKeyToAccount } from 'viem/accounts';\nimport { arbitrum, arbitrumSepolia } from 'viem/chains';\nimport type { EncodedTx, SubmissionResult } from '../types.js';\nimport type { OstiumClientConfig } from '../config.js';\nimport type { SubmissionStrategy } from './index.js';\nimport { OstiumError, OstiumErrorCode } from '../errors.js';\n\nfunction classifySubmitError(err: unknown): OstiumError {\n const msg = err instanceof Error ? err.message : String(err);\n const lower = msg.toLowerCase();\n\n if (\n lower.includes('execution reverted') ||\n lower.includes('reverted with reason') ||\n lower.includes('contract function') ||\n lower.includes('revert')\n ) {\n return new OstiumError(`Contract reverted: ${msg}`, OstiumErrorCode.CONTRACT_ERROR, err);\n }\n\n if (\n lower.includes('fetch') ||\n lower.includes('etimedout') ||\n lower.includes('econnrefused') ||\n lower.includes('enotfound') ||\n lower.includes('network') ||\n lower.includes('timeout') ||\n lower.includes('connection')\n ) {\n return new OstiumError(`Network error: ${msg}`, OstiumErrorCode.NETWORK_ERROR, err);\n }\n\n return new OstiumError(\n `Transaction submission failed: ${msg}`,\n OstiumErrorCode.SUBMISSION_FAILED,\n err,\n );\n}\n\n/**\n * Self-submission strategy — the signer's EOA pays gas.\n * Requires rpcUrl in the config.\n */\nexport class SelfSubmissionStrategy implements SubmissionStrategy {\n readonly effectiveSender: Address;\n private readonly send: (encoded: EncodedTx) => Promise<`0x${string}`>;\n\n constructor(config: OstiumClientConfig, testnet: boolean) {\n if (!config.privateKey) {\n throw new OstiumError(\n 'privateKey is required for self-submission mode',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n if (!config.rpcUrl) {\n throw new OstiumError(\n 'rpcUrl is required for self-submission mode',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n const chain = testnet ? arbitrumSepolia : arbitrum;\n const account = privateKeyToAccount(config.privateKey);\n const walletClient = createWalletClient({ account, chain, transport: http(config.rpcUrl) });\n this.effectiveSender = account.address;\n this.send = (encoded) =>\n walletClient.sendTransaction({ account, to: encoded.to, data: encoded.data, value: encoded.value });\n }\n\n async submit(encoded: EncodedTx): Promise<SubmissionResult> {\n try {\n const txHash = await this.send(encoded);\n return { txHash };\n } catch (err) {\n throw classifySubmitError(err);\n }\n }\n}\n","import { createPublicClient, http, type Address } from 'viem';\nimport { privateKeyToAccount } from 'viem/accounts';\nimport { arbitrum, arbitrumSepolia } from 'viem/chains';\nimport { entryPoint07Address } from 'viem/account-abstraction';\nimport { createSmartAccountClient } from 'permissionless';\nimport { createPimlicoClient } from 'permissionless/clients/pimlico';\nimport { toSafeSmartAccount as toLightSmartAccount } from 'permissionless/accounts';\nimport type { EncodedTx, SubmissionResult } from '../types.js';\nimport type { OstiumClientConfig } from '../config.js';\nimport type { SubmissionStrategy } from './index.js';\nimport { OstiumError, OstiumErrorCode } from '../errors.js';\n\nfunction classifyGaslessError(err: unknown): OstiumError {\n const msg = err instanceof Error ? err.message : String(err);\n const lower = msg.toLowerCase();\n\n if (\n lower.includes('execution reverted') ||\n lower.includes('reverted with reason') ||\n lower.includes('revert') ||\n lower.includes('userop reverted') ||\n lower.includes('aa') // ERC-4337 AA error codes\n ) {\n return new OstiumError(`Contract reverted: ${msg}`, OstiumErrorCode.CONTRACT_ERROR, err);\n }\n\n if (lower.includes('429') || lower.includes('rate limit') || lower.includes('too many requests')) {\n return new OstiumError(\n `Pimlico rate limit exceeded — retry after 60 seconds. ${msg}`,\n OstiumErrorCode.NETWORK_ERROR,\n err,\n );\n }\n\n if (lower.includes('sponsorship') || lower.includes('policy')) {\n return new OstiumError(\n `Pimlico sponsorship policy error — check sponsorshipPolicyId config. ${msg}`,\n OstiumErrorCode.INVALID_CONFIG,\n err,\n );\n }\n\n if (\n lower.includes('fetch') ||\n lower.includes('etimedout') ||\n lower.includes('econnrefused') ||\n lower.includes('network') ||\n lower.includes('timeout') ||\n lower.includes('bundle') ||\n lower.includes('connection')\n ) {\n return new OstiumError(`Network error: ${msg}`, OstiumErrorCode.NETWORK_ERROR, err);\n }\n\n return new OstiumError(\n `Gasless submission failed: ${msg}`,\n OstiumErrorCode.SUBMISSION_FAILED,\n err,\n );\n}\n\n/**\n * Gasless submission strategy — submits transactions via Pimlico as ERC-4337\n * UserOperations signed by a Safe 1.4.1 smart account.\n *\n * The Safe address is the submitter's effectiveSender. In Self + Gasless mode\n * the Safe address also becomes the trader's on-chain identity (trade.trader).\n *\n * Use the static GaslessSubmissionStrategy.create() factory to initialise —\n * it resolves the Safe address before returning, so effectiveSender is always\n * available synchronously after construction.\n */\nexport class GaslessSubmissionStrategy implements SubmissionStrategy {\n readonly effectiveSender: Address;\n private readonly testnet: boolean;\n private readonly pimlicoUrl: string;\n private readonly sponsorshipPolicyId?: string;\n // Cached Safe account — derived once in create(), reused on every submit().\n private readonly safeAccount: Awaited<ReturnType<typeof toLightSmartAccount>>;\n\n private constructor(\n testnet: boolean,\n pimlicoUrl: string,\n sponsorshipPolicyId: string | undefined,\n safeAccount: Awaited<ReturnType<typeof toLightSmartAccount>>,\n ) {\n this.testnet = testnet;\n this.pimlicoUrl = pimlicoUrl;\n this.sponsorshipPolicyId = sponsorshipPolicyId;\n this.safeAccount = safeAccount;\n this.effectiveSender = safeAccount.address;\n }\n\n static async create(\n config: OstiumClientConfig,\n testnet: boolean,\n ): Promise<GaslessSubmissionStrategy> {\n if (!config.privateKey) {\n throw new OstiumError(\n 'privateKey is required for gasless submission mode',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n if (!config.pimlicoUrl) {\n throw new OstiumError(\n 'pimlicoUrl is required for gasless mode',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n\n const chain = testnet ? arbitrumSepolia : arbitrum;\n const pimlicoUrl = config.pimlicoUrl;\n const chainRpc =\n config.rpcUrl ??\n (testnet ? 'https://sepolia-rollup.arbitrum.io/rpc' : 'https://arb1.arbitrum.io/rpc');\n const rpcTransport = http(chainRpc);\n const publicClient = createPublicClient({ chain, transport: rpcTransport });\n const owner = privateKeyToAccount(config.privateKey);\n\n try {\n const safeAccount = await toLightSmartAccount({\n client: publicClient,\n owners: [owner],\n entryPoint: {\n address: entryPoint07Address,\n version: '0.7',\n },\n version: '1.4.1',\n });\n\n return new GaslessSubmissionStrategy(testnet, pimlicoUrl, config.sponsorshipPolicyId, safeAccount);\n } catch (err) {\n throw new OstiumError(\n `Failed to derive Safe smart account address: ${err instanceof Error ? err.message : String(err)}`,\n OstiumErrorCode.INVALID_CONFIG,\n err,\n );\n }\n }\n\n async submit(encoded: EncodedTx): Promise<SubmissionResult> {\n const chain = this.testnet ? arbitrumSepolia : arbitrum;\n\n const pimlicoClient = createPimlicoClient({\n transport: http(this.pimlicoUrl),\n entryPoint: {\n address: entryPoint07Address,\n version: '0.7',\n },\n });\n\n try {\n const smartAccountClient = createSmartAccountClient({\n account: this.safeAccount,\n chain,\n bundlerTransport: http(this.pimlicoUrl),\n paymaster: pimlicoClient,\n userOperation: {\n estimateFeesPerGas: async () =>\n (await pimlicoClient.getUserOperationGasPrice()).fast,\n },\n ...(this.sponsorshipPolicyId && {\n paymasterContext: {\n sponsorshipPolicyId: this.sponsorshipPolicyId,\n },\n }),\n });\n\n const txHash = await smartAccountClient.sendTransaction({\n to: encoded.to,\n data: encoded.data,\n value: encoded.value,\n });\n\n return { txHash, smartAccountAddress: this.safeAccount.address };\n } catch (err) {\n throw classifyGaslessError(err);\n }\n }\n}\n","import type { Address } from 'viem';\nimport type { EncodedTx, SubmissionResult } from '../types.js';\nimport type { ClientMode, OstiumClientConfig } from '../config.js';\nimport { SelfSubmissionStrategy } from './self.js';\nimport { GaslessSubmissionStrategy } from './gasless.js';\n\nexport interface SubmissionStrategy {\n /**\n * The address that will appear as msg.sender on-chain.\n * - Self mode: EOA address derived from privateKey.\n * - Gasless mode: Safe smart-account address derived from privateKey.\n */\n readonly effectiveSender: Address;\n\n submit(encoded: EncodedTx): Promise<SubmissionResult>;\n}\n\n/**\n * Factory — synchronous for Self mode, but for Gasless mode the returned\n * strategy's effectiveSender is pre-resolved via GaslessSubmissionStrategy.create().\n * Call createSubmitter() which handles both cases uniformly.\n */\nexport async function createSubmitter(\n config: OstiumClientConfig,\n testnet: boolean,\n mode: ClientMode,\n): Promise<SubmissionStrategy> {\n if (mode === 'self-gasless' || mode === 'delegated-gasless') {\n return GaslessSubmissionStrategy.create(config, testnet);\n }\n if (!config.rpcUrl) {\n throw new Error('rpcUrl is required for self-submission mode');\n }\n return new SelfSubmissionStrategy(config, testnet);\n}\n","/** Mainnet (Arbitrum One) Ostium subgraph endpoint. */\nexport const DEFAULT_SUBGRAPH_ENDPOINT =\n 'https://api.subgraph.ormilabs.com/api/public/67a599d5-c8d2-4cc4-9c4d-2975a97bc5d8/subgraphs/ost-prod/live/gn';\n\n/** Testnet (Arbitrum Sepolia) Ostium subgraph endpoint. */\nexport const DEFAULT_SUBGRAPH_ENDPOINT_TESTNET =\n 'https://api.subgraph.ormilabs.com/api/public/67a599d5-c8d2-4cc4-9c4d-2975a97bc5d8/subgraphs/ost-sep/live/gn';\n\n/** Default Ostium builder API base URL (prices, OHLC, WebSocket stream). */\nexport const DEFAULT_BUILDER_API_URL = 'https://builder.ostium.io';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Client config\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Configuration for {@link OstiumSubgraphClient}.\n *\n * All fields are optional — calling `OstiumSubgraphClient.create()` with no\n * arguments connects to the mainnet subgraph.\n *\n * ```ts\n * // Mainnet (default)\n * const client = OstiumSubgraphClient.create();\n *\n * // Testnet (Arbitrum Sepolia)\n * const client = OstiumSubgraphClient.create({ testnet: true });\n *\n * // Custom endpoints\n * const client = OstiumSubgraphClient.create({\n * endpoint: 'https://my-subgraph.example.com/graphql',\n * builderApiUrl: 'https://my-builder-api.example.com',\n * });\n * ```\n */\nexport interface OstiumSubgraphClientConfig {\n /**\n * Subgraph GraphQL endpoint.\n * When omitted, defaults to the mainnet or testnet subgraph based on `testnet`.\n */\n endpoint?: string;\n /**\n * Use the Arbitrum Sepolia testnet subgraph.\n * Ignored when `endpoint` is set explicitly. Defaults to false (mainnet).\n */\n testnet?: boolean;\n /**\n * Override the builder API base URL used for live prices, OHLC candles, and the\n * WebSocket stream. Defaults to `https://builder.ostium.io`.\n */\n builderApiUrl?: string;\n}\n","export enum OstiumSubgraphErrorCode {\n INVALID_CONFIG = 'INVALID_CONFIG',\n INVALID_PARAMS = 'INVALID_PARAMS',\n FETCH_FAILED = 'FETCH_FAILED',\n NOT_FOUND = 'NOT_FOUND',\n PARSE_ERROR = 'PARSE_ERROR',\n}\n\nexport class OstiumSubgraphError extends Error {\n constructor(\n message: string,\n public readonly code: OstiumSubgraphErrorCode,\n public readonly cause?: unknown,\n ) {\n super(message);\n this.name = 'OstiumSubgraphError';\n }\n}\n","// Internal GQL query strings. Not exported from the SDK — the client formats\n// raw responses before returning.\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Pairs (sorted by id)\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst PAIR_FIELDS = `\n id\n from\n to\n maxLeverage\n overnightMaxLeverage\n takerFeeP\n maxOI\n longOI\n shortOI\n group { id name maxLeverage }\n lastUpdateTimestamp\n buyVolume\n sellVolume\n decayRate\n netVolThreshold\n priceImpactK\n accRolloverLong\n accRolloverShort\n lastRolloverBlock\n lastRolloverLongPure\n brokerPremium\n isNegativeRolloverAllowed\n lastTradePrice\n spreadP`;\n\nexport const GetPairsAndGroupsQuery = `\nquery GetPairsAndGroups {\n pairs(orderBy: id, orderDirection: asc, subgraphError: allow) {\n ${PAIR_FIELDS}\n }\n groups { id name maxLeverage }\n}`;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Open trades — full pair sub-fields needed for live PnL calculations\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst PAIR_FULL = `\n pair {\n id from to\n maxLeverage overnightMaxLeverage\n takerFeeP\n maxOI longOI shortOI\n group { id name maxLeverage }\n lastUpdateTimestamp\n buyVolume sellVolume decayRate netVolThreshold priceImpactK\n accRolloverLong accRolloverShort lastRolloverBlock lastRolloverLongPure\n brokerPremium isNegativeRolloverAllowed lastTradePrice\n }`;\n\nconst TRADE_CORE = `\n id tradeID trader\n isOpen isBuy isDayTrade\n index tradeType\n collateral notional tradeNotional leverage highestLeverage\n openPrice stopLossPrice takeProfitPrice\n rollover timestamp`;\n\nexport const GetTraderOpenTradesQuery = `\nquery GetTraderOpenTrades($trader: String!, $skip: Int!, $first: Int!) {\n trades(\n where: { isOpen: true, trader: $trader }\n skip: $skip first: $first\n orderBy: timestamp orderDirection: desc\n ) {\n ${TRADE_CORE}\n ${PAIR_FULL}\n }\n}`;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Executed orders — fills\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst ORDER_FIELDS = `\n id tradeID limitID trader\n pair { id from to group { id name } }\n orderAction orderType isBuy\n isPending isCancelled cancelReason\n collateral notional tradeNotional leverage\n price priceAfterImpact priceImpactP\n vaultFee devFee oracleFee rolloverFee liquidationFee\n builder builderFee\n profitPercent totalProfitPercent amountSentToTrader\n closePercent\n initiatedTx initiatedBlock initiatedAt\n executedTx executedBlock executedAt`;\n\n/**\n * Build an executed-fills query with optional filters. Pass `false` for any\n * filter to omit it from both the query signature and the `where` clause.\n */\nexport function buildExecutedFillsQuery(opts: {\n hasTrader: boolean;\n hasPairId: boolean;\n hasTimeRange: boolean;\n}): string {\n const args: string[] = ['$skip: Int!', '$first: Int!'];\n const conditions: string[] = ['isPending: false', 'isCancelled: false'];\n\n if (opts.hasTrader) {\n args.push('$trader: String!');\n conditions.push('trader: $trader');\n }\n if (opts.hasPairId) {\n args.push('$pairId: String!');\n conditions.push('pair: $pairId');\n }\n if (opts.hasTimeRange) {\n args.push('$startSec: BigInt!', '$endSec: BigInt!');\n conditions.push('executedAt_gte: $startSec', 'executedAt_lte: $endSec');\n }\n\n return `\nquery GetExecutedFills(${args.join(', ')}) {\n orders(\n where: { ${conditions.join(', ')} }\n skip: $skip first: $first\n orderBy: executedAt orderDirection: desc\n ) { ${ORDER_FIELDS} }\n}`;\n}\n\n/**\n * Build a query for orders at any status (pending, executed, cancelled).\n * - `hasOrderIds`: filter by `id_in` (on-chain order ids).\n * - `hasInitiatedTxHashes`: filter by `initiatedTx_in` (submission tx hashes).\n * - `hasTrader`: filter by trader address.\n * At most one filter mode should be active (caller enforces).\n */\nexport function buildGetOrdersQuery(opts: {\n hasOrderIds: boolean;\n hasInitiatedTxHashes: boolean;\n hasTrader: boolean;\n}): string {\n const args: string[] = ['$skip: Int!', '$first: Int!'];\n const conditions: string[] = [];\n\n if (opts.hasOrderIds) {\n args.push('$ids: [String!]!');\n conditions.push('id_in: $ids');\n }\n if (opts.hasInitiatedTxHashes) {\n args.push('$txHashes: [String!]!');\n conditions.push('initiatedTx_in: $txHashes');\n }\n if (opts.hasTrader) {\n args.push('$trader: String!');\n conditions.push('trader: $trader');\n }\n\n const where = conditions.length > 0 ? `where: { ${conditions.join(', ')} }` : '';\n\n return `\nquery GetOrders(${args.join(', ')}) {\n orders(\n ${where}\n skip: $skip first: $first\n orderBy: initiatedAt orderDirection: desc\n ) { ${ORDER_FIELDS} }\n}`;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Active limit orders (sorted by updatedAt desc)\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst LIMIT_FIELDS = `\n id uniqueId orderId trader\n pair { id from to group { id name } }\n isBuy limitType isActive executionStarted\n collateral notional tradeNotional leverage\n openPrice takeProfitPrice stopLossPrice\n block initiatedAt updatedAt`;\n\nexport const GetTraderActiveLimitsQuery = `\nquery GetTraderActiveLimits($trader: String!, $skip: Int!, $first: Int!) {\n limits(\n where: { isActive: true, trader: $trader }\n skip: $skip first: $first\n orderBy: updatedAt orderDirection: desc\n ) { ${LIMIT_FIELDS} }\n}`;\n","/**\n * Paginate a subgraph query, optionally capped at `max` total results.\n * Calls `fetcher(skip, first)` in a loop until either the page is short\n * (no more results) or the cap is reached. Pass `max = Infinity` to fetch\n * exhaustively.\n */\nexport async function paginateAll<T>(\n fetcher: (skip: number, first: number) => Promise<T[]>,\n batchSize = 1000,\n max = Infinity,\n): Promise<T[]> {\n const results: T[] = [];\n let skip = 0;\n\n while (results.length < max) {\n const remaining = max - results.length;\n const fetchSize = Math.min(batchSize, remaining);\n const page = await fetcher(skip, fetchSize);\n results.push(...page);\n if (page.length < fetchSize) break;\n skip += fetchSize;\n }\n\n return results;\n}\n","/** USDC — collateral, fees, notional (6 decimal places). */\nexport const USDC_DECIMALS = 6;\n\n/** Prices, OI token amounts, funding / rollover accumulators (18 decimal places). */\nexport const TOKEN_DECIMALS = 18;\n\n/** Leverage stored on-chain as leverage × 100 (2 decimal places). */\nexport const LEVERAGE_DECIMALS = 2;\n\nexport const PRECISION_6 = 1_000_000n;\nexport const PRECISION_18 = 1_000_000_000_000_000_000n;\n","import { formatUnits, parseUnits } from 'viem';\nimport { USDC_DECIMALS, TOKEN_DECIMALS, LEVERAGE_DECIMALS } from './precision.js';\nimport type { RawTrade } from './raw.js';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Formatters (raw on-chain bigint string → human-readable number)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Format a USDC value (6 decimals) to a JS number.\n * Safe for undefined / null / pre-formatted floats.\n */\nexport function formatUsdc(value?: bigint | string | number | null): number {\n if (value === undefined || value === null) return 0;\n if (typeof value === 'number') return value;\n if (typeof value === 'string' && value.includes('.')) return parseFloat(value);\n return Number(formatUnits(BigInt(value), USDC_DECIMALS));\n}\n\n/**\n * Format a token value (18 decimals) to a JS number.\n * Used for prices, OI amounts, and funding / rollover accumulators.\n */\nexport function formatTokens(value?: bigint | string | number | null): number {\n if (value === undefined || value === null) return 0;\n if (typeof value === 'number') return value;\n if (typeof value === 'string' && value.includes('.')) return parseFloat(value);\n return Number(formatUnits(BigInt(value), TOKEN_DECIMALS));\n}\n\n/**\n * Format a leverage value (2 decimals) to a JS number.\n * e.g. \"1000\" → 10 (10×).\n */\nexport function formatLeverage(value?: bigint | string | number | null): number {\n if (value === undefined || value === null) return 0;\n if (typeof value === 'number') return value;\n if (typeof value === 'string' && value.includes('.')) return parseFloat(value);\n return Number(formatUnits(BigInt(value), LEVERAGE_DECIMALS));\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Parsers (human-readable number → raw on-chain bigint)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** Parse a USDC amount to bigint with 6 decimals (e.g. \"100.50\" → 100_500_000n). */\nexport function parseUsdc(value: number | string): bigint {\n return parseUnits(value.toString(), USDC_DECIMALS);\n}\n\n/** Parse a price / token amount to bigint with 18 decimals. */\nexport function parseTokens(value: number | string): bigint {\n return parseUnits(value.toString(), TOKEN_DECIMALS);\n}\n\n/** Parse leverage to bigint with 2 decimals (e.g. 10 → 1000n). */\nexport function parseLeverage(value: number | string): bigint {\n return parseUnits(value.toString(), LEVERAGE_DECIMALS);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Returns the effective max leverage string for a trade.\n * Prefers pair.maxLeverage → group.maxLeverage → \"1\".\n */\nexport function getMaxLeverage(trade: RawTrade): string {\n return trade.pair.maxLeverage && trade.pair.maxLeverage !== '0'\n ? trade.pair.maxLeverage\n : trade.pair.group?.maxLeverage ?? '1';\n}\n\n/**\n * Seconds elapsed since the pair's last price / funding snapshot.\n * Used in dynamic spread calculations.\n */\nexport function timeElapsedSince(pair: { lastUpdateTimestamp?: string; lastFundingTime?: string }): string {\n const now = Math.floor(Date.now() / 1000);\n const last =\n parseInt(pair.lastUpdateTimestamp ?? '0') ||\n parseInt(pair.lastFundingTime ?? '0');\n return (now - last).toString();\n}\n","// Internal PnL helpers — used by the subgraph client to enrich open trades.\n// Not exported from the SDK.\n\nimport {\n GetCurrentRolloverFee,\n GetTradeRolloverFee,\n GetTradeLiquidationPrice,\n GetEffectiveMaxLeverage,\n CalculateDynamicPriceImpact,\n CurrentTradeProfitRaw,\n CurrentTotalProfitRaw,\n CurrentTotalProfitP,\n} from '@ostium/formulae';\nimport {\n formatUsdc,\n formatTokens,\n formatLeverage,\n parseUsdc,\n parseTokens,\n parseLeverage,\n getMaxLeverage,\n timeElapsedSince,\n} from './decimal.js';\nimport type { RawPair, RawTrade } from './raw.js';\nimport type { PriceData } from '../types.js';\n\n/** Internal PnL snapshot returned by `getTradePnL`. */\nexport interface TradePnL {\n /** Raw price PnL in USD before rollover. */\n pnl: number;\n /** PnL % after rollover, relative to collateral. */\n pnlPercent: number;\n /** Accrued rollover fee in USD. */\n rollover: number;\n /** Net PnL in USD after rollover. */\n netPnl: number;\n /** collateral + netPnl. */\n netValue: number;\n /** Estimated liquidation price. */\n liquidationPrice: number;\n /** Mid price after dynamic spread is applied. */\n priceAfterImpact: number;\n}\n\nexport const EMPTY_PNL: TradePnL = {\n pnl: 0,\n pnlPercent: 0,\n rollover: 0,\n netPnl: 0,\n netValue: 0,\n liquidationPrice: 0,\n priceAfterImpact: 0,\n};\n\nfunction getRolloverAccumulator(\n pair: RawPair,\n isBuy: boolean,\n blockNumber: bigint | string,\n): string {\n const accRollover = isBuy\n ? (pair.accRolloverLong ?? '0')\n : (pair.accRolloverShort ?? '0');\n\n return GetCurrentRolloverFee(\n accRollover,\n pair.lastRolloverBlock ?? '0',\n pair.brokerPremium ?? '0',\n pair.lastRolloverLongPure ?? '0',\n isBuy,\n pair.isNegativeRolloverAllowed ?? false,\n blockNumber.toString(),\n );\n}\n\nfunction getTradeRolloverFeeRaw(trade: RawTrade, currentRolloverAccumulator: string): bigint {\n return BigInt(\n GetTradeRolloverFee(\n trade.rollover,\n currentRolloverAccumulator,\n trade.collateral,\n trade.leverage,\n ),\n );\n}\n\nfunction getLiquidationPrice(trade: RawTrade, rolloverRaw: bigint): number {\n if (!trade.leverage || trade.leverage === '0') return 0;\n if (!trade.openPrice || trade.openPrice === '0') return 0;\n if (!trade.collateral || trade.collateral === '0') return 0;\n\n try {\n const maxLeverage = GetEffectiveMaxLeverage(\n getMaxLeverage(trade),\n trade.pair.overnightMaxLeverage ?? '0',\n trade.isDayTrade ?? false,\n );\n\n return formatTokens(\n GetTradeLiquidationPrice(\n trade.openPrice,\n trade.isBuy,\n trade.collateral,\n trade.leverage,\n rolloverRaw.toString(),\n '0', // funding excluded\n maxLeverage,\n ),\n );\n } catch {\n return 0;\n }\n}\n\nfunction getPriceImpact(\n marketPrice: PriceData,\n isBuy: boolean,\n isOpen: boolean,\n pair: RawPair,\n collateral: number,\n leverage: number,\n): { priceImpactP: string; priceAfterImpact: string } {\n if (!marketPrice.mid) return { priceImpactP: '0', priceAfterImpact: '0' };\n\n return CalculateDynamicPriceImpact(\n parseTokens(marketPrice.mid).toString(),\n parseTokens(marketPrice.ask).toString(),\n parseTokens(marketPrice.bid).toString(),\n isOpen,\n isBuy,\n parseUsdc(collateral).toString(),\n parseLeverage(leverage).toString(),\n pair.buyVolume ?? '0',\n pair.sellVolume ?? '0',\n pair.decayRate ?? '0',\n timeElapsedSince(pair),\n pair.netVolThreshold ?? '0',\n pair.priceImpactK ?? '0',\n );\n}\n\n/**\n * Full PnL snapshot for an open trade at the current block.\n * Rollover is the only ongoing fee included (funding excluded by design).\n */\nexport function getTradePnL(\n trade: RawTrade,\n marketPrice: PriceData,\n blockNumber: bigint,\n): TradePnL {\n if (!trade?.pair || !marketPrice?.mid || !blockNumber) return EMPTY_PNL;\n\n const rolloverAcc = getRolloverAccumulator(trade.pair, trade.isBuy, blockNumber);\n const rolloverRaw = getTradeRolloverFeeRaw(trade, rolloverAcc);\n\n const liquidationPrice = getLiquidationPrice(trade, rolloverRaw);\n\n // Price impact (display only — PnL uses mid to avoid scary spread PnL).\n const impactResult = getPriceImpact(\n marketPrice,\n trade.isBuy,\n false,\n trade.pair,\n formatUsdc(trade.collateral),\n formatLeverage(trade.leverage),\n );\n\n const priceForPnL = parseTokens(marketPrice.mid).toString();\n\n const pnlRaw = BigInt(\n CurrentTradeProfitRaw(\n trade.openPrice,\n priceForPnL,\n trade.isBuy,\n trade.leverage,\n trade.highestLeverage,\n trade.collateral,\n ),\n );\n\n const totalProfitRaw = BigInt(\n CurrentTotalProfitRaw(\n trade.openPrice,\n priceForPnL,\n trade.isBuy,\n trade.leverage,\n trade.highestLeverage,\n trade.collateral,\n rolloverRaw.toString(),\n '0', // funding excluded\n ),\n );\n\n const pnlPercentRaw = BigInt(\n CurrentTotalProfitP(totalProfitRaw.toString(), trade.collateral),\n );\n\n return {\n pnl: formatUsdc(pnlRaw),\n pnlPercent: formatUsdc(pnlPercentRaw),\n rollover: formatUsdc(rolloverRaw),\n netPnl: formatUsdc(totalProfitRaw),\n netValue: formatUsdc(totalProfitRaw) + formatUsdc(trade.collateral),\n liquidationPrice,\n priceAfterImpact: formatTokens(impactResult.priceAfterImpact),\n };\n}\n","/** Subgraph symbol → display name overrides. */\nconst PAIR_NAME_MAP: Record<string, string> = {\n CL: 'WTI',\n HG: 'XCU',\n SPX: 'US500',\n NDX: 'US100',\n DJI: 'US30',\n DAX: 'GER40',\n FTSE: 'UK100',\n HSI: 'HK50',\n NIK: 'JP225',\n};\n\n/** Map a raw subgraph symbol to its canonical display name. */\nexport function normalizePairName(symbol: string): string {\n return PAIR_NAME_MAP[symbol] ?? symbol;\n}\n","import WS from 'ws';\nimport { normalizePairName } from './pair-names.js';\nimport type { PriceData, PriceTick, Candle, CandleResolution } from '../types.js';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// REST — all prices\n// ─────────────────────────────────────────────────────────────────────────────\n\ninterface PricesApiResponse {\n prices: RawPriceTick[];\n stale: boolean;\n generatedAt: number;\n}\n\ninterface RawPriceTick {\n feed_id: string;\n pair: string;\n from: string;\n to: string;\n bid: number;\n mid: number;\n ask: number;\n isMarketOpen: boolean;\n isDayTradingClosed: boolean;\n secondsToToggleIsDayTradingClosed: number;\n timestampSeconds: number;\n}\n\n/**\n * Fetch the live price feed from `{builderApiUrl}/v1/prices`.\n * Returns a record keyed by raw `${from}/${to}` (e.g. `\"BTC/USD\"`, `\"CL/USD\"`).\n * Returns `{}` on 503 (upstream feed not connected).\n */\nexport async function fetchLivePrices(builderApiUrl: string): Promise<Record<string, PriceData>> {\n const res = await fetch(`${builderApiUrl}/v1/prices`);\n\n if (res.status === 503) return {};\n\n if (!res.ok) {\n throw new Error(`Live prices endpoint returned ${res.status} ${res.statusText}`);\n }\n\n const json = (await res.json()) as PricesApiResponse;\n if (!Array.isArray(json.prices)) {\n throw new Error('Live prices endpoint returned an unexpected payload');\n }\n\n // Keyed by raw subgraph name (no normalization) so internal pair lookups\n // using rawPair.from / rawPair.to continue to work correctly.\n const result: Record<string, PriceData> = {};\n for (const item of json.prices) {\n if (!item.from || !item.to) continue;\n result[`${item.from}/${item.to}`] = {\n mid: item.mid,\n bid: item.bid,\n ask: item.ask,\n isMarketOpen: item.isMarketOpen ?? true,\n isDayTradingClosed: item.isDayTradingClosed ?? false,\n secondsToToggleIsDayTradingClosed: item.secondsToToggleIsDayTradingClosed ?? -1,\n };\n }\n return result;\n}\n\nfunction rawTickToPublic(item: RawPriceTick, pairId?: string): PriceTick {\n const from = normalizePairName(item.from);\n const to = normalizePairName(item.to);\n return {\n pairId,\n feedId: item.feed_id,\n pair: `${from}-${to}`,\n from,\n to,\n bid: item.bid,\n mid: item.mid,\n ask: item.ask,\n isMarketOpen: item.isMarketOpen ?? true,\n isDayTradingClosed: item.isDayTradingClosed ?? false,\n secondsToToggleIsDayTradingClosed: item.secondsToToggleIsDayTradingClosed ?? -1,\n timestampSeconds: item.timestampSeconds,\n };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// REST — OHLC candles\n// ─────────────────────────────────────────────────────────────────────────────\n\ninterface RawOhlcCandle {\n from: string;\n to: string;\n time: number; // Unix milliseconds\n open: number;\n high: number;\n low: number;\n close: number;\n}\n\ninterface OhlcApiResponse {\n data: RawOhlcCandle[];\n lastRequestTimestamp: number | null;\n}\n\n/**\n * Fetch OHLC candles from `{builderApiUrl}/v1/ohlc`.\n *\n * @param rawPair - Pair in raw subgraph `\"FROM-TO\"` format (e.g. `\"BTC-USD\"`, `\"CL-USD\"`).\n * @param fromMs - Start time in Unix milliseconds.\n * @param toMs - End time in Unix milliseconds.\n * @param resolution - Candle resolution string.\n */\nexport async function fetchCandles(\n builderApiUrl: string,\n rawPair: string,\n fromMs: number,\n toMs: number,\n resolution: CandleResolution,\n): Promise<Candle[]> {\n const res = await fetch(`${builderApiUrl}/v1/ohlc`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n pair: rawPair,\n fromTimestampSeconds: Math.floor(fromMs / 1000),\n toTimestampSeconds: Math.floor(toMs / 1000),\n resolution,\n }),\n });\n\n if (!res.ok) {\n throw new Error(`OHLC endpoint returned ${res.status} ${res.statusText}`);\n }\n\n const json = (await res.json()) as OhlcApiResponse;\n return json.data.map(c => ({\n pairFrom: normalizePairName(c.from),\n pairTo: normalizePairName(c.to),\n time: c.time,\n open: c.open,\n high: c.high,\n low: c.low,\n close: c.close,\n }));\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// WebSocket — live price stream\n// ─────────────────────────────────────────────────────────────────────────────\n\ntype TickHandler = (tick: PriceTick) => void;\ntype SnapshotHandler = (ticks: PriceTick[]) => void;\n\n/**\n * WebSocket client for the Ostium live price stream.\n *\n * ```ts\n * // Via OstiumClient / OstiumSubgraphClient (recommended — pairIds resolved automatically):\n * const stream = client.streamPrices([0, 1]); // BTC and ETH by pairId\n *\n * stream.onSnapshot(ticks => console.log('snapshot:', ticks.length));\n * stream.onTick(tick => console.log(tick.pair, tick.mid));\n *\n * stream.subscribe([2]); // add pair 2\n * stream.unsubscribe([0]); // remove pair 0\n * stream.close();\n * ```\n *\n * The socket connects to `{builderApiUrl}/v1/prices/stream` — `https://` is\n * automatically rewritten to `wss://` (and `http://` to `ws://`). When\n * `streamPrices(pairIds)` is called with ids, the SDK sends\n * `{ type: \"subscribe\", pairs: [\"FROM-TO\", ...] }` on `open` (same wire format\n * as {@link OstiumPriceStream.subscribe}).\n *\n * `subscribe` / `unsubscribe` accept the same `pairId` values used everywhere\n * else in the SDK. `PriceTick.pair` / `.from` / `.to` use normalized display\n * names (e.g. `\"UK100\"` not `\"FTSE\"`).\n */\nexport class OstiumPriceStream {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly ws: any; // ws.WebSocket — typed as any to stay compatible with both Node and Bun\n private readonly tickHandlers: Set<TickHandler> = new Set();\n private readonly snapshotHandlers: Set<SnapshotHandler> = new Set();\n /** pairId (string) → raw \"FROM-TO\" name for the WS API. */\n private readonly pairRawNameCache: Map<string, string>;\n /** raw \"FROM-TO\" name → pairId (string) for mapping incoming ticks back to SDK ids. */\n private readonly rawNamePairIdCache: Map<string, string>;\n\n private constructor(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ws: any,\n pairRawNameCache: Map<string, string>,\n rawNamePairIdCache: Map<string, string>,\n initialSubscribeRawPairs?: string[],\n ) {\n this.ws = ws;\n this.pairRawNameCache = pairRawNameCache;\n this.rawNamePairIdCache = rawNamePairIdCache;\n if (initialSubscribeRawPairs?.length) {\n ws.once('open', () => {\n ws.send(JSON.stringify({ type: 'subscribe', pairs: initialSubscribeRawPairs }));\n });\n }\n ws.on('message', (data: Buffer | string) => {\n let msg: { type: string; data: unknown };\n try {\n msg = JSON.parse(typeof data === 'string' ? data : data.toString());\n } catch {\n return;\n }\n if (msg.type === 'snapshot' && Array.isArray(msg.data)) {\n const ticks = (msg.data as RawPriceTick[]).map(item =>\n rawTickToPublic(item, this.rawNamePairIdCache.get(`${item.from}-${item.to}`)),\n );\n for (const h of this.snapshotHandlers) h(ticks);\n } else if (msg.type === 'tick' && msg.data) {\n const item = msg.data as RawPriceTick;\n const tick = rawTickToPublic(item, this.rawNamePairIdCache.get(`${item.from}-${item.to}`));\n for (const h of this.tickHandlers) h(tick);\n }\n });\n }\n\n /**\n * Open a WebSocket connection to the live price stream.\n *\n * Uses the `ws` package which correctly handles case-insensitive `Connection`\n * header values (required for Cloudflare-proxied endpoints).\n *\n * @param builderApiUrl - Base URL (e.g. `\"https://builder.ostium.io\"`). The `http`/`https`\n * scheme is automatically converted to `ws`/`wss`.\n * @param rawPairs - Optional raw `\"FROM-TO\"` names (from\n * `OstiumSubgraphClient.streamPrices` pairIds). Sent as\n * `{ type: \"subscribe\", pairs }` after the socket opens.\n * @param pairRawNameCache - pairId → raw name map; passed in by the subgraph client so\n * `subscribe` / `unsubscribe` can accept pairIds.\n */\n static connect(\n builderApiUrl: string,\n rawPairs?: string[],\n pairRawNameCache: Map<string, string> = new Map(),\n ): OstiumPriceStream {\n const base = builderApiUrl\n .replace(/\\/$/, '')\n .replace(/^https?:\\/\\//, match => match === 'https://' ? 'wss://' : 'ws://');\n const url = `${base}/v1/prices/stream`;\n const initial = rawPairs && rawPairs.length > 0 ? rawPairs : undefined;\n const ws = new WS(url, {\n headers: { 'User-Agent': 'ostium-sdk', 'Accept': '*/*' },\n });\n const rawNamePairIdCache = new Map<string, string>();\n for (const [pairId, rawName] of pairRawNameCache.entries()) {\n rawNamePairIdCache.set(rawName, pairId);\n }\n return new OstiumPriceStream(ws, pairRawNameCache, rawNamePairIdCache, initial);\n }\n\n /**\n * Register a callback that fires on every incoming price tick.\n * Returns an unsubscribe function.\n */\n onTick(handler: TickHandler): () => void {\n this.tickHandlers.add(handler);\n return () => { this.tickHandlers.delete(handler); };\n }\n\n /**\n * Register a callback that fires once with the full snapshot sent on connect.\n * Returns an unsubscribe function.\n */\n onSnapshot(handler: SnapshotHandler): () => void {\n this.snapshotHandlers.add(handler);\n return () => { this.snapshotHandlers.delete(handler); };\n }\n\n /** Register a one-time callback that fires when the connection is established. */\n onOpen(handler: () => void): this {\n this.ws.once('open', handler);\n return this;\n }\n\n /** Register an error callback. */\n onError(handler: (event: Error) => void): this {\n this.ws.on('error', handler);\n return this;\n }\n\n /** Register a callback that fires when the connection closes. */\n onClose(handler: (code: number, reason: string) => void): this {\n this.ws.on('close', handler);\n return this;\n }\n\n /**\n * Add pairs to the active filter. Accepts the same `pairId` values used\n * throughout the SDK (numeric string or number).\n * Sends `{ type: \"subscribe\", pairs: [...rawNames] }` to the server.\n */\n subscribe(pairIds: Array<string | number>): this {\n this.send({ type: 'subscribe', pairs: this.resolveRawNames(pairIds) });\n return this;\n }\n\n /**\n * Remove pairs from the active filter. Accepts the same `pairId` values used\n * throughout the SDK.\n * Sends `{ type: \"unsubscribe\", pairs: [...rawNames] }` to the server.\n */\n unsubscribe(pairIds: Array<string | number>): this {\n this.send({ type: 'unsubscribe', pairs: this.resolveRawNames(pairIds) });\n return this;\n }\n\n /** Close the WebSocket connection. */\n close(): void {\n this.ws.close();\n }\n\n /** Underlying WebSocket ready state (`0=CONNECTING`, `1=OPEN`, `2=CLOSING`, `3=CLOSED`). */\n get readyState(): number {\n return this.ws.readyState as number;\n }\n\n private resolveRawNames(pairIds: Array<string | number>): string[] {\n return pairIds.map(id => {\n const cached = this.pairRawNameCache.get(String(id));\n // Fallback: treat unrecognised strings as raw names (e.g. direct \"BTC-USD\")\n return cached ?? String(id);\n });\n }\n\n private send(msg: unknown): void {\n if (this.ws.readyState === WS.OPEN) {\n this.ws.send(JSON.stringify(msg));\n }\n }\n}\n","import type { MarginSummary, PairPosition } from '../types.js';\n\nexport function aggregateMarginSummary(pairPositions: PairPosition[]): MarginSummary {\n let accountValue = 0;\n let totalCollateralUsed = 0;\n let totalNtlPos = 0;\n let totalRawPnlUsd = 0;\n let totalCumRollover = 0;\n let totalWithdrawable = 0;\n\n for (const { position } of pairPositions) {\n const collateral = parseFloat(position.collateralUsed) || 0;\n const ntl = parseFloat(position.ntl) || 0;\n const pnl = parseFloat(position.unrealizedPnl) || 0;\n const rollover = parseFloat(position.cumRollover) || 0;\n const withdrawable = parseFloat(position.maxWithdrawable) || 0;\n accountValue += collateral + pnl;\n totalCollateralUsed += collateral;\n totalNtlPos += ntl;\n totalRawPnlUsd += pnl;\n totalCumRollover += rollover;\n totalWithdrawable += withdrawable;\n }\n\n return {\n accountValue: accountValue.toString(),\n totalCollateralUsed: totalCollateralUsed.toString(),\n totalNtlPos: totalNtlPos.toString(),\n totalRawPnlUsd: totalRawPnlUsd.toString(),\n totalCumRollover: totalCumRollover.toString(),\n totalWithdrawable: totalWithdrawable.toString(),\n };\n}\n","import { formatUsdc, formatTokens, formatLeverage } from './decimal.js';\nimport { normalizePairName } from './pair-names.js';\nimport type {\n RawPair,\n RawTrade,\n RawOrder,\n RawLimit,\n} from './raw.js';\nimport type {\n Pair,\n PairPosition,\n Fill,\n Order,\n OpenOrder,\n PriceData,\n} from '../types.js';\nimport type { TradePnL } from './calculations.js';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Constants\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst MIN_NOTIONAL = '5.0';\nconst MIN_NOTIONAL_NUM = 5;\n/** Arbitrum L2 block production rate. */\nconst BLOCKS_PER_SECOND_ARBITRUM = 4;\n/** Default period for rollover rate display in `PairCtx`. */\nconst ROLLOVER_RATE_HOURS = 8;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction lowerHex(value: string | null | undefined): string | null {\n if (!value) return null;\n const lower = value.toLowerCase();\n return lower.startsWith('0x') ? lower : `0x${lower}`;\n}\n\nexport function pairMaxLeverage(pair: RawPair): number {\n const maxLevString =\n (!pair.maxLeverage || pair.maxLeverage === '0')\n ? (pair.group.maxLeverage ?? '0')\n : pair.maxLeverage;\n return formatLeverage(maxLevString);\n}\n\n/**\n * Max collateral that can be removed from a single position before crossing\n * its effective max leverage: `collateral × (1 − currentLeverage / maxLeverage)`.\n */\nexport function maxWithdrawForPosition(\n collateral: number,\n currentLeverage: number,\n maxLeverage: number,\n): number {\n if (collateral <= 0) return 0;\n if (currentLeverage <= 0) return 0;\n if (maxLeverage <= 0) return 0;\n if (currentLeverage >= maxLeverage) return 0;\n\n const max = collateral * (1 - currentLeverage / maxLeverage);\n if (max < 0) return 0;\n if (max > collateral) return collateral;\n return max;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Pair\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Build a `Pair` from a raw subgraph pair, merging in live price/market context.\n * Falls back to `lastTradePrice` when no live price is given.\n */\nexport function formatPair(raw: RawPair, price?: PriceData): Pair {\n const lastPrice = formatTokens(raw.lastTradePrice);\n const mid = price?.mid;\n const refPrice = mid && mid > 0 ? mid : lastPrice;\n\n const buyOI_usd = formatTokens(raw.longOI) * lastPrice;\n const sellOI_usd = formatTokens(raw.shortOI) * lastPrice;\n const maxOI_usd = formatUsdc(raw.maxOI);\n\n const minSz = refPrice > 0 ? MIN_NOTIONAL_NUM / refPrice : 0;\n const maxBSz = refPrice > 0 ? Math.max(0, (maxOI_usd - buyOI_usd) / refPrice) : 0;\n const maxSSz = refPrice > 0 ? Math.max(0, (maxOI_usd - sellOI_usd) / refPrice) : 0;\n\n const rolloverRate = getRolloverRateDisplay(raw);\n\n return {\n pairId: String(raw.id),\n pairTo: normalizePairName(raw.to),\n pairFrom: normalizePairName(raw.from),\n minSz: minSz.toString(),\n maxBSz: maxBSz.toString(),\n maxSSz: maxSSz.toString(),\n minNtl: MIN_NOTIONAL,\n maxLeverage: pairMaxLeverage(raw),\n overnightMaxLeverage: raw.overnightMaxLeverage ? formatLeverage(raw.overnightMaxLeverage) : 0,\n rolloverFeePerBlock: formatTokens(raw.lastRolloverLongPure ?? '0').toString(),\n openInterest: (buyOI_usd + sellOI_usd).toString(),\n buyOpenInterest: buyOI_usd.toString(),\n sellOpenInterest: sellOI_usd.toString(),\n maxOpenInterest: maxOI_usd.toString(),\n category: raw.group.name,\n rolloverRate,\n midPx: price ? price.mid.toString() : '0',\n askPx: price ? price.ask.toString() : '0',\n bidPx: price ? price.bid.toString() : '0',\n isMarketOpen: price?.isMarketOpen ?? true,\n isDayTradingClosed: price?.isDayTradingClosed ?? false,\n secondsToToggleIsDayTradingClosed: price?.secondsToToggleIsDayTradingClosed ?? -1,\n };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Rollover rate (8hr percent, long & short)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * UI-display rollover rate using Ostium's contract sign convention:\n * positive contract fee = trader pays => display as negative.\n */\nfunction getRolloverRateDisplay(raw: RawPair): { long: string; short: string } {\n const longPure = formatTokens(raw.lastRolloverLongPure ?? '0');\n const premium = formatTokens(raw.brokerPremium ?? '0');\n\n let contractLong = longPure + premium;\n let contractShort = -longPure + premium;\n\n if (!raw.isNegativeRolloverAllowed) {\n contractLong = Math.max(contractLong, 0);\n contractShort = Math.max(contractShort, 0);\n }\n\n const displayPerBlockLong = -contractLong;\n const displayPerBlockShort = -contractShort;\n\n const blocksInPeriod = ROLLOVER_RATE_HOURS * 60 * 60 * BLOCKS_PER_SECOND_ARBITRUM;\n const periodMultiplier = blocksInPeriod * 100;\n\n return {\n long: (displayPerBlockLong * periodMultiplier).toString(),\n short: (displayPerBlockShort * periodMultiplier).toString(),\n };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Open positions\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function formatPosition(\n raw: RawTrade,\n price: PriceData | undefined,\n pnl: TradePnL,\n maxLeverage: number\n): PairPosition {\n const collateral = formatUsdc(raw.collateral);\n const tradeNotional = formatTokens(raw.tradeNotional);\n const leverage = formatLeverage(raw.leverage);\n const mid = price?.mid ?? formatTokens(raw.pair.lastTradePrice);\n const ntl = tradeNotional * mid;\n const roe = collateral > 0 ? pnl.netPnl / collateral : 0;\n\n return {\n position: {\n pairTo: normalizePairName(raw.pair.to),\n pairFrom: normalizePairName(raw.pair.from),\n pairId: String(raw.pair.id),\n pid: raw.tradeID,\n idx: parseInt(raw.index || '0') || 0,\n side: raw.isBuy ? 'B' : 'S',\n szi: tradeNotional.toString(),\n entryPx: formatTokens(raw.openPrice).toString(),\n leverage: leverage.toString(),\n ntl: ntl.toString(),\n unrealizedPnl: pnl.netPnl.toString(),\n returnOnEquity: roe.toString(),\n liquidationPx: pnl.liquidationPrice.toString(),\n collateralUsed: collateral.toString(),\n cumRollover: (pnl.rollover * -1).toString(),\n ...(raw.takeProfitPrice && raw.takeProfitPrice !== '0' ? { tpPx: formatTokens(raw.takeProfitPrice).toString() } : {}),\n ...(raw.stopLossPrice && raw.stopLossPrice !== '0' ? { slPx: formatTokens(raw.stopLossPrice).toString() } : {}),\n openTimestamp: parseInt(raw.timestamp || '0') * 1000,\n isDayTrade: raw.isDayTrade ?? false,\n maxLeverage: maxLeverage.toString(),\n maxWithdrawable: maxWithdrawForPosition(collateral, leverage, maxLeverage).toString(),\n },\n };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Fills\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function formatFill(raw: RawOrder): Fill {\n const collateral = formatUsdc(raw.collateral);\n const tradeNotional = formatTokens(raw.tradeNotional);\n const priceImpactP = formatTokens(raw.priceImpactP);\n const devFee = formatUsdc(raw.devFee);\n const vaultFee = formatUsdc(raw.vaultFee);\n const oracleFee = formatUsdc(raw.oracleFee);\n const rolloverFee = formatUsdc(raw.rolloverFee);\n const liquidation = formatUsdc(raw.liquidationFee);\n const builderFee = formatUsdc(raw.builderFee);\n const totalProfitPercent = formatUsdc(raw.totalProfitPercent);\n\n // Pass the subgraph's orderAction / orderType through verbatim so non-trade\n // actions like `RemoveCollateral` aren't misreported as `Open`.\n const action = raw.orderAction;\n const type = raw.orderType;\n\n const isClose = action === 'Close' || action === 'StopLoss' || action === 'TakeProfit' || action === 'CloseDayTrade';\n\n const opening = action === 'Open' ? (devFee + vaultFee).toString() : '0';\n const rollover = isClose ? rolloverFee.toString() : '0';\n const liquidationFee = action === 'Liquidation' ? liquidation.toString() : '0';\n const closedPnl = isClose || action === 'Liquidation'\n ? (collateral * totalProfitPercent / 100 - devFee - vaultFee - oracleFee).toString()\n : '0';\n const px = formatTokens(raw.priceAfterImpact)\n const szi = tradeNotional\n const pxBeforeImpact = raw.isBuy\n ? px / (1 + priceImpactP / 100)\n : px / (1 - priceImpactP / 100);\n const priceImpactFee = Math.abs((px - pxBeforeImpact) * szi);\n\n return {\n pairTo: normalizePairName(raw.pair.to),\n pairFrom: normalizePairName(raw.pair.from),\n pairId: String(raw.pair.id),\n oid: raw.id,\n pid: raw.tradeID,\n side: raw.isBuy ? 'B' : 'S',\n action,\n type,\n px: px.toString(),\n szi: szi.toString(),\n collateralUsed: collateral.toString(),\n fees: {\n opening,\n rollover,\n liquidation: liquidationFee,\n builder: builderFee.toString(),\n priceImpact: priceImpactFee.toString(),\n },\n closedPnl,\n hash: lowerHex(raw.executedTx) ?? '',\n time: parseInt(raw.executedAt || '0') * 1000,\n };\n}\n\nexport function formatOrder(raw: RawOrder): Order {\n return {\n ...formatFill(raw),\n initiatedTx: lowerHex(raw.initiatedTx) ?? '',\n initiatedTime: parseInt(raw.initiatedAt || '0') * 1000,\n isPending: raw.isPending,\n isCancelled: raw.isCancelled,\n ...(raw.cancelReason ? { cancelReason: raw.cancelReason } : {}),\n };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Open limit orders\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function formatOpenOrder(raw: RawLimit): OpenOrder {\n const tp = raw.takeProfitPrice && raw.takeProfitPrice !== '0' ? formatTokens(raw.takeProfitPrice) : null;\n const sl = raw.stopLossPrice && raw.stopLossPrice !== '0' ? formatTokens(raw.stopLossPrice) : null;\n\n const orderType = raw.limitType === 'STOP' ? 'Stop' : 'Limit';\n\n return {\n pairTo: normalizePairName(raw.pair.to),\n pairFrom: normalizePairName(raw.pair.from),\n pairId: String(raw.pair.id),\n idx: parseInt(raw.orderId || '0') || 0,\n side: raw.isBuy ? 'B' : 'S',\n limitPx: formatTokens(raw.openPrice).toString(),\n szi: formatTokens(raw.tradeNotional).toString(),\n ...(tp !== null ? { tpPx: tp.toString() } : {}),\n ...(sl !== null ? { slPx: sl.toString() } : {}),\n orderType,\n timestamp: parseInt(raw.initiatedAt || '0') * 1000,\n };\n}\n","import type {\n OpenPositionsResponse,\n Position,\n PriceTick,\n} from '../types.js';\nimport { OstiumPriceStream } from './pricing.js';\nimport { aggregateMarginSummary } from './aggregations.js';\nimport { maxWithdrawForPosition } from './formatters.js';\n\ntype UpdateHandler = (positions: OpenPositionsResponse) => void;\ntype TickSource = Pick<OstiumPriceStream, 'onTick' | 'onSnapshot' | 'onOpen' | 'onError' | 'onClose' | 'close'>;\n\nfunction cloneResponse(response: OpenPositionsResponse): OpenPositionsResponse {\n return {\n pairPositions: response.pairPositions.map(pairPos => ({\n position: { ...pairPos.position },\n })),\n marginSummary: { ...response.marginSummary },\n time: response.time,\n };\n}\n\nfunction applyTickToPosition(position: Position, tick: PriceTick): Position {\n const size = parseFloat(position.szi) || 0;\n const entry = parseFloat(position.entryPx) || 0;\n const collateral = parseFloat(position.collateralUsed) || 0;\n const maxLeverage = parseFloat(position.maxLeverage) || 0;\n // cumRollover is stored negated (cost convention): add it back to get raw fee impact on PnL.\n const rollover = parseFloat(position.cumRollover) || 0;\n const isLong = position.side === 'B';\n\n const ntl = size * tick.mid;\n const rawPnl = isLong ? (tick.mid - entry) * size : (entry - tick.mid) * size;\n const netPnl = rawPnl + rollover;\n const roe = collateral > 0 ? netPnl / collateral : 0;\n const currentLeverage = collateral > 0 ? ntl / collateral : 0;\n // liquidationPx is rollover-dependent, not price-dependent — remains valid until the next getOpenPositions() call.\n const maxWithdrawable = maxWithdrawForPosition(collateral, currentLeverage, maxLeverage);\n\n return {\n ...position,\n ntl: ntl.toString(),\n unrealizedPnl: netPnl.toString(),\n returnOnEquity: roe.toString(),\n maxWithdrawable: maxWithdrawable.toString(),\n };\n}\n\nfunction updateResponseWithTick(\n current: OpenPositionsResponse,\n tick: PriceTick,\n timestampMs: number,\n): OpenPositionsResponse {\n if (!tick.pairId) return current;\n\n let changed = false;\n const pairPositions = current.pairPositions.map(pairPos => {\n if (String(pairPos.position.pairId) !== String(tick.pairId)) {\n return pairPos;\n }\n changed = true;\n return {\n ...pairPos,\n position: applyTickToPosition(pairPos.position, tick),\n };\n });\n\n if (!changed) return current;\n\n return {\n pairPositions,\n marginSummary: aggregateMarginSummary(pairPositions),\n time: timestampMs,\n };\n}\n\nexport class OstiumPositionUpdatesStream {\n private readonly priceStream?: TickSource;\n private readonly updateHandlers: Set<UpdateHandler> = new Set();\n private current: OpenPositionsResponse;\n private readonly trackedPairIds: Set<string>;\n\n constructor(\n initial: OpenPositionsResponse,\n trackedPairIds: string[],\n priceStream?: TickSource,\n ) {\n this.current = cloneResponse(initial);\n this.priceStream = priceStream;\n this.trackedPairIds = new Set(trackedPairIds);\n\n if (!priceStream) return;\n\n priceStream.onSnapshot(ticks => {\n this.ingestSnapshot(ticks);\n });\n\n priceStream.onTick(tick => {\n this.ingestTick(tick);\n });\n }\n\n onUpdate(handler: UpdateHandler): () => void {\n this.updateHandlers.add(handler);\n return () => { this.updateHandlers.delete(handler); };\n }\n\n onOpen(handler: () => void): this {\n this.priceStream?.onOpen(handler);\n return this;\n }\n\n onError(handler: (event: Error) => void): this {\n this.priceStream?.onError(handler);\n return this;\n }\n\n onClose(handler: (code: number, reason: string) => void): this {\n this.priceStream?.onClose(handler);\n return this;\n }\n\n getCurrent(): OpenPositionsResponse {\n return cloneResponse(this.current);\n }\n\n /**\n * Apply a single externally sourced price tick to the tracked positions.\n *\n * Use this when your app already has its own websocket connection and you want\n * the SDK to handle only the position recalculation logic.\n */\n ingestTick(tick: PriceTick): void {\n if (!tick.pairId || !this.trackedPairIds.has(String(tick.pairId))) return;\n const next = updateResponseWithTick(this.current, tick, tick.timestampSeconds * 1000);\n if (next !== this.current) {\n this.current = next;\n this.emit(next);\n }\n }\n\n /**\n * Apply a batch of externally sourced ticks, such as a websocket snapshot.\n */\n ingestSnapshot(ticks: PriceTick[]): void {\n let next = this.current;\n for (const tick of ticks) {\n if (!tick.pairId || !this.trackedPairIds.has(String(tick.pairId))) continue;\n next = updateResponseWithTick(next, tick, tick.timestampSeconds * 1000);\n }\n if (next !== this.current) {\n this.current = next;\n this.emit(next);\n }\n }\n\n close(): void {\n this.priceStream?.close();\n }\n\n private emit(positions: OpenPositionsResponse): void {\n for (const handler of this.updateHandlers) handler(cloneResponse(positions));\n }\n}\n","import { CalculateDynamicPriceImpact } from '@ostium/formulae';\nimport {\n formatUsdc,\n formatTokens,\n parseUsdc,\n parseTokens,\n parseLeverage,\n timeElapsedSince,\n} from './decimal.js';\nimport type { RawPair } from './raw.js';\nimport { normalizePairName } from './pair-names.js';\nimport type {\n PriceData,\n SimSlippageForPair,\n SimSlippageRow,\n SimOrderbookLevel,\n SimOrderbookResponse,\n} from '../types.js';\n\nconst EMPTY_RESULT: SimSlippageForPair = { long: [], short: [] };\n\n/** Max levels-per-side cap exposed by `getSimOrderbook`. */\nconst ORDERBOOK_MAX_LEVELS = 20;\n\n/**\n * Build log-spaced notional levels from ~capacity/3300 up to capacity.\n * The last level snaps to exactly `capacity` so the orderbook always shows the\n * full remaining open-interest as its deepest level.\n *\n * Example with 8 levels and $3.3M capacity → ≈ $1k, $10k, $50k, $100k, $250k, $1M, $2.5M, $3.3M\n */\nfunction generateLogSpacedNotionals(levels: number, capacity: number): number[] {\n const n = Math.min(ORDERBOOK_MAX_LEVELS, Math.max(1, Math.floor(levels)));\n if (capacity <= 0) return [];\n if (n === 1) return [capacity];\n\n const minNtl = Math.max(1, capacity / 3300);\n if (minNtl >= capacity) return [capacity];\n\n const logMin = Math.log(minNtl);\n const logMax = Math.log(capacity);\n\n return Array.from({ length: n }, (_, i) => {\n if (i === n - 1) return capacity;\n const t = i / (n - 1);\n return Math.exp(logMin + t * (logMax - logMin));\n });\n}\n\n/** Side capacities + bid/mid/ask BigNumber strings + cached time-elapsed for one pair. */\ninterface PairContext {\n remLong: number;\n remShort: number;\n midBN: string;\n askBN: string;\n bidBN: string;\n timeElapsed: string;\n}\n\nfunction buildPairContext(raw: RawPair, price: PriceData): PairContext {\n const maxOIUsd = formatUsdc(raw.maxOI);\n const longOIUsd = formatTokens(raw.longOI) * price.mid;\n const shortOIUsd = formatTokens(raw.shortOI) * price.mid;\n return {\n remLong: Math.max(0, maxOIUsd - longOIUsd),\n remShort: Math.max(0, maxOIUsd - shortOIUsd),\n midBN: parseTokens(price.mid).toString(),\n askBN: parseTokens(price.ask).toString(),\n bidBN: parseTokens(price.bid).toString(),\n timeElapsed: timeElapsedSince(raw),\n };\n}\n\n/** Run `CalculateDynamicPriceImpact` for one (pair, side, ntl) tuple. */\nfunction priceImpactForLevel(\n raw: RawPair,\n ctx: PairContext,\n ntl: number,\n isBuy: boolean,\n): { priceImpactP: string; priceAfterImpact: string } {\n return CalculateDynamicPriceImpact(\n ctx.midBN,\n ctx.askBN,\n ctx.bidBN,\n true, // isOpen\n isBuy,\n parseUsdc(ntl).toString(),\n parseLeverage(1).toString(),\n raw.buyVolume ?? '0',\n raw.sellVolume ?? '0',\n raw.decayRate ?? '0',\n ctx.timeElapsed,\n raw.netVolThreshold ?? '0',\n raw.priceImpactK ?? '0',\n );\n}\n\n/**\n * Simulate the dynamic-spread slippage a long and a short trade of each\n * notional would experience on the given pair. Notionals exceeding the side's\n * remaining open-interest capacity (`maxOI − sideOI`) are dropped.\n *\n * Slippage is the per-side `priceImpactP` returned by `CalculateDynamicPriceImpact`\n * — the same formula the contract and frontend use — formatted as a percentage\n * (e.g. `\"0.5\"` = 0.5 %).\n *\n * @param liveMid Optional override for `price.mid`. Falls back to `price.mid`.\n */\nexport function simulateSlippageForPair(\n raw: RawPair,\n ntls: string[],\n price: PriceData | undefined,\n): SimSlippageForPair {\n if (!price || !price.mid) return EMPTY_RESULT;\n const ctx = buildPairContext(raw, price);\n\n const compute = (isBuy: boolean, capacity: number): SimSlippageRow[] =>\n ntls\n .filter(ntl => {\n const n = Number(ntl);\n return Number.isFinite(n) && n > 0 && n <= capacity;\n })\n .map(ntl => {\n const result = priceImpactForLevel(raw, ctx, Number(ntl), isBuy);\n return { ntl, slippage: formatTokens(result.priceImpactP).toString() };\n });\n\n return {\n long: compute(true, ctx.remLong),\n short: compute(false, ctx.remShort),\n };\n}\n\n/**\n * Build a simulated bid/ask orderbook for one pair using log-spaced notionals\n * from ~capacity/3300 up to the side's full remaining open-interest capacity.\n * `levels` is clamped to `[1, 20]`.\n *\n * - `asks` model long entries — `priceAfterImpact` is the price you'd buy at.\n * - `bids` model short entries — `priceAfterImpact` is the price you'd sell at.\n */\nexport function simulateOrderbookForPair(\n raw: RawPair,\n price: PriceData,\n levels: number,\n): SimOrderbookResponse {\n const safeLevels = Math.min(ORDERBOOK_MAX_LEVELS, Math.max(1, Math.floor(levels)));\n const ctx = buildPairContext(raw, price);\n\n const askNtls = generateLogSpacedNotionals(safeLevels, ctx.remLong);\n const bidNtls = generateLogSpacedNotionals(safeLevels, ctx.remShort);\n\n const toLevel = (ntl: number, isBuy: boolean): SimOrderbookLevel => {\n const result = priceImpactForLevel(raw, ctx, ntl, isBuy);\n const px = formatTokens(result.priceAfterImpact);\n return {\n px: px.toString(),\n sz: (px > 0 ? ntl / px : 0).toString(),\n n: 1,\n };\n };\n\n return {\n pairId: String(raw.id),\n pairFrom: normalizePairName(raw.from),\n pairTo: normalizePairName(raw.to),\n levels: [\n bidNtls.map(n => toLevel(n, false)), // bids: short entries, best (closest to mid) first\n askNtls.map(n => toLevel(n, true)), // asks: long entries, best (closest to mid) first\n ],\n time: Date.now(),\n };\n}\n","import { GraphQLClient } from 'graphql-request';\nimport { DEFAULT_SUBGRAPH_ENDPOINT, DEFAULT_SUBGRAPH_ENDPOINT_TESTNET, DEFAULT_BUILDER_API_URL } from './config.js';\nimport type { OstiumSubgraphClientConfig } from './config.js';\nimport { OstiumSubgraphError, OstiumSubgraphErrorCode } from './errors.js';\nimport {\n GetPairsAndGroupsQuery,\n GetTraderOpenTradesQuery,\n GetTraderActiveLimitsQuery,\n buildExecutedFillsQuery,\n buildGetOrdersQuery,\n} from './queries.js';\nimport { paginateAll } from './internal/pagination.js';\nimport { getTradePnL, EMPTY_PNL } from './internal/calculations.js';\nimport { fetchLivePrices, fetchCandles, OstiumPriceStream } from './internal/pricing.js';\nimport { OstiumPositionUpdatesStream } from './internal/position-updates.js';\nimport { aggregateMarginSummary } from './internal/aggregations.js';\nimport {\n formatPair,\n formatPosition,\n formatFill,\n formatOrder,\n formatOpenOrder,\n pairMaxLeverage,\n} from './internal/formatters.js';\nimport { formatLeverage } from './internal/decimal.js';\nimport { simulateSlippageForPair, simulateOrderbookForPair } from './internal/sim-slippage.js';\nimport type { RawPair, RawTrade, RawOrder, RawLimit } from './internal/raw.js';\nimport type {\n Pair,\n PairsResponse,\n AllPricesResponse,\n Position,\n PairPosition,\n OpenPositionsResponse,\n Fill,\n Order,\n OpenOrder,\n PriceData,\n GetPairsParams,\n GetOrdersParams,\n GetUserParams,\n GetOpenPositionsParams,\n GetFillsParams,\n GetFillsByTimeParams,\n GetSimSlippageParams,\n SimSlippageByPairId,\n GetSimOrderbookParams,\n SimOrderbookResponse,\n Candle,\n GetCandlesParams,\n} from './types.js';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Client\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport class OstiumSubgraphClient {\n private readonly gql: GraphQLClient;\n private readonly builderApiUrl: string;\n\n /** Cached pair-name (`${from}/${to}`) → `pairId` map. Refreshed lazily. */\n private pairIdCache: Map<string, string> | null = null;\n /** Cached `pairId` → `\"FROM-TO\"` in raw subgraph dash format (used for OHLC API). */\n private pairRawNameCache: Map<string, string> | null = null;\n\n private constructor(gql: GraphQLClient, builderApiUrl: string) {\n this.gql = gql;\n this.builderApiUrl = builderApiUrl;\n }\n\n /**\n * Create a client connected to the Ostium subgraph.\n *\n * Fetches the full pair list at startup so that `streamPrices`, `getCandles`,\n * and `getAllPrices` can resolve pair ids to raw names without an extra round-trip.\n *\n * ```ts\n * // Mainnet (default)\n * const client = await OstiumSubgraphClient.create();\n *\n * // Testnet (Arbitrum Sepolia)\n * const client = await OstiumSubgraphClient.create({ testnet: true });\n * ```\n */\n static async create(config: OstiumSubgraphClientConfig = {}): Promise<OstiumSubgraphClient> {\n const endpoint = config.endpoint\n ?? (config.testnet ? DEFAULT_SUBGRAPH_ENDPOINT_TESTNET : DEFAULT_SUBGRAPH_ENDPOINT);\n\n if (!endpoint.startsWith('http')) {\n throw new OstiumSubgraphError(\n `Invalid subgraph endpoint: ${endpoint}`,\n OstiumSubgraphErrorCode.INVALID_CONFIG,\n );\n }\n\n const client = new OstiumSubgraphClient(\n new GraphQLClient(endpoint),\n config.builderApiUrl ?? DEFAULT_BUILDER_API_URL,\n );\n await client.initPairCache();\n return client;\n }\n\n private async initPairCache(): Promise<void> {\n const rawPairs = await this.fetchRawPairs();\n this.refreshPairIdCache(rawPairs);\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Pairs\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * All trading pairs with computed `minSz`/`maxBSz`/`maxSSz`, live prices, and\n * market-status flags. Pass `pairIds` to restrict to a subset.\n */\n async getPairs(params?: GetPairsParams): Promise<PairsResponse> {\n const [rawPairs, prices] = await Promise.all([\n this.fetchRawPairs(),\n this.fetchLivePricesSafe(),\n ]);\n this.refreshPairIdCache(rawPairs);\n\n let filtered = rawPairs;\n if (params?.pairIds && params.pairIds.length > 0) {\n const requested = new Set(params.pairIds.map(String));\n filtered = rawPairs.filter(p => requested.has(String(p.id)));\n }\n\n return { pairs: filtered.map(p => formatPair(p, prices[`${p.from}/${p.to}`])) };\n }\n\n /** Live mid/bid/ask prices keyed by `pairId`. */\n async getAllPrices(): Promise<AllPricesResponse> {\n const [pairIdMap, prices] = await Promise.all([\n this.ensurePairIdCache(),\n this.fetchLivePricesSafe(),\n ]);\n\n const out: AllPricesResponse['prices'] = {};\n for (const [name, price] of Object.entries(prices)) {\n const id = pairIdMap.get(name);\n if (!id) continue;\n out[id] = {\n ask: price.ask.toString(),\n bid: price.bid.toString(),\n mid: price.mid.toString(),\n };\n }\n return { prices: out };\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Open positions\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Open positions for a trader, sorted newest first, with margin summary.\n *\n * - Fetches live prices automatically.\n * - `blockNumber` is required for live PnL (rollover projection). When omitted,\n * PnL fields are zeroed.\n */\n async getOpenPositions(params: GetOpenPositionsParams): Promise<OpenPositionsResponse> {\n const { user, blockNumber } = params;\n\n const [trades, prices] = await Promise.all([\n paginateAll<RawTrade>(async (skip, first) => {\n const data = await this.query<{ trades: RawTrade[] }>(\n GetTraderOpenTradesQuery,\n { trader: user.toLowerCase(), skip, first },\n );\n return data.trades;\n }),\n this.fetchLivePricesSafe(),\n ]);\n\n const pairPositions: PairPosition[] = trades.map(trade => {\n const price = prices[`${trade.pair.from}/${trade.pair.to}`];\n const pnl = price && blockNumber ? getTradePnL(trade, price, blockNumber) : EMPTY_PNL;\n\n const maxLev = trade.isDayTrade ? formatLeverage(trade.pair.overnightMaxLeverage) : pairMaxLeverage(trade.pair);\n return formatPosition(trade, price, pnl, maxLev);\n });\n\n const marginSummary = aggregateMarginSummary(pairPositions);\n\n return {\n pairPositions,\n marginSummary,\n time: Date.now(),\n };\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Fills\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Executed fills, sorted by `executedAt desc`.\n *\n * - `user`: pass an address to scope to a single trader, or `'ALL'` to fetch\n * fills across every trader (no trader filter).\n * - `pairId`: optional pair filter — when set, only fills on this pair are returned.\n */\n async getFills(params: GetFillsParams): Promise<Fill[]> {\n return this.fetchFills(params, undefined);\n }\n\n /** Executed fills within an inclusive time range (Unix ms). Same filters as `getFills`. */\n async getFillsByTime(params: GetFillsByTimeParams): Promise<Fill[]> {\n const endTime = params.endTime ?? Date.now();\n return this.fetchFills(params, {\n startSec: Math.floor(params.startTime / 1000).toString(),\n endSec: Math.floor(endTime / 1000).toString(),\n });\n }\n\n private async fetchFills(\n filters: GetFillsParams,\n timeRange: { startSec: string; endSec: string } | undefined,\n ): Promise<Fill[]> {\n const hasTrader = filters.user !== 'ALL';\n const hasPairId = filters.pairId !== undefined;\n const limit = filters.limit ?? 1000;\n const document = buildExecutedFillsQuery({\n hasTrader,\n hasPairId,\n hasTimeRange: timeRange !== undefined,\n });\n\n const orders = await paginateAll<RawOrder>(\n async (skip, first) => {\n const variables: Record<string, unknown> = { skip, first };\n if (hasTrader) variables.trader = (filters.user as string).toLowerCase();\n if (hasPairId) variables.pairId = String(filters.pairId);\n if (timeRange) {\n variables.startSec = timeRange.startSec;\n variables.endSec = timeRange.endSec;\n }\n const data = await this.query<{ orders: RawOrder[] }>(document, variables);\n return data.orders;\n },\n 1000,\n limit,\n );\n return orders.map(formatFill);\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Open limit orders\n // ─────────────────────────────────────────────────────────────────────────\n\n /** Active limit orders for a trader, sorted by `updatedAt desc`. */\n async getOpenOrders({ user }: GetUserParams): Promise<OpenOrder[]> {\n const limits = await paginateAll<RawLimit>(async (skip, first) => {\n const data = await this.query<{ limits: RawLimit[] }>(\n GetTraderActiveLimitsQuery,\n { trader: user.toLowerCase(), skip, first },\n );\n return data.limits;\n });\n return limits.map(formatOpenOrder);\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Orders (any status)\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Fetch orders at any status — pending, executed, or cancelled.\n *\n * - Pass `initiatedTxHashes` (e.g. `[result.txHash]` from `openTrade` / `closeTrade`)\n * to poll by the subgraph `initiatedTx` field.\n * - Pass `orderIds` to look up by on-chain order id (mutually exclusive with\n * `initiatedTxHashes`).\n * - Pass only `user` (or omit on `OstiumClient`) to get recent orders for\n * a trader regardless of status.\n */\n async getOrders(params: GetOrdersParams = {}): Promise<Order[]> {\n const hasOrderIds = !!(params.orderIds && params.orderIds.length > 0);\n const hasInitiatedTxHashes = !!(params.initiatedTxHashes && params.initiatedTxHashes.length > 0);\n if (hasOrderIds && hasInitiatedTxHashes) {\n throw new OstiumSubgraphError(\n 'getOrders: pass either orderIds or initiatedTxHashes, not both',\n OstiumSubgraphErrorCode.INVALID_PARAMS,\n );\n }\n const hasTrader =\n !hasOrderIds && !hasInitiatedTxHashes && !!params.user;\n const limit = params.limit ?? 100;\n\n const document = buildGetOrdersQuery({\n hasOrderIds,\n hasInitiatedTxHashes,\n hasTrader,\n });\n\n const orders = await paginateAll<RawOrder>(\n async (skip, first) => {\n const variables: Record<string, unknown> = { skip, first };\n if (hasOrderIds) variables.ids = params.orderIds!.map(String);\n if (hasInitiatedTxHashes) {\n variables.txHashes = params.initiatedTxHashes!.map(h =>\n typeof h === 'string' ? h.toLowerCase() : h,\n );\n }\n if (hasTrader) variables.trader = (params.user as string).toLowerCase();\n const data = await this.query<{ orders: RawOrder[] }>(document, variables);\n return data.orders;\n },\n 100,\n limit,\n );\n\n return orders.map(formatOrder);\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Simulated slippage\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Simulate the dynamic-spread slippage a long and a short entry of each\n * notional would experience on the given pairs. Notionals exceeding the\n * side's remaining open-interest capacity (`maxOI − sideOI`) are dropped.\n *\n * Computed via `CalculateDynamicPriceImpact` from `@ostium/formulae` using\n * the pair's live OI / decay / threshold params + the current bid/mid/ask\n * from the live-prices feed (collateral = `ntl`, leverage = 1).\n *\n * ```ts\n * const sim = await client.getSimSlippage({\n * pairIds: ['0', '1'],\n * ntls: ['10000', '100000', '1000000'],\n * });\n * // → { '0': { long: [{ ntl, slippage }...], short: [...] }, '1': ... }\n * ```\n */\n async getSimSlippage(params: GetSimSlippageParams): Promise<SimSlippageByPairId> {\n const [rawPairs, prices] = await Promise.all([\n this.fetchRawPairs(),\n this.fetchLivePricesSafe(),\n ]);\n this.refreshPairIdCache(rawPairs);\n\n const requested = new Set(params.pairIds.map(String));\n const out: SimSlippageByPairId = {};\n for (const pair of rawPairs) {\n const id = String(pair.id);\n if (!requested.has(id)) continue;\n const price = prices[`${pair.from}/${pair.to}`];\n out[id] = simulateSlippageForPair(pair, params.ntls, price);\n }\n return out;\n }\n\n /**\n * Build a synthetic bid/ask orderbook for a single pair using the on-chain\n * dynamic-spread params. Each side gets up to `levels` (capped at 20)\n * exponentially-spaced notional levels (`[1, 2, 3, 5] × 10ⁿ`), stopping at\n * the side's remaining open-interest capacity.\n *\n * ```ts\n * const ob = await client.getSimOrderbook({ pairId: '0', levels: 20 });\n * // ob.asks: long-entry levels (you'd buy at `px`)\n * // ob.bids: short-entry levels (you'd sell at `px`)\n * ```\n */\n async getSimOrderbook(params: GetSimOrderbookParams): Promise<SimOrderbookResponse> {\n const targetId = String(params.pairId);\n const levels = params.levels ?? 20;\n\n const [rawPairs, prices] = await Promise.all([\n this.fetchRawPairs(),\n this.fetchLivePricesSafe(),\n ]);\n this.refreshPairIdCache(rawPairs);\n\n const pair = rawPairs.find(p => String(p.id) === targetId);\n if (!pair) {\n throw new OstiumSubgraphError(\n `Pair ${targetId} not found in subgraph response`,\n OstiumSubgraphErrorCode.NOT_FOUND,\n );\n }\n\n const price = prices[`${pair.from}/${pair.to}`];\n if (!price || !price.mid) {\n throw new OstiumSubgraphError(\n `No live price available for ${pair.from}/${pair.to}`,\n OstiumSubgraphErrorCode.NOT_FOUND,\n );\n }\n\n return simulateOrderbookForPair(pair, price, levels);\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // OHLC candles\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Fetch OHLC candles for a pair.\n *\n * `pairId` maps to the raw subgraph pair name internally (e.g. pair `0` →\n * `\"BTC-USD\"`). `from` / `to` are Unix milliseconds; `resolution` is one of\n * `\"1\"`, `\"5\"`, `\"15\"`, `\"60\"`, `\"240\"`, `\"1D\"`.\n *\n * ```ts\n * const candles = await client.getCandles({\n * pairId: 0,\n * from: Date.now() - 7 * 86_400_000,\n * resolution: '1D',\n * });\n * ```\n */\n async getCandles(params: GetCandlesParams): Promise<Candle[]> {\n const rawPair = await this.ensurePairRawName(params.pairId);\n return fetchCandles(\n this.builderApiUrl,\n rawPair,\n params.from,\n params.to ?? Date.now(),\n params.resolution,\n );\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Live price stream (WebSocket)\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Open a WebSocket connection to the live price stream.\n *\n * Optionally filter to a subset of pairs by `pairId` — same values as returned by\n * `getPairs()`. When provided, the client sends `{ type: \"subscribe\", pairs }` on\n * `open` (no `?pairs=` query on the URL). Omit `pairIds` to receive the full feed.\n *\n * The returned `OstiumPriceStream` fires an initial `snapshot` event with all\n * cached ticks, then a `tick` event on every update. `PriceTick.from` / `.to`\n * are normalized display names (e.g. `\"WTI\"` not `\"CL\"`).\n *\n * ```ts\n * const stream = client.streamPrices([0, 1]); // BTC and ETH by pairId\n *\n * stream.onOpen(() => console.log('connected'));\n * stream.onSnapshot(ticks => console.log('snapshot', ticks.length));\n * stream.onTick(tick => console.log(tick.pair, tick.mid));\n *\n * // Dynamically add / remove by pairId:\n * stream.subscribe([2]);\n * stream.unsubscribe([0]);\n * stream.close();\n * ```\n *\n * Requires a runtime with native `WebSocket` (Node.js 18+, Bun, browsers). Bun’s\n * `WebSocket` may fail some `https://` upgrades (e.g. CloudFront); use Node if so.\n */\n streamPrices(pairIds?: Array<string | number>): OstiumPriceStream {\n const cache = this.pairRawNameCache ?? new Map<string, string>();\n const rawNames = pairIds?.map(id => {\n const name = cache.get(String(id));\n if (!name) throw new OstiumSubgraphError(`Pair ${id} not found`, OstiumSubgraphErrorCode.NOT_FOUND);\n return name;\n });\n return OstiumPriceStream.connect(this.builderApiUrl, rawNames, cache);\n }\n\n /**\n * Stream price-driven updates for an existing `getOpenPositions()` response.\n *\n * The SDK subscribes only to the unique pairs present in `initial.pairPositions`,\n * recalculates price-sensitive fields for affected positions on each tick, and\n * emits the full updated response.\n *\n * Pass an existing `priceStream` to reuse a websocket connection your app has\n * already opened. Omit it to let the SDK open and manage a dedicated\n * connection for the tracked pair ids.\n */\n streamPositionUpdates(\n initial: OpenPositionsResponse,\n priceStream?: OstiumPriceStream,\n ): OstiumPositionUpdatesStream {\n const pairIds = [...new Set(initial.pairPositions.map(({ position }) => String(position.pairId)))];\n if (pairIds.length === 0) {\n return new OstiumPositionUpdatesStream(initial, []);\n }\n return new OstiumPositionUpdatesStream(initial, pairIds, priceStream ?? this.streamPrices(pairIds));\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Internal — fetchers, cache, query wrapper\n // ─────────────────────────────────────────────────────────────────────────\n\n private async fetchRawPairs(): Promise<RawPair[]> {\n const data = await this.query<{ pairs: RawPair[] }>(GetPairsAndGroupsQuery);\n return data.pairs;\n }\n\n private refreshPairIdCache(rawPairs: RawPair[]): void {\n this.pairIdCache = new Map(rawPairs.map(p => [`${p.from}/${p.to}`, String(p.id)]));\n this.pairRawNameCache = new Map(rawPairs.map(p => [String(p.id), `${p.from}-${p.to}`]));\n }\n\n private async ensurePairIdCache(): Promise<Map<string, string>> {\n if (this.pairIdCache) return this.pairIdCache;\n this.refreshPairIdCache(await this.fetchRawPairs());\n return this.pairIdCache!;\n }\n\n private async ensurePairRawName(pairId: string | number): Promise<string> {\n if (!this.pairRawNameCache) {\n this.refreshPairIdCache(await this.fetchRawPairs());\n }\n const name = this.pairRawNameCache!.get(String(pairId));\n if (!name) {\n throw new OstiumSubgraphError(\n `Pair ${pairId} not found`,\n OstiumSubgraphErrorCode.NOT_FOUND,\n );\n }\n return name;\n }\n\n /** Wrapped `fetchLivePrices` that swallows network errors and returns `{}`. */\n private async fetchLivePricesSafe(): Promise<Record<string, PriceData>> {\n try {\n return await fetchLivePrices(this.builderApiUrl);\n } catch {\n return {};\n }\n }\n\n private async query<T>(document: string, variables?: Record<string, unknown>): Promise<T> {\n try {\n return await this.gql.request<T>(document, variables);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n const lower = msg.toLowerCase();\n\n if (lower.includes('network') || lower.includes('timeout') || lower.includes('fetch')) {\n throw new OstiumSubgraphError(\n `Subgraph network error: ${msg}`,\n OstiumSubgraphErrorCode.FETCH_FAILED,\n err,\n );\n }\n\n throw new OstiumSubgraphError(\n `Subgraph query failed: ${msg}`,\n OstiumSubgraphErrorCode.FETCH_FAILED,\n err,\n );\n }\n }\n}\n\n// Silence unused-import warning when consumers re-export.\nexport { OstiumPositionUpdatesStream };\nexport type { Position };\n","import {\n createPublicClient,\n createWalletClient,\n formatUnits,\n http,\n maxUint256,\n type Address,\n type PublicClient,\n} from 'viem';\nimport { privateKeyToAccount } from 'viem/accounts';\nimport { arbitrum, arbitrumSepolia } from 'viem/chains';\nimport { ERC20_ABI } from './internal/erc20.js';\nimport { buildTrade, buildBuilderFee } from './internal/open-builder.js';\nimport { parseUsdc, parsePrice } from './internal/decimal.js';\nimport {\n validateCloseParams,\n validateModifyParams,\n} from './internal/validation.js';\nimport { getNetworkConfig } from './internal/contracts.js';\nimport { DEFAULT_SLIPPAGE_PERCENTAGE, MAX_COLLATERAL_USD } from './internal/precision.js';\nimport { OrderType, CancelOrderType } from './types.js';\nimport type {\n OpenTradeParams,\n CloseTradeParams,\n CancelOrderParams,\n ModifyOrderParams,\n UpdateCollateralParams,\n AllowanceStatus,\n Balances,\n SubmissionResult,\n BuiltTxRequest,\n EncodedTx,\n} from './types.js';\nimport type {\n ClientMode,\n OstiumClientConfig,\n SelfSelfParams,\n SelfGaslessParams,\n DelegatedSelfParams,\n DelegatedGaslessParams,\n} from './config.js';\nimport {\n DEFAULT_PIMLICO_URL,\n DEFAULT_PIMLICO_URL_TESTNET,\n hasPrivateKey,\n resolveMode,\n} from './config.js';\nimport { OstiumError, OstiumErrorCode } from './errors.js';\nimport { createSigner, type SignerStrategy } from './signer/index.js';\nimport { createSubmitter, type SubmissionStrategy } from './submitter/index.js';\nimport { OstiumSubgraphClient } from './data/client.js';\nimport { OstiumPositionUpdatesStream } from './data/client.js';\nimport type {\n PairsResponse,\n AllPricesResponse,\n OpenPositionsResponse,\n Fill,\n Order,\n OpenOrder,\n GetPairsParams,\n GetOrdersParams,\n GetUserParams,\n GetOpenPositionsParams,\n GetFillsParams,\n GetFillsByTimeParams,\n GetSimSlippageParams,\n SimSlippageByPairId,\n GetSimOrderbookParams,\n SimOrderbookResponse,\n Candle,\n GetCandlesParams,\n} from './data/types.js';\nimport { OstiumPriceStream } from './data/internal/pricing.js';\nimport {\n encodeOpenTrade,\n encodeCloseTradeMarket,\n encodeCancelLimitOrder,\n encodeCloseTradeMarketTimeout,\n encodeOpenTradeMarketTimeout,\n encodeUpdateOpenLimitOrder,\n encodeUpdateTp,\n encodeUpdateSl,\n encodeTopUpCollateral,\n encodeRemoveCollateral,\n encodeSetDelegate,\n encodeRemoveDelegate,\n encodeUsdcApprove,\n} from './encoder.js';\n\nconst HEX64_RE = /^0x[0-9a-fA-F]{64}$/;\nconst ADDRESS_RE = /^0x[0-9a-fA-F]{40}$/;\n\nfunction validateConfig(config: OstiumClientConfig): void {\n if (config.privateKey && !HEX64_RE.test(config.privateKey)) {\n throw new OstiumError(\n 'privateKey must be a 64-character hex string prefixed with 0x',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n for (const [label, value] of [\n ['traderAddress', config.traderAddress],\n ['delegateAddress', config.delegateAddress],\n ['safeAddress', config.safeAddress],\n ] as const) {\n if (value && !ADDRESS_RE.test(value)) {\n throw new OstiumError(\n `${label} must be a valid 42-character Ethereum address (0x + 40 hex chars)`,\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n }\n if (config.slippageBps !== undefined && (config.slippageBps < 0 || config.slippageBps > 500)) {\n throw new OstiumError(\n 'slippageBps must be between 0 and 500 (0%–5%)',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n if (config.builder !== undefined && (config.builder.feeBps < 0 || config.builder.feeBps > 50)) {\n throw new OstiumError(\n 'builder.feeBps must be between 0 and 50 (max 0.5%)',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n\n let mode: ClientMode;\n try {\n mode = resolveMode(config);\n } catch {\n throw new OstiumError(\n 'Could not infer client mode from config. Provide the required addresses for the selected factory.',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n\n if (mode === 'self-self' && !config.privateKey && !config.traderAddress) {\n throw new OstiumError(\n 'Self + Self mode requires traderPrivateKey for submission or traderAddress for build-only usage.',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n if (mode === 'self-gasless' && !config.privateKey && (!config.traderAddress || !config.safeAddress)) {\n throw new OstiumError(\n 'Self + Gasless build-only mode requires traderAddress and safeAddress.',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n if (mode === 'delegated-self' && (!config.traderAddress || (!config.privateKey && !config.delegateAddress))) {\n throw new OstiumError(\n 'Delegated + Self mode requires traderAddress and either delegatePrivateKey or delegateAddress.',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n if (\n mode === 'delegated-gasless' &&\n (!config.traderAddress || (!config.privateKey && (!config.delegateAddress || !config.safeAddress)))\n ) {\n throw new OstiumError(\n 'Delegated + Gasless mode requires traderAddress and either delegatePrivateKey or both delegateAddress and safeAddress.',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n}\n\ninterface ContractAddresses {\n trading: Address;\n tradingStorage: Address;\n usdc: Address;\n}\n\ninterface ClientInternals {\n /** Undefined in read-only mode. */\n signer?: SignerStrategy;\n /** Undefined in read-only mode. */\n submitter?: SubmissionStrategy;\n traderAddress?: Address;\n effectiveSender?: Address;\n contracts: ContractAddresses;\n publicClient: PublicClient;\n defaultSlippageBps: number;\n delegated: boolean;\n gasless: boolean;\n /** True when in Self + Gasless mode: EOA is trader, Safe is delegate/submitter. */\n selfGasless: boolean;\n /**\n * Direct EOA submitter for Self + Gasless mode.\n * Used by setupGaslessDelegation() and approveUsdc() — both must be signed\n * by the EOA (not via the Safe delegate).\n */\n eoaSubmit?: (encoded: EncodedTx) => Promise<SubmissionResult>;\n builderAddress?: Address;\n builderFeeBps?: number;\n subgraph: OstiumSubgraphClient;\n}\n\nexport class OstiumClient {\n private readonly signer?: SignerStrategy;\n private readonly submitter?: SubmissionStrategy;\n private readonly traderAddress?: Address;\n private readonly effectiveSender?: Address;\n private readonly contracts: ContractAddresses;\n private readonly publicClient: PublicClient;\n private readonly defaultSlippageBps: number;\n private readonly delegated: boolean;\n private readonly gasless: boolean;\n private readonly selfGasless: boolean;\n private readonly eoaSubmit?: (encoded: EncodedTx) => Promise<SubmissionResult>;\n private readonly builderAddress?: Address;\n private readonly builderFeeBps?: number;\n /** Internal subgraph client backing all read methods (`getPairs`, `getOpenPositions`, …). */\n readonly subgraph: OstiumSubgraphClient;\n\n private constructor(internals: ClientInternals) {\n this.signer = internals.signer;\n this.submitter = internals.submitter;\n this.traderAddress = internals.traderAddress;\n this.effectiveSender = internals.effectiveSender;\n this.contracts = internals.contracts;\n this.publicClient = internals.publicClient;\n this.defaultSlippageBps = internals.defaultSlippageBps;\n this.delegated = internals.delegated;\n this.gasless = internals.gasless;\n this.selfGasless = internals.selfGasless;\n this.eoaSubmit = internals.eoaSubmit;\n this.builderAddress = internals.builderAddress;\n this.builderFeeBps = internals.builderFeeBps;\n this.subgraph = internals.subgraph;\n }\n\n /**\n * **Self + Self** — your EOA signs every transaction and pays gas directly.\n *\n * Use this when you want the simplest possible setup: one key, no smart accounts,\n * no delegation. Your EOA holds USDC and owns all positions.\n *\n * ```ts\n * const client = await OstiumClient.createSelfAndSelf({\n * traderPrivateKey: '0x...',\n * rpcUrl: 'https://arb-mainnet.g.alchemy.com/v2/...',\n * });\n * await client.openTrade({ ... });\n * ```\n */\n static async createSelfAndSelf(params: SelfSelfParams): Promise<OstiumClient> {\n const base = {\n mode: 'self-self' as const,\n testnet: params.testnet,\n slippageBps: params.slippageBps,\n builder: params.builder,\n subgraphUrl: params.subgraphUrl,\n builderApiUrl: params.builderApiUrl,\n rpcUrl: params.rpcUrl,\n };\n return OstiumClient._fromConfig(\n 'traderPrivateKey' in params\n ? { ...base, privateKey: params.traderPrivateKey }\n : { ...base, traderAddress: params.traderAddress },\n );\n }\n\n /**\n * **Self + Gasless** — your EOA owns everything; a Safe relays trades for free.\n *\n * Your EOA holds USDC and owns all positions. A Safe smart account is derived\n * deterministically from your private key and registered as your on-chain delegate.\n * After a one-time setup (approve USDC + `setupGaslessDelegation()`), all trades\n * are submitted as sponsored UserOperations — no ETH required.\n *\n * ```ts\n * const client = await OstiumClient.createSelfAndGasless({\n * traderPrivateKey: '0x...',\n * pimlicoUrl: 'https://builder.ostium.io/v1/pimlico/sponsor?chainId=42161',\n * });\n * // One-time setup — EOA pays gas once for each:\n * await client.approveUsdc('max');\n * await client.setupGaslessDelegation();\n * // All subsequent trading is gasless:\n * await client.openTrade({ ... });\n * ```\n */\n static async createSelfAndGasless(params: SelfGaslessParams): Promise<OstiumClient> {\n const defaultUrl = params.testnet ? DEFAULT_PIMLICO_URL_TESTNET : DEFAULT_PIMLICO_URL;\n const base = {\n mode: 'self-gasless' as const,\n rpcUrl: params.rpcUrl,\n testnet: params.testnet,\n slippageBps: params.slippageBps,\n builder: params.builder,\n subgraphUrl: params.subgraphUrl,\n builderApiUrl: params.builderApiUrl,\n };\n return OstiumClient._fromConfig(\n 'traderPrivateKey' in params\n ? {\n ...base,\n privateKey: params.traderPrivateKey,\n pimlicoUrl: params.pimlicoUrl ?? defaultUrl,\n sponsorshipPolicyId: params.sponsorshipPolicyId,\n }\n : {\n ...base,\n traderAddress: params.traderAddress,\n safeAddress: params.safeAddress,\n },\n );\n }\n\n /**\n * **Delegated + Self** — a delegate EOA signs and pays gas on behalf of a trader address.\n *\n * The trader retains custody of USDC and positions. The delegate only needs ETH\n * for gas. Every trade is wrapped in `delegatedAction(traderAddress, callData)`.\n * The trader must call `setDelegate(delegateAddress)` once before this client\n * can submit trades.\n *\n * ```ts\n * const client = await OstiumClient.createDelegatedAndSelf({\n * delegatePrivateKey: '0xDelegateKey',\n * traderAddress: '0xTraderAddress',\n * rpcUrl: 'https://arb-mainnet.g.alchemy.com/v2/...',\n * });\n * await client.openTrade({ ... });\n * ```\n */\n static async createDelegatedAndSelf(params: DelegatedSelfParams): Promise<OstiumClient> {\n const base = {\n mode: 'delegated-self' as const,\n traderAddress: params.traderAddress,\n rpcUrl: params.rpcUrl,\n testnet: params.testnet,\n slippageBps: params.slippageBps,\n builder: params.builder,\n subgraphUrl: params.subgraphUrl,\n builderApiUrl: params.builderApiUrl,\n };\n return OstiumClient._fromConfig(\n 'delegatePrivateKey' in params\n ? { ...base, privateKey: params.delegatePrivateKey }\n : { ...base, delegateAddress: params.delegateAddress },\n );\n }\n\n /**\n * **Delegated + Gasless** — a Safe derived from the delegate key submits sponsored\n * UserOperations on behalf of the trader. No ETH needed after setup.\n *\n * The trader retains custody of USDC and positions. The delegate's Safe submits\n * trades as UserOperations via Pimlico. The trader must call `setDelegate(safeAddress)`\n * once — use `client.getSmartAccountAddress()` to retrieve the Safe address.\n *\n * ```ts\n * const client = await OstiumClient.createDelegatedAndGasless({\n * delegatePrivateKey: '0xDelegateKey',\n * traderAddress: '0xTraderAddress',\n * pimlicoUrl: 'https://builder.ostium.io/v1/pimlico/sponsor?chainId=42161',\n * });\n * await client.openTrade({ ... }); // gasless delegatedAction UserOp\n * ```\n */\n static async createDelegatedAndGasless(params: DelegatedGaslessParams): Promise<OstiumClient> {\n const defaultUrl = params.testnet ? DEFAULT_PIMLICO_URL_TESTNET : DEFAULT_PIMLICO_URL;\n const base = {\n mode: 'delegated-gasless' as const,\n traderAddress: params.traderAddress,\n rpcUrl: params.rpcUrl,\n testnet: params.testnet,\n slippageBps: params.slippageBps,\n builder: params.builder,\n subgraphUrl: params.subgraphUrl,\n builderApiUrl: params.builderApiUrl,\n };\n return OstiumClient._fromConfig(\n 'delegatePrivateKey' in params\n ? {\n ...base,\n privateKey: params.delegatePrivateKey,\n pimlicoUrl: params.pimlicoUrl ?? defaultUrl,\n sponsorshipPolicyId: params.sponsorshipPolicyId,\n }\n : {\n ...base,\n delegateAddress: params.delegateAddress,\n safeAddress: params.safeAddress,\n },\n );\n }\n\n /**\n * **Read-only client** — no signer, no submitter, no privateKey required.\n *\n * All read methods (`getPairs`, `getOpenPositions`, `getFills`, `getBalances`, …)\n * are available. Methods that take an optional `user` argument require it to be\n * passed explicitly. Calling any write method throws `INVALID_CONFIG`.\n *\n * ```ts\n * const reader = await OstiumClient.createReadOnly();\n * const { pairs } = await reader.getPairs();\n * const balances = await reader.getBalances('0xTrader...');\n * const positions = await reader.getOpenPositions({ user: '0xTrader...' });\n * ```\n */\n static async createReadOnly(params: {\n /** Arbitrum RPC URL. Defaults to the chain's public RPC. */\n rpcUrl?: string;\n /** Use Arbitrum Sepolia testnet. Defaults to false (mainnet). */\n testnet?: boolean;\n /** Override the subgraph endpoint. */\n subgraphUrl?: string;\n /** Override the builder API base URL (prices, OHLC, WebSocket stream). */\n builderApiUrl?: string;\n } = {}): Promise<OstiumClient> {\n const testnet = params.testnet ?? false;\n const networkConfig = getNetworkConfig(testnet);\n const chain = testnet ? arbitrumSepolia : arbitrum;\n const rpcUrl = params.rpcUrl ?? chain.rpcUrls.default.http[0];\n\n const contracts: ContractAddresses = {\n trading: networkConfig.contracts.trading,\n tradingStorage: networkConfig.contracts.tradingStorage,\n usdc: networkConfig.contracts.usdc,\n };\n\n const publicClient = createPublicClient({ chain, transport: http(rpcUrl) });\n\n const subgraph = await OstiumSubgraphClient.create({\n testnet,\n endpoint: params.subgraphUrl,\n builderApiUrl: params.builderApiUrl,\n });\n\n return new OstiumClient({\n contracts,\n publicClient,\n defaultSlippageBps: Math.round(DEFAULT_SLIPPAGE_PERCENTAGE * 100),\n delegated: false,\n gasless: false,\n selfGasless: false,\n subgraph,\n });\n }\n\n /** Internal factory shared by all public constructors. */\n private static async _fromConfig(config: OstiumClientConfig): Promise<OstiumClient> {\n validateConfig(config);\n\n const mode = resolveMode(config);\n const testnet = config.testnet ?? false;\n const networkConfig = getNetworkConfig(testnet);\n const chain = testnet ? arbitrumSepolia : arbitrum;\n const defaultSlippageBps =\n config.slippageBps ?? Math.round(DEFAULT_SLIPPAGE_PERCENTAGE * 100);\n\n const contracts: ContractAddresses = {\n trading: networkConfig.contracts.trading,\n tradingStorage: networkConfig.contracts.tradingStorage,\n usdc: networkConfig.contracts.usdc,\n };\n\n const selfGasless = mode === 'self-gasless';\n\n let traderAddress: Address;\n if (mode === 'self-self' || mode === 'self-gasless') {\n traderAddress = config.traderAddress ?? privateKeyToAccount(config.privateKey!).address;\n } else {\n traderAddress = config.traderAddress!;\n }\n\n const signer = createSigner(mode, traderAddress);\n\n let submitter: SubmissionStrategy | undefined;\n let effectiveSender: Address;\n if (hasPrivateKey(config)) {\n submitter = await createSubmitter(config, testnet, mode);\n effectiveSender = submitter.effectiveSender;\n } else if (mode === 'self-self') {\n effectiveSender = traderAddress;\n } else if (mode === 'delegated-self') {\n effectiveSender = config.delegateAddress!;\n } else {\n effectiveSender = config.safeAddress!;\n }\n\n const publicRpc = testnet\n ? 'https://sepolia-rollup.arbitrum.io/rpc'\n : 'https://arb1.arbitrum.io/rpc';\n // Chain RPC for reads/simulation. Gasless Pimlico URL is bundler-only\n const rpcUrl = config.rpcUrl ?? publicRpc;\n\n if (hasPrivateKey(config) && mode !== 'self-gasless' && mode !== 'delegated-gasless' && !config.rpcUrl) {\n throw new OstiumError(\n 'rpcUrl is required for self-submission mode',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n\n const publicClient = createPublicClient({ chain, transport: http(rpcUrl) });\n\n // Self + Gasless: approveUsdc() and setupGaslessDelegation() must be signed\n // by the EOA directly (not via the Safe). Captured in a closure so the\n // private key is not stored on the instance.\n // Pimlico's bundler URL rejects eth_sendRawTransaction, so use a standard RPC here.\n let eoaSubmit: ((encoded: EncodedTx) => Promise<SubmissionResult>) | undefined;\n if (selfGasless && hasPrivateKey(config)) {\n const eoaAccount = privateKeyToAccount(config.privateKey);\n const eoaRpcUrl = config.rpcUrl ?? publicRpc;\n const eoaWalletClient = createWalletClient({ account: eoaAccount, chain, transport: http(eoaRpcUrl) });\n eoaSubmit = async (encoded: EncodedTx) => {\n const txHash = await eoaWalletClient.sendTransaction({\n account: eoaAccount,\n to: encoded.to,\n data: encoded.data,\n value: encoded.value,\n });\n return { txHash };\n };\n }\n\n const subgraph = await OstiumSubgraphClient.create({\n testnet,\n endpoint: config.subgraphUrl,\n builderApiUrl: config.builderApiUrl,\n });\n\n return new OstiumClient({\n signer,\n submitter,\n traderAddress,\n effectiveSender,\n contracts,\n publicClient,\n defaultSlippageBps,\n delegated: mode === 'delegated-self' || mode === 'delegated-gasless',\n gasless: mode === 'self-gasless' || mode === 'delegated-gasless',\n selfGasless,\n eoaSubmit,\n builderAddress: config.builder?.address,\n builderFeeBps: config.builder?.feeBps,\n subgraph,\n });\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Getters\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * The on-chain address that owns trades and USDC allowances.\n *\n * - Self + Self / Delegated modes: trader's EOA or configured traderAddress.\n * - Self + Gasless: EOA derived from privateKey (NOT the Safe — USDC lives here).\n */\n getTraderAddress(): Address {\n if (!this.traderAddress) {\n throw new OstiumError(\n 'No connected trader — pass `user` explicitly or use one of the createSelfAnd*/createDelegatedAnd* factories.',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n return this.traderAddress;\n }\n\n /** True when the client cannot submit transactions directly. */\n isReadOnly(): boolean {\n return !this.submitter;\n }\n\n /** True when the client can build mode-correct unsigned transaction requests. */\n canBuildTransactions(): boolean {\n return !!this.signer && !!this.effectiveSender;\n }\n\n /** True when the client has the credentials needed for SDK-managed submission. */\n canSubmitTransactions(): boolean {\n return !!this.submitter;\n }\n\n /**\n * Returns the Safe smart-account address used for gasless submission.\n * Returns undefined when not in gasless mode.\n *\n * - Self + Gasless: Safe that submits on behalf of the EOA (the delegate).\n * Pass this address to setupGaslessDelegation().\n * - Delegated + Gasless: delegate's Safe address.\n * - Self + Self / Delegated + Self: returns undefined.\n */\n getSmartAccountAddress(): Address | undefined {\n return this.gasless ? this.effectiveSender : undefined;\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Self + Gasless setup\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * One-time setup for Self + Gasless mode.\n *\n * Registers the Safe smart account as a delegate on the trading contract so\n * the Safe can submit gasless trades on behalf of your EOA. The EOA pays gas\n * for this single transaction; all subsequent trading is gasless.\n *\n * Only callable in Self + Gasless mode. Throws INVALID_CONFIG otherwise.\n *\n * @example\n * ```ts\n * const client = await OstiumClient.create({ privateKey: '0x...', pimlicoUrl: 'https://builder.ostium.io/v1/pimlico/sponsor?chainId=42161' });\n * await client.approveUsdc('max'); // EOA approves USDC (gas, one-time)\n * await client.setupGaslessDelegation(); // EOA sets Safe as delegate (gas, one-time)\n * // From here: all trading is gasless\n * await client.openTrade({ ... });\n * ```\n */\n async setupGaslessDelegation(): Promise<SubmissionResult> {\n return this.submitDirectEoa(this.getSetupGaslessDelegationEncoded());\n }\n\n getSetupGaslessDelegationTx(): BuiltTxRequest {\n return this.buildDirectEoaTx(this.getSetupGaslessDelegationEncoded());\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // USDC helpers\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Check whether the trader's USDC allowance covers the required amount.\n * The allowance is always checked against signer.traderAddress (the EOA in\n * Self + Gasless mode, the Safe in Delegated + Gasless).\n */\n async checkUsdcAllowance(requiredUsd: string): Promise<AllowanceStatus> {\n const required = parseUsdc(requiredUsd);\n const current = await this.publicClient.readContract({\n address: this.contracts.usdc,\n abi: ERC20_ABI,\n functionName: 'allowance',\n args: [this.getTraderAddress(), this.contracts.tradingStorage],\n });\n return { current, required, sufficient: current >= required };\n }\n\n /**\n * USDC and ETH balances plus the USDC allowance to TradingStorage.\n * All three values are decimal strings so large values (e.g. max USDC approval)\n * are preserved exactly. Parse with `parseFloat` / `Number` only for display.\n *\n * In read-only mode, pass `user` explicitly. With a connected trader, omit it\n * to read the connected address.\n */\n async getBalances(user?: Address): Promise<Balances> {\n const trader = user ?? this.getTraderAddress();\n const [usdcRaw, ethRaw, allowanceRaw] = await Promise.all([\n this.publicClient.readContract({\n address: this.contracts.usdc,\n abi: ERC20_ABI,\n functionName: 'balanceOf',\n args: [trader],\n }),\n this.publicClient.getBalance({ address: trader }),\n this.publicClient.readContract({\n address: this.contracts.usdc,\n abi: ERC20_ABI,\n functionName: 'allowance',\n args: [trader, this.contracts.tradingStorage],\n }),\n ]);\n\n return {\n usdc: formatUnits(usdcRaw as bigint, 6),\n eth: formatUnits(ethRaw, 18),\n allowance: formatUnits(allowanceRaw as bigint, 6),\n };\n }\n\n /**\n * Approve USDC spending by the TradingStorage contract.\n *\n * - Self + Self: submitted gaslessly from EOA.\n * - Self + Gasless: submitted directly from EOA (the delegate cannot approve\n * on behalf of the trader). The EOA pays gas for this one-time operation.\n * - Delegated modes: throws — the trader must approve from their own account.\n *\n * @param amount USD amount as decimal string (e.g. \"1000\"), or \"max\" for MaxUint256.\n */\n async approveUsdc(amount: string): Promise<SubmissionResult> {\n const encoded = this.getApproveUsdcEncoded(amount);\n if (this.selfGasless) {\n return this.submitDirectEoa(encoded);\n }\n return this.submitPrepared(encoded);\n }\n\n getApproveUsdcTx(amount: string): BuiltTxRequest {\n return this.buildDirectEoaTx(this.getApproveUsdcEncoded(amount));\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Delegation helpers\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Set a delegate on the trading contract.\n *\n * - Self + Self: EOA directly registers a delegate.\n * - Self + Gasless: NOT recommended — use setupGaslessDelegation() instead.\n * - Delegated modes: wrapped in delegatedAction so the existing delegate can\n * update the trader's delegation on their behalf.\n */\n async setDelegate(delegateAddress: Address): Promise<SubmissionResult> {\n return this.submitPrepared(this.getSetDelegateEncoded(delegateAddress));\n }\n\n getSetDelegateTx(delegateAddress: Address): BuiltTxRequest {\n return this.buildPreparedTx(this.getSetDelegateEncoded(delegateAddress));\n }\n\n /**\n * Remove the current delegate on the trading contract.\n * Follows the same delegation-wrapping rules as setDelegate().\n */\n async removeDelegate(): Promise<SubmissionResult> {\n return this.submitPrepared(this.getRemoveDelegateEncoded());\n }\n\n getRemoveDelegateTx(): BuiltTxRequest {\n return this.buildPreparedTx(this.getRemoveDelegateEncoded());\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Core trading methods\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Open a new trade position.\n *\n * Call `approveUsdc()` (once) before the first trade — the contract will revert\n * on-chain if the USDC allowance is insufficient. Use `getBalances()` to check\n * the current allowance.\n */\n async openTrade(params: OpenTradeParams): Promise<SubmissionResult> {\n return this.submitPrepared(this.getOpenTradeEncoded(params));\n }\n\n getOpenTradeTx(params: OpenTradeParams): BuiltTxRequest {\n return this.buildPreparedTx(this.getOpenTradeEncoded(params));\n }\n\n private getOpenTradeEncoded(params: OpenTradeParams): EncodedTx {\n const collateralNum = parseFloat(params.collateral);\n if (collateralNum > MAX_COLLATERAL_USD) {\n throw new OstiumError(\n `Collateral ${params.collateral} exceeds maximum ${MAX_COLLATERAL_USD}`,\n OstiumErrorCode.VALIDATION_FAILED,\n );\n }\n\n const apiOpen = {\n a: Number(params.pairId),\n b: params.buy,\n p: params.price,\n s: params.collateral,\n l: params.leverage,\n t: params.type,\n tp: params.takeProfit,\n sl: params.stopLoss,\n d: params.isDayTrade,\n };\n\n const apiBuilder =\n this.builderAddress !== undefined && this.builderFeeBps !== undefined\n ? { b: this.builderAddress, f: this.builderFeeBps }\n : undefined;\n\n let trade, orderType;\n try {\n ({ trade, orderType } = buildTrade(apiOpen, this.getTraderAddress()));\n } catch (err) {\n throw new OstiumError(\n `Trade validation failed: ${err instanceof Error ? err.message : String(err)}`,\n OstiumErrorCode.VALIDATION_FAILED,\n err,\n );\n }\n\n const builderFee = buildBuilderFee(apiBuilder);\n\n // Slippage only applies to market orders. Limit and stop orders must use 0.\n const slippageP = params.type === OrderType.Market\n ? BigInt(this.resolveSlippage(params.slippage))\n : 0n;\n\n return encodeOpenTrade(trade, builderFee, orderType, slippageP, this.contracts.trading);\n }\n\n /**\n * Close an open position (full or partial).\n *\n * `pairId` and `idx` come straight from a `Position` returned by\n * `getOpenPositions` — pass them through directly:\n *\n * ```ts\n * const { pairPositions } = await client.getOpenPositions();\n * const { pairId, idx } = pairPositions[0].position;\n * await client.closeTrade({ pairId, idx, price: '...', closePercent: 100 });\n * ```\n */\n async closeTrade(params: CloseTradeParams): Promise<SubmissionResult> {\n return this.submitPrepared(this.getCloseTradeEncoded(params));\n }\n\n getCloseTradeTx(params: CloseTradeParams): BuiltTxRequest {\n return this.buildPreparedTx(this.getCloseTradeEncoded(params));\n }\n\n private getCloseTradeEncoded(params: CloseTradeParams): EncodedTx {\n try {\n validateCloseParams({\n a: Number(params.pairId),\n t: params.idx,\n p: params.price,\n r: params.closePercent,\n });\n } catch (err) {\n throw new OstiumError(\n `Close validation failed: ${err instanceof Error ? err.message : String(err)}`,\n OstiumErrorCode.VALIDATION_FAILED,\n err,\n );\n }\n\n const pairIndex = BigInt(params.pairId);\n const index = BigInt(params.idx);\n // Contract expects close percentage × 100 (e.g. 100% → 10000)\n const closePercentage = BigInt(Math.round(params.closePercent * 100));\n const marketPrice = parsePrice(params.price);\n const slippageP = BigInt(this.resolveSlippage(params.slippage));\n\n return encodeCloseTradeMarket(\n pairIndex,\n index,\n closePercentage,\n marketPrice,\n slippageP,\n this.contracts.trading,\n );\n }\n\n /**\n * Cancel a pending order.\n *\n * TypeScript discriminates the params shape by `type` — required fields are\n * enforced at compile time.\n *\n * @example Cancel a pending limit order\n * ```ts\n * const [order] = await client.getOpenOrders();\n * await client.cancelOrder({ type: CancelOrderType.Limit, pairId: order.pairId, idx: order.idx });\n * ```\n * @example Cancel a timed-out market open\n * ```ts\n * await client.cancelOrder({ type: CancelOrderType.PendingOpen, orderId: 123 });\n * ```\n * @example Cancel a timed-out market close (retry: true re-submits the close)\n * ```ts\n * await client.cancelOrder({ type: CancelOrderType.PendingClose, orderId: 456, retry: true });\n * ```\n */\n async cancelOrder(params: CancelOrderParams): Promise<SubmissionResult> {\n return this.submitPrepared(this.getCancelOrderEncoded(params));\n }\n\n getCancelOrderTx(params: CancelOrderParams): BuiltTxRequest {\n return this.buildPreparedTx(this.getCancelOrderEncoded(params));\n }\n\n private getCancelOrderEncoded(params: CancelOrderParams): EncodedTx {\n let encoded: EncodedTx;\n\n if (params.type === CancelOrderType.Limit) {\n const pairIdNum = Number(params.pairId);\n const idxNum = Number(params.idx);\n if (\n !Number.isFinite(pairIdNum) || !Number.isInteger(pairIdNum) || pairIdNum < 0 ||\n !Number.isFinite(idxNum) || !Number.isInteger(idxNum) || idxNum < 0\n ) {\n throw new OstiumError(\n `Invalid pairId (${params.pairId}) or idx (${params.idx}) for limit cancel`,\n OstiumErrorCode.VALIDATION_FAILED,\n );\n }\n encoded = encodeCancelLimitOrder(\n BigInt(pairIdNum),\n BigInt(idxNum),\n this.contracts.trading,\n );\n } else if (params.type === CancelOrderType.PendingClose) {\n if (params.orderId < 0) {\n throw new OstiumError(\n `Invalid orderId (${params.orderId}) for pending close cancel`,\n OstiumErrorCode.VALIDATION_FAILED,\n );\n }\n encoded = encodeCloseTradeMarketTimeout(\n BigInt(params.orderId),\n params.retry ?? false,\n this.contracts.trading,\n );\n } else {\n if (params.orderId < 0) {\n throw new OstiumError(\n `Invalid orderId (${params.orderId}) for pending open cancel`,\n OstiumErrorCode.VALIDATION_FAILED,\n );\n }\n encoded = encodeOpenTradeMarketTimeout(BigInt(params.orderId), this.contracts.trading);\n }\n\n return encoded;\n }\n\n /**\n * Modify an open trade or a pending limit order.\n *\n * `pairId` and `idx` come straight from `getOpenPositions` (for TP/SL on open\n * positions) or `getOpenOrders` (for limit-order edits):\n *\n * ```ts\n * // Update TP/SL on an open position\n * const { pairPositions } = await client.getOpenPositions();\n * const { pairId, idx } = pairPositions[0].position;\n * await client.modifyOrder({ pairId, idx, takeProfit: '...', stopLoss: '...' });\n *\n * // Re-price a pending limit order\n * const [order] = await client.getOpenOrders();\n * await client.modifyOrder({ pairId: order.pairId, idx: order.idx, price: '...' });\n * ```\n *\n * - `price` provided → updates limit-order trigger price (with optional TP/SL).\n * - `takeProfit` only → calls updateTp on an open trade.\n * - `stopLoss` only → calls updateSl on an open trade.\n * - Both `takeProfit` and `stopLoss` without `price` → throws (send two calls).\n */\n async modifyOrder(params: ModifyOrderParams): Promise<SubmissionResult> {\n return this.submitPrepared(this.getModifyOrderEncoded(params));\n }\n\n getModifyOrderTx(params: ModifyOrderParams): BuiltTxRequest {\n return this.buildPreparedTx(this.getModifyOrderEncoded(params));\n }\n\n private getModifyOrderEncoded(params: ModifyOrderParams): EncodedTx {\n try {\n validateModifyParams({\n a: Number(params.pairId),\n i: params.idx,\n p: params.price,\n tp: params.takeProfit,\n sl: params.stopLoss,\n });\n } catch (err) {\n throw new OstiumError(\n `Modify validation failed: ${err instanceof Error ? err.message : String(err)}`,\n OstiumErrorCode.VALIDATION_FAILED,\n err,\n );\n }\n\n if (params.takeProfit && params.stopLoss && !params.price) {\n throw new OstiumError(\n 'Cannot update both takeProfit and stopLoss simultaneously without a price. Send two separate modifyOrder calls.',\n OstiumErrorCode.VALIDATION_FAILED,\n );\n }\n\n const pairIndex = BigInt(params.pairId);\n const index = BigInt(params.idx);\n\n let encoded: EncodedTx;\n if (params.price) {\n const price = parsePrice(params.price);\n const tp = params.takeProfit ? parsePrice(params.takeProfit) : 0n;\n const sl = params.stopLoss ? parsePrice(params.stopLoss) : 0n;\n encoded = encodeUpdateOpenLimitOrder(pairIndex, index, price, tp, sl, this.contracts.trading);\n } else if (params.takeProfit) {\n encoded = encodeUpdateTp(pairIndex, index, parsePrice(params.takeProfit), this.contracts.trading);\n } else if (params.stopLoss) {\n encoded = encodeUpdateSl(pairIndex, index, parsePrice(params.stopLoss), this.contracts.trading);\n } else {\n throw new OstiumError(\n 'Either takeProfit or stopLoss must be provided when price is not specified',\n OstiumErrorCode.VALIDATION_FAILED,\n );\n }\n\n return encoded;\n }\n\n /**\n * Update collateral on an open position (isolated margin).\n *\n * `pairId` and `idx` come straight from a `Position` returned by `getOpenPositions`:\n *\n * ```ts\n * const { pairPositions } = await client.getOpenPositions();\n * const { pairId, idx } = pairPositions[0].position;\n * await client.updateCollateral({ pairId, idx, amount: '50' }); // top up\n * await client.updateCollateral({ pairId, idx, amount: '-25' }); // remove\n * ```\n *\n * Positive amount → topUpCollateral (adds margin, reduces effective leverage).\n * Negative amount → removeCollateral (removes margin, increases effective leverage).\n *\n * Checks USDC allowance before top-up operations.\n */\n async updateCollateral(params: UpdateCollateralParams): Promise<SubmissionResult> {\n return this.submitPrepared(await this.getUpdateCollateralEncoded(params));\n }\n\n async getUpdateCollateralTx(params: UpdateCollateralParams): Promise<BuiltTxRequest> {\n return this.buildPreparedTx(await this.getUpdateCollateralEncoded(params));\n }\n\n private async getUpdateCollateralEncoded(params: UpdateCollateralParams): Promise<EncodedTx> {\n const amount = parseFloat(params.amount);\n if (Number.isNaN(amount) || amount === 0) {\n throw new OstiumError(\n `Invalid collateral amount: ${params.amount}`,\n OstiumErrorCode.VALIDATION_FAILED,\n );\n }\n\n const pairIndex = BigInt(params.pairId);\n const index = BigInt(params.idx);\n const absAmount = parseUsdc(Math.abs(amount).toString());\n\n let encoded: EncodedTx;\n if (amount > 0) {\n const allowance = await this.checkUsdcAllowance(Math.abs(amount).toString());\n if (!allowance.sufficient) {\n throw new OstiumError(\n `Insufficient USDC allowance for collateral top-up. Current: ${allowance.current}, Required: ${allowance.required}. Call approveUsdc() first.`,\n OstiumErrorCode.ALLOWANCE_INSUFFICIENT,\n );\n }\n encoded = encodeTopUpCollateral(pairIndex, index, absAmount, this.contracts.trading);\n } else {\n encoded = encodeRemoveCollateral(pairIndex, index, absAmount, this.contracts.trading);\n }\n\n return encoded;\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Subgraph reads (Hyperliquid-style API)\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * All trading pairs with computed `minSz`/`maxBSz`/`maxSSz`, live prices, and\n * market-status flags. Pass `pairIds` to restrict to a subset.\n */\n getPairs(params?: GetPairsParams): Promise<PairsResponse> {\n return this.subgraph.getPairs(params);\n }\n\n /** Live mid/bid/ask prices keyed by `pairId`. */\n getAllPrices(): Promise<AllPricesResponse> {\n return this.subgraph.getAllPrices();\n }\n\n /**\n * Open positions + margin summary for a user. Defaults to the connected\n * trader. Live prices and the current block number are fetched automatically.\n */\n async getOpenPositions(params?: Partial<GetOpenPositionsParams>): Promise<OpenPositionsResponse> {\n return this.subgraph.getOpenPositions({\n user: params?.user ?? this.getTraderAddress(),\n blockNumber: params?.blockNumber ?? (await this.publicClient.getBlockNumber()),\n });\n }\n\n /**\n * Executed fills, newest first.\n *\n * - `user` defaults to the connected trader. Pass `'ALL'` to fetch fills\n * across every trader (no trader filter).\n * - `pairId` (optional) — restricts to a single pair.\n * - `limit` (optional, default `1000`) — caps the result. Pass `Infinity` to\n * fetch every matching fill.\n */\n getFills(params?: Partial<GetFillsParams>): Promise<Fill[]> {\n return this.subgraph.getFills({\n user: params?.user ?? this.getTraderAddress(),\n pairId: params?.pairId,\n limit: params?.limit,\n });\n }\n\n /**\n * Executed fills within a time range (Unix ms). Same filters as `getFills`,\n * including the default `limit: 1000`.\n */\n getFillsByTime(params: Partial<GetFillsByTimeParams> & { startTime: number }): Promise<Fill[]> {\n return this.subgraph.getFillsByTime({\n user: params.user ?? this.getTraderAddress(),\n pairId: params.pairId,\n limit: params.limit,\n startTime: params.startTime,\n endTime: params.endTime,\n });\n }\n\n /** Active limit orders for a user. Defaults to the connected trader. */\n getOpenOrders(params?: Partial<GetUserParams>): Promise<OpenOrder[]> {\n return this.subgraph.getOpenOrders({ user: params?.user ?? this.getTraderAddress() });\n }\n\n /**\n * Fetch orders at any status — pending, executed, or cancelled.\n *\n * Pass `initiatedTxHashes: [result.txHash]` to poll by the submission hash, or\n * `orderIds` by on-chain id. Without either, returns recent orders for the\n * connected trader.\n */\n getOrders(params?: Omit<GetOrdersParams, 'user'> & { user?: Address }): Promise<Order[]> {\n const byId = params?.orderIds?.length;\n const byTx = params?.initiatedTxHashes?.length;\n return this.subgraph.getOrders({\n ...params,\n user: params?.user ?? (byId || byTx ? undefined : this.getTraderAddress()),\n });\n }\n\n /**\n * Simulate per-side slippage for a list of pairs and notionals.\n * See {@link OstiumSubgraphClient.getSimSlippage} for full semantics.\n */\n getSimSlippage(params: GetSimSlippageParams): Promise<SimSlippageByPairId> {\n return this.subgraph.getSimSlippage(params);\n }\n\n /**\n * Build a synthetic bid/ask orderbook for one pair using exponentially-spaced\n * notional levels capped at each side's remaining OI capacity.\n * See {@link OstiumSubgraphClient.getSimOrderbook} for full semantics.\n */\n getSimOrderbook(params: GetSimOrderbookParams): Promise<SimOrderbookResponse> {\n return this.subgraph.getSimOrderbook(params);\n }\n\n /**\n * Fetch OHLC candles for a pair from the builder API.\n *\n * `from` / `to` are Unix milliseconds; `resolution` is one of\n * `\"1\"`, `\"5\"`, `\"15\"`, `\"60\"`, `\"240\"`, `\"1D\"`.\n *\n * ```ts\n * const candles = await client.getCandles({\n * pairId: 0,\n * from: Date.now() - 30 * 86_400_000,\n * resolution: '1D',\n * });\n * ```\n */\n getCandles(params: GetCandlesParams): Promise<Candle[]> {\n return this.subgraph.getCandles(params);\n }\n\n /**\n * Open a WebSocket connection to the live price stream.\n *\n * Optionally filter to a subset of pairs by `pairId` — same values as returned by\n * `getPairs()`. When provided, the client sends `{ type: \"subscribe\", pairs }` on\n * `open` (no `?pairs=` query on the URL). Omit `pairIds` to receive the full feed.\n *\n * ```ts\n * const stream = client.streamPrices([0, 1]); // BTC and ETH by pairId\n * stream.onSnapshot(ticks => console.log(ticks));\n * stream.onTick(tick => console.log(tick.pair, tick.mid));\n * stream.subscribe([2]); // add pair\n * stream.unsubscribe([0]); // remove pair\n * stream.close();\n * ```\n *\n * Requires Node.js 18+, Bun, or a browser environment. Bun’s `WebSocket` may fail\n * some `https://` upgrades; use Node if the connection never reaches `open`.\n */\n streamPrices(pairIds?: Array<string | number>): OstiumPriceStream {\n return this.subgraph.streamPrices(pairIds);\n }\n\n /**\n * Stream price-driven updates for an existing `getOpenPositions()` response.\n *\n * Subscribes only to the unique pairs referenced by the response and emits the\n * full updated positions payload on each relevant price update. Pass an\n * existing `priceStream` to reuse a websocket your app already owns, or omit\n * it to let the SDK create a dedicated connection.\n */\n streamPositionUpdates(\n initial: OpenPositionsResponse,\n priceStream?: OstiumPriceStream,\n ): OstiumPositionUpdatesStream {\n return this.subgraph.streamPositionUpdates(initial, priceStream);\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Internal helpers\n // ─────────────────────────────────────────────────────────────────────────\n\n private getSetupGaslessDelegationEncoded(): EncodedTx {\n if (!this.selfGasless || !this.effectiveSender) {\n throw new OstiumError(\n 'setupGaslessDelegation() is only available in Self + Gasless mode.',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n return encodeSetDelegate(this.effectiveSender, this.contracts.trading);\n }\n\n private getApproveUsdcEncoded(amount: string): EncodedTx {\n if (this.delegated) {\n throw new OstiumError(\n 'approveUsdc is not available in delegated mode. The trader must approve USDC directly from their own account.',\n OstiumErrorCode.DELEGATION_FAILED,\n );\n }\n const rawAmount = amount === 'max' ? maxUint256 : parseUsdc(amount);\n return encodeUsdcApprove(this.contracts.tradingStorage, rawAmount, this.contracts.usdc);\n }\n\n private getSetDelegateEncoded(delegateAddress: Address): EncodedTx {\n return encodeSetDelegate(delegateAddress, this.contracts.trading);\n }\n\n private getRemoveDelegateEncoded(): EncodedTx {\n return encodeRemoveDelegate(this.contracts.trading);\n }\n\n private prepareEncoded(encoded: EncodedTx): EncodedTx {\n const signer = this.requireBuildCapability();\n return signer.prepare(encoded);\n }\n\n private buildPreparedTx(encoded: EncodedTx): BuiltTxRequest {\n return this.toBuiltTxRequest(this.prepareEncoded(encoded));\n }\n\n private buildDirectEoaTx(encoded: EncodedTx): BuiltTxRequest {\n if (!this.canBuildTransactions() || !this.traderAddress) {\n throw new OstiumError(\n 'This client cannot build transactions. Use one of the createSelfAnd*/createDelegatedAnd* factories.',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n return {\n kind: 'eoa',\n to: encoded.to,\n data: encoded.data,\n value: encoded.value,\n from: this.traderAddress,\n traderAddress: this.traderAddress,\n };\n }\n\n private toBuiltTxRequest(encoded: EncodedTx): BuiltTxRequest {\n if (!this.canBuildTransactions() || !this.traderAddress || !this.effectiveSender) {\n throw new OstiumError(\n 'This client cannot build transactions. Use one of the createSelfAnd*/createDelegatedAnd* factories.',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n\n if (this.gasless) {\n return {\n kind: 'safe',\n safeAddress: this.effectiveSender,\n traderAddress: this.traderAddress,\n calls: [encoded],\n };\n }\n\n return {\n kind: 'eoa',\n to: encoded.to,\n data: encoded.data,\n value: encoded.value,\n from: this.effectiveSender,\n traderAddress: this.traderAddress,\n };\n }\n\n private async submitPrepared(encoded: EncodedTx): Promise<SubmissionResult> {\n const submitter = this.requireSubmitCapability();\n return submitter.submit(this.prepareEncoded(encoded));\n }\n\n /** Direct EOA submission — used only in Self + Gasless for approveUsdc and setupGaslessDelegation. */\n private async submitDirectEoa(encoded: EncodedTx): Promise<SubmissionResult> {\n if (!this.eoaSubmit) {\n throw new OstiumError(\n 'This client cannot submit direct EOA transactions.',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n try {\n return await this.eoaSubmit(encoded);\n } catch (err) {\n if (err instanceof OstiumError) throw err;\n const msg = err instanceof Error ? err.message : String(err);\n const lower = msg.toLowerCase();\n if (lower.includes('revert')) {\n throw new OstiumError(`Contract reverted: ${msg}`, OstiumErrorCode.CONTRACT_ERROR, err);\n }\n if (lower.includes('network') || lower.includes('timeout') || lower.includes('fetch')) {\n throw new OstiumError(`Network error: ${msg}`, OstiumErrorCode.NETWORK_ERROR, err);\n }\n throw new OstiumError(`Transaction failed: ${msg}`, OstiumErrorCode.SUBMISSION_FAILED, err);\n }\n }\n\n private requireBuildCapability(): SignerStrategy {\n if (!this.signer) {\n throw new OstiumError(\n 'This client cannot build transactions. Use one of the createSelfAnd*/createDelegatedAnd* factories.',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n return this.signer;\n }\n\n private requireSubmitCapability(): SubmissionStrategy {\n if (!this.submitter) {\n throw new OstiumError(\n 'This client does not have submission credentials. Use the corresponding get*Tx() method or initialize with a private key.',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n return this.submitter;\n }\n\n private resolveSlippage(override?: number): number {\n return override ?? this.defaultSlippageBps;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/internal/erc20.ts","../src/internal/builder-fee.ts","../src/internal/decimal.ts","../src/internal/precision.ts","../src/internal/validation.ts","../src/internal/open-builder.ts","../src/internal/contracts.ts","../src/types.ts","../src/config.ts","../src/errors.ts","../src/signer/self.ts","../src/internal/contract.ts","../src/encoder.ts","../src/signer/delegated.ts","../src/signer/index.ts","../src/submitter/self.ts","../src/submitter/gasless.ts","../src/submitter/index.ts","../src/data/config.ts","../src/data/errors.ts","../src/data/queries.ts","../src/data/internal/pagination.ts","../src/data/internal/precision.ts","../src/data/internal/decimal.ts","../src/data/internal/calculations.ts","../src/data/internal/pair-names.ts","../src/data/internal/pricing.ts","../src/data/internal/aggregations.ts","../src/data/internal/formatters.ts","../src/data/internal/position-updates.ts","../src/data/internal/sim-slippage.ts","../src/data/client.ts","../src/client.ts"],"names":["OrderType","CancelOrderType","OstiumErrorCode","arbitrumSepolia","arbitrum","http","privateKeyToAccount","toLightSmartAccount","OstiumSubgraphErrorCode","parseUsdc","parseLeverage","CalculateDynamicPriceImpact","data","createPublicClient","createWalletClient","formatUnits"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Minimal ERC20 ABI for allowance/approve\n */\n\nexport const ERC20_ABI = [\n {\n inputs: [\n { internalType: 'address', name: 'owner', type: 'address' as const },\n { internalType: 'address', name: 'spender', type: 'address' as const },\n ],\n name: 'allowance',\n outputs: [{ internalType: 'uint256', name: '', type: 'uint256' as const }],\n stateMutability: 'view' as const,\n type: 'function' as const,\n },\n {\n inputs: [\n { internalType: 'address', name: 'spender', type: 'address' as const },\n { internalType: 'uint256', name: 'amount', type: 'uint256' as const },\n ],\n name: 'approve',\n outputs: [{ internalType: 'bool', name: '', type: 'bool' as const }],\n stateMutability: 'nonpayable' as const,\n type: 'function' as const,\n },\n {\n inputs: [\n { internalType: 'address', name: 'account', type: 'address' as const },\n ],\n name: 'balanceOf',\n outputs: [{ internalType: 'uint256', name: '', type: 'uint256' as const }],\n stateMutability: 'view' as const,\n type: 'function' as const,\n },\n {\n inputs: [\n { internalType: 'address', name: 'to', type: 'address' as const },\n { internalType: 'uint256', name: 'amount', type: 'uint256' as const },\n ],\n name: 'transfer',\n outputs: [{ internalType: 'bool', name: '', type: 'bool' as const }],\n stateMutability: 'nonpayable' as const,\n type: 'function' as const,\n },\n] as const;\n","/**\n * Builder fee encoding for OstiumTradingStorage.BuilderFee.\n *\n * Builders pass human-readable basis points (`feeBps`): e.g. `10` = 10 bps (0.1%),\n * `2.55` = 2.55 bps (0.0255%). The contract stores `feeBps × 10_000` (PRECISION_6\n * percent scale; max 500_000 = 50 bps = 0.5%).\n */\n\n/** Maximum builder fee in basis points (50 bps = 0.5%). */\nexport const MAX_BUILDER_FEE_BPS = 50;\n\n/** Smallest allowed `feeBps` step (0.01 bps). */\nexport const MIN_BUILDER_FEE_BPS_STEP = 0.01;\n\n/** On-chain maximum (`MAX_BUILDER_FEE_PERCENT` with PRECISION_6). */\nexport const MAX_BUILDER_FEE_CONTRACT = 500_000;\n\nconst BPS_TO_CONTRACT = 10_000;\n\n/** Convert builder-facing bps to the uint32 contract field. */\nexport function bpsToContractBuilderFee(feeBps: number): bigint {\n if (feeBps === 0) return 0n;\n return BigInt(Math.round(feeBps * BPS_TO_CONTRACT));\n}\n\n/** Returns an error message when invalid, otherwise `null`. */\nexport function validateBuilderFeeBps(feeBps: number): string | null {\n if (!Number.isFinite(feeBps)) {\n return 'builder.feeBps must be a finite number';\n }\n if (feeBps < 0 || feeBps > MAX_BUILDER_FEE_BPS) {\n return `builder.feeBps must be between 0 and ${MAX_BUILDER_FEE_BPS} (0%–0.5%)`;\n }\n const centiBps = Math.round(feeBps * 100);\n if (Math.abs(feeBps * 100 - centiBps) > 1e-6) {\n return `builder.feeBps must be a multiple of ${MIN_BUILDER_FEE_BPS_STEP} (0.01 bps)`;\n }\n if (bpsToContractBuilderFee(feeBps) > MAX_BUILDER_FEE_CONTRACT) {\n return 'builder.feeBps exceeds on-chain maximum (0.5%)';\n }\n return null;\n}\n","/**\n * Decimal conversion utilities for trading precision\n * Critical: All values must be scaled correctly for smart contract calls\n */\n\n/**\n * Parse a USDC amount string to bigint with 6 decimals\n * @param amount - Amount in USDC (e.g., \"100.50\" = 100.50 USDC)\n * @returns Bigint representation with 6 decimal precision\n */\nexport function parseUsdc(amount: string | number): bigint {\n const amountStr = typeof amount === 'number' ? amount.toString() : amount;\n if (!amountStr || amountStr === '0') return 0n;\n\n if (!/^\\d+(\\.\\d+)?$/.test(amountStr)) {\n throw new Error(`Invalid USDC amount: ${amountStr}`);\n }\n\n const [intPart, decPart = ''] = amountStr.split('.');\n const paddedDec = decPart.padEnd(6, '0').slice(0, 6);\n return BigInt(intPart + paddedDec);\n}\n\n/**\n * Parse a price string to bigint with 18 decimals.\n * Uses string manipulation to avoid floating-point precision loss.\n * @param price - Price as string (e.g., \"1900.50\")\n * @returns Bigint representation with 18 decimal precision\n */\nexport function parsePrice(price: string | number): bigint {\n const priceStr = typeof price === 'number' ? price.toString() : price;\n if (!priceStr || priceStr === '0') return 0n;\n\n if (!/^-?\\d+(\\.\\d+)?$/.test(priceStr)) {\n throw new Error(`Invalid price: ${priceStr}`);\n }\n\n const isNegative = priceStr.startsWith('-');\n const absStr = isNegative ? priceStr.slice(1) : priceStr;\n const [intPart, decPart = ''] = absStr.split('.');\n const paddedDec = decPart.padEnd(18, '0').slice(0, 18);\n const result = BigInt(intPart + paddedDec);\n\n return isNegative ? -result : result;\n}\n\n/**\n * Parse leverage to contract format (leverage × 100).\n * @param leverage - Leverage as number (e.g., 20 for 20x)\n * @returns Bigint (e.g., 2000 for 20x)\n */\nexport function parseLeverage(leverage: number): bigint {\n if (leverage <= 0 || !Number.isFinite(leverage)) {\n throw new Error(`Invalid leverage: ${leverage}`);\n }\n return BigInt(Math.round(leverage * 100));\n}\n","/**\n * Precision constants for decimal conversions\n * Critical for trading calculations - all values must be scaled correctly\n */\n\nexport const PRECISION_6 = 1000000n; // USDC (6 decimals)\nexport const PRECISION_18 = 1000000000000000000n; // Prices (18 decimals)\n\nexport const DEFAULT_SLIPPAGE_PERCENTAGE = 0.25;\n\nexport const MIN_COLLATERAL_USD = 5;\nexport const MAX_COLLATERAL_USD = 2_000_000;\n\nexport const ORDER_TYPE_MAP: Record<string, number> = {\n 'market': 0, // OpenOrderType.MARKET\n 'limit': 1, // OpenOrderType.LIMIT\n 'stop': 2, // OpenOrderType.STOP\n};\n","/**\n * Validation helpers for API requests\n */\n\nimport { ORDER_TYPE_MAP } from './precision.js';\nimport type { ApiOpen, ApiCloseAction, ApiCancelAction } from './api-schema.js';\nimport type { OpenOrderType } from './ostium-schema.js';\nimport type { ModifyInput } from './builder-types.js';\n\nconst DECIMAL_RE = /^-?\\d+(\\.\\d+)?$/;\n\nfunction assertDecimal(value: string, label: string): void {\n if (!DECIMAL_RE.test(value)) {\n throw new Error(`Invalid ${label}: \"${value}\" is not a valid decimal number`);\n }\n if (parseFloat(value) <= 0) {\n throw new Error(`Invalid ${label}: must be greater than zero, got \"${value}\"`);\n }\n}\n\nfunction assertNonNegativeDecimal(value: string, label: string): void {\n if (!DECIMAL_RE.test(value)) {\n throw new Error(`Invalid ${label}: \"${value}\" is not a valid decimal number`);\n }\n if (parseFloat(value) < 0) {\n throw new Error(`Invalid ${label}: must be non-negative, got \"${value}\"`);\n }\n}\n\n/**\n * Extract the contract OpenOrderType from an ApiOpen request.\n */\nexport function extractOpenType(open: ApiOpen): OpenOrderType {\n return ORDER_TYPE_MAP[open.t];\n}\n\n/**\n * Validate TP/SL direction relative to the open price.\n */\nexport function validateTpSlDirection(\n open: ApiOpen,\n tp: bigint,\n sl: bigint,\n openPrice: bigint,\n): void {\n if (open.b) {\n if (tp > 0n && tp <= openPrice) {\n throw new Error(`Take profit (${open.tp}) must be above open price (${open.p}) for long positions`);\n }\n if (sl > 0n && sl >= openPrice) {\n throw new Error(`Stop loss (${open.sl}) must be below open price (${open.p}) for long positions`);\n }\n } else {\n if (tp > 0n && tp >= openPrice) {\n throw new Error(`Take profit (${open.tp}) must be below open price (${open.p}) for short positions`);\n }\n if (sl > 0n && sl <= openPrice) {\n throw new Error(`Stop loss (${open.sl}) must be above open price (${open.p}) for short positions`);\n }\n }\n}\n\n/**\n * Validate close parameters.\n */\nexport function validateCloseParams(close: ApiCloseAction): void {\n if (close.r < 1 || close.r > 100) {\n throw new Error(`Close percentage must be 1–100, got ${close.r}`);\n }\n assertDecimal(close.p, 'close price');\n}\n\n/**\n * Validate cancel parameters.\n */\nexport function validateCancelParams(cancel: ApiCancelAction): void {\n if (cancel.t === 'limit') {\n if (cancel.a === undefined || cancel.a < 0) {\n throw new Error(`Invalid pair index for limit cancel: ${cancel.a}`);\n }\n if (cancel.i === undefined || cancel.i < 0) {\n throw new Error(`Invalid order index for limit cancel: ${cancel.i}`);\n }\n } else {\n if (cancel.o === undefined || cancel.o < 0) {\n throw new Error(`Invalid order ID for ${cancel.t} cancel: ${cancel.o}`);\n }\n }\n}\n\n/**\n * Validate modify parameters.\n */\nexport function validateModifyParams(input: ModifyInput): void {\n if (input.a < 0) {\n throw new Error(`Invalid pair index: ${input.a}`);\n }\n if (input.i < 0) {\n throw new Error(`Invalid trade/order index: ${input.i}`);\n }\n if (!input.p && !input.tp && !input.sl) {\n throw new Error('At least one of price, takeProfit, or stopLoss must be provided');\n }\n if (input.p) {\n assertDecimal(input.p, 'price');\n }\n if (input.tp) {\n assertNonNegativeDecimal(input.tp, 'take profit');\n }\n if (input.sl) {\n assertNonNegativeDecimal(input.sl, 'stop loss');\n }\n}\n","/**\n * Trade-building helpers — converts public API params into contract-ready structs.\n */\n\nimport type { ApiOpen, ApiBuilder } from './api-schema.js';\nimport type { OstiumTrade, BuilderFee, OpenOrderType } from './ostium-schema.js';\nimport type { OpenBuilderConfig } from './builder-types.js';\nimport { parseUsdc, parsePrice, parseLeverage } from './decimal.js';\nimport { extractOpenType, validateTpSlDirection } from './validation.js';\nimport { bpsToContractBuilderFee } from './builder-fee.js';\nimport { MIN_COLLATERAL_USD } from './precision.js';\n\nconst DEFAULT_CONFIG: Required<OpenBuilderConfig> = {\n defaultLeverage: 1,\n maxLeverage: 100,\n minOpenSize: MIN_COLLATERAL_USD,\n};\n\nexport function buildTrade(\n open: ApiOpen,\n traderAddress: string,\n config: OpenBuilderConfig = {}\n): { trade: OstiumTrade; orderType: OpenOrderType } {\n const mergedConfig = { ...DEFAULT_CONFIG, ...config };\n\n const collateralUsd = parseFloat(open.s);\n if (collateralUsd < mergedConfig.minOpenSize) {\n throw new Error(`Collateral ${open.s} below minimum ${mergedConfig.minOpenSize}`);\n }\n\n const leverageNum = parseFloat(open.l);\n if (leverageNum > mergedConfig.maxLeverage) {\n throw new Error(`Leverage ${open.l} exceeds maximum ${mergedConfig.maxLeverage}`);\n }\n\n const collateral = parseUsdc(open.s);\n const openPrice = parsePrice(open.p);\n const leverage = parseLeverage(leverageNum);\n const tp = open.tp ? parsePrice(open.tp) : 0n;\n const sl = open.sl ? parsePrice(open.sl) : 0n;\n\n if (tp > 0n || sl > 0n) {\n validateTpSlDirection(open, tp, sl, openPrice);\n }\n\n const trade: OstiumTrade = {\n collateral,\n openPrice,\n tp,\n sl,\n trader: traderAddress as `0x${string}`,\n leverage,\n pairIndex: BigInt(open.a),\n index: 0n,\n buy: open.b,\n isDayTrade: open.d ?? false,\n };\n\n return { trade, orderType: extractOpenType(open) };\n}\n\nexport function buildBuilderFee(builder?: ApiBuilder): BuilderFee {\n if (!builder) {\n return {\n builder: '0x0000000000000000000000000000000000000000',\n builderFee: 0n,\n };\n }\n // builder.f is human bps (e.g. 10 = 10 bps / 0.1%, 2.55 = 2.55 bps).\n return {\n builder: builder.b as `0x${string}`,\n builderFee: bpsToContractBuilderFee(builder.f),\n };\n}\n","/**\n * Contract addresses for Ostium on Arbitrum\n */\n\nimport { type Address } from 'viem';\n\nexport const ARBITRUM_MAINNET = {\n chainId: 42161,\n contracts: {\n usdc: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831' as Address,\n trading: '0x6D0bA1f9996DBD8885827e1b2e8f6593e7702411' as Address,\n tradingStorage: '0xcCd5891083A8acD2074690F65d3024E7D13d66E7' as Address,\n },\n};\n\nexport const ARBITRUM_TESTNET = {\n chainId: 421614,\n contracts: {\n usdc: '0xe73B11Fb1e3eeEe8AF2a23079A4410Fe1B370548' as Address,\n trading: '0x2A9B9c988393f46a2537B0ff11E98c2C15a95afe' as Address,\n tradingStorage: '0x0b9F5243B29938668c9Cfbd7557A389EC7Ef88b8' as Address,\n },\n};\n\nexport function getNetworkConfig(isTestnet: boolean = false) {\n return isTestnet ? ARBITRUM_TESTNET : ARBITRUM_MAINNET;\n}\n","import type { Hex, Address } from 'viem';\n\nexport enum OrderType {\n Market = 'market',\n Limit = 'limit',\n Stop = 'stop',\n}\n\nexport enum CancelOrderType {\n Limit = 'limit',\n PendingOpen = 'pendingOpen',\n PendingClose = 'pendingClose',\n}\n\nexport interface OpenTradeParams {\n /**\n * Trading pair id — same value as `Pair.pairId` returned by `getPairs()`.\n * Accepts both the numeric string (e.g. `\"0\"`) and a plain `number`.\n */\n pairId: string | number;\n /** true = long, false = short. */\n buy: boolean;\n /** Entry price as a decimal string (e.g. \"65000.50\"). */\n price: string;\n /** Collateral in USD as a decimal string (e.g. \"100.00\", minimum $5). */\n collateral: string;\n /** Leverage as a decimal string (e.g. \"10\" for 10×, max 100×). */\n leverage: string;\n /** Order type. */\n type: OrderType;\n /** Take profit price as a decimal string. Optional. */\n takeProfit?: string;\n /** Stop loss price as a decimal string. Optional. */\n stopLoss?: string;\n /** Per-trade slippage override in basis points. Overrides client default. */\n slippage?: number;\n /**\n * Mark the trade as a day trade. Must be `true` when the desired leverage\n * exceeds `pair.overnightMaxLeverage` (and `overnightMaxLeverage > 0`).\n * Day trades are automatically closed before market close if not manually\n * closed beforehand. Defaults to `false`.\n */\n isDayTrade?: boolean;\n}\n\nexport interface CloseTradeParams {\n /**\n * Trading pair id — same value as `Position.pairId` returned by `getOpenPositions`.\n * Accepts both the numeric string (e.g. `\"0\"`) and a plain `number` for ergonomics.\n */\n pairId: string | number;\n /**\n * Position index within the pair — same value as `Position.idx` returned by\n * `getOpenPositions`. Identifies which of the trader's open positions to close.\n */\n idx: number;\n /** Current market price as a decimal string. */\n price: string;\n /** Percentage to close (1–100). */\n closePercent: number;\n /** Per-trade slippage override in basis points. */\n slippage?: number;\n /**\n * When true, verifies USDC allowance covers the oracle fee before submitting.\n * Skip by default if you know allowance is sufficient.\n */\n checkAllowance?: boolean;\n}\n\n/**\n * Cancel a pending limit order.\n */\nexport interface CancelLimitOrderParams {\n type: CancelOrderType.Limit;\n /**\n * Trading pair id — same value as `OpenOrder.pairId` returned by `getOpenOrders`.\n * Accepts both the numeric string (e.g. `\"0\"`) and a plain `number`.\n */\n pairId: string | number;\n /**\n * Limit order index within the pair — same value as `OpenOrder.idx` returned\n * by `getOpenOrders`. Identifies which limit order to cancel.\n */\n idx: number;\n}\n\n/**\n * Cancel a timed-out market open order.\n */\nexport interface CancelPendingOpenParams {\n type: CancelOrderType.PendingOpen;\n /** Market order ID from the original openTrade submission. */\n orderId: number;\n}\n\n/**\n * Cancel a timed-out market close order.\n */\nexport interface CancelPendingCloseParams {\n type: CancelOrderType.PendingClose;\n /** Market order ID from the original closeTrade submission. */\n orderId: number;\n /**\n * If true, re-submits the close order after cancelling the timed-out one.\n * Defaults to false (cancel only, trade remains open).\n */\n retry?: boolean;\n}\n\nexport type CancelOrderParams =\n | CancelLimitOrderParams\n | CancelPendingOpenParams\n | CancelPendingCloseParams;\n\nexport interface ModifyOrderParams {\n /**\n * Trading pair id.\n * - Updating TP/SL on an open position → use `Position.pairId` from `getOpenPositions`.\n * - Updating a limit order's trigger price → use `OpenOrder.pairId` from `getOpenOrders`.\n * Accepts both the numeric string (e.g. `\"0\"`) and a plain `number`.\n */\n pairId: string | number;\n /**\n * Slot index within the pair.\n * - Updating TP/SL on an open position → use `Position.idx`.\n * - Updating a limit order → use `OpenOrder.idx`.\n */\n idx: number;\n /** New limit-order trigger price. Required when modifying a limit order's price. */\n price?: string;\n /** New take profit price. */\n takeProfit?: string;\n /** New stop loss price. */\n stopLoss?: string;\n}\n\nexport interface UpdateCollateralParams {\n /**\n * Trading pair id — same value as `Position.pairId` returned by `getOpenPositions`.\n * Accepts both the numeric string (e.g. `\"0\"`) and a plain `number`.\n */\n pairId: string | number;\n /**\n * Position index within the pair — same value as `Position.idx` returned by\n * `getOpenPositions`. Identifies which position to top up or partially withdraw from.\n */\n idx: number;\n /**\n * Amount in USD as a decimal string.\n * Positive → add collateral (topUpCollateral).\n * Negative → remove collateral (removeCollateral).\n */\n amount: string;\n}\n\nexport interface Balances {\n /** USDC balance as a decimal string (e.g. `\"1234.567890\"`). */\n usdc: string;\n /** ETH balance as a decimal string (e.g. `\"0.001234567890123456789\"`). */\n eth: string;\n /** USDC allowance granted to the TradingStorage contract as a decimal string. Max approval is preserved exactly. */\n allowance: string;\n}\n\nexport interface AllowanceStatus {\n /** Current USDC allowance (6 decimals, raw bigint). */\n current: bigint;\n /** Required USDC allowance (6 decimals, raw bigint). */\n required: bigint;\n /** true if current >= required. */\n sufficient: boolean;\n}\n\nexport interface SubmissionResult {\n txHash: Hex;\n /** Set for gasless submissions — the Safe smart account address that sent the UserOp. */\n smartAccountAddress?: Address;\n}\n\nexport interface BuiltSafeTxCall {\n to: Address;\n data: Hex;\n value: bigint;\n}\n\nexport interface BuiltEoaTxRequest {\n kind: 'eoa';\n to: Address;\n data: Hex;\n value: bigint;\n from: Address;\n traderAddress: Address;\n}\n\nexport interface BuiltSafeTxRequest {\n kind: 'safe';\n safeAddress: Address;\n traderAddress: Address;\n calls: [BuiltSafeTxCall];\n}\n\nexport type BuiltTxRequest = BuiltEoaTxRequest | BuiltSafeTxRequest;\n\n/** Internal encoded transaction before signer.prepare(). */\nexport interface EncodedTx {\n to: Address;\n data: Hex;\n value: bigint;\n}\n","import type { Hex, Address } from 'viem';\n\nexport const DEFAULT_PIMLICO_URL = 'https://builder.ostium.io/v1/pimlico/sponsor?chainId=42161';\nexport const DEFAULT_PIMLICO_URL_TESTNET = 'https://builder.ostium.io/v1/pimlico/sponsor?chainId=421614';\n\nexport type ClientMode =\n | 'self-self'\n | 'self-gasless'\n | 'delegated-self'\n | 'delegated-gasless';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Named factory param types (preferred API)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** Shared optional settings available in every mode. */\ninterface CommonParams {\n /** Use Arbitrum Sepolia testnet. Defaults to false (mainnet). */\n testnet?: boolean;\n /** Default slippage tolerance in basis points (e.g. 25 = 0.25%). Defaults to 25. */\n slippageBps?: number;\n /**\n * Optional builder fee sharing.\n * `feeBps` in basis points (e.g. 10 = 10 bps / 0.1%, 2.55 = 2.55 bps). Max 50 (0.5%), step 0.01 bps.\n */\n builder?: {\n address: Address;\n feeBps: number;\n };\n /**\n * Override the Ostium subgraph endpoint used by built-in read methods\n * (`getPairs`, `getOpenPositions`, etc.). Defaults to the mainnet or testnet\n * subgraph based on `testnet`.\n */\n subgraphUrl?: string;\n /**\n * Override the builder API base URL used for live prices, OHLC candles, and\n * the WebSocket stream. Defaults to `https://builder.ostium.io`.\n */\n builderApiUrl?: string;\n}\n\nexport interface SelfSelfSubmitParams extends CommonParams {\n /** Private key of the trader's EOA. This account holds USDC, owns all positions, and pays gas. */\n traderPrivateKey: Hex;\n /** Arbitrum One (or Sepolia) RPC URL. */\n rpcUrl: string;\n}\n\nexport interface SelfSelfBuildParams extends CommonParams {\n /** Trader EOA address. Used to build unsigned transactions without SDK submission. */\n traderAddress: Address;\n /** Optional Arbitrum RPC URL for reads/simulation. Defaults to the chain public RPC. */\n rpcUrl?: string;\n}\n\n/**\n * **Self + Self** — simplest mode.\n *\n * Your EOA is the trader: it holds USDC, owns all positions, and pays gas\n * for every transaction directly.\n */\nexport type SelfSelfParams = SelfSelfSubmitParams | SelfSelfBuildParams;\n\nexport interface SelfGaslessSubmitParams extends CommonParams {\n /** Private key of the trader's EOA. This account holds USDC and owns all positions. A Safe is derived from this key to relay trades gaslessly. */\n traderPrivateKey: Hex;\n /** Pimlico-compatible bundler/paymaster RPC URL. Defaults to `https://builder.ostium.io/v1/pimlico/sponsor?chainId=42161`. */\n pimlicoUrl?: string;\n /** Arbitrum RPC URL for reads/simulation. Defaults to public Arbitrum RPC when omitted. */\n rpcUrl?: string;\n /** Pimlico sponsorship policy ID. */\n sponsorshipPolicyId?: string;\n}\n\nexport interface SelfGaslessBuildParams extends CommonParams {\n /** Trader EOA address that owns USDC and positions. */\n traderAddress: Address;\n /** Safe smart-account address that will submit delegated calls. */\n safeAddress: Address;\n /** Optional Arbitrum RPC URL for reads/simulation. Defaults to the chain public RPC. */\n rpcUrl?: string;\n}\n\n/**\n * **Self + Gasless** — your EOA owns everything; a Safe acts as a transparent gasless relay.\n *\n * Submit-capable clients derive the Safe from `traderPrivateKey`. Build-only\n * clients provide both `traderAddress` and `safeAddress`.\n */\nexport type SelfGaslessParams = SelfGaslessSubmitParams | SelfGaslessBuildParams;\n\nexport interface DelegatedSelfSubmitParams extends CommonParams {\n /** Private key of the delegate EOA. This account signs and pays gas for all transactions. */\n delegatePrivateKey: Hex;\n /**\n * Address of the trader this delegate acts for.\n * The trader must have called `setDelegate(delegateAddress)` on the trading contract.\n */\n traderAddress: Address;\n /** Arbitrum One (or Sepolia) RPC URL. */\n rpcUrl: string;\n}\n\nexport interface DelegatedSelfBuildParams extends CommonParams {\n /** Address of the trader this delegate acts for. */\n traderAddress: Address;\n /** Delegate EOA address that will submit the transaction. */\n delegateAddress: Address;\n /** Optional Arbitrum RPC URL for reads/simulation. Defaults to the chain public RPC. */\n rpcUrl?: string;\n}\n\n/**\n * **Delegated + Self** — a dedicated delegate EOA signs and pays gas on behalf of a separate trader address.\n */\nexport type DelegatedSelfParams = DelegatedSelfSubmitParams | DelegatedSelfBuildParams;\n\nexport interface DelegatedGaslessSubmitParams extends CommonParams {\n /** Private key of the delegate EOA. A Safe smart account is derived from this key and submits UserOperations via Pimlico. */\n delegatePrivateKey: Hex;\n /**\n * Address of the trader this delegate acts for.\n * The trader must have called `setDelegate(safeAddress)` on the trading contract,\n * where `safeAddress` is the Safe derived from `delegatePrivateKey`.\n */\n traderAddress: Address;\n /** Pimlico-compatible bundler/paymaster RPC URL. Defaults to `https://builder.ostium.io/v1/pimlico/sponsor?chainId=42161`. */\n pimlicoUrl?: string;\n /** Arbitrum RPC URL for reads/simulation. Defaults to public Arbitrum RPC when omitted. */\n rpcUrl?: string;\n /** Pimlico sponsorship policy ID. */\n sponsorshipPolicyId?: string;\n}\n\nexport interface DelegatedGaslessBuildParams extends CommonParams {\n /** Address of the trader this delegate acts for. */\n traderAddress: Address;\n /** Delegate EOA address that owns the Safe. */\n delegateAddress: Address;\n /** Safe smart-account address that will submit delegated calls. */\n safeAddress: Address;\n /** Optional Arbitrum RPC URL for reads/simulation. Defaults to the chain public RPC. */\n rpcUrl?: string;\n}\n\n/**\n * **Delegated + Gasless** — a Safe derived from the delegate key submits sponsored UserOperations on behalf of the trader.\n */\nexport type DelegatedGaslessParams = DelegatedGaslessSubmitParams | DelegatedGaslessBuildParams;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Internal generic config\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface OstiumClientConfig extends CommonParams {\n mode?: ClientMode;\n privateKey?: Hex;\n traderAddress?: Address;\n delegateAddress?: Address;\n safeAddress?: Address;\n rpcUrl?: string;\n pimlicoUrl?: string;\n sponsorshipPolicyId?: string;\n}\n\nexport function hasPrivateKey(config: OstiumClientConfig): config is OstiumClientConfig & { privateKey: Hex } {\n return typeof config.privateKey === 'string' && config.privateKey.length > 0;\n}\n\nexport function resolveMode(config: OstiumClientConfig): ClientMode {\n if (config.mode) return config.mode;\n if (config.privateKey) {\n if (config.pimlicoUrl) return config.traderAddress ? 'delegated-gasless' : 'self-gasless';\n return config.traderAddress ? 'delegated-self' : 'self-self';\n }\n if (config.safeAddress && config.delegateAddress && config.traderAddress) return 'delegated-gasless';\n if (config.safeAddress && config.traderAddress) return 'self-gasless';\n if (config.delegateAddress && config.traderAddress) return 'delegated-self';\n if (config.traderAddress) return 'self-self';\n throw new Error('Unable to infer client mode from config');\n}\n\nexport function isGasless(config: OstiumClientConfig): boolean {\n const mode = resolveMode(config);\n return mode === 'self-gasless' || mode === 'delegated-gasless';\n}\n\nexport function isDelegated(config: OstiumClientConfig): boolean {\n const mode = resolveMode(config);\n return mode === 'delegated-self' || mode === 'delegated-gasless';\n}\n","export enum OstiumErrorCode {\n INVALID_CONFIG = 'INVALID_CONFIG',\n VALIDATION_FAILED = 'VALIDATION_FAILED',\n ALLOWANCE_INSUFFICIENT = 'ALLOWANCE_INSUFFICIENT',\n SUBMISSION_FAILED = 'SUBMISSION_FAILED',\n DELEGATION_FAILED = 'DELEGATION_FAILED',\n CONTRACT_ERROR = 'CONTRACT_ERROR',\n NETWORK_ERROR = 'NETWORK_ERROR',\n}\n\nexport class OstiumError extends Error {\n constructor(\n message: string,\n public readonly code: OstiumErrorCode,\n public readonly cause?: unknown,\n ) {\n super(message);\n this.name = 'OstiumError';\n }\n}\n","import type { Address } from 'viem';\nimport type { EncodedTx } from '../types.js';\nimport type { SignerStrategy } from './index.js';\n\n/**\n * Self signer — the private key belongs to the trader directly.\n * Transactions are submitted as-is without any delegation wrapping.\n *\n * In Self + Self mode: traderAddress = EOA derived from privateKey.\n * In Self + Gasless mode: NOT used — that mode uses DelegatedSignerStrategy\n * because the EOA is the trader and the Safe is the delegate.\n */\nexport class SelfSignerStrategy implements SignerStrategy {\n readonly traderAddress: Address;\n\n constructor(traderAddress: Address) {\n this.traderAddress = traderAddress;\n }\n\n prepare(encoded: EncodedTx): EncodedTx {\n return encoded;\n }\n}\n","/**\n * Trading contract ABI\n */\n\nimport { type Abi } from 'viem';\n\n/**\n * Trading contract ABI - used by the SDK encoder\n */\nexport const TRADING_ABI = [\n {\n \"inputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"AboveMaxAllowedCollateral\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"AlreadyMarketClosed\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"BelowFees\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"BelowMinLevPos\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"DelegateForbidden\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"DelegateReentrant\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"DelegatedActionFailed\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ExposureLimits\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidCallData\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidInitialization\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidNonce\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidSignature\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"a\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"IsContract\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"IsDone\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"IsPaused\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"MaxPendingMarketOrdersReached\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n }\n ],\n \"name\": \"MaxTradesPerPairReached\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"a\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"NoDelegate\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"NoLimitFound\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"NoTradeFound\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"NoTradeToTimeoutFound\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"NotCloseMarketTimeoutOrder\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"caller\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"NotDelegate\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"a\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"NotGov\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"NotInitializing\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"a\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"NotManager\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"NotOpenMarketTimeoutOrder\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"a\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"NotTradesUpKeep\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"NotYourOrder\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"NullAddr\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"index\",\n \"type\": \"uint16\"\n }\n ],\n \"name\": \"PairNotListed\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"bits\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"SafeCastOverflowedUintDowncast\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"SignatureExpired\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"TriggerPending\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"WaitTimeout\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint32\",\n \"name\": \"leverage\",\n \"type\": \"uint32\"\n }\n ],\n \"name\": \"WrongLeverage\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"WrongParams\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"WrongSL\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"WrongTP\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tradeId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"enum IOstiumTradingStorage.LimitOrder\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"AutomationCloseOrderInitiated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"AutomationOpenOrderInitiated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"delegator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"delegate\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"DelegateAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"delegator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"delegate\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"DelegateRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"bool\",\n \"name\": \"done\",\n \"type\": \"bool\"\n }\n ],\n \"name\": \"Done\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint64\",\n \"name\": \"version\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"Initialized\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tradeId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n }\n ],\n \"name\": \"MarketCloseFailed\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tradeId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n }\n ],\n \"name\": \"MarketCloseOrderInitiated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tradeId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint16\",\n \"name\": \"closePercentage\",\n \"type\": \"uint16\"\n }\n ],\n \"name\": \"MarketCloseOrderInitiatedV2\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tradeId\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"block\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"wantedPrice\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"slippageP\",\n \"type\": \"uint32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"collateral\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"openPrice\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"tp\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"sl\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"leverage\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"buy\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"isDayTrade\",\n \"type\": \"bool\"\n }\n ],\n \"internalType\": \"struct IOstiumTradingStorage.Trade\",\n \"name\": \"trade\",\n \"type\": \"tuple\"\n }\n ],\n \"indexed\": false,\n \"internalType\": \"struct IOstiumTradingStorage.PendingMarketOrder\",\n \"name\": \"order\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"MarketCloseTimeoutExecuted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tradeId\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"block\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"wantedPrice\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"slippageP\",\n \"type\": \"uint32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"collateral\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"openPrice\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"tp\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"sl\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"leverage\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"buy\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"isDayTrade\",\n \"type\": \"bool\"\n }\n ],\n \"internalType\": \"struct IOstiumTradingStorage.Trade\",\n \"name\": \"trade\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"percentage\",\n \"type\": \"uint16\"\n }\n ],\n \"indexed\": false,\n \"internalType\": \"struct IOstiumTradingStorage.PendingMarketOrderV2\",\n \"name\": \"order\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"MarketCloseTimeoutExecutedV2\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n }\n ],\n \"name\": \"MarketOpenOrderInitiated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"block\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"wantedPrice\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"slippageP\",\n \"type\": \"uint32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"collateral\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"openPrice\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"tp\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"sl\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"leverage\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"buy\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"isDayTrade\",\n \"type\": \"bool\"\n }\n ],\n \"internalType\": \"struct IOstiumTradingStorage.Trade\",\n \"name\": \"trade\",\n \"type\": \"tuple\"\n }\n ],\n \"indexed\": false,\n \"internalType\": \"struct IOstiumTradingStorage.PendingMarketOrder\",\n \"name\": \"order\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"MarketOpenTimeoutExecuted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"block\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"wantedPrice\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"slippageP\",\n \"type\": \"uint32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"collateral\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"openPrice\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"tp\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"sl\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"leverage\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"buy\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"isDayTrade\",\n \"type\": \"bool\"\n }\n ],\n \"internalType\": \"struct IOstiumTradingStorage.Trade\",\n \"name\": \"trade\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"percentage\",\n \"type\": \"uint16\"\n }\n ],\n \"indexed\": false,\n \"internalType\": \"struct IOstiumTradingStorage.PendingMarketOrderV2\",\n \"name\": \"order\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"MarketOpenTimeoutExecutedV2\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint16\",\n \"name\": \"value\",\n \"type\": \"uint16\"\n }\n ],\n \"name\": \"MarketOrdersTimeoutUpdated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"MaxAllowedCollateralUpdated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"OpenLimitCanceled\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"OpenLimitPlaced\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"collateral\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"openPrice\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"tp\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"sl\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"leverage\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"buy\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"isDayTrade\",\n \"type\": \"bool\"\n }\n ],\n \"indexed\": false,\n \"internalType\": \"struct IOstiumTradingStorage.Trade\",\n \"name\": \"trade\",\n \"type\": \"tuple\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"enum IOstiumTradingStorage.OpenOrderType\",\n \"name\": \"orderType\",\n \"type\": \"uint8\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"builder\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"builderFee\",\n \"type\": \"uint32\"\n }\n ],\n \"indexed\": false,\n \"internalType\": \"struct IOstiumTradingStorage.BuilderFee\",\n \"name\": \"builderFee\",\n \"type\": \"tuple\"\n }\n ],\n \"name\": \"OpenLimitPlacedV2\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint192\",\n \"name\": \"newPrice\",\n \"type\": \"uint192\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint192\",\n \"name\": \"newTp\",\n \"type\": \"uint192\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint192\",\n \"name\": \"newSl\",\n \"type\": \"uint192\"\n }\n ],\n \"name\": \"OpenLimitUpdated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tradeId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"OracleFeeCharged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"OracleFeeChargedLimitCancelled\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tradeId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"OracleFeeRefunded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"bool\",\n \"name\": \"paused\",\n \"type\": \"bool\"\n }\n ],\n \"name\": \"Paused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tradeId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"removeAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"RemoveCollateralInitiated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tradeId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"orderId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"removeAmount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"reason\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"RemoveCollateralRejected\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tradeId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint192\",\n \"name\": \"newSl\",\n \"type\": \"uint192\"\n }\n ],\n \"name\": \"SlUpdated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tradeId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"topUpAmount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint32\",\n \"name\": \"newLeverage\",\n \"type\": \"uint32\"\n }\n ],\n \"name\": \"TopUpCollateralExecuted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"uint256\",\n \"name\": \"tradeId\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint192\",\n \"name\": \"newTp\",\n \"type\": \"uint192\"\n }\n ],\n \"name\": \"TpUpdated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint16\",\n \"name\": \"value\",\n \"type\": \"uint16\"\n }\n ],\n \"name\": \"TriggerTimeoutUpdated\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"DELEGATION_TYPEHASH\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"DOMAIN_SEPARATOR\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"_msgSender\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n }\n ],\n \"name\": \"cancelOpenLimitOrder\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"closePercentage\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"marketPrice\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"slippageP\",\n \"type\": \"uint32\"\n }\n ],\n \"name\": \"closeTradeMarket\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_order\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"retry\",\n \"type\": \"bool\"\n }\n ],\n \"name\": \"closeTradeMarketTimeout\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"delegatableNonces\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"call_data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"delegatedAction\",\n \"outputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"delegator\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"delegations\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"done\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"enum IOstiumTradingStorage.LimitOrder\",\n \"name\": \"orderType\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"priceTimestamp\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"executeAutomationOrder\",\n \"outputs\": [\n {\n \"internalType\": \"enum IOstiumTrading.AutomationOrderStatus\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IOstiumRegistry\",\n \"name\": \"_registry\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_maxAllowedCollateral\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"_marketOrdersTimeout\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"_triggerTimeout\",\n \"type\": \"uint16\"\n }\n ],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"isDone\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"isPaused\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"marketOrdersTimeout\",\n \"outputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"\",\n \"type\": \"uint16\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"maxAllowedCollateral\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"collateral\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"openPrice\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"tp\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"sl\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"trader\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"leverage\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"buy\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"bool\",\n \"name\": \"isDayTrade\",\n \"type\": \"bool\"\n }\n ],\n \"internalType\": \"struct IOstiumTradingStorage.Trade\",\n \"name\": \"t\",\n \"type\": \"tuple\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"builder\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"builderFee\",\n \"type\": \"uint32\"\n }\n ],\n \"internalType\": \"struct IOstiumTradingStorage.BuilderFee\",\n \"name\": \"bf\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"enum IOstiumTradingStorage.OpenOrderType\",\n \"name\": \"orderType\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"slippageP\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"openTrade\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_order\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"openTradeMarketTimeout\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"pause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"registry\",\n \"outputs\": [\n {\n \"internalType\": \"contract IOstiumRegistry\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"removeAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"removeCollateral\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"removeDelegate\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"delegate\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setDelegate\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"delegator\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"delegate\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"nonce\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"expiry\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"v\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"r\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"s\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"setDelegateWithSignature\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setMarketOrdersTimeout\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setMaxAllowedCollateral\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"setTriggerTimeout\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"topUpAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"topUpCollateral\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"triggerTimeout\",\n \"outputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"\",\n \"type\": \"uint16\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"price\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"tp\",\n \"type\": \"uint192\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"sl\",\n \"type\": \"uint192\"\n }\n ],\n \"name\": \"updateOpenLimitOrder\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"newSl\",\n \"type\": \"uint192\"\n }\n ],\n \"name\": \"updateSl\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint16\",\n \"name\": \"pairIndex\",\n \"type\": \"uint16\"\n },\n {\n \"internalType\": \"uint8\",\n \"name\": \"index\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"uint192\",\n \"name\": \"newTp\",\n \"type\": \"uint192\"\n }\n ],\n \"name\": \"updateTp\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n] as const satisfies Abi;\n\n","/**\n * ABI encoders for all Ostium trading contract function calls.\n */\n\nimport { type Address, type Hex, encodeFunctionData, getAddress } from 'viem';\nimport { TRADING_ABI } from './internal/contract.js';\nimport { ERC20_ABI } from './internal/erc20.js';\nimport type { OstiumTrade, BuilderFee } from './internal/ostium-schema.js';\nimport { OpenOrderType } from './internal/ostium-schema.js';\nimport type { EncodedTx } from './types.js';\n\nfunction tx(to: Address, data: Hex): EncodedTx {\n return { to, data, value: 0n };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Trading contract encoders\n// ────────────────────────────────────────────────────────────────────────────\n\nexport function encodeOpenTrade(\n trade: OstiumTrade,\n builderFee: BuilderFee,\n orderType: OpenOrderType,\n slippageP: bigint,\n tradingAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: TRADING_ABI,\n functionName: 'openTrade',\n args: [\n {\n collateral: trade.collateral,\n openPrice: trade.openPrice,\n tp: trade.tp,\n sl: trade.sl,\n trader: trade.trader,\n leverage: Number(trade.leverage),\n pairIndex: Number(trade.pairIndex),\n index: Number(trade.index),\n buy: trade.buy,\n isDayTrade: trade.isDayTrade ?? false\n },\n {\n builder: builderFee.builder,\n builderFee: Number(builderFee.builderFee),\n },\n orderType,\n slippageP,\n ],\n });\n return tx(tradingAddress, data);\n}\n\nexport function encodeCloseTradeMarket(\n pairIndex: bigint,\n index: bigint,\n closePercentage: bigint,\n marketPrice: bigint,\n slippageP: bigint,\n tradingAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: TRADING_ABI,\n functionName: 'closeTradeMarket',\n args: [Number(pairIndex), Number(index), Number(closePercentage), marketPrice, Number(slippageP)],\n });\n return tx(tradingAddress, data);\n}\n\nexport function encodeCancelLimitOrder(\n pairIndex: bigint,\n orderIndex: bigint,\n tradingAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: TRADING_ABI,\n functionName: 'cancelOpenLimitOrder',\n args: [Number(pairIndex), Number(orderIndex)],\n });\n return tx(tradingAddress, data);\n}\n\nexport function encodeCloseTradeMarketTimeout(\n orderId: bigint,\n retry: boolean,\n tradingAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: TRADING_ABI,\n functionName: 'closeTradeMarketTimeout',\n args: [orderId, retry],\n });\n return tx(tradingAddress, data);\n}\n\nexport function encodeOpenTradeMarketTimeout(\n orderId: bigint,\n tradingAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: TRADING_ABI,\n functionName: 'openTradeMarketTimeout',\n args: [orderId],\n });\n return tx(tradingAddress, data);\n}\n\nexport function encodeUpdateOpenLimitOrder(\n pairIndex: bigint,\n orderIndex: bigint,\n price: bigint,\n tp: bigint,\n sl: bigint,\n tradingAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: TRADING_ABI,\n functionName: 'updateOpenLimitOrder',\n args: [Number(pairIndex), Number(orderIndex), price, tp, sl],\n });\n return tx(tradingAddress, data);\n}\n\nexport function encodeUpdateTp(\n pairIndex: bigint,\n index: bigint,\n newTp: bigint,\n tradingAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: TRADING_ABI,\n functionName: 'updateTp',\n args: [Number(pairIndex), Number(index), newTp],\n });\n return tx(tradingAddress, data);\n}\n\nexport function encodeUpdateSl(\n pairIndex: bigint,\n index: bigint,\n newSl: bigint,\n tradingAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: TRADING_ABI,\n functionName: 'updateSl',\n args: [Number(pairIndex), Number(index), newSl],\n });\n return tx(tradingAddress, data);\n}\n\nexport function encodeTopUpCollateral(\n pairIndex: bigint,\n index: bigint,\n amount: bigint,\n tradingAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: TRADING_ABI,\n functionName: 'topUpCollateral',\n args: [Number(pairIndex), Number(index), amount],\n });\n return tx(tradingAddress, data);\n}\n\nexport function encodeRemoveCollateral(\n pairIndex: bigint,\n index: bigint,\n amount: bigint,\n tradingAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: TRADING_ABI,\n functionName: 'removeCollateral',\n args: [Number(pairIndex), Number(index), amount],\n });\n return tx(tradingAddress, data);\n}\n\nexport function encodeSetDelegate(\n delegateAddress: Address,\n tradingAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: TRADING_ABI,\n functionName: 'setDelegate',\n args: [getAddress(delegateAddress)],\n });\n return tx(tradingAddress, data);\n}\n\nexport function encodeRemoveDelegate(tradingAddress: Address): EncodedTx {\n const data = encodeFunctionData({\n abi: TRADING_ABI,\n functionName: 'removeDelegate',\n args: [],\n });\n return tx(tradingAddress, data);\n}\n\n/**\n * Wraps inner calldata in delegatedAction(trader, callData).\n * Used internally by the DelegatedSignerStrategy.\n */\nexport function encodeDelegatedAction(\n traderAddress: Address,\n callData: Hex,\n tradingAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: TRADING_ABI,\n functionName: 'delegatedAction',\n args: [getAddress(traderAddress), callData],\n });\n return tx(tradingAddress, data);\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// ERC-20 encoders\n// ────────────────────────────────────────────────────────────────────────────\n\nexport function encodeUsdcApprove(\n spender: Address,\n amount: bigint,\n usdcAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: ERC20_ABI,\n functionName: 'approve',\n args: [getAddress(spender), amount],\n });\n return tx(usdcAddress, data);\n}\n\nexport function encodeErc20Transfer(\n to: Address,\n amount: bigint,\n tokenAddress: Address,\n): EncodedTx {\n const data = encodeFunctionData({\n abi: ERC20_ABI,\n functionName: 'transfer',\n args: [getAddress(to), amount],\n });\n return tx(tokenAddress, data);\n}\n","import type { Address } from 'viem';\nimport type { EncodedTx } from '../types.js';\nimport type { SignerStrategy } from './index.js';\nimport { encodeDelegatedAction } from '../encoder.js';\n\n/**\n * Delegated signer — the private key belongs to a delegate account that has\n * been granted access via trading.setDelegate() by the actual trader.\n *\n * prepare() wraps every transaction in delegatedAction(traderAddress, callData)\n * so the delegate can execute the trade on the trader's behalf.\n */\nexport class DelegatedSignerStrategy implements SignerStrategy {\n readonly traderAddress: Address;\n\n constructor(traderAddress: Address) {\n this.traderAddress = traderAddress;\n }\n\n prepare(encoded: EncodedTx): EncodedTx {\n return encodeDelegatedAction(this.traderAddress, encoded.data, encoded.to);\n }\n}\n","import type { Address } from 'viem';\nimport type { EncodedTx } from '../types.js';\nimport type { ClientMode } from '../config.js';\nimport { SelfSignerStrategy } from './self.js';\nimport { DelegatedSignerStrategy } from './delegated.js';\n\nexport interface SignerStrategy {\n /**\n * The on-chain trading account. Used as trade.trader in all contract calls\n * and as the owner of USDC allowances.\n */\n readonly traderAddress: Address;\n\n /**\n * Prepare a transaction for submission.\n * - Self mode: returns tx unchanged.\n * - Delegated mode: wraps data in delegatedAction(traderAddress, data).\n */\n prepare(encoded: EncodedTx): EncodedTx;\n}\n\n/**\n * @param selfGasless - true when in Self + Gasless mode (EOA = trader, Safe = delegate).\n * In this mode we use DelegatedSignerStrategy even though `traderAddress` is not set\n * in the config — the Safe submits delegatedAction(eoaAddress, callData) on behalf of\n * the EOA, so all contract calls must be wrapped.\n */\nexport function createSigner(\n mode: ClientMode,\n traderAddress: Address,\n): SignerStrategy {\n if (mode !== 'self-self') {\n return new DelegatedSignerStrategy(traderAddress);\n }\n return new SelfSignerStrategy(traderAddress);\n}\n","import { createWalletClient, http, type Address } from 'viem';\nimport { privateKeyToAccount } from 'viem/accounts';\nimport { arbitrum, arbitrumSepolia } from 'viem/chains';\nimport type { EncodedTx, SubmissionResult } from '../types.js';\nimport type { OstiumClientConfig } from '../config.js';\nimport type { SubmissionStrategy } from './index.js';\nimport { OstiumError, OstiumErrorCode } from '../errors.js';\n\nfunction classifySubmitError(err: unknown): OstiumError {\n const msg = err instanceof Error ? err.message : String(err);\n const lower = msg.toLowerCase();\n\n if (\n lower.includes('execution reverted') ||\n lower.includes('reverted with reason') ||\n lower.includes('contract function') ||\n lower.includes('revert')\n ) {\n return new OstiumError(`Contract reverted: ${msg}`, OstiumErrorCode.CONTRACT_ERROR, err);\n }\n\n if (\n lower.includes('fetch') ||\n lower.includes('etimedout') ||\n lower.includes('econnrefused') ||\n lower.includes('enotfound') ||\n lower.includes('network') ||\n lower.includes('timeout') ||\n lower.includes('connection')\n ) {\n return new OstiumError(`Network error: ${msg}`, OstiumErrorCode.NETWORK_ERROR, err);\n }\n\n return new OstiumError(\n `Transaction submission failed: ${msg}`,\n OstiumErrorCode.SUBMISSION_FAILED,\n err,\n );\n}\n\n/**\n * Self-submission strategy — the signer's EOA pays gas.\n * Requires rpcUrl in the config.\n */\nexport class SelfSubmissionStrategy implements SubmissionStrategy {\n readonly effectiveSender: Address;\n private readonly send: (encoded: EncodedTx) => Promise<`0x${string}`>;\n\n constructor(config: OstiumClientConfig, testnet: boolean) {\n if (!config.privateKey) {\n throw new OstiumError(\n 'privateKey is required for self-submission mode',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n if (!config.rpcUrl) {\n throw new OstiumError(\n 'rpcUrl is required for self-submission mode',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n const chain = testnet ? arbitrumSepolia : arbitrum;\n const account = privateKeyToAccount(config.privateKey);\n const walletClient = createWalletClient({ account, chain, transport: http(config.rpcUrl) });\n this.effectiveSender = account.address;\n this.send = (encoded) =>\n walletClient.sendTransaction({ account, to: encoded.to, data: encoded.data, value: encoded.value });\n }\n\n async submit(encoded: EncodedTx): Promise<SubmissionResult> {\n try {\n const txHash = await this.send(encoded);\n return { txHash };\n } catch (err) {\n throw classifySubmitError(err);\n }\n }\n}\n","import { createPublicClient, http, type Address } from 'viem';\nimport { privateKeyToAccount } from 'viem/accounts';\nimport { arbitrum, arbitrumSepolia } from 'viem/chains';\nimport { entryPoint07Address } from 'viem/account-abstraction';\nimport { createSmartAccountClient } from 'permissionless';\nimport { createPimlicoClient } from 'permissionless/clients/pimlico';\nimport { toSafeSmartAccount as toLightSmartAccount } from 'permissionless/accounts';\nimport type { EncodedTx, SubmissionResult } from '../types.js';\nimport type { OstiumClientConfig } from '../config.js';\nimport type { SubmissionStrategy } from './index.js';\nimport { OstiumError, OstiumErrorCode } from '../errors.js';\n\nfunction classifyGaslessError(err: unknown): OstiumError {\n const msg = err instanceof Error ? err.message : String(err);\n const lower = msg.toLowerCase();\n\n if (\n lower.includes('execution reverted') ||\n lower.includes('reverted with reason') ||\n lower.includes('revert') ||\n lower.includes('userop reverted') ||\n lower.includes('aa') // ERC-4337 AA error codes\n ) {\n return new OstiumError(`Contract reverted: ${msg}`, OstiumErrorCode.CONTRACT_ERROR, err);\n }\n\n if (lower.includes('429') || lower.includes('rate limit') || lower.includes('too many requests')) {\n return new OstiumError(\n `Pimlico rate limit exceeded — retry after 60 seconds. ${msg}`,\n OstiumErrorCode.NETWORK_ERROR,\n err,\n );\n }\n\n if (lower.includes('sponsorship') || lower.includes('policy')) {\n return new OstiumError(\n `Pimlico sponsorship policy error — check sponsorshipPolicyId config. ${msg}`,\n OstiumErrorCode.INVALID_CONFIG,\n err,\n );\n }\n\n if (\n lower.includes('fetch') ||\n lower.includes('etimedout') ||\n lower.includes('econnrefused') ||\n lower.includes('network') ||\n lower.includes('timeout') ||\n lower.includes('bundle') ||\n lower.includes('connection')\n ) {\n return new OstiumError(`Network error: ${msg}`, OstiumErrorCode.NETWORK_ERROR, err);\n }\n\n return new OstiumError(\n `Gasless submission failed: ${msg}`,\n OstiumErrorCode.SUBMISSION_FAILED,\n err,\n );\n}\n\n/**\n * Gasless submission strategy — submits transactions via Pimlico as ERC-4337\n * UserOperations signed by a Safe 1.4.1 smart account.\n *\n * The Safe address is the submitter's effectiveSender. In Self + Gasless mode\n * the Safe address also becomes the trader's on-chain identity (trade.trader).\n *\n * Use the static GaslessSubmissionStrategy.create() factory to initialise —\n * it resolves the Safe address before returning, so effectiveSender is always\n * available synchronously after construction.\n */\nexport class GaslessSubmissionStrategy implements SubmissionStrategy {\n readonly effectiveSender: Address;\n private readonly testnet: boolean;\n private readonly pimlicoUrl: string;\n private readonly sponsorshipPolicyId?: string;\n // Cached Safe account — derived once in create(), reused on every submit().\n private readonly safeAccount: Awaited<ReturnType<typeof toLightSmartAccount>>;\n\n private constructor(\n testnet: boolean,\n pimlicoUrl: string,\n sponsorshipPolicyId: string | undefined,\n safeAccount: Awaited<ReturnType<typeof toLightSmartAccount>>,\n ) {\n this.testnet = testnet;\n this.pimlicoUrl = pimlicoUrl;\n this.sponsorshipPolicyId = sponsorshipPolicyId;\n this.safeAccount = safeAccount;\n this.effectiveSender = safeAccount.address;\n }\n\n static async create(\n config: OstiumClientConfig,\n testnet: boolean,\n ): Promise<GaslessSubmissionStrategy> {\n if (!config.privateKey) {\n throw new OstiumError(\n 'privateKey is required for gasless submission mode',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n if (!config.pimlicoUrl) {\n throw new OstiumError(\n 'pimlicoUrl is required for gasless mode',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n\n const chain = testnet ? arbitrumSepolia : arbitrum;\n const pimlicoUrl = config.pimlicoUrl;\n const chainRpc =\n config.rpcUrl ??\n (testnet ? 'https://sepolia-rollup.arbitrum.io/rpc' : 'https://arb1.arbitrum.io/rpc');\n const rpcTransport = http(chainRpc);\n const publicClient = createPublicClient({ chain, transport: rpcTransport });\n const owner = privateKeyToAccount(config.privateKey);\n\n try {\n const safeAccount = await toLightSmartAccount({\n client: publicClient,\n owners: [owner],\n entryPoint: {\n address: entryPoint07Address,\n version: '0.7',\n },\n version: '1.4.1',\n });\n\n return new GaslessSubmissionStrategy(testnet, pimlicoUrl, config.sponsorshipPolicyId, safeAccount);\n } catch (err) {\n throw new OstiumError(\n `Failed to derive Safe smart account address: ${err instanceof Error ? err.message : String(err)}`,\n OstiumErrorCode.INVALID_CONFIG,\n err,\n );\n }\n }\n\n async submit(encoded: EncodedTx): Promise<SubmissionResult> {\n const chain = this.testnet ? arbitrumSepolia : arbitrum;\n\n const pimlicoClient = createPimlicoClient({\n transport: http(this.pimlicoUrl),\n entryPoint: {\n address: entryPoint07Address,\n version: '0.7',\n },\n });\n\n try {\n const smartAccountClient = createSmartAccountClient({\n account: this.safeAccount,\n chain,\n bundlerTransport: http(this.pimlicoUrl),\n paymaster: pimlicoClient,\n userOperation: {\n estimateFeesPerGas: async () =>\n (await pimlicoClient.getUserOperationGasPrice()).fast,\n },\n ...(this.sponsorshipPolicyId && {\n paymasterContext: {\n sponsorshipPolicyId: this.sponsorshipPolicyId,\n },\n }),\n });\n\n const txHash = await smartAccountClient.sendTransaction({\n to: encoded.to,\n data: encoded.data,\n value: encoded.value,\n });\n\n return { txHash, smartAccountAddress: this.safeAccount.address };\n } catch (err) {\n throw classifyGaslessError(err);\n }\n }\n}\n","import type { Address } from 'viem';\nimport type { EncodedTx, SubmissionResult } from '../types.js';\nimport type { ClientMode, OstiumClientConfig } from '../config.js';\nimport { SelfSubmissionStrategy } from './self.js';\nimport { GaslessSubmissionStrategy } from './gasless.js';\n\nexport interface SubmissionStrategy {\n /**\n * The address that will appear as msg.sender on-chain.\n * - Self mode: EOA address derived from privateKey.\n * - Gasless mode: Safe smart-account address derived from privateKey.\n */\n readonly effectiveSender: Address;\n\n submit(encoded: EncodedTx): Promise<SubmissionResult>;\n}\n\n/**\n * Factory — synchronous for Self mode, but for Gasless mode the returned\n * strategy's effectiveSender is pre-resolved via GaslessSubmissionStrategy.create().\n * Call createSubmitter() which handles both cases uniformly.\n */\nexport async function createSubmitter(\n config: OstiumClientConfig,\n testnet: boolean,\n mode: ClientMode,\n): Promise<SubmissionStrategy> {\n if (mode === 'self-gasless' || mode === 'delegated-gasless') {\n return GaslessSubmissionStrategy.create(config, testnet);\n }\n if (!config.rpcUrl) {\n throw new Error('rpcUrl is required for self-submission mode');\n }\n return new SelfSubmissionStrategy(config, testnet);\n}\n","/** Mainnet (Arbitrum One) Ostium subgraph endpoint. */\nexport const DEFAULT_SUBGRAPH_ENDPOINT =\n 'https://api.subgraph.ormilabs.com/api/public/67a599d5-c8d2-4cc4-9c4d-2975a97bc5d8/subgraphs/ost-prod/live/gn';\n\n/** Testnet (Arbitrum Sepolia) Ostium subgraph endpoint. */\nexport const DEFAULT_SUBGRAPH_ENDPOINT_TESTNET =\n 'https://api.subgraph.ormilabs.com/api/public/67a599d5-c8d2-4cc4-9c4d-2975a97bc5d8/subgraphs/ost-sep/live/gn';\n\n/** Default Ostium builder API base URL (prices, OHLC, WebSocket stream). */\nexport const DEFAULT_BUILDER_API_URL = 'https://builder.ostium.io';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Client config\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Configuration for {@link OstiumSubgraphClient}.\n *\n * All fields are optional — calling `OstiumSubgraphClient.create()` with no\n * arguments connects to the mainnet subgraph.\n *\n * ```ts\n * // Mainnet (default)\n * const client = OstiumSubgraphClient.create();\n *\n * // Testnet (Arbitrum Sepolia)\n * const client = OstiumSubgraphClient.create({ testnet: true });\n *\n * // Custom endpoints\n * const client = OstiumSubgraphClient.create({\n * endpoint: 'https://my-subgraph.example.com/graphql',\n * builderApiUrl: 'https://my-builder-api.example.com',\n * });\n * ```\n */\nexport interface OstiumSubgraphClientConfig {\n /**\n * Subgraph GraphQL endpoint.\n * When omitted, defaults to the mainnet or testnet subgraph based on `testnet`.\n */\n endpoint?: string;\n /**\n * Use the Arbitrum Sepolia testnet subgraph.\n * Ignored when `endpoint` is set explicitly. Defaults to false (mainnet).\n */\n testnet?: boolean;\n /**\n * Override the builder API base URL used for live prices, OHLC candles, and the\n * WebSocket stream. Defaults to `https://builder.ostium.io`.\n */\n builderApiUrl?: string;\n}\n","export enum OstiumSubgraphErrorCode {\n INVALID_CONFIG = 'INVALID_CONFIG',\n INVALID_PARAMS = 'INVALID_PARAMS',\n FETCH_FAILED = 'FETCH_FAILED',\n NOT_FOUND = 'NOT_FOUND',\n PARSE_ERROR = 'PARSE_ERROR',\n}\n\nexport class OstiumSubgraphError extends Error {\n constructor(\n message: string,\n public readonly code: OstiumSubgraphErrorCode,\n public readonly cause?: unknown,\n ) {\n super(message);\n this.name = 'OstiumSubgraphError';\n }\n}\n","// Internal GQL query strings. Not exported from the SDK — the client formats\n// raw responses before returning.\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Pairs (sorted by id)\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst PAIR_FIELDS = `\n id\n from\n to\n maxLeverage\n overnightMaxLeverage\n takerFeeP\n maxOI\n longOI\n shortOI\n group { id name maxLeverage }\n lastUpdateTimestamp\n buyVolume\n sellVolume\n decayRate\n netVolThreshold\n priceImpactK\n accRolloverLong\n accRolloverShort\n lastRolloverBlock\n lastRolloverLongPure\n brokerPremium\n isNegativeRolloverAllowed\n lastTradePrice\n spreadP`;\n\nexport const GetPairsAndGroupsQuery = `\nquery GetPairsAndGroups {\n pairs(orderBy: id, orderDirection: asc, subgraphError: allow) {\n ${PAIR_FIELDS}\n }\n groups { id name maxLeverage }\n}`;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Open trades — full pair sub-fields needed for live PnL calculations\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst PAIR_FULL = `\n pair {\n id from to\n maxLeverage overnightMaxLeverage\n takerFeeP\n maxOI longOI shortOI\n group { id name maxLeverage }\n lastUpdateTimestamp\n buyVolume sellVolume decayRate netVolThreshold priceImpactK\n accRolloverLong accRolloverShort lastRolloverBlock lastRolloverLongPure\n brokerPremium isNegativeRolloverAllowed lastTradePrice\n }`;\n\nconst TRADE_CORE = `\n id tradeID trader\n isOpen isBuy isDayTrade\n index tradeType\n collateral notional tradeNotional leverage highestLeverage\n openPrice stopLossPrice takeProfitPrice\n rollover timestamp`;\n\nexport const GetTraderOpenTradesQuery = `\nquery GetTraderOpenTrades($trader: String!, $skip: Int!, $first: Int!) {\n trades(\n where: { isOpen: true, trader: $trader }\n skip: $skip first: $first\n orderBy: timestamp orderDirection: desc\n ) {\n ${TRADE_CORE}\n ${PAIR_FULL}\n }\n}`;\n\nexport const GetAllOpenTradesQuery = `\nquery GetAllOpenTrades($skip: Int!, $first: Int!) {\n trades(\n where: { isOpen: true }\n skip: $skip first: $first\n orderBy: timestamp orderDirection: desc\n ) {\n ${TRADE_CORE}\n ${PAIR_FULL}\n }\n}`;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Executed orders — fills\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst ORDER_FIELDS = `\n id tradeID limitID trader\n pair { id from to group { id name } }\n orderAction orderType isBuy\n isPending isCancelled cancelReason\n collateral notional tradeNotional leverage\n price priceAfterImpact priceImpactP\n vaultFee devFee oracleFee rolloverFee liquidationFee\n builder builderFee\n profitPercent totalProfitPercent amountSentToTrader\n closePercent\n initiatedTx initiatedBlock initiatedAt\n executedTx executedBlock executedAt`;\n\n/**\n * Build an executed-fills query with optional filters. Pass `false` for any\n * filter to omit it from both the query signature and the `where` clause.\n */\nexport function buildExecutedFillsQuery(opts: {\n hasTrader: boolean;\n hasPairId: boolean;\n hasTimeRange: boolean;\n}): string {\n const args: string[] = ['$skip: Int!', '$first: Int!'];\n const conditions: string[] = ['isPending: false', 'isCancelled: false'];\n\n if (opts.hasTrader) {\n args.push('$trader: String!');\n conditions.push('trader: $trader');\n }\n if (opts.hasPairId) {\n args.push('$pairId: String!');\n conditions.push('pair: $pairId');\n }\n if (opts.hasTimeRange) {\n args.push('$startSec: BigInt!', '$endSec: BigInt!');\n conditions.push('executedAt_gte: $startSec', 'executedAt_lte: $endSec');\n }\n\n return `\nquery GetExecutedFills(${args.join(', ')}) {\n orders(\n where: { ${conditions.join(', ')} }\n skip: $skip first: $first\n orderBy: executedAt orderDirection: desc\n ) { ${ORDER_FIELDS} }\n}`;\n}\n\n/**\n * Build a query for orders at any status (pending, executed, cancelled).\n * - `hasOrderIds`: filter by `id_in` (on-chain order ids).\n * - `hasInitiatedTxHashes`: filter by `initiatedTx_in` (submission tx hashes).\n * - `hasTrader`: filter by trader address.\n * At most one filter mode should be active (caller enforces).\n */\nexport function buildGetOrdersQuery(opts: {\n hasOrderIds: boolean;\n hasInitiatedTxHashes: boolean;\n hasTrader: boolean;\n}): string {\n const args: string[] = ['$skip: Int!', '$first: Int!'];\n const conditions: string[] = [];\n\n if (opts.hasOrderIds) {\n args.push('$ids: [String!]!');\n conditions.push('id_in: $ids');\n }\n if (opts.hasInitiatedTxHashes) {\n args.push('$txHashes: [String!]!');\n conditions.push('initiatedTx_in: $txHashes');\n }\n if (opts.hasTrader) {\n args.push('$trader: String!');\n conditions.push('trader: $trader');\n }\n\n const where = conditions.length > 0 ? `where: { ${conditions.join(', ')} }` : '';\n\n return `\nquery GetOrders(${args.join(', ')}) {\n orders(\n ${where}\n skip: $skip first: $first\n orderBy: initiatedAt orderDirection: desc\n ) { ${ORDER_FIELDS} }\n}`;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Active limit orders (sorted by updatedAt desc)\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst LIMIT_FIELDS = `\n id uniqueId orderId trader\n pair { id from to group { id name } }\n isBuy limitType isActive executionStarted\n collateral notional tradeNotional leverage\n openPrice takeProfitPrice stopLossPrice\n block initiatedAt updatedAt`;\n\nexport const GetTraderActiveLimitsQuery = `\nquery GetTraderActiveLimits($trader: String!, $skip: Int!, $first: Int!) {\n limits(\n where: { isActive: true, trader: $trader }\n skip: $skip first: $first\n orderBy: updatedAt orderDirection: desc\n ) { ${LIMIT_FIELDS} }\n}`;\n","/**\n * Paginate a subgraph query, optionally capped at `max` total results.\n * Calls `fetcher(skip, first)` in a loop until either the page is short\n * (no more results) or the cap is reached. Pass `max = Infinity` to fetch\n * exhaustively.\n */\nexport async function paginateAll<T>(\n fetcher: (skip: number, first: number) => Promise<T[]>,\n batchSize = 1000,\n max = Infinity,\n initialSkip = 0,\n): Promise<T[]> {\n const results: T[] = [];\n let skip = initialSkip;\n\n while (results.length < max) {\n const remaining = max - results.length;\n const fetchSize = Math.min(batchSize, remaining);\n const page = await fetcher(skip, fetchSize);\n results.push(...page);\n if (page.length < fetchSize) break;\n skip += fetchSize;\n }\n\n return results;\n}\n","/** USDC — collateral, fees, notional (6 decimal places). */\nexport const USDC_DECIMALS = 6;\n\n/** Prices, OI token amounts, funding / rollover accumulators (18 decimal places). */\nexport const TOKEN_DECIMALS = 18;\n\n/** Leverage stored on-chain as leverage × 100 (2 decimal places). */\nexport const LEVERAGE_DECIMALS = 2;\n\nexport const PRECISION_6 = 1_000_000n;\nexport const PRECISION_18 = 1_000_000_000_000_000_000n;\n","import { formatUnits, parseUnits } from 'viem';\nimport { USDC_DECIMALS, TOKEN_DECIMALS, LEVERAGE_DECIMALS } from './precision.js';\nimport type { RawTrade } from './raw.js';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Formatters (raw on-chain bigint string → human-readable number)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Format a USDC value (6 decimals) to a JS number.\n * Safe for undefined / null / pre-formatted floats.\n */\nexport function formatUsdc(value?: bigint | string | number | null): number {\n if (value === undefined || value === null) return 0;\n if (typeof value === 'number') return value;\n if (typeof value === 'string' && value.includes('.')) return parseFloat(value);\n return Number(formatUnits(BigInt(value), USDC_DECIMALS));\n}\n\n/**\n * Format a token value (18 decimals) to a JS number.\n * Used for prices, OI amounts, and funding / rollover accumulators.\n */\nexport function formatTokens(value?: bigint | string | number | null): number {\n if (value === undefined || value === null) return 0;\n if (typeof value === 'number') return value;\n if (typeof value === 'string' && value.includes('.')) return parseFloat(value);\n return Number(formatUnits(BigInt(value), TOKEN_DECIMALS));\n}\n\n/**\n * Format a leverage value (2 decimals) to a JS number.\n * e.g. \"1000\" → 10 (10×).\n */\nexport function formatLeverage(value?: bigint | string | number | null): number {\n if (value === undefined || value === null) return 0;\n if (typeof value === 'number') return value;\n if (typeof value === 'string' && value.includes('.')) return parseFloat(value);\n return Number(formatUnits(BigInt(value), LEVERAGE_DECIMALS));\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Parsers (human-readable number → raw on-chain bigint)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/** Parse a USDC amount to bigint with 6 decimals (e.g. \"100.50\" → 100_500_000n). */\nexport function parseUsdc(value: number | string): bigint {\n return parseUnits(value.toString(), USDC_DECIMALS);\n}\n\n/** Parse a price / token amount to bigint with 18 decimals. */\nexport function parseTokens(value: number | string): bigint {\n return parseUnits(value.toString(), TOKEN_DECIMALS);\n}\n\n/** Parse leverage to bigint with 2 decimals (e.g. 10 → 1000n). */\nexport function parseLeverage(value: number | string): bigint {\n return parseUnits(value.toString(), LEVERAGE_DECIMALS);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Returns the effective max leverage string for a trade.\n * Prefers pair.maxLeverage → group.maxLeverage → \"1\".\n */\nexport function getMaxLeverage(trade: RawTrade): string {\n return trade.pair.maxLeverage && trade.pair.maxLeverage !== '0'\n ? trade.pair.maxLeverage\n : trade.pair.group?.maxLeverage ?? '1';\n}\n\n/**\n * Seconds elapsed since the pair's last price / funding snapshot.\n * Used in dynamic spread calculations.\n */\nexport function timeElapsedSince(pair: { lastUpdateTimestamp?: string; lastFundingTime?: string }): string {\n const now = Math.floor(Date.now() / 1000);\n const last =\n parseInt(pair.lastUpdateTimestamp ?? '0') ||\n parseInt(pair.lastFundingTime ?? '0');\n return (now - last).toString();\n}\n","// Internal PnL helpers — used by the subgraph client to enrich open trades.\n// Not exported from the SDK.\n\nimport {\n GetCurrentRolloverFee,\n GetTradeRolloverFee,\n GetTradeLiquidationPrice,\n GetEffectiveMaxLeverage,\n CalculateDynamicPriceImpact,\n CurrentTradeProfitRaw,\n CurrentTotalProfitRaw,\n CurrentTotalProfitP,\n} from '@ostium/formulae';\nimport {\n formatUsdc,\n formatTokens,\n formatLeverage,\n parseUsdc,\n parseTokens,\n parseLeverage,\n getMaxLeverage,\n timeElapsedSince,\n} from './decimal.js';\nimport type { RawPair, RawTrade } from './raw.js';\nimport type { PriceData } from '../types.js';\n\n/** Internal PnL snapshot returned by `getTradePnL`. */\nexport interface TradePnL {\n /** Raw price PnL in USD before rollover. */\n pnl: number;\n /** PnL % after rollover, relative to collateral. */\n pnlPercent: number;\n /** Accrued rollover fee in USD. */\n rollover: number;\n /** Net PnL in USD after rollover. */\n netPnl: number;\n /** collateral + netPnl. */\n netValue: number;\n /** Estimated liquidation price. */\n liquidationPrice: number;\n /** Mid price after dynamic spread is applied. */\n priceAfterImpact: number;\n}\n\nexport const EMPTY_PNL: TradePnL = {\n pnl: 0,\n pnlPercent: 0,\n rollover: 0,\n netPnl: 0,\n netValue: 0,\n liquidationPrice: 0,\n priceAfterImpact: 0,\n};\n\nfunction getRolloverAccumulator(\n pair: RawPair,\n isBuy: boolean,\n blockNumber: bigint | string,\n): string {\n const accRollover = isBuy\n ? (pair.accRolloverLong ?? '0')\n : (pair.accRolloverShort ?? '0');\n\n return GetCurrentRolloverFee(\n accRollover,\n pair.lastRolloverBlock ?? '0',\n pair.brokerPremium ?? '0',\n pair.lastRolloverLongPure ?? '0',\n isBuy,\n pair.isNegativeRolloverAllowed ?? false,\n blockNumber.toString(),\n );\n}\n\nfunction getTradeRolloverFeeRaw(trade: RawTrade, currentRolloverAccumulator: string): bigint {\n return BigInt(\n GetTradeRolloverFee(\n trade.rollover,\n currentRolloverAccumulator,\n trade.collateral,\n trade.leverage,\n ),\n );\n}\n\nfunction getLiquidationPrice(trade: RawTrade, rolloverRaw: bigint): number {\n if (!trade.leverage || trade.leverage === '0') return 0;\n if (!trade.openPrice || trade.openPrice === '0') return 0;\n if (!trade.collateral || trade.collateral === '0') return 0;\n\n try {\n const maxLeverage = GetEffectiveMaxLeverage(\n getMaxLeverage(trade),\n trade.pair.overnightMaxLeverage ?? '0',\n trade.isDayTrade ?? false,\n );\n\n return formatTokens(\n GetTradeLiquidationPrice(\n trade.openPrice,\n trade.isBuy,\n trade.collateral,\n trade.leverage,\n rolloverRaw.toString(),\n '0', // funding excluded\n maxLeverage,\n ),\n );\n } catch {\n return 0;\n }\n}\n\nfunction getPriceImpact(\n marketPrice: PriceData,\n isBuy: boolean,\n isOpen: boolean,\n pair: RawPair,\n collateral: number,\n leverage: number,\n): { priceImpactP: string; priceAfterImpact: string } {\n if (!marketPrice.mid) return { priceImpactP: '0', priceAfterImpact: '0' };\n\n return CalculateDynamicPriceImpact(\n parseTokens(marketPrice.mid).toString(),\n parseTokens(marketPrice.ask).toString(),\n parseTokens(marketPrice.bid).toString(),\n isOpen,\n isBuy,\n parseUsdc(collateral).toString(),\n parseLeverage(leverage).toString(),\n pair.buyVolume ?? '0',\n pair.sellVolume ?? '0',\n pair.decayRate ?? '0',\n timeElapsedSince(pair),\n pair.netVolThreshold ?? '0',\n pair.priceImpactK ?? '0',\n );\n}\n\n/**\n * Full PnL snapshot for an open trade at the current block.\n * Rollover is the only ongoing fee included (funding excluded by design).\n */\nexport function getTradePnL(\n trade: RawTrade,\n marketPrice: PriceData,\n blockNumber: bigint,\n): TradePnL {\n if (!trade?.pair || !marketPrice?.mid || !blockNumber) return EMPTY_PNL;\n\n const rolloverAcc = getRolloverAccumulator(trade.pair, trade.isBuy, blockNumber);\n const rolloverRaw = getTradeRolloverFeeRaw(trade, rolloverAcc);\n\n const liquidationPrice = getLiquidationPrice(trade, rolloverRaw);\n\n // Price impact (display only — PnL uses mid to avoid scary spread PnL).\n const impactResult = getPriceImpact(\n marketPrice,\n trade.isBuy,\n false,\n trade.pair,\n formatUsdc(trade.collateral),\n formatLeverage(trade.leverage),\n );\n\n const priceForPnL = parseTokens(marketPrice.mid).toString();\n\n const pnlRaw = BigInt(\n CurrentTradeProfitRaw(\n trade.openPrice,\n priceForPnL,\n trade.isBuy,\n trade.leverage,\n trade.highestLeverage,\n trade.collateral,\n ),\n );\n\n const totalProfitRaw = BigInt(\n CurrentTotalProfitRaw(\n trade.openPrice,\n priceForPnL,\n trade.isBuy,\n trade.leverage,\n trade.highestLeverage,\n trade.collateral,\n rolloverRaw.toString(),\n '0', // funding excluded\n ),\n );\n\n const pnlPercentRaw = BigInt(\n CurrentTotalProfitP(totalProfitRaw.toString(), trade.collateral),\n );\n\n return {\n pnl: formatUsdc(pnlRaw),\n pnlPercent: formatUsdc(pnlPercentRaw),\n rollover: formatUsdc(rolloverRaw),\n netPnl: formatUsdc(totalProfitRaw),\n netValue: formatUsdc(totalProfitRaw) + formatUsdc(trade.collateral),\n liquidationPrice,\n priceAfterImpact: formatTokens(impactResult.priceAfterImpact),\n };\n}\n","/** Subgraph symbol → display name overrides. */\nconst PAIR_NAME_MAP: Record<string, string> = {\n CL: 'WTI',\n HG: 'XCU',\n SPX: 'US500',\n NDX: 'US100',\n DJI: 'US30',\n DAX: 'GER40',\n FTSE: 'UK100',\n HSI: 'HK50',\n NIK: 'JP225',\n};\n\n/** Map a raw subgraph symbol to its canonical display name. */\nexport function normalizePairName(symbol: string): string {\n return PAIR_NAME_MAP[symbol] ?? symbol;\n}\n","import WS from 'ws';\nimport { normalizePairName } from './pair-names.js';\nimport type { PriceData, PriceTick, Candle, CandleResolution } from '../types.js';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// REST — all prices\n// ─────────────────────────────────────────────────────────────────────────────\n\ninterface PricesApiResponse {\n prices: RawPriceTick[];\n stale: boolean;\n generatedAt: number;\n}\n\ninterface RawPriceTick {\n feed_id: string;\n pair: string;\n from: string;\n to: string;\n bid: number;\n mid: number;\n ask: number;\n isMarketOpen: boolean;\n isDayTradingClosed: boolean;\n secondsToToggleIsDayTradingClosed: number;\n timestampSeconds: number;\n}\n\n/**\n * Fetch the live price feed from `{builderApiUrl}/v1/prices`.\n * Returns a record keyed by raw `${from}/${to}` (e.g. `\"BTC/USD\"`, `\"CL/USD\"`).\n * Returns `{}` on 503 (upstream feed not connected).\n */\nexport async function fetchLivePrices(builderApiUrl: string): Promise<Record<string, PriceData>> {\n const res = await fetch(`${builderApiUrl}/v1/prices`);\n\n if (res.status === 503) return {};\n\n if (!res.ok) {\n throw new Error(`Live prices endpoint returned ${res.status} ${res.statusText}`);\n }\n\n const json = (await res.json()) as PricesApiResponse;\n if (!Array.isArray(json.prices)) {\n throw new Error('Live prices endpoint returned an unexpected payload');\n }\n\n // Keyed by raw subgraph name (no normalization) so internal pair lookups\n // using rawPair.from / rawPair.to continue to work correctly.\n const result: Record<string, PriceData> = {};\n for (const item of json.prices) {\n if (!item.from || !item.to) continue;\n result[`${item.from}/${item.to}`] = {\n mid: item.mid,\n bid: item.bid,\n ask: item.ask,\n isMarketOpen: item.isMarketOpen ?? true,\n isDayTradingClosed: item.isDayTradingClosed ?? false,\n secondsToToggleIsDayTradingClosed: item.secondsToToggleIsDayTradingClosed ?? -1,\n };\n }\n return result;\n}\n\nfunction rawTickToPublic(item: RawPriceTick, pairId?: string): PriceTick {\n const from = normalizePairName(item.from);\n const to = normalizePairName(item.to);\n return {\n pairId,\n feedId: item.feed_id,\n pair: `${from}-${to}`,\n from,\n to,\n bid: item.bid,\n mid: item.mid,\n ask: item.ask,\n isMarketOpen: item.isMarketOpen ?? true,\n isDayTradingClosed: item.isDayTradingClosed ?? false,\n secondsToToggleIsDayTradingClosed: item.secondsToToggleIsDayTradingClosed ?? -1,\n timestampSeconds: item.timestampSeconds,\n };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// REST — OHLC candles\n// ─────────────────────────────────────────────────────────────────────────────\n\ninterface RawOhlcCandle {\n from: string;\n to: string;\n time: number; // Unix milliseconds\n open: number;\n high: number;\n low: number;\n close: number;\n}\n\ninterface OhlcApiResponse {\n data: RawOhlcCandle[];\n lastRequestTimestamp: number | null;\n}\n\n/**\n * Fetch OHLC candles from `{builderApiUrl}/v1/ohlc`.\n *\n * @param rawPair - Pair in raw subgraph `\"FROM-TO\"` format (e.g. `\"BTC-USD\"`, `\"CL-USD\"`).\n * @param fromMs - Start time in Unix milliseconds.\n * @param toMs - End time in Unix milliseconds.\n * @param resolution - Candle resolution string.\n */\nexport async function fetchCandles(\n builderApiUrl: string,\n rawPair: string,\n fromMs: number,\n toMs: number,\n resolution: CandleResolution,\n): Promise<Candle[]> {\n const res = await fetch(`${builderApiUrl}/v1/ohlc`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n pair: rawPair,\n fromTimestampSeconds: Math.floor(fromMs / 1000),\n toTimestampSeconds: Math.floor(toMs / 1000),\n resolution,\n }),\n });\n\n if (!res.ok) {\n throw new Error(`OHLC endpoint returned ${res.status} ${res.statusText}`);\n }\n\n const json = (await res.json()) as OhlcApiResponse;\n return json.data.map(c => ({\n pairFrom: normalizePairName(c.from),\n pairTo: normalizePairName(c.to),\n time: c.time,\n open: c.open,\n high: c.high,\n low: c.low,\n close: c.close,\n }));\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// WebSocket — live price stream\n// ─────────────────────────────────────────────────────────────────────────────\n\ntype TickHandler = (tick: PriceTick) => void;\ntype SnapshotHandler = (ticks: PriceTick[]) => void;\n\n/**\n * WebSocket client for the Ostium live price stream.\n *\n * ```ts\n * // Via OstiumClient / OstiumSubgraphClient (recommended — pairIds resolved automatically):\n * const stream = client.streamPrices([0, 1]); // BTC and ETH by pairId\n *\n * stream.onSnapshot(ticks => console.log('snapshot:', ticks.length));\n * stream.onTick(tick => console.log(tick.pair, tick.mid));\n *\n * stream.subscribe([2]); // add pair 2\n * stream.unsubscribe([0]); // remove pair 0\n * stream.close();\n * ```\n *\n * The socket connects to `{builderApiUrl}/v1/prices/stream` — `https://` is\n * automatically rewritten to `wss://` (and `http://` to `ws://`). When\n * `streamPrices(pairIds)` is called with ids, the SDK sends\n * `{ type: \"subscribe\", pairs: [\"FROM-TO\", ...] }` on `open` (same wire format\n * as {@link OstiumPriceStream.subscribe}).\n *\n * `subscribe` / `unsubscribe` accept the same `pairId` values used everywhere\n * else in the SDK. `PriceTick.pair` / `.from` / `.to` use normalized display\n * names (e.g. `\"UK100\"` not `\"FTSE\"`).\n */\nexport class OstiumPriceStream {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly ws: any; // ws.WebSocket — typed as any to stay compatible with both Node and Bun\n private readonly tickHandlers: Set<TickHandler> = new Set();\n private readonly snapshotHandlers: Set<SnapshotHandler> = new Set();\n /** pairId (string) → raw \"FROM-TO\" name for the WS API. */\n private readonly pairRawNameCache: Map<string, string>;\n /** raw \"FROM-TO\" name → pairId (string) for mapping incoming ticks back to SDK ids. */\n private readonly rawNamePairIdCache: Map<string, string>;\n\n private constructor(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ws: any,\n pairRawNameCache: Map<string, string>,\n rawNamePairIdCache: Map<string, string>,\n initialSubscribeRawPairs?: string[],\n ) {\n this.ws = ws;\n this.pairRawNameCache = pairRawNameCache;\n this.rawNamePairIdCache = rawNamePairIdCache;\n if (initialSubscribeRawPairs?.length) {\n ws.once('open', () => {\n ws.send(JSON.stringify({ type: 'subscribe', pairs: initialSubscribeRawPairs }));\n });\n }\n ws.on('message', (data: Buffer | string) => {\n let msg: { type: string; data: unknown };\n try {\n msg = JSON.parse(typeof data === 'string' ? data : data.toString());\n } catch {\n return;\n }\n if (msg.type === 'snapshot' && Array.isArray(msg.data)) {\n const ticks = (msg.data as RawPriceTick[]).map(item =>\n rawTickToPublic(item, this.rawNamePairIdCache.get(`${item.from}-${item.to}`)),\n );\n for (const h of this.snapshotHandlers) h(ticks);\n } else if (msg.type === 'tick' && msg.data) {\n const item = msg.data as RawPriceTick;\n const tick = rawTickToPublic(item, this.rawNamePairIdCache.get(`${item.from}-${item.to}`));\n for (const h of this.tickHandlers) h(tick);\n }\n });\n }\n\n /**\n * Open a WebSocket connection to the live price stream.\n *\n * Uses the `ws` package which correctly handles case-insensitive `Connection`\n * header values (required for Cloudflare-proxied endpoints).\n *\n * @param builderApiUrl - Base URL (e.g. `\"https://builder.ostium.io\"`). The `http`/`https`\n * scheme is automatically converted to `ws`/`wss`.\n * @param rawPairs - Optional raw `\"FROM-TO\"` names (from\n * `OstiumSubgraphClient.streamPrices` pairIds). Sent as\n * `{ type: \"subscribe\", pairs }` after the socket opens.\n * @param pairRawNameCache - pairId → raw name map; passed in by the subgraph client so\n * `subscribe` / `unsubscribe` can accept pairIds.\n */\n static connect(\n builderApiUrl: string,\n rawPairs?: string[],\n pairRawNameCache: Map<string, string> = new Map(),\n ): OstiumPriceStream {\n const base = builderApiUrl\n .replace(/\\/$/, '')\n .replace(/^https?:\\/\\//, match => match === 'https://' ? 'wss://' : 'ws://');\n const url = `${base}/v1/prices/stream`;\n const initial = rawPairs && rawPairs.length > 0 ? rawPairs : undefined;\n const ws = new WS(url, {\n headers: { 'User-Agent': 'ostium-sdk', 'Accept': '*/*' },\n });\n const rawNamePairIdCache = new Map<string, string>();\n for (const [pairId, rawName] of pairRawNameCache.entries()) {\n rawNamePairIdCache.set(rawName, pairId);\n }\n return new OstiumPriceStream(ws, pairRawNameCache, rawNamePairIdCache, initial);\n }\n\n /**\n * Register a callback that fires on every incoming price tick.\n * Returns an unsubscribe function.\n */\n onTick(handler: TickHandler): () => void {\n this.tickHandlers.add(handler);\n return () => { this.tickHandlers.delete(handler); };\n }\n\n /**\n * Register a callback that fires once with the full snapshot sent on connect.\n * Returns an unsubscribe function.\n */\n onSnapshot(handler: SnapshotHandler): () => void {\n this.snapshotHandlers.add(handler);\n return () => { this.snapshotHandlers.delete(handler); };\n }\n\n /** Register a one-time callback that fires when the connection is established. */\n onOpen(handler: () => void): this {\n this.ws.once('open', handler);\n return this;\n }\n\n /** Register an error callback. */\n onError(handler: (event: Error) => void): this {\n this.ws.on('error', handler);\n return this;\n }\n\n /** Register a callback that fires when the connection closes. */\n onClose(handler: (code: number, reason: string) => void): this {\n this.ws.on('close', handler);\n return this;\n }\n\n /**\n * Add pairs to the active filter. Accepts the same `pairId` values used\n * throughout the SDK (numeric string or number).\n * Sends `{ type: \"subscribe\", pairs: [...rawNames] }` to the server.\n */\n subscribe(pairIds: Array<string | number>): this {\n this.send({ type: 'subscribe', pairs: this.resolveRawNames(pairIds) });\n return this;\n }\n\n /**\n * Remove pairs from the active filter. Accepts the same `pairId` values used\n * throughout the SDK.\n * Sends `{ type: \"unsubscribe\", pairs: [...rawNames] }` to the server.\n */\n unsubscribe(pairIds: Array<string | number>): this {\n this.send({ type: 'unsubscribe', pairs: this.resolveRawNames(pairIds) });\n return this;\n }\n\n /** Close the WebSocket connection. */\n close(): void {\n this.ws.close();\n }\n\n /** Underlying WebSocket ready state (`0=CONNECTING`, `1=OPEN`, `2=CLOSING`, `3=CLOSED`). */\n get readyState(): number {\n return this.ws.readyState as number;\n }\n\n private resolveRawNames(pairIds: Array<string | number>): string[] {\n return pairIds.map(id => {\n const cached = this.pairRawNameCache.get(String(id));\n // Fallback: treat unrecognised strings as raw names (e.g. direct \"BTC-USD\")\n return cached ?? String(id);\n });\n }\n\n private send(msg: unknown): void {\n if (this.ws.readyState === WS.OPEN) {\n this.ws.send(JSON.stringify(msg));\n }\n }\n}\n","import type { MarginSummary, PairPosition } from '../types.js';\n\nexport function aggregateMarginSummary(pairPositions: PairPosition[]): MarginSummary {\n let accountValue = 0;\n let totalCollateralUsed = 0;\n let totalNtlPos = 0;\n let totalRawPnlUsd = 0;\n let totalCumRollover = 0;\n let totalWithdrawable = 0;\n\n for (const { position } of pairPositions) {\n const collateral = parseFloat(position.collateralUsed) || 0;\n const ntl = parseFloat(position.ntl) || 0;\n const pnl = parseFloat(position.unrealizedPnl) || 0;\n const rollover = parseFloat(position.cumRollover) || 0;\n const withdrawable = parseFloat(position.maxWithdrawable) || 0;\n accountValue += collateral + pnl;\n totalCollateralUsed += collateral;\n totalNtlPos += ntl;\n totalRawPnlUsd += pnl;\n totalCumRollover += rollover;\n totalWithdrawable += withdrawable;\n }\n\n return {\n accountValue: accountValue.toString(),\n totalCollateralUsed: totalCollateralUsed.toString(),\n totalNtlPos: totalNtlPos.toString(),\n totalRawPnlUsd: totalRawPnlUsd.toString(),\n totalCumRollover: totalCumRollover.toString(),\n totalWithdrawable: totalWithdrawable.toString(),\n };\n}\n","import { formatUsdc, formatTokens, formatLeverage } from './decimal.js';\nimport { normalizePairName } from './pair-names.js';\nimport type {\n RawPair,\n RawTrade,\n RawOrder,\n RawLimit,\n} from './raw.js';\nimport type {\n Pair,\n PairPosition,\n Fill,\n Order,\n OpenOrder,\n PriceData,\n} from '../types.js';\nimport type { TradePnL } from './calculations.js';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Constants\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst MIN_NOTIONAL = '5.0';\nconst MIN_NOTIONAL_NUM = 5;\n/** Arbitrum L2 block production rate. */\nconst BLOCKS_PER_SECOND_ARBITRUM = 4;\n/** Default period for rollover rate display in `PairCtx`. */\nconst ROLLOVER_RATE_HOURS = 8;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction lowerHex(value: string | null | undefined): string | null {\n if (!value) return null;\n const lower = value.toLowerCase();\n return lower.startsWith('0x') ? lower : `0x${lower}`;\n}\n\nexport function pairMaxLeverage(pair: RawPair): number {\n const maxLevString =\n (!pair.maxLeverage || pair.maxLeverage === '0')\n ? (pair.group.maxLeverage ?? '0')\n : pair.maxLeverage;\n return formatLeverage(maxLevString);\n}\n\n/**\n * Max collateral that can be removed from a single position before crossing\n * its effective max leverage: `collateral × (1 − currentLeverage / maxLeverage)`.\n */\nexport function maxWithdrawForPosition(\n collateral: number,\n currentLeverage: number,\n maxLeverage: number,\n): number {\n if (collateral <= 0) return 0;\n if (currentLeverage <= 0) return 0;\n if (maxLeverage <= 0) return 0;\n if (currentLeverage >= maxLeverage) return 0;\n\n const max = collateral * (1 - currentLeverage / maxLeverage);\n if (max < 0) return 0;\n if (max > collateral) return collateral;\n return max;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Pair\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Build a `Pair` from a raw subgraph pair, merging in live price/market context.\n * Falls back to `lastTradePrice` when no live price is given.\n */\nexport function formatPair(raw: RawPair, price?: PriceData): Pair {\n const lastPrice = formatTokens(raw.lastTradePrice);\n const mid = price?.mid;\n const refPrice = mid && mid > 0 ? mid : lastPrice;\n\n const buyOI_usd = formatTokens(raw.longOI) * lastPrice;\n const sellOI_usd = formatTokens(raw.shortOI) * lastPrice;\n const maxOI_usd = formatUsdc(raw.maxOI);\n\n const minSz = refPrice > 0 ? MIN_NOTIONAL_NUM / refPrice : 0;\n const maxBSz = refPrice > 0 ? Math.max(0, (maxOI_usd - buyOI_usd) / refPrice) : 0;\n const maxSSz = refPrice > 0 ? Math.max(0, (maxOI_usd - sellOI_usd) / refPrice) : 0;\n\n const rolloverRate = getRolloverRateDisplay(raw);\n\n return {\n pairId: String(raw.id),\n pairTo: normalizePairName(raw.to),\n pairFrom: normalizePairName(raw.from),\n minSz: minSz.toString(),\n maxBSz: maxBSz.toString(),\n maxSSz: maxSSz.toString(),\n minNtl: MIN_NOTIONAL,\n maxLeverage: pairMaxLeverage(raw),\n overnightMaxLeverage: raw.overnightMaxLeverage ? formatLeverage(raw.overnightMaxLeverage) : 0,\n rolloverFeePerBlock: formatTokens(raw.lastRolloverLongPure ?? '0').toString(),\n openInterest: (buyOI_usd + sellOI_usd).toString(),\n buyOpenInterest: buyOI_usd.toString(),\n sellOpenInterest: sellOI_usd.toString(),\n maxOpenInterest: maxOI_usd.toString(),\n category: raw.group.name,\n rolloverRate,\n midPx: price ? price.mid.toString() : '0',\n askPx: price ? price.ask.toString() : '0',\n bidPx: price ? price.bid.toString() : '0',\n isMarketOpen: price?.isMarketOpen ?? true,\n isDayTradingClosed: price?.isDayTradingClosed ?? false,\n secondsToToggleIsDayTradingClosed: price?.secondsToToggleIsDayTradingClosed ?? -1,\n };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Rollover rate (8hr percent, long & short)\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * UI-display rollover rate using Ostium's contract sign convention:\n * positive contract fee = trader pays => display as negative.\n */\nfunction getRolloverRateDisplay(raw: RawPair): { long: string; short: string } {\n const longPure = formatTokens(raw.lastRolloverLongPure ?? '0');\n const premium = formatTokens(raw.brokerPremium ?? '0');\n\n let contractLong = longPure + premium;\n let contractShort = -longPure + premium;\n\n if (!raw.isNegativeRolloverAllowed) {\n contractLong = Math.max(contractLong, 0);\n contractShort = Math.max(contractShort, 0);\n }\n\n const displayPerBlockLong = -contractLong;\n const displayPerBlockShort = -contractShort;\n\n const blocksInPeriod = ROLLOVER_RATE_HOURS * 60 * 60 * BLOCKS_PER_SECOND_ARBITRUM;\n const periodMultiplier = blocksInPeriod * 100;\n\n return {\n long: (displayPerBlockLong * periodMultiplier).toString(),\n short: (displayPerBlockShort * periodMultiplier).toString(),\n };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Open positions\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function formatPosition(\n raw: RawTrade,\n price: PriceData | undefined,\n pnl: TradePnL,\n maxLeverage: number\n): PairPosition {\n const collateral = formatUsdc(raw.collateral);\n const tradeNotional = formatTokens(raw.tradeNotional);\n const leverage = formatLeverage(raw.leverage);\n const mid = price?.mid ?? formatTokens(raw.pair.lastTradePrice);\n const ntl = tradeNotional * mid;\n const roe = collateral > 0 ? pnl.netPnl / collateral : 0;\n\n return {\n position: {\n pairTo: normalizePairName(raw.pair.to),\n pairFrom: normalizePairName(raw.pair.from),\n pairId: String(raw.pair.id),\n pid: raw.tradeID,\n idx: parseInt(raw.index || '0') || 0,\n side: raw.isBuy ? 'B' : 'S',\n szi: tradeNotional.toString(),\n entryPx: formatTokens(raw.openPrice).toString(),\n leverage: leverage.toString(),\n ntl: ntl.toString(),\n unrealizedPnl: pnl.netPnl.toString(),\n returnOnEquity: roe.toString(),\n liquidationPx: pnl.liquidationPrice.toString(),\n collateralUsed: collateral.toString(),\n cumRollover: (pnl.rollover * -1).toString(),\n ...(raw.takeProfitPrice && raw.takeProfitPrice !== '0' ? { tpPx: formatTokens(raw.takeProfitPrice).toString() } : {}),\n ...(raw.stopLossPrice && raw.stopLossPrice !== '0' ? { slPx: formatTokens(raw.stopLossPrice).toString() } : {}),\n openTimestamp: parseInt(raw.timestamp || '0') * 1000,\n isDayTrade: raw.isDayTrade ?? false,\n maxLeverage: maxLeverage.toString(),\n maxWithdrawable: maxWithdrawForPosition(collateral, leverage, maxLeverage).toString(),\n },\n };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Fills\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function formatFill(raw: RawOrder): Fill {\n const collateral = formatUsdc(raw.collateral);\n const tradeNotional = formatTokens(raw.tradeNotional);\n const priceImpactP = formatTokens(raw.priceImpactP);\n const devFee = formatUsdc(raw.devFee);\n const vaultFee = formatUsdc(raw.vaultFee);\n const oracleFee = formatUsdc(raw.oracleFee);\n const rolloverFee = formatUsdc(raw.rolloverFee);\n const liquidation = formatUsdc(raw.liquidationFee);\n const builderFee = formatUsdc(raw.builderFee);\n const totalProfitPercent = formatUsdc(raw.totalProfitPercent);\n\n // Pass the subgraph's orderAction / orderType through verbatim so non-trade\n // actions like `RemoveCollateral` aren't misreported as `Open`.\n const action = raw.orderAction;\n const type = raw.orderType;\n\n const isClose = action === 'Close' || action === 'StopLoss' || action === 'TakeProfit' || action === 'CloseDayTrade';\n\n const opening = action === 'Open' ? (devFee + vaultFee).toString() : '0';\n const rollover = isClose ? rolloverFee.toString() : '0';\n const liquidationFee = action === 'Liquidation' ? liquidation.toString() : '0';\n const closedPnl = isClose || action === 'Liquidation'\n ? (collateral * totalProfitPercent / 100 - devFee - vaultFee - oracleFee).toString()\n : '0';\n const px = formatTokens(raw.priceAfterImpact)\n const szi = tradeNotional\n const pxBeforeImpact = raw.isBuy\n ? px / (1 + priceImpactP / 100)\n : px / (1 - priceImpactP / 100);\n const priceImpactFee = Math.abs((px - pxBeforeImpact) * szi);\n\n return {\n pairTo: normalizePairName(raw.pair.to),\n pairFrom: normalizePairName(raw.pair.from),\n pairId: String(raw.pair.id),\n oid: raw.id,\n pid: raw.tradeID,\n side: raw.isBuy ? 'B' : 'S',\n action,\n type,\n px: px.toString(),\n szi: szi.toString(),\n collateralUsed: collateral.toString(),\n fees: {\n opening,\n rollover,\n liquidation: liquidationFee,\n builder: builderFee.toString(),\n priceImpact: priceImpactFee.toString(),\n },\n closedPnl,\n hash: lowerHex(raw.executedTx) ?? '',\n time: parseInt(raw.executedAt || '0') * 1000,\n };\n}\n\nexport function formatOrder(raw: RawOrder): Order {\n return {\n ...formatFill(raw),\n initiatedTx: lowerHex(raw.initiatedTx) ?? '',\n initiatedTime: parseInt(raw.initiatedAt || '0') * 1000,\n isPending: raw.isPending,\n isCancelled: raw.isCancelled,\n ...(raw.cancelReason ? { cancelReason: raw.cancelReason } : {}),\n };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Open limit orders\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function formatOpenOrder(raw: RawLimit): OpenOrder {\n const tp = raw.takeProfitPrice && raw.takeProfitPrice !== '0' ? formatTokens(raw.takeProfitPrice) : null;\n const sl = raw.stopLossPrice && raw.stopLossPrice !== '0' ? formatTokens(raw.stopLossPrice) : null;\n\n const orderType = raw.limitType === 'STOP' ? 'Stop' : 'Limit';\n\n return {\n pairTo: normalizePairName(raw.pair.to),\n pairFrom: normalizePairName(raw.pair.from),\n pairId: String(raw.pair.id),\n idx: parseInt(raw.orderId || '0') || 0,\n side: raw.isBuy ? 'B' : 'S',\n limitPx: formatTokens(raw.openPrice).toString(),\n szi: formatTokens(raw.tradeNotional).toString(),\n ...(tp !== null ? { tpPx: tp.toString() } : {}),\n ...(sl !== null ? { slPx: sl.toString() } : {}),\n orderType,\n timestamp: parseInt(raw.initiatedAt || '0') * 1000,\n };\n}\n","import type {\n OpenPositionsResponse,\n Position,\n PriceTick,\n} from '../types.js';\nimport { OstiumPriceStream } from './pricing.js';\nimport { aggregateMarginSummary } from './aggregations.js';\nimport { maxWithdrawForPosition } from './formatters.js';\n\ntype UpdateHandler = (positions: OpenPositionsResponse) => void;\ntype TickSource = Pick<OstiumPriceStream, 'onTick' | 'onSnapshot' | 'onOpen' | 'onError' | 'onClose' | 'close'>;\n\nfunction cloneResponse(response: OpenPositionsResponse): OpenPositionsResponse {\n return {\n pairPositions: response.pairPositions.map(pairPos => ({\n position: { ...pairPos.position },\n })),\n marginSummary: { ...response.marginSummary },\n time: response.time,\n };\n}\n\nfunction applyTickToPosition(position: Position, tick: PriceTick): Position {\n const size = parseFloat(position.szi) || 0;\n const entry = parseFloat(position.entryPx) || 0;\n const collateral = parseFloat(position.collateralUsed) || 0;\n const maxLeverage = parseFloat(position.maxLeverage) || 0;\n // cumRollover is stored negated (cost convention): add it back to get raw fee impact on PnL.\n const rollover = parseFloat(position.cumRollover) || 0;\n const isLong = position.side === 'B';\n\n const ntl = size * tick.mid;\n const rawPnl = isLong ? (tick.mid - entry) * size : (entry - tick.mid) * size;\n const netPnl = rawPnl + rollover;\n const roe = collateral > 0 ? netPnl / collateral : 0;\n const currentLeverage = collateral > 0 ? ntl / collateral : 0;\n // liquidationPx is rollover-dependent, not price-dependent — remains valid until the next getOpenPositions() call.\n const maxWithdrawable = maxWithdrawForPosition(collateral, currentLeverage, maxLeverage);\n\n return {\n ...position,\n ntl: ntl.toString(),\n unrealizedPnl: netPnl.toString(),\n returnOnEquity: roe.toString(),\n maxWithdrawable: maxWithdrawable.toString(),\n };\n}\n\nfunction updateResponseWithTick(\n current: OpenPositionsResponse,\n tick: PriceTick,\n timestampMs: number,\n): OpenPositionsResponse {\n if (!tick.pairId) return current;\n\n let changed = false;\n const pairPositions = current.pairPositions.map(pairPos => {\n if (String(pairPos.position.pairId) !== String(tick.pairId)) {\n return pairPos;\n }\n changed = true;\n return {\n ...pairPos,\n position: applyTickToPosition(pairPos.position, tick),\n };\n });\n\n if (!changed) return current;\n\n return {\n pairPositions,\n marginSummary: aggregateMarginSummary(pairPositions),\n time: timestampMs,\n };\n}\n\nexport class OstiumPositionUpdatesStream {\n private readonly priceStream?: TickSource;\n private readonly updateHandlers: Set<UpdateHandler> = new Set();\n private current: OpenPositionsResponse;\n private readonly trackedPairIds: Set<string>;\n\n constructor(\n initial: OpenPositionsResponse,\n trackedPairIds: string[],\n priceStream?: TickSource,\n ) {\n this.current = cloneResponse(initial);\n this.priceStream = priceStream;\n this.trackedPairIds = new Set(trackedPairIds);\n\n if (!priceStream) return;\n\n priceStream.onSnapshot(ticks => {\n this.ingestSnapshot(ticks);\n });\n\n priceStream.onTick(tick => {\n this.ingestTick(tick);\n });\n }\n\n onUpdate(handler: UpdateHandler): () => void {\n this.updateHandlers.add(handler);\n return () => { this.updateHandlers.delete(handler); };\n }\n\n onOpen(handler: () => void): this {\n this.priceStream?.onOpen(handler);\n return this;\n }\n\n onError(handler: (event: Error) => void): this {\n this.priceStream?.onError(handler);\n return this;\n }\n\n onClose(handler: (code: number, reason: string) => void): this {\n this.priceStream?.onClose(handler);\n return this;\n }\n\n getCurrent(): OpenPositionsResponse {\n return cloneResponse(this.current);\n }\n\n /**\n * Apply a single externally sourced price tick to the tracked positions.\n *\n * Use this when your app already has its own websocket connection and you want\n * the SDK to handle only the position recalculation logic.\n */\n ingestTick(tick: PriceTick): void {\n if (!tick.pairId || !this.trackedPairIds.has(String(tick.pairId))) return;\n const next = updateResponseWithTick(this.current, tick, tick.timestampSeconds * 1000);\n if (next !== this.current) {\n this.current = next;\n this.emit(next);\n }\n }\n\n /**\n * Apply a batch of externally sourced ticks, such as a websocket snapshot.\n */\n ingestSnapshot(ticks: PriceTick[]): void {\n let next = this.current;\n for (const tick of ticks) {\n if (!tick.pairId || !this.trackedPairIds.has(String(tick.pairId))) continue;\n next = updateResponseWithTick(next, tick, tick.timestampSeconds * 1000);\n }\n if (next !== this.current) {\n this.current = next;\n this.emit(next);\n }\n }\n\n close(): void {\n this.priceStream?.close();\n }\n\n private emit(positions: OpenPositionsResponse): void {\n for (const handler of this.updateHandlers) handler(cloneResponse(positions));\n }\n}\n","import { CalculateDynamicPriceImpact } from '@ostium/formulae';\nimport {\n formatUsdc,\n formatTokens,\n parseUsdc,\n parseTokens,\n parseLeverage,\n timeElapsedSince,\n} from './decimal.js';\nimport type { RawPair } from './raw.js';\nimport { normalizePairName } from './pair-names.js';\nimport type {\n PriceData,\n SimSlippageForPair,\n SimSlippageRow,\n SimOrderbookLevel,\n SimOrderbookResponse,\n} from '../types.js';\n\nconst EMPTY_RESULT: SimSlippageForPair = { long: [], short: [] };\n\n/** Max levels-per-side cap exposed by `getSimOrderbook`. */\nconst ORDERBOOK_MAX_LEVELS = 20;\n\n/**\n * Build log-spaced notional levels from ~capacity/3300 up to capacity.\n * The last level snaps to exactly `capacity` so the orderbook always shows the\n * full remaining open-interest as its deepest level.\n *\n * Example with 8 levels and $3.3M capacity → ≈ $1k, $10k, $50k, $100k, $250k, $1M, $2.5M, $3.3M\n */\nfunction generateLogSpacedNotionals(levels: number, capacity: number): number[] {\n const n = Math.min(ORDERBOOK_MAX_LEVELS, Math.max(1, Math.floor(levels)));\n if (capacity <= 0) return [];\n if (n === 1) return [capacity];\n\n const minNtl = Math.max(1, capacity / 3300);\n if (minNtl >= capacity) return [capacity];\n\n const logMin = Math.log(minNtl);\n const logMax = Math.log(capacity);\n\n return Array.from({ length: n }, (_, i) => {\n if (i === n - 1) return capacity;\n const t = i / (n - 1);\n return Math.exp(logMin + t * (logMax - logMin));\n });\n}\n\n/** Side capacities + bid/mid/ask BigNumber strings + cached time-elapsed for one pair. */\ninterface PairContext {\n remLong: number;\n remShort: number;\n midBN: string;\n askBN: string;\n bidBN: string;\n timeElapsed: string;\n}\n\nfunction buildPairContext(raw: RawPair, price: PriceData): PairContext {\n const maxOIUsd = formatUsdc(raw.maxOI);\n const longOIUsd = formatTokens(raw.longOI) * price.mid;\n const shortOIUsd = formatTokens(raw.shortOI) * price.mid;\n return {\n remLong: Math.max(0, maxOIUsd - longOIUsd),\n remShort: Math.max(0, maxOIUsd - shortOIUsd),\n midBN: parseTokens(price.mid).toString(),\n askBN: parseTokens(price.ask).toString(),\n bidBN: parseTokens(price.bid).toString(),\n timeElapsed: timeElapsedSince(raw),\n };\n}\n\n/** Run `CalculateDynamicPriceImpact` for one (pair, side, ntl) tuple. */\nfunction priceImpactForLevel(\n raw: RawPair,\n ctx: PairContext,\n ntl: number,\n isBuy: boolean,\n): { priceImpactP: string; priceAfterImpact: string } {\n return CalculateDynamicPriceImpact(\n ctx.midBN,\n ctx.askBN,\n ctx.bidBN,\n true, // isOpen\n isBuy,\n parseUsdc(ntl).toString(),\n parseLeverage(1).toString(),\n raw.buyVolume ?? '0',\n raw.sellVolume ?? '0',\n raw.decayRate ?? '0',\n ctx.timeElapsed,\n raw.netVolThreshold ?? '0',\n raw.priceImpactK ?? '0',\n );\n}\n\n/**\n * Simulate the dynamic-spread slippage a long and a short trade of each\n * notional would experience on the given pair. Notionals exceeding the side's\n * remaining open-interest capacity (`maxOI − sideOI`) are dropped.\n *\n * Slippage is the per-side `priceImpactP` returned by `CalculateDynamicPriceImpact`\n * — the same formula the contract and frontend use — formatted as a percentage\n * (e.g. `\"0.5\"` = 0.5 %).\n *\n * @param liveMid Optional override for `price.mid`. Falls back to `price.mid`.\n */\nexport function simulateSlippageForPair(\n raw: RawPair,\n ntls: string[],\n price: PriceData | undefined,\n): SimSlippageForPair {\n if (!price || !price.mid) return EMPTY_RESULT;\n const ctx = buildPairContext(raw, price);\n\n const compute = (isBuy: boolean, capacity: number): SimSlippageRow[] =>\n ntls\n .filter(ntl => {\n const n = Number(ntl);\n return Number.isFinite(n) && n > 0 && n <= capacity;\n })\n .map(ntl => {\n const result = priceImpactForLevel(raw, ctx, Number(ntl), isBuy);\n return { ntl, slippage: formatTokens(result.priceImpactP).toString() };\n });\n\n return {\n long: compute(true, ctx.remLong),\n short: compute(false, ctx.remShort),\n };\n}\n\n/**\n * Build a simulated bid/ask orderbook for one pair using log-spaced notionals\n * from ~capacity/3300 up to the side's full remaining open-interest capacity.\n * `levels` is clamped to `[1, 20]`.\n *\n * - `asks` model long entries — `priceAfterImpact` is the price you'd buy at.\n * - `bids` model short entries — `priceAfterImpact` is the price you'd sell at.\n */\nexport function simulateOrderbookForPair(\n raw: RawPair,\n price: PriceData,\n levels: number,\n): SimOrderbookResponse {\n const safeLevels = Math.min(ORDERBOOK_MAX_LEVELS, Math.max(1, Math.floor(levels)));\n const ctx = buildPairContext(raw, price);\n\n const askNtls = generateLogSpacedNotionals(safeLevels, ctx.remLong);\n const bidNtls = generateLogSpacedNotionals(safeLevels, ctx.remShort);\n\n const toLevel = (ntl: number, isBuy: boolean): SimOrderbookLevel => {\n const result = priceImpactForLevel(raw, ctx, ntl, isBuy);\n const px = formatTokens(result.priceAfterImpact);\n return {\n px: px.toString(),\n sz: (px > 0 ? ntl / px : 0).toString(),\n n: 1,\n };\n };\n\n return {\n pairId: String(raw.id),\n pairFrom: normalizePairName(raw.from),\n pairTo: normalizePairName(raw.to),\n levels: [\n bidNtls.map(n => toLevel(n, false)), // bids: short entries, best (closest to mid) first\n askNtls.map(n => toLevel(n, true)), // asks: long entries, best (closest to mid) first\n ],\n time: Date.now(),\n };\n}\n","import { GraphQLClient } from 'graphql-request';\nimport { DEFAULT_SUBGRAPH_ENDPOINT, DEFAULT_SUBGRAPH_ENDPOINT_TESTNET, DEFAULT_BUILDER_API_URL } from './config.js';\nimport type { OstiumSubgraphClientConfig } from './config.js';\nimport { OstiumSubgraphError, OstiumSubgraphErrorCode } from './errors.js';\nimport {\n GetPairsAndGroupsQuery,\n GetTraderOpenTradesQuery,\n GetAllOpenTradesQuery,\n GetTraderActiveLimitsQuery,\n buildExecutedFillsQuery,\n buildGetOrdersQuery,\n} from './queries.js';\nimport { paginateAll } from './internal/pagination.js';\nimport { getTradePnL, EMPTY_PNL } from './internal/calculations.js';\nimport { fetchLivePrices, fetchCandles, OstiumPriceStream } from './internal/pricing.js';\nimport { OstiumPositionUpdatesStream } from './internal/position-updates.js';\nimport { aggregateMarginSummary } from './internal/aggregations.js';\nimport {\n formatPair,\n formatPosition,\n formatFill,\n formatOrder,\n formatOpenOrder,\n pairMaxLeverage,\n} from './internal/formatters.js';\nimport { formatLeverage } from './internal/decimal.js';\nimport { simulateSlippageForPair, simulateOrderbookForPair } from './internal/sim-slippage.js';\nimport type { RawPair, RawTrade, RawOrder, RawLimit } from './internal/raw.js';\nimport type {\n Pair,\n PairsResponse,\n AllPricesResponse,\n Position,\n PairPosition,\n OpenPositionsResponse,\n Fill,\n Order,\n OpenOrder,\n PriceData,\n GetPairsParams,\n GetOrdersParams,\n GetUserParams,\n GetOpenPositionsParams,\n GetFillsParams,\n GetFillsByTimeParams,\n GetSimSlippageParams,\n SimSlippageByPairId,\n GetSimOrderbookParams,\n SimOrderbookResponse,\n Candle,\n GetCandlesParams,\n} from './types.js';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Client\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport class OstiumSubgraphClient {\n private readonly gql: GraphQLClient;\n private readonly builderApiUrl: string;\n\n /** Cached pair-name (`${from}/${to}`) → `pairId` map. Refreshed lazily. */\n private pairIdCache: Map<string, string> | null = null;\n /** Cached `pairId` → `\"FROM-TO\"` in raw subgraph dash format (used for OHLC API). */\n private pairRawNameCache: Map<string, string> | null = null;\n\n private constructor(gql: GraphQLClient, builderApiUrl: string) {\n this.gql = gql;\n this.builderApiUrl = builderApiUrl;\n }\n\n /**\n * Create a client connected to the Ostium subgraph.\n *\n * Fetches the full pair list at startup so that `streamPrices`, `getCandles`,\n * and `getAllPrices` can resolve pair ids to raw names without an extra round-trip.\n *\n * ```ts\n * // Mainnet (default)\n * const client = await OstiumSubgraphClient.create();\n *\n * // Testnet (Arbitrum Sepolia)\n * const client = await OstiumSubgraphClient.create({ testnet: true });\n * ```\n */\n static async create(config: OstiumSubgraphClientConfig = {}): Promise<OstiumSubgraphClient> {\n const endpoint = config.endpoint\n ?? (config.testnet ? DEFAULT_SUBGRAPH_ENDPOINT_TESTNET : DEFAULT_SUBGRAPH_ENDPOINT);\n\n if (!endpoint.startsWith('http')) {\n throw new OstiumSubgraphError(\n `Invalid subgraph endpoint: ${endpoint}`,\n OstiumSubgraphErrorCode.INVALID_CONFIG,\n );\n }\n\n const client = new OstiumSubgraphClient(\n new GraphQLClient(endpoint),\n config.builderApiUrl ?? DEFAULT_BUILDER_API_URL,\n );\n await client.initPairCache();\n return client;\n }\n\n private async initPairCache(): Promise<void> {\n const rawPairs = await this.fetchRawPairs();\n this.refreshPairIdCache(rawPairs);\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Pairs\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * All trading pairs with computed `minSz`/`maxBSz`/`maxSSz`, live prices, and\n * market-status flags. Pass `pairIds` to restrict to a subset.\n */\n async getPairs(params?: GetPairsParams): Promise<PairsResponse> {\n const [rawPairs, prices] = await Promise.all([\n this.fetchRawPairs(),\n this.fetchLivePricesSafe(),\n ]);\n this.refreshPairIdCache(rawPairs);\n\n let filtered = rawPairs;\n if (params?.pairIds && params.pairIds.length > 0) {\n const requested = new Set(params.pairIds.map(String));\n filtered = rawPairs.filter(p => requested.has(String(p.id)));\n }\n\n return { pairs: filtered.map(p => formatPair(p, prices[`${p.from}/${p.to}`])) };\n }\n\n /** Live mid/bid/ask prices keyed by `pairId`. */\n async getAllPrices(): Promise<AllPricesResponse> {\n const [pairIdMap, prices] = await Promise.all([\n this.ensurePairIdCache(),\n this.fetchLivePricesSafe(),\n ]);\n\n const out: AllPricesResponse['prices'] = {};\n for (const [name, price] of Object.entries(prices)) {\n const id = pairIdMap.get(name);\n if (!id) continue;\n out[id] = {\n ask: price.ask.toString(),\n bid: price.bid.toString(),\n mid: price.mid.toString(),\n };\n }\n return { prices: out };\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Open positions\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Open positions for a trader, sorted newest first, with margin summary.\n *\n * - Fetches live prices automatically.\n * - `blockNumber` is required for live PnL (rollover projection). When omitted,\n * PnL fields are zeroed.\n */\n async getOpenPositions(params: GetOpenPositionsParams): Promise<OpenPositionsResponse> {\n const { user, blockNumber, limit = Infinity, skip: initialSkip = 0 } = params;\n const isGlobal = user === 'ALL';\n\n const [trades, prices] = await Promise.all([\n paginateAll<RawTrade>(\n async (skip, first) => {\n if (isGlobal) {\n const data = await this.query<{ trades: RawTrade[] }>(\n GetAllOpenTradesQuery,\n { skip, first },\n );\n return data.trades;\n }\n const data = await this.query<{ trades: RawTrade[] }>(\n GetTraderOpenTradesQuery,\n { trader: user.toLowerCase(), skip, first },\n );\n return data.trades;\n },\n 1000,\n limit,\n initialSkip,\n ),\n this.fetchLivePricesSafe(),\n ]);\n\n const pairPositions: PairPosition[] = trades.map(trade => {\n const price = prices[`${trade.pair.from}/${trade.pair.to}`];\n const pnl = price && blockNumber ? getTradePnL(trade, price, blockNumber) : EMPTY_PNL;\n\n const maxLev = trade.isDayTrade ? formatLeverage(trade.pair.overnightMaxLeverage) : pairMaxLeverage(trade.pair);\n return formatPosition(trade, price, pnl, maxLev);\n });\n\n const marginSummary = aggregateMarginSummary(pairPositions);\n\n return {\n pairPositions,\n marginSummary,\n time: Date.now(),\n };\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Fills\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Executed fills, sorted by `executedAt desc`.\n *\n * - `user`: pass an address to scope to a single trader, or `'ALL'` to fetch\n * fills across every trader (no trader filter).\n * - `pairId`: optional pair filter — when set, only fills on this pair are returned.\n */\n async getFills(params: GetFillsParams): Promise<Fill[]> {\n return this.fetchFills(params, undefined);\n }\n\n /** Executed fills within an inclusive time range (Unix ms). Same filters as `getFills`. */\n async getFillsByTime(params: GetFillsByTimeParams): Promise<Fill[]> {\n const endTime = params.endTime ?? Date.now();\n return this.fetchFills(params, {\n startSec: Math.floor(params.startTime / 1000).toString(),\n endSec: Math.floor(endTime / 1000).toString(),\n });\n }\n\n private async fetchFills(\n filters: GetFillsParams,\n timeRange: { startSec: string; endSec: string } | undefined,\n ): Promise<Fill[]> {\n const hasTrader = filters.user !== 'ALL';\n const hasPairId = filters.pairId !== undefined;\n const limit = filters.limit ?? 1000;\n const document = buildExecutedFillsQuery({\n hasTrader,\n hasPairId,\n hasTimeRange: timeRange !== undefined,\n });\n\n const orders = await paginateAll<RawOrder>(\n async (skip, first) => {\n const variables: Record<string, unknown> = { skip, first };\n if (hasTrader) variables.trader = (filters.user as string).toLowerCase();\n if (hasPairId) variables.pairId = String(filters.pairId);\n if (timeRange) {\n variables.startSec = timeRange.startSec;\n variables.endSec = timeRange.endSec;\n }\n const data = await this.query<{ orders: RawOrder[] }>(document, variables);\n return data.orders;\n },\n 1000,\n limit,\n );\n return orders.map(formatFill);\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Open limit orders\n // ─────────────────────────────────────────────────────────────────────────\n\n /** Active limit orders for a trader, sorted by `updatedAt desc`. */\n async getOpenOrders({ user }: GetUserParams): Promise<OpenOrder[]> {\n const limits = await paginateAll<RawLimit>(async (skip, first) => {\n const data = await this.query<{ limits: RawLimit[] }>(\n GetTraderActiveLimitsQuery,\n { trader: user.toLowerCase(), skip, first },\n );\n return data.limits;\n });\n return limits.map(formatOpenOrder);\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Orders (any status)\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Fetch orders at any status — pending, executed, or cancelled.\n *\n * - Pass `initiatedTxHashes` (e.g. `[result.txHash]` from `openTrade` / `closeTrade`)\n * to poll by the subgraph `initiatedTx` field.\n * - Pass `orderIds` to look up by on-chain order id (mutually exclusive with\n * `initiatedTxHashes`).\n * - Pass only `user` (or omit on `OstiumClient`) to get recent orders for\n * a trader regardless of status.\n */\n async getOrders(params: GetOrdersParams = {}): Promise<Order[]> {\n const hasOrderIds = !!(params.orderIds && params.orderIds.length > 0);\n const hasInitiatedTxHashes = !!(params.initiatedTxHashes && params.initiatedTxHashes.length > 0);\n if (hasOrderIds && hasInitiatedTxHashes) {\n throw new OstiumSubgraphError(\n 'getOrders: pass either orderIds or initiatedTxHashes, not both',\n OstiumSubgraphErrorCode.INVALID_PARAMS,\n );\n }\n const hasTrader =\n !hasOrderIds && !hasInitiatedTxHashes && !!params.user;\n const limit = params.limit ?? 100;\n\n const document = buildGetOrdersQuery({\n hasOrderIds,\n hasInitiatedTxHashes,\n hasTrader,\n });\n\n const orders = await paginateAll<RawOrder>(\n async (skip, first) => {\n const variables: Record<string, unknown> = { skip, first };\n if (hasOrderIds) variables.ids = params.orderIds!.map(String);\n if (hasInitiatedTxHashes) {\n variables.txHashes = params.initiatedTxHashes!.map(h =>\n typeof h === 'string' ? h.toLowerCase() : h,\n );\n }\n if (hasTrader) variables.trader = (params.user as string).toLowerCase();\n const data = await this.query<{ orders: RawOrder[] }>(document, variables);\n return data.orders;\n },\n 100,\n limit,\n );\n\n return orders.map(formatOrder);\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Simulated slippage\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Simulate the dynamic-spread slippage a long and a short entry of each\n * notional would experience on the given pairs. Notionals exceeding the\n * side's remaining open-interest capacity (`maxOI − sideOI`) are dropped.\n *\n * Computed via `CalculateDynamicPriceImpact` from `@ostium/formulae` using\n * the pair's live OI / decay / threshold params + the current bid/mid/ask\n * from the live-prices feed (collateral = `ntl`, leverage = 1).\n *\n * ```ts\n * const sim = await client.getSimSlippage({\n * pairIds: ['0', '1'],\n * ntls: ['10000', '100000', '1000000'],\n * });\n * // → { '0': { long: [{ ntl, slippage }...], short: [...] }, '1': ... }\n * ```\n */\n async getSimSlippage(params: GetSimSlippageParams): Promise<SimSlippageByPairId> {\n const [rawPairs, prices] = await Promise.all([\n this.fetchRawPairs(),\n this.fetchLivePricesSafe(),\n ]);\n this.refreshPairIdCache(rawPairs);\n\n const requested = new Set(params.pairIds.map(String));\n const out: SimSlippageByPairId = {};\n for (const pair of rawPairs) {\n const id = String(pair.id);\n if (!requested.has(id)) continue;\n const price = prices[`${pair.from}/${pair.to}`];\n out[id] = simulateSlippageForPair(pair, params.ntls, price);\n }\n return out;\n }\n\n /**\n * Build a synthetic bid/ask orderbook for a single pair using the on-chain\n * dynamic-spread params. Each side gets up to `levels` (capped at 20)\n * exponentially-spaced notional levels (`[1, 2, 3, 5] × 10ⁿ`), stopping at\n * the side's remaining open-interest capacity.\n *\n * ```ts\n * const ob = await client.getSimOrderbook({ pairId: '0', levels: 20 });\n * // ob.asks: long-entry levels (you'd buy at `px`)\n * // ob.bids: short-entry levels (you'd sell at `px`)\n * ```\n */\n async getSimOrderbook(params: GetSimOrderbookParams): Promise<SimOrderbookResponse> {\n const targetId = String(params.pairId);\n const levels = params.levels ?? 20;\n\n const [rawPairs, prices] = await Promise.all([\n this.fetchRawPairs(),\n this.fetchLivePricesSafe(),\n ]);\n this.refreshPairIdCache(rawPairs);\n\n const pair = rawPairs.find(p => String(p.id) === targetId);\n if (!pair) {\n throw new OstiumSubgraphError(\n `Pair ${targetId} not found in subgraph response`,\n OstiumSubgraphErrorCode.NOT_FOUND,\n );\n }\n\n const price = prices[`${pair.from}/${pair.to}`];\n if (!price || !price.mid) {\n throw new OstiumSubgraphError(\n `No live price available for ${pair.from}/${pair.to}`,\n OstiumSubgraphErrorCode.NOT_FOUND,\n );\n }\n\n return simulateOrderbookForPair(pair, price, levels);\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // OHLC candles\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Fetch OHLC candles for a pair.\n *\n * `pairId` maps to the raw subgraph pair name internally (e.g. pair `0` →\n * `\"BTC-USD\"`). `from` / `to` are Unix milliseconds; `resolution` is one of\n * `\"1\"`, `\"5\"`, `\"15\"`, `\"60\"`, `\"240\"`, `\"1D\"`.\n *\n * ```ts\n * const candles = await client.getCandles({\n * pairId: 0,\n * from: Date.now() - 7 * 86_400_000,\n * resolution: '1D',\n * });\n * ```\n */\n async getCandles(params: GetCandlesParams): Promise<Candle[]> {\n const rawPair = await this.ensurePairRawName(params.pairId);\n return fetchCandles(\n this.builderApiUrl,\n rawPair,\n params.from,\n params.to ?? Date.now(),\n params.resolution,\n );\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Live price stream (WebSocket)\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Open a WebSocket connection to the live price stream.\n *\n * Optionally filter to a subset of pairs by `pairId` — same values as returned by\n * `getPairs()`. When provided, the client sends `{ type: \"subscribe\", pairs }` on\n * `open` (no `?pairs=` query on the URL). Omit `pairIds` to receive the full feed.\n *\n * The returned `OstiumPriceStream` fires an initial `snapshot` event with all\n * cached ticks, then a `tick` event on every update. `PriceTick.from` / `.to`\n * are normalized display names (e.g. `\"WTI\"` not `\"CL\"`).\n *\n * ```ts\n * const stream = client.streamPrices([0, 1]); // BTC and ETH by pairId\n *\n * stream.onOpen(() => console.log('connected'));\n * stream.onSnapshot(ticks => console.log('snapshot', ticks.length));\n * stream.onTick(tick => console.log(tick.pair, tick.mid));\n *\n * // Dynamically add / remove by pairId:\n * stream.subscribe([2]);\n * stream.unsubscribe([0]);\n * stream.close();\n * ```\n *\n * Requires a runtime with native `WebSocket` (Node.js 18+, Bun, browsers). Bun’s\n * `WebSocket` may fail some `https://` upgrades (e.g. CloudFront); use Node if so.\n */\n streamPrices(pairIds?: Array<string | number>): OstiumPriceStream {\n const cache = this.pairRawNameCache ?? new Map<string, string>();\n const rawNames = pairIds?.map(id => {\n const name = cache.get(String(id));\n if (!name) throw new OstiumSubgraphError(`Pair ${id} not found`, OstiumSubgraphErrorCode.NOT_FOUND);\n return name;\n });\n return OstiumPriceStream.connect(this.builderApiUrl, rawNames, cache);\n }\n\n /**\n * Stream price-driven updates for an existing `getOpenPositions()` response.\n *\n * The SDK subscribes only to the unique pairs present in `initial.pairPositions`,\n * recalculates price-sensitive fields for affected positions on each tick, and\n * emits the full updated response.\n *\n * Pass an existing `priceStream` to reuse a websocket connection your app has\n * already opened. Omit it to let the SDK open and manage a dedicated\n * connection for the tracked pair ids.\n */\n streamPositionUpdates(\n initial: OpenPositionsResponse,\n priceStream?: OstiumPriceStream,\n ): OstiumPositionUpdatesStream {\n const pairIds = [...new Set(initial.pairPositions.map(({ position }) => String(position.pairId)))];\n if (pairIds.length === 0) {\n return new OstiumPositionUpdatesStream(initial, []);\n }\n return new OstiumPositionUpdatesStream(initial, pairIds, priceStream ?? this.streamPrices(pairIds));\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Internal — fetchers, cache, query wrapper\n // ─────────────────────────────────────────────────────────────────────────\n\n private async fetchRawPairs(): Promise<RawPair[]> {\n const data = await this.query<{ pairs: RawPair[] }>(GetPairsAndGroupsQuery);\n return data.pairs;\n }\n\n private refreshPairIdCache(rawPairs: RawPair[]): void {\n this.pairIdCache = new Map(rawPairs.map(p => [`${p.from}/${p.to}`, String(p.id)]));\n this.pairRawNameCache = new Map(rawPairs.map(p => [String(p.id), `${p.from}-${p.to}`]));\n }\n\n private async ensurePairIdCache(): Promise<Map<string, string>> {\n if (this.pairIdCache) return this.pairIdCache;\n this.refreshPairIdCache(await this.fetchRawPairs());\n return this.pairIdCache!;\n }\n\n private async ensurePairRawName(pairId: string | number): Promise<string> {\n if (!this.pairRawNameCache) {\n this.refreshPairIdCache(await this.fetchRawPairs());\n }\n const name = this.pairRawNameCache!.get(String(pairId));\n if (!name) {\n throw new OstiumSubgraphError(\n `Pair ${pairId} not found`,\n OstiumSubgraphErrorCode.NOT_FOUND,\n );\n }\n return name;\n }\n\n /** Wrapped `fetchLivePrices` that swallows network errors and returns `{}`. */\n private async fetchLivePricesSafe(): Promise<Record<string, PriceData>> {\n try {\n return await fetchLivePrices(this.builderApiUrl);\n } catch {\n return {};\n }\n }\n\n private async query<T>(document: string, variables?: Record<string, unknown>): Promise<T> {\n try {\n return await this.gql.request<T>(document, variables);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n const lower = msg.toLowerCase();\n\n if (lower.includes('network') || lower.includes('timeout') || lower.includes('fetch')) {\n throw new OstiumSubgraphError(\n `Subgraph network error: ${msg}`,\n OstiumSubgraphErrorCode.FETCH_FAILED,\n err,\n );\n }\n\n throw new OstiumSubgraphError(\n `Subgraph query failed: ${msg}`,\n OstiumSubgraphErrorCode.FETCH_FAILED,\n err,\n );\n }\n }\n}\n\n// Silence unused-import warning when consumers re-export.\nexport { OstiumPositionUpdatesStream };\nexport type { Position };\n","import {\n createPublicClient,\n createWalletClient,\n formatUnits,\n http,\n maxUint256,\n type Address,\n type PublicClient,\n} from 'viem';\nimport { privateKeyToAccount } from 'viem/accounts';\nimport { arbitrum, arbitrumSepolia } from 'viem/chains';\nimport { ERC20_ABI } from './internal/erc20.js';\nimport { validateBuilderFeeBps } from './internal/builder-fee.js';\nimport { buildTrade, buildBuilderFee } from './internal/open-builder.js';\nimport { parseUsdc, parsePrice } from './internal/decimal.js';\nimport {\n validateCloseParams,\n validateModifyParams,\n} from './internal/validation.js';\nimport { getNetworkConfig } from './internal/contracts.js';\nimport { DEFAULT_SLIPPAGE_PERCENTAGE, MAX_COLLATERAL_USD } from './internal/precision.js';\nimport { OrderType, CancelOrderType } from './types.js';\nimport type {\n OpenTradeParams,\n CloseTradeParams,\n CancelOrderParams,\n ModifyOrderParams,\n UpdateCollateralParams,\n AllowanceStatus,\n Balances,\n SubmissionResult,\n BuiltTxRequest,\n EncodedTx,\n} from './types.js';\nimport type {\n ClientMode,\n OstiumClientConfig,\n SelfSelfParams,\n SelfGaslessParams,\n DelegatedSelfParams,\n DelegatedGaslessParams,\n} from './config.js';\nimport {\n DEFAULT_PIMLICO_URL,\n DEFAULT_PIMLICO_URL_TESTNET,\n hasPrivateKey,\n resolveMode,\n} from './config.js';\nimport { OstiumError, OstiumErrorCode } from './errors.js';\nimport { createSigner, type SignerStrategy } from './signer/index.js';\nimport { createSubmitter, type SubmissionStrategy } from './submitter/index.js';\nimport { OstiumSubgraphClient } from './data/client.js';\nimport { OstiumPositionUpdatesStream } from './data/client.js';\nimport type {\n PairsResponse,\n AllPricesResponse,\n OpenPositionsResponse,\n Fill,\n Order,\n OpenOrder,\n GetPairsParams,\n GetOrdersParams,\n GetUserParams,\n GetOpenPositionsParams,\n GetFillsParams,\n GetFillsByTimeParams,\n GetSimSlippageParams,\n SimSlippageByPairId,\n GetSimOrderbookParams,\n SimOrderbookResponse,\n Candle,\n GetCandlesParams,\n} from './data/types.js';\nimport { OstiumPriceStream } from './data/internal/pricing.js';\nimport {\n encodeOpenTrade,\n encodeCloseTradeMarket,\n encodeCancelLimitOrder,\n encodeCloseTradeMarketTimeout,\n encodeOpenTradeMarketTimeout,\n encodeUpdateOpenLimitOrder,\n encodeUpdateTp,\n encodeUpdateSl,\n encodeTopUpCollateral,\n encodeRemoveCollateral,\n encodeSetDelegate,\n encodeRemoveDelegate,\n encodeUsdcApprove,\n} from './encoder.js';\n\nconst HEX64_RE = /^0x[0-9a-fA-F]{64}$/;\nconst ADDRESS_RE = /^0x[0-9a-fA-F]{40}$/;\n\nfunction validateConfig(config: OstiumClientConfig): void {\n if (config.privateKey && !HEX64_RE.test(config.privateKey)) {\n throw new OstiumError(\n 'privateKey must be a 64-character hex string prefixed with 0x',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n for (const [label, value] of [\n ['traderAddress', config.traderAddress],\n ['delegateAddress', config.delegateAddress],\n ['safeAddress', config.safeAddress],\n ] as const) {\n if (value && !ADDRESS_RE.test(value)) {\n throw new OstiumError(\n `${label} must be a valid 42-character Ethereum address (0x + 40 hex chars)`,\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n }\n if (config.slippageBps !== undefined && (config.slippageBps < 0 || config.slippageBps > 500)) {\n throw new OstiumError(\n 'slippageBps must be between 0 and 500 (0%–5%)',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n if (config.builder !== undefined) {\n const feeError = validateBuilderFeeBps(config.builder.feeBps);\n if (feeError) {\n throw new OstiumError(feeError, OstiumErrorCode.INVALID_CONFIG);\n }\n }\n\n let mode: ClientMode;\n try {\n mode = resolveMode(config);\n } catch {\n throw new OstiumError(\n 'Could not infer client mode from config. Provide the required addresses for the selected factory.',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n\n if (mode === 'self-self' && !config.privateKey && !config.traderAddress) {\n throw new OstiumError(\n 'Self + Self mode requires traderPrivateKey for submission or traderAddress for build-only usage.',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n if (mode === 'self-gasless' && !config.privateKey && (!config.traderAddress || !config.safeAddress)) {\n throw new OstiumError(\n 'Self + Gasless build-only mode requires traderAddress and safeAddress.',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n if (mode === 'delegated-self' && (!config.traderAddress || (!config.privateKey && !config.delegateAddress))) {\n throw new OstiumError(\n 'Delegated + Self mode requires traderAddress and either delegatePrivateKey or delegateAddress.',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n if (\n mode === 'delegated-gasless' &&\n (!config.traderAddress || (!config.privateKey && (!config.delegateAddress || !config.safeAddress)))\n ) {\n throw new OstiumError(\n 'Delegated + Gasless mode requires traderAddress and either delegatePrivateKey or both delegateAddress and safeAddress.',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n}\n\ninterface ContractAddresses {\n trading: Address;\n tradingStorage: Address;\n usdc: Address;\n}\n\ninterface ClientInternals {\n /** Undefined in read-only mode. */\n signer?: SignerStrategy;\n /** Undefined in read-only mode. */\n submitter?: SubmissionStrategy;\n traderAddress?: Address;\n effectiveSender?: Address;\n contracts: ContractAddresses;\n publicClient: PublicClient;\n defaultSlippageBps: number;\n delegated: boolean;\n gasless: boolean;\n /** True when in Self + Gasless mode: EOA is trader, Safe is delegate/submitter. */\n selfGasless: boolean;\n /**\n * Direct EOA submitter for Self + Gasless mode.\n * Used by setupGaslessDelegation() and approveUsdc() — both must be signed\n * by the EOA (not via the Safe delegate).\n */\n eoaSubmit?: (encoded: EncodedTx) => Promise<SubmissionResult>;\n builderAddress?: Address;\n builderFeeBps?: number;\n subgraph: OstiumSubgraphClient;\n}\n\nexport class OstiumClient {\n private readonly signer?: SignerStrategy;\n private readonly submitter?: SubmissionStrategy;\n private readonly traderAddress?: Address;\n private readonly effectiveSender?: Address;\n private readonly contracts: ContractAddresses;\n private readonly publicClient: PublicClient;\n private readonly defaultSlippageBps: number;\n private readonly delegated: boolean;\n private readonly gasless: boolean;\n private readonly selfGasless: boolean;\n private readonly eoaSubmit?: (encoded: EncodedTx) => Promise<SubmissionResult>;\n private readonly builderAddress?: Address;\n private readonly builderFeeBps?: number;\n /** Internal subgraph client backing all read methods (`getPairs`, `getOpenPositions`, …). */\n readonly subgraph: OstiumSubgraphClient;\n\n private constructor(internals: ClientInternals) {\n this.signer = internals.signer;\n this.submitter = internals.submitter;\n this.traderAddress = internals.traderAddress;\n this.effectiveSender = internals.effectiveSender;\n this.contracts = internals.contracts;\n this.publicClient = internals.publicClient;\n this.defaultSlippageBps = internals.defaultSlippageBps;\n this.delegated = internals.delegated;\n this.gasless = internals.gasless;\n this.selfGasless = internals.selfGasless;\n this.eoaSubmit = internals.eoaSubmit;\n this.builderAddress = internals.builderAddress;\n this.builderFeeBps = internals.builderFeeBps;\n this.subgraph = internals.subgraph;\n }\n\n /**\n * **Self + Self** — your EOA signs every transaction and pays gas directly.\n *\n * Use this when you want the simplest possible setup: one key, no smart accounts,\n * no delegation. Your EOA holds USDC and owns all positions.\n *\n * ```ts\n * const client = await OstiumClient.createSelfAndSelf({\n * traderPrivateKey: '0x...',\n * rpcUrl: 'https://arb-mainnet.g.alchemy.com/v2/...',\n * });\n * await client.openTrade({ ... });\n * ```\n */\n static async createSelfAndSelf(params: SelfSelfParams): Promise<OstiumClient> {\n const base = {\n mode: 'self-self' as const,\n testnet: params.testnet,\n slippageBps: params.slippageBps,\n builder: params.builder,\n subgraphUrl: params.subgraphUrl,\n builderApiUrl: params.builderApiUrl,\n rpcUrl: params.rpcUrl,\n };\n return OstiumClient._fromConfig(\n 'traderPrivateKey' in params\n ? { ...base, privateKey: params.traderPrivateKey }\n : { ...base, traderAddress: params.traderAddress },\n );\n }\n\n /**\n * **Self + Gasless** — your EOA owns everything; a Safe relays trades for free.\n *\n * Your EOA holds USDC and owns all positions. A Safe smart account is derived\n * deterministically from your private key and registered as your on-chain delegate.\n * After a one-time setup (approve USDC + `setupGaslessDelegation()`), all trades\n * are submitted as sponsored UserOperations — no ETH required.\n *\n * ```ts\n * const client = await OstiumClient.createSelfAndGasless({\n * traderPrivateKey: '0x...',\n * pimlicoUrl: 'https://builder.ostium.io/v1/pimlico/sponsor?chainId=42161',\n * });\n * // One-time setup — EOA pays gas once for each:\n * await client.approveUsdc('max');\n * await client.setupGaslessDelegation();\n * // All subsequent trading is gasless:\n * await client.openTrade({ ... });\n * ```\n */\n static async createSelfAndGasless(params: SelfGaslessParams): Promise<OstiumClient> {\n const defaultUrl = params.testnet ? DEFAULT_PIMLICO_URL_TESTNET : DEFAULT_PIMLICO_URL;\n const base = {\n mode: 'self-gasless' as const,\n rpcUrl: params.rpcUrl,\n testnet: params.testnet,\n slippageBps: params.slippageBps,\n builder: params.builder,\n subgraphUrl: params.subgraphUrl,\n builderApiUrl: params.builderApiUrl,\n };\n return OstiumClient._fromConfig(\n 'traderPrivateKey' in params\n ? {\n ...base,\n privateKey: params.traderPrivateKey,\n pimlicoUrl: params.pimlicoUrl ?? defaultUrl,\n sponsorshipPolicyId: params.sponsorshipPolicyId,\n }\n : {\n ...base,\n traderAddress: params.traderAddress,\n safeAddress: params.safeAddress,\n },\n );\n }\n\n /**\n * **Delegated + Self** — a delegate EOA signs and pays gas on behalf of a trader address.\n *\n * The trader retains custody of USDC and positions. The delegate only needs ETH\n * for gas. Every trade is wrapped in `delegatedAction(traderAddress, callData)`.\n * The trader must call `setDelegate(delegateAddress)` once before this client\n * can submit trades.\n *\n * ```ts\n * const client = await OstiumClient.createDelegatedAndSelf({\n * delegatePrivateKey: '0xDelegateKey',\n * traderAddress: '0xTraderAddress',\n * rpcUrl: 'https://arb-mainnet.g.alchemy.com/v2/...',\n * });\n * await client.openTrade({ ... });\n * ```\n */\n static async createDelegatedAndSelf(params: DelegatedSelfParams): Promise<OstiumClient> {\n const base = {\n mode: 'delegated-self' as const,\n traderAddress: params.traderAddress,\n rpcUrl: params.rpcUrl,\n testnet: params.testnet,\n slippageBps: params.slippageBps,\n builder: params.builder,\n subgraphUrl: params.subgraphUrl,\n builderApiUrl: params.builderApiUrl,\n };\n return OstiumClient._fromConfig(\n 'delegatePrivateKey' in params\n ? { ...base, privateKey: params.delegatePrivateKey }\n : { ...base, delegateAddress: params.delegateAddress },\n );\n }\n\n /**\n * **Delegated + Gasless** — a Safe derived from the delegate key submits sponsored\n * UserOperations on behalf of the trader. No ETH needed after setup.\n *\n * The trader retains custody of USDC and positions. The delegate's Safe submits\n * trades as UserOperations via Pimlico. The trader must call `setDelegate(safeAddress)`\n * once — use `client.getSmartAccountAddress()` to retrieve the Safe address.\n *\n * ```ts\n * const client = await OstiumClient.createDelegatedAndGasless({\n * delegatePrivateKey: '0xDelegateKey',\n * traderAddress: '0xTraderAddress',\n * pimlicoUrl: 'https://builder.ostium.io/v1/pimlico/sponsor?chainId=42161',\n * });\n * await client.openTrade({ ... }); // gasless delegatedAction UserOp\n * ```\n */\n static async createDelegatedAndGasless(params: DelegatedGaslessParams): Promise<OstiumClient> {\n const defaultUrl = params.testnet ? DEFAULT_PIMLICO_URL_TESTNET : DEFAULT_PIMLICO_URL;\n const base = {\n mode: 'delegated-gasless' as const,\n traderAddress: params.traderAddress,\n rpcUrl: params.rpcUrl,\n testnet: params.testnet,\n slippageBps: params.slippageBps,\n builder: params.builder,\n subgraphUrl: params.subgraphUrl,\n builderApiUrl: params.builderApiUrl,\n };\n return OstiumClient._fromConfig(\n 'delegatePrivateKey' in params\n ? {\n ...base,\n privateKey: params.delegatePrivateKey,\n pimlicoUrl: params.pimlicoUrl ?? defaultUrl,\n sponsorshipPolicyId: params.sponsorshipPolicyId,\n }\n : {\n ...base,\n delegateAddress: params.delegateAddress,\n safeAddress: params.safeAddress,\n },\n );\n }\n\n /**\n * **Read-only client** — no signer, no submitter, no privateKey required.\n *\n * All read methods (`getPairs`, `getOpenPositions`, `getFills`, `getBalances`, …)\n * are available. Methods that take an optional `user` argument require it to be\n * passed explicitly. Calling any write method throws `INVALID_CONFIG`.\n *\n * ```ts\n * const reader = await OstiumClient.createReadOnly();\n * const { pairs } = await reader.getPairs();\n * const balances = await reader.getBalances('0xTrader...');\n * const positions = await reader.getOpenPositions({ user: '0xTrader...' });\n * ```\n */\n static async createReadOnly(params: {\n /** Arbitrum RPC URL. Defaults to the chain's public RPC. */\n rpcUrl?: string;\n /** Use Arbitrum Sepolia testnet. Defaults to false (mainnet). */\n testnet?: boolean;\n /** Override the subgraph endpoint. */\n subgraphUrl?: string;\n /** Override the builder API base URL (prices, OHLC, WebSocket stream). */\n builderApiUrl?: string;\n } = {}): Promise<OstiumClient> {\n const testnet = params.testnet ?? false;\n const networkConfig = getNetworkConfig(testnet);\n const chain = testnet ? arbitrumSepolia : arbitrum;\n const rpcUrl = params.rpcUrl ?? chain.rpcUrls.default.http[0];\n\n const contracts: ContractAddresses = {\n trading: networkConfig.contracts.trading,\n tradingStorage: networkConfig.contracts.tradingStorage,\n usdc: networkConfig.contracts.usdc,\n };\n\n const publicClient = createPublicClient({ chain, transport: http(rpcUrl) });\n\n const subgraph = await OstiumSubgraphClient.create({\n testnet,\n endpoint: params.subgraphUrl,\n builderApiUrl: params.builderApiUrl,\n });\n\n return new OstiumClient({\n contracts,\n publicClient,\n defaultSlippageBps: Math.round(DEFAULT_SLIPPAGE_PERCENTAGE * 100),\n delegated: false,\n gasless: false,\n selfGasless: false,\n subgraph,\n });\n }\n\n /** Internal factory shared by all public constructors. */\n private static async _fromConfig(config: OstiumClientConfig): Promise<OstiumClient> {\n validateConfig(config);\n\n const mode = resolveMode(config);\n const testnet = config.testnet ?? false;\n const networkConfig = getNetworkConfig(testnet);\n const chain = testnet ? arbitrumSepolia : arbitrum;\n const defaultSlippageBps =\n config.slippageBps ?? Math.round(DEFAULT_SLIPPAGE_PERCENTAGE * 100);\n\n const contracts: ContractAddresses = {\n trading: networkConfig.contracts.trading,\n tradingStorage: networkConfig.contracts.tradingStorage,\n usdc: networkConfig.contracts.usdc,\n };\n\n const selfGasless = mode === 'self-gasless';\n\n let traderAddress: Address;\n if (mode === 'self-self' || mode === 'self-gasless') {\n traderAddress = config.traderAddress ?? privateKeyToAccount(config.privateKey!).address;\n } else {\n traderAddress = config.traderAddress!;\n }\n\n const signer = createSigner(mode, traderAddress);\n\n let submitter: SubmissionStrategy | undefined;\n let effectiveSender: Address;\n if (hasPrivateKey(config)) {\n submitter = await createSubmitter(config, testnet, mode);\n effectiveSender = submitter.effectiveSender;\n } else if (mode === 'self-self') {\n effectiveSender = traderAddress;\n } else if (mode === 'delegated-self') {\n effectiveSender = config.delegateAddress!;\n } else {\n effectiveSender = config.safeAddress!;\n }\n\n const publicRpc = testnet\n ? 'https://sepolia-rollup.arbitrum.io/rpc'\n : 'https://arb1.arbitrum.io/rpc';\n // Chain RPC for reads/simulation. Gasless Pimlico URL is bundler-only\n const rpcUrl = config.rpcUrl ?? publicRpc;\n\n if (hasPrivateKey(config) && mode !== 'self-gasless' && mode !== 'delegated-gasless' && !config.rpcUrl) {\n throw new OstiumError(\n 'rpcUrl is required for self-submission mode',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n\n const publicClient = createPublicClient({ chain, transport: http(rpcUrl) });\n\n // Self + Gasless: approveUsdc() and setupGaslessDelegation() must be signed\n // by the EOA directly (not via the Safe). Captured in a closure so the\n // private key is not stored on the instance.\n // Pimlico's bundler URL rejects eth_sendRawTransaction, so use a standard RPC here.\n let eoaSubmit: ((encoded: EncodedTx) => Promise<SubmissionResult>) | undefined;\n if (selfGasless && hasPrivateKey(config)) {\n const eoaAccount = privateKeyToAccount(config.privateKey);\n const eoaRpcUrl = config.rpcUrl ?? publicRpc;\n const eoaWalletClient = createWalletClient({ account: eoaAccount, chain, transport: http(eoaRpcUrl) });\n eoaSubmit = async (encoded: EncodedTx) => {\n const txHash = await eoaWalletClient.sendTransaction({\n account: eoaAccount,\n to: encoded.to,\n data: encoded.data,\n value: encoded.value,\n });\n return { txHash };\n };\n }\n\n const subgraph = await OstiumSubgraphClient.create({\n testnet,\n endpoint: config.subgraphUrl,\n builderApiUrl: config.builderApiUrl,\n });\n\n return new OstiumClient({\n signer,\n submitter,\n traderAddress,\n effectiveSender,\n contracts,\n publicClient,\n defaultSlippageBps,\n delegated: mode === 'delegated-self' || mode === 'delegated-gasless',\n gasless: mode === 'self-gasless' || mode === 'delegated-gasless',\n selfGasless,\n eoaSubmit,\n builderAddress: config.builder?.address,\n builderFeeBps: config.builder?.feeBps,\n subgraph,\n });\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Getters\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * The on-chain address that owns trades and USDC allowances.\n *\n * - Self + Self / Delegated modes: trader's EOA or configured traderAddress.\n * - Self + Gasless: EOA derived from privateKey (NOT the Safe — USDC lives here).\n */\n getTraderAddress(): Address {\n if (!this.traderAddress) {\n throw new OstiumError(\n 'No connected trader — pass `user` explicitly or use one of the createSelfAnd*/createDelegatedAnd* factories.',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n return this.traderAddress;\n }\n\n /** True when the client cannot submit transactions directly. */\n isReadOnly(): boolean {\n return !this.submitter;\n }\n\n /** True when the client can build mode-correct unsigned transaction requests. */\n canBuildTransactions(): boolean {\n return !!this.signer && !!this.effectiveSender;\n }\n\n /** True when the client has the credentials needed for SDK-managed submission. */\n canSubmitTransactions(): boolean {\n return !!this.submitter;\n }\n\n /**\n * Returns the Safe smart-account address used for gasless submission.\n * Returns undefined when not in gasless mode.\n *\n * - Self + Gasless: Safe that submits on behalf of the EOA (the delegate).\n * Pass this address to setupGaslessDelegation().\n * - Delegated + Gasless: delegate's Safe address.\n * - Self + Self / Delegated + Self: returns undefined.\n */\n getSmartAccountAddress(): Address | undefined {\n return this.gasless ? this.effectiveSender : undefined;\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Self + Gasless setup\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * One-time setup for Self + Gasless mode.\n *\n * Registers the Safe smart account as a delegate on the trading contract so\n * the Safe can submit gasless trades on behalf of your EOA. The EOA pays gas\n * for this single transaction; all subsequent trading is gasless.\n *\n * Only callable in Self + Gasless mode. Throws INVALID_CONFIG otherwise.\n *\n * @example\n * ```ts\n * const client = await OstiumClient.create({ privateKey: '0x...', pimlicoUrl: 'https://builder.ostium.io/v1/pimlico/sponsor?chainId=42161' });\n * await client.approveUsdc('max'); // EOA approves USDC (gas, one-time)\n * await client.setupGaslessDelegation(); // EOA sets Safe as delegate (gas, one-time)\n * // From here: all trading is gasless\n * await client.openTrade({ ... });\n * ```\n */\n async setupGaslessDelegation(): Promise<SubmissionResult> {\n return this.submitDirectEoa(this.getSetupGaslessDelegationEncoded());\n }\n\n getSetupGaslessDelegationTx(): BuiltTxRequest {\n return this.buildDirectEoaTx(this.getSetupGaslessDelegationEncoded());\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // USDC helpers\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Check whether the trader's USDC allowance covers the required amount.\n * The allowance is always checked against signer.traderAddress (the EOA in\n * Self + Gasless mode, the Safe in Delegated + Gasless).\n */\n async checkUsdcAllowance(requiredUsd: string): Promise<AllowanceStatus> {\n const required = parseUsdc(requiredUsd);\n const current = await this.publicClient.readContract({\n address: this.contracts.usdc,\n abi: ERC20_ABI,\n functionName: 'allowance',\n args: [this.getTraderAddress(), this.contracts.tradingStorage],\n });\n return { current, required, sufficient: current >= required };\n }\n\n /**\n * USDC and ETH balances plus the USDC allowance to TradingStorage.\n * All three values are decimal strings so large values (e.g. max USDC approval)\n * are preserved exactly. Parse with `parseFloat` / `Number` only for display.\n *\n * In read-only mode, pass `user` explicitly. With a connected trader, omit it\n * to read the connected address.\n */\n async getBalances(user?: Address): Promise<Balances> {\n const trader = user ?? this.getTraderAddress();\n const [usdcRaw, ethRaw, allowanceRaw] = await Promise.all([\n this.publicClient.readContract({\n address: this.contracts.usdc,\n abi: ERC20_ABI,\n functionName: 'balanceOf',\n args: [trader],\n }),\n this.publicClient.getBalance({ address: trader }),\n this.publicClient.readContract({\n address: this.contracts.usdc,\n abi: ERC20_ABI,\n functionName: 'allowance',\n args: [trader, this.contracts.tradingStorage],\n }),\n ]);\n\n return {\n usdc: formatUnits(usdcRaw as bigint, 6),\n eth: formatUnits(ethRaw, 18),\n allowance: formatUnits(allowanceRaw as bigint, 6),\n };\n }\n\n /**\n * Approve USDC spending by the TradingStorage contract.\n *\n * - Self + Self: submitted gaslessly from EOA.\n * - Self + Gasless: submitted directly from EOA (the delegate cannot approve\n * on behalf of the trader). The EOA pays gas for this one-time operation.\n * - Delegated modes: throws — the trader must approve from their own account.\n *\n * @param amount USD amount as decimal string (e.g. \"1000\"), or \"max\" for MaxUint256.\n */\n async approveUsdc(amount: string): Promise<SubmissionResult> {\n const encoded = this.getApproveUsdcEncoded(amount);\n if (this.selfGasless) {\n return this.submitDirectEoa(encoded);\n }\n return this.submitPrepared(encoded);\n }\n\n getApproveUsdcTx(amount: string): BuiltTxRequest {\n return this.buildDirectEoaTx(this.getApproveUsdcEncoded(amount));\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Delegation helpers\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Set a delegate on the trading contract.\n *\n * - Self + Self: EOA directly registers a delegate.\n * - Self + Gasless: NOT recommended — use setupGaslessDelegation() instead.\n * - Delegated modes: wrapped in delegatedAction so the existing delegate can\n * update the trader's delegation on their behalf.\n */\n async setDelegate(delegateAddress: Address): Promise<SubmissionResult> {\n return this.submitPrepared(this.getSetDelegateEncoded(delegateAddress));\n }\n\n getSetDelegateTx(delegateAddress: Address): BuiltTxRequest {\n return this.buildPreparedTx(this.getSetDelegateEncoded(delegateAddress));\n }\n\n /**\n * Remove the current delegate on the trading contract.\n * Follows the same delegation-wrapping rules as setDelegate().\n */\n async removeDelegate(): Promise<SubmissionResult> {\n return this.submitPrepared(this.getRemoveDelegateEncoded());\n }\n\n getRemoveDelegateTx(): BuiltTxRequest {\n return this.buildPreparedTx(this.getRemoveDelegateEncoded());\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Core trading methods\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Open a new trade position.\n *\n * Call `approveUsdc()` (once) before the first trade — the contract will revert\n * on-chain if the USDC allowance is insufficient. Use `getBalances()` to check\n * the current allowance.\n */\n async openTrade(params: OpenTradeParams): Promise<SubmissionResult> {\n return this.submitPrepared(this.getOpenTradeEncoded(params));\n }\n\n getOpenTradeTx(params: OpenTradeParams): BuiltTxRequest {\n return this.buildPreparedTx(this.getOpenTradeEncoded(params));\n }\n\n private getOpenTradeEncoded(params: OpenTradeParams): EncodedTx {\n const collateralNum = parseFloat(params.collateral);\n if (collateralNum > MAX_COLLATERAL_USD) {\n throw new OstiumError(\n `Collateral ${params.collateral} exceeds maximum ${MAX_COLLATERAL_USD}`,\n OstiumErrorCode.VALIDATION_FAILED,\n );\n }\n\n const apiOpen = {\n a: Number(params.pairId),\n b: params.buy,\n p: params.price,\n s: params.collateral,\n l: params.leverage,\n t: params.type,\n tp: params.takeProfit,\n sl: params.stopLoss,\n d: params.isDayTrade,\n };\n\n const apiBuilder =\n this.builderAddress !== undefined && this.builderFeeBps !== undefined\n ? { b: this.builderAddress, f: this.builderFeeBps }\n : undefined;\n\n let trade, orderType;\n try {\n ({ trade, orderType } = buildTrade(apiOpen, this.getTraderAddress()));\n } catch (err) {\n throw new OstiumError(\n `Trade validation failed: ${err instanceof Error ? err.message : String(err)}`,\n OstiumErrorCode.VALIDATION_FAILED,\n err,\n );\n }\n\n const builderFee = buildBuilderFee(apiBuilder);\n\n // Slippage only applies to market orders. Limit and stop orders must use 0.\n const slippageP = params.type === OrderType.Market\n ? BigInt(this.resolveSlippage(params.slippage))\n : 0n;\n\n return encodeOpenTrade(trade, builderFee, orderType, slippageP, this.contracts.trading);\n }\n\n /**\n * Close an open position (full or partial).\n *\n * `pairId` and `idx` come straight from a `Position` returned by\n * `getOpenPositions` — pass them through directly:\n *\n * ```ts\n * const { pairPositions } = await client.getOpenPositions();\n * const { pairId, idx } = pairPositions[0].position;\n * await client.closeTrade({ pairId, idx, price: '...', closePercent: 100 });\n * ```\n */\n async closeTrade(params: CloseTradeParams): Promise<SubmissionResult> {\n return this.submitPrepared(this.getCloseTradeEncoded(params));\n }\n\n getCloseTradeTx(params: CloseTradeParams): BuiltTxRequest {\n return this.buildPreparedTx(this.getCloseTradeEncoded(params));\n }\n\n private getCloseTradeEncoded(params: CloseTradeParams): EncodedTx {\n try {\n validateCloseParams({\n a: Number(params.pairId),\n t: params.idx,\n p: params.price,\n r: params.closePercent,\n });\n } catch (err) {\n throw new OstiumError(\n `Close validation failed: ${err instanceof Error ? err.message : String(err)}`,\n OstiumErrorCode.VALIDATION_FAILED,\n err,\n );\n }\n\n const pairIndex = BigInt(params.pairId);\n const index = BigInt(params.idx);\n // Contract expects close percentage × 100 (e.g. 100% → 10000)\n const closePercentage = BigInt(Math.round(params.closePercent * 100));\n const marketPrice = parsePrice(params.price);\n const slippageP = BigInt(this.resolveSlippage(params.slippage));\n\n return encodeCloseTradeMarket(\n pairIndex,\n index,\n closePercentage,\n marketPrice,\n slippageP,\n this.contracts.trading,\n );\n }\n\n /**\n * Cancel a pending order.\n *\n * TypeScript discriminates the params shape by `type` — required fields are\n * enforced at compile time.\n *\n * @example Cancel a pending limit order\n * ```ts\n * const [order] = await client.getOpenOrders();\n * await client.cancelOrder({ type: CancelOrderType.Limit, pairId: order.pairId, idx: order.idx });\n * ```\n * @example Cancel a timed-out market open\n * ```ts\n * await client.cancelOrder({ type: CancelOrderType.PendingOpen, orderId: 123 });\n * ```\n * @example Cancel a timed-out market close (retry: true re-submits the close)\n * ```ts\n * await client.cancelOrder({ type: CancelOrderType.PendingClose, orderId: 456, retry: true });\n * ```\n */\n async cancelOrder(params: CancelOrderParams): Promise<SubmissionResult> {\n return this.submitPrepared(this.getCancelOrderEncoded(params));\n }\n\n getCancelOrderTx(params: CancelOrderParams): BuiltTxRequest {\n return this.buildPreparedTx(this.getCancelOrderEncoded(params));\n }\n\n private getCancelOrderEncoded(params: CancelOrderParams): EncodedTx {\n let encoded: EncodedTx;\n\n if (params.type === CancelOrderType.Limit) {\n const pairIdNum = Number(params.pairId);\n const idxNum = Number(params.idx);\n if (\n !Number.isFinite(pairIdNum) || !Number.isInteger(pairIdNum) || pairIdNum < 0 ||\n !Number.isFinite(idxNum) || !Number.isInteger(idxNum) || idxNum < 0\n ) {\n throw new OstiumError(\n `Invalid pairId (${params.pairId}) or idx (${params.idx}) for limit cancel`,\n OstiumErrorCode.VALIDATION_FAILED,\n );\n }\n encoded = encodeCancelLimitOrder(\n BigInt(pairIdNum),\n BigInt(idxNum),\n this.contracts.trading,\n );\n } else if (params.type === CancelOrderType.PendingClose) {\n if (params.orderId < 0) {\n throw new OstiumError(\n `Invalid orderId (${params.orderId}) for pending close cancel`,\n OstiumErrorCode.VALIDATION_FAILED,\n );\n }\n encoded = encodeCloseTradeMarketTimeout(\n BigInt(params.orderId),\n params.retry ?? false,\n this.contracts.trading,\n );\n } else {\n if (params.orderId < 0) {\n throw new OstiumError(\n `Invalid orderId (${params.orderId}) for pending open cancel`,\n OstiumErrorCode.VALIDATION_FAILED,\n );\n }\n encoded = encodeOpenTradeMarketTimeout(BigInt(params.orderId), this.contracts.trading);\n }\n\n return encoded;\n }\n\n /**\n * Modify an open trade or a pending limit order.\n *\n * `pairId` and `idx` come straight from `getOpenPositions` (for TP/SL on open\n * positions) or `getOpenOrders` (for limit-order edits):\n *\n * ```ts\n * // Update TP/SL on an open position\n * const { pairPositions } = await client.getOpenPositions();\n * const { pairId, idx } = pairPositions[0].position;\n * await client.modifyOrder({ pairId, idx, takeProfit: '...', stopLoss: '...' });\n *\n * // Re-price a pending limit order\n * const [order] = await client.getOpenOrders();\n * await client.modifyOrder({ pairId: order.pairId, idx: order.idx, price: '...' });\n * ```\n *\n * - `price` provided → updates limit-order trigger price (with optional TP/SL).\n * - `takeProfit` only → calls updateTp on an open trade.\n * - `stopLoss` only → calls updateSl on an open trade.\n * - Both `takeProfit` and `stopLoss` without `price` → throws (send two calls).\n */\n async modifyOrder(params: ModifyOrderParams): Promise<SubmissionResult> {\n return this.submitPrepared(this.getModifyOrderEncoded(params));\n }\n\n getModifyOrderTx(params: ModifyOrderParams): BuiltTxRequest {\n return this.buildPreparedTx(this.getModifyOrderEncoded(params));\n }\n\n private getModifyOrderEncoded(params: ModifyOrderParams): EncodedTx {\n try {\n validateModifyParams({\n a: Number(params.pairId),\n i: params.idx,\n p: params.price,\n tp: params.takeProfit,\n sl: params.stopLoss,\n });\n } catch (err) {\n throw new OstiumError(\n `Modify validation failed: ${err instanceof Error ? err.message : String(err)}`,\n OstiumErrorCode.VALIDATION_FAILED,\n err,\n );\n }\n\n if (params.takeProfit && params.stopLoss && !params.price) {\n throw new OstiumError(\n 'Cannot update both takeProfit and stopLoss simultaneously without a price. Send two separate modifyOrder calls.',\n OstiumErrorCode.VALIDATION_FAILED,\n );\n }\n\n const pairIndex = BigInt(params.pairId);\n const index = BigInt(params.idx);\n\n let encoded: EncodedTx;\n if (params.price) {\n const price = parsePrice(params.price);\n const tp = params.takeProfit ? parsePrice(params.takeProfit) : 0n;\n const sl = params.stopLoss ? parsePrice(params.stopLoss) : 0n;\n encoded = encodeUpdateOpenLimitOrder(pairIndex, index, price, tp, sl, this.contracts.trading);\n } else if (params.takeProfit) {\n encoded = encodeUpdateTp(pairIndex, index, parsePrice(params.takeProfit), this.contracts.trading);\n } else if (params.stopLoss) {\n encoded = encodeUpdateSl(pairIndex, index, parsePrice(params.stopLoss), this.contracts.trading);\n } else {\n throw new OstiumError(\n 'Either takeProfit or stopLoss must be provided when price is not specified',\n OstiumErrorCode.VALIDATION_FAILED,\n );\n }\n\n return encoded;\n }\n\n /**\n * Update collateral on an open position (isolated margin).\n *\n * `pairId` and `idx` come straight from a `Position` returned by `getOpenPositions`:\n *\n * ```ts\n * const { pairPositions } = await client.getOpenPositions();\n * const { pairId, idx } = pairPositions[0].position;\n * await client.updateCollateral({ pairId, idx, amount: '50' }); // top up\n * await client.updateCollateral({ pairId, idx, amount: '-25' }); // remove\n * ```\n *\n * Positive amount → topUpCollateral (adds margin, reduces effective leverage).\n * Negative amount → removeCollateral (removes margin, increases effective leverage).\n *\n * Checks USDC allowance before top-up operations.\n */\n async updateCollateral(params: UpdateCollateralParams): Promise<SubmissionResult> {\n return this.submitPrepared(await this.getUpdateCollateralEncoded(params));\n }\n\n async getUpdateCollateralTx(params: UpdateCollateralParams): Promise<BuiltTxRequest> {\n return this.buildPreparedTx(await this.getUpdateCollateralEncoded(params));\n }\n\n private async getUpdateCollateralEncoded(params: UpdateCollateralParams): Promise<EncodedTx> {\n const amount = parseFloat(params.amount);\n if (Number.isNaN(amount) || amount === 0) {\n throw new OstiumError(\n `Invalid collateral amount: ${params.amount}`,\n OstiumErrorCode.VALIDATION_FAILED,\n );\n }\n\n const pairIndex = BigInt(params.pairId);\n const index = BigInt(params.idx);\n const absAmount = parseUsdc(Math.abs(amount).toString());\n\n let encoded: EncodedTx;\n if (amount > 0) {\n const allowance = await this.checkUsdcAllowance(Math.abs(amount).toString());\n if (!allowance.sufficient) {\n throw new OstiumError(\n `Insufficient USDC allowance for collateral top-up. Current: ${allowance.current}, Required: ${allowance.required}. Call approveUsdc() first.`,\n OstiumErrorCode.ALLOWANCE_INSUFFICIENT,\n );\n }\n encoded = encodeTopUpCollateral(pairIndex, index, absAmount, this.contracts.trading);\n } else {\n encoded = encodeRemoveCollateral(pairIndex, index, absAmount, this.contracts.trading);\n }\n\n return encoded;\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Subgraph reads (Hyperliquid-style API)\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * All trading pairs with computed `minSz`/`maxBSz`/`maxSSz`, live prices, and\n * market-status flags. Pass `pairIds` to restrict to a subset.\n */\n getPairs(params?: GetPairsParams): Promise<PairsResponse> {\n return this.subgraph.getPairs(params);\n }\n\n /** Live mid/bid/ask prices keyed by `pairId`. */\n getAllPrices(): Promise<AllPricesResponse> {\n return this.subgraph.getAllPrices();\n }\n\n /**\n * Open positions + margin summary for a user. Defaults to the connected\n * trader. Live prices and the current block number are fetched automatically.\n *\n * - `user`: pass an address to scope to a single trader, or `'ALL'` to fetch\n * positions across every trader (no trader filter).\n * - `limit`: cap the number of positions returned (default: all).\n * - `skip`: offset into the result set for pagination (default: `0`).\n */\n async getOpenPositions(params?: Partial<GetOpenPositionsParams>): Promise<OpenPositionsResponse> {\n return this.subgraph.getOpenPositions({\n user: params?.user ?? this.getTraderAddress(),\n blockNumber: params?.blockNumber ?? (await this.publicClient.getBlockNumber()),\n limit: params?.limit,\n skip: params?.skip,\n });\n }\n\n /**\n * Executed fills, newest first.\n *\n * - `user` defaults to the connected trader. Pass `'ALL'` to fetch fills\n * across every trader (no trader filter).\n * - `pairId` (optional) — restricts to a single pair.\n * - `limit` (optional, default `1000`) — caps the result. Pass `Infinity` to\n * fetch every matching fill.\n */\n getFills(params?: Partial<GetFillsParams>): Promise<Fill[]> {\n return this.subgraph.getFills({\n user: params?.user ?? this.getTraderAddress(),\n pairId: params?.pairId,\n limit: params?.limit,\n });\n }\n\n /**\n * Executed fills within a time range (Unix ms). Same filters as `getFills`,\n * including the default `limit: 1000`.\n */\n getFillsByTime(params: Partial<GetFillsByTimeParams> & { startTime: number }): Promise<Fill[]> {\n return this.subgraph.getFillsByTime({\n user: params.user ?? this.getTraderAddress(),\n pairId: params.pairId,\n limit: params.limit,\n startTime: params.startTime,\n endTime: params.endTime,\n });\n }\n\n /** Active limit orders for a user. Defaults to the connected trader. */\n getOpenOrders(params?: Partial<GetUserParams>): Promise<OpenOrder[]> {\n return this.subgraph.getOpenOrders({ user: params?.user ?? this.getTraderAddress() });\n }\n\n /**\n * Fetch orders at any status — pending, executed, or cancelled.\n *\n * Pass `initiatedTxHashes: [result.txHash]` to poll by the submission hash, or\n * `orderIds` by on-chain id. Without either, returns recent orders for the\n * connected trader.\n */\n getOrders(params?: Omit<GetOrdersParams, 'user'> & { user?: Address }): Promise<Order[]> {\n const byId = params?.orderIds?.length;\n const byTx = params?.initiatedTxHashes?.length;\n return this.subgraph.getOrders({\n ...params,\n user: params?.user ?? (byId || byTx ? undefined : this.getTraderAddress()),\n });\n }\n\n /**\n * Simulate per-side slippage for a list of pairs and notionals.\n * See {@link OstiumSubgraphClient.getSimSlippage} for full semantics.\n */\n getSimSlippage(params: GetSimSlippageParams): Promise<SimSlippageByPairId> {\n return this.subgraph.getSimSlippage(params);\n }\n\n /**\n * Build a synthetic bid/ask orderbook for one pair using exponentially-spaced\n * notional levels capped at each side's remaining OI capacity.\n * See {@link OstiumSubgraphClient.getSimOrderbook} for full semantics.\n */\n getSimOrderbook(params: GetSimOrderbookParams): Promise<SimOrderbookResponse> {\n return this.subgraph.getSimOrderbook(params);\n }\n\n /**\n * Fetch OHLC candles for a pair from the builder API.\n *\n * `from` / `to` are Unix milliseconds; `resolution` is one of\n * `\"1\"`, `\"5\"`, `\"15\"`, `\"60\"`, `\"240\"`, `\"1D\"`.\n *\n * ```ts\n * const candles = await client.getCandles({\n * pairId: 0,\n * from: Date.now() - 30 * 86_400_000,\n * resolution: '1D',\n * });\n * ```\n */\n getCandles(params: GetCandlesParams): Promise<Candle[]> {\n return this.subgraph.getCandles(params);\n }\n\n /**\n * Open a WebSocket connection to the live price stream.\n *\n * Optionally filter to a subset of pairs by `pairId` — same values as returned by\n * `getPairs()`. When provided, the client sends `{ type: \"subscribe\", pairs }` on\n * `open` (no `?pairs=` query on the URL). Omit `pairIds` to receive the full feed.\n *\n * ```ts\n * const stream = client.streamPrices([0, 1]); // BTC and ETH by pairId\n * stream.onSnapshot(ticks => console.log(ticks));\n * stream.onTick(tick => console.log(tick.pair, tick.mid));\n * stream.subscribe([2]); // add pair\n * stream.unsubscribe([0]); // remove pair\n * stream.close();\n * ```\n *\n * Requires Node.js 18+, Bun, or a browser environment. Bun’s `WebSocket` may fail\n * some `https://` upgrades; use Node if the connection never reaches `open`.\n */\n streamPrices(pairIds?: Array<string | number>): OstiumPriceStream {\n return this.subgraph.streamPrices(pairIds);\n }\n\n /**\n * Stream price-driven updates for an existing `getOpenPositions()` response.\n *\n * Subscribes only to the unique pairs referenced by the response and emits the\n * full updated positions payload on each relevant price update. Pass an\n * existing `priceStream` to reuse a websocket your app already owns, or omit\n * it to let the SDK create a dedicated connection.\n */\n streamPositionUpdates(\n initial: OpenPositionsResponse,\n priceStream?: OstiumPriceStream,\n ): OstiumPositionUpdatesStream {\n return this.subgraph.streamPositionUpdates(initial, priceStream);\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Internal helpers\n // ─────────────────────────────────────────────────────────────────────────\n\n private getSetupGaslessDelegationEncoded(): EncodedTx {\n if (!this.selfGasless || !this.effectiveSender) {\n throw new OstiumError(\n 'setupGaslessDelegation() is only available in Self + Gasless mode.',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n return encodeSetDelegate(this.effectiveSender, this.contracts.trading);\n }\n\n private getApproveUsdcEncoded(amount: string): EncodedTx {\n if (this.delegated) {\n throw new OstiumError(\n 'approveUsdc is not available in delegated mode. The trader must approve USDC directly from their own account.',\n OstiumErrorCode.DELEGATION_FAILED,\n );\n }\n const rawAmount = amount === 'max' ? maxUint256 : parseUsdc(amount);\n return encodeUsdcApprove(this.contracts.tradingStorage, rawAmount, this.contracts.usdc);\n }\n\n private getSetDelegateEncoded(delegateAddress: Address): EncodedTx {\n return encodeSetDelegate(delegateAddress, this.contracts.trading);\n }\n\n private getRemoveDelegateEncoded(): EncodedTx {\n return encodeRemoveDelegate(this.contracts.trading);\n }\n\n private prepareEncoded(encoded: EncodedTx): EncodedTx {\n const signer = this.requireBuildCapability();\n return signer.prepare(encoded);\n }\n\n private buildPreparedTx(encoded: EncodedTx): BuiltTxRequest {\n return this.toBuiltTxRequest(this.prepareEncoded(encoded));\n }\n\n private buildDirectEoaTx(encoded: EncodedTx): BuiltTxRequest {\n if (!this.canBuildTransactions() || !this.traderAddress) {\n throw new OstiumError(\n 'This client cannot build transactions. Use one of the createSelfAnd*/createDelegatedAnd* factories.',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n return {\n kind: 'eoa',\n to: encoded.to,\n data: encoded.data,\n value: encoded.value,\n from: this.traderAddress,\n traderAddress: this.traderAddress,\n };\n }\n\n private toBuiltTxRequest(encoded: EncodedTx): BuiltTxRequest {\n if (!this.canBuildTransactions() || !this.traderAddress || !this.effectiveSender) {\n throw new OstiumError(\n 'This client cannot build transactions. Use one of the createSelfAnd*/createDelegatedAnd* factories.',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n\n if (this.gasless) {\n return {\n kind: 'safe',\n safeAddress: this.effectiveSender,\n traderAddress: this.traderAddress,\n calls: [encoded],\n };\n }\n\n return {\n kind: 'eoa',\n to: encoded.to,\n data: encoded.data,\n value: encoded.value,\n from: this.effectiveSender,\n traderAddress: this.traderAddress,\n };\n }\n\n private async submitPrepared(encoded: EncodedTx): Promise<SubmissionResult> {\n const submitter = this.requireSubmitCapability();\n return submitter.submit(this.prepareEncoded(encoded));\n }\n\n /** Direct EOA submission — used only in Self + Gasless for approveUsdc and setupGaslessDelegation. */\n private async submitDirectEoa(encoded: EncodedTx): Promise<SubmissionResult> {\n if (!this.eoaSubmit) {\n throw new OstiumError(\n 'This client cannot submit direct EOA transactions.',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n try {\n return await this.eoaSubmit(encoded);\n } catch (err) {\n if (err instanceof OstiumError) throw err;\n const msg = err instanceof Error ? err.message : String(err);\n const lower = msg.toLowerCase();\n if (lower.includes('revert')) {\n throw new OstiumError(`Contract reverted: ${msg}`, OstiumErrorCode.CONTRACT_ERROR, err);\n }\n if (lower.includes('network') || lower.includes('timeout') || lower.includes('fetch')) {\n throw new OstiumError(`Network error: ${msg}`, OstiumErrorCode.NETWORK_ERROR, err);\n }\n throw new OstiumError(`Transaction failed: ${msg}`, OstiumErrorCode.SUBMISSION_FAILED, err);\n }\n }\n\n private requireBuildCapability(): SignerStrategy {\n if (!this.signer) {\n throw new OstiumError(\n 'This client cannot build transactions. Use one of the createSelfAnd*/createDelegatedAnd* factories.',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n return this.signer;\n }\n\n private requireSubmitCapability(): SubmissionStrategy {\n if (!this.submitter) {\n throw new OstiumError(\n 'This client does not have submission credentials. Use the corresponding get*Tx() method or initialize with a private key.',\n OstiumErrorCode.INVALID_CONFIG,\n );\n }\n return this.submitter;\n }\n\n private resolveSlippage(override?: number): number {\n return override ?? this.defaultSlippageBps;\n }\n}\n"]}
|