@orderly.network/cli 1.0.0 → 2.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -111
- package/bin/orderly.js +34 -0
- package/lib/resolve.js +64 -0
- package/package.json +21 -55
- package/dist/index.js +0 -130
- package/dist/index.js.map +0 -7
package/dist/index.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/lib/output.ts", "../src/index.ts", "../src/commands/auth.ts", "../src/lib/crypto.ts", "../src/lib/keychain.ts", "../src/lib/config.ts", "../src/types.ts", "../src/lib/account-select.ts", "../src/lib/api.ts", "../src/commands/account.ts", "../src/commands/order.ts", "../src/commands/positions.ts", "../src/commands/market.ts", "../src/lib/ws.ts", "../src/commands/faucet.ts", "../src/commands/wallet.ts", "../src/lib/evm.ts", "../src/lib/solana.ts", "../src/commands/assets.ts", "../src/lib/contracts.ts", "../src/commands/settle.ts", "../src/commands/leverage.ts", "../src/commands/trades.ts", "../src/commands/algo.ts", "../src/commands/funding.ts", "../src/commands/referral.ts", "../src/commands/stats.ts", "../src/commands/notification.ts"],
|
|
4
|
-
"sourcesContent": ["import kleur from 'kleur';\nimport axios from 'axios';\n\ntype OutputFormat = 'json' | 'csv';\n\ninterface ApiResponse {\n success?: boolean;\n data?: unknown;\n [key: string]: unknown;\n}\n\nexport function isPrettyJson(): boolean {\n return process.argv.includes('--pretty');\n}\n\nfunction unwrapResponse(response: unknown): unknown {\n if (response !== null && typeof response === 'object' && 'data' in response) {\n const api = response as ApiResponse;\n if (api.success === false) {\n return api;\n }\n return api.data;\n }\n return response;\n}\n\nfunction flattenObject(\n obj: Record<string, unknown>,\n prefix = '',\n schemaHints?: Map<string, string[]>\n): Record<string, string> {\n const result: Record<string, string> = {};\n\n for (const [key, value] of Object.entries(obj)) {\n const newKey = prefix ? `${prefix}.${key}` : key;\n\n if (value === null || value === undefined) {\n const childKeys = schemaHints?.get(newKey);\n if (childKeys && childKeys.length > 0) {\n for (const ck of childKeys) {\n result[`${newKey}.${ck}`] = '';\n }\n } else {\n result[newKey] = '';\n }\n } else if (typeof value === 'object' && !Array.isArray(value)) {\n Object.assign(result, flattenObject(value as Record<string, unknown>, newKey, schemaHints));\n } else if (Array.isArray(value)) {\n const objectItems = value.filter(\n (item): item is Record<string, unknown> =>\n typeof item === 'object' && item !== null && !Array.isArray(item)\n );\n if (objectItems.length > 0) {\n let objIdx = 0;\n for (let i = 0; i < value.length; i++) {\n const item = value[i];\n if (typeof item === 'object' && item !== null && !Array.isArray(item)) {\n Object.assign(\n result,\n flattenObject(item as Record<string, unknown>, `${newKey}.${objIdx}`, schemaHints)\n );\n objIdx++;\n }\n }\n } else {\n result[newKey] = JSON.stringify(value);\n }\n } else {\n result[newKey] = String(value);\n }\n }\n\n return result;\n}\n\nfunction extractRows(data: unknown): unknown {\n if (typeof data !== 'object' || data === null) return data;\n\n const record = data as Record<string, unknown>;\n\n const knownKeys = ['rows', 'list', 'data'];\n\n for (const key of knownKeys) {\n if (key in record) {\n if (Array.isArray(record[key])) return record[key];\n if (record[key] === null) return [];\n }\n }\n\n const keys = Object.keys(record);\n const arrayKeys = keys.filter((k) => Array.isArray(record[k]));\n if (arrayKeys.length === 1 && keys.length <= 2) {\n return record[arrayKeys[0]];\n }\n\n return data;\n}\n\nfunction collectObjectSchema(value: unknown, prefix = ''): Map<string, string[]> {\n const schema = new Map<string, string[]>();\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return schema;\n const obj = value as Record<string, unknown>;\n for (const [key, val] of Object.entries(obj)) {\n const fullKey = prefix ? `${prefix}.${key}` : key;\n if (typeof val === 'object' && val !== null && !Array.isArray(val)) {\n const childKeys = Object.keys(val as Record<string, unknown>);\n schema.set(fullKey, childKeys);\n const nested = collectObjectSchema(val, fullKey);\n for (const [nk, nv] of nested) {\n const existing = schema.get(nk);\n if (existing) {\n const merged = [...new Set([...existing, ...nv])];\n schema.set(nk, merged);\n } else {\n schema.set(nk, nv);\n }\n }\n } else if (Array.isArray(val)) {\n const objectItems = val.filter(\n (item): item is Record<string, unknown> =>\n typeof item === 'object' && item !== null && !Array.isArray(item)\n );\n if (objectItems.length > 0) {\n schema.set(fullKey, ['0']);\n const mergedChildKeys = new Set<string>();\n for (let i = 0; i < objectItems.length; i++) {\n const indexedKey = `${fullKey}.${i}`;\n const childKeys = Object.keys(objectItems[i]);\n schema.set(indexedKey, childKeys);\n childKeys.forEach((ck) => mergedChildKeys.add(ck));\n const nested = collectObjectSchema(objectItems[i], indexedKey);\n for (const [nk, nv] of nested) {\n const existing = schema.get(nk);\n if (existing) {\n schema.set(nk, [...new Set([...existing, ...nv])]);\n } else {\n schema.set(nk, nv);\n }\n }\n }\n }\n }\n }\n return schema;\n}\n\nfunction toCSV(data: unknown): string {\n const rows = extractRows(data);\n\n if (Array.isArray(rows)) {\n if (rows.length === 0) {\n return '';\n }\n\n const schemaHints = new Map<string, string[]>();\n for (const item of rows) {\n if (typeof item === 'object' && item !== null) {\n const itemSchema = collectObjectSchema(item);\n for (const [key, childKeys] of itemSchema) {\n const existing = schemaHints.get(key);\n if (existing) {\n schemaHints.set(key, [...new Set([...existing, ...childKeys])]);\n } else {\n schemaHints.set(key, childKeys);\n }\n }\n }\n }\n\n const allKeys = new Set<string>();\n const flatRows: Record<string, string>[] = [];\n for (const item of rows) {\n if (typeof item === 'object' && item !== null) {\n const flat = flattenObject(item as Record<string, unknown>, '', schemaHints);\n Object.keys(flat).forEach((k) => allKeys.add(k));\n flatRows.push(flat);\n }\n }\n\n const keys = Array.from(allKeys);\n const lines: string[] = [keys.join(',')];\n\n for (const flat of flatRows) {\n const values = keys.map((k) => escapeCsvValue(flat[k] ?? ''));\n lines.push(values.join(','));\n }\n\n return lines.join('\\n');\n }\n\n if (typeof rows === 'object' && rows !== null) {\n const flat = flattenObject(rows as Record<string, unknown>);\n const keys = Object.keys(flat);\n return `${keys.join(',')}\\n${keys.map((k) => escapeCsvValue(flat[k])).join(',')}`;\n }\n\n return String(rows);\n}\n\nfunction escapeCsvValue(value: string): string {\n if (value.includes(',') || value.includes('\"') || value.includes('\\n')) {\n return `\"${value.replace(/\"/g, '\"\"')}\"`;\n }\n return value;\n}\n\nexport function output(data: unknown, format: OutputFormat = 'json'): void {\n const unwrapped = unwrapResponse(data);\n\n if (format === 'csv') {\n const csv = toCSV(unwrapped);\n if (csv !== '') {\n console.log(csv);\n } else {\n console.error(kleur.dim('(no data)'));\n }\n } else {\n console.log(JSON.stringify(unwrapped, null, isPrettyJson() ? 2 : 0));\n }\n}\n\nconst SYMBOL_PATTERN = /^[A-Z0-9]+_[A-Z0-9]+(_[A-Z0-9]+)*$/;\n\nexport function normalizeSymbol(symbol: string): string {\n let s = symbol.trim().toUpperCase().replace(/\\/|-/g, '_');\n\n if (!s.includes('_') && s.length >= 3) {\n error(\n `Invalid symbol: \"${symbol}\". Expected format: PERP_<BASE>_<QUOTE> (e.g. PERP_ETH_USDC).`,\n ['Run `orderly symbols` to see available symbols.']\n );\n }\n\n if (!s.startsWith('PERP_')) {\n s = `PERP_${s}`;\n }\n\n if (!SYMBOL_PATTERN.test(s.slice(5))) {\n error(\n `Invalid symbol: \"${symbol}\". Expected format: PERP_<BASE>_<QUOTE> (e.g. PERP_ETH_USDC).`,\n ['Run `orderly symbols` to see available symbols.']\n );\n }\n\n return s;\n}\n\nexport function normalizeOptionalSymbol(symbol: string | undefined): string | undefined {\n if (!symbol) return undefined;\n return normalizeSymbol(symbol);\n}\n\nexport function error(message: string, hints?: string[]): never {\n console.error(kleur.red(message));\n if (hints?.length) {\n for (const hint of hints) {\n console.error(kleur.dim(hint));\n }\n }\n process.exit(1);\n}\n\nexport type { OutputFormat };\n\nexport function handleError(err: unknown): never {\n if (axios.isAxiosError(err) && err.response?.data) {\n const status = err.response.status;\n const rawData = err.response.data;\n if (status === 429) {\n error('Rate limited. Please wait before trying again.');\n }\n const data =\n typeof rawData === 'object' && rawData !== null\n ? (rawData as Record<string, unknown>)\n : undefined;\n const code = data?.code;\n const message =\n typeof rawData === 'string' && rawData.startsWith('<')\n ? `Request failed with status ${status}`\n : data?.message || JSON.stringify(rawData);\n const parts = [`API Error [${status}]`];\n if (code !== undefined) parts.push(`[${code}]`);\n parts.push(`: ${message}`);\n error(parts.join(' '));\n } else if (err instanceof Error) {\n error(err.message);\n } else {\n error(String(err));\n }\n}\n", "#!/usr/bin/env node\nimport { cac } from 'cac';\nimport kleur from 'kleur';\nimport { readFileSync } from 'fs';\nimport { fileURLToPath } from 'url';\nimport { dirname, join } from 'path';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nfunction getVersion(): string {\n try {\n const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf8'));\n return pkg.version || '0.0.0';\n } catch {\n return '0.0.0';\n }\n}\nimport { importKey, list, logout, show, exportKey, cleanup } from './commands/auth.js';\nimport {\n info,\n balance,\n statistics,\n limits,\n keyInfo,\n liquidations,\n feeTier,\n} from './commands/account.js';\nimport {\n place,\n cancel,\n edit,\n cancelAll,\n listOrders,\n batchPlace,\n batchCancel,\n batchCancelByClientId,\n cancelByClientId,\n getOrder,\n orderTrades,\n} from './commands/order.js';\nimport { listPositions, closePosition, positionHistory } from './commands/positions.js';\nimport {\n getPrice,\n getOrderbook,\n getSymbols,\n getKline,\n getMarketTrades,\n getFundingRates,\n getPriceChanges,\n getOpenInterest,\n getLiquidatedPositions,\n getSystemStatus,\n} from './commands/market.js';\nimport { faucetUsdc } from './commands/faucet.js';\nimport {\n walletImport,\n walletList,\n walletShow,\n walletLogout,\n walletRegister,\n walletAddKey,\n walletCreate,\n} from './commands/wallet.js';\nimport { getChains, getTokens, depositInfo, withdraw, assetHistory } from './commands/assets.js';\nimport { getOrSetLeverage } from './commands/leverage.js';\nimport { listTrades } from './commands/trades.js';\nimport {\n placeAlgoOrder,\n cancelAlgoOrder,\n cancelAllAlgoOrders,\n listAlgoOrders,\n editAlgoOrder,\n algoOrderTrades,\n getAlgoOrder,\n cancelAlgoOrderByClientId,\n} from './commands/algo.js';\nimport { fundingHistory } from './commands/funding.js';\nimport { settlePnl, settlePnlHistory } from './commands/settle.js';\nimport { info as referralInfo } from './commands/referral.js';\nimport { distributionHistory, volumeStats } from './commands/stats.js';\nimport { inbox, inboxUnread } from './commands/notification.js';\nimport { getDefaultNetwork } from './lib/config.js';\nimport { Network, WalletType } from './types.js';\nimport { OutputFormat, error, normalizeSymbol, normalizeOptionalSymbol } from './lib/output.js';\n\nfunction findRawOption(optionName: string, hexOnly = true): string | undefined {\n for (let i = 0; i < process.argv.length - 1; i++) {\n if (process.argv[i] === `--${optionName}`) {\n const val = process.argv[i + 1];\n if (!hexOnly || val.startsWith('0x')) return val;\n }\n const pattern = hexOnly\n ? new RegExp(`^--${optionName}=(0x[a-fA-F0-9]+)$`)\n : new RegExp(`^--${optionName}=(.+)$`);\n const eqMatch = process.argv[i].match(pattern);\n if (eqMatch) return eqMatch[1];\n }\n return undefined;\n}\n\nfunction normalizeHexInput(\n value: unknown,\n optionName: string,\n label: string,\n example: string\n): string | undefined {\n if (value === undefined || value === null) return findRawOption(optionName);\n const str = String(value);\n if (typeof value === 'number' || str.includes('e+') || str.includes('e-')) {\n const raw = findRawOption(optionName);\n if (raw) return raw;\n error(`Hex ${label} must be quoted to prevent parsing as numbers.`, [`Example: ${example}`]);\n }\n return str;\n}\n\nfunction normalizeAddress(address: unknown): string | undefined {\n return normalizeHexInput(\n address,\n 'address',\n 'addresses',\n '--address \"0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266\"'\n );\n}\n\nfunction requireAddress(address: unknown): string {\n const normalized = normalizeAddress(address);\n if (!normalized) error('Address is required.');\n return normalized;\n}\n\nfunction normalizeAccountId(accountId: unknown): string | undefined {\n return normalizeHexInput(\n accountId,\n 'account',\n 'account IDs',\n '--account \"0x1e6b18f967e262ea4ee8a1efab67c578bcc45cdcfd435c15b6913dcf14d0217e\"'\n );\n}\n\nfunction normalizeScope(scope: unknown): string | undefined {\n if (scope === undefined || scope === null) return findRawOption('scope', false);\n return String(scope);\n}\n\nconst QUICK_START = `\n${kleur.cyan().bold('QUICK START (Testnet)')}\n${kleur.dim('\u2500'.repeat(50))}\n\n1. Create a new wallet:\n ${kleur.green('orderly wallet-create --type EVM')}\n\n2. Register an Orderly account:\n ${kleur.green('orderly wallet-register --broker-id demo')}\n\n3. Get test USDC (wait a few minutes for delivery):\n ${kleur.green('orderly faucet-usdc <address> --chain-id 421614')}\n\n4. Add API key for trading:\n ${kleur.green('orderly wallet-add-key')}\n\n5. Check balance:\n ${kleur.green('orderly account-balance')}\n\n6. Place an order:\n ${kleur.green('orderly order-place PERP_ETH_USDC BUY MARKET 0.01')}\n`;\n\nconst DESCRIPTION = `\n${kleur.bold('Orderly Network CLI')}\n${kleur.dim('Secure keychain-based trading CLI for Orderly Network')}\n\nThis CLI uses your OS keychain (Keychain/Credential Manager/libsecret) to store\nprivate keys securely. Keys are NEVER exposed to AI context or logged.\n\n${kleur.cyan().bold('SETUP FLOW')}\n${kleur.dim('\u2500'.repeat(50))}\n\n${kleur.yellow('For new users:')}\n wallet-create \u2192 Generate a new wallet (EVM or SOL)\n wallet-register \u2192 Register wallet with Orderly (get account ID)\n wallet-add-key \u2192 Generate & register Ed25519 API key for trading\n\n${kleur.yellow('For existing Orderly users with API keys:')}\n auth-import \u2192 Import existing Ed25519 API key directly\n\n${kleur.cyan().bold('COMMANDS BY CATEGORY')}\n${kleur.dim('\u2500'.repeat(50))}\n\n${kleur.yellow('Setup & Auth:')}\n wallet-create, wallet-import, wallet-list, wallet-show, wallet-logout\n wallet-register, wallet-add-key\n auth-import, auth-list, auth-show, auth-logout, auth-cleanup, auth-export-key\n\n${kleur.yellow('Trading:')}\n order-place, order-cancel, order-edit, order-cancel-all, order-list\n order-get, order-cancel-by-client-id, order-trades\n batch-order-place, batch-order-cancel, batch-order-cancel-by-client-id\n algo-order-place, algo-order-cancel, algo-order-cancel-all, algo-order-edit, algo-order-list, algo-order-trades, algo-order-get, algo-order-cancel-by-client-id\n positions-list, positions-close, positions-history\n leverage, trades, funding-history\n\n${kleur.yellow('Account:')}\n account-info, account-balance, account-statistics, account-limits\n key-info, fee-tier, account-liquidations\n\n${kleur.yellow('Market Data:')}\n market-price, market-orderbook, market-trades, funding-rates, kline, symbols\n price-changes, open-interest, liquidated-positions, system-status\n\n${kleur.yellow('Assets:')}\n chains, tokens, deposit-info, withdraw, asset-history\n\n${kleur.yellow('PnL:')}\n settle-pnl, settle-pnl-history\n\n${kleur.yellow('Referral:')}\n referral-info\n\n${kleur.yellow('Stats & Notifications:')}\n distribution-history, volume-stats, notification-inbox, notification-unread\n\n${kleur.yellow('Testnet Only:')}\n faucet-usdc\n`;\n\nconst cli = cac('orderly');\n\ncli\n .version(getVersion())\n .help(() => {\n const firstArg = process.argv[2];\n const hasSubcommand = firstArg && !firstArg.startsWith('-') && firstArg !== 'help';\n if (!hasSubcommand) {\n console.log(DESCRIPTION);\n console.log(QUICK_START);\n }\n console.log(kleur.bold('Global Options:'));\n console.log(kleur.dim(' --network <network> Network: mainnet or testnet (default: testnet)'));\n console.log(kleur.dim(' --pretty Pretty-print JSON output (2-space indent)'));\n console.log(kleur.dim(' --csv Output as CSV instead of JSON (for list data)'));\n if (!hasSubcommand) {\n console.log('');\n console.log(kleur.dim('Run any command with --help for more details'));\n console.log(kleur.cyan(' orderly wallet-create --help'));\n console.log(kleur.cyan(' orderly order-place --help'));\n }\n })\n .option('--network <network>', 'Network: mainnet or testnet', {\n default: getDefaultNetwork(),\n })\n .option('--csv', 'Output as CSV instead of JSON (for list data)')\n .option('--pretty', 'Pretty-print JSON output (2-space indent)');\n\nfunction getFormat(options: { csv?: boolean }): OutputFormat {\n return options.csv ? 'csv' : 'json';\n}\n\n// Wallet commands - Setup flow\ncli\n .command('wallet-create', 'Create a new EVM or SOL wallet')\n .option('--type <type>', 'Wallet type: EVM or SOL (required in non-interactive mode)')\n .example('orderly wallet-create --type EVM')\n .example('orderly wallet-create --type SOL')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void walletCreate(options.type as WalletType, network);\n });\n\ncli\n .command('wallet-import [private-key]', 'Import an existing wallet private key')\n .option('--type <type>', 'Wallet type: EVM or SOL (required in non-interactive mode)')\n .option('--address <address>', 'Wallet address (optional, derived from key)')\n .option(\n '--private-key <key>',\n 'Private key (alternative to positional arg, for non-interactive use)'\n )\n .example('orderly wallet-import <private-key> --type EVM')\n .example('orderly wallet-import --private-key <key> --type SOL')\n .example('orderly wallet-import --type EVM')\n .action((privateKey, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void walletImport(\n options.type as WalletType,\n normalizeAddress(options.address),\n privateKey ?? options.privateKey,\n network\n );\n });\n\ncli\n .command('wallet-list', 'List all stored wallets')\n .example('orderly wallet-list')\n .example('orderly wallet-list --network testnet')\n .action((options) => {\n const network = options.network as Network | undefined;\n void walletList(network, getFormat(options));\n });\n\ncli\n .command(\n 'wallet-show [address]',\n 'Show wallet info (address required for AI/scripts, prompts if omitted)'\n )\n .example('orderly wallet-show')\n .example('orderly wallet-show 0x1234...')\n .action((address, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void walletShow(normalizeAddress(address), network, getFormat(options));\n });\n\ncli\n .command(\n 'wallet-logout [address]',\n 'Remove wallet from keychain (address required for AI/scripts, prompts if omitted)'\n )\n .example('orderly wallet-logout')\n .example('orderly wallet-logout 0x1234...')\n .action((address, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void walletLogout(normalizeAddress(address), network);\n });\n\ncli\n .command('wallet-register', 'Register an Orderly account with your wallet (Step 2 of setup)')\n .option(\n '--broker-id <id>',\n 'Broker ID, e.g., \"demo\" (required for AI/scripts, prompts if omitted)'\n )\n .option('--address <address>', 'Wallet address (required for AI/scripts, prompts if omitted)')\n .example('orderly wallet-register --broker-id demo')\n .example('orderly wallet-register --broker-id demo --address 0x1234...')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void walletRegister(options.brokerId, normalizeAddress(options.address), network);\n });\n\ncli\n .command('wallet-add-key', 'Add Orderly API key for trading (Step 3 of setup)')\n .option('--address <address>', 'Wallet address (required for AI/scripts, prompts if omitted)')\n .option('--scope <scope>', 'Key scopes: read,trading,asset (default: read,trading)')\n .option('--broker-id <id>', 'Broker ID (required when no API key stored for wallet)')\n .example('orderly wallet-add-key')\n .example('orderly wallet-add-key --scope read,trading')\n .example('orderly wallet-add-key --address \"0x1234...\" --broker-id demo --scope read,trading')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void walletAddKey(\n normalizeAddress(options.address),\n normalizeScope(options.scope),\n network,\n options.brokerId\n );\n });\n\n// Auth commands - For users with existing API keys\ncli\n .command(\n 'auth-import [private-key]',\n 'Import existing Ed25519 API key (for users who already have one)'\n )\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly auth-import <base64-key> --account 12345')\n .action((privateKey, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void importKey(privateKey, normalizeAccountId(options.account), network);\n });\n\ncli\n .command('auth-list', 'List all stored API keys (public keys only)')\n .option('--ids', 'Output only account IDs, one per line (for scripting/piping)')\n .example('orderly auth-list')\n .example('orderly auth-list --ids')\n .example('orderly auth-list --network testnet --ids')\n .action((options) => {\n const network = options.network as Network | undefined;\n void list(network, getFormat(options), options.ids || false);\n });\n\ncli\n .command('auth-show', 'Show public key for an account')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly auth-show')\n .example('orderly auth-show --account 0x1e6b...')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void show(\n options.account ? normalizeAccountId(options.account) : undefined,\n network,\n getFormat(options)\n );\n });\n\ncli\n .command('auth-logout [account-id]', 'Remove API key from keychain')\n .example('orderly auth-logout')\n .example('orderly auth-logout 12345')\n .action((accountId, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void logout(accountId, network);\n });\n\ncli\n .command('auth-cleanup', 'Remove all stored API keys for a network')\n .example('orderly auth-cleanup')\n .example('orderly auth-cleanup --network testnet')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void cleanup(network);\n });\n\ncli\n .command('auth-export-key [account-id]', 'Export Ed25519 private key (requires interactive TTY)')\n .example('orderly auth-export-key')\n .action((accountId, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void exportKey(accountId, network);\n });\n\n// Account commands\ncli\n .command('account-info', 'Get account information')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly account-info')\n .example('orderly account-info --account 0x1e6b...')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void info(normalizeAccountId(options.account), network, getFormat(options));\n });\n\ncli\n .command('account-balance', 'Get account balances')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly account-balance')\n .example('orderly account-balance --account 0x1e6b...')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void balance(normalizeAccountId(options.account), network, getFormat(options));\n });\n\ncli\n .command(\n 'account-statistics',\n 'Get account trading statistics (volume, fees, days since registration)'\n )\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly account-statistics')\n .example('orderly account-statistics --account 0x1e6b...')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void statistics(normalizeAccountId(options.account), network, getFormat(options));\n });\n\ncli\n .command(\n 'account-limits',\n 'Get margin requirements and position limits.\\n' +\n ' imr_factor: per-symbol factor used in initial margin calculation \u2014 IMR_i = max(1/max_leverage, base_imr, imr_factor * |notional|^0.8)\\n' +\n ' max_notional: max position size in USD per symbol\\n' +\n ' base_imr / base_mmr: minimum initial/maintenance margin ratios (shown with --symbol)\\n' +\n ' base_mmr: threshold for liquidation \u2014 MMR_i = max(base_mmr, (base_mmr/base_imr) * imr_factor * |notional|^0.8)'\n )\n .option(\n '--symbol <symbol>',\n 'Show limits for one symbol (includes base_imr, base_mmr, order rules)'\n )\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly account-limits')\n .example('orderly account-limits --symbol PERP_ETH_USDC')\n .example('orderly account-limits --account 0x1e6b...')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n const sym = options.symbol ? normalizeOptionalSymbol(options.symbol as string) : undefined;\n void limits(normalizeAccountId(options.account), sym, network, getFormat(options));\n });\n\ncli\n .command('key-info', 'Get registered API key info and scopes')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly key-info')\n .example('orderly key-info --account 0x1e6b...')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void keyInfo(normalizeAccountId(options.account), network, getFormat(options));\n });\n\ncli\n .command('fee-tier', 'Get current fee rates (futures, RWA, default)')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly fee-tier')\n .example('orderly fee-tier --account 0x1e6b...')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void feeTier(normalizeAccountId(options.account), network, getFormat(options));\n });\n\ncli\n .command('account-liquidations', 'Get account liquidation history')\n .option('--symbol <symbol>', 'Filter by symbol')\n .option('--page <n>', 'Page number (default: 1)')\n .option('--size <n>', 'Page size (default: 25)')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly account-liquidations')\n .example('orderly account-liquidations --symbol PERP_ETH_USDC')\n .example('orderly account-liquidations --page 2 --size 50')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n const page = options.page ? parseInt(options.page, 10) : undefined;\n const size = options.size ? parseInt(options.size, 10) : undefined;\n void liquidations(\n normalizeOptionalSymbol(options.symbol),\n page,\n size,\n normalizeAccountId(options.account),\n network,\n getFormat(options)\n );\n });\n\n// Trading commands\ncli\n .command('order-place <symbol> <side> [type] <quantity>', 'Place a new order')\n .usage(\n 'order-place <symbol> <side> [type] <quantity>\\n\\n' +\n 'Order types: MARKET, LIMIT, IOC, FOK, POST_ONLY, ASK, BID\\n\\n' +\n 'If [type] is omitted, the short form is used \u2014 provide BID or ASK as <side>:\\n' +\n ' BID \u2192 market buy (equivalent to BUY MARKET)\\n' +\n ' ASK \u2192 market sell (equivalent to SELL MARKET)\\n\\n' +\n ' orderly order-place PERP_ETH_USDC BID 0.01\\n' +\n ' orderly order-place PERP_ETH_USDC ASK 0.01\\n\\n' +\n 'Side: BUY, SELL'\n )\n .option('--price <price>', 'Order price (required for LIMIT, IOC, FOK, POST_ONLY)')\n .option('--client-order-id <id>', 'Custom client order ID (optional)')\n .option('--reduce-only', 'Reduce-only order (can only reduce existing position, not open new)')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly order-place PERP_ETH_USDC BUY MARKET 0.01')\n .example('orderly order-place PERP_ETH_USDC SELL LIMIT 0.01 --price 3500')\n .example('orderly order-place PERP_ETH_USDC BUY IOC 0.01 --price 2100')\n .example('orderly order-place PERP_ETH_USDC SELL FOK 0.01 --price 2100')\n .example('orderly order-place PERP_ETH_USDC BUY POST_ONLY 0.01 --price 2000')\n .example('# Short form (type omitted):')\n .example('orderly order-place PERP_ETH_USDC ASK 0.01')\n .example('orderly order-place PERP_ETH_USDC BID 0.01')\n .example('orderly order-place PERP_ETH_USDC BUY MARKET 0.01 --client-order-id my-order-123')\n .example('orderly order-place PERP_ETH_USDC SELL LIMIT 0.01 --price 3500 --reduce-only')\n .action((symbol, side, type, quantity, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n let resolvedSide: string = side;\n let resolvedType: string = type;\n let resolvedQuantity: string;\n if (quantity === undefined) {\n resolvedQuantity = type;\n resolvedType = side.toUpperCase();\n if (resolvedType === 'BID') {\n resolvedSide = 'BUY';\n } else if (resolvedType === 'ASK') {\n resolvedSide = 'SELL';\n } else {\n error(\n `Invalid short form. Use BID (market buy) or ASK (market sell), or provide all 4 args: <symbol> <side> <type> <quantity>`,\n [\n 'Examples:',\n ' orderly order-place PERP_ETH_USDC BID 0.01',\n ' orderly order-place PERP_ETH_USDC BUY MARKET 0.01',\n ]\n );\n return;\n }\n } else {\n resolvedQuantity = quantity;\n }\n void place(\n normalizeSymbol(symbol),\n resolvedSide,\n resolvedType,\n resolvedQuantity,\n options.price,\n options.clientOrderId,\n options.reduceOnly === true,\n normalizeAccountId(options.account),\n network,\n getFormat(options)\n );\n });\n\ncli\n .command('order-cancel <order-id>', 'Cancel an order')\n .option('--symbol <symbol>', 'Symbol of the order (auto-fetched if not provided)')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly order-cancel 123456')\n .example('orderly order-cancel 123456 --symbol PERP_ETH_USDC')\n .action((orderId, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void cancel(\n orderId,\n normalizeOptionalSymbol(options.symbol),\n normalizeAccountId(options.account),\n network,\n getFormat(options)\n );\n });\n\ncli\n .command('order-edit <order-id>', 'Edit a pending order (only specify what to change)')\n .option('--symbol <symbol>', 'Symbol of the order (auto-fetched if not provided)')\n .option('--price <price>', 'New order price')\n .option('--quantity <quantity>', 'New order quantity')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly order-edit 123456 --price 3500')\n .example('orderly order-edit 123456 --quantity 0.02')\n .example('orderly order-edit 123456 --price 3500 --quantity 0.01')\n .action((orderId, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void edit(\n orderId,\n normalizeOptionalSymbol(options.symbol),\n options.price,\n options.quantity,\n normalizeAccountId(options.account),\n network,\n getFormat(options)\n );\n });\n\ncli\n .command('order-cancel-all', 'Cancel all orders')\n .option('--symbol <symbol>', 'Filter by symbol (optional)')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly order-cancel-all')\n .example('orderly order-cancel-all --symbol PERP_ETH_USDC')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void cancelAll(\n normalizeOptionalSymbol(options.symbol),\n normalizeAccountId(options.account),\n network,\n getFormat(options)\n );\n });\n\ncli\n .command('order-list', 'List orders (defaults to open/active orders)')\n .option('--symbol <symbol>', 'Filter by symbol')\n .option(\n '--status <status>',\n 'Filter by status: NEW, FILLED, CANCELLED, PARTIAL_FILLED, REJECTED, INCOMPLETE, COMPLETED'\n )\n .option('--side <side>', 'Filter by side: BUY, SELL')\n .option('--order-type <type>', 'Filter by type: LIMIT, MARKET')\n .option(\n '--sort-by <sort>',\n 'Sort: CREATED_TIME_ASC, CREATED_TIME_DESC, UPDATED_TIME_ASC, UPDATED_TIME_DESC'\n )\n .option('--page <n>', 'Page number (default: 1)')\n .option('--size <n>', 'Page size (default: 25, max: 500)')\n .option('--all', 'Show all orders (overrides default INCOMPLETE filter)')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly order-list')\n .example('orderly order-list --all')\n .example('orderly order-list --symbol PERP_ETH_USDC')\n .example('orderly order-list --status FILLED --symbol PERP_ETH_USDC')\n .example('orderly order-list --side BUY --order-type LIMIT')\n .example('orderly order-list --page 2 --size 50')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n const page = options.page ? parseInt(options.page, 10) : undefined;\n const size = options.size ? parseInt(options.size, 10) : undefined;\n const status = options.status ?? (options.all ? undefined : 'INCOMPLETE');\n void listOrders(\n normalizeOptionalSymbol(options.symbol),\n status,\n options.side,\n options.orderType,\n options.sortBy,\n page,\n size,\n normalizeAccountId(options.account),\n network,\n getFormat(options)\n );\n });\n\ncli\n .command('batch-order-place <orders>', 'Place multiple orders (max 10)')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .usage(\n 'batch-order-place <orders>\\n\\n' +\n 'Each order object accepts these fields:\\n\\n' +\n ' CLI name API name Required Description\\n' +\n ' symbol symbol Yes Trading pair (e.g. PERP_ETH_USDC)\\n' +\n ' type order_type Yes LIMIT, MARKET, IOC, FOK, POST_ONLY, ASK, BID\\n' +\n ' side side Yes BUY or SELL\\n' +\n ' quantity order_quantity Yes Order quantity (positive number)\\n' +\n ' price order_price Cond.* Order price (required for LIMIT, IOC, FOK, POST_ONLY)\\n' +\n ' client_order_id client_order_id No Custom ID, unique among open orders'\n )\n .example('# Using CLI-style field names (recommended):')\n .example(\n 'orderly batch-order-place \\'[{\"symbol\":\"PERP_ETH_USDC\",\"type\":\"LIMIT\",\"side\":\"BUY\",\"quantity\":\"0.01\",\"price\":\"2000\"}]\\''\n )\n .example('# Using API field names (also accepted):')\n .example(\n 'orderly batch-order-place \\'[{\"symbol\":\"PERP_ETH_USDC\",\"order_type\":\"LIMIT\",\"side\":\"BUY\",\"order_quantity\":\"0.01\",\"order_price\":\"2000\"}]\\''\n )\n .example('# From file:')\n .example('orderly batch-order-place orders.json')\n .action((orders, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void batchPlace(orders, normalizeAccountId(options.account), network, getFormat(options));\n });\n\ncli\n .command('batch-order-cancel <order-ids...>', 'Cancel multiple orders by IDs')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly batch-order-cancel 123 456 789')\n .action((orderIds, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n const ids = Array.isArray(orderIds) ? orderIds : [orderIds];\n void batchCancel(ids, normalizeAccountId(options.account), network, getFormat(options));\n });\n\ncli\n .command(\n 'batch-order-cancel-by-client-id <client-order-ids...>',\n 'Cancel multiple orders by client order IDs (max 10)'\n )\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly batch-order-cancel-by-client-id my-order-1 my-order-2 my-order-3')\n .action((clientOrderIds, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n const ids = Array.isArray(clientOrderIds) ? clientOrderIds : [clientOrderIds];\n void batchCancelByClientId(\n ids,\n normalizeAccountId(options.account),\n network,\n getFormat(options)\n );\n });\n\ncli\n .command(\n 'order-get [order-id]',\n 'Get order details. Auto-detects numeric order ID vs client order ID'\n )\n .option('--client-order-id <id>', 'Explicitly look up by client order ID')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly order-get 123456')\n .example('orderly order-get my-order-123')\n .example('orderly order-get --client-order-id my-order-123')\n .action((orderId, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void getOrder(\n orderId,\n options.clientOrderId,\n normalizeAccountId(options.account),\n network,\n getFormat(options)\n );\n });\n\ncli\n .command(\n 'order-cancel-by-client-id <client-order-id> <symbol>',\n 'Cancel an order by client order ID'\n )\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly order-cancel-by-client-id my-order-123 PERP_ETH_USDC')\n .action((clientOrderId, symbol, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void cancelByClientId(\n clientOrderId,\n normalizeSymbol(symbol),\n normalizeAccountId(options.account),\n network,\n getFormat(options)\n );\n });\n\ncli\n .command('order-trades <order-id>', 'Get trades for a specific order')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly order-trades 123456')\n .action((orderId, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void orderTrades(orderId, normalizeAccountId(options.account), network, getFormat(options));\n });\n\ncli\n .command('positions-list', 'List open positions')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly positions-list')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void listPositions(normalizeAccountId(options.account), network, getFormat(options));\n });\n\ncli\n .command('positions-close <symbol>', 'Close a position')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .option('--quantity <n>', 'Partial close quantity (default: full position)')\n .example('orderly positions-close PERP_ETH_USDC')\n .example('orderly positions-close PERP_ETH_USDC --quantity 0.005')\n .action((symbol, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n const quantity = options.quantity !== undefined ? parseFloat(options.quantity) : undefined;\n void closePosition(\n normalizeSymbol(symbol),\n normalizeAccountId(options.account),\n network,\n getFormat(options),\n quantity\n );\n });\n\ncli\n .command('market-orderbook <symbol>', 'Get orderbook snapshot')\n .option('--depth <n>', 'Number of price levels per side (default: all)')\n .example('orderly market-orderbook PERP_ETH_USDC')\n .example('orderly market-orderbook PERP_ETH_USDC --depth 10')\n .action((symbol, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n const depth = options.depth != null ? parseInt(options.depth, 10) : undefined;\n void getOrderbook(normalizeSymbol(symbol), network, getFormat(options), depth);\n });\n\ncli\n .command('positions-history', 'Get position history')\n .option('--symbol <symbol>', 'Filter by symbol')\n .option('--start-time <timestamp>', 'Start timestamp (Unix ms)')\n .option('--end-time <timestamp>', 'End timestamp (Unix ms)')\n .option('--page <n>', 'Page number (default: 1)')\n .option('--size <n>', 'Page size (default: 25)')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly positions-history')\n .example('orderly positions-history --symbol PERP_ETH_USDC')\n .example('orderly positions-history --page 2 --size 50')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n const startT = options.startTime ? parseInt(options.startTime, 10) : undefined;\n const endT = options.endTime ? parseInt(options.endTime, 10) : undefined;\n const page = options.page ? parseInt(options.page, 10) : undefined;\n const size = options.size ? parseInt(options.size, 10) : undefined;\n void positionHistory(\n normalizeOptionalSymbol(options.symbol),\n startT,\n endT,\n page,\n size,\n normalizeAccountId(options.account),\n network,\n getFormat(options)\n );\n });\ncli\n .command('leverage <symbol> [value]', 'Get or set leverage for a symbol')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly leverage PERP_ETH_USDC')\n .example('orderly leverage PERP_ETH_USDC 10')\n .action((symbol, value, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n const leverageValue = value !== undefined ? parseFloat(value) : undefined;\n void getOrSetLeverage(\n normalizeSymbol(symbol),\n leverageValue,\n normalizeAccountId(options.account),\n network,\n getFormat(options)\n );\n });\n\ncli\n .command('trades', 'Get trade history')\n .option('--symbol <symbol>', 'Filter by symbol')\n .option('--start-time <timestamp>', 'Start timestamp (Unix ms)')\n .option('--end-time <timestamp>', 'End timestamp (Unix ms)')\n .option('--page <n>', 'Page number (default: 1)')\n .option('--size <n>', 'Page size (default: 25, max: 500)')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly trades')\n .example('orderly trades --symbol PERP_ETH_USDC')\n .example('orderly trades --page 2 --size 50')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n const startT = options.startTime ? parseInt(options.startTime, 10) : undefined;\n const endT = options.endTime ? parseInt(options.endTime, 10) : undefined;\n const page = options.page ? parseInt(options.page, 10) : undefined;\n const size = options.size ? parseInt(options.size, 10) : undefined;\n void listTrades(\n normalizeOptionalSymbol(options.symbol),\n startT,\n endT,\n page,\n size,\n normalizeAccountId(options.account),\n network,\n getFormat(options)\n );\n });\n\ncli\n .command(\n 'algo-order-place <symbol> <side> <algoType> <quantity>',\n [\n 'Place an algo order.',\n '',\n 'Valid algoTypes and their required flags:',\n ' STOP --trigger-price',\n ' TP_SL --tp-trigger-price and/or --sl-trigger-price',\n ' POSITIONAL_TP_SL --tp-trigger-price and/or --sl-trigger-price (quantity must be 0)',\n ' TRAILING_STOP --callback-rate (1-15%)',\n ' BRACKET --trigger-price + --tp-trigger-price and/or --sl-trigger-price',\n '',\n 'Valid sides: BUY, SELL',\n ].join('\\n')\n )\n .option('--trigger-price <price>', 'Trigger price (required for STOP and BRACKET)')\n .option(\n '--callback-rate <rate>',\n 'Trailing callback rate: 1-15 for percentage (e.g. 5 = 5%), or 0.01-0.15 as decimal. Required for TRAILING_STOP'\n )\n .option('--price <price>', 'Order price (for limit orders)')\n .option(\n '--tp-trigger-price <price>',\n 'Take-profit trigger price (for TP_SL/POSITIONAL_TP_SL/BRACKET)'\n )\n .option('--tp-price <price>', 'Take-profit order price (optional, MARKET if not set)')\n .option(\n '--sl-trigger-price <price>',\n 'Stop-loss trigger price (for TP_SL/POSITIONAL_TP_SL/BRACKET)'\n )\n .option('--sl-price <price>', 'Stop-loss order price (optional, MARKET if not set)')\n .option('--reduce-only', 'Reduce-only order (can only reduce existing position, not open new)')\n .option('--client-order-id <id>', 'Custom client order ID (optional)')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly algo-order-place PERP_ETH_USDC SELL STOP 0.01 --trigger-price 2000')\n .example(\n 'orderly algo-order-place PERP_ETH_USDC SELL TP_SL 0.01 --tp-trigger-price 2500 --sl-trigger-price 1500'\n )\n .example(\n 'orderly algo-order-place PERP_ETH_USDC SELL POSITIONAL_TP_SL 0 --tp-trigger-price 2500 --sl-trigger-price 1500'\n )\n .example('orderly algo-order-place PERP_ETH_USDC SELL TRAILING_STOP 0.01 --callback-rate 5')\n .example(\n 'orderly algo-order-place PERP_ETH_USDC SELL BRACKET 0.01 --trigger-price 2300 --price 2300 --tp-trigger-price 2000 --sl-trigger-price 2500'\n )\n .action((symbol, side, algoType, quantity, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void placeAlgoOrder(\n normalizeSymbol(symbol),\n side,\n algoType,\n quantity,\n options.triggerPrice,\n options.callbackRate,\n options.price,\n options.tpTriggerPrice,\n options.tpPrice,\n options.slTriggerPrice,\n options.slPrice,\n options.reduceOnly,\n options.clientOrderId,\n normalizeAccountId(options.account),\n network,\n getFormat(options)\n );\n });\n\ncli\n .command('algo-order-cancel <order-id>', 'Cancel an algo order')\n .option('--symbol <symbol>', 'Symbol of the order (auto-fetched if not provided)')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly algo-order-cancel 123456')\n .example('orderly algo-order-cancel 123456 --symbol PERP_ETH_USDC')\n .action((orderId, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void cancelAlgoOrder(\n orderId,\n normalizeOptionalSymbol(options.symbol),\n normalizeAccountId(options.account),\n network,\n getFormat(options)\n );\n });\n\ncli\n .command(\n 'algo-order-edit <order-id>',\n 'Edit a pending algo order (only specify what to change: price, quantity, trigger-price, callback-rate)'\n )\n .option('--symbol <symbol>', 'Symbol of the order (auto-fetched if not provided)')\n .option('--price <price>', 'New order price')\n .option('--quantity <quantity>', 'New order quantity')\n .option('--trigger-price <price>', 'New trigger price')\n .option(\n '--callback-rate <rate>',\n 'New callback rate: 1-15 for percentage, or 0.01-0.15 as decimal'\n )\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly algo-order-edit 123456 --price 2500')\n .example('orderly algo-order-edit 123456 --quantity 0.02')\n .example('orderly algo-order-edit 123456 --trigger-price 1500')\n .example('orderly algo-order-edit 123456 --callback-rate 3')\n .action((orderId, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void editAlgoOrder(\n orderId,\n normalizeOptionalSymbol(options.symbol),\n options.price,\n options.quantity,\n options.triggerPrice,\n options.callbackRate,\n normalizeAccountId(options.account),\n network,\n getFormat(options)\n );\n });\n\ncli\n .command('algo-order-cancel-all', 'Cancel all algo orders')\n .option('--symbol <symbol>', 'Filter by symbol (optional)')\n .option('--algo-type <type>', 'Filter by algo type: STOP, TP_SL, TRAILING_STOP, BRACKET')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly algo-order-cancel-all')\n .example('orderly algo-order-cancel-all --symbol PERP_ETH_USDC')\n .example('orderly algo-order-cancel-all --algo-type STOP')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void cancelAllAlgoOrders(\n normalizeOptionalSymbol(options.symbol),\n options.algoType,\n normalizeAccountId(options.account),\n network,\n getFormat(options)\n );\n });\n\ncli\n .command('algo-order-list', 'List algo orders')\n .option('--symbol <symbol>', 'Filter by symbol')\n .option('--status <status>', 'Filter by status: NEW, CANCELLED, INCOMPLETE, COMPLETED')\n .option(\n '--algo-type <type>',\n 'Filter by algo type: STOP, TP_SL, POSITIONAL_TP_SL, TRAILING_STOP, BRACKET'\n )\n .option('--page <n>', 'Page number (default: 1)')\n .option('--size <n>', 'Page size (default: 25, max: 500)')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly algo-order-list')\n .example('orderly algo-order-list --symbol PERP_ETH_USDC')\n .example('orderly algo-order-list --status INCOMPLETE')\n .example('orderly algo-order-list --algo-type STOP')\n .example('orderly algo-order-list --page 2 --size 50')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n const page = options.page ? parseInt(options.page, 10) : undefined;\n const size = options.size ? parseInt(options.size, 10) : undefined;\n void listAlgoOrders(\n normalizeOptionalSymbol(options.symbol),\n options.status,\n page,\n size,\n options.algoType,\n normalizeAccountId(options.account),\n network,\n getFormat(options)\n );\n });\n\ncli\n .command('algo-order-trades <order-id>', 'Get trades for a specific algo order')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly algo-order-trades 123456')\n .action((orderId, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void algoOrderTrades(orderId, normalizeAccountId(options.account), network, getFormat(options));\n });\n\ncli\n .command('algo-order-get <order-id>', 'Get details for a specific algo order')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly algo-order-get 123456')\n .action((orderId, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void getAlgoOrder(orderId, normalizeAccountId(options.account), network, getFormat(options));\n });\n\ncli\n .command(\n 'algo-order-cancel-by-client-id <client-order-id> <symbol>',\n 'Cancel an algo order by client order ID'\n )\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly algo-order-cancel-by-client-id my-algo-123 PERP_ETH_USDC')\n .action((clientOrderId, symbol, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void cancelAlgoOrderByClientId(\n clientOrderId,\n normalizeSymbol(symbol),\n normalizeAccountId(options.account),\n network,\n getFormat(options)\n );\n });\n\ncli\n .command('funding-history', 'Get funding fee history')\n .option('--symbol <symbol>', 'Filter by symbol')\n .option('--start-time <timestamp>', 'Start timestamp (Unix ms)')\n .option('--end-time <timestamp>', 'End timestamp (Unix ms)')\n .option('--page <n>', 'Page number (default: 1)')\n .option('--size <n>', 'Page size (default: 25)')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly funding-history')\n .example('orderly funding-history --symbol PERP_ETH_USDC')\n .example('orderly funding-history --page 2 --size 50')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n const startT = options.startTime ? parseInt(options.startTime, 10) : undefined;\n const endT = options.endTime ? parseInt(options.endTime, 10) : undefined;\n const page = options.page ? parseInt(options.page, 10) : undefined;\n const size = options.size ? parseInt(options.size, 10) : undefined;\n void fundingHistory(\n normalizeOptionalSymbol(options.symbol),\n startT,\n endT,\n page,\n size,\n normalizeAccountId(options.account),\n network,\n getFormat(options)\n );\n });\n\ncli\n .command('settle-pnl', 'Settle unrealized PnL into account balance')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly settle-pnl --account 0x1e6b...')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void settlePnl(normalizeAccountId(options.account), network, getFormat(options));\n });\n\ncli\n .command('settle-pnl-history', 'Get on-chain PnL settlement history')\n .option('--page <n>', 'Page number (default: 1)')\n .option('--size <n>', 'Page size (default: 25)')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly settle-pnl-history')\n .example('orderly settle-pnl-history --page 2 --size 50')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n const page = options.page ? parseInt(options.page, 10) : undefined;\n const size = options.size ? parseInt(options.size, 10) : undefined;\n void settlePnlHistory(\n page,\n size,\n normalizeAccountId(options.account),\n network,\n getFormat(options)\n );\n });\n\ncli\n .command('referral-info', 'Get referral information (referrer/referee stats and codes)')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly referral-info')\n .example('orderly referral-info --account 0x1e6b...')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void referralInfo(normalizeAccountId(options.account), network, getFormat(options));\n });\n\ncli\n .command('distribution-history', 'Get broker fee and referral rebate history')\n .option('--status <status>', 'Filter by status: CREATED, SPLIT, COMPLETED')\n .option('--type <type>', 'Filter by type: BROKER_FEE, REFEREE_REBATE, REFERRER_REBATE')\n .option('--start-time <timestamp>', 'Start timestamp (Unix ms)')\n .option('--end-time <timestamp>', 'End timestamp (Unix ms)')\n .option('--page <n>', 'Page number (default: 1)')\n .option('--size <n>', 'Page size (default: 25)')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly distribution-history')\n .example('orderly distribution-history --type REFERRER_REBATE')\n .example('orderly distribution-history --status COMPLETED --page 2 --size 50')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n const startT = options.startTime ? parseInt(options.startTime, 10) : undefined;\n const endT = options.endTime ? parseInt(options.endTime, 10) : undefined;\n const page = options.page ? parseInt(options.page, 10) : undefined;\n const size = options.size ? parseInt(options.size, 10) : undefined;\n void distributionHistory(\n options.status,\n options.type,\n startT,\n endT,\n page,\n size,\n normalizeAccountId(options.account),\n network,\n getFormat(options)\n );\n });\n\ncli\n .command('volume-stats', 'Get perp trading volume statistics (today, 1d, 7d, 30d, YTD, LTD)')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly volume-stats')\n .example('orderly volume-stats --account 0x1e6b...')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void volumeStats(normalizeAccountId(options.account), network, getFormat(options));\n });\n\ncli\n .command('notification-inbox', 'List notification inbox messages')\n .option('--type <type>', 'Filter by type: TRADE or SYSTEM')\n .option('--page <n>', 'Page number (default: 1)')\n .option('--size <n>', 'Page size (default: 25)')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly notification-inbox')\n .example('orderly notification-inbox --type TRADE')\n .example('orderly notification-inbox --page 2 --size 50')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n const page = options.page ? parseInt(options.page, 10) : undefined;\n const size = options.size ? parseInt(options.size, 10) : undefined;\n void inbox(\n options.type,\n page,\n size,\n normalizeAccountId(options.account),\n network,\n getFormat(options)\n );\n });\n\ncli\n .command('notification-unread', 'Get unread notification count and messages')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly notification-unread')\n .example('orderly notification-unread --account 0x1e6b...')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void inboxUnread(normalizeAccountId(options.account), network, getFormat(options));\n });\n\ncli\n .command('market-price <symbol>', 'Get current market price')\n .example('orderly market-price PERP_ETH_USDC')\n .example('orderly market-price PERP_BTC_USDC')\n .action((symbol, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void getPrice(normalizeSymbol(symbol), network, getFormat(options));\n });\n\ncli\n .command(\n 'symbols',\n 'List trading symbols. Default: compact list (symbol, pair, prices). Use --info for full order rules (lot size, min notional, price tick, etc.)'\n )\n .option(\n '--info',\n 'Show detailed per-symbol order rules instead of compact list (calls /v1/public/info instead of /v1/public/futures)'\n )\n .example('orderly symbols')\n .example('orderly symbols --csv')\n .example('orderly symbols --info')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void getSymbols(options.info, network, getFormat(options));\n });\n\ncli\n .command(\n 'kline <symbol> <type>',\n 'Get candlestick/kline data. Valid intervals: 1m, 5m, 15m, 30m, 1h, 4h, 12h, 1d, 1w, 1mon'\n )\n .option('--size <n>', 'Number of candles (default: 100, max: 1000)')\n .example('orderly kline PERP_ETH_USDC 1h')\n .example('orderly kline PERP_BTC_USDC 1d --size 30')\n .action((symbol, type, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n const parsed = options.size != null ? parseInt(String(options.size), 10) : 100;\n if (isNaN(parsed) || parsed <= 0) {\n error(`Invalid --size value: \"${options.size}\". Must be a positive integer.`);\n return;\n }\n void getKline(normalizeSymbol(symbol), type, parsed, network, getFormat(options));\n });\n\ncli\n .command('market-trades <symbol>', 'Get recent public trades')\n .option('--size <n>', 'Number of trades (default: 50)')\n .example('orderly market-trades PERP_ETH_USDC')\n .example('orderly market-trades PERP_BTC_USDC --size 20')\n .action((symbol, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n const parsed = options.size != null ? parseInt(String(options.size), 10) : undefined;\n if (options.size != null && (isNaN(parsed!) || parsed! <= 0)) {\n error(`Invalid --size value: \"${options.size}\". Must be a positive integer.`);\n return;\n }\n void getMarketTrades(normalizeSymbol(symbol), parsed, network, getFormat(options));\n });\n\ncli\n .command('funding-rates', 'Get public funding rates for all symbols (no auth required)')\n .option('--symbol <symbol>', 'Filter by symbol')\n .example('orderly funding-rates')\n .example('orderly funding-rates --symbol PERP_ETH_USDC')\n .example('orderly funding-rates --network mainnet')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void getFundingRates(normalizeOptionalSymbol(options.symbol), network, getFormat(options));\n });\n\ncli\n .command(\n 'price-changes',\n 'Get price changes for all symbols (5m, 30m, 1h, 24h, 7d, 30d) (no auth required)'\n )\n .example('orderly price-changes')\n .example('orderly price-changes --symbol PERP_ETH_USDC')\n .example('orderly price-changes --network mainnet')\n .option('--symbol <symbol>', 'Filter by symbol')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void getPriceChanges(normalizeOptionalSymbol(options.symbol), network, getFormat(options));\n });\n\ncli\n .command('open-interest', 'Get long/short open interest for all symbols (no auth required)')\n .option('--symbol <symbol>', 'Filter by symbol')\n .example('orderly open-interest')\n .example('orderly open-interest --symbol PERP_ETH_USDC')\n .example('orderly open-interest --network mainnet')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void getOpenInterest(normalizeOptionalSymbol(options.symbol), network, getFormat(options));\n });\n\ncli\n .command('liquidated-positions', 'Get public liquidated positions (no auth required)')\n .option('--symbol <symbol>', 'Filter by symbol')\n .option('--page <n>', 'Page number (default: 1)')\n .option('--size <n>', 'Page size (default: 25)')\n .example('orderly liquidated-positions')\n .example('orderly liquidated-positions --symbol PERP_ETH_USDC')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n const page = options.page ? parseInt(options.page, 10) : undefined;\n const size = options.size ? parseInt(options.size, 10) : undefined;\n void getLiquidatedPositions(\n normalizeOptionalSymbol(options.symbol),\n page,\n size,\n network,\n getFormat(options)\n );\n });\n\ncli\n .command('system-status', 'Get Orderly system maintenance status (no auth required)')\n .example('orderly system-status')\n .example('orderly system-status --network mainnet')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void getSystemStatus(network, getFormat(options));\n });\n\n// Testnet faucet\ncli\n .command('faucet-usdc <address>', 'Get test USDC from faucet (testnet only)')\n .option(\n '--chain-id <id>',\n 'Required. EVM: 421614 (Arbitrum Sepolia), 84532 (Base Sepolia). SOL: 901901901 (Devnet)'\n )\n .option('--broker-id <id>', 'Broker ID (default: demo)')\n .example('# EVM (Arbitrum Sepolia):')\n .example('orderly faucet-usdc 0x1234... --chain-id 421614')\n .example('orderly faucet-usdc 0x1234... --chain-id 421614 --broker-id demo')\n .example('# SOL (Devnet):')\n .example('orderly faucet-usdc <sol-address> --chain-id 901901901')\n .action((address, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n const chainId = options.chainId ? String(options.chainId) : undefined;\n void faucetUsdc(\n requireAddress(address),\n chainId,\n network,\n getFormat(options),\n options.brokerId\n );\n });\n\n// Asset commands\ncli\n .command('chains', 'List supported chains (no auth required)')\n .option('--broker-id <id>', 'Filter chains by broker ID')\n .option('--verbose', 'Include broker_ids array for each chain')\n .example('orderly chains')\n .example('orderly chains --broker-id demo')\n .example('orderly chains --verbose')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void getChains(network, getFormat(options), options.brokerId, options.verbose);\n });\n\ncli\n .command('tokens', 'List supported tokens (no auth required)')\n .option('--verbose', 'Include chain_details array for each token')\n .example('orderly tokens')\n .example('orderly tokens --verbose')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n void getTokens(network, getFormat(options), options.verbose);\n });\n\ncli\n .command('deposit-info <token> <chain-id>', 'Get deposit info for a token')\n .example('orderly deposit-info USDC 421614')\n .action((token, chainId, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n const format: OutputFormat = (options.csv as boolean) ? 'csv' : 'json';\n void depositInfo(token, Number(chainId), network, format);\n });\n\ncli\n .command(\n 'withdraw <token> <chain-id>',\n 'Withdraw tokens (auto-signs with wallet key). Omit --receiver to withdraw to your own wallet address.'\n )\n .option('--receiver <address>', 'Destination address (defaults to your wallet address)')\n .option('--amount <amount>', 'Amount to withdraw (required, e.g. 10.5)')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .option('--raw', 'Amount is in smallest units (default: false, use human-readable like 10.5)')\n .option(\n '--allow-cross-chain',\n 'Allow cross-chain withdrawal (required when destination chain differs from deposit chain)'\n )\n .example('# Withdraw 10 USDC to your own wallet address')\n .example('orderly withdraw USDC 421614 --amount 10')\n .example('# Withdraw 10 USDC to a specific address')\n .example('orderly withdraw USDC 421614 --amount 10 --receiver 0x1234...')\n .example('# Withdraw to SOL chain (50 USDC)')\n .example('orderly withdraw USDC 901901901 --amount 50 --receiver <sol-address>')\n .example('# Use raw amount (10000000 = 10 USDC with 6 decimals)')\n .example('orderly withdraw USDC 421614 --amount 10000000 --raw --receiver 0x1234...')\n .example('# Withdraw to different chain (cross-chain)')\n .example('orderly withdraw USDC 84532 --amount 10 --receiver 0x1234... --allow-cross-chain')\n .action((token, chainId, options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n if (options.amount === undefined || options.amount === null) {\n error('Missing required option: --amount');\n }\n let receiver: string | undefined;\n if (options.receiver != null) {\n receiver = String(options.receiver);\n if (/^\\d+(\\.\\d+)?(e\\+?\\d+)?$/i.test(receiver)) {\n const idx = process.argv.indexOf('--receiver');\n if (idx !== -1 && process.argv[idx + 1]) {\n receiver = process.argv[idx + 1];\n }\n }\n }\n void withdraw(\n token,\n String(options.amount),\n receiver,\n parseInt(chainId, 10),\n normalizeAccountId(options.account),\n network,\n options.raw,\n options.allowCrossChain,\n getFormat(options)\n );\n });\n\ncli\n .command('asset-history', 'Get asset deposit/withdraw history')\n .option('--token <token>', 'Filter by token')\n .option('--side <side>', 'Filter by side: DEPOSIT or WITHDRAW')\n .option(\n '--status <status>',\n 'Filter by status: NEW, CONFIRM, PROCESSING, COMPLETED, FAILED, PENDING_REBALANCE'\n )\n .option('--page <n>', 'Page number (default: 1)')\n .option('--size <n>', 'Page size (default: 25)')\n .option('--account <id>', 'Account ID (auto-resolves if single account)')\n .example('orderly asset-history')\n .example('orderly asset-history --side DEPOSIT')\n .example('orderly asset-history --status PROCESSING')\n .example('orderly asset-history --page 2 --size 50')\n .action((options) => {\n const network = (options.network as Network) || getDefaultNetwork();\n const page = options.page ? parseInt(options.page, 10) : undefined;\n const size = options.size ? parseInt(options.size, 10) : undefined;\n void assetHistory(\n options.token,\n options.side,\n options.status,\n page,\n size,\n normalizeAccountId(options.account),\n network,\n getFormat(options)\n );\n });\n\nconst rawArgs = process.argv.slice(2);\n\nfor (let i = 2; i < rawArgs.length; i++) {\n if (/^-\\d+(\\.\\d+)?$/.test(rawArgs[i])) {\n console.error(\n `Error: Invalid argument \"${rawArgs[i]}\". Negative numbers look like CLI flags.\\n` +\n `Use a positive value, or quote the value to avoid shell parsing issues.`\n );\n process.exit(1);\n }\n}\n\ntry {\n cli.parse();\n\n if (rawArgs.length > 0 && !rawArgs[0].startsWith('-')) {\n const commandPart = rawArgs[0];\n const matched = cli.commands.some(\n (c) =>\n c.name === commandPart ||\n (Array.isArray(c.aliasNames) && c.aliasNames.includes(commandPart))\n );\n if (\n !matched &&\n commandPart !== 'help' &&\n !rawArgs.includes('--help') &&\n !rawArgs.includes('-h') &&\n !rawArgs.includes('--version') &&\n !rawArgs.includes('-v')\n ) {\n const { error: outputError } = await import('./lib/output.js');\n outputError(`Unknown command: ${commandPart}`, [\n `Run ${kleur.cyan('orderly --help')} to see available commands.`,\n ]);\n process.exit(1);\n }\n }\n} catch (err) {\n if (err instanceof Error && err.name === 'CACError') {\n const message = err.message;\n const missingMatch = message.match(/missing required args for command `(.+)`/);\n if (missingMatch) {\n const commandName = missingMatch[1];\n error(`${message}`, [`Usage examples:`, ` orderly ${commandName} --help`]);\n }\n const unknownMatch = message.match(/Unknown option `(.+)`/);\n if (unknownMatch) {\n const flag = unknownMatch[1];\n const commandPart = rawArgs[0] || '';\n const hints: string[] = [];\n if (flag === '--account') {\n hints.push(`This command does not accept ${kleur.cyan('--account')}.`);\n const matchedCmd = cli.commands.find(\n (c) =>\n c.name === commandPart ||\n (Array.isArray(c.aliasNames) && c.aliasNames.includes(commandPart))\n );\n if (matchedCmd) {\n const hasAddress = matchedCmd.options.some((o: { name: string }) => o.name === 'address');\n if (hasAddress) {\n hints.push(`Did you mean ${kleur.cyan('--address <wallet-address>')}?`);\n }\n const hasAccountPos = matchedCmd.args.some(\n (a: { value: string }) => a.value === 'account-id' || a.value === 'account'\n );\n if (hasAccountPos) {\n hints.push(\n `This command takes account ID as a positional argument: ${kleur.cyan(`orderly ${commandPart} <account-id>`)}`\n );\n }\n }\n }\n if (hints.length === 0) {\n hints.push(`Run ${kleur.cyan(`orderly ${commandPart} --help`)} to see valid options.`);\n }\n error(message, hints);\n }\n error(message, [`Run ${kleur.cyan('orderly --help')} to see available commands.`]);\n }\n throw err;\n}\n", "import kleur from 'kleur';\nimport prompts from 'prompts';\nimport { publicKeyFromPrivateKey, base64ToBase58, base58ToBase64 } from '../lib/crypto.js';\nimport { storeKey, deleteKey, listKeys, getKey } from '../lib/keychain.js';\nimport { setDefaultNetwork } from '../lib/config.js';\nimport { resolveKeyPair, resolveAccountId } from '../lib/account-select.js';\nimport { KeyPair, Network } from '../types.js';\nimport { error, output, type OutputFormat } from '../lib/output.js';\n\nfunction normalizeEd25519PrivateKey(key: string): string {\n let k = key.trim();\n if (k.startsWith('ed25519:')) {\n k = k.slice(8);\n }\n const b64 = Buffer.from(k, 'base64');\n if (b64.length === 32 && /^[A-Za-z0-9+/]+=*$/.test(k)) {\n return k;\n }\n return base58ToBase64(k);\n}\n\nexport async function importKey(\n privateKey: string | undefined,\n accountId: string | undefined,\n network: Network\n): Promise<void> {\n console.log(kleur.cyan(`\\n\uD83D\uDD11 Import Existing Key (${network})\\n`));\n\n let key: string = privateKey ?? '';\n let accId: string = accountId ?? '';\n\n if (!key || !accId) {\n if (!process.stdin.isTTY) {\n error(\n 'Missing required arguments. Usage: orderly auth-import <private-key> --account <account-id>'\n );\n }\n }\n\n if (!key) {\n const response = await prompts({\n type: 'password',\n name: 'privateKey',\n message: 'Enter your Ed25519 private key (base64, base58, or ed25519: prefixed)',\n validate: (value: string) => (value.length > 0 ? true : 'Private key is required'),\n });\n if (!response.privateKey) {\n error('Cancelled.');\n }\n key = response.privateKey.trim();\n }\n\n if (!accId) {\n const response = await prompts({\n type: 'text',\n name: 'accountId',\n message: 'Enter your Orderly Account ID',\n validate: (value: string) => (value.length > 0 ? true : 'Account ID is required'),\n });\n if (!response.accountId) {\n error('Cancelled.');\n }\n accId = response.accountId.trim();\n }\n\n let normalizedKey: string;\n let publicKey: string;\n try {\n normalizedKey = normalizeEd25519PrivateKey(key);\n publicKey = publicKeyFromPrivateKey(normalizedKey);\n } catch {\n error(\n `Invalid key format. Provide a valid Ed25519 private key in base64, base58, or ed25519: prefixed format.`\n );\n }\n const keyPair: KeyPair = {\n accountId: accId,\n address: '',\n publicKey,\n privateKey: normalizedKey!,\n network,\n };\n\n try {\n await storeKey(accId, network, keyPair);\n } catch (err) {\n error(`Failed to store key: ${err}`);\n }\n\n setDefaultNetwork(network);\n console.log();\n console.log(kleur.green('\u2705 Key imported successfully!'));\n console.log(kleur.dim(`Account ID: ${accId}`));\n console.log(kleur.dim(`Public key: ${publicKey}`));\n}\n\nfunction getWalletType(key: { accountId: string; walletType?: string }): string {\n if (key.walletType) {\n return key.walletType;\n }\n return 'Unknown';\n}\n\nexport async function list(\n network: Network | undefined,\n format: OutputFormat = 'json',\n idsOnly: boolean = false\n): Promise<void> {\n const keys = await listKeys();\n\n const filteredKeys = network ? keys.filter((k) => k.network === network) : keys;\n\n if (filteredKeys.length === 0) {\n if (!idsOnly) {\n console.log(kleur.yellow('No keys stored. Run `orderly wallet-add-key` to get started.'));\n }\n return;\n }\n\n if (idsOnly) {\n for (const key of filteredKeys) {\n console.log(key.accountId);\n }\n return;\n }\n\n const result = filteredKeys.map((key) => ({\n accountId: key.accountId,\n address: key.address || '',\n network: key.network,\n walletType: getWalletType(key),\n publicKey: base64ToBase58(key.publicKey),\n }));\n\n output(result, format);\n}\n\nexport async function logout(\n accountId: string | undefined,\n network: Network,\n force: boolean = false\n): Promise<void> {\n console.log(kleur.cyan('\\n\uD83D\uDEAA Logout\\n'));\n\n let accId = accountId;\n\n if (!accId) {\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n error('Error: --account is required in non-interactive mode.');\n }\n\n const keys = await listKeys();\n const filteredKeys = keys.filter((k) => k.network === network);\n\n if (filteredKeys.length === 0) {\n console.log(kleur.yellow(`No keys stored for ${network}.`));\n return;\n }\n\n const response = await prompts({\n type: 'select',\n name: 'accountId',\n message: 'Select account to logout',\n choices: filteredKeys.map((k) => ({\n title: `${k.accountId} [${k.network}]`,\n value: k.accountId,\n })),\n });\n\n if (!response.accountId) {\n error('Cancelled.');\n }\n accId = response.accountId;\n }\n\n if (!accId) {\n error('No account selected.');\n }\n\n if (!force) {\n const confirm = await prompts({\n type: 'confirm',\n name: 'value',\n message: `Remove key for account ${accId} on ${network}?`,\n initial: false,\n });\n\n if (!confirm.value) {\n error('Cancelled.');\n }\n }\n\n try {\n const deleted = await deleteKey(accId, network);\n if (deleted) {\n console.log(kleur.green(`Key removed for ${accId} on ${network}`));\n } else {\n console.log(kleur.yellow(`No key found for ${accId} on ${network}`));\n }\n } catch (err) {\n error(`Failed to remove key: ${err}`);\n }\n}\n\nexport async function show(\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const accId = await resolveAccountId(accountId, network);\n if (!accId) {\n process.exitCode = 1;\n output({ success: false, message: 'No account resolved.' }, format);\n return;\n }\n\n const key = await getKey(accId, network);\n if (!key) {\n process.exitCode = 1;\n output({ success: false, message: `No key found for account ${accId} on ${network}` }, format);\n return;\n }\n\n const result = {\n accountId: key.accountId,\n address: key.address || '',\n network: key.network,\n walletType: getWalletType(key),\n publicKey: base64ToBase58(key.publicKey),\n };\n\n output(result, format);\n}\n\nexport async function cleanup(network: Network): Promise<void> {\n console.log(kleur.cyan('\\n\uD83E\uDDF9 Cleaning up keys\\n'));\n\n const keys = await listKeys();\n const filteredKeys = keys.filter((k) => k.network === network);\n\n if (filteredKeys.length === 0) {\n console.log(kleur.green(`No keys found for ${network}.`));\n return;\n }\n\n console.log(kleur.yellow(`Found ${filteredKeys.length} key(s) for ${network}:`));\n for (const key of filteredKeys) {\n console.log(kleur.dim(` - ${key.accountId}`));\n }\n console.log();\n\n if (process.stdin.isTTY && process.stdout.isTTY) {\n const confirm = await prompts({\n type: 'confirm',\n name: 'value',\n message: `Delete all ${filteredKeys.length} key(s)?`,\n initial: false,\n });\n\n if (!confirm.value) {\n error('Cancelled.');\n }\n }\n\n let removed = 0;\n for (const key of filteredKeys) {\n try {\n await deleteKey(key.accountId, network);\n console.log(kleur.green(`\u2713 Removed: ${key.accountId}`));\n removed++;\n } catch (err) {\n console.log(kleur.red(`Failed to remove ${key.accountId}: ${err}`));\n }\n }\n\n console.log(kleur.green(`\\n\u2705 Cleanup complete. ${removed} key(s) removed.`));\n}\n\nexport async function exportKey(accountId: string | undefined, network: Network): Promise<void> {\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n error('This command requires an interactive terminal.');\n }\n console.log(kleur.cyan('\\n\uD83D\uDCE4 Export API Key\\n'));\n console.log(kleur.yellow('\u26A0\uFE0F WARNING: This will display your private key on screen.'));\n console.log(kleur.yellow(' Make sure no one is watching your screen.'));\n console.log();\n\n const { keyPair: key } = await resolveKeyPair(accountId, network);\n\n console.log(kleur.cyan('Account:'), kleur.white(key.accountId));\n console.log(kleur.cyan('Network:'), kleur.white(key.network));\n console.log();\n\n const confirm = await prompts({\n type: 'text',\n name: 'confirm',\n message: 'Type \"EXPORT\" to confirm you want to export your private key:',\n validate: (value: string) => (value === 'EXPORT' ? true : 'You must type EXPORT exactly'),\n });\n\n if (!confirm.confirm) {\n error('Cancelled.');\n }\n\n console.log();\n console.log(kleur.green('\u2705 Key exported:'));\n console.log();\n console.log(kleur.cyan('Public Key:'));\n console.log(kleur.white(key.publicKey));\n console.log();\n console.log(kleur.cyan('Private Key:'));\n console.log(kleur.white(key.privateKey));\n console.log();\n console.log(kleur.yellow('\u26A0\uFE0F Store your private key securely. Never share it with anyone.'));\n}\n", "import { ed25519 } from '@noble/curves/ed25519.js';\nimport { randomBytes } from 'crypto';\nimport bs58 from 'bs58';\n\nexport interface GeneratedKeyPair {\n publicKey: string;\n privateKey: string;\n}\n\nexport function generateKeyPair(): GeneratedKeyPair {\n const privateKey = randomBytes(32);\n const publicKey = ed25519.getPublicKey(privateKey);\n\n return {\n publicKey: Buffer.from(publicKey).toString('base64'),\n privateKey: Buffer.from(privateKey).toString('base64'),\n };\n}\n\nexport function privateKeyFromBase64(base64Key: string): Uint8Array {\n return Buffer.from(base64Key, 'base64');\n}\n\nexport function publicKeyFromPrivateKey(privateKeyBase64: string): string {\n const privateKey = privateKeyFromBase64(privateKeyBase64);\n const publicKey = ed25519.getPublicKey(privateKey);\n return Buffer.from(publicKey).toString('base64');\n}\n\nexport function sign(message: string, privateKeyBase64: string): string {\n const privateKey = privateKeyFromBase64(privateKeyBase64);\n const messageBytes = new TextEncoder().encode(message);\n const signature = ed25519.sign(messageBytes, privateKey);\n return Buffer.from(signature).toString('base64url');\n}\n\nexport function verify(message: string, signatureBase64: string, publicKeyBase64: string): boolean {\n const publicKey = Buffer.from(publicKeyBase64, 'base64');\n const signature = Buffer.from(signatureBase64, 'base64');\n const messageBytes = new TextEncoder().encode(message);\n return ed25519.verify(signature, messageBytes, publicKey);\n}\n\nexport function base64ToBase58(base64Key: string): string {\n const bytes = Buffer.from(base64Key, 'base64');\n return bs58.encode(bytes);\n}\n\nexport function base58ToBase64(base58Key: string): string {\n const bytes = bs58.decode(base58Key);\n return Buffer.from(bytes).toString('base64');\n}\n\nexport function getPublicKeyBase58(publicKeyBase64: string): string {\n return base64ToBase58(publicKeyBase64);\n}\n", "import keytar from 'keytar';\nimport {\n StoredKey,\n KeyPair,\n Network,\n WalletKeyPair,\n StoredWalletKey,\n WalletType,\n} from '../types.js';\n\nconst SERVICE_NAME = 'orderly-cli';\nconst SERVICE_NAME_WALLET = 'orderly-cli-wallet';\n\nfunction makeKey(accountId: string, network: Network): string {\n return `${accountId}:${network}`;\n}\n\nfunction makeWalletKey(address: string, network: Network): string {\n return `${address}:${network}`;\n}\n\nexport async function storeKey(\n accountId: string,\n network: Network,\n keyPair: KeyPair\n): Promise<void> {\n await keytar.setPassword(SERVICE_NAME, makeKey(accountId, network), JSON.stringify(keyPair));\n}\n\nexport async function getKey(accountId: string, network: Network): Promise<KeyPair | null> {\n const data = await keytar.getPassword(SERVICE_NAME, makeKey(accountId, network));\n if (!data) return null;\n return JSON.parse(data) as KeyPair;\n}\n\nexport async function deleteKey(accountId: string, network: Network): Promise<boolean> {\n return keytar.deletePassword(SERVICE_NAME, makeKey(accountId, network));\n}\n\nexport async function listKeys(): Promise<StoredKey[]> {\n const credentials = await keytar.findCredentials(SERVICE_NAME);\n return credentials.map((cred) => {\n const keyPair = JSON.parse(cred.password) as KeyPair;\n return {\n accountId: keyPair.accountId,\n address: keyPair.address,\n walletType: keyPair.walletType,\n publicKey: keyPair.publicKey,\n network: keyPair.network,\n };\n });\n}\n\nexport async function hasKey(accountId: string, network: Network): Promise<boolean> {\n const key = await getKey(accountId, network);\n return key !== null;\n}\n\nexport async function storeWalletKey(\n address: string,\n network: Network,\n walletKeyPair: WalletKeyPair\n): Promise<void> {\n await keytar.setPassword(\n SERVICE_NAME_WALLET,\n makeWalletKey(address, network),\n JSON.stringify(walletKeyPair)\n );\n}\n\nexport async function getWalletKey(\n address: string,\n network: Network\n): Promise<WalletKeyPair | null> {\n const data = await keytar.getPassword(SERVICE_NAME_WALLET, makeWalletKey(address, network));\n if (!data) return null;\n return JSON.parse(data) as WalletKeyPair;\n}\n\nexport async function deleteWalletKey(address: string, network: Network): Promise<boolean> {\n return keytar.deletePassword(SERVICE_NAME_WALLET, makeWalletKey(address, network));\n}\n\nexport async function listWalletKeys(): Promise<StoredWalletKey[]> {\n const credentials = await keytar.findCredentials(SERVICE_NAME_WALLET);\n return credentials.map((cred) => {\n const walletKey = JSON.parse(cred.password) as WalletKeyPair;\n return {\n address: walletKey.address,\n walletType: walletKey.walletType,\n network: walletKey.network,\n };\n });\n}\n\nexport async function hasWalletKey(address: string, network: Network): Promise<boolean> {\n const key = await getWalletKey(address, network);\n return key !== null;\n}\n\nexport async function getWalletKeyByType(\n walletType: WalletType,\n network: Network\n): Promise<WalletKeyPair | null> {\n const keys = await listWalletKeys();\n const match = keys.find((k) => k.walletType === walletType && k.network === network);\n if (!match) return null;\n return getWalletKey(match.address, network);\n}\n", "import fs from 'fs';\nimport path from 'path';\nimport os from 'os';\nimport { OrderlyConfig, DEFAULT_CONFIG, Network, NETWORK_URLS } from '../types.js';\n\nconst CONFIG_DIR = '.orderly-cli';\nconst CONFIG_FILE = 'config.json';\n\nfunction getConfigPath(): string {\n return path.join(os.homedir(), CONFIG_DIR, CONFIG_FILE);\n}\n\nfunction getConfigDir(): string {\n return path.join(os.homedir(), CONFIG_DIR);\n}\n\nexport function loadConfig(): OrderlyConfig {\n const configPath = getConfigPath();\n if (!fs.existsSync(configPath)) {\n return { ...DEFAULT_CONFIG };\n }\n const data = fs.readFileSync(configPath, 'utf-8');\n return { ...DEFAULT_CONFIG, ...JSON.parse(data) };\n}\n\nexport function saveConfig(config: OrderlyConfig): void {\n const configDir = getConfigDir();\n if (!fs.existsSync(configDir)) {\n fs.mkdirSync(configDir, { recursive: true });\n }\n const configPath = getConfigPath();\n fs.writeFileSync(configPath, JSON.stringify(config, null, 2));\n}\n\nexport function getApiBaseUrl(network: Network): string {\n return NETWORK_URLS[network].api;\n}\n\nexport function getWsBaseUrl(network: Network): string {\n return NETWORK_URLS[network].ws;\n}\n\nexport function getDefaultNetwork(): Network {\n return loadConfig().defaultNetwork ?? 'testnet';\n}\n\nexport function setDefaultNetwork(network: Network): void {\n const config = loadConfig();\n config.defaultNetwork = network;\n saveConfig(config);\n}\n", "export type Network = 'mainnet' | 'testnet';\nexport type WalletType = 'EVM' | 'SOL';\n\nexport interface KeyPair {\n accountId: string;\n address: string;\n walletType?: WalletType;\n publicKey: string;\n privateKey: string;\n network: Network;\n}\n\nexport interface StoredKey {\n accountId: string;\n address?: string;\n walletType?: WalletType;\n publicKey: string;\n network: Network;\n}\n\nexport interface WalletKeyPair {\n address: string;\n privateKey: string;\n walletType: WalletType;\n network: Network;\n}\n\nexport interface StoredWalletKey {\n address: string;\n walletType: WalletType;\n network: Network;\n}\n\nexport interface EIP712Domain {\n name: string;\n version: string;\n chainId: number;\n verifyingContract: string;\n}\n\nexport interface RegistrationMessage {\n brokerId: string;\n chainId: number;\n timestamp: string;\n registrationNonce: string;\n chainType?: WalletType;\n}\n\nexport interface AddKeyMessage {\n brokerId: string;\n chainId: number;\n orderlyKey: string;\n scope: string;\n timestamp: number;\n expiration: number;\n chainType?: WalletType;\n}\n\nexport interface OrderlyConfig {\n defaultNetwork?: Network;\n}\n\nexport interface AccountInfo {\n accountId: string;\n address: string;\n chain: string;\n state: string;\n totalCollateral: number;\n totalFreeCollateral: number;\n}\n\nexport interface OrderRequest {\n symbol: string;\n orderType: 'LIMIT' | 'MARKET';\n side: 'BUY' | 'SELL';\n orderQuantity: number;\n orderPrice?: number;\n}\n\nexport interface Order {\n orderId: number;\n symbol: string;\n side: 'BUY' | 'SELL';\n orderType: 'LIMIT' | 'MARKET';\n status: string;\n orderQuantity: string;\n orderPrice?: string;\n createdTime: number;\n}\n\nexport interface Position {\n symbol: string;\n side: 'BUY' | 'SELL';\n positionQty: string;\n averageEntryPrice: string;\n markPrice: string;\n unrealizedPnl: string;\n unrealizedPnlRatio: string;\n}\n\nexport interface ApiConfig {\n baseUrl: string;\n}\n\nexport const ORDERLY_APP_ID = 'OqdphuyCtYWxwzhxyLLjOWNdFP7sQt8RPWzmb5xY';\n\nexport const NETWORK_URLS: Record<Network, { api: string; ws: string }> = {\n mainnet: {\n api: 'https://api.orderly.org',\n ws: `wss://ws-evm.orderly.org/ws/stream/${ORDERLY_APP_ID}`,\n },\n testnet: {\n api: 'https://testnet-api.orderly.org',\n ws: `wss://testnet-ws-evm.orderly.org/ws/stream/${ORDERLY_APP_ID}`,\n },\n};\n\nexport const DEFAULT_CONFIG: OrderlyConfig = {\n defaultNetwork: 'testnet',\n};\n", "import prompts from 'prompts';\nimport { listKeys, getKey } from './keychain.js';\nimport { error } from './output.js';\nimport { OrderlyClient } from './api.js';\nimport { KeyPair, Network } from '../types.js';\n\nexport async function resolveAccountId(\n accountId: string | undefined,\n network: Network\n): Promise<string | null> {\n if (accountId) return accountId;\n\n const keys = await listKeys();\n const filteredKeys = keys.filter((k) => k.network === network);\n\n if (filteredKeys.length === 0) {\n error(`No accounts found for ${network}.`, ['Run `orderly wallet-add-key` to add an account.']);\n }\n\n if (filteredKeys.length === 1) {\n return filteredKeys[0].accountId;\n }\n\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n error('Multiple accounts found. Specify --account in non-interactive mode.', [\n 'Available accounts:',\n ...filteredKeys.map((k) => ` ${k.accountId} (${k.walletType})`),\n 'Run `orderly auth-list` to see all accounts.',\n ]);\n }\n\n const response = await prompts({\n type: 'select',\n name: 'accountId',\n message: 'Select account',\n choices: filteredKeys.map((k) => ({\n title: `${k.accountId} (${k.walletType})`,\n value: k.accountId,\n })),\n });\n\n return response.accountId ?? null;\n}\n\nexport async function resolveKeyPair(\n accountId: string | undefined,\n network: Network\n): Promise<{ accId: string; keyPair: KeyPair }> {\n const accId = await resolveAccountId(accountId, network);\n if (!accId) {\n error('No account resolved.');\n }\n\n const keyPair = await getKey(accId, network);\n if (!keyPair) {\n error(`No key found for account ${accId} on ${network}`);\n }\n\n return { accId, keyPair };\n}\n\nexport async function createAuthenticatedClient(\n accountId: string | undefined,\n network: Network\n): Promise<{ accId: string; keyPair: KeyPair; client: OrderlyClient }> {\n const { accId, keyPair } = await resolveKeyPair(accountId, network);\n\n const client = new OrderlyClient(network);\n client.setKeyPair(keyPair);\n\n return { accId, keyPair, client };\n}\n", "import axios, { AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { sign, getPublicKeyBase58 } from './crypto.js';\nimport { KeyPair, Network } from '../types.js';\nimport { getApiBaseUrl, getDefaultNetwork } from './config.js';\n\nexport class OrderlyClient {\n private client: AxiosInstance;\n private keyPair: KeyPair | null = null;\n private network: Network;\n\n constructor(network?: Network) {\n this.network = network ?? getDefaultNetwork();\n this.client = axios.create({\n baseURL: getApiBaseUrl(this.network),\n });\n }\n\n getNetwork(): Network {\n return this.network;\n }\n\n setKeyPair(keyPair: KeyPair): void {\n this.keyPair = keyPair;\n }\n\n private getSignatureHeaders(\n method: string,\n path: string,\n body?: string,\n timestamp?: number\n ): Record<string, string> {\n if (!this.keyPair) {\n throw new Error('No key pair set. Please authenticate first.');\n }\n\n const ts = timestamp ?? Date.now();\n const message = `${ts}${method.toUpperCase()}${path}${body ? body : ''}`;\n const signature = sign(message, this.keyPair.privateKey);\n\n return {\n 'orderly-timestamp': ts.toString(),\n 'orderly-account-id': this.keyPair.accountId,\n 'orderly-key': `ed25519:${getPublicKeyBase58(this.keyPair.publicKey)}`,\n 'orderly-signature': signature,\n };\n }\n\n async request<T>(config: AxiosRequestConfig, requiresAuth = true): Promise<T> {\n const method = config.method?.toUpperCase() ?? 'GET';\n const path = config.url ?? '';\n const body = config.data ? JSON.stringify(config.data) : undefined;\n\n const headers: Record<string, string> = {};\n\n // Set Content-Type based on method\n // GET/DELETE use application/x-www-form-urlencoded, others use application/json\n if (method === 'GET' || method === 'DELETE') {\n headers['Content-Type'] = 'application/x-www-form-urlencoded';\n } else {\n headers['Content-Type'] = 'application/json';\n }\n\n if (requiresAuth) {\n const authHeaders = this.getSignatureHeaders(method, path, body);\n Object.assign(headers, authHeaders);\n }\n\n const requestConfig: AxiosRequestConfig = {\n method: config.method,\n url: config.url,\n headers,\n };\n\n if (config.data !== undefined) {\n requestConfig.data = config.data;\n }\n\n const response = await this.client.request<T>(requestConfig);\n\n return response.data;\n }\n\n async get<T>(path: string, requiresAuth = true): Promise<T> {\n return this.request<T>({ method: 'GET', url: path }, requiresAuth);\n }\n\n async post<T>(path: string, data?: unknown, requiresAuth = true): Promise<T> {\n return this.request<T>({ method: 'POST', url: path, data }, requiresAuth);\n }\n\n async delete<T>(path: string, requiresAuth = true): Promise<T> {\n return this.request<T>({ method: 'DELETE', url: path }, requiresAuth);\n }\n\n async put<T>(path: string, data?: unknown, requiresAuth = true): Promise<T> {\n return this.request<T>({ method: 'PUT', url: path, data }, requiresAuth);\n }\n\n async getAccountInfo(): Promise<unknown> {\n return this.get('/v1/client/info');\n }\n\n async getBrokerId(accountId: string): Promise<string> {\n const result = (await this.get(`/v1/public/account?account_id=${accountId}`, false)) as {\n data?: { broker_id?: string };\n };\n if (!result.data?.broker_id) {\n throw new Error(`Could not resolve broker_id for account ${accountId}`);\n }\n return result.data.broker_id;\n }\n\n async getBalances(): Promise<unknown> {\n return this.get('/v1/client/holding');\n }\n\n async getStatistics(): Promise<unknown> {\n return this.get('/v1/client/statistics');\n }\n\n async getOrders(\n symbol?: string,\n status?: string,\n side?: string,\n orderType?: string,\n sortBy?: string,\n page?: number,\n size?: number\n ): Promise<unknown> {\n const params = new URLSearchParams();\n if (symbol) params.append('symbol', symbol);\n if (status) params.append('status', status);\n if (side) params.append('side', side);\n if (orderType) params.append('order_type', orderType);\n if (sortBy) params.append('sort_by', sortBy);\n if (page) params.append('page', page.toString());\n if (size) params.append('size', size.toString());\n const queryString = params.toString();\n return this.get(queryString ? `/v1/orders?${queryString}` : '/v1/orders');\n }\n\n async getOrder(orderId: string): Promise<{\n success: boolean;\n data?: Record<string, unknown>;\n }> {\n return this.get(`/v1/order/${orderId}`);\n }\n\n async placeOrder(order: {\n symbol: string;\n order_type: string;\n side: string;\n order_quantity: string;\n order_price?: string;\n reduce_only?: boolean;\n client_order_id?: string;\n }): Promise<unknown> {\n return this.post('/v1/order', order);\n }\n\n async cancelOrder(orderId: string, symbol?: string): Promise<unknown> {\n const path = symbol\n ? `/v1/order?order_id=${orderId}&symbol=${symbol}`\n : `/v1/order?order_id=${orderId}`;\n return this.delete(path);\n }\n\n async editOrder(\n orderId: string,\n updates: Record<string, unknown>,\n symbol: string\n ): Promise<unknown> {\n const body: Record<string, unknown> = {\n order_id: Number(orderId),\n symbol,\n ...updates,\n };\n return this.put('/v1/order', body);\n }\n\n async cancelAllOrders(symbol?: string): Promise<unknown> {\n const path = symbol ? `/v1/orders?symbol=${symbol}` : '/v1/orders';\n return this.delete(path);\n }\n\n async placeBatchOrder(\n orders: Array<{\n symbol: string;\n order_type: string;\n side: string;\n order_quantity: string;\n order_price?: string;\n }>\n ): Promise<unknown> {\n return this.post('/v1/batch-order', { orders });\n }\n\n async cancelBatchOrders(orderIds: string[]): Promise<unknown> {\n return this.delete(`/v1/batch-order?order_ids=${orderIds.join(',')}`);\n }\n\n async cancelBatchOrdersByClientIds(clientOrderIds: string[]): Promise<unknown> {\n return this.delete(`/v1/client/batch-order?client_order_ids=${clientOrderIds.join(',')}`);\n }\n\n async getPositions(): Promise<unknown> {\n return this.get('/v1/positions');\n }\n\n async getPosition(symbol: string): Promise<{\n success: boolean;\n data?: {\n symbol: string;\n position_qty: number;\n average_open_price: number;\n };\n }> {\n return this.get(`/v1/position/${symbol}`);\n }\n\n async closePosition(symbol: string, partialQuantity?: number): Promise<unknown> {\n const positionResponse = await this.getPosition(symbol);\n if (!positionResponse.success || !positionResponse.data) {\n throw new Error(`No open position found for ${symbol}`);\n }\n\n const { position_qty } = positionResponse.data;\n if (!position_qty || position_qty === 0) {\n throw new Error(`No open position found for ${symbol}`);\n }\n\n const side = position_qty > 0 ? 'SELL' : 'BUY';\n const absQty = Math.abs(position_qty);\n\n if (partialQuantity !== undefined) {\n if (partialQuantity <= 0) {\n throw new Error('Quantity must be positive');\n }\n if (partialQuantity > absQty) {\n throw new Error(`Quantity ${partialQuantity} exceeds position size ${absQty}`);\n }\n }\n\n const quantity = partialQuantity !== undefined ? partialQuantity.toString() : absQty.toString();\n\n return this.placeOrder({\n symbol,\n order_type: 'MARKET',\n side,\n order_quantity: quantity,\n reduce_only: true,\n });\n }\n\n async getMarketPrice(symbol: string): Promise<unknown> {\n return this.get(`/v1/public/futures/${symbol}`, false);\n }\n\n async getMarketTrades(symbol: string, limit?: number): Promise<unknown> {\n const params = new URLSearchParams();\n params.append('symbol', symbol);\n if (limit) params.append('limit', limit.toString());\n return this.get(`/v1/public/market_trades?${params.toString()}`, false);\n }\n\n async getFundingRates(): Promise<unknown> {\n return this.get('/v1/public/market_info/funding_history', false);\n }\n\n async getSymbols(): Promise<unknown> {\n return this.get('/v1/public/info', false);\n }\n\n async getFutures(): Promise<unknown> {\n return this.get('/v1/public/futures', false);\n }\n\n async faucetUsdc(userAddress: string, brokerId: string, chainId?: string): Promise<unknown> {\n if (this.network !== 'testnet') {\n throw new Error('Faucet is only available on testnet. Use --network testnet.');\n }\n\n const isSolana = !userAddress.startsWith('0x');\n const faucetBaseUrl = isSolana\n ? 'https://testnet-operator-sol.orderly.org'\n : 'https://testnet-operator-evm.orderly.org';\n\n const body: Record<string, string> = {\n user_address: userAddress,\n broker_id: brokerId,\n };\n\n if (chainId && !isSolana) {\n body.chain_id = chainId;\n }\n\n const response = await axios.post(`${faucetBaseUrl}/v1/faucet/usdc`, body, {\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n return response.data;\n }\n\n async getAccount(\n address: string,\n brokerId: string,\n chainType?: string\n ): Promise<{ success: boolean; data?: { account_id: string } }> {\n let path = `/v1/get_account?address=${address}&broker_id=${brokerId}`;\n if (chainType) {\n path += `&chain_type=${chainType}`;\n }\n return this.get(path, false);\n }\n\n async getRegistrationNonce(): Promise<{\n success: boolean;\n data: { registration_nonce: string };\n }> {\n return this.get('/v1/registration_nonce', false);\n }\n\n async registerAccount(\n message: Record<string, unknown>,\n signature: string,\n userAddress: string,\n chainType?: string\n ): Promise<{ success: boolean; data?: { account_id: string } }> {\n const body: Record<string, unknown> = {\n message,\n signature,\n userAddress,\n };\n if (chainType) {\n body.chain_type = chainType;\n }\n return this.post('/v1/register_account', body, false);\n }\n\n async addOrderlyKey(\n message: Record<string, unknown>,\n signature: string,\n userAddress: string,\n chainType?: string\n ): Promise<{ success: boolean; data?: { orderly_key: string } }> {\n const body: Record<string, unknown> = {\n message,\n signature,\n userAddress,\n };\n if (chainType) {\n body.chain_type = chainType;\n }\n return this.post('/v1/orderly_key', body, false);\n }\n\n async getSupportedChains(): Promise<{\n success: boolean;\n data?: { chains: Array<{ chain_id: number }> };\n }> {\n return this.get('/v1/public/chain_info', false);\n }\n\n async getLeverage(symbol: string): Promise<unknown> {\n return this.get(`/v1/client/leverage?symbol=${symbol}`);\n }\n\n async setLeverage(symbol: string, leverage: number): Promise<unknown> {\n return this.post('/v1/client/leverage', { symbol, leverage });\n }\n\n async getTrades(\n symbol?: string,\n startT?: number,\n endT?: number,\n page?: number,\n size?: number\n ): Promise<unknown> {\n const params = new URLSearchParams();\n if (symbol) params.append('symbol', symbol);\n if (startT) params.append('start_t', startT.toString());\n if (endT) params.append('end_t', endT.toString());\n if (page) params.append('page', page.toString());\n if (size) params.append('size', size.toString());\n const queryString = params.toString();\n return this.get(queryString ? `/v1/trades?${queryString}` : '/v1/trades');\n }\n\n async getPositionHistory(\n symbol?: string,\n startT?: number,\n endT?: number,\n page?: number,\n limit?: number\n ): Promise<unknown> {\n const params = new URLSearchParams();\n if (symbol) params.append('symbol', symbol);\n if (startT) params.append('start_t', startT.toString());\n if (endT) params.append('end_t', endT.toString());\n params.append('page', (page ?? 1).toString());\n params.append('limit', (limit ?? 25).toString());\n const queryString = params.toString();\n const result = (await this.get(`/v1/position_history?${queryString}`)) as {\n data?: { rows?: unknown[] | null; meta?: unknown };\n };\n if (result?.data && result.data.rows === null) {\n result.data.rows = [];\n }\n return result;\n }\n\n async placeAlgoOrder(order: {\n symbol: string;\n type?: string;\n algoType: string;\n side?: string;\n quantity?: string;\n triggerPrice?: string;\n price?: string;\n callbackRate?: string;\n reduceOnly?: boolean;\n clientOrderId?: string;\n childOrders?: Array<Record<string, unknown>>;\n }): Promise<unknown> {\n const body: Record<string, unknown> = {\n symbol: order.symbol,\n algo_type: order.algoType,\n };\n if (order.type !== undefined) {\n body.type = order.type;\n }\n if (order.side !== undefined) {\n body.side = order.side;\n }\n if (order.quantity !== undefined) {\n body.quantity = order.quantity;\n }\n if (order.triggerPrice !== undefined) {\n body.trigger_price = order.triggerPrice;\n }\n if (order.price !== undefined) {\n body.price = order.price;\n }\n if (order.callbackRate !== undefined) {\n body.callback_rate = order.callbackRate;\n }\n if (order.reduceOnly) {\n body.reduce_only = true;\n }\n if (order.clientOrderId !== undefined) {\n body.client_order_id = order.clientOrderId;\n }\n if (order.childOrders !== undefined) {\n body.child_orders = order.childOrders;\n }\n return this.post('/v1/algo/order', body);\n }\n\n async cancelAlgoOrderByClientId(clientOrderId: string, symbol: string): Promise<unknown> {\n return this.delete(\n `/v1/algo/client/order?client_order_id=${encodeURIComponent(clientOrderId)}&symbol=${symbol}`\n );\n }\n\n async cancelAlgoOrder(orderId: string, symbol: string): Promise<unknown> {\n return this.delete(`/v1/algo/order?order_id=${orderId}&symbol=${symbol}`);\n }\n\n async cancelAllAlgoOrders(symbol?: string, algoType?: string): Promise<unknown> {\n const params = new URLSearchParams();\n if (symbol) params.append('symbol', symbol);\n if (algoType) params.append('algo_type', algoType);\n const queryString = params.toString();\n return this.delete(queryString ? `/v1/algo/orders?${queryString}` : '/v1/algo/orders');\n }\n\n async getAlgoOrders(\n symbol?: string,\n status?: string,\n page?: number,\n size?: number,\n algoType?: string\n ): Promise<unknown> {\n const params = new URLSearchParams();\n if (symbol) params.append('symbol', symbol);\n if (status) params.append('status', status);\n if (page) params.append('page', page.toString());\n if (size) params.append('size', size.toString());\n if (algoType) params.append('algo_type', algoType);\n const queryString = params.toString();\n return this.get(queryString ? `/v1/algo/orders?${queryString}` : '/v1/algo/orders');\n }\n\n async editAlgoOrder(\n orderId: string,\n updates: {\n price?: number;\n quantity?: number;\n trigger_price?: number;\n callback_rate?: number;\n },\n symbol: string\n ): Promise<unknown> {\n const body: Record<string, unknown> = {\n order_id: Number(orderId),\n symbol,\n };\n if (updates.price !== undefined) body.price = updates.price;\n if (updates.quantity !== undefined) body.quantity = updates.quantity;\n if (updates.trigger_price !== undefined) body.trigger_price = updates.trigger_price;\n if (updates.callback_rate !== undefined) body.callback_rate = updates.callback_rate;\n return this.put('/v1/algo/order', body);\n }\n\n async findAlgoOrderById(orderId: string): Promise<{\n success: boolean;\n data?: {\n algo_order_id: number;\n symbol: string;\n type: string;\n quantity: number;\n trigger_price?: number;\n algo_status: string;\n algo_type: string;\n root_algo_order_id: number;\n parent_algo_order_id: number;\n child_orders?: Array<{\n algo_order_id: number;\n symbol: string;\n algo_type: string;\n algo_status: string;\n side: string;\n type: string;\n trigger_price?: number;\n quantity: number;\n }>;\n };\n }> {\n return this.get(`/v1/algo/order/${orderId}`) as Promise<{\n success: boolean;\n data?: {\n algo_order_id: number;\n symbol: string;\n type: string;\n quantity: number;\n trigger_price?: number;\n algo_status: string;\n algo_type: string;\n root_algo_order_id: number;\n parent_algo_order_id: number;\n child_orders?: Array<{\n algo_order_id: number;\n symbol: string;\n algo_type: string;\n algo_status: string;\n side: string;\n type: string;\n trigger_price?: number;\n quantity: number;\n }>;\n };\n }>;\n }\n\n async getSettleNonce(): Promise<{\n success: boolean;\n data?: { settle_nonce: number };\n }> {\n return this.get('/v1/settle_nonce') as Promise<{\n success: boolean;\n data?: { settle_nonce: number };\n }>;\n }\n\n async getPnlSettlementHistory(page?: number, size?: number): Promise<unknown> {\n const params = new URLSearchParams();\n params.append('page', (page ?? 1).toString());\n params.append('size', (size ?? 25).toString());\n return this.get(`/v1/pnl_settlement/history?${params.toString()}`);\n }\n\n async getReferralInfo(): Promise<unknown> {\n return this.get('/v1/referral/info');\n }\n\n async getDistributionHistory(\n status?: string,\n type?: string,\n startT?: number,\n endT?: number,\n page?: number,\n size?: number\n ): Promise<unknown> {\n const params = new URLSearchParams();\n if (status) params.append('status', status);\n if (type) params.append('type', type);\n if (startT) params.append('start_t', startT.toString());\n if (endT) params.append('end_t', endT.toString());\n params.append('page', (page ?? 1).toString());\n params.append('size', (size ?? 25).toString());\n const queryString = params.toString();\n return this.get(\n queryString\n ? `/v1/client/distribution_history?${queryString}`\n : '/v1/client/distribution_history'\n );\n }\n\n async getVolumeStats(): Promise<unknown> {\n return this.get('/v1/volume/user/stats');\n }\n\n async getNotificationInbox(type?: string, page?: number, size?: number): Promise<unknown> {\n const params = new URLSearchParams();\n if (type) params.append('type', type);\n params.append('page', (page ?? 1).toString());\n params.append('size', (size ?? 25).toString());\n return this.get(`/v1/notification/inbox/notifications?${params.toString()}`);\n }\n\n async getNotificationInboxUnread(): Promise<unknown> {\n return this.get('/v1/notification/inbox/unread');\n }\n\n async cancelOrderByClientId(clientOrderId: string, symbol: string): Promise<unknown> {\n return this.delete(\n `/v1/client/order?client_order_id=${encodeURIComponent(clientOrderId)}&symbol=${symbol}`\n );\n }\n\n async getOrderByOrderId(orderId: string): Promise<unknown> {\n return this.get(`/v1/order/${orderId}`);\n }\n\n async getOrderByClientId(clientOrderId: string): Promise<unknown> {\n return this.get(`/v1/client/order/${encodeURIComponent(clientOrderId)}`);\n }\n\n async getOrderTrades(orderId: string): Promise<unknown> {\n return this.get(`/v1/order/${orderId}/trades`);\n }\n\n async getAlgoOrderTrades(orderId: string): Promise<unknown> {\n return this.get(`/v1/algo/order/${orderId}/trades`);\n }\n\n async getLiquidations(symbol?: string, page?: number, size?: number): Promise<unknown> {\n const params = new URLSearchParams();\n if (symbol) params.append('symbol', symbol);\n if (page) params.append('page', page.toString());\n if (size) params.append('size', size.toString());\n const queryString = params.toString();\n return this.get(queryString ? `/v1/liquidations?${queryString}` : '/v1/liquidations');\n }\n\n async getPriceChanges(): Promise<unknown> {\n return this.get('/v1/public/market_info/price_changes', false);\n }\n\n async getOpenInterest(): Promise<unknown> {\n return this.get('/v1/public/market_info/traders_open_interests', false);\n }\n\n async getLiquidatedPositions(symbol?: string, page?: number, size?: number): Promise<unknown> {\n const params = new URLSearchParams();\n if (symbol) params.append('symbol', symbol);\n if (page) params.append('page', page.toString());\n if (size) params.append('size', size.toString());\n const queryString = params.toString();\n return this.get(\n queryString\n ? `/v1/public/liquidated_positions?${queryString}`\n : '/v1/public/liquidated_positions',\n false\n );\n }\n\n async getSystemInfo(): Promise<unknown> {\n return this.get('/v1/public/system_info', false);\n }\n\n async getKeyInfo(): Promise<unknown> {\n return this.get('/v1/client/key_info');\n }\n}\n", "import { createAuthenticatedClient } from '../lib/account-select.js';\nimport { output, error, handleError, OutputFormat } from '../lib/output.js';\nimport { Network } from '../types.js';\n\nfunction unwrap(data: unknown): Record<string, unknown> {\n const obj = data as Record<string, unknown>;\n if (obj && typeof obj === 'object' && 'data' in obj && obj.success) {\n return obj.data as Record<string, unknown>;\n }\n return obj;\n}\n\nfunction extractFlatFields(info: Record<string, unknown>): Record<string, unknown> {\n const flat: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(info)) {\n if (typeof value !== 'object' || value === null) {\n flat[key] = value;\n }\n }\n return flat;\n}\n\nfunction limitsToRows(info: Record<string, unknown>): Record<string, unknown>[] {\n const imrFactor = info.imr_factor as Record<string, unknown> | undefined;\n const maxNotional = info.max_notional as Record<string, unknown> | undefined;\n const symbols = new Set([...Object.keys(imrFactor || {}), ...Object.keys(maxNotional || {})]);\n const rows: Record<string, unknown>[] = [];\n for (const sym of symbols) {\n rows.push({\n symbol: sym,\n max_leverage: info.max_leverage ?? '',\n imr_factor: imrFactor?.[sym] ?? '',\n max_notional: maxNotional?.[sym] ?? '',\n });\n }\n return rows;\n}\n\nexport async function info(\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const raw = await client.getAccountInfo();\n if (format === 'csv') {\n output(extractFlatFields(unwrap(raw)), format);\n } else {\n output(raw, format);\n }\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function limits(\n accountId: string | undefined,\n symbol: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const raw = await client.getAccountInfo();\n const info = unwrap(raw);\n\n if (symbol) {\n let symbolData: Record<string, unknown> | undefined;\n try {\n const symbolRaw = await client.get(`/v1/public/info/${symbol}`, false);\n const resp = symbolRaw as Record<string, unknown> | undefined;\n if (resp && typeof resp === 'object' && resp.success) {\n symbolData = resp.data as Record<string, unknown>;\n }\n } catch {\n // error handled below via symbolData check\n }\n\n if (!symbolData) {\n error(`Symbol ${symbol} not found.`, ['Use \"orderly symbols\" to see available symbols.']);\n }\n\n if (format === 'csv') {\n const imrFactor = info.imr_factor as Record<string, unknown> | undefined;\n const maxNotional = info.max_notional as Record<string, unknown> | undefined;\n output(\n {\n rows: [\n {\n symbol,\n account_max_leverage: info.max_leverage ?? '',\n account_imr_factor: imrFactor?.[symbol] ?? '',\n account_max_notional: maxNotional?.[symbol] ?? '',\n ...symbolData,\n },\n ],\n },\n format\n );\n } else {\n output({ account: info, symbol: { symbol, ...symbolData } }, format);\n }\n } else if (format === 'csv') {\n output({ rows: limitsToRows(info) }, format);\n } else {\n const limits = {\n max_leverage: info.max_leverage ?? null,\n imr_factor: info.imr_factor ?? null,\n max_notional: info.max_notional ?? null,\n };\n output(limits, format);\n }\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function balance(\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const data = await client.getBalances();\n output(data, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function statistics(\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const data = await client.getStatistics();\n output(data, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function keyInfo(\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const data = await client.getKeyInfo();\n output(data, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nfunction extractFeeTier(info: Record<string, unknown>) {\n return {\n account_id: info.account_id,\n futures: {\n maker_fee_rate: info.futures_maker_fee_rate ?? null,\n taker_fee_rate: info.futures_taker_fee_rate ?? null,\n },\n rwa: {\n maker_fee_rate: info.rwa_maker_fee_rate ?? null,\n taker_fee_rate: info.rwa_taker_fee_rate ?? null,\n },\n default: {\n maker_fee_rate: info.maker_fee_rate ?? null,\n taker_fee_rate: info.taker_fee_rate ?? null,\n },\n };\n}\n\nexport async function feeTier(\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const raw = await client.getAccountInfo();\n const info = unwrap(raw);\n output(extractFeeTier(info), format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function liquidations(\n symbol: string | undefined,\n page: number | undefined,\n size: number | undefined,\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const result = await client.getLiquidations(symbol, page, size);\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n", "import { existsSync, readFileSync } from 'fs';\nimport { createAuthenticatedClient } from '../lib/account-select.js';\nimport { output, error, handleError, OutputFormat, normalizeSymbol } from '../lib/output.js';\nimport { Network } from '../types.js';\n\nconst VALID_ORDER_TYPES = ['LIMIT', 'MARKET', 'IOC', 'FOK', 'POST_ONLY', 'ASK', 'BID'];\nconst PRICE_REQUIRED_TYPES = ['LIMIT', 'IOC', 'FOK', 'POST_ONLY'];\n\nexport async function place(\n symbol: string,\n side: string,\n type: string,\n quantity: string,\n price: string | undefined,\n clientOrderId: string | undefined,\n reduceOnly: boolean,\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const validSide = side.toUpperCase();\n if (validSide !== 'BUY' && validSide !== 'SELL') {\n error('Invalid side. Use BUY or SELL.');\n }\n\n const validType = type.toUpperCase();\n if (!VALID_ORDER_TYPES.includes(validType)) {\n error(`Invalid order type. Use one of: ${VALID_ORDER_TYPES.join(', ')}`);\n }\n\n if (PRICE_REQUIRED_TYPES.includes(validType) && !price) {\n error(`Price is required for ${validType} orders.`);\n }\n\n const numQty = Number(quantity);\n if (isNaN(numQty) || numQty <= 0) {\n error('Quantity must be a positive number.');\n }\n\n const { client } = await createAuthenticatedClient(accountId, network);\n\n const orderPayload: {\n symbol: string;\n order_type: string;\n side: string;\n order_quantity: string;\n order_price?: string;\n client_order_id?: string;\n reduce_only?: boolean;\n } = {\n symbol: symbol.toUpperCase(),\n order_type: validType,\n side: validSide,\n order_quantity: quantity,\n };\n\n if (price) {\n orderPayload.order_price = price;\n }\n\n if (clientOrderId) {\n orderPayload.client_order_id = clientOrderId;\n }\n\n if (reduceOnly) {\n orderPayload.reduce_only = true;\n }\n\n try {\n const result = await client.placeOrder(orderPayload);\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function cancel(\n orderId: string,\n symbol: string | undefined,\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n let orderSymbol = symbol;\n if (!orderSymbol) {\n try {\n const orderRes = await client.getOrder(orderId);\n if (!orderRes.success || !orderRes.data) {\n error(`Order ${orderId} not found.`);\n }\n orderSymbol = orderRes.data.symbol as string;\n } catch (err) {\n handleError(err);\n }\n }\n\n try {\n const result = await client.cancelOrder(orderId, orderSymbol);\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function edit(\n orderId: string,\n symbol: string | undefined,\n price: string | undefined,\n quantity: string | undefined,\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n if (!price && !quantity) {\n error('At least one of --price or --quantity is required to edit an order.', [\n 'Examples:',\n ' orderly order-edit 123456 --price 3500',\n ' orderly order-edit 123456 --quantity 0.02',\n ' orderly order-edit 123456 --price 3500 --quantity 0.02',\n ]);\n }\n\n const { client } = await createAuthenticatedClient(accountId, network);\n\n let orderSymbol = symbol;\n let orderType: string | undefined;\n let orderSide: string | undefined;\n let existingPrice: string | undefined;\n let existingQuantity: string | undefined;\n let existingVisibleQty: number | undefined;\n let existingClientOrderId: string | undefined;\n\n try {\n const orderRes = await client.getOrder(orderId);\n if (!orderRes.success || !orderRes.data) {\n error(`Order ${orderId} not found.`);\n }\n const d = orderRes.data;\n if (!orderSymbol) {\n orderSymbol = d.symbol as string;\n }\n orderType = d.type as string;\n orderSide = d.side as string;\n if (d.price !== undefined && d.price !== null) {\n existingPrice = String(d.price);\n }\n if (d.quantity !== undefined && d.quantity !== null) {\n existingQuantity = String(d.quantity);\n }\n if (d.visible_quantity !== undefined && d.visible_quantity !== null) {\n existingVisibleQty = d.visible_quantity as number;\n }\n if (d.client_order_id) {\n existingClientOrderId = d.client_order_id as string;\n }\n } catch (err) {\n handleError(err);\n }\n\n if (price !== undefined) {\n const numPrice = Number(price);\n if (isNaN(numPrice) || numPrice <= 0) {\n error('Price must be a positive number.');\n }\n }\n if (quantity !== undefined) {\n const numQty = Number(quantity);\n if (isNaN(numQty) || numQty <= 0) {\n error('Quantity must be a positive number.');\n }\n }\n\n const updates: Record<string, unknown> = {\n order_type: orderType!,\n side: orderSide!,\n order_price: price !== undefined ? Number(price) : Number(existingPrice),\n order_quantity: quantity !== undefined ? Number(quantity) : Number(existingQuantity),\n };\n if (existingVisibleQty !== undefined) {\n updates.visible_quantity = existingVisibleQty;\n }\n if (existingClientOrderId !== undefined) {\n updates.client_order_id = existingClientOrderId;\n }\n\n try {\n const result = await client.editOrder(orderId, updates, orderSymbol!);\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function cancelAll(\n symbol: string | undefined,\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const result = await client.cancelAllOrders(symbol);\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function listOrders(\n symbol: string | undefined,\n status: string | undefined,\n side: string | undefined,\n orderType: string | undefined,\n sortBy: string | undefined,\n page: number | undefined,\n size: number | undefined,\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const result = await client.getOrders(\n symbol,\n status?.toUpperCase(),\n side?.toUpperCase(),\n orderType?.toUpperCase(),\n sortBy,\n page,\n size\n );\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n\ntype RawBatchOrder = Record<string, unknown>;\n\ninterface NormalizedBatchOrder {\n symbol: string;\n order_type: string;\n side: string;\n order_quantity: string;\n order_price?: string;\n client_order_id?: string;\n}\n\nfunction normalizeBatchOrder(order: RawBatchOrder, index: number): NormalizedBatchOrder {\n const idx = `[${index}]`;\n\n if (typeof order !== 'object' || order === null) {\n error(`Order ${idx} must be an object.`);\n }\n\n const symbol = (order.symbol ?? order.s) as string | undefined;\n if (!symbol || typeof symbol !== 'string') {\n error(`Order ${idx}: \"symbol\" is required.`);\n }\n\n const rawType = (order.type ?? order.order_type ?? order.t) as string | undefined;\n if (!rawType || typeof rawType !== 'string') {\n error(`Order ${idx}: \"type\" is required.`);\n }\n const upperType = rawType.toUpperCase();\n if (!VALID_ORDER_TYPES.includes(upperType)) {\n error(`Order ${idx}: invalid type \"${rawType}\". Use one of: ${VALID_ORDER_TYPES.join(', ')}.`);\n }\n\n const side = (order.side ?? order.s) as string | undefined;\n if (!side || typeof side !== 'string') {\n error(`Order ${idx}: \"side\" is required (BUY or SELL).`);\n }\n if (side.toUpperCase() !== 'BUY' && side.toUpperCase() !== 'SELL') {\n error(`Order ${idx}: invalid side \"${side}\". Use BUY or SELL.`);\n }\n\n const rawQty = (order.quantity ?? order.order_quantity ?? order.qty ?? order.q) as\n | string\n | number\n | undefined;\n if (rawQty === undefined || rawQty === null) {\n error(`Order ${idx}: \"quantity\" is required.`);\n }\n const qtyStr = String(rawQty);\n if (isNaN(Number(qtyStr)) || Number(qtyStr) <= 0) {\n error(`Order ${idx}: \"quantity\" must be a positive number.`);\n }\n\n const rawPrice = order.price ?? order.order_price ?? order.p;\n if (PRICE_REQUIRED_TYPES.includes(upperType)) {\n if (rawPrice === undefined || rawPrice === null) {\n error(`Order ${idx}: \"price\" is required for ${upperType} orders.`);\n }\n if (isNaN(Number(rawPrice)) || Number(rawPrice) <= 0) {\n error(`Order ${idx}: \"price\" must be a positive number.`);\n }\n }\n\n const rawClientId = order.client_order_id ?? order.clientOrderId;\n\n return {\n symbol: normalizeSymbol(symbol),\n order_type: upperType,\n side: side.toUpperCase(),\n order_quantity: qtyStr,\n ...(rawPrice !== undefined && rawPrice !== null ? { order_price: String(rawPrice) } : {}),\n ...(rawClientId !== undefined ? { client_order_id: String(rawClientId) } : {}),\n };\n}\n\nexport async function batchPlace(\n ordersInput: string,\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n let rawOrders: RawBatchOrder[];\n\n try {\n if (existsSync(ordersInput)) {\n const content = readFileSync(ordersInput, 'utf-8');\n rawOrders = JSON.parse(content);\n } else {\n rawOrders = JSON.parse(ordersInput);\n }\n } catch {\n error('Invalid JSON. Provide a valid JSON array or a path to a JSON file.');\n }\n\n if (!Array.isArray(rawOrders) || rawOrders.length === 0) {\n error('Orders must be a non-empty array.');\n }\n\n if (rawOrders.length > 10) {\n error('Maximum 10 orders allowed per batch.');\n }\n\n const normalizedOrders = rawOrders.map((order, i) => normalizeBatchOrder(order, i));\n\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const result = await client.placeBatchOrder(normalizedOrders);\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function batchCancel(\n orderIds: string[],\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n if (orderIds.length === 0) {\n error('At least one order ID is required.');\n }\n\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const result = await client.cancelBatchOrders(orderIds);\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function batchCancelByClientId(\n clientOrderIds: string[],\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n if (clientOrderIds.length === 0) {\n error('At least one client order ID is required.');\n }\n\n if (clientOrderIds.length > 10) {\n error('Maximum 10 client order IDs allowed per batch.');\n }\n\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const result = await client.cancelBatchOrdersByClientIds(clientOrderIds);\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function cancelByClientId(\n clientOrderId: string,\n symbol: string,\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const result = await client.cancelOrderByClientId(clientOrderId, symbol);\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function getOrder(\n orderId: string | undefined,\n clientOrderId: string | undefined,\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n if (!orderId && !clientOrderId) {\n error('Provide either an order ID (positional) or --client-order-id.');\n }\n\n const { client } = await createAuthenticatedClient(accountId, network);\n\n const resolvedClientOrderId = clientOrderId ?? (/^\\d+$/.test(orderId!) ? undefined : orderId);\n const resolvedOrderId = /^\\d+$/.test(orderId!) ? orderId : undefined;\n\n try {\n if (resolvedClientOrderId) {\n const result = await client.getOrderByClientId(resolvedClientOrderId);\n output(result, format);\n } else if (resolvedOrderId) {\n const result = await client.getOrderByOrderId(resolvedOrderId);\n output(result, format);\n } else {\n error(\n 'Could not resolve order identifier. Provide a numeric order ID or use --client-order-id.'\n );\n }\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function orderTrades(\n orderId: string,\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const result = await client.getOrderTrades(orderId);\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n", "import { createAuthenticatedClient } from '../lib/account-select.js';\nimport { output, handleError, OutputFormat } from '../lib/output.js';\nimport { Network } from '../types.js';\n\nexport async function listPositions(\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const result = await client.getPositions();\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function closePosition(\n symbol: string,\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json',\n quantity?: number\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const result = await client.closePosition(symbol.toUpperCase(), quantity);\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function positionHistory(\n symbol: string | undefined,\n startT: number | undefined,\n endT: number | undefined,\n page: number | undefined,\n size: number | undefined,\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const result = await client.getPositionHistory(symbol, startT, endT, page, size);\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n", "import axios from 'axios';\nimport { OrderlyClient } from '../lib/api.js';\nimport { fetchWsSnapshot } from '../lib/ws.js';\nimport { output, error, handleError, OutputFormat } from '../lib/output.js';\nimport { Network } from '../types.js';\nimport { getApiBaseUrl } from '../lib/config.js';\n\nconst VALID_KLINE_TYPES = ['1m', '5m', '15m', '30m', '1h', '4h', '12h', '1d', '1w', '1mon'];\n\ninterface RowWithSymbol {\n symbol?: string;\n [key: string]: unknown;\n}\n\nasync function validateSymbol(client: OrderlyClient, symbol: string): Promise<void> {\n const result = (await client.getMarketPrice(symbol)) as Record<string, unknown> | null;\n if (\n result !== null &&\n typeof result === 'object' &&\n (!('data' in result) || result.data === null)\n ) {\n error(`Symbol not found: \"${symbol}\".`, ['Run `orderly symbols` to see available symbols.']);\n }\n}\n\nfunction filterRows(result: Record<string, unknown>, symbol: string | undefined): void {\n if (!symbol) return;\n const data = result.data as Record<string, unknown> | undefined;\n const rows = (data?.rows as RowWithSymbol[] | undefined) ?? [];\n if (data) {\n data.rows = rows.filter((r) => r.symbol === symbol);\n }\n}\n\nconst KLINE_TO_TV: Record<string, string> = {\n '1m': '1',\n '5m': '5',\n '15m': '15',\n '30m': '30',\n '1h': '60',\n '4h': '240',\n '12h': '720',\n '1d': '1D',\n '1w': '1W',\n '1mon': '1M',\n};\n\nconst TV_RESOLUTION_SECONDS: Record<string, number> = {\n '1': 60,\n '3': 180,\n '5': 300,\n '15': 900,\n '30': 1800,\n '60': 3600,\n '240': 14400,\n '720': 43200,\n '1D': 86400,\n '3D': 259200,\n '5D': 432000,\n '1W': 604800,\n '1M': 2592000,\n};\n\ninterface TvHistoryResponse {\n s: string;\n t: number[];\n o: number[];\n h: number[];\n l: number[];\n c: number[];\n v: number[];\n a?: number[];\n}\n\nexport async function getPrice(\n symbol: string,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n try {\n const client = new OrderlyClient(network);\n const result = await client.getMarketPrice(symbol.toUpperCase());\n if (\n result !== null &&\n typeof result === 'object' &&\n 'data' in (result as Record<string, unknown>) &&\n (result as Record<string, unknown>).data === null\n ) {\n error(`Symbol not found: \"${symbol}\".`, ['Run `orderly symbols` to see available symbols.']);\n }\n if (\n result !== null &&\n typeof result === 'object' &&\n !('data' in (result as Record<string, unknown>))\n ) {\n error(`Symbol not found: \"${symbol}\".`, ['Run `orderly symbols` to see available symbols.']);\n }\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function getKline(\n symbol: string,\n type: string,\n limit: number | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const validType = type.toLowerCase();\n if (!VALID_KLINE_TYPES.includes(type)) {\n error(`Invalid kline type. Use one of: ${VALID_KLINE_TYPES.join(', ')}`);\n }\n\n const tvResolution = KLINE_TO_TV[validType];\n if (!tvResolution) {\n error(`Kline type '${validType}' is not supported via public API.`);\n }\n\n const resolutionSeconds = TV_RESOLUTION_SECONDS[tvResolution];\n const count = limit ?? 100;\n const to = Math.floor(Date.now() / 1000);\n const from = to - count * resolutionSeconds;\n\n try {\n const client = new OrderlyClient(network);\n await validateSymbol(client, symbol.toUpperCase());\n\n const baseUrl = getApiBaseUrl(network);\n\n const { data } = await axios.get<TvHistoryResponse>(`${baseUrl}/v1/tv/history`, {\n params: {\n symbol: symbol.toUpperCase(),\n resolution: tvResolution,\n from,\n to,\n },\n });\n\n if (data.s !== 'ok' || !data.t?.length) {\n output({ rows: [] }, format);\n return;\n }\n\n const rows = data.t.map((startTs, i) => ({\n open: Number(data.o[i]),\n high: Number(data.h[i]),\n low: Number(data.l[i]),\n close: Number(data.c[i]),\n volume: Number(data.v[i]),\n amount: data.a ? Number(data.a[i]) : 0,\n symbol: symbol.toUpperCase(),\n type: validType,\n start_timestamp: startTs * 1000,\n end_timestamp: (startTs + resolutionSeconds) * 1000,\n }));\n\n output({ rows }, format);\n } catch (err) {\n handleError(err);\n }\n}\n\ninterface WsOrderbookData {\n asks: [string, string][];\n bids: [string, string][];\n}\n\nexport async function getOrderbook(\n symbol: string,\n network: Network,\n format: OutputFormat = 'json',\n depth?: number\n): Promise<void> {\n try {\n if (depth !== undefined && (!Number.isFinite(depth) || depth < 1)) {\n error('--depth must be a positive integer.');\n }\n\n const upper = symbol.toUpperCase();\n const client = new OrderlyClient(network);\n const priceCheck = (await client.getMarketPrice(upper)) as Record<string, unknown> | null;\n if (\n priceCheck !== null &&\n typeof priceCheck === 'object' &&\n (!('data' in priceCheck) || priceCheck.data === null)\n ) {\n error(`Symbol not found: \"${symbol}\".`, ['Run `orderly symbols` to see available symbols.']);\n }\n\n const result = await fetchWsSnapshot<WsOrderbookData>(upper, 'orderbook', network);\n\n if (!result.success || !result.data) {\n error(result.error || 'Failed to fetch orderbook');\n }\n\n const asks = (result.data.asks ?? [])\n .slice(0, depth ?? result.data.asks.length)\n .map(([price, quantity]) => ({\n price: Number(price),\n quantity: Number(quantity),\n }));\n\n const bids = (result.data.bids ?? [])\n .slice(0, depth ?? result.data.bids.length)\n .map(([price, quantity]) => ({\n price: Number(price),\n quantity: Number(quantity),\n }));\n\n if (format === 'csv') {\n const rows = [\n ...asks.map((a) => ({ side: 'ask', ...a })),\n ...bids.map((b) => ({ side: 'bid', ...b })),\n ];\n output({ rows }, format);\n } else {\n output({ asks, bids }, format);\n }\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function getSymbols(\n showInfo: boolean,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n try {\n const client = new OrderlyClient(network);\n const result = showInfo ? await client.getSymbols() : await client.getFutures();\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function getMarketTrades(\n symbol: string,\n limit: number | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n try {\n const client = new OrderlyClient(network);\n const upper = symbol.toUpperCase();\n await validateSymbol(client, upper);\n const result = await client.getMarketTrades(upper, limit);\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function getFundingRates(\n symbol: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n try {\n const client = new OrderlyClient(network);\n const result = (await client.getFundingRates()) as Record<string, unknown>;\n filterRows(result, symbol);\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function getPriceChanges(\n symbol: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n try {\n const client = new OrderlyClient(network);\n const result = (await client.getPriceChanges()) as Record<string, unknown>;\n filterRows(result, symbol);\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function getOpenInterest(\n symbol: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n try {\n const client = new OrderlyClient(network);\n if (symbol) {\n await validateSymbol(client, symbol.toUpperCase());\n }\n const result = (await client.getOpenInterest()) as Record<string, unknown>;\n filterRows(result, symbol);\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function getLiquidatedPositions(\n symbol: string | undefined,\n page: number | undefined,\n size: number | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n try {\n const client = new OrderlyClient(network);\n const result = await client.getLiquidatedPositions(symbol, page, size);\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function getSystemStatus(\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n try {\n const client = new OrderlyClient(network);\n const result = await client.getSystemInfo();\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n", "import { getWsBaseUrl } from './config.js';\nimport { Network } from '../types.js';\n\ninterface WsSnapshotResult<T> {\n success: boolean;\n data?: T;\n error?: string;\n}\n\nexport async function fetchWsSnapshot<T>(\n symbol: string,\n topic: string,\n network: Network,\n timeout = 10000\n): Promise<WsSnapshotResult<T>> {\n const url = getWsBaseUrl(network);\n\n return new Promise((resolve) => {\n let settled = false;\n\n const ws = new WebSocket(url);\n\n const done = (result: WsSnapshotResult<T>) => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n try {\n ws.close();\n } catch {\n // ignore close errors\n }\n resolve(result);\n };\n\n const timer = setTimeout(() => {\n done({ success: false, error: `WebSocket timeout after ${timeout}ms` });\n }, timeout);\n\n ws.addEventListener('open', () => {\n ws.send(\n JSON.stringify({\n id: 'cli_snapshot',\n event: 'subscribe',\n topic: `${symbol}@${topic}`,\n })\n );\n });\n\n ws.addEventListener('message', (event: MessageEvent) => {\n try {\n const msg = JSON.parse(event.data as string);\n\n if (msg.event === 'ping') {\n ws.send(JSON.stringify({ event: 'pong' }));\n return;\n }\n\n if (msg.event === 'subscribe') {\n if (msg.success === false) {\n done({ success: false, error: msg.errorMsg || 'Subscription failed' });\n }\n return;\n }\n\n if (msg.topic && msg.data !== undefined && msg.data !== null) {\n done({ success: true, data: msg.data as T });\n }\n } catch {\n // ignore parse errors for non-JSON messages\n }\n });\n\n ws.addEventListener('error', () => {\n done({ success: false, error: `Failed to connect to WebSocket at ${url}` });\n });\n\n ws.addEventListener('close', (event: CloseEvent) => {\n done({\n success: false,\n error: `WebSocket closed before receiving data (code: ${event.code})`,\n });\n });\n });\n}\n", "import { OrderlyClient } from '../lib/api.js';\nimport { output, error, handleError, OutputFormat } from '../lib/output.js';\nimport { Network } from '../types.js';\n\ninterface FaucetResponse {\n success?: boolean;\n message?: string;\n code?: number;\n data?: unknown;\n [key: string]: unknown;\n}\n\nexport async function faucetUsdc(\n address: string,\n chainId: string | undefined,\n network: Network,\n format: OutputFormat = 'json',\n brokerId?: string\n): Promise<void> {\n if (network !== 'testnet') {\n error('Faucet is only available on testnet. Use --network testnet');\n }\n\n if (!chainId) {\n error(\n '--chain-id is required. Example: --chain-id 421614 (Arbitrum Sepolia), --chain-id 901901901 (SOL Devnet)'\n );\n }\n\n try {\n const client = new OrderlyClient(network);\n const result = (await client.faucetUsdc(\n address,\n brokerId || 'demo',\n chainId\n )) as FaucetResponse;\n\n if (result && result.success === false) {\n error(result.message || `Faucet request failed (code: ${result.code})`);\n }\n\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n", "import kleur from 'kleur';\nimport prompts from 'prompts';\nimport {\n WalletKeyPair,\n Network,\n WalletType,\n RegistrationMessage,\n AddKeyMessage,\n} from '../types.js';\n\nconst VALID_WALLET_TYPES: WalletType[] = ['EVM', 'SOL'];\n\nimport {\n storeWalletKey,\n getWalletKey,\n deleteWalletKey,\n listWalletKeys,\n hasWalletKey,\n storeKey,\n listKeys,\n} from '../lib/keychain.js';\nimport {\n createWalletFromPrivateKey,\n isValidPrivateKey,\n normalizePrivateKey,\n signRegistration as signEVMRegistration,\n signAddKey as signEVMAddKey,\n generateEVMWallet,\n} from '../lib/evm.js';\nimport {\n createSolanaWalletFromPrivateKey,\n signRegistration as signSolanaRegistration,\n signAddKey as signSolanaAddKey,\n getSolanaChainId,\n generateSolanaWallet,\n} from '../lib/solana.js';\nimport { OrderlyClient } from '../lib/api.js';\nimport { setDefaultNetwork } from '../lib/config.js';\nimport { getPublicKeyBase58, generateKeyPair } from '../lib/crypto.js';\nimport { output, error, handleError, type OutputFormat } from '../lib/output.js';\n\nexport async function walletCreate(\n walletType: WalletType | undefined,\n network: Network\n): Promise<void> {\n const nonInteractive = !!walletType;\n\n if (!nonInteractive) {\n console.log(kleur.cyan(`\\n\uD83D\uDD10 Create New Wallet (${network})\\n`));\n }\n\n let type: WalletType | undefined = walletType?.toUpperCase() as WalletType;\n if (walletType && !VALID_WALLET_TYPES.includes(type)) {\n error(`Invalid wallet type: \"${walletType}\". Valid types: ${VALID_WALLET_TYPES.join(', ')}`);\n }\n if (!type) {\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n error('--type is required in non-interactive mode.', [\n 'Example: orderly wallet-create --type EVM',\n 'Valid types: EVM, SOL',\n ]);\n }\n const response = await prompts({\n type: 'select',\n name: 'type',\n message: 'Select wallet type',\n choices: [\n { title: 'EVM (Ethereum, Arbitrum, etc.)', value: 'EVM' },\n { title: 'SOL', value: 'SOL' },\n ],\n });\n if (!response.type) {\n error('Cancelled.');\n }\n type = response.type as WalletType;\n }\n\n let address: string;\n let privateKey: string;\n\n try {\n if (type === 'EVM') {\n const wallet = generateEVMWallet();\n address = wallet.address;\n privateKey = wallet.privateKey;\n } else {\n const wallet = generateSolanaWallet();\n address = wallet.address;\n privateKey = wallet.privateKey;\n }\n } catch {\n error('Failed to generate wallet');\n }\n\n const walletKeyPair: WalletKeyPair = {\n address,\n privateKey,\n walletType: type,\n network,\n };\n\n try {\n await storeWalletKey(address, network, walletKeyPair);\n } catch {\n error('Failed to store wallet');\n }\n\n if (nonInteractive) {\n output({ address, type, network });\n } else {\n console.log();\n console.log(kleur.green('\u2705 Wallet created successfully!'));\n console.log(kleur.dim(`Address: ${address}`));\n console.log(kleur.dim(`Type: ${type}`));\n console.log(kleur.dim(`Network: ${network}`));\n console.log();\n console.log(\n kleur.yellow('\u26A0\uFE0F Private key is stored in OS keychain and will never be shown again.')\n );\n console.log(kleur.dim('Make sure to back up your wallet if needed for external use.'));\n }\n}\n\nexport async function walletImport(\n walletType: WalletType | undefined,\n address: string | undefined,\n privateKey: string | undefined,\n network: Network\n): Promise<void> {\n console.log(kleur.cyan(`\\n\uD83D\uDD11 Import Wallet (${network})\\n`));\n\n let type: WalletType | undefined = walletType?.toUpperCase() as WalletType;\n if (walletType && !VALID_WALLET_TYPES.includes(type)) {\n error(`Invalid wallet type: \"${walletType}\". Valid types: ${VALID_WALLET_TYPES.join(', ')}`);\n }\n if (!type) {\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n error('--type is required in non-interactive mode.', [\n 'Example: orderly wallet-import --type EVM',\n 'Valid types: EVM, SOL',\n ]);\n }\n const response = await prompts({\n type: 'select',\n name: 'type',\n message: 'Select wallet type',\n choices: [\n { title: 'EVM (Ethereum, Arbitrum, etc.)', value: 'EVM' },\n { title: 'SOL', value: 'SOL' },\n ],\n });\n if (!response.type) {\n error('Cancelled.');\n }\n type = response.type as WalletType;\n }\n\n let addr: string = address ?? '';\n let key: string = privateKey ?? '';\n\n if (!key) {\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n error('Private key is required in non-interactive mode.', [\n 'Example: orderly wallet-import <private-key> --type EVM',\n ]);\n }\n const response = await prompts({\n type: 'password',\n name: 'privateKey',\n message: `Enter your ${type} private key`,\n validate: (value: string) => {\n if (value.length === 0) return 'Private key is required';\n if (type === 'EVM' && !isValidPrivateKey(value)) {\n return 'Invalid EVM private key format';\n }\n return true;\n },\n });\n if (!response.privateKey) {\n error('Cancelled.');\n }\n key = response.privateKey.trim();\n }\n\n let walletAddress: string;\n try {\n if (type === 'EVM') {\n const wallet = createWalletFromPrivateKey(normalizePrivateKey(key));\n walletAddress = wallet.address;\n } else {\n const wallet = createSolanaWalletFromPrivateKey(key, network);\n walletAddress = wallet.address;\n }\n } catch (err) {\n error(`Invalid private key: ${err instanceof Error ? err.message : 'Unknown error'}`);\n }\n\n if (addr && addr.toLowerCase() !== walletAddress.toLowerCase()) {\n error('Provided address does not match private key');\n }\n addr = walletAddress;\n\n const existing = await hasWalletKey(addr, network);\n if (existing) {\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n error(\n `Wallet already exists for ${addr} on ${network}. Use wallet-logout first to remove it.`\n );\n }\n console.log(kleur.yellow(`Wallet already exists for ${addr} on ${network}`));\n const overwrite = await prompts({\n type: 'confirm',\n name: 'value',\n message: 'Overwrite existing wallet?',\n initial: false,\n });\n if (!overwrite.value) {\n error('Cancelled.');\n }\n }\n\n const walletKeyPair: WalletKeyPair = {\n address: addr,\n privateKey: key,\n walletType: type,\n network,\n };\n\n try {\n await storeWalletKey(addr, network, walletKeyPair);\n } catch {\n error('Failed to store wallet');\n }\n\n console.log();\n console.log(kleur.green('\u2705 Wallet imported successfully!'));\n console.log(kleur.dim(`Address: ${addr}`));\n console.log(kleur.dim(`Type: ${type}`));\n}\n\nexport async function walletList(\n network: Network | undefined,\n format: OutputFormat = 'json'\n): Promise<void> {\n const wallets = await listWalletKeys();\n\n const filteredWallets = network ? wallets.filter((w) => w.network === network) : wallets;\n\n if (filteredWallets.length === 0) {\n if (format === 'csv') return;\n console.log(kleur.yellow('No wallets stored. Run `orderly wallet-import` to get started.'));\n return;\n }\n\n const result = filteredWallets.map((wallet) => ({\n address: wallet.address,\n network: wallet.network,\n walletType: wallet.walletType,\n }));\n\n output(result, format);\n}\n\nexport async function walletShow(\n address: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n let addr = address;\n\n if (!addr) {\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n error('Address is required in non-interactive mode.', [\n 'Example: orderly wallet-show \"0x1234...\"',\n 'Run `orderly wallet-list` to see available addresses.',\n ]);\n }\n const wallets = await listWalletKeys();\n const filteredWallets = wallets.filter((w) => w.network === network);\n\n if (filteredWallets.length === 0) {\n error(`No wallets found for ${network}.`);\n }\n\n const response = await prompts({\n type: 'select',\n name: 'address',\n message: 'Select wallet',\n choices: filteredWallets.map((w) => ({\n title: `${w.address} (${w.walletType})`,\n value: w.address,\n })),\n });\n\n if (!response.address) {\n error('Cancelled.');\n }\n addr = response.address;\n }\n\n if (!addr) {\n error('No address specified.');\n }\n\n const wallet = await getWalletKey(addr, network);\n\n if (!wallet) {\n error(`No wallet found for ${addr} on ${network}`);\n }\n\n output(\n {\n address: wallet.address,\n network: wallet.network,\n walletType: wallet.walletType,\n },\n format\n );\n}\n\nexport async function walletLogout(address: string | undefined, network: Network): Promise<void> {\n console.log(kleur.cyan('\\n\uD83D\uDEAA Wallet Logout\\n'));\n\n let addr = address;\n\n if (!addr) {\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n error('Address is required in non-interactive mode.', [\n 'Example: orderly wallet-logout \"0x1234...\"',\n 'Run `orderly wallet-list` to see available addresses.',\n ]);\n }\n const wallets = await listWalletKeys();\n const filteredWallets = wallets.filter((w) => w.network === network);\n\n if (filteredWallets.length === 0) {\n console.log(kleur.yellow(`No wallets stored for ${network}.`));\n return;\n }\n\n const response = await prompts({\n type: 'select',\n name: 'address',\n message: 'Select wallet to logout',\n choices: filteredWallets.map((w) => ({\n title: `${w.address} (${w.walletType})`,\n value: w.address,\n })),\n });\n\n if (!response.address) {\n error('Cancelled.');\n }\n addr = response.address;\n }\n\n if (!addr) {\n error('No address selected.');\n }\n\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n try {\n const deleted = await deleteWalletKey(addr, network);\n if (deleted) {\n output({ removed: true, address: addr, network });\n } else {\n error(`No wallet found for ${addr} on ${network}`);\n }\n } catch {\n error('Failed to remove wallet');\n }\n return;\n }\n\n const confirm = await prompts({\n type: 'confirm',\n name: 'value',\n message: `Remove wallet ${addr} on ${network}?`,\n initial: false,\n });\n\n if (!confirm.value) {\n error('Cancelled.');\n }\n\n try {\n const deleted = await deleteWalletKey(addr, network);\n if (deleted) {\n console.log(kleur.green(`Wallet removed for ${addr} on ${network}`));\n } else {\n console.log(kleur.yellow(`No wallet found for ${addr} on ${network}`));\n }\n } catch {\n error('Failed to remove wallet');\n }\n}\n\nexport async function walletRegister(\n brokerId: string | undefined,\n address: string | undefined,\n network: Network\n): Promise<void> {\n const nonInteractive = !!brokerId && !!address;\n\n if (!nonInteractive && (!process.stdin.isTTY || !process.stdout.isTTY)) {\n error('--broker-id and --address are required in non-interactive mode.', [\n 'Example: orderly wallet-register --broker-id demo --address \"0x1234...\"',\n ]);\n }\n\n if (!nonInteractive) {\n console.log(kleur.cyan(`\\n\uD83D\uDCDD Register Account (${network})\\n`));\n }\n\n let bId = brokerId;\n if (!bId) {\n const response = await prompts({\n type: 'text',\n name: 'brokerId',\n message: 'Enter your Broker ID',\n validate: (value: string) => (value.length > 0 ? true : 'Broker ID is required'),\n });\n if (!response.brokerId) {\n error('Cancelled.');\n }\n bId = response.brokerId.trim();\n }\n\n let addr = address;\n let walletKey: WalletKeyPair | null = null;\n\n if (!addr) {\n const wallets = await listWalletKeys();\n const filteredWallets = wallets.filter((w) => w.network === network);\n\n if (filteredWallets.length === 0) {\n error(`No wallets found for ${network}. Import a wallet first.`);\n }\n\n const response = await prompts({\n type: 'select',\n name: 'address',\n message: 'Select wallet to register',\n choices: filteredWallets.map((w) => ({\n title: `${w.address} (${w.walletType})`,\n value: w.address,\n })),\n });\n\n if (!response.address) {\n error('Cancelled.');\n }\n addr = response.address;\n }\n\n if (!addr) {\n error('No address selected.');\n }\n\n walletKey = await getWalletKey(addr, network);\n if (!walletKey) {\n error(`No wallet found for ${addr} on ${network}`);\n }\n\n if (!bId) {\n error('Broker ID is required.');\n }\n\n const client = new OrderlyClient(network);\n\n try {\n const existingAccount = await client.getAccount(addr, bId, walletKey.walletType);\n if (existingAccount.success && existingAccount.data?.account_id) {\n const accountId = existingAccount.data.account_id;\n if (nonInteractive) {\n output({ accountId, address: addr, network, alreadyExists: true });\n } else {\n console.log(kleur.yellow(`Account already exists: ${accountId}`));\n console.log(kleur.dim('Use `orderly wallet-add-key` to add an API key to this account.'));\n }\n return;\n }\n } catch {\n // Continue with registration\n }\n\n const nonceResponse = await client.getRegistrationNonce();\n if (!nonceResponse.success || !nonceResponse.data?.registration_nonce) {\n error('Failed to get registration nonce');\n }\n const nonce = nonceResponse.data.registration_nonce;\n\n const timestamp = Date.now();\n\n let message: Record<string, unknown>;\n let signature: string;\n try {\n if (walletKey.walletType === 'EVM') {\n const chainId = network === 'mainnet' ? 42161 : 421614;\n const evmMessage: RegistrationMessage = {\n brokerId: bId,\n chainId,\n timestamp: String(timestamp),\n registrationNonce: nonce,\n };\n message = { ...evmMessage };\n const wallet = createWalletFromPrivateKey(normalizePrivateKey(walletKey.privateKey));\n signature = await signEVMRegistration(wallet, evmMessage);\n } else {\n const wallet = createSolanaWalletFromPrivateKey(walletKey.privateKey, network);\n const result = await signSolanaRegistration(wallet, {\n brokerId: bId,\n timestamp,\n registrationNonce: nonce,\n network,\n });\n message = result.message;\n signature = result.signature;\n }\n } catch {\n error('Failed to sign message');\n }\n\n try {\n const result = await client.registerAccount(message, signature, addr, walletKey.walletType);\n if (result.success && result.data?.account_id) {\n const accountId = result.data.account_id;\n if (nonInteractive) {\n output({ accountId, address: addr, network });\n } else {\n console.log();\n console.log(kleur.cyan('Account ID:'));\n console.log(kleur.white(accountId));\n console.log();\n console.log(\n kleur.dim('Next step: Use `orderly wallet-add-key` to add an API key for trading.')\n );\n }\n } else {\n error('Failed to register account');\n }\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function walletAddKey(\n address: string | undefined,\n scope: string | undefined,\n network: Network,\n brokerId?: string\n): Promise<void> {\n const nonInteractive = !!address;\n\n if (!nonInteractive && (!process.stdin.isTTY || !process.stdout.isTTY)) {\n const hints = ['Example: orderly wallet-add-key --address \"0x1234...\"'];\n if (!brokerId) hints.push('Add --broker-id <id> to skip broker ID lookup.');\n error('--address is required in non-interactive mode.', hints);\n }\n\n if (!nonInteractive) {\n console.log(kleur.cyan(`\\n\uD83D\uDD10 Add Orderly API Key (${network})\\n`));\n }\n\n let addr = address;\n let walletKey: WalletKeyPair | null = null;\n\n if (!addr) {\n const wallets = await listWalletKeys();\n const filteredWallets = wallets.filter((w) => w.network === network);\n\n if (filteredWallets.length === 0) {\n error(`No wallets found for ${network}. Import a wallet first.`);\n }\n\n const response = await prompts({\n type: 'select',\n name: 'address',\n message: 'Select wallet to add key for',\n choices: filteredWallets.map((w) => ({\n title: `${w.address} (${w.walletType})`,\n value: w.address,\n })),\n });\n\n if (!response.address) {\n error('Cancelled.');\n }\n addr = response.address;\n }\n\n if (!addr) {\n error('No address selected.');\n }\n\n walletKey = await getWalletKey(addr, network);\n if (!walletKey) {\n error(`No wallet found for ${addr} on ${network}`);\n }\n\n const client = new OrderlyClient(network);\n\n let accountId: string;\n let resolvedBrokerId: string;\n\n if (brokerId) {\n const bId = brokerId.trim();\n const accountInfo = await client.getAccount(addr, bId, walletKey.walletType);\n if (!accountInfo.success || !accountInfo.data?.account_id) {\n error('Account not found. Run `orderly wallet-register` first.');\n }\n accountId = accountInfo.data.account_id;\n resolvedBrokerId = bId;\n } else {\n const storedKeys = await listKeys();\n const matchingKey = storedKeys.find((k) => k.address === addr && k.network === network);\n\n if (matchingKey) {\n accountId = matchingKey.accountId;\n try {\n resolvedBrokerId = await client.getBrokerId(accountId);\n } catch {\n error('Failed to resolve broker_id for account. Register the account first.');\n }\n } else {\n let bId: string | undefined = undefined;\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n error('--broker-id is required when no API key is stored for this wallet.', [\n 'Example: orderly wallet-add-key --address \"0x1234...\" --broker-id demo',\n ]);\n }\n const response = await prompts({\n type: 'text',\n name: 'brokerId',\n message: 'Enter your Broker ID',\n validate: (value: string) => (value.length > 0 ? true : 'Broker ID is required'),\n });\n if (!response.brokerId) {\n error('Cancelled.');\n }\n bId = response.brokerId.trim();\n\n const accountInfo = await client.getAccount(addr, bId!, walletKey.walletType);\n if (!accountInfo.success || !accountInfo.data?.account_id) {\n error('Account not found. Run `orderly wallet-register` first.');\n }\n accountId = accountInfo.data.account_id;\n resolvedBrokerId = bId!;\n }\n }\n\n const VALID_SCOPES = ['read', 'trading', 'asset'] as const;\n\n let keyScope = scope;\n if (keyScope) {\n const normalized = keyScope.toLowerCase();\n const parts = normalized\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n const invalid = parts.filter((s) => !VALID_SCOPES.includes(s as (typeof VALID_SCOPES)[number]));\n if (invalid.length > 0) {\n error(`Invalid scope value(s): ${invalid.join(', ')}`, [\n `Valid scopes: ${VALID_SCOPES.join(', ')}`,\n `Example: --scope ${VALID_SCOPES.join(',')}`,\n ]);\n }\n keyScope = parts.join(',');\n }\n if (!keyScope && (!process.stdin.isTTY || !process.stdout.isTTY)) {\n keyScope = 'read,trading';\n }\n if (!keyScope) {\n const response = await prompts({\n type: 'multiselect',\n name: 'scopes',\n message: 'Select key scopes',\n choices: [\n { title: 'read', value: 'read', selected: true },\n { title: 'trading', value: 'trading', selected: true },\n { title: 'asset', value: 'asset' },\n ],\n hint: '- Space to select. Return to submit',\n });\n if (!response.scopes || response.scopes.length === 0) {\n error('Cancelled.');\n }\n keyScope = response.scopes.join(',');\n }\n\n if (!keyScope) {\n error('Key scope is required.');\n }\n\n const ed25519KeyPair = generateKeyPair();\n\n const orderlyKey = `ed25519:${getPublicKeyBase58(ed25519KeyPair.publicKey)}`;\n\n const timestamp = Date.now();\n const expiration = timestamp + 365 * 24 * 60 * 60 * 1000; // 1 year\n const chainId =\n walletKey.walletType === 'SOL'\n ? getSolanaChainId(network)\n : network === 'mainnet'\n ? 42161\n : 421614;\n\n let message: Record<string, unknown>;\n let signature: string;\n try {\n if (walletKey.walletType === 'EVM') {\n const evmMessage: AddKeyMessage = {\n brokerId: resolvedBrokerId,\n chainId,\n orderlyKey,\n scope: keyScope,\n timestamp,\n expiration,\n };\n message = { ...evmMessage };\n const wallet = createWalletFromPrivateKey(normalizePrivateKey(walletKey.privateKey));\n signature = await signEVMAddKey(wallet, evmMessage);\n } else {\n const wallet = createSolanaWalletFromPrivateKey(walletKey.privateKey, network);\n const result = await signSolanaAddKey(wallet, {\n brokerId: resolvedBrokerId,\n publicKey: orderlyKey,\n scope: keyScope,\n timestamp,\n expiration,\n network,\n });\n message = result.message;\n signature = result.signature;\n }\n } catch {\n error('Failed to sign message');\n }\n\n try {\n const result = await client.addOrderlyKey(\n message,\n signature,\n addr,\n walletKey.walletType === 'SOL' ? 'SOL' : undefined\n );\n if (result.success && result.data?.orderly_key) {\n const keyPair = {\n accountId,\n address: addr,\n walletType: walletKey.walletType,\n publicKey: ed25519KeyPair.publicKey,\n privateKey: ed25519KeyPair.privateKey,\n network,\n };\n\n await storeKey(accountId, network, keyPair);\n setDefaultNetwork(network);\n\n if (nonInteractive) {\n output({ accountId, address: addr, orderlyKey, network });\n } else {\n console.log();\n console.log(kleur.green('\u2705 Setup complete!'));\n console.log(kleur.dim(`Account ID: ${accountId}`));\n console.log(kleur.dim(`Orderly Key: ${orderlyKey}`));\n console.log();\n console.log(kleur.dim('You can now use trading commands like:'));\n console.log(kleur.cyan(` orderly account-info --account ${accountId}`));\n console.log(\n kleur.cyan(` orderly order-place PERP_ETH_USDC BUY MARKET 0.01 --account ${accountId}`)\n );\n }\n } else {\n const apiMsg = (result as Record<string, unknown>)?.message;\n const hint = apiMsg\n ? `API response: ${apiMsg}`\n : `Request succeeded but no orderly_key was returned. Scopes requested: ${keyScope}`;\n error('Failed to add Orderly key', [hint]);\n }\n } catch (err) {\n handleError(err);\n }\n}\n", "import { Wallet, TypedDataEncoder, HDNodeWallet } from 'ethers';\nimport { EIP712Domain, RegistrationMessage, AddKeyMessage, Network } from '../types.js';\n\nconst EIP712_DOMAIN: EIP712Domain = {\n name: 'Orderly',\n version: '1',\n chainId: 42161,\n verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',\n};\n\nconst CHAIN_IDS: Record<Network, number> = {\n mainnet: 42161,\n testnet: 421614,\n};\n\nexport function getDomain(network: Network): EIP712Domain {\n return {\n ...EIP712_DOMAIN,\n chainId: CHAIN_IDS[network],\n };\n}\n\nexport interface EVMWallet {\n address: string;\n signTypedData(\n domain: EIP712Domain,\n types: Record<string, unknown>,\n value: Record<string, unknown>\n ): Promise<string>;\n}\n\nexport function createWalletFromPrivateKey(privateKey: string): EVMWallet {\n const wallet = new Wallet(privateKey);\n return {\n address: wallet.address,\n signTypedData: async (domain, types, value) => {\n return wallet.signTypedData(\n domain,\n types as Record<string, Array<{ name: string; type: string }>>,\n value\n );\n },\n };\n}\n\nexport function isValidEVMAddress(address: string): boolean {\n return /^0x[a-fA-F0-9]{40}$/.test(address);\n}\n\nexport function isValidPrivateKey(key: string): boolean {\n const hex = key.startsWith('0x') ? key.slice(2) : key;\n return /^[a-fA-F0-9]{64}$/.test(hex);\n}\n\nexport function normalizePrivateKey(key: string): string {\n return key.startsWith('0x') ? key : `0x${key}`;\n}\n\nconst REGISTRATION_TYPES = {\n Registration: [\n { name: 'brokerId', type: 'string' },\n { name: 'chainId', type: 'uint256' },\n { name: 'timestamp', type: 'uint64' },\n { name: 'registrationNonce', type: 'uint256' },\n ],\n};\n\nconst ADD_KEY_TYPES = {\n AddOrderlyKey: [\n { name: 'brokerId', type: 'string' },\n { name: 'chainId', type: 'uint256' },\n { name: 'orderlyKey', type: 'string' },\n { name: 'scope', type: 'string' },\n { name: 'timestamp', type: 'uint64' },\n { name: 'expiration', type: 'uint64' },\n ],\n};\n\nexport async function signRegistration(\n wallet: EVMWallet,\n message: RegistrationMessage\n): Promise<string> {\n const domain = getDomain(message.chainId === 42161 ? 'mainnet' : 'testnet');\n return wallet.signTypedData(domain, REGISTRATION_TYPES, {\n brokerId: message.brokerId,\n chainId: message.chainId,\n timestamp: message.timestamp,\n registrationNonce: message.registrationNonce,\n });\n}\n\nexport async function signAddKey(wallet: EVMWallet, message: AddKeyMessage): Promise<string> {\n const domain = getDomain(message.chainId === 42161 ? 'mainnet' : 'testnet');\n return wallet.signTypedData(domain, ADD_KEY_TYPES, {\n brokerId: message.brokerId,\n chainId: message.chainId,\n orderlyKey: message.orderlyKey,\n scope: message.scope,\n timestamp: message.timestamp,\n expiration: message.expiration,\n });\n}\n\nexport function getRegistrationHash(message: RegistrationMessage): string {\n const domain = getDomain(message.chainId === 42161 ? 'mainnet' : 'testnet');\n return TypedDataEncoder.hash(domain, REGISTRATION_TYPES, message);\n}\n\nexport function getAddKeyHash(message: AddKeyMessage): string {\n const domain = getDomain(message.chainId === 42161 ? 'mainnet' : 'testnet');\n return TypedDataEncoder.hash(domain, ADD_KEY_TYPES, message);\n}\n\nexport interface GeneratedEVMWallet {\n address: string;\n privateKey: string;\n mnemonic?: string;\n}\n\nexport function generateEVMWallet(): GeneratedEVMWallet {\n const wallet = HDNodeWallet.createRandom();\n return {\n address: wallet.address,\n privateKey: wallet.privateKey,\n mnemonic: wallet.mnemonic?.phrase,\n };\n}\n\nexport interface WithdrawMessage {\n brokerId: string;\n chainId: number;\n receiver: string;\n token: string;\n amount: string;\n withdrawNonce: string;\n timestamp: string | number;\n}\n\nconst WITHDRAW_TYPES = {\n Withdraw: [\n { name: 'brokerId', type: 'string' },\n { name: 'chainId', type: 'uint256' },\n { name: 'receiver', type: 'address' },\n { name: 'token', type: 'string' },\n { name: 'amount', type: 'uint256' },\n { name: 'withdrawNonce', type: 'uint64' },\n { name: 'timestamp', type: 'uint64' },\n ],\n};\n\nconst VERIFYING_CONTRACTS: Record<Network, string> = {\n mainnet: '0x6F7a338F2aA472838dEFD3283eB360d4Dff5D203',\n testnet: '0x1826B75e2ef249173FC735149AE4B8e9ea10abff',\n};\n\nexport async function signWithdraw(\n wallet: EVMWallet,\n message: WithdrawMessage,\n network: Network\n): Promise<string> {\n const domain: EIP712Domain = {\n name: 'Orderly',\n version: '1',\n chainId: message.chainId,\n verifyingContract: VERIFYING_CONTRACTS[network],\n };\n\n return wallet.signTypedData(\n domain,\n WITHDRAW_TYPES,\n message as unknown as Record<string, unknown>\n );\n}\n\nexport interface SettlePnlMessage {\n brokerId: string;\n chainId: number;\n settleNonce: string;\n timestamp: number;\n}\n\nconst SETTLE_PNL_TYPES = {\n SettlePnl: [\n { name: 'brokerId', type: 'string' },\n { name: 'chainId', type: 'uint256' },\n { name: 'settleNonce', type: 'uint64' },\n { name: 'timestamp', type: 'uint64' },\n ],\n};\n\nexport async function signSettlePnl(\n wallet: EVMWallet,\n message: SettlePnlMessage,\n network: Network\n): Promise<string> {\n const domain: EIP712Domain = {\n name: 'Orderly',\n version: '1',\n chainId: message.chainId,\n verifyingContract: VERIFYING_CONTRACTS[network],\n };\n\n return wallet.signTypedData(\n domain,\n SETTLE_PNL_TYPES,\n message as unknown as Record<string, unknown>\n );\n}\n", "import bs58 from 'bs58';\nimport { ed25519 } from '@noble/curves/ed25519.js';\nimport { randomBytes } from 'crypto';\nimport { AbiCoder, solidityPackedKeccak256, keccak256, getBytes } from 'ethers';\nimport { Network } from '../types.js';\n\nconst SOLANA_CHAIN_IDS: Record<Network, number> = {\n mainnet: 900900900,\n testnet: 901901901,\n};\n\nexport function getSolanaChainId(network: Network): number {\n return SOLANA_CHAIN_IDS[network];\n}\n\nexport interface SolanaWallet {\n address: string;\n privateKeyBytes: Uint8Array;\n}\n\nexport function createSolanaWalletFromPrivateKey(\n privateKey: string,\n _network: Network\n): SolanaWallet {\n let keyBytes: Uint8Array;\n\n if (privateKey.includes(',') || privateKey.includes('[')) {\n const nums = privateKey\n .replace(/[[\\]]/g, '')\n .split(',')\n .map((n) => parseInt(n.trim(), 10));\n keyBytes = new Uint8Array(nums);\n } else {\n try {\n keyBytes = bs58.decode(privateKey);\n } catch {\n if (/^[a-fA-F0-9]+$/.test(privateKey)) {\n const hex = privateKey.length === 64 ? privateKey : privateKey.slice(0, 64);\n keyBytes = new Uint8Array(hex.length / 2);\n for (let i = 0; i < hex.length; i += 2) {\n keyBytes[i / 2] = parseInt(hex.slice(i, i + 2), 16);\n }\n } else {\n throw new Error('Invalid Solana private key format');\n }\n }\n }\n\n if (keyBytes.length === 64) {\n keyBytes = keyBytes.slice(0, 32);\n }\n\n if (keyBytes.length !== 32) {\n throw new Error(`Invalid private key length: ${keyBytes.length}, expected 32 or 64 bytes`);\n }\n\n const publicKey = ed25519.getPublicKey(keyBytes);\n const address = bs58.encode(publicKey);\n\n return {\n address,\n privateKeyBytes: keyBytes,\n };\n}\n\nexport function isValidSolanaAddress(address: string): boolean {\n try {\n const decoded = bs58.decode(address);\n return decoded.length === 32;\n } catch {\n return false;\n }\n}\n\nfunction bytesToHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\nexport async function signRegistration(\n wallet: SolanaWallet,\n params: {\n brokerId: string;\n timestamp: number;\n registrationNonce: string;\n network: Network;\n }\n): Promise<{ message: Record<string, unknown>; signature: string }> {\n const chainId = SOLANA_CHAIN_IDS[params.network];\n\n const message = {\n brokerId: params.brokerId,\n chainId,\n timestamp: params.timestamp,\n registrationNonce: params.registrationNonce,\n };\n\n const brokerIdHash = solidityPackedKeccak256(['string'], [message.brokerId]);\n\n const abicoder = AbiCoder.defaultAbiCoder();\n const encodedData = abicoder.encode(\n ['bytes32', 'uint256', 'uint256', 'uint256'],\n [brokerIdHash, message.chainId, message.timestamp, message.registrationNonce]\n );\n\n const msgToSign = keccak256(getBytes(encodedData));\n const msgToSignHex = msgToSign.slice(2);\n\n const msgToSignTextEncoded: Uint8Array = new TextEncoder().encode(msgToSignHex);\n\n const signatureBytes = ed25519.sign(msgToSignTextEncoded, wallet.privateKeyBytes);\n const signature = `0x${bytesToHex(signatureBytes)}`;\n\n return {\n message: {\n ...message,\n chainType: 'SOL',\n },\n signature,\n };\n}\n\nexport async function signAddKey(\n wallet: SolanaWallet,\n params: {\n brokerId: string;\n publicKey: string;\n scope: string;\n timestamp: number;\n expiration: number;\n network: Network;\n }\n): Promise<{ message: Record<string, unknown>; signature: string }> {\n const chainId = SOLANA_CHAIN_IDS[params.network];\n\n const message = {\n brokerId: params.brokerId,\n chainType: 'SOL',\n orderlyKey: params.publicKey,\n scope: params.scope,\n chainId,\n timestamp: params.timestamp,\n expiration: params.expiration,\n };\n\n const brokerIdHash = solidityPackedKeccak256(['string'], [message.brokerId]);\n const orderlyKeyHash = solidityPackedKeccak256(['string'], [message.orderlyKey]);\n const scopeHash = solidityPackedKeccak256(['string'], [message.scope]);\n\n const abicoder = AbiCoder.defaultAbiCoder();\n const encodedData = abicoder.encode(\n ['bytes32', 'bytes32', 'bytes32', 'uint256', 'uint256', 'uint256'],\n [\n brokerIdHash,\n orderlyKeyHash,\n scopeHash,\n message.chainId,\n message.timestamp,\n message.expiration,\n ]\n );\n\n const msgToSign = keccak256(getBytes(encodedData));\n const msgToSignHex = msgToSign.slice(2);\n\n const msgToSignTextEncoded: Uint8Array = new TextEncoder().encode(msgToSignHex);\n\n const signatureBytes = ed25519.sign(msgToSignTextEncoded, wallet.privateKeyBytes);\n const signature = `0x${bytesToHex(signatureBytes)}`;\n\n return {\n message,\n signature,\n };\n}\n\nexport interface GeneratedSolanaWallet {\n address: string;\n privateKey: string;\n}\n\nexport function generateSolanaWallet(): GeneratedSolanaWallet {\n const privateKey = randomBytes(32);\n const publicKey = ed25519.getPublicKey(privateKey);\n const address = bs58.encode(publicKey);\n const privateKeyBase58 = bs58.encode(privateKey);\n\n return {\n address,\n privateKey: privateKeyBase58,\n };\n}\n\nexport interface WithdrawMessage {\n brokerId: string;\n chainId: number;\n receiver: string;\n token: string;\n amount: string;\n withdrawNonce: string;\n timestamp: number | string;\n}\n\nexport async function signWithdraw(\n wallet: SolanaWallet,\n params: WithdrawMessage\n): Promise<{ message: Record<string, unknown>; signature: string }> {\n const timestamp = params.timestamp ?? Date.now();\n\n const message = {\n brokerId: params.brokerId,\n chainId: params.chainId,\n receiver: params.receiver,\n token: params.token,\n amount: params.amount,\n withdrawNonce: params.withdrawNonce,\n timestamp,\n chainType: 'SOL' as const,\n };\n\n const brokerIdHash = solidityPackedKeccak256(['string'], [message.brokerId]);\n const tokenSymbolHash = solidityPackedKeccak256(['string'], [message.token]);\n const salt = keccak256(Buffer.from('Orderly Network'));\n\n const receiverBytes = bs58.decode(message.receiver);\n\n const abicoder = AbiCoder.defaultAbiCoder();\n const encodedData = abicoder.encode(\n ['bytes32', 'bytes32', 'uint256', 'bytes32', 'uint256', 'uint64', 'uint64', 'bytes32'],\n [\n brokerIdHash,\n tokenSymbolHash,\n message.chainId,\n receiverBytes,\n message.amount,\n message.withdrawNonce,\n timestamp,\n salt,\n ]\n );\n\n const msgToSign = keccak256(getBytes(encodedData));\n const msgToSignHex = msgToSign.slice(2);\n const msgToSignTextEncoded: Uint8Array = new TextEncoder().encode(msgToSignHex);\n\n const signatureBytes = ed25519.sign(msgToSignTextEncoded, wallet.privateKeyBytes);\n const signature = `0x${bytesToHex(signatureBytes)}`;\n\n return { message, signature };\n}\n\nexport interface SettlePnlMessage {\n brokerId: string;\n chainId: number;\n settleNonce: string;\n timestamp?: number;\n}\n\nexport async function signSettlePnl(\n wallet: SolanaWallet,\n params: SettlePnlMessage\n): Promise<{ message: Record<string, unknown>; signature: string }> {\n const timestamp = params.timestamp ?? Date.now();\n\n const message = {\n brokerId: params.brokerId,\n chainId: params.chainId,\n settleNonce: params.settleNonce,\n timestamp,\n chainType: 'SOL' as const,\n };\n\n const brokerIdHash = solidityPackedKeccak256(['string'], [message.brokerId]);\n\n const abicoder = AbiCoder.defaultAbiCoder();\n const encodedData = abicoder.encode(\n ['bytes32', 'uint256', 'uint64', 'uint64'],\n [brokerIdHash, message.chainId, message.settleNonce, message.timestamp]\n );\n\n const msgToSign = keccak256(getBytes(encodedData));\n const msgToSignHex = msgToSign.slice(2);\n const msgToSignTextEncoded: Uint8Array = new TextEncoder().encode(msgToSignHex);\n\n const signatureBytes = ed25519.sign(msgToSignTextEncoded, wallet.privateKeyBytes);\n const signature = `0x${bytesToHex(signatureBytes)}`;\n\n return { message, signature };\n}\n", "import { parseUnits } from 'ethers';\nimport { createAuthenticatedClient } from '../lib/account-select.js';\nimport { OrderlyClient } from '../lib/api.js';\nimport { getWalletKey } from '../lib/keychain.js';\nimport { output, error, handleError, OutputFormat } from '../lib/output.js';\nimport { Network } from '../types.js';\nimport {\n getChainInfo,\n getTokenAddress,\n getWithdrawalFee,\n isSupportedChain,\n getVerifyingContract,\n} from '../lib/contracts.js';\nimport {\n createWalletFromPrivateKey,\n isValidEVMAddress,\n signWithdraw as signWithdrawEVM,\n} from '../lib/evm.js';\nimport {\n createSolanaWalletFromPrivateKey,\n isValidSolanaAddress,\n signWithdraw as signWithdrawSolana,\n} from '../lib/solana.js';\nimport { hasNegativeUnsettledPnl, performSettlePnl } from './settle.js';\n\nexport async function getChains(\n network: Network,\n format: OutputFormat = 'json',\n brokerId?: string,\n verbose = false\n): Promise<void> {\n const client = new OrderlyClient(network);\n\n try {\n const result = await client.get<{\n data?: { rows?: Array<{ broker_ids?: string[]; [k: string]: unknown }> };\n }>('/v1/public/chain_info', false);\n if (result?.data?.rows) {\n if (brokerId) {\n result.data.rows = result.data.rows.filter(\n (chain) => chain.broker_ids && chain.broker_ids.includes(brokerId)\n );\n }\n if (!verbose) {\n result.data.rows = result.data.rows.map(({ broker_ids: _broker_ids, ...rest }) => rest);\n }\n }\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function getTokens(\n network: Network,\n format: OutputFormat = 'json',\n verbose = false\n): Promise<void> {\n const client = new OrderlyClient(network);\n\n try {\n const result = await client.get<{\n success?: boolean;\n data?: { rows?: Array<{ chain_details?: unknown[]; [k: string]: unknown }> };\n }>('/v1/public/token', false);\n if (!verbose && result?.data?.rows) {\n result.data.rows = result.data.rows.map(({ chain_details: _chain_details, ...rest }) => rest);\n }\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function depositInfo(\n token: string,\n chainId: number,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const supported = await isSupportedChain(chainId, network);\n if (!supported) {\n error(\n `Chain ID ${chainId} is not supported on ${network}. Use 'orderly chains' to see supported chains.`\n );\n }\n\n const chainVault = await getChainInfo(chainId, network);\n if (!chainVault) {\n error(`Chain ID ${chainId} not found in chain info.`);\n }\n\n const tokenAddress = await getTokenAddress(token, chainId, network);\n if (!tokenAddress) {\n error(`Token ${token.toUpperCase()} is not available on chain ${chainId}.`, [\n \"Use 'orderly tokens' to see supported tokens and 'orderly chains' to see supported chains.\",\n ]);\n }\n\n const { vault_address, ...chainRest } = chainVault;\n const result: Record<string, unknown> = {\n ...chainRest,\n chainId,\n token: token.toUpperCase(),\n tokenAddress,\n vaultAddress: vault_address ?? null,\n };\n output(result, format);\n}\n\nexport async function withdraw(\n token: string,\n amount: string,\n receiver: string | undefined,\n chainId: number,\n accountId: string | undefined,\n network: Network,\n rawAmount: boolean = false,\n allowCrossChain: boolean = false,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { keyPair, client } = await createAuthenticatedClient(accountId, network);\n\n const brokerId = await client.getBrokerId(keyPair!.accountId);\n\n const supported = await isSupportedChain(chainId, network);\n if (!supported) {\n error(\n `Chain ID ${chainId} is not supported on ${network}. Use 'orderly chains' to see supported chains.`\n );\n }\n\n let rawAmountValue: string;\n\n if (rawAmount) {\n if (!amount || isNaN(Number(amount))) {\n error(`Invalid amount: ${amount}`, ['Amount must be a valid positive number.']);\n }\n rawAmountValue = amount;\n } else {\n if (!amount || isNaN(Number(amount)) || Number(amount) <= 0) {\n error(`Invalid amount: ${amount}`, ['Amount must be a valid positive number (e.g., 10.5)']);\n }\n try {\n const tokensResponse = await client.get<{\n success: boolean;\n data?: {\n rows: Array<{\n token: string;\n decimals: number;\n chain_details: Array<{ chain_id: number | string; decimals: number }>;\n }>;\n };\n }>('/v1/public/token');\n\n if (!tokensResponse.success || !tokensResponse.data?.rows) {\n error('Failed to fetch token info');\n }\n\n const tokenInfo = tokensResponse.data.rows.find((t) => t.token === token.toUpperCase());\n\n if (!tokenInfo) {\n error(`Token ${token.toUpperCase()} not found`);\n }\n\n const chainDetail = tokenInfo.chain_details.find(\n (c) => String(c.chain_id) === String(chainId)\n );\n const decimals = chainDetail?.decimals ?? tokenInfo.decimals;\n\n rawAmountValue = parseUnits(amount, decimals).toString();\n } catch {\n error(`Invalid amount: ${amount}`, ['Amount must be a valid number (e.g., 10.5)']);\n }\n }\n\n const feeInfo = await getWithdrawalFee(token, chainId, network);\n if (feeInfo) {\n const fee = allowCrossChain ? feeInfo.crossChainFee : feeInfo.fee;\n if (fee > 0 && Number(amount) <= fee) {\n error(\n `Withdrawal amount (${amount} ${token.toUpperCase()}) must be greater than the withdrawal fee (${fee} ${token.toUpperCase()}).`,\n [\n `Minimum withdrawal: slightly above ${fee} ${token.toUpperCase()} (amount must exceed the fee).`,\n ]\n );\n }\n }\n\n try {\n let settledPnlId: number | null = null;\n try {\n if (await hasNegativeUnsettledPnl(client)) {\n const settleResult = await performSettlePnl(client, keyPair!, network);\n if (settleResult) {\n settledPnlId = settleResult.settle_pnl_id;\n }\n }\n } catch {\n // settle-pnl is best-effort; don't let it mask the real withdrawal error\n }\n\n const nonceResponse = await client.get<{ success: boolean; data?: { withdraw_nonce: string } }>(\n '/v1/withdraw_nonce'\n );\n\n if (!nonceResponse.success || !nonceResponse.data?.withdraw_nonce) {\n error('Failed to get withdrawal nonce');\n }\n\n const withdrawNonce = String(nonceResponse.data.withdraw_nonce);\n const timestamp = Date.now();\n const timestampStr = timestamp.toString();\n\n const walletKey = await getWalletKey(keyPair.address, network);\n if (!walletKey) {\n error(\n `No wallet key found for address ${keyPair.address}. Wallet keys are required for withdrawal signing. Use orderly wallet-import to import your wallet key.`\n );\n }\n\n const resolvedReceiver = receiver || walletKey.address;\n const walletType = walletKey.walletType || keyPair.walletType || 'EVM';\n\n if (walletType === 'SOL' && isValidEVMAddress(resolvedReceiver)) {\n error(`Cannot withdraw to an EVM address (${resolvedReceiver}) using a SOL wallet.`, [\n 'SOL wallets can only withdraw to SOL (base58) addresses.',\n 'To withdraw to an EVM chain, use an EVM wallet account instead.',\n ]);\n }\n\n if (walletType === 'EVM' && !isValidEVMAddress(resolvedReceiver)) {\n if (isValidSolanaAddress(resolvedReceiver)) {\n error(`Cannot withdraw to a SOL address (${resolvedReceiver}) using an EVM wallet.`, [\n 'EVM wallets can only withdraw to EVM (0x...) addresses.',\n 'To withdraw to a SOL chain, use a SOL wallet account instead.',\n ]);\n }\n }\n\n let signature: string;\n let message: Record<string, unknown>;\n\n if (walletType === 'SOL') {\n const solanaWallet = createSolanaWalletFromPrivateKey(walletKey.privateKey, network);\n const withdrawResult = await signWithdrawSolana(solanaWallet, {\n brokerId,\n chainId,\n receiver: resolvedReceiver,\n token: token.toUpperCase(),\n amount: rawAmountValue,\n withdrawNonce,\n timestamp,\n });\n signature = withdrawResult.signature;\n message = withdrawResult.message;\n } else {\n const evmWallet = createWalletFromPrivateKey(walletKey.privateKey);\n const withdrawMessage = {\n brokerId,\n chainId,\n receiver: resolvedReceiver,\n token: token.toUpperCase(),\n amount: rawAmountValue,\n withdrawNonce,\n timestamp: timestampStr,\n };\n signature = await signWithdrawEVM(evmWallet, withdrawMessage, network);\n message = withdrawMessage;\n }\n\n const requestBody: Record<string, unknown> = {\n message,\n signature,\n userAddress: keyPair.address,\n verifyingContract: getVerifyingContract(network),\n };\n if (allowCrossChain) {\n requestBody.allow_cross_chain_withdrawal = true;\n }\n\n const result = (await client.post<{\n success: boolean;\n data?: { withdraw_id: number };\n message?: string;\n }>('/v1/withdraw_request', requestBody)) as {\n success?: boolean;\n data?: { withdraw_id: number };\n message?: string;\n };\n\n if (result.success && result.data?.withdraw_id) {\n const out = { ...result.data };\n if (settledPnlId !== null) {\n (out as Record<string, unknown>).auto_settled = true;\n (out as Record<string, unknown>).settle_pnl_id = settledPnlId;\n }\n output(out, format);\n } else {\n const apiMsg = (result as Record<string, unknown>).message as string | undefined;\n const hints: string[] = [];\n if (allowCrossChain) {\n hints.push('Check that the token and chain combination is valid.');\n } else {\n hints.push('If the error mentions cross-chain, use --allow-cross-chain flag.');\n }\n if (apiMsg && /amount/i.test(apiMsg)) {\n hints.push(\n 'The amount may be below the minimum withdrawal or exceed your available balance.'\n );\n }\n error(`Failed to initiate withdrawal${apiMsg ? `: ${apiMsg}` : ''}`, hints);\n }\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function assetHistory(\n token: string | undefined,\n side: string | undefined,\n status: string | undefined,\n page: number | undefined,\n size: number | undefined,\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const params = new URLSearchParams();\n if (token) params.append('token', token.toUpperCase());\n if (side) params.append('side', side.toUpperCase());\n if (status) params.append('status', status.toUpperCase());\n params.append('page', (page ?? 1).toString());\n params.append('size', (size ?? 25).toString());\n\n const result = await client.get(`/v1/asset/history?${params.toString()}`);\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n", "import axios from 'axios';\nimport { Network } from '../types.js';\nimport { getApiBaseUrl } from './config.js';\n\nexport const VERIFYING_CONTRACTS: Record<Network, string> = {\n mainnet: '0x6F7a338F2aA472838dEFD3283eB360d4Dff5D203',\n testnet: '0x1826B75e2ef249173FC735149AE4B8e9ea10abff',\n};\n\ninterface ChainInfo {\n name: string;\n chain_id: number | string;\n vault_address: string;\n public_rpc_url?: string;\n currency_symbol?: string;\n currency_decimal?: number;\n explorer_base_url?: string;\n broker_ids?: string[];\n}\n\ninterface TokenInfo {\n token: string;\n decimals: number;\n chain_details: Array<{\n chain_id: number | string;\n contract_address: string;\n decimals: number;\n withdrawal_fee: number;\n cross_chain_withdrawal_fee: number;\n display_name: string;\n }>;\n}\n\nconst chainCache = new Map<Network, ChainInfo[]>();\nconst tokenCache = new Map<Network, TokenInfo[]>();\n\nasync function fetchChainInfo(network: Network): Promise<ChainInfo[]> {\n if (chainCache.has(network)) {\n return chainCache.get(network)!;\n }\n const baseUrl = getApiBaseUrl(network);\n const response = await axios.get(`${baseUrl}/v1/public/chain_info`);\n const rows = response.data?.data?.rows ?? response.data?.rows ?? [];\n chainCache.set(network, rows);\n return rows;\n}\n\nasync function fetchTokenInfo(network: Network): Promise<TokenInfo[]> {\n if (tokenCache.has(network)) {\n return tokenCache.get(network)!;\n }\n const baseUrl = getApiBaseUrl(network);\n const response = await axios.get(`${baseUrl}/v1/public/token`);\n const rows = response.data?.data?.rows ?? response.data?.rows ?? [];\n tokenCache.set(network, rows);\n return rows;\n}\n\nexport async function getChainInfo(chainId: number, network: Network): Promise<ChainInfo | null> {\n const chains = await fetchChainInfo(network);\n return chains.find((c) => Number(c.chain_id) === chainId) ?? null;\n}\n\nexport async function getChainName(chainId: number, network: Network): Promise<string> {\n const chain = await getChainInfo(chainId, network);\n return chain?.name ?? `Chain ${chainId}`;\n}\n\nexport async function getChainVaultAddress(\n chainId: number,\n network: Network\n): Promise<string | null> {\n const chain = await getChainInfo(chainId, network);\n return chain?.vault_address ?? null;\n}\n\nexport async function getTokenAddress(\n token: string,\n chainId: number,\n network: Network\n): Promise<string | null> {\n const tokens = await fetchTokenInfo(network);\n const tokenInfo = tokens.find((t) => t.token === token.toUpperCase());\n if (!tokenInfo) return null;\n const chainDetail = tokenInfo.chain_details.find((c) => String(c.chain_id) === String(chainId));\n return chainDetail?.contract_address ?? null;\n}\n\nexport async function getTokenDecimals(\n token: string,\n chainId: number,\n network: Network\n): Promise<number | null> {\n const tokens = await fetchTokenInfo(network);\n const tokenInfo = tokens.find((t) => t.token === token.toUpperCase());\n if (!tokenInfo) return null;\n const chainDetail = tokenInfo.chain_details.find((c) => String(c.chain_id) === String(chainId));\n return chainDetail?.decimals ?? tokenInfo.decimals ?? null;\n}\n\nexport async function isSupportedChain(chainId: number, network: Network): Promise<boolean> {\n const chain = await getChainInfo(chainId, network);\n return chain !== null;\n}\n\nexport async function getWithdrawalFee(\n token: string,\n chainId: number,\n network: Network\n): Promise<{ fee: number; crossChainFee: number } | null> {\n const tokens = await fetchTokenInfo(network);\n const tokenInfo = tokens.find((t) => t.token === token.toUpperCase());\n if (!tokenInfo) return null;\n const chainDetail = tokenInfo.chain_details.find((c) => String(c.chain_id) === String(chainId));\n if (!chainDetail) return null;\n return { fee: chainDetail.withdrawal_fee, crossChainFee: chainDetail.cross_chain_withdrawal_fee };\n}\n\nexport function getVerifyingContract(network: Network): string {\n return VERIFYING_CONTRACTS[network];\n}\n", "import { OrderlyClient } from '../lib/api.js';\nimport { createAuthenticatedClient } from '../lib/account-select.js';\nimport { getWalletKey } from '../lib/keychain.js';\nimport { output, error, handleError, OutputFormat } from '../lib/output.js';\nimport { KeyPair, Network } from '../types.js';\nimport { createWalletFromPrivateKey, signSettlePnl as signSettlePnlEVM } from '../lib/evm.js';\nimport {\n createSolanaWalletFromPrivateKey,\n signSettlePnl as signSettlePnlSolana,\n getSolanaChainId,\n} from '../lib/solana.js';\n\nconst VERIFYING_CONTRACTS: Record<string, string> = {\n mainnet: '0x6F7a338F2aA472838dEFD3283eB360d4Dff5D203',\n testnet: '0x1826B75e2ef249173FC735149AE4B8e9ea10abff',\n};\n\nexport interface SettleResult {\n settle_pnl_id: number;\n}\n\nexport async function performSettlePnl(\n client: OrderlyClient,\n keyPair: KeyPair,\n network: Network\n): Promise<SettleResult> {\n const brokerId = await client.getBrokerId(keyPair.accountId);\n\n const nonceResponse = await client.getSettleNonce();\n if (!nonceResponse.success || nonceResponse.data?.settle_nonce === undefined) {\n throw new Error('Failed to get settle nonce from API');\n }\n\n const settleNonce = String(nonceResponse.data.settle_nonce);\n\n const walletKey = await getWalletKey(keyPair.address, network);\n if (!walletKey) {\n throw new Error(`No wallet key found for ${keyPair.address}`);\n }\n\n const walletType = walletKey.walletType || keyPair.walletType || 'EVM';\n const chainId =\n walletType === 'SOL' ? getSolanaChainId(network) : network === 'mainnet' ? 42161 : 421614;\n\n let signature: string;\n let message: Record<string, unknown>;\n\n const timestamp = Date.now();\n\n if (walletType === 'SOL') {\n const solanaWallet = createSolanaWalletFromPrivateKey(walletKey.privateKey, network);\n const result = await signSettlePnlSolana(solanaWallet, {\n brokerId,\n chainId,\n settleNonce,\n timestamp,\n });\n signature = result.signature;\n message = result.message;\n } else {\n const settleMessage = {\n brokerId,\n chainId,\n settleNonce,\n timestamp,\n };\n const evmWallet = createWalletFromPrivateKey(walletKey.privateKey);\n signature = await signSettlePnlEVM(evmWallet, settleMessage, network);\n message = settleMessage;\n }\n\n const result = await client.post<{\n success: boolean;\n data?: { settle_pnl_id: number };\n message?: string;\n }>('/v1/settle_pnl', {\n message,\n signature,\n userAddress: keyPair.address,\n verifyingContract: VERIFYING_CONTRACTS[network],\n });\n\n if (result.success && result.data?.settle_pnl_id) {\n return result.data;\n }\n\n const msg =\n (result as { message?: string }).message ||\n (result as { code?: number }).code?.toString() ||\n 'Unknown error';\n throw new Error(`Settle PnL failed: ${msg}`);\n}\n\nexport async function hasNegativeUnsettledPnl(client: OrderlyClient): Promise<boolean> {\n try {\n const positions = (await client.get('/v1/positions')) as {\n data?: {\n rows?: Array<{ unsettled_pnl?: number }>;\n };\n };\n const rows = positions?.data?.rows;\n if (!rows || rows.length === 0) return false;\n return rows.some((row) => row.unsettled_pnl !== undefined && row.unsettled_pnl < 0);\n } catch {\n return false;\n }\n}\n\nexport async function settlePnl(\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { keyPair, client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const result = await performSettlePnl(client, keyPair, network);\n if (result) {\n output(result, format);\n } else {\n error('Failed to settle PnL');\n }\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function settlePnlHistory(\n page: number | undefined,\n size: number | undefined,\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const result = await client.getPnlSettlementHistory(page, size);\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n", "import { createAuthenticatedClient } from '../lib/account-select.js';\nimport { output, handleError, OutputFormat } from '../lib/output.js';\nimport { Network } from '../types.js';\n\nexport async function getOrSetLeverage(\n symbol: string,\n leverage: number | undefined,\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n let result;\n if (leverage !== undefined) {\n result = await client.setLeverage(symbol.toUpperCase(), leverage);\n } else {\n result = await client.getLeverage(symbol.toUpperCase());\n }\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n", "import { createAuthenticatedClient } from '../lib/account-select.js';\nimport { output, handleError, OutputFormat } from '../lib/output.js';\nimport { Network } from '../types.js';\n\nexport async function listTrades(\n symbol: string | undefined,\n startT: number | undefined,\n endT: number | undefined,\n page: number | undefined,\n size: number | undefined,\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const result = await client.getTrades(symbol?.toUpperCase(), startT, endT, page, size);\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n", "import axios from 'axios';\nimport { createAuthenticatedClient } from '../lib/account-select.js';\nimport { output, error, handleError, OutputFormat } from '../lib/output.js';\nimport { Network } from '../types.js';\n\nconst VALID_ALGO_TYPES = ['STOP', 'TP_SL', 'POSITIONAL_TP_SL', 'TRAILING_STOP', 'BRACKET'];\nconst VALID_SIDES = ['BUY', 'SELL'];\n\nexport async function placeAlgoOrder(\n symbol: string,\n side: string,\n algoType: string,\n quantity: string,\n triggerPrice: string | undefined,\n callbackRate: string | undefined,\n price: string | undefined,\n tpTriggerPrice: string | undefined,\n tpPrice: string | undefined,\n slTriggerPrice: string | undefined,\n slPrice: string | undefined,\n reduceOnly: boolean | undefined,\n clientOrderId: string | undefined,\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const validSide = side.toUpperCase();\n if (!VALID_SIDES.includes(validSide)) {\n error(`Invalid side. Use ${VALID_SIDES.join(' or ')}.`);\n }\n\n const validAlgoType = algoType.toUpperCase();\n if (!VALID_ALGO_TYPES.includes(validAlgoType)) {\n error(`Invalid algo type. Use one of: ${VALID_ALGO_TYPES.join(', ')}`);\n }\n\n if (validAlgoType === 'TRAILING_STOP') {\n if (!callbackRate) {\n error('--callback-rate is required for TRAILING_STOP orders.');\n }\n const rate = Number(callbackRate);\n if (rate >= 1) {\n callbackRate = String(rate / 100);\n }\n const normalizedRate = Number(callbackRate);\n if (normalizedRate < 0.01 || normalizedRate > 0.15) {\n error(\n `Callback rate must be between 1% and 15%. Got ${rate}${rate >= 1 ? '%' : ` (${(normalizedRate * 100).toFixed(2)}%)`}.`,\n [\n 'Use percentage format: --callback-rate 5 (for 5%)',\n 'Or decimal format: --callback-rate 0.05 (for 5%)',\n ]\n );\n }\n } else if (validAlgoType === 'TP_SL' || validAlgoType === 'POSITIONAL_TP_SL') {\n if (!tpTriggerPrice && !slTriggerPrice) {\n error(\n 'At least one of --tp-trigger-price or --sl-trigger-price is required for TP_SL/POSITIONAL_TP_SL orders.'\n );\n }\n } else if (validAlgoType === 'STOP') {\n if (!triggerPrice) {\n error('--trigger-price is required for STOP orders.');\n }\n } else if (validAlgoType === 'BRACKET') {\n if (!triggerPrice) {\n error('--trigger-price is required for BRACKET orders.');\n }\n if (!tpTriggerPrice && !slTriggerPrice) {\n error(\n 'At least one of --tp-trigger-price or --sl-trigger-price is required for BRACKET orders.'\n );\n }\n }\n\n const { client } = await createAuthenticatedClient(accountId, network);\n\n if (\n (validAlgoType === 'TP_SL' ||\n validAlgoType === 'POSITIONAL_TP_SL' ||\n validAlgoType === 'BRACKET') &&\n (tpTriggerPrice || slTriggerPrice)\n ) {\n let markPrice: number | undefined;\n try {\n const raw = (await client.getMarketPrice(symbol.toUpperCase())) as Record<string, unknown>;\n const marketData = (raw?.data as Record<string, unknown>) || raw;\n markPrice = marketData?.mark_price as number | undefined;\n } catch {\n // skip validation if mark price unavailable\n }\n\n if (markPrice !== undefined) {\n const tp = tpTriggerPrice ? Number(tpTriggerPrice) : undefined;\n const sl = slTriggerPrice ? Number(slTriggerPrice) : undefined;\n\n // For TP_SL/POSITIONAL_TP_SL, `side` is the closing direction (opposite of position).\n // For BRACKET, `side` is the entry direction (same as position).\n const isClosing = validAlgoType === 'TP_SL' || validAlgoType === 'POSITIONAL_TP_SL';\n const isLong = isClosing ? validSide === 'SELL' : validSide === 'BUY';\n\n if (isLong) {\n if (tp !== undefined && tp <= markPrice) {\n error(\n `Take-profit trigger price (${tp}) must be above current mark price (${markPrice}) for a long position.`\n );\n }\n if (sl !== undefined && sl >= markPrice) {\n error(\n `Stop-loss trigger price (${sl}) must be below current mark price (${markPrice}) for a long position.`\n );\n }\n } else {\n if (tp !== undefined && tp >= markPrice) {\n error(\n `Take-profit trigger price (${tp}) must be below current mark price (${markPrice}) for a short position.`\n );\n }\n if (sl !== undefined && sl <= markPrice) {\n error(\n `Stop-loss trigger price (${sl}) must be above current mark price (${markPrice}) for a short position.`\n );\n }\n }\n }\n }\n\n try {\n let result;\n\n if (validAlgoType === 'TP_SL' || validAlgoType === 'POSITIONAL_TP_SL') {\n const childOrders: Array<{\n symbol: string;\n algo_type: string;\n side: string;\n type: string;\n trigger_price: string;\n price?: string;\n reduce_only: boolean;\n }> = [];\n\n const closeSide = validSide;\n\n if (tpTriggerPrice) {\n const tpOrder: {\n symbol: string;\n algo_type: string;\n side: string;\n type: string;\n trigger_price: string;\n price?: string;\n reduce_only: boolean;\n } = {\n symbol: symbol.toUpperCase(),\n algo_type: 'TAKE_PROFIT',\n side: closeSide,\n type:\n validAlgoType === 'POSITIONAL_TP_SL' ? 'CLOSE_POSITION' : tpPrice ? 'LIMIT' : 'MARKET',\n trigger_price: tpTriggerPrice,\n reduce_only: true,\n };\n if (tpPrice) tpOrder.price = tpPrice;\n childOrders.push(tpOrder);\n }\n\n if (slTriggerPrice) {\n const slOrder: {\n symbol: string;\n algo_type: string;\n side: string;\n type: string;\n trigger_price: string;\n price?: string;\n reduce_only: boolean;\n } = {\n symbol: symbol.toUpperCase(),\n algo_type: 'STOP_LOSS',\n side: closeSide,\n type:\n validAlgoType === 'POSITIONAL_TP_SL' ? 'CLOSE_POSITION' : slPrice ? 'LIMIT' : 'MARKET',\n trigger_price: slTriggerPrice,\n reduce_only: true,\n };\n if (slPrice) slOrder.price = slPrice;\n childOrders.push(slOrder);\n }\n\n result = await client.placeAlgoOrder({\n symbol: symbol.toUpperCase(),\n algoType: validAlgoType,\n quantity: validAlgoType === 'POSITIONAL_TP_SL' ? undefined : quantity,\n clientOrderId,\n childOrders,\n });\n } else if (validAlgoType === 'BRACKET') {\n const oppositeSide = validSide === 'BUY' ? 'SELL' : 'BUY';\n\n const tpslChildOrders: Array<{\n symbol: string;\n algo_type: string;\n side: string;\n type: string;\n trigger_price: string;\n price?: string;\n reduce_only: boolean;\n }> = [];\n\n if (tpTriggerPrice) {\n const tpOrder: {\n symbol: string;\n algo_type: string;\n side: string;\n type: string;\n trigger_price: string;\n price?: string;\n reduce_only: boolean;\n } = {\n symbol: symbol.toUpperCase(),\n algo_type: 'TAKE_PROFIT',\n side: oppositeSide,\n type: tpPrice ? 'LIMIT' : 'MARKET',\n trigger_price: tpTriggerPrice,\n reduce_only: true,\n };\n if (tpPrice) tpOrder.price = tpPrice;\n tpslChildOrders.push(tpOrder);\n }\n\n if (slTriggerPrice) {\n const slOrder: {\n symbol: string;\n algo_type: string;\n side: string;\n type: string;\n trigger_price: string;\n price?: string;\n reduce_only: boolean;\n } = {\n symbol: symbol.toUpperCase(),\n algo_type: 'STOP_LOSS',\n side: oppositeSide,\n type: slPrice ? 'LIMIT' : 'MARKET',\n trigger_price: slTriggerPrice,\n reduce_only: true,\n };\n if (slPrice) slOrder.price = slPrice;\n tpslChildOrders.push(slOrder);\n }\n\n const orderPayload: {\n symbol: string;\n type: string;\n algoType: string;\n side: string;\n quantity: string;\n triggerPrice: string;\n price?: string;\n clientOrderId?: string;\n childOrders: Array<{\n symbol: string;\n algo_type: string;\n quantity: string;\n child_orders: Array<{\n symbol: string;\n algo_type: string;\n side: string;\n type: string;\n trigger_price: string;\n price?: string;\n reduce_only: boolean;\n }>;\n }>;\n } = {\n symbol: symbol.toUpperCase(),\n type: price ? 'LIMIT' : 'MARKET',\n algoType: validAlgoType,\n side: validSide,\n quantity,\n triggerPrice: triggerPrice!,\n childOrders: [\n {\n symbol: symbol.toUpperCase(),\n algo_type: 'TP_SL',\n quantity,\n child_orders: tpslChildOrders,\n },\n ],\n };\n\n if (price) {\n orderPayload.price = price;\n }\n if (clientOrderId) {\n orderPayload.clientOrderId = clientOrderId;\n }\n\n result = await client.placeAlgoOrder(orderPayload);\n } else {\n const orderPayload: {\n symbol: string;\n type: string;\n algoType: string;\n side: string;\n quantity: string;\n triggerPrice?: string;\n price?: string;\n callbackRate?: string;\n reduceOnly?: boolean;\n clientOrderId?: string;\n } = {\n symbol: symbol.toUpperCase(),\n type: price ? 'LIMIT' : 'MARKET',\n algoType: validAlgoType,\n side: validSide,\n quantity,\n };\n\n if (triggerPrice) {\n orderPayload.triggerPrice = triggerPrice;\n }\n if (price) {\n orderPayload.price = price;\n }\n if (callbackRate) {\n orderPayload.callbackRate = callbackRate;\n }\n if (reduceOnly) {\n orderPayload.reduceOnly = true;\n }\n if (clientOrderId) {\n orderPayload.clientOrderId = clientOrderId;\n }\n\n result = await client.placeAlgoOrder(orderPayload);\n }\n\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nfunction isAlreadyCompleteError(err: unknown): boolean {\n if (!axios.isAxiosError(err)) {\n return false;\n }\n const data = err.response?.data as Record<string, unknown> | undefined;\n const message = String(data?.message || '');\n return message.toLowerCase().includes('already complete');\n}\n\nasync function checkIsBracketRoot(\n client: {\n findAlgoOrderById: (id: string) => Promise<{\n success: boolean;\n data?: { algo_type: string; symbol: string };\n }>;\n },\n orderId: string\n): Promise<boolean> {\n try {\n const orderRes = await client.findAlgoOrderById(orderId);\n return orderRes.success && orderRes.data?.algo_type === 'BRACKET';\n } catch {\n return false;\n }\n}\n\nexport async function cancelAlgoOrder(\n orderId: string,\n symbol: string | undefined,\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n let orderSymbol = symbol;\n if (!orderSymbol) {\n try {\n const orderRes = await client.findAlgoOrderById(orderId);\n if (!orderRes.success || !orderRes.data) {\n error(`Algo order ${orderId} not found.`);\n }\n orderSymbol = orderRes.data.symbol;\n } catch (err) {\n handleError(err);\n }\n }\n\n try {\n const result = await client.cancelAlgoOrder(orderId, orderSymbol!);\n output(result, format);\n } catch (err) {\n if (isAlreadyCompleteError(err)) {\n const isBracket = await checkIsBracketRoot(client, orderId);\n if (isBracket) {\n error(`BRACKET root order ${orderId} has already triggered and cannot be cancelled.`, [\n 'BRACKET orders spawn TP/SL child orders once triggered.',\n 'Use `orderly algo-order-list` to find and cancel active child orders.',\n 'Or use `orderly algo-order-cancel-all` to cancel all open algo orders.',\n ]);\n }\n }\n handleError(err);\n }\n}\n\nexport async function cancelAllAlgoOrders(\n symbol: string | undefined,\n algoType: string | undefined,\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const result = await client.cancelAllAlgoOrders(symbol, algoType);\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function editAlgoOrder(\n orderId: string,\n symbol: string | undefined,\n price: string | undefined,\n quantity: string | undefined,\n triggerPrice: string | undefined,\n callbackRate: string | undefined,\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n if (!price && !quantity && !triggerPrice && !callbackRate) {\n error('At least one of --price, --quantity, --trigger-price, or --callback-rate is required.', [\n 'Examples:',\n ' orderly algo-order-edit 123456 --price 2500',\n ' orderly algo-order-edit 123456 --quantity 0.02',\n ' orderly algo-order-edit 123456 --trigger-price 1500',\n ' orderly algo-order-edit 123456 --callback-rate 0.03',\n ]);\n }\n\n const { client } = await createAuthenticatedClient(accountId, network);\n\n let orderSymbol = symbol;\n if (!orderSymbol) {\n try {\n const orderRes = await client.findAlgoOrderById(orderId);\n if (!orderRes.success || !orderRes.data) {\n error(`Algo order ${orderId} not found.`);\n }\n orderSymbol = orderRes.data.symbol;\n } catch (err) {\n handleError(err);\n }\n }\n\n try {\n const updates: {\n price?: number;\n quantity?: number;\n trigger_price?: number;\n callback_rate?: number;\n } = {};\n if (price) updates.price = Number(price);\n if (quantity) updates.quantity = Number(quantity);\n if (triggerPrice) updates.trigger_price = Number(triggerPrice);\n if (callbackRate) {\n const rate = Number(callbackRate);\n if (rate >= 1) {\n callbackRate = String(rate / 100);\n }\n const normalizedRate = Number(callbackRate);\n if (normalizedRate < 0.01 || normalizedRate > 0.15) {\n error(\n `Callback rate must be between 1% and 15%. Got ${rate}${rate >= 1 ? '%' : ` (${(normalizedRate * 100).toFixed(2)}%)`}.`,\n [\n 'Use percentage format: --callback-rate 5 (for 5%)',\n 'Or decimal format: --callback-rate 0.05 (for 5%)',\n ]\n );\n }\n updates.callback_rate = Number(callbackRate);\n }\n\n const result = await client.editAlgoOrder(orderId, updates, orderSymbol!);\n output(result, format);\n } catch (err) {\n if (isAlreadyCompleteError(err)) {\n const isBracket = await checkIsBracketRoot(client, orderId);\n if (isBracket) {\n error(`BRACKET root order ${orderId} has already triggered and cannot be edited.`, [\n 'BRACKET orders spawn TP/SL child orders once triggered.',\n 'Use `orderly algo-order-list` to find and edit active child orders.',\n ]);\n }\n }\n handleError(err);\n }\n}\n\nexport async function listAlgoOrders(\n symbol: string | undefined,\n status: string | undefined,\n page: number | undefined,\n size: number | undefined,\n algoType: string | undefined,\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const result = await client.getAlgoOrders(symbol, status, page, size, algoType);\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function getAlgoOrder(\n orderId: string,\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const result = await client.findAlgoOrderById(orderId);\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function cancelAlgoOrderByClientId(\n clientOrderId: string,\n symbol: string,\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const result = await client.cancelAlgoOrderByClientId(clientOrderId, symbol);\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function algoOrderTrades(\n orderId: string,\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const result = await client.getAlgoOrderTrades(orderId);\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n", "import { createAuthenticatedClient } from '../lib/account-select.js';\nimport { output, handleError, OutputFormat } from '../lib/output.js';\nimport { Network } from '../types.js';\n\nexport async function fundingHistory(\n symbol: string | undefined,\n startT: number | undefined,\n endT: number | undefined,\n page: number | undefined,\n size: number | undefined,\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const params = new URLSearchParams();\n if (symbol) params.append('symbol', symbol.toUpperCase());\n if (startT) params.append('start_t', startT.toString());\n if (endT) params.append('end_t', endT.toString());\n params.append('page', (page ?? 1).toString());\n params.append('size', (size ?? 25).toString());\n\n const queryString = params.toString();\n const result = await client.get(`/v1/funding_fee/history?${queryString}`);\n output(result, format);\n } catch (err) {\n handleError(err);\n }\n}\n", "import { createAuthenticatedClient } from '../lib/account-select.js';\nimport { output, handleError, OutputFormat } from '../lib/output.js';\nimport { Network } from '../types.js';\n\nexport async function info(\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const data = await client.getReferralInfo();\n output(data, format);\n } catch (err) {\n handleError(err);\n }\n}\n", "import { createAuthenticatedClient } from '../lib/account-select.js';\nimport { output, handleError, OutputFormat } from '../lib/output.js';\nimport { Network } from '../types.js';\n\nexport async function distributionHistory(\n status: string | undefined,\n type: string | undefined,\n startT: number | undefined,\n endT: number | undefined,\n page: number | undefined,\n size: number | undefined,\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const data = await client.getDistributionHistory(status, type, startT, endT, page, size);\n output(data, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function volumeStats(\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const data = await client.getVolumeStats();\n output(data, format);\n } catch (err) {\n handleError(err);\n }\n}\n", "import { createAuthenticatedClient } from '../lib/account-select.js';\nimport { output, handleError, OutputFormat } from '../lib/output.js';\nimport { Network } from '../types.js';\n\nexport async function inbox(\n type: string | undefined,\n page: number | undefined,\n size: number | undefined,\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const data = await client.getNotificationInbox(type, page, size);\n output(data, format);\n } catch (err) {\n handleError(err);\n }\n}\n\nexport async function inboxUnread(\n accountId: string | undefined,\n network: Network,\n format: OutputFormat = 'json'\n): Promise<void> {\n const { client } = await createAuthenticatedClient(accountId, network);\n\n try {\n const data = await client.getNotificationInboxUnread();\n output(data, format);\n } catch (err) {\n handleError(err);\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["output_exports", "__export", "error", "handleError", "isPrettyJson", "normalizeOptionalSymbol", "normalizeSymbol", "output", "kleur", "axios", "unwrapResponse", "response", "api", "flattenObject", "obj", "prefix", "schemaHints", "result", "key", "value", "newKey", "childKeys", "ck", "item", "objIdx", "i", "extractRows", "data", "record", "knownKeys", "keys", "arrayKeys", "k", "collectObjectSchema", "schema", "val", "fullKey", "nested", "nk", "nv", "existing", "merged", "objectItems", "mergedChildKeys", "indexedKey", "toCSV", "rows", "itemSchema", "allKeys", "flatRows", "flat", "lines", "values", "escapeCsvValue", "format", "unwrapped", "csv", "symbol", "s", "SYMBOL_PATTERN", "message", "hints", "hint", "err", "status", "rawData", "code", "parts", "init_output", "__esmMin", "cac", "kleur", "readFileSync", "fileURLToPath", "dirname", "join", "kleur", "prompts", "ed25519", "randomBytes", "bs58", "generateKeyPair", "privateKey", "publicKey", "privateKeyFromBase64", "base64Key", "publicKeyFromPrivateKey", "privateKeyBase64", "sign", "message", "messageBytes", "signature", "base64ToBase58", "base64Key", "bytes", "bs58", "base58ToBase64", "base58Key", "getPublicKeyBase58", "publicKeyBase64", "keytar", "SERVICE_NAME", "SERVICE_NAME_WALLET", "makeKey", "accountId", "network", "makeWalletKey", "address", "storeKey", "keyPair", "getKey", "data", "deleteKey", "listKeys", "cred", "storeWalletKey", "address", "network", "walletKeyPair", "keytar", "SERVICE_NAME_WALLET", "makeWalletKey", "getWalletKey", "data", "deleteWalletKey", "listWalletKeys", "cred", "walletKey", "hasWalletKey", "fs", "path", "os", "ORDERLY_APP_ID", "NETWORK_URLS", "DEFAULT_CONFIG", "CONFIG_DIR", "CONFIG_FILE", "getConfigPath", "path", "os", "getConfigDir", "loadConfig", "configPath", "fs", "DEFAULT_CONFIG", "data", "saveConfig", "config", "configDir", "getApiBaseUrl", "network", "NETWORK_URLS", "getWsBaseUrl", "getDefaultNetwork", "setDefaultNetwork", "prompts", "init_output", "axios", "OrderlyClient", "network", "getDefaultNetwork", "axios", "getApiBaseUrl", "keyPair", "method", "path", "body", "timestamp", "ts", "message", "signature", "sign", "getPublicKeyBase58", "config", "requiresAuth", "headers", "authHeaders", "requestConfig", "data", "accountId", "result", "symbol", "status", "side", "orderType", "sortBy", "page", "size", "params", "queryString", "orderId", "order", "updates", "orders", "orderIds", "clientOrderIds", "partialQuantity", "positionResponse", "position_qty", "absQty", "quantity", "limit", "userAddress", "brokerId", "chainId", "isSolana", "faucetBaseUrl", "address", "chainType", "leverage", "startT", "endT", "clientOrderId", "algoType", "type", "resolveAccountId", "accountId", "network", "filteredKeys", "listKeys", "k", "error", "prompts", "resolveKeyPair", "accId", "keyPair", "getKey", "createAuthenticatedClient", "client", "OrderlyClient", "init_output", "normalizeEd25519PrivateKey", "key", "k", "base58ToBase64", "importKey", "privateKey", "accountId", "network", "kleur", "accId", "error", "response", "prompts", "value", "normalizedKey", "publicKey", "publicKeyFromPrivateKey", "keyPair", "storeKey", "err", "setDefaultNetwork", "getWalletType", "list", "format", "idsOnly", "keys", "listKeys", "filteredKeys", "result", "base64ToBase58", "output", "logout", "force", "deleted", "deleteKey", "show", "resolveAccountId", "getKey", "cleanup", "removed", "exportKey", "resolveKeyPair", "init_output", "unwrap", "data", "obj", "extractFlatFields", "info", "flat", "key", "value", "limitsToRows", "imrFactor", "maxNotional", "symbols", "rows", "sym", "accountId", "network", "format", "client", "createAuthenticatedClient", "raw", "output", "err", "handleError", "limits", "symbol", "symbolData", "resp", "error", "balance", "statistics", "keyInfo", "extractFeeTier", "feeTier", "liquidations", "page", "size", "result", "existsSync", "readFileSync", "init_output", "VALID_ORDER_TYPES", "PRICE_REQUIRED_TYPES", "place", "symbol", "side", "type", "quantity", "price", "clientOrderId", "reduceOnly", "accountId", "network", "format", "validSide", "error", "validType", "numQty", "client", "createAuthenticatedClient", "orderPayload", "result", "output", "err", "handleError", "cancel", "orderId", "orderSymbol", "orderRes", "edit", "orderType", "orderSide", "existingPrice", "existingQuantity", "existingVisibleQty", "existingClientOrderId", "d", "numPrice", "updates", "cancelAll", "listOrders", "status", "sortBy", "page", "size", "normalizeBatchOrder", "order", "index", "idx", "rawType", "upperType", "rawQty", "qtyStr", "rawPrice", "rawClientId", "normalizeSymbol", "batchPlace", "ordersInput", "rawOrders", "existsSync", "content", "readFileSync", "normalizedOrders", "i", "batchCancel", "orderIds", "batchCancelByClientId", "clientOrderIds", "cancelByClientId", "getOrder", "resolvedClientOrderId", "resolvedOrderId", "orderTrades", "init_output", "listPositions", "accountId", "network", "format", "client", "createAuthenticatedClient", "result", "output", "err", "handleError", "closePosition", "symbol", "quantity", "positionHistory", "startT", "endT", "page", "size", "axios", "fetchWsSnapshot", "symbol", "topic", "network", "timeout", "url", "getWsBaseUrl", "resolve", "settled", "ws", "done", "result", "timer", "event", "msg", "init_output", "VALID_KLINE_TYPES", "validateSymbol", "client", "symbol", "result", "error", "filterRows", "data", "rows", "r", "KLINE_TO_TV", "TV_RESOLUTION_SECONDS", "getPrice", "network", "format", "OrderlyClient", "output", "err", "handleError", "getKline", "type", "limit", "validType", "tvResolution", "resolutionSeconds", "count", "to", "from", "baseUrl", "getApiBaseUrl", "axios", "startTs", "i", "getOrderbook", "depth", "upper", "priceCheck", "fetchWsSnapshot", "asks", "price", "quantity", "bids", "a", "b", "getSymbols", "showInfo", "getMarketTrades", "getFundingRates", "getPriceChanges", "getOpenInterest", "getLiquidatedPositions", "page", "size", "getSystemStatus", "init_output", "faucetUsdc", "address", "chainId", "network", "format", "brokerId", "error", "result", "OrderlyClient", "output", "err", "handleError", "kleur", "prompts", "Wallet", "TypedDataEncoder", "HDNodeWallet", "EIP712_DOMAIN", "CHAIN_IDS", "getDomain", "network", "createWalletFromPrivateKey", "privateKey", "wallet", "domain", "types", "value", "isValidEVMAddress", "address", "isValidPrivateKey", "key", "hex", "normalizePrivateKey", "REGISTRATION_TYPES", "ADD_KEY_TYPES", "signRegistration", "message", "signAddKey", "generateEVMWallet", "wallet", "HDNodeWallet", "WITHDRAW_TYPES", "VERIFYING_CONTRACTS", "signWithdraw", "message", "network", "domain", "SETTLE_PNL_TYPES", "signSettlePnl", "bs58", "ed25519", "randomBytes", "AbiCoder", "solidityPackedKeccak256", "keccak256", "getBytes", "SOLANA_CHAIN_IDS", "getSolanaChainId", "network", "createSolanaWalletFromPrivateKey", "privateKey", "_network", "keyBytes", "nums", "n", "hex", "i", "publicKey", "isValidSolanaAddress", "address", "bytesToHex", "bytes", "b", "signRegistration", "wallet", "params", "chainId", "message", "brokerIdHash", "encodedData", "msgToSignHex", "msgToSignTextEncoded", "signatureBytes", "signature", "signAddKey", "orderlyKeyHash", "scopeHash", "generateSolanaWallet", "privateKeyBase58", "signWithdraw", "timestamp", "tokenSymbolHash", "salt", "receiverBytes", "signSettlePnl", "init_output", "VALID_WALLET_TYPES", "walletCreate", "walletType", "network", "nonInteractive", "kleur", "type", "error", "response", "prompts", "address", "privateKey", "wallet", "generateEVMWallet", "generateSolanaWallet", "walletKeyPair", "storeWalletKey", "output", "walletImport", "addr", "key", "value", "isValidPrivateKey", "walletAddress", "createWalletFromPrivateKey", "normalizePrivateKey", "createSolanaWalletFromPrivateKey", "err", "hasWalletKey", "walletList", "format", "wallets", "listWalletKeys", "filteredWallets", "w", "result", "walletShow", "getWalletKey", "walletLogout", "deleteWalletKey", "deleted", "walletRegister", "brokerId", "bId", "walletKey", "client", "OrderlyClient", "existingAccount", "accountId", "nonceResponse", "nonce", "timestamp", "message", "signature", "evmMessage", "signRegistration", "handleError", "walletAddKey", "scope", "hints", "resolvedBrokerId", "accountInfo", "matchingKey", "listKeys", "k", "VALID_SCOPES", "keyScope", "parts", "s", "invalid", "ed25519KeyPair", "generateKeyPair", "orderlyKey", "getPublicKeyBase58", "expiration", "chainId", "getSolanaChainId", "signAddKey", "keyPair", "storeKey", "setDefaultNetwork", "apiMsg", "hint", "parseUnits", "init_output", "axios", "VERIFYING_CONTRACTS", "chainCache", "tokenCache", "fetchChainInfo", "network", "baseUrl", "getApiBaseUrl", "response", "axios", "rows", "fetchTokenInfo", "getChainInfo", "chainId", "c", "getTokenAddress", "token", "chainId", "network", "tokenInfo", "fetchTokenInfo", "t", "c", "isSupportedChain", "chainId", "network", "getChainInfo", "getWithdrawalFee", "token", "tokenInfo", "fetchTokenInfo", "t", "chainDetail", "c", "getVerifyingContract", "VERIFYING_CONTRACTS", "init_output", "VERIFYING_CONTRACTS", "performSettlePnl", "client", "keyPair", "network", "brokerId", "nonceResponse", "settleNonce", "walletKey", "getWalletKey", "walletType", "chainId", "getSolanaChainId", "signature", "message", "timestamp", "solanaWallet", "createSolanaWalletFromPrivateKey", "result", "signSettlePnl", "settleMessage", "evmWallet", "createWalletFromPrivateKey", "msg", "hasNegativeUnsettledPnl", "rows", "row", "settlePnl", "accountId", "format", "createAuthenticatedClient", "output", "error", "err", "handleError", "settlePnlHistory", "page", "size", "getChains", "network", "format", "brokerId", "verbose", "client", "OrderlyClient", "result", "chain", "_broker_ids", "rest", "output", "err", "handleError", "getTokens", "_chain_details", "depositInfo", "token", "chainId", "isSupportedChain", "error", "chainVault", "getChainInfo", "tokenAddress", "getTokenAddress", "vault_address", "chainRest", "withdraw", "amount", "receiver", "accountId", "rawAmount", "allowCrossChain", "keyPair", "createAuthenticatedClient", "rawAmountValue", "tokensResponse", "tokenInfo", "t", "decimals", "c", "parseUnits", "feeInfo", "getWithdrawalFee", "fee", "settledPnlId", "hasNegativeUnsettledPnl", "settleResult", "performSettlePnl", "nonceResponse", "withdrawNonce", "timestamp", "timestampStr", "walletKey", "getWalletKey", "resolvedReceiver", "walletType", "isValidEVMAddress", "isValidSolanaAddress", "signature", "message", "solanaWallet", "createSolanaWalletFromPrivateKey", "withdrawResult", "signWithdraw", "evmWallet", "createWalletFromPrivateKey", "withdrawMessage", "requestBody", "getVerifyingContract", "out", "apiMsg", "hints", "assetHistory", "side", "status", "page", "size", "params", "init_output", "getOrSetLeverage", "symbol", "leverage", "accountId", "network", "format", "client", "createAuthenticatedClient", "result", "output", "err", "handleError", "init_output", "listTrades", "symbol", "startT", "endT", "page", "size", "accountId", "network", "format", "client", "createAuthenticatedClient", "result", "output", "err", "handleError", "axios", "init_output", "VALID_ALGO_TYPES", "VALID_SIDES", "placeAlgoOrder", "symbol", "side", "algoType", "quantity", "triggerPrice", "callbackRate", "price", "tpTriggerPrice", "tpPrice", "slTriggerPrice", "slPrice", "reduceOnly", "clientOrderId", "accountId", "network", "format", "validSide", "error", "validAlgoType", "rate", "normalizedRate", "client", "createAuthenticatedClient", "markPrice", "raw", "tp", "sl", "result", "childOrders", "closeSide", "tpOrder", "slOrder", "oppositeSide", "tpslChildOrders", "orderPayload", "output", "err", "handleError", "isAlreadyCompleteError", "axios", "data", "checkIsBracketRoot", "orderId", "orderRes", "cancelAlgoOrder", "orderSymbol", "cancelAllAlgoOrders", "editAlgoOrder", "updates", "listAlgoOrders", "status", "page", "size", "getAlgoOrder", "cancelAlgoOrderByClientId", "algoOrderTrades", "init_output", "fundingHistory", "symbol", "startT", "endT", "page", "size", "accountId", "network", "format", "client", "createAuthenticatedClient", "params", "queryString", "result", "output", "err", "handleError", "init_output", "info", "accountId", "network", "format", "client", "createAuthenticatedClient", "data", "output", "err", "handleError", "init_output", "distributionHistory", "status", "type", "startT", "endT", "page", "size", "accountId", "network", "format", "client", "createAuthenticatedClient", "data", "output", "err", "handleError", "volumeStats", "init_output", "inbox", "type", "page", "size", "accountId", "network", "format", "client", "createAuthenticatedClient", "data", "output", "err", "handleError", "inboxUnread", "init_output", "__dirname", "dirname", "fileURLToPath", "getVersion", "readFileSync", "join", "findRawOption", "optionName", "hexOnly", "i", "val", "pattern", "eqMatch", "normalizeHexInput", "value", "label", "example", "str", "raw", "error", "normalizeAddress", "address", "requireAddress", "normalized", "normalizeAccountId", "accountId", "normalizeScope", "scope", "QUICK_START", "kleur", "DESCRIPTION", "cli", "cac", "firstArg", "hasSubcommand", "getDefaultNetwork", "getFormat", "options", "network", "walletCreate", "privateKey", "walletImport", "walletList", "walletShow", "walletLogout", "walletRegister", "walletAddKey", "importKey", "list", "show", "logout", "cleanup", "exportKey", "info", "balance", "statistics", "sym", "normalizeOptionalSymbol", "limits", "keyInfo", "feeTier", "page", "size", "liquidations", "symbol", "side", "type", "quantity", "resolvedSide", "resolvedType", "resolvedQuantity", "place", "normalizeSymbol", "orderId", "cancel", "edit", "cancelAll", "status", "listOrders", "orders", "batchPlace", "orderIds", "ids", "batchCancel", "clientOrderIds", "batchCancelByClientId", "getOrder", "clientOrderId", "cancelByClientId", "orderTrades", "listPositions", "closePosition", "depth", "getOrderbook", "startT", "endT", "positionHistory", "leverageValue", "getOrSetLeverage", "listTrades", "algoType", "placeAlgoOrder", "cancelAlgoOrder", "editAlgoOrder", "cancelAllAlgoOrders", "listAlgoOrders", "algoOrderTrades", "getAlgoOrder", "cancelAlgoOrderByClientId", "fundingHistory", "settlePnl", "settlePnlHistory", "distributionHistory", "volumeStats", "inbox", "inboxUnread", "getPrice", "getSymbols", "parsed", "getKline", "getMarketTrades", "getFundingRates", "getPriceChanges", "getOpenInterest", "getLiquidatedPositions", "getSystemStatus", "chainId", "faucetUsdc", "getChains", "getTokens", "token", "format", "depositInfo", "receiver", "idx", "withdraw", "assetHistory", "rawArgs", "commandPart", "c", "outputError", "err", "message", "missingMatch", "commandName", "unknownMatch", "flag", "hints", "matchedCmd", "o", "a"]
|
|
7
|
-
}
|