@drift-labs/common 1.0.45 → 1.0.47

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.
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/drift/cli.ts"],"names":[],"mappings":"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","sourcesContent":["import * as anchor from '@coral-xyz/anchor';\nimport { PublicKey, VersionedTransaction } from '@solana/web3.js';\nimport {\n\tBN,\n\tloadKeypair,\n\tPositionDirection,\n\tOrderType,\n\tPostOnlyParams,\n\tSwapMode,\n\tBASE_PRECISION,\n\tQUOTE_PRECISION,\n\tPRICE_PRECISION,\n\tMainnetSpotMarkets,\n\tDevnetSpotMarkets,\n\tDriftEnv,\n} from '@drift-labs/sdk';\nimport { sign } from 'tweetnacl';\nimport { CentralServerDrift } from './Drift/clients/CentralServerDrift';\nimport { CentralServerSwiftOrderOptions } from './Drift/clients/CentralServerDrift/types';\nimport { ENUM_UTILS } from '../utils';\nimport { API_URLS } from './constants/apiUrls';\nimport * as path from 'path';\nimport {\n\tNonMarketOrderType,\n\tLimitOrderParamsOrderConfig,\n\tNonMarketOrderParamsConfig,\n} from './base/actions/trade/openPerpOrder/types';\n\n// Load environment variables from .env file\nconst dotenv = require('dotenv');\ndotenv.config({ path: path.resolve(__dirname, '.env') });\n\n/**\n * CLI Tool for CentralServerDrift client\n *\n * This CLI tool allows you to execute various Drift protocol operations via command line\n * with human-readable parameters that are automatically converted to the proper precision.\n *\n * Prerequisites:\n * - Create a .env file in the same directory as this CLI file with:\n * ANCHOR_WALLET=[private key byte array]\n * ENDPOINT=https://your-rpc-endpoint.com\n *\n * Usage Examples:\n * ts-node cli.ts deposit --marketIndex=0 --amount=2 --userAccount=11111111111111111111111111111111\n * ts-node cli.ts deposit --marketIndex=0 --amount=2 --userAccount=11111111111111111111111111111111 --fromWallet=22222222222222222222222222222222\n * ts-node cli.ts withdraw --marketIndex=0 --amount=1.5 --userAccount=11111111111111111111111111111111\n * ts-node cli.ts settleFunding --userAccount=11111111111111111111111111111111\n * ts-node cli.ts settlePnl --marketIndexes=0,1 --userAccount=11111111111111111111111111111111\n * ts-node cli.ts openPerpMarketOrder --marketIndex=0 --direction=long --amount=0.1 --assetType=base --userAccount=11111111111111111111111111111111\n * ts-node cli.ts openPerpMarketOrderSwift --marketIndex=0 --direction=short --amount=100 --assetType=quote --userAccount=11111111111111111111111111111111\n * ts-node cli.ts openPerpNonMarketOrder --marketIndex=0 --direction=long --baseAssetAmount=0.1 --orderType=limit --limitPrice=100 --userAccount=11111111111111111111111111111111\n * ts-node cli.ts openPerpNonMarketOrderSwift --marketIndex=0 --direction=long --baseAssetAmount=0.1 --orderType=limit --limitPrice=99.5 --userAccount=11111111111111111111111111111111\n * ts-node cli.ts editOrder --userAccount=11111111111111111111111111111111 --orderId=123 --newLimitPrice=105.5\n * ts-node cli.ts cancelOrder --userAccount=11111111111111111111111111111111 --orderIds=123,456,789\n * ts-node cli.ts cancelAllOrders --userAccount=11111111111111111111111111111111 --marketType=perp\n * ts-node cli.ts swap --userAccount=11111111111111111111111111111111 --fromMarketIndex=1 --toMarketIndex=0 --fromAmount=1.5 --slippage=100 --swapMode=ExactIn\n * ts-node cli.ts swap --userAccount=11111111111111111111111111111111 --fromMarketIndex=1 --toMarketIndex=0 --toAmount=150 --slippage=100 --swapMode=ExactOut\n * ts-node cli.ts createUserAndDeposit --marketIndex=0 --amount=100 --accountName=\"Primary\"\n * ts-node cli.ts createUserAndDeposit --marketIndex=0 --amount=100 --fromWallet=22222222222222222222222222222222 --forAuthority=33333333333333333333333333333333\n */\n\n// Shared configuration\nlet centralServerDrift: CentralServerDrift;\nlet wallet: anchor.Wallet;\n\ninterface CliArgs {\n\t[key: string]: string | string[];\n}\n\n/**\n * Parse command line arguments into a key-value object\n */\nfunction parseArgs(args: string[]): CliArgs {\n\tconst parsed: CliArgs = {};\n\n\tfor (let i = 0; i < args.length; i++) {\n\t\tconst arg = args[i];\n\t\tif (arg.startsWith('--')) {\n\t\t\tconst [key, value] = arg.substring(2).split('=');\n\t\t\tif (value !== undefined) {\n\t\t\t\t// Handle comma-separated arrays\n\t\t\t\tif (value.includes(',')) {\n\t\t\t\t\tparsed[key] = value.split(',');\n\t\t\t\t} else {\n\t\t\t\t\tparsed[key] = value;\n\t\t\t\t}\n\t\t\t} else if (i + 1 < args.length && !args[i + 1].startsWith('--')) {\n\t\t\t\t// Handle space-separated values\n\t\t\t\tconst nextValue = args[i + 1];\n\t\t\t\tif (nextValue.includes(',')) {\n\t\t\t\t\tparsed[key] = nextValue.split(',');\n\t\t\t\t} else {\n\t\t\t\t\tparsed[key] = nextValue;\n\t\t\t\t}\n\t\t\t\ti++; // Skip the next argument as it's the value\n\t\t\t} else {\n\t\t\t\tparsed[key] = 'true'; // Boolean flag\n\t\t\t}\n\t\t}\n\t}\n\n\treturn parsed;\n}\n\n/**\n * Convert human-readable amount to BN with proper precision\n */\nfunction parseAmount(amount: string, precision: BN = QUOTE_PRECISION): BN {\n\tconst floatAmount = parseFloat(amount);\n\tif (isNaN(floatAmount)) {\n\t\tthrow new Error(`Invalid amount: ${amount}`);\n\t}\n\n\t// Convert to the proper precision\n\tconst scaledAmount = Math.floor(floatAmount * precision.toNumber());\n\treturn new BN(scaledAmount);\n}\n\n/**\n * Parse direction string to PositionDirection\n */\nfunction parseDirection(direction: string): PositionDirection {\n\tconst normalized = direction.toLowerCase();\n\tif (normalized === 'long' || normalized === 'buy') {\n\t\treturn PositionDirection.LONG;\n\t} else if (normalized === 'short' || normalized === 'sell') {\n\t\treturn PositionDirection.SHORT;\n\t} else {\n\t\tthrow new Error(\n\t\t\t`Invalid direction: ${direction}. Use 'long', 'short', 'buy', or 'sell'`\n\t\t);\n\t}\n}\n\n/**\n * Parse order type string to OrderType\n */\nfunction _parseOrderType(orderType: string): OrderType {\n\tconst normalized = orderType.toLowerCase();\n\tswitch (normalized) {\n\t\tcase 'limit':\n\t\t\treturn OrderType.LIMIT;\n\t\tcase 'market':\n\t\t\treturn OrderType.MARKET;\n\t\tcase 'oracle':\n\t\t\treturn OrderType.ORACLE;\n\t\tcase 'trigger_market':\n\t\tcase 'stopmarket':\n\t\t\treturn OrderType.TRIGGER_MARKET;\n\t\tcase 'trigger_limit':\n\t\tcase 'stoplimit':\n\t\t\treturn OrderType.TRIGGER_LIMIT;\n\t\tdefault:\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid order type: ${orderType}. Use 'limit', 'market', 'oracle', 'trigger_market', or 'trigger_limit'`\n\t\t\t);\n\t}\n}\n\n/**\n * Parse post only string to PostOnlyParams\n */\nfunction parsePostOnly(postOnly: string): PostOnlyParams {\n\tconst normalized = postOnly.toLowerCase();\n\tswitch (normalized) {\n\t\tcase 'none':\n\t\tcase 'false':\n\t\t\treturn PostOnlyParams.NONE;\n\t\tcase 'must_post_only':\n\t\tcase 'true':\n\t\t\treturn PostOnlyParams.MUST_POST_ONLY;\n\t\tcase 'try_post_only':\n\t\t\treturn PostOnlyParams.TRY_POST_ONLY;\n\t\tcase 'slide':\n\t\t\treturn PostOnlyParams.SLIDE;\n\t\tdefault:\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid post only: ${postOnly}. Use 'none', 'must_post_only', 'try_post_only', or 'slide'`\n\t\t\t);\n\t}\n}\n\n/**\n * Parse swap mode string to SwapMode\n */\nfunction parseSwapMode(swapMode: string): SwapMode {\n\tconst normalized = swapMode.toLowerCase();\n\tswitch (normalized) {\n\t\tcase 'exactin':\n\t\tcase 'exact_in':\n\t\t\treturn 'ExactIn';\n\t\tcase 'exactout':\n\t\tcase 'exact_out':\n\t\t\treturn 'ExactOut';\n\t\tdefault:\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid swap mode: ${swapMode}. Use 'ExactIn' or 'ExactOut'`\n\t\t\t);\n\t}\n}\n\n/**\n * Get the precision for a spot market based on environment and market index\n */\nfunction getMarketPrecision(\n\tmarketIndex: number,\n\tisMainnet: boolean = true\n): BN {\n\tconst markets = isMainnet ? MainnetSpotMarkets : DevnetSpotMarkets;\n\tconst market = markets.find((m) => m.marketIndex === marketIndex);\n\n\tif (!market) {\n\t\tconsole.warn(\n\t\t\t`⚠️ Market ${marketIndex} not found, using QUOTE_PRECISION as fallback`\n\t\t);\n\t\treturn QUOTE_PRECISION;\n\t}\n\n\treturn market.precision;\n}\n\n/**\n * Initialize CentralServerDrift instance\n */\nasync function initializeCentralServerDrift(): Promise<void> {\n\tconsole.log('🚀 Initializing CentralServerDrift...\\n');\n\n\t// Validate required environment variables\n\tif (!process.env.ANCHOR_WALLET) {\n\t\tthrow new Error('ANCHOR_WALLET must be set in .env file');\n\t}\n\n\tif (!process.env.ENDPOINT) {\n\t\tthrow new Error(\n\t\t\t'ENDPOINT environment variable must be set to your Solana RPC endpoint'\n\t\t);\n\t}\n\n\t// Set up the wallet\n\twallet = new anchor.Wallet(loadKeypair(process.env.ANCHOR_WALLET as string));\n\n\tconsole.log(`✅ Wallet Public Key: ${wallet.publicKey.toString()}`);\n\tconsole.log(`✅ RPC Endpoint: ${process.env.ENDPOINT}\\n`);\n\n\t// Initialize CentralServerDrift\n\tconst driftEnv = (process.env.DRIFT_ENV as DriftEnv) ?? 'devnet';\n\tconsole.log(`🏗️ Initializing CentralServerDrift... (${driftEnv})`);\n\tconst rpcEndpoint = process.env.ENDPOINT as string;\n\tcentralServerDrift = new CentralServerDrift({\n\t\tsolanaRpcEndpoint: rpcEndpoint,\n\t\tdriftEnv,\n\t\tsupportedPerpMarkets: [0, 1, 2], // SOL, BTC, ETH\n\t\tsupportedSpotMarkets: [0, 1], // USDC, SOL\n\t\tadditionalDriftClientConfig: {\n\t\t\ttxVersion: 0,\n\t\t\ttxParams: {\n\t\t\t\tcomputeUnits: 200000,\n\t\t\t\tcomputeUnitsPrice: 1000,\n\t\t\t},\n\t\t},\n\t});\n\n\tconsole.log('✅ CentralServerDrift instance created successfully\\n');\n\n\t// Subscribe to market data\n\tconsole.log('📡 Subscribing to market data...');\n\tawait centralServerDrift.subscribe();\n\tconsole.log('✅ Successfully subscribed to market data\\n');\n}\n\n/**\n * Execute a regular transaction\n */\nasync function executeTransaction(\n\ttxn: VersionedTransaction,\n\ttransactionType: string\n): Promise<void> {\n\tconsole.log(`✅ ${transactionType} transaction created successfully`);\n\tconsole.log('\\n📝 Signing Transaction...');\n\n\ttxn.sign([wallet.payer]);\n\tconsole.log('✅ Transaction signed successfully');\n\n\tconsole.log('\\n🚀 Sending transaction to the network...');\n\tconst { txSig } = await centralServerDrift.sendSignedTransaction(txn);\n\n\tconsole.log('✅ Transaction sent successfully!');\n\tconsole.log(`📋 Transaction Signature: ${txSig?.toString()}`);\n\tconsole.log(`🔍 View on Solscan: https://solscan.io/tx/${txSig?.toString()}`);\n}\n\nconst createSwiftOrderCallbacks = (\n\torderType: string\n): CentralServerSwiftOrderOptions['callbacks'] => {\n\tconst terminalCall = () => {\n\t\tconsole.log('🏁 Order monitoring completed');\n\t};\n\n\treturn {\n\t\tonSigningExpiry: () => {\n\t\t\tconsole.log('Swift order signing expired');\n\t\t},\n\t\tonSigningSuccess: (signedMessage, orderUuid, orderParamsMessage) => {\n\t\t\tconsole.log(\n\t\t\t\t'Swift order signed successfully. Signed message:',\n\t\t\t\tsignedMessage,\n\t\t\t\torderUuid,\n\t\t\t\torderParamsMessage\n\t\t\t);\n\t\t},\n\t\tonSent: () => {\n\t\t\tconsole.log(`✅ ${orderType} Swift order submitted successfully`);\n\t\t},\n\t\tonConfirmed: (event) => {\n\t\t\tconsole.log('✅ Order confirmed!');\n\t\t\tconsole.log(`📋 Order ID: ${event.orderId}`);\n\t\t\tconsole.log(`📋 Hash: ${event.hash}`);\n\t\t\tterminalCall();\n\t\t},\n\t\tonExpired: (event) => {\n\t\t\tconsole.error('⏰ Order expired:', event.message);\n\t\t\tterminalCall();\n\t\t},\n\t\tonErrored: (event) => {\n\t\t\tconsole.error('❌ Order failed:', event.message);\n\t\t\tconsole.error(`📋 Status: ${event.status}`);\n\t\t\tterminalCall();\n\t\t},\n\t};\n};\n\n/**\n * CLI Command: deposit\n */\nasync function depositCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndex = parseInt(args.marketIndex as string);\n\tconst amount = args.amount as string;\n\tconst fromWallet = args.fromWallet as string | undefined;\n\n\tif (!userAccount || isNaN(marketIndex) || !amount) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndex, --amount'\n\t\t);\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst amountBN = parseAmount(amount, QUOTE_PRECISION); // Most deposits are USDC (quote precision)\n\n\tconsole.log('--- 📥 Deposit Transaction ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Index: ${marketIndex}`);\n\tconsole.log(`💰 Amount: ${amount} (${amountBN.toString()} raw units)`);\n\n\t// Parse external wallet if provided\n\tconst externalWallet = fromWallet ? new PublicKey(fromWallet) : undefined;\n\tif (externalWallet) {\n\t\tconsole.log(`💼 From External Wallet: ${externalWallet.toBase58()}`);\n\t}\n\n\tconst depositTxn = await centralServerDrift.getDepositTxn(\n\t\tuserAccountPubkey,\n\t\tamountBN,\n\t\tmarketIndex,\n\t\t{\n\t\t\texternalWallet,\n\t\t}\n\t);\n\n\tawait executeTransaction(depositTxn as VersionedTransaction, 'Deposit');\n}\n\n/**\n * CLI Command: createUserAndDeposit\n */\nasync function createUserAndDepositCommand(args: CliArgs): Promise<void> {\n\tconst marketIndexArg = args.marketIndex as string;\n\tconst amountArg = args.amount as string;\n\tconst referrerName = args.referrerName as string | undefined;\n\tconst accountName = args.accountName as string | undefined;\n\tconst poolIdArg = args.poolId as string | undefined;\n\tconst fromSubAccountIdArg = args.fromSubAccountId as string | undefined;\n\tconst customMaxMarginRatioArg = args.customMaxMarginRatio as\n\t\t| string\n\t\t| undefined;\n\tconst fromWallet = args.fromWallet as string | undefined;\n\tconst forAuthority = args.forAuthority as string | undefined;\n\n\tif (!marketIndexArg || !amountArg) {\n\t\tthrow new Error('Required arguments: --marketIndex, --amount');\n\t}\n\n\t// If external wallet is provided, authority must also be specified\n\tif (fromWallet && !forAuthority) {\n\t\tthrow new Error(\n\t\t\t'When using --fromWallet, you must also specify --forAuthority (the account owner)'\n\t\t);\n\t}\n\n\tconst marketIndex = parseInt(marketIndexArg, 10);\n\tif (isNaN(marketIndex)) {\n\t\tthrow new Error(`Invalid marketIndex: ${marketIndexArg}`);\n\t}\n\n\tconst precision = getMarketPrecision(marketIndex, true);\n\tconst amountBN = parseAmount(amountArg, precision);\n\n\tconst options: {\n\t\treferrerName?: string;\n\t\taccountName?: string;\n\t\tpoolId?: number;\n\t\tfromSubAccountId?: number;\n\t\tcustomMaxMarginRatio?: number;\n\t\texternalWallet?: PublicKey;\n\t} = {};\n\n\tif (referrerName) {\n\t\toptions.referrerName = referrerName;\n\t}\n\n\tif (accountName) {\n\t\toptions.accountName = accountName;\n\t}\n\n\tif (poolIdArg !== undefined) {\n\t\tconst poolId = parseInt(poolIdArg, 10);\n\t\tif (isNaN(poolId)) {\n\t\t\tthrow new Error(`Invalid poolId: ${poolIdArg}`);\n\t\t}\n\t\toptions.poolId = poolId;\n\t}\n\n\tif (fromSubAccountIdArg !== undefined) {\n\t\tconst fromSubAccountId = parseInt(fromSubAccountIdArg, 10);\n\t\tif (isNaN(fromSubAccountId)) {\n\t\t\tthrow new Error(`Invalid fromSubAccountId: ${fromSubAccountIdArg}`);\n\t\t}\n\t\toptions.fromSubAccountId = fromSubAccountId;\n\t}\n\n\tif (customMaxMarginRatioArg !== undefined) {\n\t\tconst customMaxMarginRatio = parseFloat(customMaxMarginRatioArg);\n\t\tif (isNaN(customMaxMarginRatio)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid customMaxMarginRatio: ${customMaxMarginRatioArg}`\n\t\t\t);\n\t\t}\n\t\toptions.customMaxMarginRatio = customMaxMarginRatio;\n\t}\n\n\t// Parse external wallet and authority if provided\n\tconst externalWallet = fromWallet ? new PublicKey(fromWallet) : undefined;\n\tconst authority = forAuthority\n\t\t? new PublicKey(forAuthority)\n\t\t: wallet.publicKey;\n\tif (externalWallet) {\n\t\toptions.externalWallet = externalWallet;\n\t}\n\n\tconsole.log('--- 🆕 Create User & Deposit Transaction ---');\n\tconsole.log(`🔑 Authority (account owner): ${authority.toString()}`);\n\tconsole.log(`🏪 Spot Market Index: ${marketIndex}`);\n\tconsole.log(\n\t\t`💰 Initial Deposit: ${amountArg} (${amountBN.toString()} raw units)`\n\t);\n\tif (options.accountName) {\n\t\tconsole.log(`📝 Account Name: ${options.accountName}`);\n\t}\n\tif (options.referrerName) {\n\t\tconsole.log(`🙌 Referrer Name: ${options.referrerName}`);\n\t}\n\tif (options.poolId !== undefined) {\n\t\tconsole.log(`🏊 Pool ID: ${options.poolId}`);\n\t}\n\tif (options.fromSubAccountId !== undefined) {\n\t\tconsole.log(`🔁 Funding From Subaccount ID: ${options.fromSubAccountId}`);\n\t}\n\tif (options.customMaxMarginRatio !== undefined) {\n\t\tconsole.log(`📐 Custom Max Margin Ratio: ${options.customMaxMarginRatio}`);\n\t}\n\tif (externalWallet) {\n\t\tconsole.log(`💼 From External Wallet: ${externalWallet.toBase58()}`);\n\t}\n\n\tconst hasOptions = Object.keys(options).length > 0;\n\tconst { transaction, userAccountPublicKey, subAccountId } =\n\t\tawait centralServerDrift.getCreateAndDepositTxn(\n\t\t\tauthority,\n\t\t\tamountBN,\n\t\t\tmarketIndex,\n\t\t\thasOptions ? options : undefined\n\t\t);\n\n\tconsole.log(`🆔 New User Account: ${userAccountPublicKey.toString()}`);\n\tconsole.log(`🧾 Subaccount ID: ${subAccountId}`);\n\n\tawait executeTransaction(\n\t\ttransaction as VersionedTransaction,\n\t\t'Create User & Deposit'\n\t);\n}\n\n/**\n * CLI Command: withdraw\n */\nasync function withdrawCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndex = parseInt(args.marketIndex as string);\n\tconst amount = args.amount as string;\n\tconst isBorrow = args.isBorrow === 'true';\n\tconst isMax = args.isMax === 'true';\n\n\tif (!userAccount || isNaN(marketIndex) || !amount) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndex, --amount'\n\t\t);\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst amountBN = parseAmount(amount, QUOTE_PRECISION);\n\n\tconsole.log('--- 📤 Withdraw Transaction ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Index: ${marketIndex}`);\n\tconsole.log(`💰 Amount: ${amount} (${amountBN.toString()} raw units)`);\n\tconsole.log(`💳 Is Borrow: ${isBorrow}`);\n\tconsole.log(`📊 Is Max: ${isMax}`);\n\n\tconst withdrawTxn = await centralServerDrift.getWithdrawTxn(\n\t\tuserAccountPubkey,\n\t\tamountBN,\n\t\tmarketIndex,\n\t\t{ isBorrow, isMax }\n\t);\n\n\tawait executeTransaction(withdrawTxn as VersionedTransaction, 'Withdraw');\n}\n\n/**\n * CLI Command: settleFunding\n */\nasync function settleFundingCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\n\tif (!userAccount) {\n\t\tthrow new Error('Required arguments: --userAccount');\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\n\tconsole.log('--- 💰 Settle Funding Transaction ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\n\tconst settleFundingTxn = await centralServerDrift.getSettleFundingTxn(\n\t\tuserAccountPubkey\n\t);\n\n\tawait executeTransaction(\n\t\tsettleFundingTxn as VersionedTransaction,\n\t\t'Settle Funding'\n\t);\n}\n\n/**\n * CLI Command: settlePnl\n */\nasync function settlePnlCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndexesArg = args.marketIndexes;\n\n\tif (!userAccount || !marketIndexesArg) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndexes (comma-separated)'\n\t\t);\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst marketIndexes = Array.isArray(marketIndexesArg)\n\t\t? marketIndexesArg.map((idx) => parseInt(idx))\n\t\t: [parseInt(marketIndexesArg as string)];\n\n\tconsole.log('--- 📈 Settle PnL Transaction ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`📊 Market Indexes: ${marketIndexes.join(', ')}`);\n\n\tconst settlePnlTxn = await centralServerDrift.getSettlePnlTxn(\n\t\tuserAccountPubkey,\n\t\tmarketIndexes\n\t);\n\n\tawait executeTransaction(settlePnlTxn as VersionedTransaction, 'Settle PnL');\n}\n\n/**\n * CLI Command: openPerpMarketOrder (regular transaction)\n */\nasync function openPerpMarketOrderCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndex = parseInt(args.marketIndex as string);\n\tconst direction = args.direction as string;\n\tconst amount = args.amount as string;\n\tconst assetType = (args.assetType as string) || 'base';\n\tconst dlobServerHttpUrl = API_URLS.DLOB;\n\n\tif (!userAccount || isNaN(marketIndex) || !direction || !amount) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndex, --direction, --amount'\n\t\t);\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst directionEnum = parseDirection(direction);\n\tconst precision = assetType === 'base' ? BASE_PRECISION : QUOTE_PRECISION;\n\tconst amountBN = parseAmount(amount, precision);\n\n\tconsole.log('--- 🎯 Open Perp Order Transaction ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Index: ${marketIndex}`);\n\tconsole.log(\n\t\t`📊 Direction: ${direction} (${ENUM_UTILS.toStr(directionEnum)})`\n\t);\n\tconsole.log(`💰 Amount: ${amount} (${amountBN.toString()} raw units)`);\n\tconsole.log(`💱 Asset Type: ${assetType}`);\n\tconsole.log(`🌐 DLOB Server: ${dlobServerHttpUrl}`);\n\n\tconst orderTxn = await centralServerDrift.getOpenPerpMarketOrderTxn({\n\t\tuserAccountPublicKey: userAccountPubkey,\n\t\tassetType: assetType as 'base' | 'quote',\n\t\tmarketIndex,\n\t\tdirection: directionEnum,\n\t\tamount: amountBN,\n\t\tuseSwift: false,\n\t\tpositionMaxLeverage: 10,\n\t});\n\n\tawait executeTransaction(orderTxn as VersionedTransaction, 'Open Perp Order');\n}\n\n/**\n * CLI Command: openPerpMarketOrderSwift (Swift signed message order)\n */\nasync function openPerpMarketOrderSwiftCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndex = parseInt(args.marketIndex as string);\n\tconst direction = args.direction as string;\n\tconst amount = args.amount as string;\n\tconst assetType = (args.assetType as string) || 'base';\n\tconst dlobServerHttpUrl = API_URLS.DLOB;\n\tconst swiftServerUrl = (args.swiftServerUrl as string) || API_URLS.SWIFT;\n\n\tif (!userAccount || isNaN(marketIndex) || !direction || !amount) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndex, --direction, --amount'\n\t\t);\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst directionEnum = parseDirection(direction);\n\tconst precision = assetType === 'base' ? BASE_PRECISION : QUOTE_PRECISION;\n\tconst amountBN = parseAmount(amount, precision);\n\n\tconsole.log('--- ⚡ Open Perp Order Swift ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Index: ${marketIndex}`);\n\tconsole.log(\n\t\t`📊 Direction: ${direction} (${ENUM_UTILS.toStr(directionEnum)})`\n\t);\n\tconsole.log(`💰 Amount: ${amount} (${amountBN.toString()} raw units)`);\n\tconsole.log(`💱 Asset Type: ${assetType}`);\n\tconsole.log(`🌐 DLOB Server: ${dlobServerHttpUrl}`);\n\tconsole.log(`⚡ Swift Server: ${swiftServerUrl}`);\n\tconsole.log(`🔑 Wallet Public Key: ${wallet.publicKey.toString()}`);\n\n\tconsole.log('\\n👁️ Monitoring order status...');\n\n\ttry {\n\t\tawait centralServerDrift.getOpenPerpMarketOrderTxn({\n\t\t\tuserAccountPublicKey: userAccountPubkey,\n\t\t\tassetType: assetType as 'base' | 'quote',\n\t\t\tmarketIndex,\n\t\t\tdirection: directionEnum,\n\t\t\tamount: amountBN,\n\t\t\tuseSwift: true,\n\t\t\tswiftOptions: {\n\t\t\t\twallet: {\n\t\t\t\t\tsignMessage: async (message: Uint8Array) => {\n\t\t\t\t\t\tconst signature = sign.detached(message, wallet.payer.secretKey);\n\t\t\t\t\t\treturn new Uint8Array(signature);\n\t\t\t\t\t},\n\t\t\t\t\ttakerAuthority: wallet.publicKey,\n\t\t\t\t\tsigningAuthority: wallet.publicKey,\n\t\t\t\t},\n\t\t\t\tcallbacks: createSwiftOrderCallbacks('Open Perp Order'),\n\t\t\t},\n\t\t\tpositionMaxLeverage: 10,\n\t\t});\n\t\tconsole.log('✅ [CLI] Swift order finished');\n\t} catch (error) {\n\t\tconsole.error('❌ [CLI] Error creating Swift order:', error);\n\t\tthrow error;\n\t}\n}\n\n/**\n * CLI Command: openPerpNonMarketOrder (regular limit/oracle order)\n */\nasync function openPerpNonMarketOrderCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndex = parseInt(args.marketIndex as string);\n\tconst direction = args.direction as string;\n\tconst amount = args.amount as string;\n\tconst assetType = (args.assetType as string) || 'base';\n\tconst baseAssetAmount = args.baseAssetAmount as string;\n\tconst orderType = args.orderType as NonMarketOrderType;\n\tconst limitPrice = args.limitPrice as string;\n\tconst triggerPrice = args.triggerPrice as string;\n\tconst reduceOnly = (args.reduceOnly as string) === 'true';\n\tconst postOnly = (args.postOnly as string) || 'none';\n\tconst oraclePriceOffset = args.oraclePriceOffset as string;\n\n\tif (!userAccount || isNaN(marketIndex) || !direction || !orderType) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndex, --direction, --orderType'\n\t\t);\n\t}\n\n\tif (!amount && !baseAssetAmount) {\n\t\tthrow new Error('Either --amount or --baseAssetAmount must be provided');\n\t}\n\n\t// Validate price requirements based on order type\n\tif (orderType === 'limit') {\n\t\tif (!limitPrice) {\n\t\t\tthrow new Error(`Order type '${orderType}' requires --limitPrice`);\n\t\t}\n\t} else if (orderType === 'takeProfit' || orderType === 'stopLoss') {\n\t\tif (!triggerPrice) {\n\t\t\tthrow new Error(`Order type '${orderType}' requires --triggerPrice`);\n\t\t}\n\t} else if (orderType === 'oracleLimit') {\n\t\tif (!oraclePriceOffset) {\n\t\t\tthrow new Error(`Order type '${orderType}' requires --oraclePriceOffset`);\n\t\t}\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst directionEnum = parseDirection(direction);\n\tconst postOnlyEnum = parsePostOnly(postOnly);\n\tconst limitPriceBN = limitPrice\n\t\t? parseAmount(limitPrice, PRICE_PRECISION)\n\t\t: undefined;\n\tconst triggerPriceBN = triggerPrice\n\t\t? parseAmount(triggerPrice, PRICE_PRECISION)\n\t\t: undefined;\n\tconst oraclePriceOffsetBN = oraclePriceOffset\n\t\t? parseAmount(oraclePriceOffset, PRICE_PRECISION)\n\t\t: undefined;\n\n\tconst orderConfig: NonMarketOrderParamsConfig['orderConfig'] =\n\t\torderType === 'limit'\n\t\t\t? {\n\t\t\t\t\torderType,\n\t\t\t\t\tlimitPrice: limitPriceBN!,\n\t\t\t }\n\t\t\t: orderType === 'takeProfit' || orderType === 'stopLoss'\n\t\t\t? {\n\t\t\t\t\torderType,\n\t\t\t\t\ttriggerPrice: triggerPriceBN!,\n\t\t\t }\n\t\t\t: {\n\t\t\t\t\torderType,\n\t\t\t\t\toraclePriceOffset: oraclePriceOffsetBN!,\n\t\t\t };\n\n\tconsole.log('--- 📋 Open Perp Non-Market Order ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Index: ${marketIndex}`);\n\tconsole.log(\n\t\t`📊 Direction: ${direction} (${ENUM_UTILS.toStr(directionEnum)})`\n\t);\n\n\tlet amountBN: BN;\n\tif (amount) {\n\t\tconst precision = assetType === 'base' ? BASE_PRECISION : QUOTE_PRECISION;\n\t\tamountBN = parseAmount(amount, precision);\n\t\tconsole.log(`💰 Amount: ${amount} (${amountBN.toString()} raw units)`);\n\t\tconsole.log(`💱 Asset Type: ${assetType}`);\n\t} else {\n\t\tamountBN = parseAmount(baseAssetAmount, BASE_PRECISION);\n\t\tconsole.log(\n\t\t\t`💰 Base Asset Amount: ${baseAssetAmount} (${amountBN.toString()} raw units)`\n\t\t);\n\t}\n\n\tif (limitPriceBN) {\n\t\tconsole.log(\n\t\t\t`💵 Limit Price: ${limitPrice} (${limitPriceBN.toString()} raw units)`\n\t\t);\n\t}\n\tif (triggerPriceBN) {\n\t\tconsole.log(\n\t\t\t`🎯 Trigger Price: ${triggerPrice} (${triggerPriceBN.toString()} raw units)`\n\t\t);\n\t}\n\tconsole.log(`📝 Order Type: ${orderType}`);\n\tconsole.log(`🔄 Reduce Only: ${reduceOnly}`);\n\tconsole.log(`📌 Post Only: ${postOnly} (${ENUM_UTILS.toStr(postOnlyEnum)})`);\n\n\t// Just call the main method - it will handle both approaches internally\n\tconst orderTxn = await centralServerDrift.getOpenPerpNonMarketOrderTxn({\n\t\tuserAccountPublicKey: userAccountPubkey,\n\t\tmarketIndex,\n\t\tdirection: directionEnum,\n\t\torderConfig,\n\t\tuseSwift: false,\n\t\treduceOnly,\n\t\tpostOnly: postOnlyEnum,\n\t\tassetType: assetType as 'base' | 'quote',\n\t\tamount: amountBN,\n\t\tpositionMaxLeverage: 10,\n\t});\n\n\tawait executeTransaction(\n\t\torderTxn as VersionedTransaction,\n\t\t'Open Perp Non-Market Order'\n\t);\n}\n\n/**\n * CLI Command: openPerpNonMarketOrderSwift (Swift signed message limit order)\n */\nasync function openPerpNonMarketOrderSwiftCommand(\n\targs: CliArgs\n): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndex = parseInt(args.marketIndex as string);\n\tconst direction = args.direction as string;\n\tconst amount = args.amount as string;\n\tconst assetType = (args.assetType as string) || 'base';\n\tconst baseAssetAmount = args.baseAssetAmount as string;\n\tconst orderType = args.orderType as NonMarketOrderType;\n\tconst limitPrice = args.limitPrice as string;\n\tconst reduceOnly = (args.reduceOnly as string) === 'true';\n\tconst postOnly = (args.postOnly as string) || 'none';\n\tconst swiftServerUrl = API_URLS.SWIFT;\n\n\tif (!userAccount || isNaN(marketIndex) || !direction || !orderType) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndex, --direction, --orderType'\n\t\t);\n\t}\n\n\tif (!amount && !baseAssetAmount) {\n\t\tthrow new Error('Either --amount or --baseAssetAmount must be provided');\n\t}\n\n\t// Swift orders only support LIMIT order type\n\tif (orderType.toLowerCase() !== 'limit') {\n\t\tthrow new Error('Swift orders only support LIMIT order type');\n\t}\n\n\t// LIMIT orders require limitPrice\n\tif (!limitPrice) {\n\t\tthrow new Error('LIMIT orders require --limitPrice');\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst directionEnum = parseDirection(direction);\n\tconst postOnlyEnum = parsePostOnly(postOnly);\n\tconst limitPriceBN = parseAmount(limitPrice, PRICE_PRECISION);\n\n\tconst orderConfig: LimitOrderParamsOrderConfig = {\n\t\torderType: 'limit',\n\t\tlimitPrice: limitPriceBN!,\n\t};\n\n\tconsole.log('--- ⚡ Open Perp Non-Market Order Swift ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Index: ${marketIndex}`);\n\tconsole.log(\n\t\t`📊 Direction: ${direction} (${ENUM_UTILS.toStr(directionEnum)})`\n\t);\n\n\tlet amountBN: BN;\n\tif (amount) {\n\t\tconst precision = assetType === 'base' ? BASE_PRECISION : QUOTE_PRECISION;\n\t\tamountBN = parseAmount(amount, precision);\n\t\tconsole.log(`💰 Amount: ${amount} (${amountBN.toString()} raw units)`);\n\t\tconsole.log(`💱 Asset Type: ${assetType}`);\n\t} else {\n\t\tamountBN = parseAmount(baseAssetAmount, BASE_PRECISION);\n\t\tconsole.log(\n\t\t\t`💰 Base Asset Amount: ${baseAssetAmount} (${amountBN.toString()} raw units)`\n\t\t);\n\t}\n\n\tconsole.log(\n\t\t`💵 Limit Price: ${limitPrice} (${limitPriceBN.toString()} raw units)`\n\t);\n\tconsole.log(`📝 Order Type: ${orderType})`);\n\tconsole.log(`🔄 Reduce Only: ${reduceOnly}`);\n\tconsole.log(`📌 Post Only: ${postOnly} (${ENUM_UTILS.toStr(postOnlyEnum)})`);\n\tconsole.log(`⚡ Swift Server: ${swiftServerUrl}`);\n\tconsole.log(`🔑 Wallet Public Key: ${wallet.publicKey.toString()}`);\n\n\ttry {\n\t\tconst swiftOptions: CentralServerSwiftOrderOptions = {\n\t\t\twallet: {\n\t\t\t\tsignMessage: async (message: Uint8Array) => {\n\t\t\t\t\tconst signature = sign.detached(message, wallet.payer.secretKey);\n\t\t\t\t\treturn new Uint8Array(signature);\n\t\t\t\t},\n\t\t\t\ttakerAuthority: wallet.publicKey,\n\t\t\t\tsigningAuthority: wallet.publicKey,\n\t\t\t},\n\t\t\tcallbacks: createSwiftOrderCallbacks('Open Perp Non-Market Order'),\n\t\t};\n\n\t\tconsole.log('\\n👁️ Monitoring order status...');\n\n\t\t// Use the main method - it handles both approaches internally\n\t\tawait centralServerDrift.getOpenPerpNonMarketOrderTxn({\n\t\t\tuserAccountPublicKey: userAccountPubkey,\n\t\t\tmarketIndex,\n\t\t\tdirection: directionEnum,\n\t\t\torderConfig,\n\t\t\treduceOnly,\n\t\t\tpostOnly: postOnlyEnum,\n\t\t\tassetType: assetType as 'base' | 'quote',\n\t\t\tamount: amountBN,\n\t\t\tuseSwift: true,\n\t\t\tswiftOptions,\n\t\t\tpositionMaxLeverage: 10,\n\t\t});\n\n\t\tconsole.log('✅ [CLI] Swift order finished');\n\t} catch (error) {\n\t\tconsole.error('❌ [CLI] Error creating Swift non-market order:', error);\n\t\tthrow error;\n\t}\n}\n\n/**\n * Show CLI usage information\n */\nfunction showUsage(): void {\n\tconsole.log('📋 Drift CLI Usage');\n\tconsole.log('');\n\tconsole.log('Available Commands:');\n\tconsole.log('');\n\n\tconsole.log('💰 deposit');\n\tconsole.log(\n\t\t' ts-node cli.ts deposit --userAccount=<pubkey> --marketIndex=<num> --amount=<num> [--fromWallet=<pubkey>]'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts deposit --userAccount=11111111111111111111111111111111 --marketIndex=0 --amount=100'\n\t);\n\tconsole.log(\n\t\t' Example (external wallet): ts-node cli.ts deposit --userAccount=11111111111111111111111111111111 --marketIndex=0 --amount=100 --fromWallet=22222222222222222222222222222222'\n\t);\n\tconsole.log('');\n\n\tconsole.log('🆕 createUserAndDeposit');\n\tconsole.log(\n\t\t' ts-node cli.ts createUserAndDeposit --marketIndex=<num> --amount=<num> [--accountName=<string>] [--referrerName=<string>] [--poolId=<num>] [--fromSubAccountId=<num>] [--customMaxMarginRatio=<num>] [--fromWallet=<pubkey> --forAuthority=<pubkey>]'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts createUserAndDeposit --marketIndex=0 --amount=100 --accountName=\"Primary\"'\n\t);\n\tconsole.log(\n\t\t' Example (external wallet): ts-node cli.ts createUserAndDeposit --marketIndex=0 --amount=100 --fromWallet=22222222222222222222222222222222 --forAuthority=33333333333333333333333333333333'\n\t);\n\tconsole.log('');\n\n\tconsole.log('💸 withdraw');\n\tconsole.log(\n\t\t' ts-node cli.ts withdraw --userAccount=<pubkey> --marketIndex=<num> --amount=<num> [--isBorrow=<bool>] [--isMax=<bool>]'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts withdraw --userAccount=11111111111111111111111111111111 --marketIndex=0 --amount=50'\n\t);\n\tconsole.log('');\n\n\tconsole.log('🏦 settleFunding');\n\tconsole.log(' ts-node cli.ts settleFunding --userAccount=<pubkey>');\n\tconsole.log(\n\t\t' Example: ts-node cli.ts settleFunding --userAccount=11111111111111111111111111111111'\n\t);\n\tconsole.log('');\n\n\tconsole.log('📊 settlePnl');\n\tconsole.log(\n\t\t' ts-node cli.ts settlePnl --userAccount=<pubkey> --marketIndexes=<comma-separated>'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts settlePnl --userAccount=11111111111111111111111111111111 --marketIndexes=0,1'\n\t);\n\tconsole.log('');\n\n\tconsole.log('🎯 openPerpMarketOrder');\n\tconsole.log(\n\t\t' ts-node cli.ts openPerpMarketOrder --userAccount=<pubkey> --marketIndex=<num> --direction=<long|short> --amount=<num> [--assetType=<base|quote>]'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts openPerpMarketOrder --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=long --amount=0.1 --assetType=base'\n\t);\n\tconsole.log('');\n\n\tconsole.log('⚡ openPerpMarketOrderSwift');\n\tconsole.log(\n\t\t' ts-node cli.ts openPerpMarketOrderSwift --userAccount=<pubkey> --marketIndex=<num> --direction=<long|short> --amount=<num> [--assetType=<base|quote>]'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts openPerpMarketOrderSwift --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=short --amount=100 --assetType=quote'\n\t);\n\tconsole.log('');\n\n\tconsole.log('📋 openPerpNonMarketOrder');\n\tconsole.log(\n\t\t' ts-node cli.ts openPerpNonMarketOrder --userAccount=<pubkey> --marketIndex=<num> --direction=<long|short> --amount=<num> [--assetType=<base|quote>] --orderType=<limit|trigger_limit|trigger_market|oracle> [--limitPrice=<num>] [--triggerPrice=<num>] [--reduceOnly=<true|false>] [--postOnly=<none|must_post_only|try_post_only|slide>]'\n\t);\n\tconsole.log(\n\t\t' New LIMIT: ts-node cli.ts openPerpNonMarketOrder --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=long --amount=0.1 --assetType=base --orderType=limit --limitPrice=100'\n\t);\n\tconsole.log(\n\t\t' New QUOTE: ts-node cli.ts openPerpNonMarketOrder --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=long --amount=100 --assetType=quote --orderType=limit --limitPrice=100'\n\t);\n\tconsole.log(\n\t\t' Legacy: ts-node cli.ts openPerpNonMarketOrder --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=long --baseAssetAmount=0.1 --orderType=limit --limitPrice=100'\n\t);\n\tconsole.log('');\n\n\tconsole.log('⚡ openPerpNonMarketOrderSwift');\n\tconsole.log(\n\t\t' ts-node cli.ts openPerpNonMarketOrderSwift --userAccount=<pubkey> --marketIndex=<num> --direction=<long|short> --amount=<num> [--assetType=<base|quote>] --orderType=limit --limitPrice=<num> [--reduceOnly=<true|false>] [--postOnly=<none|must_post_only|try_post_only|slide>]'\n\t);\n\tconsole.log(\n\t\t' New: ts-node cli.ts openPerpNonMarketOrderSwift --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=long --amount=0.1 --assetType=base --orderType=limit --limitPrice=99.5'\n\t);\n\tconsole.log(\n\t\t' Legacy: ts-node cli.ts openPerpNonMarketOrderSwift --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=long --baseAssetAmount=0.1 --orderType=limit --limitPrice=99.5'\n\t);\n\tconsole.log('');\n\n\tconsole.log('✏️ editOrder');\n\tconsole.log(\n\t\t' ts-node cli.ts editOrder --userAccount=<pubkey> --orderId=<num> [--newDirection=<long|short>] [--newBaseAmount=<num>] [--newLimitPrice=<num>] [--newTriggerPrice=<num>] [--reduceOnly=<true|false>] [--postOnly=<true|false>]'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts editOrder --userAccount=11111111111111111111111111111111 --orderId=123 --newLimitPrice=105.5'\n\t);\n\tconsole.log('');\n\n\tconsole.log('❌ cancelOrder');\n\tconsole.log(\n\t\t' ts-node cli.ts cancelOrder --userAccount=<pubkey> --orderIds=<comma-separated-list>'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts cancelOrder --userAccount=11111111111111111111111111111111 --orderIds=123,456,789'\n\t);\n\tconsole.log('');\n\n\tconsole.log('🧹 cancelAllOrders');\n\tconsole.log(\n\t\t' ts-node cli.ts cancelAllOrders --userAccount=<pubkey> [--marketType=<perp|spot>] [--marketIndex=<num>] [--direction=<long|short>]'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts cancelAllOrders --userAccount=11111111111111111111111111111111 --marketType=perp'\n\t);\n\tconsole.log('');\n\n\tconsole.log('🔄 swap');\n\tconsole.log(\n\t\t' ts-node cli.ts swap --userAccount=<pubkey> --fromMarketIndex=<num> --toMarketIndex=<num> [--fromAmount=<num>] [--toAmount=<num>] [--slippage=<bps>] [--swapMode=<ExactIn|ExactOut>]'\n\t);\n\tconsole.log(\n\t\t' ExactIn: ts-node cli.ts swap --userAccount=11111111111111111111111111111111 --fromMarketIndex=1 --toMarketIndex=0 --fromAmount=1.5 --swapMode=ExactIn'\n\t);\n\tconsole.log(\n\t\t' ExactOut: ts-node cli.ts swap --userAccount=11111111111111111111111111111111 --fromMarketIndex=1 --toMarketIndex=0 --toAmount=150 --swapMode=ExactOut'\n\t);\n\tconsole.log('');\n\n\tconsole.log('Options:');\n\tconsole.log(' --help, -h Show this help message');\n\tconsole.log('');\n\tconsole.log('Notes:');\n\tconsole.log(\n\t\t' - Amounts are in human-readable format (e.g., 1.5 USDC, 0.1 SOL)'\n\t);\n\tconsole.log(' - Direction can be: long, short, buy, sell');\n\tconsole.log(\n\t\t' - Asset type: base (for native tokens like SOL) or quote (for USDC amounts)'\n\t);\n\tconsole.log(' - Swap modes:');\n\tconsole.log(\n\t\t' * ExactIn: Specify --fromAmount (how much input token to swap)'\n\t);\n\tconsole.log(\n\t\t' * ExactOut: Specify --toAmount (how much output token to receive)'\n\t);\n\tconsole.log(' - Ensure your .env file contains ANCHOR_WALLET and ENDPOINT');\n}\n\n/**\n * CLI Command: editOrder\n */\nasync function editOrderCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst orderId = parseInt(args.orderId as string);\n\tconst newDirection = args.newDirection as string;\n\tconst newBaseAmount = args.newBaseAmount as string;\n\tconst newLimitPrice = args.newLimitPrice as string;\n\tconst newTriggerPrice = args.newTriggerPrice as string;\n\tconst reduceOnly = (args.reduceOnly as string) === 'true';\n\tconst postOnly = (args.postOnly as string) === 'true';\n\n\tif (!userAccount || isNaN(orderId)) {\n\t\tthrow new Error('Required arguments: --userAccount, --orderId');\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst editParams: any = {};\n\n\tif (newDirection) {\n\t\teditParams.newDirection = parseDirection(newDirection);\n\t}\n\n\tif (newBaseAmount) {\n\t\teditParams.newBaseAmount = parseAmount(newBaseAmount, BASE_PRECISION);\n\t}\n\n\tif (newLimitPrice) {\n\t\teditParams.newLimitPrice = parseAmount(newLimitPrice, PRICE_PRECISION);\n\t}\n\n\tif (newTriggerPrice) {\n\t\teditParams.newTriggerPrice = parseAmount(newTriggerPrice, PRICE_PRECISION);\n\t}\n\n\tif (reduceOnly) {\n\t\teditParams.reduceOnly = true;\n\t}\n\n\tif (postOnly) {\n\t\teditParams.postOnly = true;\n\t}\n\n\tconsole.log('--- ✏️ Edit Order ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🆔 Order ID: ${orderId}`);\n\tconsole.log(`📝 Edit Parameters:`, editParams);\n\n\tconst editOrderTxn = await centralServerDrift.getEditOrderTxn(\n\t\tuserAccountPubkey,\n\t\torderId,\n\t\teditParams\n\t);\n\n\tawait executeTransaction(editOrderTxn as VersionedTransaction, 'Edit Order');\n}\n\n/**\n * CLI Command: cancelOrder\n */\nasync function cancelOrderCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst orderIds = args.orderIds as string;\n\n\tif (!userAccount || !orderIds) {\n\t\tthrow new Error('Required arguments: --userAccount, --orderIds');\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst orderIdArray = orderIds.split(',').map((id) => parseInt(id.trim()));\n\n\tconsole.log('--- ❌ Cancel Orders ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🆔 Order IDs: ${orderIdArray.join(', ')}`);\n\n\tconst cancelOrderTxn = await centralServerDrift.getCancelOrdersTxn(\n\t\tuserAccountPubkey,\n\t\torderIdArray\n\t);\n\n\tawait executeTransaction(\n\t\tcancelOrderTxn as VersionedTransaction,\n\t\t'Cancel Orders'\n\t);\n}\n\n/**\n * CLI Command: cancelAllOrders\n */\nasync function cancelAllOrdersCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketType = args.marketType as string;\n\tconst marketIndex = args.marketIndex\n\t\t? parseInt(args.marketIndex as string)\n\t\t: undefined;\n\tconst direction = args.direction as string;\n\n\tif (!userAccount) {\n\t\tthrow new Error('Required arguments: --userAccount');\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tlet marketTypeEnum = undefined;\n\tlet directionEnum = undefined;\n\n\tif (marketType) {\n\t\tmarketTypeEnum =\n\t\t\tmarketType.toLowerCase() === 'perp' ? { perp: {} } : { spot: {} };\n\t}\n\n\tif (direction) {\n\t\tdirectionEnum = parseDirection(direction);\n\t}\n\n\tconsole.log('--- 🧹 Cancel All Orders ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Type Filter: ${marketType || 'none'}`);\n\tconsole.log(\n\t\t`📊 Market Index Filter: ${\n\t\t\tmarketIndex !== undefined ? marketIndex : 'none'\n\t\t}`\n\t);\n\tconsole.log(`📈 Direction Filter: ${direction || 'none'}`);\n\n\tconst cancelAllOrdersTxn = await centralServerDrift.getCancelAllOrdersTxn(\n\t\tuserAccountPubkey,\n\t\tmarketTypeEnum,\n\t\tmarketIndex,\n\t\tdirectionEnum\n\t);\n\n\tawait executeTransaction(\n\t\tcancelAllOrdersTxn as VersionedTransaction,\n\t\t'Cancel All Orders'\n\t);\n}\n\n/**\n * CLI Command: swap\n */\nasync function swapCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst fromMarketIndex = parseInt(args.fromMarketIndex as string);\n\tconst toMarketIndex = parseInt(args.toMarketIndex as string);\n\tconst fromAmount = args.fromAmount as string;\n\tconst toAmount = args.toAmount as string;\n\tconst slippage = args.slippage ? parseInt(args.slippage as string) : 10; // Default 0.1%\n\tconst swapMode = (args.swapMode as string) || 'ExactIn';\n\n\tif (!userAccount || isNaN(fromMarketIndex) || isNaN(toMarketIndex)) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --fromMarketIndex, --toMarketIndex'\n\t\t);\n\t}\n\n\tconst swapModeEnum = parseSwapMode(swapMode);\n\n\t// Validate amount parameters based on swap mode\n\tif (swapModeEnum === 'ExactIn') {\n\t\tif (!fromAmount) {\n\t\t\tthrow new Error('ExactIn swap mode requires --fromAmount');\n\t\t}\n\t\tif (toAmount) {\n\t\t\tconsole.warn(\n\t\t\t\t'⚠️ Warning: --toAmount ignored in ExactIn mode, using --fromAmount'\n\t\t\t);\n\t\t}\n\t} else if (swapModeEnum === 'ExactOut') {\n\t\tif (!toAmount) {\n\t\t\tthrow new Error('ExactOut swap mode requires --toAmount');\n\t\t}\n\t\tif (fromAmount) {\n\t\t\tconsole.warn(\n\t\t\t\t'⚠️ Warning: --fromAmount ignored in ExactOut mode, using --toAmount'\n\t\t\t);\n\t\t}\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\n\t// Use the appropriate amount based on swap mode\n\tconst amount = swapModeEnum === 'ExactIn' ? fromAmount : toAmount;\n\n\t// Determine which market to use for precision (input market for ExactIn, output market for ExactOut)\n\tconst precisionMarketIndex =\n\t\tswapModeEnum === 'ExactIn' ? fromMarketIndex : toMarketIndex;\n\n\t// Get the appropriate precision for the amount based on the market\n\tconst isMainnet = true; // Default to mainnet, could be made configurable\n\tconst precision = getMarketPrecision(precisionMarketIndex, isMainnet);\n\tconst amountBN = parseAmount(amount, precision);\n\n\tconsole.log('--- 🔄 Swap Transaction ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`📤 From Market Index: ${fromMarketIndex}`);\n\tconsole.log(`📥 To Market Index: ${toMarketIndex}`);\n\tconsole.log(`🔄 Swap Mode: ${swapMode}`);\n\tconsole.log(\n\t\t`🎯 Using precision from market ${precisionMarketIndex}: ${precision.toString()}`\n\t);\n\n\tif (swapModeEnum === 'ExactIn') {\n\t\tconsole.log(\n\t\t\t`💰 From Amount: ${fromAmount} (${amountBN.toString()} raw units)`\n\t\t);\n\t\tconsole.log(`💰 To Amount: Will be calculated based on quote`);\n\t} else {\n\t\tconsole.log(`💰 From Amount: Will be calculated based on quote`);\n\t\tconsole.log(`💰 To Amount: ${toAmount} (${amountBN.toString()} raw units)`);\n\t}\n\n\tconsole.log(`📊 Slippage: ${slippage} BPS (${slippage / 100}%)`);\n\n\tconst swapTxn = await centralServerDrift.getSwapTxn(\n\t\tuserAccountPubkey,\n\t\tfromMarketIndex,\n\t\ttoMarketIndex,\n\t\tamountBN,\n\t\t{\n\t\t\tslippageBps: slippage,\n\t\t\tswapMode: swapModeEnum,\n\t\t}\n\t);\n\n\tawait executeTransaction(swapTxn as VersionedTransaction, 'Swap');\n}\n\n/**\n * Main CLI entry point\n */\nasync function main(): Promise<void> {\n\tconst args = process.argv.slice(2);\n\n\tif (\n\t\targs.length === 0 ||\n\t\targs[0] === '--help' ||\n\t\targs[0] === '-h' ||\n\t\targs[0] === 'help'\n\t) {\n\t\tshowUsage();\n\t\treturn;\n\t}\n\n\tconst command = args[0];\n\tconst parsedArgs = parseArgs(args.slice(1));\n\n\t// Initialize the client first\n\tawait initializeCentralServerDrift();\n\n\t// Route to appropriate command\n\tswitch (command) {\n\t\tcase 'createUserAndDeposit':\n\t\t\tawait createUserAndDepositCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'deposit':\n\t\t\tawait depositCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'withdraw':\n\t\t\tawait withdrawCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'settleFunding':\n\t\t\tawait settleFundingCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'settlePnl':\n\t\t\tawait settlePnlCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'openPerpMarketOrder':\n\t\t\tawait openPerpMarketOrderCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'openPerpMarketOrderSwift':\n\t\t\tawait openPerpMarketOrderSwiftCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'openPerpNonMarketOrder':\n\t\t\tawait openPerpNonMarketOrderCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'openPerpNonMarketOrderSwift':\n\t\t\tawait openPerpNonMarketOrderSwiftCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'editOrder':\n\t\t\tawait editOrderCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'cancelOrder':\n\t\t\tawait cancelOrderCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'cancelAllOrders':\n\t\t\tawait cancelAllOrdersCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'swap':\n\t\t\tawait swapCommand(parsedArgs);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tconsole.error(`❌ Unknown command: ${command}`);\n\t\t\tconsole.error('');\n\t\t\tshowUsage();\n\t\t\tprocess.exit(1);\n\t}\n}\n\n// Run CLI if this file is executed directly\nif (require.main === module) {\n\tmain()\n\t\t.then(() => {\n\t\t\tconsole.log('\\n✨ Command executed successfully!');\n\t\t\t// Don't exit immediately for Swift orders (they need time to process)\n\t\t\tsetTimeout(() => process.exit(0), 2000);\n\t\t})\n\t\t.catch((error) => {\n\t\t\tconsole.error('\\n💥 Command failed:', error.message || error);\n\t\t\tprocess.exit(1);\n\t\t});\n}\n\nexport { main, parseArgs, parseAmount, parseDirection, parseSwapMode };\n"]}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/drift/cli.ts"],"names":[],"mappings":"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","sourcesContent":["import * as anchor from '@coral-xyz/anchor';\nimport { PublicKey, VersionedTransaction } from '@solana/web3.js';\nimport {\n\tBN,\n\tloadKeypair,\n\tPositionDirection,\n\tOrderType,\n\tPostOnlyParams,\n\tSwapMode,\n\tBASE_PRECISION,\n\tQUOTE_PRECISION,\n\tPRICE_PRECISION,\n\tMainnetSpotMarkets,\n\tDevnetSpotMarkets,\n\tDriftEnv,\n} from '@drift-labs/sdk';\nimport { sign } from 'tweetnacl';\nimport { CentralServerDrift } from './Drift/clients/CentralServerDrift';\nimport { ENUM_UTILS } from '../utils';\nimport { API_URLS } from './constants/apiUrls';\nimport * as path from 'path';\nimport {\n\tNonMarketOrderType,\n\tLimitOrderParamsOrderConfig,\n\tNonMarketOrderParamsConfig,\n} from './base/actions/trade/openPerpOrder/types';\nimport {\n\tsignSwiftOrderMsg,\n\tsendSwiftOrder,\n\tSwiftOrderMessage,\n} from './base/actions/trade/openPerpOrder/openSwiftOrder';\nimport { SwiftClient } from '../clients/swiftClient';\nimport { MarketId } from '../types';\n\n// Load environment variables from .env file\nconst dotenv = require('dotenv');\ndotenv.config({ path: path.resolve(__dirname, '.env') });\n\n/**\n * CLI Tool for CentralServerDrift client\n *\n * This CLI tool allows you to execute various Drift protocol operations via command line\n * with human-readable parameters that are automatically converted to the proper precision.\n *\n * Prerequisites:\n * - Create a .env file in the same directory as this CLI file with:\n * ANCHOR_WALLET=[private key byte array]\n * ENDPOINT=https://your-rpc-endpoint.com\n *\n * Usage Examples:\n * ts-node cli.ts deposit --marketIndex=0 --amount=2 --userAccount=11111111111111111111111111111111\n * ts-node cli.ts deposit --marketIndex=0 --amount=2 --userAccount=11111111111111111111111111111111 --fromWallet=22222222222222222222222222222222\n * ts-node cli.ts withdraw --marketIndex=0 --amount=1.5 --userAccount=11111111111111111111111111111111\n * ts-node cli.ts settleFunding --userAccount=11111111111111111111111111111111\n * ts-node cli.ts settlePnl --marketIndexes=0,1 --userAccount=11111111111111111111111111111111\n * ts-node cli.ts openPerpMarketOrder --marketIndex=0 --direction=long --amount=0.1 --assetType=base --userAccount=11111111111111111111111111111111\n * ts-node cli.ts openPerpMarketOrderSwift --marketIndex=0 --direction=short --amount=100 --assetType=quote --userAccount=11111111111111111111111111111111\n * ts-node cli.ts openPerpNonMarketOrder --marketIndex=0 --direction=long --baseAssetAmount=0.1 --orderType=limit --limitPrice=100 --userAccount=11111111111111111111111111111111\n * ts-node cli.ts openPerpNonMarketOrderSwift --marketIndex=0 --direction=long --baseAssetAmount=0.1 --orderType=limit --limitPrice=99.5 --userAccount=11111111111111111111111111111111\n * ts-node cli.ts editOrder --userAccount=11111111111111111111111111111111 --orderId=123 --newLimitPrice=105.5\n * ts-node cli.ts cancelOrder --userAccount=11111111111111111111111111111111 --orderIds=123,456,789\n * ts-node cli.ts cancelAllOrders --userAccount=11111111111111111111111111111111 --marketType=perp\n * ts-node cli.ts swap --userAccount=11111111111111111111111111111111 --fromMarketIndex=1 --toMarketIndex=0 --fromAmount=1.5 --slippage=100 --swapMode=ExactIn\n * ts-node cli.ts swap --userAccount=11111111111111111111111111111111 --fromMarketIndex=1 --toMarketIndex=0 --toAmount=150 --slippage=100 --swapMode=ExactOut\n * ts-node cli.ts createUserAndDeposit --marketIndex=0 --amount=100 --accountName=\"Primary\"\n * ts-node cli.ts createUserAndDeposit --marketIndex=0 --amount=100 --fromWallet=22222222222222222222222222222222 --forAuthority=33333333333333333333333333333333\n */\n\n// Shared configuration\nlet centralServerDrift: CentralServerDrift;\nlet wallet: anchor.Wallet;\n\ninterface CliArgs {\n\t[key: string]: string | string[];\n}\n\n/**\n * Parse command line arguments into a key-value object\n */\nfunction parseArgs(args: string[]): CliArgs {\n\tconst parsed: CliArgs = {};\n\n\tfor (let i = 0; i < args.length; i++) {\n\t\tconst arg = args[i];\n\t\tif (arg.startsWith('--')) {\n\t\t\tconst [key, value] = arg.substring(2).split('=');\n\t\t\tif (value !== undefined) {\n\t\t\t\t// Handle comma-separated arrays\n\t\t\t\tif (value.includes(',')) {\n\t\t\t\t\tparsed[key] = value.split(',');\n\t\t\t\t} else {\n\t\t\t\t\tparsed[key] = value;\n\t\t\t\t}\n\t\t\t} else if (i + 1 < args.length && !args[i + 1].startsWith('--')) {\n\t\t\t\t// Handle space-separated values\n\t\t\t\tconst nextValue = args[i + 1];\n\t\t\t\tif (nextValue.includes(',')) {\n\t\t\t\t\tparsed[key] = nextValue.split(',');\n\t\t\t\t} else {\n\t\t\t\t\tparsed[key] = nextValue;\n\t\t\t\t}\n\t\t\t\ti++; // Skip the next argument as it's the value\n\t\t\t} else {\n\t\t\t\tparsed[key] = 'true'; // Boolean flag\n\t\t\t}\n\t\t}\n\t}\n\n\treturn parsed;\n}\n\n/**\n * Convert human-readable amount to BN with proper precision\n */\nfunction parseAmount(amount: string, precision: BN = QUOTE_PRECISION): BN {\n\tconst floatAmount = parseFloat(amount);\n\tif (isNaN(floatAmount)) {\n\t\tthrow new Error(`Invalid amount: ${amount}`);\n\t}\n\n\t// Convert to the proper precision\n\tconst scaledAmount = Math.floor(floatAmount * precision.toNumber());\n\treturn new BN(scaledAmount);\n}\n\n/**\n * Parse direction string to PositionDirection\n */\nfunction parseDirection(direction: string): PositionDirection {\n\tconst normalized = direction.toLowerCase();\n\tif (normalized === 'long' || normalized === 'buy') {\n\t\treturn PositionDirection.LONG;\n\t} else if (normalized === 'short' || normalized === 'sell') {\n\t\treturn PositionDirection.SHORT;\n\t} else {\n\t\tthrow new Error(\n\t\t\t`Invalid direction: ${direction}. Use 'long', 'short', 'buy', or 'sell'`\n\t\t);\n\t}\n}\n\n/**\n * Parse order type string to OrderType\n */\nfunction _parseOrderType(orderType: string): OrderType {\n\tconst normalized = orderType.toLowerCase();\n\tswitch (normalized) {\n\t\tcase 'limit':\n\t\t\treturn OrderType.LIMIT;\n\t\tcase 'market':\n\t\t\treturn OrderType.MARKET;\n\t\tcase 'oracle':\n\t\t\treturn OrderType.ORACLE;\n\t\tcase 'trigger_market':\n\t\tcase 'stopmarket':\n\t\t\treturn OrderType.TRIGGER_MARKET;\n\t\tcase 'trigger_limit':\n\t\tcase 'stoplimit':\n\t\t\treturn OrderType.TRIGGER_LIMIT;\n\t\tdefault:\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid order type: ${orderType}. Use 'limit', 'market', 'oracle', 'trigger_market', or 'trigger_limit'`\n\t\t\t);\n\t}\n}\n\n/**\n * Parse post only string to PostOnlyParams\n */\nfunction parsePostOnly(postOnly: string): PostOnlyParams {\n\tconst normalized = postOnly.toLowerCase();\n\tswitch (normalized) {\n\t\tcase 'none':\n\t\tcase 'false':\n\t\t\treturn PostOnlyParams.NONE;\n\t\tcase 'must_post_only':\n\t\tcase 'true':\n\t\t\treturn PostOnlyParams.MUST_POST_ONLY;\n\t\tcase 'try_post_only':\n\t\t\treturn PostOnlyParams.TRY_POST_ONLY;\n\t\tcase 'slide':\n\t\t\treturn PostOnlyParams.SLIDE;\n\t\tdefault:\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid post only: ${postOnly}. Use 'none', 'must_post_only', 'try_post_only', or 'slide'`\n\t\t\t);\n\t}\n}\n\n/**\n * Parse swap mode string to SwapMode\n */\nfunction parseSwapMode(swapMode: string): SwapMode {\n\tconst normalized = swapMode.toLowerCase();\n\tswitch (normalized) {\n\t\tcase 'exactin':\n\t\tcase 'exact_in':\n\t\t\treturn 'ExactIn';\n\t\tcase 'exactout':\n\t\tcase 'exact_out':\n\t\t\treturn 'ExactOut';\n\t\tdefault:\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid swap mode: ${swapMode}. Use 'ExactIn' or 'ExactOut'`\n\t\t\t);\n\t}\n}\n\n/**\n * Get the precision for a spot market based on environment and market index\n */\nfunction getMarketPrecision(\n\tmarketIndex: number,\n\tisMainnet: boolean = true\n): BN {\n\tconst markets = isMainnet ? MainnetSpotMarkets : DevnetSpotMarkets;\n\tconst market = markets.find((m) => m.marketIndex === marketIndex);\n\n\tif (!market) {\n\t\tconsole.warn(\n\t\t\t`⚠️ Market ${marketIndex} not found, using QUOTE_PRECISION as fallback`\n\t\t);\n\t\treturn QUOTE_PRECISION;\n\t}\n\n\treturn market.precision;\n}\n\n/**\n * Initialize CentralServerDrift instance\n */\nasync function initializeCentralServerDrift(): Promise<void> {\n\tconsole.log('🚀 Initializing CentralServerDrift...\\n');\n\n\t// Validate required environment variables\n\tif (!process.env.ANCHOR_WALLET) {\n\t\tthrow new Error('ANCHOR_WALLET must be set in .env file');\n\t}\n\n\tif (!process.env.ENDPOINT) {\n\t\tthrow new Error(\n\t\t\t'ENDPOINT environment variable must be set to your Solana RPC endpoint'\n\t\t);\n\t}\n\n\t// Set up the wallet\n\twallet = new anchor.Wallet(loadKeypair(process.env.ANCHOR_WALLET as string));\n\n\tconsole.log(`✅ Wallet Public Key: ${wallet.publicKey.toString()}`);\n\tconsole.log(`✅ RPC Endpoint: ${process.env.ENDPOINT}\\n`);\n\n\t// Initialize CentralServerDrift\n\tconst driftEnv = (process.env.DRIFT_ENV as DriftEnv) ?? 'devnet';\n\tconsole.log(`🏗️ Initializing CentralServerDrift... (${driftEnv})`);\n\tconst rpcEndpoint = process.env.ENDPOINT as string;\n\tcentralServerDrift = new CentralServerDrift({\n\t\tsolanaRpcEndpoint: rpcEndpoint,\n\t\tdriftEnv,\n\t\tsupportedPerpMarkets: [0, 1, 2], // SOL, BTC, ETH\n\t\tsupportedSpotMarkets: [0, 1], // USDC, SOL\n\t\tadditionalDriftClientConfig: {\n\t\t\ttxVersion: 0,\n\t\t\ttxParams: {\n\t\t\t\tcomputeUnits: 200000,\n\t\t\t\tcomputeUnitsPrice: 1000,\n\t\t\t},\n\t\t},\n\t});\n\n\tconsole.log('✅ CentralServerDrift instance created successfully\\n');\n\n\t// Subscribe to market data\n\tconsole.log('📡 Subscribing to market data...');\n\tawait centralServerDrift.subscribe();\n\tconsole.log('✅ Successfully subscribed to market data\\n');\n}\n\n/**\n * Execute a regular transaction\n */\nasync function executeTransaction(\n\ttxn: VersionedTransaction,\n\ttransactionType: string\n): Promise<void> {\n\tconsole.log(`✅ ${transactionType} transaction created successfully`);\n\tconsole.log('\\n📝 Signing Transaction...');\n\n\ttxn.sign([wallet.payer]);\n\tconsole.log('✅ Transaction signed successfully');\n\n\tconsole.log('\\n🚀 Sending transaction to the network...');\n\tconst { txSig } = await centralServerDrift.sendSignedTransaction(txn);\n\n\tconsole.log('✅ Transaction sent successfully!');\n\tconsole.log(`📋 Transaction Signature: ${txSig?.toString()}`);\n\tconsole.log(`🔍 View on Solscan: https://solscan.io/tx/${txSig?.toString()}`);\n}\n\n/**\n * Signs and sends a SWIFT order message that was prepared by CentralServerDrift.\n */\nasync function signAndSendSwiftOrderMessage(\n\tswiftMessage: SwiftOrderMessage,\n\twallet: anchor.Wallet,\n\tcentralServerDrift: CentralServerDrift,\n\tswiftServerUrl: string,\n\torderType: string\n): Promise<void> {\n\tconsole.log(`\\n📝 Signing ${orderType} SWIFT message...`);\n\n\tconst signedMessage = await signSwiftOrderMsg({\n\t\twallet: {\n\t\t\tsignMessage: async (message: Uint8Array) => {\n\t\t\t\tconst signature = sign.detached(message, wallet.payer.secretKey);\n\t\t\t\treturn new Uint8Array(signature);\n\t\t\t},\n\t\t},\n\t\thexEncodedSwiftOrderMessage:\n\t\t\tswiftMessage.hexEncodedSwiftOrderMessage.uInt8Array,\n\t\texpirationTimeMs: swiftMessage.expirationTimeMs,\n\t});\n\n\tconsole.log('✅ Message signed successfully');\n\n\tSwiftClient.init(swiftServerUrl, 'common-ts-cli');\n\n\tconst swiftOrderObservable = sendSwiftOrder({\n\t\tdriftClient: centralServerDrift.driftClient,\n\t\tmarketId: MarketId.createPerpMarket(swiftMessage.marketIndex),\n\t\thexEncodedSwiftOrderMessageString:\n\t\t\tswiftMessage.hexEncodedSwiftOrderMessage.string,\n\t\tsignedMessage,\n\t\tsignedMsgOrderUuid: swiftMessage.signedMsgOrderUuid,\n\t\ttakerAuthority: wallet.publicKey,\n\t\tsigningAuthority: wallet.publicKey,\n\t\tslotsTillAuctionEnd: swiftMessage.slotsTillAuctionEnd,\n\t});\n\n\tawait new Promise<void>((resolve, reject) => {\n\t\tconst subscription = swiftOrderObservable.subscribe({\n\t\t\tnext: (event) => {\n\t\t\t\tif (event.type === 'sent') {\n\t\t\t\t\tconsole.log(`✅ ${orderType} Swift order submitted successfully`);\n\t\t\t\t}\n\t\t\t\tif (event.type === 'confirmed') {\n\t\t\t\t\tconsole.log('✅ Order confirmed!');\n\t\t\t\t\tconsole.log(`📋 Order ID: ${event.orderId}`);\n\t\t\t\t\tconsole.log(`📋 Hash: ${event.hash}`);\n\t\t\t\t\tsubscription.unsubscribe();\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t\tif (event.type === 'expired') {\n\t\t\t\t\tconsole.error('⏰ Order expired:', event.message);\n\t\t\t\t\tsubscription.unsubscribe();\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t\tif (event.type === 'errored') {\n\t\t\t\t\tconsole.error('❌ Order failed:', event.message);\n\t\t\t\t\tsubscription.unsubscribe();\n\t\t\t\t\tresolve();\n\t\t\t\t}\n\t\t\t},\n\t\t\terror: (err) => {\n\t\t\t\tconsole.error('❌ Observable error:', err);\n\t\t\t\treject(err);\n\t\t\t},\n\t\t});\n\t});\n\n\tconsole.log('🏁 Order monitoring completed');\n}\n\n/**\n * CLI Command: deposit\n */\nasync function depositCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndex = parseInt(args.marketIndex as string);\n\tconst amount = args.amount as string;\n\tconst fromWallet = args.fromWallet as string | undefined;\n\n\tif (!userAccount || isNaN(marketIndex) || !amount) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndex, --amount'\n\t\t);\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst amountBN = parseAmount(amount, QUOTE_PRECISION); // Most deposits are USDC (quote precision)\n\n\tconsole.log('--- 📥 Deposit Transaction ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Index: ${marketIndex}`);\n\tconsole.log(`💰 Amount: ${amount} (${amountBN.toString()} raw units)`);\n\n\t// Parse external wallet if provided\n\tconst externalWallet = fromWallet ? new PublicKey(fromWallet) : undefined;\n\tif (externalWallet) {\n\t\tconsole.log(`💼 From External Wallet: ${externalWallet.toBase58()}`);\n\t}\n\n\tconst depositTxn = await centralServerDrift.getDepositTxn(\n\t\tuserAccountPubkey,\n\t\tamountBN,\n\t\tmarketIndex,\n\t\t{\n\t\t\texternalWallet,\n\t\t}\n\t);\n\n\tawait executeTransaction(depositTxn as VersionedTransaction, 'Deposit');\n}\n\n/**\n * CLI Command: createUserAndDeposit\n */\nasync function createUserAndDepositCommand(args: CliArgs): Promise<void> {\n\tconst marketIndexArg = args.marketIndex as string;\n\tconst amountArg = args.amount as string;\n\tconst referrerName = args.referrerName as string | undefined;\n\tconst accountName = args.accountName as string | undefined;\n\tconst poolIdArg = args.poolId as string | undefined;\n\tconst fromSubAccountIdArg = args.fromSubAccountId as string | undefined;\n\tconst customMaxMarginRatioArg = args.customMaxMarginRatio as\n\t\t| string\n\t\t| undefined;\n\tconst fromWallet = args.fromWallet as string | undefined;\n\tconst forAuthority = args.forAuthority as string | undefined;\n\n\tif (!marketIndexArg || !amountArg) {\n\t\tthrow new Error('Required arguments: --marketIndex, --amount');\n\t}\n\n\t// If external wallet is provided, authority must also be specified\n\tif (fromWallet && !forAuthority) {\n\t\tthrow new Error(\n\t\t\t'When using --fromWallet, you must also specify --forAuthority (the account owner)'\n\t\t);\n\t}\n\n\tconst marketIndex = parseInt(marketIndexArg, 10);\n\tif (isNaN(marketIndex)) {\n\t\tthrow new Error(`Invalid marketIndex: ${marketIndexArg}`);\n\t}\n\n\tconst precision = getMarketPrecision(marketIndex, true);\n\tconst amountBN = parseAmount(amountArg, precision);\n\n\tconst options: {\n\t\treferrerName?: string;\n\t\taccountName?: string;\n\t\tpoolId?: number;\n\t\tfromSubAccountId?: number;\n\t\tcustomMaxMarginRatio?: number;\n\t\texternalWallet?: PublicKey;\n\t} = {};\n\n\tif (referrerName) {\n\t\toptions.referrerName = referrerName;\n\t}\n\n\tif (accountName) {\n\t\toptions.accountName = accountName;\n\t}\n\n\tif (poolIdArg !== undefined) {\n\t\tconst poolId = parseInt(poolIdArg, 10);\n\t\tif (isNaN(poolId)) {\n\t\t\tthrow new Error(`Invalid poolId: ${poolIdArg}`);\n\t\t}\n\t\toptions.poolId = poolId;\n\t}\n\n\tif (fromSubAccountIdArg !== undefined) {\n\t\tconst fromSubAccountId = parseInt(fromSubAccountIdArg, 10);\n\t\tif (isNaN(fromSubAccountId)) {\n\t\t\tthrow new Error(`Invalid fromSubAccountId: ${fromSubAccountIdArg}`);\n\t\t}\n\t\toptions.fromSubAccountId = fromSubAccountId;\n\t}\n\n\tif (customMaxMarginRatioArg !== undefined) {\n\t\tconst customMaxMarginRatio = parseFloat(customMaxMarginRatioArg);\n\t\tif (isNaN(customMaxMarginRatio)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid customMaxMarginRatio: ${customMaxMarginRatioArg}`\n\t\t\t);\n\t\t}\n\t\toptions.customMaxMarginRatio = customMaxMarginRatio;\n\t}\n\n\t// Parse external wallet and authority if provided\n\tconst externalWallet = fromWallet ? new PublicKey(fromWallet) : undefined;\n\tconst authority = forAuthority\n\t\t? new PublicKey(forAuthority)\n\t\t: wallet.publicKey;\n\tif (externalWallet) {\n\t\toptions.externalWallet = externalWallet;\n\t}\n\n\tconsole.log('--- 🆕 Create User & Deposit Transaction ---');\n\tconsole.log(`🔑 Authority (account owner): ${authority.toString()}`);\n\tconsole.log(`🏪 Spot Market Index: ${marketIndex}`);\n\tconsole.log(\n\t\t`💰 Initial Deposit: ${amountArg} (${amountBN.toString()} raw units)`\n\t);\n\tif (options.accountName) {\n\t\tconsole.log(`📝 Account Name: ${options.accountName}`);\n\t}\n\tif (options.referrerName) {\n\t\tconsole.log(`🙌 Referrer Name: ${options.referrerName}`);\n\t}\n\tif (options.poolId !== undefined) {\n\t\tconsole.log(`🏊 Pool ID: ${options.poolId}`);\n\t}\n\tif (options.fromSubAccountId !== undefined) {\n\t\tconsole.log(`🔁 Funding From Subaccount ID: ${options.fromSubAccountId}`);\n\t}\n\tif (options.customMaxMarginRatio !== undefined) {\n\t\tconsole.log(`📐 Custom Max Margin Ratio: ${options.customMaxMarginRatio}`);\n\t}\n\tif (externalWallet) {\n\t\tconsole.log(`💼 From External Wallet: ${externalWallet.toBase58()}`);\n\t}\n\n\tconst hasOptions = Object.keys(options).length > 0;\n\tconst { transaction, userAccountPublicKey, subAccountId } =\n\t\tawait centralServerDrift.getCreateAndDepositTxn(\n\t\t\tauthority,\n\t\t\tamountBN,\n\t\t\tmarketIndex,\n\t\t\thasOptions ? options : undefined\n\t\t);\n\n\tconsole.log(`🆔 New User Account: ${userAccountPublicKey.toString()}`);\n\tconsole.log(`🧾 Subaccount ID: ${subAccountId}`);\n\n\tawait executeTransaction(\n\t\ttransaction as VersionedTransaction,\n\t\t'Create User & Deposit'\n\t);\n}\n\n/**\n * CLI Command: withdraw\n */\nasync function withdrawCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndex = parseInt(args.marketIndex as string);\n\tconst amount = args.amount as string;\n\tconst isBorrow = args.isBorrow === 'true';\n\tconst isMax = args.isMax === 'true';\n\n\tif (!userAccount || isNaN(marketIndex) || !amount) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndex, --amount'\n\t\t);\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst amountBN = parseAmount(amount, QUOTE_PRECISION);\n\n\tconsole.log('--- 📤 Withdraw Transaction ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Index: ${marketIndex}`);\n\tconsole.log(`💰 Amount: ${amount} (${amountBN.toString()} raw units)`);\n\tconsole.log(`💳 Is Borrow: ${isBorrow}`);\n\tconsole.log(`📊 Is Max: ${isMax}`);\n\n\tconst withdrawTxn = await centralServerDrift.getWithdrawTxn(\n\t\tuserAccountPubkey,\n\t\tamountBN,\n\t\tmarketIndex,\n\t\t{ isBorrow, isMax }\n\t);\n\n\tawait executeTransaction(withdrawTxn as VersionedTransaction, 'Withdraw');\n}\n\n/**\n * CLI Command: settleFunding\n */\nasync function settleFundingCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\n\tif (!userAccount) {\n\t\tthrow new Error('Required arguments: --userAccount');\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\n\tconsole.log('--- 💰 Settle Funding Transaction ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\n\tconst settleFundingTxn = await centralServerDrift.getSettleFundingTxn(\n\t\tuserAccountPubkey\n\t);\n\n\tawait executeTransaction(\n\t\tsettleFundingTxn as VersionedTransaction,\n\t\t'Settle Funding'\n\t);\n}\n\n/**\n * CLI Command: settlePnl\n */\nasync function settlePnlCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndexesArg = args.marketIndexes;\n\n\tif (!userAccount || !marketIndexesArg) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndexes (comma-separated)'\n\t\t);\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst marketIndexes = Array.isArray(marketIndexesArg)\n\t\t? marketIndexesArg.map((idx) => parseInt(idx))\n\t\t: [parseInt(marketIndexesArg as string)];\n\n\tconsole.log('--- 📈 Settle PnL Transaction ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`📊 Market Indexes: ${marketIndexes.join(', ')}`);\n\n\tconst settlePnlTxn = await centralServerDrift.getSettlePnlTxn(\n\t\tuserAccountPubkey,\n\t\tmarketIndexes\n\t);\n\n\tawait executeTransaction(settlePnlTxn as VersionedTransaction, 'Settle PnL');\n}\n\n/**\n * CLI Command: openPerpMarketOrder (regular transaction)\n */\nasync function openPerpMarketOrderCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndex = parseInt(args.marketIndex as string);\n\tconst direction = args.direction as string;\n\tconst amount = args.amount as string;\n\tconst assetType = (args.assetType as string) || 'base';\n\tconst dlobServerHttpUrl = API_URLS.DLOB;\n\n\tif (!userAccount || isNaN(marketIndex) || !direction || !amount) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndex, --direction, --amount'\n\t\t);\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst directionEnum = parseDirection(direction);\n\tconst precision = assetType === 'base' ? BASE_PRECISION : QUOTE_PRECISION;\n\tconst amountBN = parseAmount(amount, precision);\n\n\tconsole.log('--- 🎯 Open Perp Order Transaction ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Index: ${marketIndex}`);\n\tconsole.log(\n\t\t`📊 Direction: ${direction} (${ENUM_UTILS.toStr(directionEnum)})`\n\t);\n\tconsole.log(`💰 Amount: ${amount} (${amountBN.toString()} raw units)`);\n\tconsole.log(`💱 Asset Type: ${assetType}`);\n\tconsole.log(`🌐 DLOB Server: ${dlobServerHttpUrl}`);\n\n\tconst orderTxn = await centralServerDrift.getOpenPerpMarketOrderTxn({\n\t\tuserAccountPublicKey: userAccountPubkey,\n\t\tassetType: assetType as 'base' | 'quote',\n\t\tmarketIndex,\n\t\tdirection: directionEnum,\n\t\tamount: amountBN,\n\t\tuseSwift: false,\n\t\tpositionMaxLeverage: 10,\n\t});\n\n\tawait executeTransaction(orderTxn as VersionedTransaction, 'Open Perp Order');\n}\n\n/**\n * CLI Command: openPerpMarketOrderSwift (Swift signed message order)\n */\nasync function openPerpMarketOrderSwiftCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndex = parseInt(args.marketIndex as string);\n\tconst direction = args.direction as string;\n\tconst amount = args.amount as string;\n\tconst assetType = (args.assetType as string) || 'base';\n\tconst dlobServerHttpUrl = API_URLS.DLOB;\n\tconst swiftServerUrl = (args.swiftServerUrl as string) || API_URLS.SWIFT;\n\n\tif (!userAccount || isNaN(marketIndex) || !direction || !amount) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndex, --direction, --amount'\n\t\t);\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst directionEnum = parseDirection(direction);\n\tconst precision = assetType === 'base' ? BASE_PRECISION : QUOTE_PRECISION;\n\tconst amountBN = parseAmount(amount, precision);\n\n\tconsole.log('--- ⚡ Open Perp Order Swift ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Index: ${marketIndex}`);\n\tconsole.log(\n\t\t`📊 Direction: ${direction} (${ENUM_UTILS.toStr(directionEnum)})`\n\t);\n\tconsole.log(`💰 Amount: ${amount} (${amountBN.toString()} raw units)`);\n\tconsole.log(`💱 Asset Type: ${assetType}`);\n\tconsole.log(`🌐 DLOB Server: ${dlobServerHttpUrl}`);\n\tconsole.log(`⚡ Swift Server: ${swiftServerUrl}`);\n\tconsole.log(`🔑 Wallet Public Key: ${wallet.publicKey.toString()}`);\n\n\tconsole.log('\\n👁️ Monitoring order status...');\n\n\ttry {\n\t\tconst swiftMessage = await centralServerDrift.getOpenPerpMarketOrderTxn({\n\t\t\tuserAccountPublicKey: userAccountPubkey,\n\t\t\tassetType: assetType as 'base' | 'quote',\n\t\t\tmarketIndex,\n\t\t\tdirection: directionEnum,\n\t\t\tamount: amountBN,\n\t\t\tuseSwift: true,\n\t\t\tpositionMaxLeverage: 10,\n\t\t});\n\n\t\tawait signAndSendSwiftOrderMessage(\n\t\t\tswiftMessage,\n\t\t\twallet,\n\t\t\tcentralServerDrift,\n\t\t\tswiftServerUrl,\n\t\t\t'Open Perp Order'\n\t\t);\n\t\tconsole.log('✅ [CLI] Swift order finished');\n\t} catch (error) {\n\t\tconsole.error('❌ [CLI] Error creating Swift order:', error);\n\t\tthrow error;\n\t}\n}\n\n/**\n * CLI Command: openPerpNonMarketOrder (regular limit/oracle order)\n */\nasync function openPerpNonMarketOrderCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndex = parseInt(args.marketIndex as string);\n\tconst direction = args.direction as string;\n\tconst amount = args.amount as string;\n\tconst assetType = (args.assetType as string) || 'base';\n\tconst baseAssetAmount = args.baseAssetAmount as string;\n\tconst orderType = args.orderType as NonMarketOrderType;\n\tconst limitPrice = args.limitPrice as string;\n\tconst triggerPrice = args.triggerPrice as string;\n\tconst reduceOnly = (args.reduceOnly as string) === 'true';\n\tconst postOnly = (args.postOnly as string) || 'none';\n\tconst oraclePriceOffset = args.oraclePriceOffset as string;\n\n\tif (!userAccount || isNaN(marketIndex) || !direction || !orderType) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndex, --direction, --orderType'\n\t\t);\n\t}\n\n\tif (!amount && !baseAssetAmount) {\n\t\tthrow new Error('Either --amount or --baseAssetAmount must be provided');\n\t}\n\n\t// Validate price requirements based on order type\n\tif (orderType === 'limit') {\n\t\tif (!limitPrice) {\n\t\t\tthrow new Error(`Order type '${orderType}' requires --limitPrice`);\n\t\t}\n\t} else if (orderType === 'takeProfit' || orderType === 'stopLoss') {\n\t\tif (!triggerPrice) {\n\t\t\tthrow new Error(`Order type '${orderType}' requires --triggerPrice`);\n\t\t}\n\t} else if (orderType === 'oracleLimit') {\n\t\tif (!oraclePriceOffset) {\n\t\t\tthrow new Error(`Order type '${orderType}' requires --oraclePriceOffset`);\n\t\t}\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst directionEnum = parseDirection(direction);\n\tconst postOnlyEnum = parsePostOnly(postOnly);\n\tconst limitPriceBN = limitPrice\n\t\t? parseAmount(limitPrice, PRICE_PRECISION)\n\t\t: undefined;\n\tconst triggerPriceBN = triggerPrice\n\t\t? parseAmount(triggerPrice, PRICE_PRECISION)\n\t\t: undefined;\n\tconst oraclePriceOffsetBN = oraclePriceOffset\n\t\t? parseAmount(oraclePriceOffset, PRICE_PRECISION)\n\t\t: undefined;\n\n\tconst orderConfig: NonMarketOrderParamsConfig['orderConfig'] =\n\t\torderType === 'limit'\n\t\t\t? {\n\t\t\t\t\torderType,\n\t\t\t\t\tlimitPrice: limitPriceBN!,\n\t\t\t }\n\t\t\t: orderType === 'takeProfit' || orderType === 'stopLoss'\n\t\t\t? {\n\t\t\t\t\torderType,\n\t\t\t\t\ttriggerPrice: triggerPriceBN!,\n\t\t\t }\n\t\t\t: {\n\t\t\t\t\torderType,\n\t\t\t\t\toraclePriceOffset: oraclePriceOffsetBN!,\n\t\t\t };\n\n\tconsole.log('--- 📋 Open Perp Non-Market Order ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Index: ${marketIndex}`);\n\tconsole.log(\n\t\t`📊 Direction: ${direction} (${ENUM_UTILS.toStr(directionEnum)})`\n\t);\n\n\tlet amountBN: BN;\n\tif (amount) {\n\t\tconst precision = assetType === 'base' ? BASE_PRECISION : QUOTE_PRECISION;\n\t\tamountBN = parseAmount(amount, precision);\n\t\tconsole.log(`💰 Amount: ${amount} (${amountBN.toString()} raw units)`);\n\t\tconsole.log(`💱 Asset Type: ${assetType}`);\n\t} else {\n\t\tamountBN = parseAmount(baseAssetAmount, BASE_PRECISION);\n\t\tconsole.log(\n\t\t\t`💰 Base Asset Amount: ${baseAssetAmount} (${amountBN.toString()} raw units)`\n\t\t);\n\t}\n\n\tif (limitPriceBN) {\n\t\tconsole.log(\n\t\t\t`💵 Limit Price: ${limitPrice} (${limitPriceBN.toString()} raw units)`\n\t\t);\n\t}\n\tif (triggerPriceBN) {\n\t\tconsole.log(\n\t\t\t`🎯 Trigger Price: ${triggerPrice} (${triggerPriceBN.toString()} raw units)`\n\t\t);\n\t}\n\tconsole.log(`📝 Order Type: ${orderType}`);\n\tconsole.log(`🔄 Reduce Only: ${reduceOnly}`);\n\tconsole.log(`📌 Post Only: ${postOnly} (${ENUM_UTILS.toStr(postOnlyEnum)})`);\n\n\t// Just call the main method - it will handle both approaches internally\n\tconst orderTxn = await centralServerDrift.getOpenPerpNonMarketOrderTxn({\n\t\tuserAccountPublicKey: userAccountPubkey,\n\t\tmarketIndex,\n\t\tdirection: directionEnum,\n\t\torderConfig,\n\t\tuseSwift: false,\n\t\treduceOnly,\n\t\tpostOnly: postOnlyEnum,\n\t\tassetType: assetType as 'base' | 'quote',\n\t\tamount: amountBN,\n\t\tpositionMaxLeverage: 10,\n\t});\n\n\tawait executeTransaction(\n\t\torderTxn as VersionedTransaction,\n\t\t'Open Perp Non-Market Order'\n\t);\n}\n\n/**\n * CLI Command: openPerpNonMarketOrderSwift (Swift signed message limit order)\n */\nasync function openPerpNonMarketOrderSwiftCommand(\n\targs: CliArgs\n): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketIndex = parseInt(args.marketIndex as string);\n\tconst direction = args.direction as string;\n\tconst amount = args.amount as string;\n\tconst assetType = (args.assetType as string) || 'base';\n\tconst baseAssetAmount = args.baseAssetAmount as string;\n\tconst orderType = args.orderType as NonMarketOrderType;\n\tconst limitPrice = args.limitPrice as string;\n\tconst reduceOnly = (args.reduceOnly as string) === 'true';\n\tconst postOnly = (args.postOnly as string) || 'none';\n\tconst swiftServerUrl = API_URLS.SWIFT;\n\n\tif (!userAccount || isNaN(marketIndex) || !direction || !orderType) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --marketIndex, --direction, --orderType'\n\t\t);\n\t}\n\n\tif (!amount && !baseAssetAmount) {\n\t\tthrow new Error('Either --amount or --baseAssetAmount must be provided');\n\t}\n\n\t// Swift orders only support LIMIT order type\n\tif (orderType.toLowerCase() !== 'limit') {\n\t\tthrow new Error('Swift orders only support LIMIT order type');\n\t}\n\n\t// LIMIT orders require limitPrice\n\tif (!limitPrice) {\n\t\tthrow new Error('LIMIT orders require --limitPrice');\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst directionEnum = parseDirection(direction);\n\tconst postOnlyEnum = parsePostOnly(postOnly);\n\tconst limitPriceBN = parseAmount(limitPrice, PRICE_PRECISION);\n\n\tconst orderConfig: LimitOrderParamsOrderConfig = {\n\t\torderType: 'limit',\n\t\tlimitPrice: limitPriceBN!,\n\t};\n\n\tconsole.log('--- ⚡ Open Perp Non-Market Order Swift ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Index: ${marketIndex}`);\n\tconsole.log(\n\t\t`📊 Direction: ${direction} (${ENUM_UTILS.toStr(directionEnum)})`\n\t);\n\n\tlet amountBN: BN;\n\tif (amount) {\n\t\tconst precision = assetType === 'base' ? BASE_PRECISION : QUOTE_PRECISION;\n\t\tamountBN = parseAmount(amount, precision);\n\t\tconsole.log(`💰 Amount: ${amount} (${amountBN.toString()} raw units)`);\n\t\tconsole.log(`💱 Asset Type: ${assetType}`);\n\t} else {\n\t\tamountBN = parseAmount(baseAssetAmount, BASE_PRECISION);\n\t\tconsole.log(\n\t\t\t`💰 Base Asset Amount: ${baseAssetAmount} (${amountBN.toString()} raw units)`\n\t\t);\n\t}\n\n\tconsole.log(\n\t\t`💵 Limit Price: ${limitPrice} (${limitPriceBN.toString()} raw units)`\n\t);\n\tconsole.log(`📝 Order Type: ${orderType})`);\n\tconsole.log(`🔄 Reduce Only: ${reduceOnly}`);\n\tconsole.log(`📌 Post Only: ${postOnly} (${ENUM_UTILS.toStr(postOnlyEnum)})`);\n\tconsole.log(`⚡ Swift Server: ${swiftServerUrl}`);\n\tconsole.log(`🔑 Wallet Public Key: ${wallet.publicKey.toString()}`);\n\n\ttry {\n\t\tconsole.log('\\n👁️ Monitoring order status...');\n\n\t\tconst swiftMessage = await centralServerDrift.getOpenPerpNonMarketOrderTxn({\n\t\t\tuserAccountPublicKey: userAccountPubkey,\n\t\t\tmarketIndex,\n\t\t\tdirection: directionEnum,\n\t\t\torderConfig,\n\t\t\treduceOnly,\n\t\t\tpostOnly: postOnlyEnum,\n\t\t\tassetType: assetType as 'base' | 'quote',\n\t\t\tamount: amountBN,\n\t\t\tuseSwift: true,\n\t\t\tpositionMaxLeverage: 10,\n\t\t});\n\n\t\tawait signAndSendSwiftOrderMessage(\n\t\t\tswiftMessage,\n\t\t\twallet,\n\t\t\tcentralServerDrift,\n\t\t\tswiftServerUrl,\n\t\t\t'Open Perp Non-Market Order'\n\t\t);\n\n\t\tconsole.log('✅ [CLI] Swift order finished');\n\t} catch (error) {\n\t\tconsole.error('❌ [CLI] Error creating Swift non-market order:', error);\n\t\tthrow error;\n\t}\n}\n\n/**\n * Show CLI usage information\n */\nfunction showUsage(): void {\n\tconsole.log('📋 Drift CLI Usage');\n\tconsole.log('');\n\tconsole.log('Available Commands:');\n\tconsole.log('');\n\n\tconsole.log('💰 deposit');\n\tconsole.log(\n\t\t' ts-node cli.ts deposit --userAccount=<pubkey> --marketIndex=<num> --amount=<num> [--fromWallet=<pubkey>]'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts deposit --userAccount=11111111111111111111111111111111 --marketIndex=0 --amount=100'\n\t);\n\tconsole.log(\n\t\t' Example (external wallet): ts-node cli.ts deposit --userAccount=11111111111111111111111111111111 --marketIndex=0 --amount=100 --fromWallet=22222222222222222222222222222222'\n\t);\n\tconsole.log('');\n\n\tconsole.log('🆕 createUserAndDeposit');\n\tconsole.log(\n\t\t' ts-node cli.ts createUserAndDeposit --marketIndex=<num> --amount=<num> [--accountName=<string>] [--referrerName=<string>] [--poolId=<num>] [--fromSubAccountId=<num>] [--customMaxMarginRatio=<num>] [--fromWallet=<pubkey> --forAuthority=<pubkey>]'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts createUserAndDeposit --marketIndex=0 --amount=100 --accountName=\"Primary\"'\n\t);\n\tconsole.log(\n\t\t' Example (external wallet): ts-node cli.ts createUserAndDeposit --marketIndex=0 --amount=100 --fromWallet=22222222222222222222222222222222 --forAuthority=33333333333333333333333333333333'\n\t);\n\tconsole.log('');\n\n\tconsole.log('💸 withdraw');\n\tconsole.log(\n\t\t' ts-node cli.ts withdraw --userAccount=<pubkey> --marketIndex=<num> --amount=<num> [--isBorrow=<bool>] [--isMax=<bool>]'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts withdraw --userAccount=11111111111111111111111111111111 --marketIndex=0 --amount=50'\n\t);\n\tconsole.log('');\n\n\tconsole.log('🏦 settleFunding');\n\tconsole.log(' ts-node cli.ts settleFunding --userAccount=<pubkey>');\n\tconsole.log(\n\t\t' Example: ts-node cli.ts settleFunding --userAccount=11111111111111111111111111111111'\n\t);\n\tconsole.log('');\n\n\tconsole.log('📊 settlePnl');\n\tconsole.log(\n\t\t' ts-node cli.ts settlePnl --userAccount=<pubkey> --marketIndexes=<comma-separated>'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts settlePnl --userAccount=11111111111111111111111111111111 --marketIndexes=0,1'\n\t);\n\tconsole.log('');\n\n\tconsole.log('🎯 openPerpMarketOrder');\n\tconsole.log(\n\t\t' ts-node cli.ts openPerpMarketOrder --userAccount=<pubkey> --marketIndex=<num> --direction=<long|short> --amount=<num> [--assetType=<base|quote>]'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts openPerpMarketOrder --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=long --amount=0.1 --assetType=base'\n\t);\n\tconsole.log('');\n\n\tconsole.log('⚡ openPerpMarketOrderSwift');\n\tconsole.log(\n\t\t' ts-node cli.ts openPerpMarketOrderSwift --userAccount=<pubkey> --marketIndex=<num> --direction=<long|short> --amount=<num> [--assetType=<base|quote>]'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts openPerpMarketOrderSwift --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=short --amount=100 --assetType=quote'\n\t);\n\tconsole.log('');\n\n\tconsole.log('📋 openPerpNonMarketOrder');\n\tconsole.log(\n\t\t' ts-node cli.ts openPerpNonMarketOrder --userAccount=<pubkey> --marketIndex=<num> --direction=<long|short> --amount=<num> [--assetType=<base|quote>] --orderType=<limit|trigger_limit|trigger_market|oracle> [--limitPrice=<num>] [--triggerPrice=<num>] [--reduceOnly=<true|false>] [--postOnly=<none|must_post_only|try_post_only|slide>]'\n\t);\n\tconsole.log(\n\t\t' New LIMIT: ts-node cli.ts openPerpNonMarketOrder --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=long --amount=0.1 --assetType=base --orderType=limit --limitPrice=100'\n\t);\n\tconsole.log(\n\t\t' New QUOTE: ts-node cli.ts openPerpNonMarketOrder --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=long --amount=100 --assetType=quote --orderType=limit --limitPrice=100'\n\t);\n\tconsole.log(\n\t\t' Legacy: ts-node cli.ts openPerpNonMarketOrder --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=long --baseAssetAmount=0.1 --orderType=limit --limitPrice=100'\n\t);\n\tconsole.log('');\n\n\tconsole.log('⚡ openPerpNonMarketOrderSwift');\n\tconsole.log(\n\t\t' ts-node cli.ts openPerpNonMarketOrderSwift --userAccount=<pubkey> --marketIndex=<num> --direction=<long|short> --amount=<num> [--assetType=<base|quote>] --orderType=limit --limitPrice=<num> [--reduceOnly=<true|false>] [--postOnly=<none|must_post_only|try_post_only|slide>]'\n\t);\n\tconsole.log(\n\t\t' New: ts-node cli.ts openPerpNonMarketOrderSwift --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=long --amount=0.1 --assetType=base --orderType=limit --limitPrice=99.5'\n\t);\n\tconsole.log(\n\t\t' Legacy: ts-node cli.ts openPerpNonMarketOrderSwift --userAccount=11111111111111111111111111111111 --marketIndex=0 --direction=long --baseAssetAmount=0.1 --orderType=limit --limitPrice=99.5'\n\t);\n\tconsole.log('');\n\n\tconsole.log('✏️ editOrder');\n\tconsole.log(\n\t\t' ts-node cli.ts editOrder --userAccount=<pubkey> --orderId=<num> [--newDirection=<long|short>] [--newBaseAmount=<num>] [--newLimitPrice=<num>] [--newTriggerPrice=<num>] [--reduceOnly=<true|false>] [--postOnly=<true|false>]'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts editOrder --userAccount=11111111111111111111111111111111 --orderId=123 --newLimitPrice=105.5'\n\t);\n\tconsole.log('');\n\n\tconsole.log('❌ cancelOrder');\n\tconsole.log(\n\t\t' ts-node cli.ts cancelOrder --userAccount=<pubkey> --orderIds=<comma-separated-list>'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts cancelOrder --userAccount=11111111111111111111111111111111 --orderIds=123,456,789'\n\t);\n\tconsole.log('');\n\n\tconsole.log('🧹 cancelAllOrders');\n\tconsole.log(\n\t\t' ts-node cli.ts cancelAllOrders --userAccount=<pubkey> [--marketType=<perp|spot>] [--marketIndex=<num>] [--direction=<long|short>]'\n\t);\n\tconsole.log(\n\t\t' Example: ts-node cli.ts cancelAllOrders --userAccount=11111111111111111111111111111111 --marketType=perp'\n\t);\n\tconsole.log('');\n\n\tconsole.log('🔄 swap');\n\tconsole.log(\n\t\t' ts-node cli.ts swap --userAccount=<pubkey> --fromMarketIndex=<num> --toMarketIndex=<num> [--fromAmount=<num>] [--toAmount=<num>] [--slippage=<bps>] [--swapMode=<ExactIn|ExactOut>]'\n\t);\n\tconsole.log(\n\t\t' ExactIn: ts-node cli.ts swap --userAccount=11111111111111111111111111111111 --fromMarketIndex=1 --toMarketIndex=0 --fromAmount=1.5 --swapMode=ExactIn'\n\t);\n\tconsole.log(\n\t\t' ExactOut: ts-node cli.ts swap --userAccount=11111111111111111111111111111111 --fromMarketIndex=1 --toMarketIndex=0 --toAmount=150 --swapMode=ExactOut'\n\t);\n\tconsole.log('');\n\n\tconsole.log('Options:');\n\tconsole.log(' --help, -h Show this help message');\n\tconsole.log('');\n\tconsole.log('Notes:');\n\tconsole.log(\n\t\t' - Amounts are in human-readable format (e.g., 1.5 USDC, 0.1 SOL)'\n\t);\n\tconsole.log(' - Direction can be: long, short, buy, sell');\n\tconsole.log(\n\t\t' - Asset type: base (for native tokens like SOL) or quote (for USDC amounts)'\n\t);\n\tconsole.log(' - Swap modes:');\n\tconsole.log(\n\t\t' * ExactIn: Specify --fromAmount (how much input token to swap)'\n\t);\n\tconsole.log(\n\t\t' * ExactOut: Specify --toAmount (how much output token to receive)'\n\t);\n\tconsole.log(' - Ensure your .env file contains ANCHOR_WALLET and ENDPOINT');\n}\n\n/**\n * CLI Command: editOrder\n */\nasync function editOrderCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst orderId = parseInt(args.orderId as string);\n\tconst newDirection = args.newDirection as string;\n\tconst newBaseAmount = args.newBaseAmount as string;\n\tconst newLimitPrice = args.newLimitPrice as string;\n\tconst newTriggerPrice = args.newTriggerPrice as string;\n\tconst reduceOnly = (args.reduceOnly as string) === 'true';\n\tconst postOnly = (args.postOnly as string) === 'true';\n\n\tif (!userAccount || isNaN(orderId)) {\n\t\tthrow new Error('Required arguments: --userAccount, --orderId');\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst editParams: any = {};\n\n\tif (newDirection) {\n\t\teditParams.newDirection = parseDirection(newDirection);\n\t}\n\n\tif (newBaseAmount) {\n\t\teditParams.newBaseAmount = parseAmount(newBaseAmount, BASE_PRECISION);\n\t}\n\n\tif (newLimitPrice) {\n\t\teditParams.newLimitPrice = parseAmount(newLimitPrice, PRICE_PRECISION);\n\t}\n\n\tif (newTriggerPrice) {\n\t\teditParams.newTriggerPrice = parseAmount(newTriggerPrice, PRICE_PRECISION);\n\t}\n\n\tif (reduceOnly) {\n\t\teditParams.reduceOnly = true;\n\t}\n\n\tif (postOnly) {\n\t\teditParams.postOnly = true;\n\t}\n\n\tconsole.log('--- ✏️ Edit Order ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🆔 Order ID: ${orderId}`);\n\tconsole.log(`📝 Edit Parameters:`, editParams);\n\n\tconst editOrderTxn = await centralServerDrift.getEditOrderTxn(\n\t\tuserAccountPubkey,\n\t\torderId,\n\t\teditParams\n\t);\n\n\tawait executeTransaction(editOrderTxn as VersionedTransaction, 'Edit Order');\n}\n\n/**\n * CLI Command: cancelOrder\n */\nasync function cancelOrderCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst orderIds = args.orderIds as string;\n\n\tif (!userAccount || !orderIds) {\n\t\tthrow new Error('Required arguments: --userAccount, --orderIds');\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tconst orderIdArray = orderIds.split(',').map((id) => parseInt(id.trim()));\n\n\tconsole.log('--- ❌ Cancel Orders ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🆔 Order IDs: ${orderIdArray.join(', ')}`);\n\n\tconst cancelOrderTxn = await centralServerDrift.getCancelOrdersTxn(\n\t\tuserAccountPubkey,\n\t\torderIdArray\n\t);\n\n\tawait executeTransaction(\n\t\tcancelOrderTxn as VersionedTransaction,\n\t\t'Cancel Orders'\n\t);\n}\n\n/**\n * CLI Command: cancelAllOrders\n */\nasync function cancelAllOrdersCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst marketType = args.marketType as string;\n\tconst marketIndex = args.marketIndex\n\t\t? parseInt(args.marketIndex as string)\n\t\t: undefined;\n\tconst direction = args.direction as string;\n\n\tif (!userAccount) {\n\t\tthrow new Error('Required arguments: --userAccount');\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\tlet marketTypeEnum = undefined;\n\tlet directionEnum = undefined;\n\n\tif (marketType) {\n\t\tmarketTypeEnum =\n\t\t\tmarketType.toLowerCase() === 'perp' ? { perp: {} } : { spot: {} };\n\t}\n\n\tif (direction) {\n\t\tdirectionEnum = parseDirection(direction);\n\t}\n\n\tconsole.log('--- 🧹 Cancel All Orders ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`🏪 Market Type Filter: ${marketType || 'none'}`);\n\tconsole.log(\n\t\t`📊 Market Index Filter: ${\n\t\t\tmarketIndex !== undefined ? marketIndex : 'none'\n\t\t}`\n\t);\n\tconsole.log(`📈 Direction Filter: ${direction || 'none'}`);\n\n\tconst cancelAllOrdersTxn = await centralServerDrift.getCancelAllOrdersTxn(\n\t\tuserAccountPubkey,\n\t\tmarketTypeEnum,\n\t\tmarketIndex,\n\t\tdirectionEnum\n\t);\n\n\tawait executeTransaction(\n\t\tcancelAllOrdersTxn as VersionedTransaction,\n\t\t'Cancel All Orders'\n\t);\n}\n\n/**\n * CLI Command: swap\n */\nasync function swapCommand(args: CliArgs): Promise<void> {\n\tconst userAccount = args.userAccount as string;\n\tconst fromMarketIndex = parseInt(args.fromMarketIndex as string);\n\tconst toMarketIndex = parseInt(args.toMarketIndex as string);\n\tconst fromAmount = args.fromAmount as string;\n\tconst toAmount = args.toAmount as string;\n\tconst slippage = args.slippage ? parseInt(args.slippage as string) : 10; // Default 0.1%\n\tconst swapMode = (args.swapMode as string) || 'ExactIn';\n\n\tif (!userAccount || isNaN(fromMarketIndex) || isNaN(toMarketIndex)) {\n\t\tthrow new Error(\n\t\t\t'Required arguments: --userAccount, --fromMarketIndex, --toMarketIndex'\n\t\t);\n\t}\n\n\tconst swapModeEnum = parseSwapMode(swapMode);\n\n\t// Validate amount parameters based on swap mode\n\tif (swapModeEnum === 'ExactIn') {\n\t\tif (!fromAmount) {\n\t\t\tthrow new Error('ExactIn swap mode requires --fromAmount');\n\t\t}\n\t\tif (toAmount) {\n\t\t\tconsole.warn(\n\t\t\t\t'⚠️ Warning: --toAmount ignored in ExactIn mode, using --fromAmount'\n\t\t\t);\n\t\t}\n\t} else if (swapModeEnum === 'ExactOut') {\n\t\tif (!toAmount) {\n\t\t\tthrow new Error('ExactOut swap mode requires --toAmount');\n\t\t}\n\t\tif (fromAmount) {\n\t\t\tconsole.warn(\n\t\t\t\t'⚠️ Warning: --fromAmount ignored in ExactOut mode, using --toAmount'\n\t\t\t);\n\t\t}\n\t}\n\n\tconst userAccountPubkey = new PublicKey(userAccount);\n\n\t// Use the appropriate amount based on swap mode\n\tconst amount = swapModeEnum === 'ExactIn' ? fromAmount : toAmount;\n\n\t// Determine which market to use for precision (input market for ExactIn, output market for ExactOut)\n\tconst precisionMarketIndex =\n\t\tswapModeEnum === 'ExactIn' ? fromMarketIndex : toMarketIndex;\n\n\t// Get the appropriate precision for the amount based on the market\n\tconst isMainnet = true; // Default to mainnet, could be made configurable\n\tconst precision = getMarketPrecision(precisionMarketIndex, isMainnet);\n\tconst amountBN = parseAmount(amount, precision);\n\n\tconsole.log('--- 🔄 Swap Transaction ---');\n\tconsole.log(`👤 User Account: ${userAccount}`);\n\tconsole.log(`📤 From Market Index: ${fromMarketIndex}`);\n\tconsole.log(`📥 To Market Index: ${toMarketIndex}`);\n\tconsole.log(`🔄 Swap Mode: ${swapMode}`);\n\tconsole.log(\n\t\t`🎯 Using precision from market ${precisionMarketIndex}: ${precision.toString()}`\n\t);\n\n\tif (swapModeEnum === 'ExactIn') {\n\t\tconsole.log(\n\t\t\t`💰 From Amount: ${fromAmount} (${amountBN.toString()} raw units)`\n\t\t);\n\t\tconsole.log(`💰 To Amount: Will be calculated based on quote`);\n\t} else {\n\t\tconsole.log(`💰 From Amount: Will be calculated based on quote`);\n\t\tconsole.log(`💰 To Amount: ${toAmount} (${amountBN.toString()} raw units)`);\n\t}\n\n\tconsole.log(`📊 Slippage: ${slippage} BPS (${slippage / 100}%)`);\n\n\tconst swapTxn = await centralServerDrift.getSwapTxn(\n\t\tuserAccountPubkey,\n\t\tfromMarketIndex,\n\t\ttoMarketIndex,\n\t\tamountBN,\n\t\t{\n\t\t\tslippageBps: slippage,\n\t\t\tswapMode: swapModeEnum,\n\t\t}\n\t);\n\n\tawait executeTransaction(swapTxn as VersionedTransaction, 'Swap');\n}\n\n/**\n * Main CLI entry point\n */\nasync function main(): Promise<void> {\n\tconst args = process.argv.slice(2);\n\n\tif (\n\t\targs.length === 0 ||\n\t\targs[0] === '--help' ||\n\t\targs[0] === '-h' ||\n\t\targs[0] === 'help'\n\t) {\n\t\tshowUsage();\n\t\treturn;\n\t}\n\n\tconst command = args[0];\n\tconst parsedArgs = parseArgs(args.slice(1));\n\n\t// Initialize the client first\n\tawait initializeCentralServerDrift();\n\n\t// Route to appropriate command\n\tswitch (command) {\n\t\tcase 'createUserAndDeposit':\n\t\t\tawait createUserAndDepositCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'deposit':\n\t\t\tawait depositCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'withdraw':\n\t\t\tawait withdrawCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'settleFunding':\n\t\t\tawait settleFundingCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'settlePnl':\n\t\t\tawait settlePnlCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'openPerpMarketOrder':\n\t\t\tawait openPerpMarketOrderCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'openPerpMarketOrderSwift':\n\t\t\tawait openPerpMarketOrderSwiftCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'openPerpNonMarketOrder':\n\t\t\tawait openPerpNonMarketOrderCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'openPerpNonMarketOrderSwift':\n\t\t\tawait openPerpNonMarketOrderSwiftCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'editOrder':\n\t\t\tawait editOrderCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'cancelOrder':\n\t\t\tawait cancelOrderCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'cancelAllOrders':\n\t\t\tawait cancelAllOrdersCommand(parsedArgs);\n\t\t\tbreak;\n\t\tcase 'swap':\n\t\t\tawait swapCommand(parsedArgs);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tconsole.error(`❌ Unknown command: ${command}`);\n\t\t\tconsole.error('');\n\t\t\tshowUsage();\n\t\t\tprocess.exit(1);\n\t}\n}\n\n// Run CLI if this file is executed directly\nif (require.main === module) {\n\tmain()\n\t\t.then(() => {\n\t\t\tconsole.log('\\n✨ Command executed successfully!');\n\t\t\t// Don't exit immediately for Swift orders (they need time to process)\n\t\t\tsetTimeout(() => process.exit(0), 2000);\n\t\t})\n\t\t.catch((error) => {\n\t\t\tconsole.error('\\n💥 Command failed:', error.message || error);\n\t\t\tprocess.exit(1);\n\t\t});\n}\n\nexport { main, parseArgs, parseAmount, parseDirection, parseSwapMode };\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@drift-labs/common",
3
- "version": "1.0.45",
3
+ "version": "1.0.47",
4
4
  "description": "Common functions for Drift",
5
5
  "main": "./lib/index.js",
6
6
  "types": "./lib/index.d.ts",
@@ -38,7 +38,7 @@
38
38
  "winston-slack-webhook-transport": "2.3.5"
39
39
  },
40
40
  "peerDependencies": {
41
- "@drift-labs/sdk": "^2.158.0-beta.0",
41
+ "@drift-labs/sdk": "^2.158.0-beta.3",
42
42
  "@solana/web3.js": "1.98.0"
43
43
  },
44
44
  "scripts": {