@nemesis-oss/binance-sdk 1.0.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +136 -8
- package/dist/index-BO27qOb5.d.cts +3887 -0
- package/dist/index-BO27qOb5.d.ts +3887 -0
- package/dist/index.cjs +2640 -629
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +62 -8
- package/dist/index.d.ts +62 -8
- package/dist/index.js +2536 -632
- package/dist/index.js.map +1 -1
- package/dist/mcp/index.cjs +2429 -632
- package/dist/mcp/index.cjs.map +1 -1
- package/dist/mcp/index.js +2430 -633
- package/dist/mcp/index.js.map +1 -1
- package/dist/tools/index.d.cts +2 -1
- package/dist/tools/index.d.ts +2 -1
- package/package.json +8 -3
- package/dist/index-D2T_Rhwj.d.cts +0 -2055
- package/dist/index-D2T_Rhwj.d.ts +0 -2055
package/dist/mcp/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/mcp/index.ts","../../src/client/HttpClient.ts","../../src/errors/BinanceError.ts","../../src/errors/BinanceAuthError.ts","../../src/errors/BinanceApiError.ts","../../src/errors/RateLimitError.ts","../../src/errors/NetworkError.ts","../../src/client/endpoints.ts","../../src/types/futures.types.ts","../../src/resources/FuturesData.ts","../../src/types/market.types.ts","../../src/resources/MarketDataBase.ts","../../src/resources/FuturesMarket.ts","../../src/resources/SpotMarket.ts","../../src/types/spot.types.ts","../../src/resources/SpotTrading.ts","../../src/types/userdata.types.ts","../../src/resources/SpotUserDataStream.ts","../../src/types/account.types.ts","../../src/resources/FuturesAccount.ts","../../src/types/trading.types.ts","../../src/resources/FuturesTrading.ts","../../src/types/filters.types.ts","../../src/resources/FuturesOps.ts","../../src/resources/UserDataStream.ts","../../src/ws/BaseWS.ts","../../src/types/ws.types.ts","../../src/ws/FuturesMarketWS.ts","../../src/ws/SpotMarketWS.ts","../../src/ws/SpotUserWS.ts","../../src/ws/FuturesUserWS.ts","../../src/ws/WsApi.ts","../../src/client/BinanceClient.ts","../../src/mcp/server.ts","../../src/tools/account.tools.ts","../../src/tools/types.ts","../../src/tools/derived.tools.ts","../../src/tools/market-data.tools.ts","../../src/tools/paper.tools.ts","../../src/tools/spot.tools.ts","../../src/tools/trading.tools.ts","../../src/tools/ws.tools.ts","../../src/tools/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport http from 'node:http';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { BinanceClient } from '../client/BinanceClient.js';\nimport { createBinanceMcpServer } from './server.js';\n\nfunction clientFromEnv(): BinanceClient {\n return new BinanceClient({\n apiKey: process.env.BINANCE_API_KEY,\n apiSecret: process.env.BINANCE_API_SECRET,\n testnet: process.env.BINANCE_TESTNET === 'true' || process.env.BINANCE_ENV === 'testnet',\n demo: process.env.BINANCE_ENV === 'demo',\n });\n}\n\nasync function startStdio(): Promise<void> {\n const server = createBinanceMcpServer(clientFromEnv());\n await server.connect(new StdioServerTransport());\n}\n\nfunction startHttp(): void {\n const port = Number(process.env.PORT || process.env.MCP_PORT || 3100);\n const server = http.createServer((req, res) => {\n res.setHeader('content-type', 'application/json');\n if (req.url === '/health') {\n res.end(JSON.stringify({ ok: true, name: 'binance-sdk-mcp' }));\n return;\n }\n res.statusCode = 501;\n res.end(JSON.stringify({ error: 'Use stdio for MCP JSON-RPC. HTTP health endpoint is available at /health.' }));\n });\n server.listen(port, () => console.error(`binance-sdk MCP HTTP health server listening on ${port}`));\n}\n\nif (process.argv.includes('--http') || process.env.MCP_TRANSPORT === 'http') startHttp();\nelse startStdio().catch((error) => {\n console.error(error);\n process.exit(1);\n});\n","import { createHmac } from 'node:crypto';\nimport axios, { type AxiosInstance, type AxiosRequestConfig } from 'axios';\nimport Bottleneck from 'bottleneck';\nimport { BinanceApiError, BinanceAuthError, NetworkError, RateLimitError } from '../errors/index.js';\n\nexport type AuthMode = 'public' | 'apiKey' | 'signed';\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE';\n\nexport interface HttpClientOptions {\n baseURL: string;\n apiKey?: string;\n apiSecret?: string;\n recvWindow?: number;\n timeoutMs?: number;\n maxRetries?: number;\n minTimeMs?: number;\n rateLimitTokensPerSecond?: number;\n rateLimitMaxTokens?: number;\n retryBaseDelayMs?: number;\n retryMaxDelayMs?: number;\n retryFactor?: number;\n}\n\ninterface BinanceErrorBody {\n code?: number;\n msg?: string;\n}\n\nconst RETRYABLE_STATUS = new Set([429, 418, 500, 502, 503, 504]);\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport class HttpClient {\n private readonly axios: AxiosInstance;\n private readonly limiter: Bottleneck;\n private readonly apiKey?: string;\n private readonly apiSecret?: string;\n private readonly recvWindow: number;\n private readonly timeoutMs: number;\n private maxRetries: number;\n private minTimeMs: number;\n private retryBaseDelayMs: number;\n private retryMaxDelayMs: number;\n private retryFactor: number;\n private pendingRequests = 0;\n\n constructor(options: HttpClientOptions) {\n this.apiKey = options.apiKey;\n this.apiSecret = options.apiSecret;\n this.recvWindow = options.recvWindow ?? 5000;\n this.timeoutMs = options.timeoutMs ?? 15_000;\n this.maxRetries = options.maxRetries ?? 3;\n this.minTimeMs = options.minTimeMs ?? 50;\n this.retryBaseDelayMs = options.retryBaseDelayMs ?? 1000;\n this.retryMaxDelayMs = options.retryMaxDelayMs ?? 30_000;\n this.retryFactor = options.retryFactor ?? 2;\n this.axios = axios.create({ baseURL: options.baseURL, timeout: this.timeoutMs });\n this.limiter = new Bottleneck({ minTime: this.minTimeMs });\n }\n\n async get<T>(path: string, params?: Record<string, unknown>, mode: AuthMode = 'public'): Promise<T> {\n return this.request<T>('GET', path, params, mode);\n }\n\n async post<T>(path: string, params?: Record<string, unknown>, mode: AuthMode = 'public'): Promise<T> {\n return this.request<T>('POST', path, params, mode);\n }\n\n async put<T>(path: string, params?: Record<string, unknown>, mode: AuthMode = 'public'): Promise<T> {\n return this.request<T>('PUT', path, params, mode);\n }\n\n async delete<T>(path: string, params?: Record<string, unknown>, mode: AuthMode = 'public'): Promise<T> {\n return this.request<T>('DELETE', path, params, mode);\n }\n\n getRateLimiterStatus(): { minTimeMs: number; queueLength: number } {\n return { minTimeMs: this.minTimeMs, queueLength: this.pendingRequests };\n }\n\n configureRateLimiter(options: { minTimeMs?: number }): void {\n if (options.minTimeMs !== undefined) {\n this.minTimeMs = options.minTimeMs;\n this.limiter.updateSettings({ minTime: this.minTimeMs });\n }\n }\n\n getRetryConfig(): {\n maxRetries: number;\n baseDelayMs: number;\n maxDelayMs: number;\n factor: number;\n } {\n return {\n maxRetries: this.maxRetries,\n baseDelayMs: this.retryBaseDelayMs,\n maxDelayMs: this.retryMaxDelayMs,\n factor: this.retryFactor,\n };\n }\n\n configureRetry(options: { maxRetries?: number; baseDelayMs?: number; maxDelayMs?: number; factor?: number }): void {\n if (options.maxRetries !== undefined) this.maxRetries = options.maxRetries;\n if (options.baseDelayMs !== undefined) this.retryBaseDelayMs = options.baseDelayMs;\n if (options.maxDelayMs !== undefined) this.retryMaxDelayMs = options.maxDelayMs;\n if (options.factor !== undefined) this.retryFactor = options.factor;\n }\n\n private async request<T>(\n method: HttpMethod,\n path: string,\n params: Record<string, unknown> | undefined,\n mode: AuthMode,\n ): Promise<T> {\n const url = this.buildUrl(path, params, mode);\n const config: AxiosRequestConfig = { method, url, headers: this.buildHeaders(mode) };\n return this.limiter.schedule(() => this.requestWithRetry<T>(config, 0));\n }\n\n private buildHeaders(mode: AuthMode): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'User-Agent': 'binance-sdk',\n };\n if (mode !== 'public') headers['X-MBX-APIKEY'] = this.requireApiKey();\n return headers;\n }\n\n private buildUrl(\n path: string,\n params: Record<string, unknown> | undefined,\n mode: AuthMode,\n ): string {\n if (mode !== 'signed') return this.appendQuery(path, params);\n const requestData = { ...params, timestamp: Date.now(), recvWindow: this.recvWindow };\n const queryString = this.buildQueryString(requestData);\n const signature = this.sign(queryString);\n return `${path}?${queryString}&signature=${signature}`;\n }\n\n private appendQuery(path: string, params: Record<string, unknown> | undefined): string {\n const queryString = this.buildQueryString(params);\n return queryString ? `${path}?${queryString}` : path;\n }\n\n private buildQueryString(params: Record<string, unknown> | undefined): string {\n if (!params) return '';\n return Object.entries(params)\n .filter(([, val]) => val !== undefined && val !== null)\n .map(([key, val]) => `${key}=${encodeURIComponent(String(val))}`)\n .join('&');\n }\n\n private sign(queryString: string): string {\n if (!this.apiSecret) throw new BinanceAuthError('apiSecret');\n return createHmac('sha256', this.apiSecret).update(queryString).digest('hex');\n }\n\n private requireApiKey(): string {\n if (!this.apiKey) throw new BinanceAuthError('apiKey');\n return this.apiKey;\n }\n\n private async requestWithRetry<T>(config: AxiosRequestConfig, attempt: number): Promise<T> {\n this.pendingRequests += 1;\n try {\n const res = await this.axios.request<T>(config);\n return res.data;\n } catch (err) {\n if (!axios.isAxiosError(err)) {\n throw new NetworkError('Unexpected error calling Binance API', err);\n }\n const status = err.response?.status;\n const body = err.response?.data as BinanceErrorBody | undefined;\n\n if (attempt < this.maxRetries && this.shouldRetry(err)) {\n await sleep(this.calculateDelay(attempt));\n return this.requestWithRetry<T>(config, attempt + 1);\n }\n\n if (status === 429 || status === 418) {\n throw new RateLimitError(body?.msg ?? 'Binance rate limit exceeded', body?.code ?? -1, status);\n }\n if (status && body) {\n throw new BinanceApiError(body.msg ?? 'Binance API error', body.code ?? -1, status);\n }\n throw new NetworkError(err.message, err);\n } finally {\n this.pendingRequests -= 1;\n }\n }\n\n private shouldRetry(err: { response?: { status?: number } }): boolean {\n if (err.response?.status !== undefined) return RETRYABLE_STATUS.has(err.response.status);\n return true;\n }\n\n private calculateDelay(attempt: number): number {\n const delay = Math.min(this.retryBaseDelayMs * this.retryFactor ** attempt, this.retryMaxDelayMs);\n const jitter = delay * 0.1 * (Math.random() * 2 - 1);\n return Math.max(0, delay + jitter);\n }\n}\n","export class BinanceError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'BinanceError';\n }\n}\n","import { BinanceError } from './BinanceError.js';\n\nexport class BinanceAuthError extends BinanceError {\n readonly missing: 'apiKey' | 'apiSecret';\n\n constructor(missing: 'apiKey' | 'apiSecret') {\n super(`API ${missing} required for authenticated requests`);\n this.name = 'BinanceAuthError';\n this.missing = missing;\n }\n}\n","import { BinanceError } from './BinanceError.js';\n\nexport class BinanceApiError extends BinanceError {\n readonly code: number;\n readonly status: number;\n\n constructor(message: string, code: number, status: number) {\n super(message);\n this.name = 'BinanceApiError';\n this.code = code;\n this.status = status;\n }\n}\n","import { BinanceApiError } from './BinanceApiError.js';\n\nexport class RateLimitError extends BinanceApiError {\n readonly retryAfterMs?: number;\n\n constructor(message: string, code: number, status: number, retryAfterMs?: number) {\n super(message, code, status);\n this.name = 'RateLimitError';\n this.retryAfterMs = retryAfterMs;\n }\n}\n","import { BinanceError } from './BinanceError.js';\n\nexport class NetworkError extends BinanceError {\n readonly cause?: unknown;\n\n constructor(message: string, cause?: unknown) {\n super(message);\n this.name = 'NetworkError';\n this.cause = cause;\n }\n}\n","export type Environment = 'live' | 'testnet' | 'demo';\n\nexport interface Endpoints {\n restRoot: string;\n restFapi: string;\n restFuturesData: string;\n restSpot: string;\n wsMarket: string;\n wsUser: string;\n wsApi: string;\n wsSpotMarket: string;\n wsSpotUser: string;\n}\n\nexport function resolveEnvironment(options?: {\n testnet?: boolean;\n demo?: boolean;\n apiBase?: string;\n wsBase?: string;\n wsUserBase?: string;\n wsApiBase?: string;\n}): { env: Environment; endpoints: Endpoints } {\n const env: Environment = options?.demo ? 'demo' : options?.testnet ? 'testnet' : 'live';\n\n const restHost =\n options?.apiBase ??\n (env === 'demo'\n ? 'https://demo-fapi.binance.com'\n : env === 'testnet'\n ? 'https://testnet.binancefuture.com'\n : 'https://fapi.binance.com');\n\n const wsMarketHost =\n options?.wsBase ??\n (env === 'demo'\n ? 'wss://demo-fstream.binance.com/stream'\n : env === 'testnet'\n ? 'wss://fstream.binancefuture.com/stream'\n : 'wss://fstream.binance.com/stream');\n\n const wsUserHost =\n options?.wsUserBase ??\n (env === 'demo'\n ? 'wss://demo-fstream.binance.com/ws'\n : env === 'testnet'\n ? 'wss://fstream.binancefuture.com/ws'\n : 'wss://fstream.binance.com/ws');\n\n const wsApiHost =\n options?.wsApiBase ??\n (env === 'demo'\n ? 'wss://demo-fapi.binance.com/ws-fapi/v1'\n : 'wss://ws-fapi.binance.com/ws-fapi/v1');\n\n const restSpotHost =\n options?.apiBase ??\n (env === 'testnet' ? 'https://testnet.binance.vision' : 'https://api.binance.com');\n\n const wsSpotMarketHost =\n options?.wsBase ??\n (env === 'testnet' ? 'wss://testnet.binance.vision/stream' : 'wss://stream.binance.com:9443/stream');\n\n const wsSpotUserHost =\n options?.wsUserBase ??\n (env === 'testnet' ? 'wss://testnet.binance.vision/ws' : 'wss://stream.binance.com:9443/ws');\n\n return {\n env,\n endpoints: {\n restRoot: restHost,\n restFapi: `${restHost}/fapi/v1`,\n restFuturesData: `${restHost}/futures/data`,\n restSpot: `${restSpotHost}/api/v3`,\n wsMarket: wsMarketHost,\n wsUser: wsUserHost,\n wsApi: wsApiHost,\n wsSpotMarket: wsSpotMarketHost,\n wsSpotUser: wsSpotUserHost,\n },\n };\n}\n","import { z } from 'zod';\n\nexport const FundingRateSchema = z.object({\n symbol: z.string(),\n fundingTime: z.number(),\n fundingRate: z.string().transform(Number),\n markPrice: z.string().transform(Number).optional(),\n});\nexport type FundingRate = z.infer<typeof FundingRateSchema>;\nexport const FundingRateHistorySchema = z.array(FundingRateSchema);\n\nexport const PremiumIndexSchema = z.object({\n symbol: z.string(),\n markPrice: z.string().transform(Number),\n indexPrice: z.string().transform(Number),\n estimatedSettlePrice: z.string().transform(Number),\n lastFundingRate: z.string().transform(Number),\n nextFundingTime: z.number(),\n interestRate: z.string().transform(Number),\n time: z.number(),\n});\nexport type PremiumIndex = z.infer<typeof PremiumIndexSchema>;\n\nexport const OpenInterestSchema = z.object({\n symbol: z.string(),\n openInterest: z.string().transform(Number),\n time: z.number(),\n});\nexport type OpenInterest = z.infer<typeof OpenInterestSchema>;\n\nexport const OpenInterestHistEntrySchema = z.object({\n symbol: z.string(),\n sumOpenInterest: z.string().transform(Number),\n sumOpenInterestValue: z.string().transform(Number),\n timestamp: z.number(),\n});\nexport type OpenInterestHistEntry = z.infer<typeof OpenInterestHistEntrySchema>;\nexport const OpenInterestHistSchema = z.array(OpenInterestHistEntrySchema);\n\nexport const LongShortRatioEntrySchema = z.object({\n symbol: z.string(),\n longShortRatio: z.string().transform(Number),\n longAccount: z.string().transform(Number),\n shortAccount: z.string().transform(Number),\n timestamp: z.number(),\n});\nexport type LongShortRatioEntry = z.infer<typeof LongShortRatioEntrySchema>;\nexport const LongShortRatioSchema = z.array(LongShortRatioEntrySchema);\n\nexport const TakerLongShortRatioEntrySchema = z.object({\n buySellRatio: z.string().transform(Number),\n buyVol: z.string().transform(Number),\n sellVol: z.string().transform(Number),\n timestamp: z.number(),\n});\nexport type TakerLongShortRatioEntry = z.infer<typeof TakerLongShortRatioEntrySchema>;\nexport const TakerLongShortRatioSchema = z.array(TakerLongShortRatioEntrySchema);\n","import { HttpClient } from '../client/HttpClient.js';\nimport {\n FundingRate,\n FundingRateHistorySchema,\n LongShortRatioEntry,\n LongShortRatioSchema,\n OpenInterest,\n OpenInterestHistEntry,\n OpenInterestHistSchema,\n OpenInterestSchema,\n PremiumIndex,\n PremiumIndexSchema,\n TakerLongShortRatioEntry,\n TakerLongShortRatioSchema,\n} from '../types/futures.types.js';\nimport type { KlineInterval } from '../types/market.types.js';\n\nexport interface FuturesDataEndpoints {\n restFapi?: string;\n restFuturesData?: string;\n apiKey?: string;\n apiSecret?: string;\n recvWindow?: number;\n timeoutMs?: number;\n maxRetries?: number;\n retryBaseDelayMs?: number;\n retryMaxDelayMs?: number;\n}\n\nexport class FuturesData {\n private readonly http: HttpClient;\n private readonly dataHttp: HttpClient;\n\n constructor(endpoints?: FuturesDataEndpoints) {\n const { restFapi, restFuturesData, ...httpOptions } = endpoints ?? {};\n this.http = new HttpClient({ baseURL: restFapi ?? 'https://fapi.binance.com/fapi/v1', ...httpOptions });\n this.dataHttp = new HttpClient({\n baseURL: restFuturesData ?? 'https://fapi.binance.com/futures/data',\n ...httpOptions,\n });\n }\n\n async fundingRateHistory(\n symbol: string,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<FundingRate[]> {\n const data = await this.http.get('/fundingRate', {\n symbol,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit ?? 100,\n });\n return FundingRateHistorySchema.parse(data);\n }\n\n async premiumIndex(symbol: string): Promise<PremiumIndex> {\n return PremiumIndexSchema.parse(await this.http.get('/premiumIndex', { symbol }));\n }\n\n async openInterest(symbol: string): Promise<OpenInterest> {\n return OpenInterestSchema.parse(await this.http.get('/openInterest', { symbol }));\n }\n\n async openInterestHist(symbol: string, period: string, limit = 30): Promise<OpenInterestHistEntry[]> {\n const data = await this.dataHttp.get('/openInterestHist', { symbol, period, limit });\n return OpenInterestHistSchema.parse(data);\n }\n\n async topLongShortAccountRatio(symbol: string, period: string, limit = 30): Promise<LongShortRatioEntry[]> {\n const data = await this.dataHttp.get('/topLongShortAccountRatio', { symbol, period, limit });\n return LongShortRatioSchema.parse(data);\n }\n\n async topLongShortPositionRatio(symbol: string, period: string, limit = 30): Promise<LongShortRatioEntry[]> {\n const data = await this.dataHttp.get('/topLongShortPositionRatio', { symbol, period, limit });\n return LongShortRatioSchema.parse(data);\n }\n\n async globalLongShortAccountRatio(symbol: string, period: string, limit = 30): Promise<LongShortRatioEntry[]> {\n const data = await this.dataHttp.get('/globalLongShortAccountRatio', { symbol, period, limit });\n return LongShortRatioSchema.parse(data);\n }\n\n async takerLongShortRatio(symbol: string, period: string, limit = 30): Promise<TakerLongShortRatioEntry[]> {\n const data = await this.dataHttp.get('/takerlongshortRatio', { symbol, period, limit });\n return TakerLongShortRatioSchema.parse(data);\n }\n\n async basis(\n symbol: string,\n period: string,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<unknown[]> {\n return this.dataHttp.get('/basis', {\n symbol,\n period,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit,\n });\n }\n\n async fundingInfo(): Promise<unknown[]> {\n return this.http.get('/fundingInfo');\n }\n\n async assetIndex(symbol?: string): Promise<unknown[] | unknown> {\n const params = symbol ? { symbol } : {};\n return this.http.get('/assetIndex', params);\n }\n\n async compositeIndexInfo(symbol?: string): Promise<unknown> {\n const params = symbol ? { symbol } : {};\n return this.http.get('/indexInfo', params);\n }\n\n async adlQuantile(symbol?: string): Promise<unknown[]> {\n const params = symbol ? { symbol } : {};\n return this.http.get('/adlQuantile', params, 'signed');\n }\n\n async blvtInfo(\n tokenName: string,\n interval: KlineInterval,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<unknown[]> {\n return this.http.get('/lvtKlines', {\n tokenName,\n interval,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit,\n });\n }\n\n async indexPriceConstituents(symbol: string): Promise<unknown> {\n return this.http.get('/constituents', { symbol });\n }\n\n async symbolConfig(symbol?: string): Promise<unknown[]> {\n const params = symbol ? { symbol } : {};\n return this.http.get('/symbolConfig', params, 'signed');\n }\n\n async forceOrders(options?: {\n symbol?: string;\n autoCloseType?: 'LIQUIDATION' | 'ADL';\n startTime?: number;\n endTime?: number;\n limit?: number;\n }): Promise<unknown[]> {\n return this.http.get(\n '/forceOrders',\n {\n symbol: options?.symbol,\n autoCloseType: options?.autoCloseType,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit,\n },\n 'signed',\n );\n }\n\n async insuranceFundBalance(options?: { symbol?: string; startTime?: number; endTime?: number; limit?: number }): Promise<unknown[]> {\n return this.dataHttp.get('/insuranceBalance', {\n symbol: options?.symbol,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit,\n });\n }\n\n async pmExchangeInfo(): Promise<unknown> {\n return this.http.get('/pmExchangeInfo');\n }\n\n async delistSchedule(symbol?: string): Promise<unknown[]> {\n const params = symbol ? { symbol } : {};\n return this.http.get('/delistSchedule', params);\n }\n\n async symbolAdlRisk(symbol?: string): Promise<unknown[]> {\n const params = symbol ? { symbol } : {};\n return this.http.get('/symbolAdlRisk', params, 'signed');\n }\n\n async deliveryPrice(pair: string): Promise<{ deliveryTime: number; deliveryPrice: number }[]> {\n return this.dataHttp.get('/delivery-price', { pair });\n }\n}\n","import { z } from 'zod';\n\nexport const KlineIntervalSchema = z.enum([\n '1m', '3m', '5m', '15m', '30m',\n '1h', '2h', '4h', '6h', '8h', '12h',\n '1d', '3d', '1w', '1M',\n]);\nexport type KlineInterval = z.infer<typeof KlineIntervalSchema>;\n\nconst RawKlineSchema = z.tuple([\n z.number(), z.string(), z.string(), z.string(), z.string(), z.string(),\n z.number(), z.string(), z.number(), z.string(), z.string(), z.string(),\n]);\n\nexport const KlineSchema = RawKlineSchema.transform(\n ([openTime, open, high, low, close, volume, closeTime, quoteAssetVolume, trades, takerBuyBaseVolume, takerBuyQuoteVolume]) => ({\n openTime,\n open: Number(open),\n high: Number(high),\n low: Number(low),\n close: Number(close),\n volume: Number(volume),\n closeTime,\n quoteAssetVolume: Number(quoteAssetVolume),\n trades,\n takerBuyBaseVolume: Number(takerBuyBaseVolume),\n takerBuyQuoteVolume: Number(takerBuyQuoteVolume),\n }),\n);\nexport type Kline = z.infer<typeof KlineSchema>;\nexport const KlinesResponseSchema = z.array(KlineSchema);\n\nexport const TickerPriceSchema = z.object({\n symbol: z.string(),\n price: z.string().transform(Number),\n time: z.number().optional(),\n});\nexport type TickerPrice = z.infer<typeof TickerPriceSchema>;\n\nexport const Ticker24hrSchema = z.object({\n symbol: z.string(),\n priceChange: z.string().transform(Number),\n priceChangePercent: z.string().transform(Number),\n weightedAvgPrice: z.string().transform(Number),\n lastPrice: z.string().transform(Number),\n lastQty: z.string().transform(Number),\n openPrice: z.string().transform(Number),\n highPrice: z.string().transform(Number),\n lowPrice: z.string().transform(Number),\n volume: z.string().transform(Number),\n quoteVolume: z.string().transform(Number),\n openTime: z.number(),\n closeTime: z.number(),\n firstId: z.number(),\n lastId: z.number(),\n count: z.number(),\n});\nexport type Ticker24hr = z.infer<typeof Ticker24hrSchema>;\n\nexport const BookTickerSchema = z.object({\n symbol: z.string(),\n bidPrice: z.string().transform(Number),\n bidQty: z.string().transform(Number),\n askPrice: z.string().transform(Number),\n askQty: z.string().transform(Number),\n time: z.number().optional(),\n});\nexport type BookTicker = z.infer<typeof BookTickerSchema>;\n\nconst DepthLevelSchema = z\n .tuple([z.string(), z.string()])\n .transform(([price, qty]) => ({ price: Number(price), qty: Number(qty) }));\n\nexport const DepthSnapshotSchema = z.object({\n lastUpdateId: z.number(),\n bids: z.array(DepthLevelSchema),\n asks: z.array(DepthLevelSchema),\n});\nexport type DepthSnapshot = z.infer<typeof DepthSnapshotSchema>;\n\nexport const TradeSchema = z.object({\n id: z.number(),\n price: z.string().transform(Number),\n qty: z.string().transform(Number),\n quoteQty: z.string().transform(Number),\n time: z.number(),\n isBuyerMaker: z.boolean(),\n});\nexport type Trade = z.infer<typeof TradeSchema>;\nexport const TradesResponseSchema = z.array(TradeSchema);\n\nexport const AggTradeSchema = z.object({\n a: z.number(),\n p: z.string().transform(Number),\n q: z.string().transform(Number),\n f: z.number(),\n l: z.number(),\n T: z.number(),\n m: z.boolean(),\n});\nexport type AggTrade = z.infer<typeof AggTradeSchema>;\nexport const AggTradesResponseSchema = z.array(AggTradeSchema);\n\nexport const AvgPriceSchema = z.object({\n mins: z.number(),\n price: z.string().transform(Number),\n});\nexport type AvgPrice = z.infer<typeof AvgPriceSchema>;\n\nexport const ExchangeSymbolSchema = z\n .object({\n symbol: z.string(),\n status: z.string(),\n baseAsset: z.string(),\n quoteAsset: z.string(),\n })\n .loose();\nexport type ExchangeSymbol = z.infer<typeof ExchangeSymbolSchema>;\n\nexport const ExchangeInfoSchema = z\n .object({\n timezone: z.string(),\n serverTime: z.number(),\n symbols: z.array(ExchangeSymbolSchema),\n })\n .loose();\nexport type ExchangeInfo = z.infer<typeof ExchangeInfoSchema>;\n","import type { HttpClient } from '../client/HttpClient.js';\nimport {\n AggTrade,\n AggTradesResponseSchema,\n BookTicker,\n BookTickerSchema,\n DepthSnapshot,\n DepthSnapshotSchema,\n ExchangeInfo,\n ExchangeInfoSchema,\n Kline,\n KlineInterval,\n KlinesResponseSchema,\n Ticker24hr,\n Ticker24hrSchema,\n TickerPrice,\n TickerPriceSchema,\n Trade,\n TradesResponseSchema,\n} from '../types/market.types.js';\n\nexport class MarketDataBase {\n constructor(protected readonly http: HttpClient) {}\n\n async exchangeInfo(): Promise<ExchangeInfo> {\n return ExchangeInfoSchema.parse(await this.http.get('/exchangeInfo'));\n }\n\n async ping(): Promise<Record<string, unknown>> {\n return this.http.get('/ping');\n }\n\n async serverTime(): Promise<{ serverTime: number }> {\n return this.http.get('/time');\n }\n\n async historicalTrades(symbol: string, options?: { fromId?: number; limit?: number }): Promise<Trade[]> {\n const data = await this.http.get('/historicalTrades', {\n symbol,\n fromId: options?.fromId,\n limit: options?.limit ?? 500,\n });\n return TradesResponseSchema.parse(data);\n }\n\n async klines(\n symbol: string,\n interval: KlineInterval,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<Kline[]> {\n const data = await this.http.get('/klines', {\n symbol,\n interval,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit ?? 500,\n });\n return KlinesResponseSchema.parse(data);\n }\n\n async tickerPrice(symbol: string): Promise<TickerPrice> {\n return TickerPriceSchema.parse(await this.http.get('/ticker/price', { symbol }));\n }\n\n async ticker24hr(symbol: string): Promise<Ticker24hr> {\n return Ticker24hrSchema.parse(await this.http.get('/ticker/24hr', { symbol }));\n }\n\n async bookTicker(symbol: string): Promise<BookTicker> {\n return BookTickerSchema.parse(await this.http.get('/ticker/bookTicker', { symbol }));\n }\n\n async depth(symbol: string, limit = 100): Promise<DepthSnapshot> {\n return DepthSnapshotSchema.parse(await this.http.get('/depth', { symbol, limit }));\n }\n\n async trades(symbol: string, limit = 500): Promise<Trade[]> {\n return TradesResponseSchema.parse(await this.http.get('/trades', { symbol, limit }));\n }\n\n async aggTrades(\n symbol: string,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<AggTrade[]> {\n const data = await this.http.get('/aggTrades', {\n symbol,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit ?? 500,\n });\n return AggTradesResponseSchema.parse(data);\n }\n}\n","import { HttpClient } from '../client/HttpClient.js';\nimport { MarketDataBase } from './MarketDataBase.js';\nimport {\n Kline,\n KlinesResponseSchema,\n KlineInterval,\n TickerPrice,\n TickerPriceSchema,\n BookTicker,\n BookTickerSchema,\n DepthSnapshot,\n DepthSnapshotSchema,\n ExchangeInfo,\n ExchangeInfoSchema,\n} from '../types/market.types.js';\n\nexport class FuturesMarket extends MarketDataBase {\n private readonly rootHttp: HttpClient;\n\n constructor(http?: HttpClient, restRoot?: string) {\n super(http ?? new HttpClient({ baseURL: 'https://fapi.binance.com/fapi/v1' }));\n this.rootHttp = new HttpClient({ baseURL: restRoot ?? 'https://fapi.binance.com' });\n }\n\n async continuousKlines(\n pair: string,\n contractType: 'perpetual' | 'current_quarter' | 'next_quarter',\n interval: KlineInterval,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<Kline[]> {\n const data = await this.http.get('/continuousKlines', {\n pair,\n contractType,\n interval,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit ?? 500,\n });\n return KlinesResponseSchema.parse(data);\n }\n\n async indexPriceKlines(\n pair: string,\n interval: KlineInterval,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<Kline[]> {\n const data = await this.http.get('/indexPriceKlines', {\n pair,\n interval,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit ?? 500,\n });\n return KlinesResponseSchema.parse(data);\n }\n\n async markPriceKlines(\n symbol: string,\n interval: KlineInterval,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<Kline[]> {\n const data = await this.http.get('/markPriceKlines', {\n symbol,\n interval,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit ?? 500,\n });\n return KlinesResponseSchema.parse(data);\n }\n\n async premiumIndexKlines(\n symbol: string,\n interval: KlineInterval,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<Kline[]> {\n const data = await this.http.get('/premiumIndexKlines', {\n symbol,\n interval,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit ?? 500,\n });\n return KlinesResponseSchema.parse(data);\n }\n\n async rpiDepth(symbol: string, limit = 1000): Promise<DepthSnapshot> {\n return DepthSnapshotSchema.parse(await this.http.get('/rpiDepth', { symbol, limit }));\n }\n\n async tradingDayTicker(symbol?: string): Promise<unknown[]> {\n const params = symbol ? { symbol } : {};\n return this.http.get('/tradingDayTicker', params);\n }\n\n async tickerPriceV2(symbol?: string): Promise<TickerPrice[] | TickerPrice> {\n const params = symbol ? { symbol } : {};\n return TickerPriceSchema.parse(await this.rootHttp.get('/fapi/v2/ticker/price', params));\n }\n\n async bookTickerV2(symbol?: string): Promise<BookTicker[] | BookTicker> {\n const params = symbol ? { symbol } : {};\n return BookTickerSchema.parse(await this.rootHttp.get('/fapi/v2/ticker/bookTicker', params));\n }\n\n async instrumentDetails(symbol: string): Promise<ExchangeInfo['symbols'][number]> {\n const info = await ExchangeInfoSchema.parse(await this.http.get('/exchangeInfo'));\n const details = info.symbols.find((s) => s.symbol === symbol);\n if (!details) throw new Error(`Instrument ${symbol} not found`);\n return details;\n }\n}\n","import { HttpClient } from '../client/HttpClient.js';\nimport { MarketDataBase } from './MarketDataBase.js';\nimport { AvgPrice, AvgPriceSchema, Kline, KlineInterval, KlinesResponseSchema } from '../types/market.types.js';\n\nexport class SpotMarket extends MarketDataBase {\n constructor(http?: HttpClient) {\n super(http ?? new HttpClient({ baseURL: 'https://api.binance.com/api/v3' }));\n }\n\n async avgPrice(symbol: string): Promise<AvgPrice> {\n return AvgPriceSchema.parse(await this.http.get('/avgPrice', { symbol }));\n }\n\n /** Optimized klines endpoint (`/uiKlines`) with the same response shape as `/klines`. */\n async uiKlines(\n symbol: string,\n interval: KlineInterval,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<Kline[]> {\n const data = await this.http.get('/uiKlines', {\n symbol,\n interval,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit ?? 500,\n });\n return KlinesResponseSchema.parse(data);\n }\n\n /** Rolling window ticker (`/ticker`). Omit `symbol` for all symbols. */\n async rollingWindowTicker(\n symbol?: string,\n windowSize?: '1d' | '7d' | '30d',\n ): Promise<unknown[] | unknown> {\n const params = { symbol, windowSize };\n return this.http.get('/ticker', params);\n }\n\n /** Trading-day ticker (`/ticker/tradingDay`). Omit `symbol` for all symbols. */\n async tradingDayTicker(\n symbol?: string,\n options?: { timeZone?: string; type?: 'FULL' | 'MINI' },\n ): Promise<unknown[] | unknown> {\n return this.http.get('/ticker/tradingDay', { symbol, ...options });\n }\n}\n","import { z } from 'zod';\n\n// ---- Spot order / OCO / trade ----\n\nexport const SpotOrderSchema = z\n .object({\n symbol: z.string(),\n orderId: z.number(),\n clientOrderId: z.string(),\n status: z.string(),\n side: z.string(),\n type: z.string(),\n timeInForce: z.string().optional(),\n price: z.string().transform(Number).optional(),\n origQty: z.string().transform(Number).optional(),\n executedQty: z.string().transform(Number).optional(),\n cummulativeQuoteQty: z.string().transform(Number).optional(),\n stopPrice: z.string().transform(Number).optional(),\n icebergQty: z.string().transform(Number).optional(),\n originalQuoteOrderQty: z.string().transform(Number).optional(),\n transactTime: z.number().optional(),\n workingTime: z.number().optional(),\n orderListId: z.number().optional(),\n selfTradePreventionMode: z.string().optional(),\n fills: z.array(z.unknown()).optional(),\n })\n .loose();\nexport type SpotOrder = z.infer<typeof SpotOrderSchema>;\nexport const SpotOrderResponseSchema = SpotOrderSchema;\nexport const SpotOrdersResponseSchema = z.array(SpotOrderSchema);\n\nexport const SpotOCOOrderAckSchema = z\n .object({\n orderListId: z.number(),\n contingencyType: z.string(),\n listStatusType: z.string(),\n listOrderStatus: z.string(),\n listClientOrderId: z.string(),\n transactionTime: z.number(),\n symbol: z.string(),\n orders: z.array(SpotOrderSchema),\n orderReports: z.array(z.unknown()).optional(),\n })\n .loose();\nexport type SpotOCOOrderAck = z.infer<typeof SpotOCOOrderAckSchema>;\nexport const SpotOCOOrderAckResponseSchema = SpotOCOOrderAckSchema;\nexport const SpotOCOOrdersResponseSchema = z.array(SpotOCOOrderAckSchema);\n\nexport const SpotTradeSchema = z\n .object({\n symbol: z.string(),\n id: z.number(),\n orderId: z.number(),\n orderListId: z.number().optional(),\n price: z.string().transform(Number),\n qty: z.string().transform(Number),\n quoteQty: z.string().transform(Number),\n commission: z.string().transform(Number),\n commissionAsset: z.string(),\n time: z.number(),\n isBuyer: z.boolean(),\n isMaker: z.boolean(),\n isBestMatch: z.boolean(),\n })\n .loose();\nexport type SpotTrade = z.infer<typeof SpotTradeSchema>;\nexport const SpotTradesResponseSchema = z.array(SpotTradeSchema);\n\n// ---- Spot account ----\n\nexport const SpotBalanceSchema = z.object({\n asset: z.string(),\n free: z.string().transform(Number),\n locked: z.string().transform(Number),\n});\nexport type SpotBalance = z.infer<typeof SpotBalanceSchema>;\n\nexport const SpotAccountSchema = z\n .object({\n makerCommission: z.number(),\n takerCommission: z.number(),\n buyerCommission: z.number(),\n sellerCommission: z.number(),\n canTrade: z.boolean(),\n canWithdraw: z.boolean(),\n canDeposit: z.boolean(),\n updateTime: z.number().optional(),\n accountType: z.string().optional(),\n balances: z.array(SpotBalanceSchema),\n permissions: z.array(z.string()).optional(),\n })\n .loose();\nexport type SpotAccountInfo = z.infer<typeof SpotAccountSchema>;\n\n// ---- Spot user data stream events (listenKey stream) ----\n\nexport const SpotExecutionReportSchema = z.object({ e: z.literal('executionReport') }).loose();\nexport type SpotExecutionReport = z.infer<typeof SpotExecutionReportSchema>;\n\nexport const SpotOutboundAccountPositionSchema = z\n .object({ e: z.literal('outboundAccountPosition') })\n .loose();\nexport type SpotOutboundAccountPosition = z.infer<typeof SpotOutboundAccountPositionSchema>;\n\nexport const SpotBalanceUpdateSchema = z.object({ e: z.literal('balanceUpdate') }).loose();\nexport type SpotBalanceUpdate = z.infer<typeof SpotBalanceUpdateSchema>;\n\nexport const SpotListStatusSchema = z.object({ e: z.literal('listStatus') }).loose();\nexport type SpotListStatus = z.infer<typeof SpotListStatusSchema>;\n\nexport type SpotUserDataEvent =\n | SpotExecutionReport\n | SpotOutboundAccountPosition\n | SpotBalanceUpdate\n | SpotListStatus;\n\nexport function parseSpotUserDataEvent(raw: unknown): SpotUserDataEvent {\n if (typeof raw !== 'object' || raw === null) {\n throw new Error('Invalid spot user-data payload');\n }\n const eventType = (raw as { e?: string }).e;\n if (eventType === 'executionReport') return SpotExecutionReportSchema.parse(raw);\n if (eventType === 'outboundAccountPosition') return SpotOutboundAccountPositionSchema.parse(raw);\n if (eventType === 'balanceUpdate') return SpotBalanceUpdateSchema.parse(raw);\n if (eventType === 'listStatus') return SpotListStatusSchema.parse(raw);\n throw new Error(`Unknown spot user-data event type: ${eventType}`);\n}\n","import { HttpClient } from '../client/HttpClient.js';\nimport {\n SpotAccountInfo,\n SpotAccountSchema,\n SpotOCOOrderAck,\n SpotOCOOrderAckResponseSchema,\n SpotOCOOrdersResponseSchema,\n SpotOrder,\n SpotOrderSchema,\n SpotOrdersResponseSchema,\n SpotTrade,\n SpotTradesResponseSchema,\n} from '../types/spot.types.js';\n\nexport class SpotTrading {\n constructor(private readonly http: HttpClient) {}\n\n async createOrder(params: Record<string, unknown>): Promise<SpotOrder> {\n return SpotOrderSchema.parse(await this.http.post('/order', params, 'signed'));\n }\n\n async testOrder(params: Record<string, unknown>): Promise<Record<string, unknown>> {\n return this.http.post('/order/test', params, 'signed');\n }\n\n async getOrder(symbol: string, options?: { orderId?: number; origClientOrderId?: string }): Promise<SpotOrder> {\n return SpotOrderSchema.parse(\n await this.http.get('/order', { symbol, ...options }, 'signed'),\n );\n }\n\n async cancelOrder(\n symbol: string,\n options?: { orderId?: number; origClientOrderId?: string; newClientOrderId?: string },\n ): Promise<SpotOrder> {\n return SpotOrderSchema.parse(\n await this.http.delete('/order', { symbol, ...options }, 'signed'),\n );\n }\n\n async cancelOpenOrders(symbol: string): Promise<SpotOrder[]> {\n return SpotOrdersResponseSchema.parse(\n await this.http.delete('/openOrders', { symbol }, 'signed'),\n );\n }\n\n async getOpenOrders(symbol?: string): Promise<SpotOrder[]> {\n const params = symbol ? { symbol } : {};\n return SpotOrdersResponseSchema.parse(await this.http.get('/openOrders', params, 'signed'));\n }\n\n async getAllOrders(\n symbol: string,\n options?: { orderId?: number; startTime?: number; endTime?: number; limit?: number },\n ): Promise<SpotOrder[]> {\n return SpotOrdersResponseSchema.parse(\n await this.http.get('/allOrders', { symbol, ...options }, 'signed'),\n );\n }\n\n async cancelReplaceOrder(params: Record<string, unknown>): Promise<Record<string, unknown>> {\n return this.http.post('/order/cancelReplace', params, 'signed');\n }\n\n // ---- OCO order lists ----\n\n async createOCOOrder(params: Record<string, unknown>): Promise<SpotOCOOrderAck> {\n return SpotOCOOrderAckResponseSchema.parse(\n await this.http.post('/orderList', params, 'signed'),\n );\n }\n\n async cancelOCOOrder(\n symbol: string,\n options?: { orderListId?: number; listClientOrderId?: string; newClientOrderId?: string },\n ): Promise<SpotOCOOrderAck> {\n return SpotOCOOrderAckResponseSchema.parse(\n await this.http.delete('/orderList', { symbol, ...options }, 'signed'),\n );\n }\n\n async getOCOOrder(\n symbol: string,\n options?: { orderListId?: number; origClientOrderId?: string },\n ): Promise<SpotOCOOrderAck> {\n return SpotOCOOrderAckResponseSchema.parse(\n await this.http.get('/orderList', { symbol, ...options }, 'signed'),\n );\n }\n\n async getOpenOCOOrders(): Promise<SpotOCOOrderAck[]> {\n return SpotOCOOrdersResponseSchema.parse(\n await this.http.get('/openOrderLists', undefined, 'signed'),\n );\n }\n\n async getAllOCOOrders(\n symbol: string,\n options?: { fromId?: number; startTime?: number; endTime?: number; limit?: number },\n ): Promise<SpotOCOOrderAck[]> {\n return SpotOCOOrdersResponseSchema.parse(\n await this.http.get('/allOrderLists', { symbol, ...options }, 'signed'),\n );\n }\n\n async cancelOpenOCOOrders(symbol: string): Promise<SpotOCOOrderAck[]> {\n return SpotOCOOrdersResponseSchema.parse(\n await this.http.delete('/openOrderLists', { symbol }, 'signed'),\n );\n }\n}\n\nexport class SpotAccount {\n constructor(private readonly http: HttpClient) {}\n\n async account(): Promise<SpotAccountInfo> {\n return SpotAccountSchema.parse(await this.http.get('/account', undefined, 'signed'));\n }\n\n async myTrades(\n symbol: string,\n options?: { orderId?: number; startTime?: number; endTime?: number; fromId?: number; limit?: number },\n ): Promise<SpotTrade[]> {\n return SpotTradesResponseSchema.parse(\n await this.http.get('/myTrades', { symbol, ...options }, 'signed'),\n );\n }\n\n async myPreventedMatches(\n symbol: string,\n options?: {\n preventedMatchId?: number;\n orderId?: number;\n fromPreventedMatchId?: number;\n limit?: number;\n },\n ): Promise<unknown[]> {\n return this.http.get('/myPreventedMatches', { symbol, ...options }, 'signed');\n }\n\n async accountCommission(symbol: string): Promise<Record<string, unknown>> {\n return this.http.get('/account/commission', { symbol }, 'signed');\n }\n\n async rateLimitOrder(): Promise<unknown[]> {\n return this.http.get('/rateLimit/order', undefined, 'signed');\n }\n}\n","import { z } from 'zod';\n\nexport const ListenKeySchema = z.object({\n listenKey: z.string(),\n});\nexport type ListenKey = z.infer<typeof ListenKeySchema>;\n\nexport const UserDataAccountUpdateSchema = z.object({\n e: z.literal('ACCOUNT_UPDATE'),\n E: z.number(),\n T: z.number(),\n a: z.object({\n m: z.string().transform(Number),\n B: z.array(\n z.object({\n a: z.string(),\n wb: z.string().transform(Number),\n cw: z.string().transform(Number),\n bc: z.string().transform(Number),\n }),\n ),\n P: z.array(\n z.object({\n s: z.string(),\n pa: z.string().transform(Number),\n ep: z.string().transform(Number),\n cr: z.string().transform(Number),\n up: z.string().transform(Number),\n mt: z.string(),\n iw: z.string().transform(Number).optional(),\n ps: z.string(),\n }),\n ),\n }),\n});\nexport type UserDataAccountUpdate = z.infer<typeof UserDataAccountUpdateSchema>;\n\nexport const UserDataOrderTradeUpdateSchema = z.object({\n e: z.literal('ORDER_TRADE_UPDATE'),\n E: z.number(),\n T: z.number(),\n o: z.object({\n s: z.string(),\n c: z.string(),\n i: z.number(),\n S: z.string(),\n o: z.string(),\n f: z.string(),\n q: z.string().transform(Number),\n p: z.string().transform(Number),\n ap: z.string().transform(Number),\n sp: z.string().transform(Number),\n x: z.string(),\n X: z.string(),\n l: z.string().transform(Number),\n z: z.string().transform(Number),\n L: z.string().transform(Number),\n n: z.string().transform(Number),\n N: z.string(),\n T: z.number(),\n t: z.number(),\n b: z.string().transform(Number),\n a: z.string().transform(Number),\n m: z.boolean(),\n R: z.boolean(),\n wt: z.string(),\n ot: z.string(),\n ps: z.string(),\n cp: z.boolean().optional(),\n AP: z.string().transform(Number).optional(),\n cr: z.string().transform(Number).optional(),\n rp: z.string().transform(Number).optional(),\n }),\n});\nexport type UserDataOrderTradeUpdate = z.infer<typeof UserDataOrderTradeUpdateSchema>;\n\nexport const UserDataMarginCallSchema = z.object({\n e: z.literal('MARGIN_CALL'),\n E: z.number(),\n cw: z.string().transform(Number),\n p: z.array(\n z.object({\n s: z.string(),\n ps: z.string(),\n pa: z.string().transform(Number),\n mt: z.string(),\n iw: z.string().transform(Number),\n mp: z.string().transform(Number),\n up: z.string().transform(Number),\n mm: z.string().transform(Number),\n }),\n ),\n});\nexport type UserDataMarginCall = z.infer<typeof UserDataMarginCallSchema>;\n\nexport type UserDataEvent = UserDataAccountUpdate | UserDataOrderTradeUpdate | UserDataMarginCall;\n\nexport function parseUserDataEvent(raw: unknown): UserDataEvent {\n if (typeof raw !== 'object' || raw === null) {\n throw new Error('Invalid user-data payload');\n }\n const eventType = (raw as { e?: string }).e;\n if (eventType === 'ACCOUNT_UPDATE') return UserDataAccountUpdateSchema.parse(raw);\n if (eventType === 'ORDER_TRADE_UPDATE') return UserDataOrderTradeUpdateSchema.parse(raw);\n if (eventType === 'MARGIN_CALL') return UserDataMarginCallSchema.parse(raw);\n throw new Error(`Unknown user-data event type: ${eventType}`);\n}\n\nexport const WsApiResponseSchema = z.object({\n id: z.string(),\n status: z.number(),\n result: z.unknown(),\n error: z\n .object({\n code: z.number(),\n msg: z.string(),\n })\n .optional(),\n});\nexport type WsApiResponse = z.infer<typeof WsApiResponseSchema>;\n","import { HttpClient } from '../client/HttpClient.js';\nimport { ListenKey, ListenKeySchema } from '../types/userdata.types.js';\n\nexport class SpotUserDataStream {\n constructor(private readonly http: HttpClient) {}\n\n async createListenKey(): Promise<ListenKey> {\n return ListenKeySchema.parse(await this.http.post('/userDataStream', undefined, 'apiKey'));\n }\n\n async keepAliveListenKey(): Promise<Record<string, unknown>> {\n return this.http.put('/userDataStream', undefined, 'apiKey');\n }\n\n async closeListenKey(): Promise<Record<string, unknown>> {\n return this.http.delete('/userDataStream', undefined, 'apiKey');\n }\n}\n","import { z } from 'zod';\n\nexport const BalanceSchema = z.object({\n accountAlias: z.string(),\n asset: z.string(),\n balance: z.string().transform(Number),\n crossWalletBalance: z.string().transform(Number),\n crossUnPnl: z.string().transform(Number),\n availableBalance: z.string().transform(Number),\n maxWithdrawAmount: z.string().transform(Number),\n marginAvailable: z.boolean(),\n updateTime: z.number(),\n});\nexport type Balance = z.infer<typeof BalanceSchema>;\nexport const BalancesResponseSchema = z.array(BalanceSchema);\n\nexport const PositionRiskSchema = z.object({\n symbol: z.string(),\n positionAmt: z.string().transform(Number),\n entryPrice: z.string().transform(Number),\n markPrice: z.string().transform(Number),\n unRealizedProfit: z.string().transform(Number),\n liquidationPrice: z.string().transform(Number),\n leverage: z.string().transform(Number),\n marginType: z.enum(['isolated', 'cross']),\n positionSide: z.string(),\n isolatedWallet: z.string().transform(Number).optional(),\n isolatedMargin: z.string().transform(Number).optional(),\n notional: z.string().transform(Number),\n updateTime: z.number().optional(),\n});\nexport type PositionRisk = z.infer<typeof PositionRiskSchema>;\nexport const PositionRiskResponseSchema = z.array(PositionRiskSchema);\n\nexport const AccountAssetSchema = z.object({\n asset: z.string(),\n walletBalance: z.string().transform(Number),\n unrealizedProfit: z.string().transform(Number),\n marginBalance: z.string().transform(Number),\n maintMargin: z.string().transform(Number),\n initialMargin: z.string().transform(Number),\n positionInitialMargin: z.string().transform(Number),\n openOrderInitialMargin: z.string().transform(Number),\n crossWalletBalance: z.string().transform(Number),\n crossUnPnl: z.string().transform(Number),\n availableBalance: z.string().transform(Number),\n maxWithdrawAmount: z.string().transform(Number),\n marginAvailable: z.boolean().optional(),\n updateTime: z.number(),\n});\nexport type AccountAsset = z.infer<typeof AccountAssetSchema>;\n\nexport const AccountPositionSchema = z.object({\n symbol: z.string(),\n positionAmt: z.string().transform(Number),\n initialMargin: z.string().transform(Number),\n maintMargin: z.string().transform(Number),\n unrealizedProfit: z.string().transform(Number),\n positionInitialMargin: z.string().transform(Number),\n openOrderInitialMargin: z.string().transform(Number),\n leverage: z.string().transform(Number),\n isolated: z.boolean(),\n entryPrice: z.string().transform(Number),\n positionSide: z.string(),\n positionNotional: z.string().transform(Number),\n isolatedWallet: z.string().transform(Number).optional(),\n isolatedMargin: z.string().transform(Number).optional(),\n notional: z.string().transform(Number).optional(),\n});\nexport type AccountPosition = z.infer<typeof AccountPositionSchema>;\n\nexport const AccountSchema = z.object({\n feeTier: z.number(),\n canTrade: z.boolean(),\n canDeposit: z.boolean(),\n canWithdraw: z.boolean(),\n updateTime: z.number(),\n totalInitialMargin: z.string().transform(Number),\n totalMaintMargin: z.string().transform(Number),\n totalWalletBalance: z.string().transform(Number),\n totalUnrealizedProfit: z.string().transform(Number),\n totalMarginBalance: z.string().transform(Number),\n totalPositionInitialMargin: z.string().transform(Number),\n totalOpenOrderInitialMargin: z.string().transform(Number),\n totalCrossWalletBalance: z.string().transform(Number),\n totalCrossUnPnl: z.string().transform(Number),\n availableBalance: z.string().transform(Number),\n maxWithdrawAmount: z.string().transform(Number),\n assets: z.array(AccountAssetSchema),\n positions: z.array(AccountPositionSchema),\n});\nexport type Account = z.infer<typeof AccountSchema>;\n\nexport const IncomeSchema = z.object({\n symbol: z.string().optional(),\n incomeType: z.string(),\n income: z.string().transform(Number),\n asset: z.string(),\n time: z.number(),\n info: z.string().optional(),\n tranId: z.number(),\n tradeId: z.string().optional(),\n});\nexport type Income = z.infer<typeof IncomeSchema>;\nexport const IncomeHistoryResponseSchema = z.array(IncomeSchema);\n\nexport const UserTradeSchema = z.object({\n buyer: z.boolean(),\n commission: z.string().transform(Number),\n commissionAsset: z.string(),\n id: z.number(),\n maker: z.boolean(),\n orderId: z.number(),\n price: z.string().transform(Number),\n qty: z.string().transform(Number),\n quoteQty: z.string().transform(Number),\n realizedPnl: z.string().transform(Number),\n side: z.string(),\n positionSide: z.string(),\n symbol: z.string(),\n time: z.number(),\n});\nexport type UserTrade = z.infer<typeof UserTradeSchema>;\nexport const UserTradesResponseSchema = z.array(UserTradeSchema);\n\nexport const CommissionRateSchema = z.object({\n symbol: z.string(),\n makerCommissionRate: z.string().transform(Number),\n takerCommissionRate: z.string().transform(Number),\n});\nexport type CommissionRate = z.infer<typeof CommissionRateSchema>;\n\nexport const LeverageBracketSchema = z.object({\n symbol: z.string().optional(),\n bracketNotional: z.string().transform(Number).optional(),\n bracket: z.number().optional(),\n maxLeverage: z.number().optional(),\n maintMarginRatio: z.string().transform(Number).optional(),\n cum: z.string().transform(Number).optional(),\n});\nexport type LeverageBracket = z.infer<typeof LeverageBracketSchema>;\nexport const LeverageBracketResponseSchema = z.array(\n z.object({\n symbol: z.string(),\n brackets: z.array(LeverageBracketSchema),\n }),\n);\n\nexport const PositionModeSchema = z.object({\n dualSidePosition: z.boolean(),\n});\nexport type PositionMode = z.infer<typeof PositionModeSchema>;\n\nexport const MultiAssetsMarginSchema = z.object({\n multiAssetsMargin: z.boolean(),\n});\nexport type MultiAssetsMargin = z.infer<typeof MultiAssetsMarginSchema>;\n\nexport const FeeBurnStatusSchema = z.object({\n feeBurn: z.boolean(),\n});\nexport type FeeBurnStatus = z.infer<typeof FeeBurnStatusSchema>;\n\nexport const PositionMarginHistoryEntrySchema = z.object({\n amount: z.string().transform(Number),\n asset: z.string(),\n symbol: z.string(),\n time: z.number(),\n type: z.number(),\n positionSide: z.string(),\n});\nexport type PositionMarginHistoryEntry = z.infer<typeof PositionMarginHistoryEntrySchema>;\nexport const PositionMarginHistorySchema = z.array(PositionMarginHistoryEntrySchema);\n\nexport const ApiTradingStatusSchema = z.object({\n isLocked: z.boolean(),\n plannedRecoverTime: z.number(),\n updateTime: z.number(),\n triggerCondition: z.record(z.string(), z.number()).optional(),\n indicators: z.record(z.string(), z.unknown()).optional(),\n});\nexport type ApiTradingStatus = z.infer<typeof ApiTradingStatusSchema>;\n\nexport const RateLimitOrderSchema = z.object({\n rateLimitType: z.string(),\n interval: z.string(),\n intervalNum: z.number(),\n limit: z.number(),\n count: z.number(),\n});\nexport type RateLimitOrder = z.infer<typeof RateLimitOrderSchema>;\nexport const RateLimitOrderResponseSchema = z.array(RateLimitOrderSchema);\n","import { HttpClient } from '../client/HttpClient.js';\nimport {\n Account,\n AccountSchema,\n ApiTradingStatus,\n ApiTradingStatusSchema,\n Balance,\n BalancesResponseSchema,\n CommissionRate,\n CommissionRateSchema,\n FeeBurnStatus,\n FeeBurnStatusSchema,\n Income,\n IncomeHistoryResponseSchema,\n LeverageBracket,\n LeverageBracketResponseSchema,\n MultiAssetsMargin,\n MultiAssetsMarginSchema,\n PositionMarginHistoryEntry,\n PositionMarginHistorySchema,\n PositionMode,\n PositionModeSchema,\n PositionRisk,\n PositionRiskResponseSchema,\n RateLimitOrder,\n RateLimitOrderResponseSchema,\n UserTrade,\n UserTradesResponseSchema,\n} from '../types/account.types.js';\n\nexport class FuturesAccount {\n constructor(private readonly http: HttpClient) {}\n\n async balance(): Promise<Balance[]> {\n return BalancesResponseSchema.parse(await this.http.get('/fapi/v2/balance', undefined, 'signed'));\n }\n\n async account(): Promise<Account> {\n return AccountSchema.parse(await this.http.get('/fapi/v2/account', undefined, 'signed'));\n }\n\n async positionRisk(symbol?: string): Promise<PositionRisk[]> {\n const params = symbol ? { symbol } : {};\n return PositionRiskResponseSchema.parse(await this.http.get('/fapi/v2/positionRisk', params, 'signed'));\n }\n\n async balanceV3(): Promise<Balance[]> {\n return BalancesResponseSchema.parse(await this.http.get('/fapi/v3/balance', undefined, 'signed'));\n }\n\n async accountV3(): Promise<Account> {\n return AccountSchema.parse(await this.http.get('/fapi/v3/account', undefined, 'signed'));\n }\n\n async positionRiskV3(symbol?: string): Promise<PositionRisk[]> {\n const params = symbol ? { symbol } : {};\n return PositionRiskResponseSchema.parse(await this.http.get('/fapi/v3/positionRisk', params, 'signed'));\n }\n\n async incomeHistory(options?: {\n symbol?: string;\n incomeType?: string;\n startTime?: number;\n endTime?: number;\n limit?: number;\n }): Promise<Income[]> {\n const params = {\n symbol: options?.symbol,\n incomeType: options?.incomeType,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit,\n };\n return IncomeHistoryResponseSchema.parse(await this.http.get('/fapi/v1/income', params, 'signed'));\n }\n\n async userTrades(options?: {\n symbol?: string;\n startTime?: number;\n endTime?: number;\n limit?: number;\n fromId?: number;\n }): Promise<UserTrade[]> {\n const params = {\n symbol: options?.symbol,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit,\n fromId: options?.fromId,\n };\n return UserTradesResponseSchema.parse(await this.http.get('/fapi/v1/userTrades', params, 'signed'));\n }\n\n async leverageBrackets(symbol?: string): Promise<{ symbol: string; brackets: LeverageBracket[] }[]> {\n const params = symbol ? { symbol } : {};\n return LeverageBracketResponseSchema.parse(await this.http.get('/fapi/v1/leverageBracket', params, 'signed'));\n }\n\n async commissionRate(symbol: string): Promise<CommissionRate> {\n return CommissionRateSchema.parse(await this.http.get('/fapi/v1/commissionRate', { symbol }, 'signed'));\n }\n\n async multiAssetsMargin(): Promise<MultiAssetsMargin> {\n return MultiAssetsMarginSchema.parse(await this.http.get('/fapi/v1/multiAssetsMargin', undefined, 'signed'));\n }\n\n async setMultiAssetsMargin(multiAssetsMargin: boolean): Promise<Record<string, unknown>> {\n return this.http.post('/fapi/v1/multiAssetsMargin', { multiAssetsMargin }, 'signed');\n }\n\n async feeBurnStatus(): Promise<FeeBurnStatus> {\n return FeeBurnStatusSchema.parse(await this.http.get('/fapi/v1/feeBurn', undefined, 'signed'));\n }\n\n async setFeeBurnStatus(feeBurn: boolean): Promise<Record<string, unknown>> {\n return this.http.post('/fapi/v1/feeBurn', { feeBurn }, 'signed');\n }\n\n async positionMode(): Promise<PositionMode> {\n return PositionModeSchema.parse(await this.http.get('/fapi/v1/positionSide/dual', undefined, 'signed'));\n }\n\n async setPositionMode(dualSidePosition: boolean): Promise<Record<string, unknown>> {\n return this.http.post('/fapi/v1/positionSide/dual', { dualSidePosition }, 'signed');\n }\n\n async apiTradingStatus(): Promise<ApiTradingStatus> {\n return ApiTradingStatusSchema.parse(await this.http.get('/fapi/v1/apiTradingStatus', undefined, 'signed'));\n }\n\n async positionMarginHistory(options?: {\n symbol: string;\n type?: number;\n startTime?: number;\n endTime?: number;\n limit?: number;\n }): Promise<PositionMarginHistoryEntry[]> {\n const params = {\n symbol: options?.symbol,\n type: options?.type,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit,\n };\n return PositionMarginHistorySchema.parse(await this.http.get('/fapi/v1/positionMargin/history', params, 'signed'));\n }\n\n async rateLimitOrder(): Promise<RateLimitOrder[]> {\n return RateLimitOrderResponseSchema.parse(await this.http.get('/fapi/v1/rateLimit/order', undefined, 'signed'));\n }\n\n async accountConfig(): Promise<Record<string, unknown>> {\n return this.http.get('/fapi/v1/accountConfig', undefined, 'signed');\n }\n\n async pmAccountInfo(asset: string): Promise<Record<string, unknown>> {\n return this.http.get('/fapi/v1/pmAccountInfo', { asset }, 'signed');\n }\n\n async requestIncomeDownload(options: { startTime: number; endTime: number }): Promise<Record<string, unknown>> {\n return this.http.get('/fapi/v1/income/asyn', options, 'signed');\n }\n\n async getIncomeDownloadStatus(downloadId: string): Promise<Record<string, unknown>> {\n return this.http.get('/fapi/v1/income/asyn/id', { downloadId }, 'signed');\n }\n\n async requestOrderDownload(options?: {\n symbol?: string;\n startTime?: number;\n endTime?: number;\n }): Promise<Record<string, unknown>> {\n const params = {\n symbol: options?.symbol,\n startTime: options?.startTime,\n endTime: options?.endTime,\n };\n return this.http.get('/fapi/v1/order/asyn', params, 'signed');\n }\n\n async getOrderDownloadStatus(downloadId: string): Promise<Record<string, unknown>> {\n return this.http.get('/fapi/v1/order/asyn/id', { downloadId }, 'signed');\n }\n\n async requestTradeDownload(options?: {\n symbol?: string;\n startTime?: number;\n endTime?: number;\n }): Promise<Record<string, unknown>> {\n const params = {\n symbol: options?.symbol,\n startTime: options?.startTime,\n endTime: options?.endTime,\n };\n return this.http.get('/fapi/v1/trade/asyn', params, 'signed');\n }\n\n async getTradeDownloadStatus(downloadId: string): Promise<Record<string, unknown>> {\n return this.http.get('/fapi/v1/trade/asyn/id', { downloadId }, 'signed');\n }\n}\n","import { z } from 'zod';\n\nexport const OrderSchema = z.object({\n orderId: z.number(),\n symbol: z.string(),\n status: z.string(),\n clientOrderId: z.string(),\n price: z.string().transform(Number),\n avgPrice: z.string().transform(Number),\n origQty: z.string().transform(Number),\n executedQty: z.string().transform(Number),\n cumQuote: z.string().transform(Number),\n type: z.string(),\n reduceOnly: z.boolean(),\n side: z.string(),\n positionSide: z.string(),\n stopPrice: z.string().transform(Number).optional(),\n closePosition: z.boolean().optional(),\n timeInForce: z.string().optional(),\n origType: z.string().optional(),\n time: z.number(),\n updateTime: z.number(),\n workingType: z.string().optional(),\n priceProtect: z.boolean().optional(),\n});\nexport type Order = z.infer<typeof OrderSchema>;\nexport const OrderResponseSchema = OrderSchema;\nexport const OrdersResponseSchema = z.array(OrderSchema);\n\nexport const CreateOrderParamsSchema = z.object({\n symbol: z.string(),\n side: z.enum(['BUY', 'SELL']),\n type: z.string(),\n quantity: z.union([z.string(), z.number()]).optional(),\n price: z.union([z.string(), z.number()]).optional(),\n timeInForce: z.enum(['GTC', 'IOC', 'FOK', 'GTX', 'GTD']).optional(),\n stopPrice: z.union([z.string(), z.number()]).optional(),\n reduceOnly: z.boolean().optional(),\n positionSide: z.enum(['BOTH', 'LONG', 'SHORT']).optional(),\n newClientOrderId: z.string().optional(),\n closePosition: z.boolean().optional(),\n newOrderRespType: z.enum(['ACK', 'RESULT']).optional(),\n priceProtect: z.boolean().optional(),\n workingType: z.enum(['MARK_PRICE', 'CONTRACT_PRICE']).optional(),\n callbackRate: z.union([z.string(), z.number()]).optional(),\n activationPrice: z.union([z.string(), z.number()]).optional(),\n selfTradePreventionMode: z.enum(['NONE', 'EXPIRE_TAKER', 'EXPIRE_MAKER', 'EXPIRE_BOTH']).optional(),\n goodTillDate: z.number().optional(),\n});\nexport type CreateOrderParams = z.infer<typeof CreateOrderParamsSchema>;\n\nexport const ModifyOrderParamsSchema = CreateOrderParamsSchema.extend({\n orderId: z.number().optional(),\n origClientOrderId: z.string().optional(),\n origType: z.string().optional(),\n});\nexport type ModifyOrderParams = z.infer<typeof ModifyOrderParamsSchema>;\n\nexport const AlgoOrderSchema = z.object({\n algoId: z.number(),\n symbol: z.string(),\n side: z.string(),\n positionSide: z.string(),\n totalQty: z.string().transform(Number).optional(),\n executedQty: z.string().transform(Number).optional(),\n executedAmt: z.string().transform(Number).optional(),\n avgPrice: z.string().transform(Number).optional(),\n clientAlgoId: z.string().optional(),\n bookTime: z.number().optional(),\n endTime: z.number().optional(),\n algoStatus: z.string().optional(),\n algoType: z.string().optional(),\n urgency: z.string().optional(),\n});\nexport type AlgoOrder = z.infer<typeof AlgoOrderSchema>;\nexport const AlgoOrderResponseSchema = AlgoOrderSchema;\nexport const AlgoOrdersResponseSchema = z.array(AlgoOrderSchema);\n\nexport const BatchOrdersItemSchema = z.object({\n orderId: z.number(),\n symbol: z.string(),\n status: z.string(),\n clientOrderId: z.string(),\n price: z.string().transform(Number),\n avgPrice: z.string().transform(Number),\n origQty: z.string().transform(Number),\n executedQty: z.string().transform(Number),\n cumQuote: z.string().transform(Number),\n type: z.string(),\n reduceOnly: z.boolean(),\n side: z.string(),\n positionSide: z.string(),\n time: z.number(),\n updateTime: z.number(),\n});\nexport type BatchOrdersItem = z.infer<typeof BatchOrdersItemSchema>;\nexport const BatchOrdersResponseSchema = z.array(BatchOrdersItemSchema);\n\nexport const OrderModifyHistoryEntrySchema = z.object({\n orderId: z.number(),\n symbol: z.string(),\n status: z.string(),\n clientOrderId: z.string(),\n price: z.string().transform(Number),\n avgPrice: z.string().transform(Number),\n origQty: z.string().transform(Number),\n executedQty: z.string().transform(Number),\n cumQuote: z.string().transform(Number),\n type: z.string(),\n reduceOnly: z.boolean(),\n side: z.string(),\n positionSide: z.string(),\n origType: z.string().optional(),\n stopPrice: z.string().transform(Number).optional(),\n updateTime: z.number(),\n});\nexport type OrderModifyHistoryEntry = z.infer<typeof OrderModifyHistoryEntrySchema>;\nexport const OrderModifyHistorySchema = z.array(OrderModifyHistoryEntrySchema);\n\nexport const LeverageChangeSchema = z.object({\n leverage: z.number(),\n maxNotionalValue: z.union([z.string(), z.number()]),\n symbol: z.string(),\n});\nexport type LeverageChange = z.infer<typeof LeverageChangeSchema>;\n\nexport const MarginTypeChangeSchema = z.object({\n code: z.number(),\n msg: z.string(),\n});\nexport type MarginTypeChange = z.infer<typeof MarginTypeChangeSchema>;\n\nexport const PositionMarginChangeSchema = z.object({\n amount: z.number(),\n code: z.number(),\n msg: z.string(),\n type: z.number(),\n});\nexport type PositionMarginChange = z.infer<typeof PositionMarginChangeSchema>;\n\nexport const CountdownCancelAllSchema = z.object({\n symbol: z.string(),\n countdownTime: z.number(),\n});\nexport type CountdownCancelAll = z.infer<typeof CountdownCancelAllSchema>;\n\nexport const NewOrderAckSchema = z.object({\n orderId: z.number(),\n symbol: z.string(),\n status: z.string(),\n clientOrderId: z.string(),\n price: z.string(),\n avgPrice: z.string(),\n origQty: z.string(),\n executedQty: z.string(),\n cumQuote: z.string(),\n type: z.string(),\n reduceOnly: z.boolean(),\n side: z.string(),\n positionSide: z.string(),\n timeInForce: z.string().optional(),\n time: z.number(),\n updateTime: z.number(),\n workingType: z.string().optional(),\n origType: z.string().optional(),\n closePosition: z.boolean().optional(),\n});\nexport type NewOrderAck = z.infer<typeof NewOrderAckSchema>;\n","import { HttpClient } from '../client/HttpClient.js';\nimport {\n AlgoOrder,\n AlgoOrderResponseSchema,\n AlgoOrdersResponseSchema,\n BatchOrdersItem,\n BatchOrdersResponseSchema,\n CountdownCancelAll,\n CountdownCancelAllSchema,\n CreateOrderParams,\n LeverageChange,\n LeverageChangeSchema,\n MarginTypeChange,\n MarginTypeChangeSchema,\n ModifyOrderParams,\n NewOrderAck,\n NewOrderAckSchema,\n Order,\n OrderModifyHistoryEntry,\n OrderModifyHistorySchema,\n OrderResponseSchema,\n OrdersResponseSchema,\n PositionMarginChange,\n PositionMarginChangeSchema,\n} from '../types/trading.types.js';\n\nexport class FuturesTrading {\n constructor(private readonly http: HttpClient) {}\n\n async setLeverage(symbol: string, leverage: number): Promise<LeverageChange> {\n return LeverageChangeSchema.parse(\n await this.http.post('/fapi/v1/leverage', { symbol, leverage }, 'signed'),\n );\n }\n\n async createOrder(params: CreateOrderParams): Promise<NewOrderAck | Order> {\n return NewOrderAckSchema.parse(await this.http.post('/fapi/v1/order', params, 'signed'));\n }\n\n async createTestOrder(params: CreateOrderParams): Promise<Record<string, unknown>> {\n return this.http.post('/fapi/v1/order/test', params, 'signed');\n }\n\n async getOrder(\n symbol: string,\n options?: { orderId?: number; origClientOrderId?: string },\n ): Promise<Order> {\n return OrderResponseSchema.parse(\n await this.http.get('/fapi/v1/order', { symbol, ...options }, 'signed'),\n );\n }\n\n async cancelOrder(\n symbol: string,\n options?: { orderId?: number; origClientOrderId?: string },\n ): Promise<Order> {\n return OrderResponseSchema.parse(\n await this.http.delete('/fapi/v1/order', { symbol, ...options }, 'signed'),\n );\n }\n\n async getCurrentOrder(\n symbol: string,\n options?: { orderId?: number; origClientOrderId?: string },\n ): Promise<Order> {\n return OrderResponseSchema.parse(\n await this.http.get('/fapi/v1/openOrder', { symbol, ...options }, 'signed'),\n );\n }\n\n async getOpenOrders(symbol?: string): Promise<Order[]> {\n const params = symbol ? { symbol } : {};\n return OrdersResponseSchema.parse(await this.http.get('/fapi/v1/openOrders', params, 'signed'));\n }\n\n async getAllOrders(\n symbol: string,\n options?: { orderId?: number; startTime?: number; endTime?: number; limit?: number },\n ): Promise<Order[]> {\n return OrdersResponseSchema.parse(\n await this.http.get('/fapi/v1/allOrders', { symbol, ...options }, 'signed'),\n );\n }\n\n async cancelAllOpenOrders(symbol: string): Promise<Record<string, unknown>> {\n return this.http.delete('/fapi/v1/allOpenOrders', { symbol }, 'signed');\n }\n\n async modifyOrder(params: ModifyOrderParams): Promise<Order> {\n return OrderResponseSchema.parse(await this.http.put('/fapi/v1/order', params, 'signed'));\n }\n\n async createAlgoOrder(params: Record<string, unknown>): Promise<AlgoOrder> {\n return AlgoOrderResponseSchema.parse(await this.http.post('/fapi/v1/algoOrder', params, 'signed'));\n }\n\n async cancelAlgoOrder(\n symbol: string,\n options?: { algoId?: number; clientAlgoId?: string },\n ): Promise<Record<string, unknown>> {\n return this.http.delete('/fapi/v1/algoOrder', { symbol, ...options }, 'signed');\n }\n\n async cancelAllOpenAlgoOrders(symbol: string): Promise<Record<string, unknown>> {\n return this.http.delete('/fapi/v1/algoOpenOrders', { symbol }, 'signed');\n }\n\n async getAlgoOrder(\n symbol: string,\n options?: { algoId?: number; clientAlgoId?: string },\n ): Promise<AlgoOrder> {\n return AlgoOrderResponseSchema.parse(\n await this.http.get('/fapi/v1/algoOrder', { symbol, ...options }, 'signed'),\n );\n }\n\n async getOpenAlgoOrders(symbol?: string): Promise<AlgoOrder[]> {\n const params = symbol ? { symbol } : {};\n return AlgoOrdersResponseSchema.parse(await this.http.get('/fapi/v1/openAlgoOrders', params, 'signed'));\n }\n\n async getAllAlgoOrders(\n symbol: string,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<AlgoOrder[]> {\n return AlgoOrdersResponseSchema.parse(\n await this.http.get('/fapi/v1/allAlgoOrders', { symbol, ...options }, 'signed'),\n );\n }\n\n async createBatchOrders(batchOrders: CreateOrderParams[]): Promise<BatchOrdersItem[]> {\n return BatchOrdersResponseSchema.parse(\n await this.http.post('/fapi/v1/batchOrders', { batchOrders: JSON.stringify(batchOrders) }, 'signed'),\n );\n }\n\n async modifyBatchOrders(batchOrders: ModifyOrderParams[]): Promise<BatchOrdersItem[]> {\n return BatchOrdersResponseSchema.parse(\n await this.http.put('/fapi/v1/batchOrders', { batchOrders: JSON.stringify(batchOrders) }, 'signed'),\n );\n }\n\n async cancelBatchOrders(\n symbol: string,\n options?: { orderIdList?: number[]; origClientOrderIdList?: string[] },\n ): Promise<BatchOrdersItem[]> {\n const params: Record<string, unknown> = { symbol };\n if (options?.orderIdList?.length) params.orderIdList = JSON.stringify(options.orderIdList);\n if (options?.origClientOrderIdList?.length) {\n params.origClientOrderIdList = JSON.stringify(options.origClientOrderIdList);\n }\n return BatchOrdersResponseSchema.parse(await this.http.delete('/fapi/v1/batchOrders', params, 'signed'));\n }\n\n async getOrderModifyHistory(\n symbol: string,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<OrderModifyHistoryEntry[]> {\n return OrderModifyHistorySchema.parse(\n await this.http.get('/fapi/v1/orderAmendment', { symbol, ...options }, 'signed'),\n );\n }\n\n async setMarginType(symbol: string, marginType: 'isolated' | 'cross'): Promise<MarginTypeChange> {\n return MarginTypeChangeSchema.parse(\n await this.http.post('/fapi/v1/marginType', { symbol, marginType }, 'signed'),\n );\n }\n\n async modifyPositionMargin(symbol: string, amount: number, type: number): Promise<PositionMarginChange> {\n return PositionMarginChangeSchema.parse(\n await this.http.post('/fapi/v1/positionMargin', { symbol, amount, type }, 'signed'),\n );\n }\n\n async setCountdownCancelAll(symbol: string, countdownTime: number): Promise<CountdownCancelAll> {\n return CountdownCancelAllSchema.parse(\n await this.http.post('/fapi/v1/countdownCancelAll', { symbol, countdownTime }, 'signed'),\n );\n }\n\n async convertExchangeInfo(options?: { fromAsset?: string; toAsset?: string }): Promise<unknown[]> {\n return this.http.get('/fapi/v1/convert/exchangeInfo', options);\n }\n\n async convertGetQuote(params: {\n fromAsset: string;\n toAsset: string;\n fromAmount?: number;\n toAmount?: number;\n validTime?: '10s' | '30s' | '1m' | '2m';\n }): Promise<Record<string, unknown>> {\n return this.http.post('/fapi/v1/convert/getQuote', params, 'signed');\n }\n\n async convertAcceptQuote(quoteId: string): Promise<Record<string, unknown>> {\n return this.http.post('/fapi/v1/convert/acceptQuote', { quoteId }, 'signed');\n }\n\n async convertOrderStatus(options: { orderId?: string; quoteId?: string }): Promise<Record<string, unknown>> {\n return this.http.get('/fapi/v1/convert/orderStatus', options, 'signed');\n }\n}\n","import type { ExchangeSymbol } from './market.types.js';\n\n/**\n * Symbol trading rules, flattened out of the loose `filters` array that\n * `/fapi/v1/exchangeInfo` returns. Callers need these to round prices and\n * quantities before sending an order — Binance rejects anything that does not\n * sit exactly on a tick/step boundary (-1111) or that falls under the minimum\n * notional (-4164).\n */\nexport interface SymbolRules {\n symbol: string;\n status: string;\n baseAsset: string;\n quoteAsset: string;\n /** Tick the price must sit on, e.g. 0.10 for BTCUSDT. */\n tickSize: number;\n tickDecimals: number;\n /** Step the quantity must sit on for limit orders, e.g. 0.001 for BTCUSDT. */\n stepSize: number;\n stepDecimals: number;\n minQty: number;\n maxQty: number;\n /** MARKET orders carry their own LOT_SIZE, usually with a lower max. */\n marketStepSize: number;\n marketStepDecimals: number;\n marketMinQty: number;\n marketMaxQty: number;\n /** MIN_NOTIONAL — on USD-M futures the field is `notional`, not `minNotional`. */\n minNotional: number;\n}\n\ninterface RawFilter {\n filterType?: unknown;\n [key: string]: unknown;\n}\n\nfunction filtersOf(symbol: ExchangeSymbol): RawFilter[] {\n const raw = (symbol as unknown as Record<string, unknown>).filters;\n return Array.isArray(raw) ? (raw as RawFilter[]) : [];\n}\n\nfunction filterOf(symbol: ExchangeSymbol, filterType: string): RawFilter | undefined {\n return filtersOf(symbol).find((f) => f.filterType === filterType);\n}\n\nfunction num(value: unknown, fallback: number): number {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : fallback;\n}\n\n/**\n * Decimal places implied by a step string, e.g. \"0.00100000\" -> 3, \"1\" -> 0.\n * Derived from the string rather than the number so that a step like 0.0000001\n * never picks up an exponent representation.\n */\nexport function stepDecimals(step: string | number): number {\n const text = typeof step === 'number' ? step.toFixed(12) : String(step).trim();\n const dot = text.indexOf('.');\n if (dot === -1) return 0;\n return text.slice(dot + 1).replace(/0+$/, '').length;\n}\n\n/** Format a value at a fixed precision, which is what should be sent to Binance. */\nexport function formatToDecimals(value: number, decimals: number): string {\n return value.toFixed(decimals);\n}\n\n/**\n * Round down onto a step boundary. Used for quantities, where rounding up would\n * silently take on more risk than the caller asked for. The epsilon absorbs\n * binary-float error so that e.g. 0.3 / 0.1 = 2.9999999999999996 still floors to 3.\n */\nexport function floorToStep(value: number, step: number, decimals = stepDecimals(step)): number {\n if (!(step > 0)) return value;\n const steps = Math.floor(value / step + 1e-9);\n return Number((steps * step).toFixed(decimals));\n}\n\n/** Round to the nearest step boundary. Used for prices, where direction is not a risk. */\nexport function roundToStep(value: number, step: number, decimals = stepDecimals(step)): number {\n if (!(step > 0)) return value;\n const steps = Math.round(value / step);\n return Number((steps * step).toFixed(decimals));\n}\n\n/** Flatten one `exchangeInfo.symbols[]` entry into typed trading rules. */\nexport function symbolRulesFrom(symbol: ExchangeSymbol): SymbolRules {\n const raw = symbol as unknown as Record<string, unknown>;\n const price = filterOf(symbol, 'PRICE_FILTER');\n const lot = filterOf(symbol, 'LOT_SIZE');\n const marketLot = filterOf(symbol, 'MARKET_LOT_SIZE');\n const notional = filterOf(symbol, 'MIN_NOTIONAL');\n\n const tickSizeRaw = price?.tickSize ?? 10 ** -num(raw.pricePrecision, 2);\n const stepSizeRaw = lot?.stepSize ?? 10 ** -num(raw.quantityPrecision, 3);\n const marketStepRaw = marketLot?.stepSize ?? stepSizeRaw;\n\n return {\n symbol: symbol.symbol,\n status: symbol.status,\n baseAsset: symbol.baseAsset,\n quoteAsset: symbol.quoteAsset,\n tickSize: num(tickSizeRaw, 0.01),\n tickDecimals: stepDecimals(tickSizeRaw as string | number),\n stepSize: num(stepSizeRaw, 0.001),\n stepDecimals: stepDecimals(stepSizeRaw as string | number),\n minQty: num(lot?.minQty, 0),\n maxQty: num(lot?.maxQty, Number.POSITIVE_INFINITY),\n marketStepSize: num(marketStepRaw, 0.001),\n marketStepDecimals: stepDecimals(marketStepRaw as string | number),\n marketMinQty: num(marketLot?.minQty, num(lot?.minQty, 0)),\n marketMaxQty: num(marketLot?.maxQty, num(lot?.maxQty, Number.POSITIVE_INFINITY)),\n minNotional: num(notional?.notional, 0),\n };\n}\n","import type { FuturesAccount } from './FuturesAccount.js';\nimport type { FuturesData } from './FuturesData.js';\nimport type { FuturesMarket } from './FuturesMarket.js';\nimport type { FuturesTrading } from './FuturesTrading.js';\nimport type { PositionRisk } from '../types/account.types.js';\nimport {\n floorToStep,\n formatToDecimals,\n roundToStep,\n symbolRulesFrom,\n type SymbolRules,\n} from '../types/filters.types.js';\n\nexport interface SizePositionParams {\n symbol: string;\n side: 'BUY' | 'SELL';\n stopPrice: number;\n entryPrice?: number;\n riskAmount?: number;\n riskPct?: number;\n leverage?: number;\n marketOrder?: boolean;\n}\n\nexport interface PositionSizing {\n ok: boolean;\n reasons: string[];\n symbol: string;\n side: 'BUY' | 'SELL';\n entryPrice: number;\n stopPrice: number;\n riskPerUnit: number;\n riskAmount: number;\n rawQuantity: number;\n quantity: number;\n /** Pass this to createOrder — a string avoids float round-tripping. */\n quantityStr: string;\n notional: number;\n minNotional: number;\n leverage: number;\n requiredMargin: number;\n availableBalance?: number;\n rules: SymbolRules;\n}\n\nexport interface ClosePositionParams {\n symbol: string;\n positionSide?: 'BOTH' | 'LONG' | 'SHORT';\n /** Fraction of the position to close, 0 < portion <= 1. Defaults to the whole position. */\n portion?: number;\n dryRun?: boolean;\n}\n\nexport interface BracketOrderParams {\n symbol: string;\n side: 'BUY' | 'SELL';\n quantity: number | string;\n entryPrice?: number;\n stopLossPrice: number;\n takeProfitPrice?: number;\n positionSide?: 'BOTH' | 'LONG' | 'SHORT';\n workingType?: 'MARK_PRICE' | 'CONTRACT_PRICE';\n}\n\nconst RULES_TTL_MS = 60_000;\n\n/**\n * Composite operations layered over the single-endpoint resources.\n *\n * Everything here fans out over `FuturesMarket` / `FuturesData` / `FuturesAccount` /\n * `FuturesTrading` directly. It deliberately does not call the LLM tool handlers,\n * which return formatted JSON strings — composing at this layer keeps typed values\n * typed and avoids a parse/stringify round-trip per step.\n */\nexport class FuturesOps {\n private rulesCache = new Map<string, { rules: SymbolRules; at: number }>();\n\n constructor(\n private readonly market: FuturesMarket,\n private readonly data: FuturesData,\n private readonly account: FuturesAccount,\n private readonly trading: FuturesTrading,\n ) {}\n\n /** Typed tick/step/notional rules for a symbol, cached briefly (exchangeInfo is a large payload). */\n async symbolRules(symbol: string, options?: { refresh?: boolean }): Promise<SymbolRules> {\n const key = symbol.toUpperCase();\n const cached = this.rulesCache.get(key);\n if (!options?.refresh && cached && Date.now() - cached.at < RULES_TTL_MS) return cached.rules;\n\n const details = await this.market.instrumentDetails(key);\n const rules = symbolRulesFrom(details);\n this.rulesCache.set(key, { rules, at: Date.now() });\n return rules;\n }\n\n /** Round a price to the symbol's tick and a quantity to its step, ready to send. */\n async quantize(\n symbol: string,\n values: { price?: number; quantity?: number; marketOrder?: boolean },\n ): Promise<{ price?: string; quantity?: string; rules: SymbolRules }> {\n const rules = await this.symbolRules(symbol);\n const step = values.marketOrder ? rules.marketStepSize : rules.stepSize;\n const stepDp = values.marketOrder ? rules.marketStepDecimals : rules.stepDecimals;\n return {\n price:\n values.price === undefined\n ? undefined\n : formatToDecimals(roundToStep(values.price, rules.tickSize, rules.tickDecimals), rules.tickDecimals),\n quantity:\n values.quantity === undefined\n ? undefined\n : formatToDecimals(floorToStep(values.quantity, step, stepDp), stepDp),\n rules,\n };\n }\n\n /**\n * Risk-based position sizing. Converts \"risk N quote units between entry and stop\"\n * into a quantity that satisfies the symbol's step size, lot bounds and min notional,\n * and reports every constraint it could not satisfy instead of silently adjusting risk.\n */\n async sizePosition(params: SizePositionParams): Promise<PositionSizing> {\n const symbol = params.symbol.toUpperCase();\n const reasons: string[] = [];\n\n if ((params.riskAmount === undefined) === (params.riskPct === undefined)) {\n throw new Error('Provide exactly one of riskAmount or riskPct');\n }\n\n const rules = await this.symbolRules(symbol);\n const entryPrice = params.entryPrice ?? (await this.data.premiumIndex(symbol)).markPrice;\n\n let availableBalance: number | undefined;\n let riskAmount = params.riskAmount ?? 0;\n if (params.riskPct !== undefined) {\n const balances = await this.account.balanceV3();\n availableBalance = balances.find((b) => b.asset === rules.quoteAsset)?.availableBalance ?? 0;\n riskAmount = availableBalance * (params.riskPct / 100);\n }\n\n const riskPerUnit = Math.abs(entryPrice - params.stopPrice);\n const stopOnCorrectSide =\n params.side === 'BUY' ? params.stopPrice < entryPrice : params.stopPrice > entryPrice;\n if (!stopOnCorrectSide) {\n reasons.push(\n `stopPrice ${params.stopPrice} is on the wrong side of entry ${entryPrice} for a ${params.side}`,\n );\n }\n if (riskPerUnit <= 0) reasons.push('stopPrice equals entryPrice, risk per unit is zero');\n\n const step = params.marketOrder ? rules.marketStepSize : rules.stepSize;\n const stepDp = params.marketOrder ? rules.marketStepDecimals : rules.stepDecimals;\n const minQty = params.marketOrder ? rules.marketMinQty : rules.minQty;\n const maxQty = params.marketOrder ? rules.marketMaxQty : rules.maxQty;\n\n const rawQuantity = riskPerUnit > 0 ? riskAmount / riskPerUnit : 0;\n let quantity = floorToStep(rawQuantity, step, stepDp);\n\n if (quantity > maxQty) {\n reasons.push(`quantity ${quantity} exceeds maxQty ${maxQty}, clamped`);\n quantity = floorToStep(maxQty, step, stepDp);\n }\n if (quantity < minQty) {\n reasons.push(`quantity ${quantity} is below minQty ${minQty} for this symbol`);\n }\n\n const notional = quantity * entryPrice;\n if (rules.minNotional > 0 && notional < rules.minNotional) {\n reasons.push(\n `notional ${notional.toFixed(2)} is below the ${rules.minNotional} minimum; ` +\n `raising risk or widening the stop is required (this tool will not increase risk for you)`,\n );\n }\n if (rules.status !== 'TRADING') reasons.push(`symbol status is ${rules.status}, not TRADING`);\n\n const leverage = params.leverage ?? 1;\n const requiredMargin = notional / leverage;\n if (availableBalance !== undefined && requiredMargin > availableBalance) {\n reasons.push(\n `required margin ${requiredMargin.toFixed(2)} exceeds available balance ${availableBalance.toFixed(2)}`,\n );\n }\n\n return {\n ok: reasons.length === 0 && quantity > 0,\n reasons,\n symbol,\n side: params.side,\n entryPrice,\n stopPrice: params.stopPrice,\n riskPerUnit,\n riskAmount,\n rawQuantity,\n quantity,\n quantityStr: formatToDecimals(quantity, stepDp),\n notional,\n minNotional: rules.minNotional,\n leverage,\n requiredMargin,\n availableBalance,\n rules,\n };\n }\n\n /**\n * Flatten an open position with a reduce-only market order.\n *\n * Picks the closing side from the sign of `positionAmt` and, critically, chooses\n * between `reduceOnly` and `positionSide`: Binance rejects `reduceOnly` in hedge\n * mode, and rejects a LONG/SHORT `positionSide` in one-way mode.\n */\n async closePosition(params: ClosePositionParams): Promise<{\n closed: boolean;\n reason?: string;\n position?: PositionRisk;\n order?: unknown;\n request?: Record<string, unknown>;\n }> {\n const symbol = params.symbol.toUpperCase();\n const portion = params.portion ?? 1;\n if (!(portion > 0 && portion <= 1)) throw new Error('portion must be within (0, 1]');\n\n const positions = await this.account.positionRiskV3(symbol);\n const open = positions.filter(\n (p) =>\n p.positionAmt !== 0 &&\n (params.positionSide === undefined || p.positionSide === params.positionSide),\n );\n\n if (open.length === 0) return { closed: false, reason: `no open position on ${symbol}` };\n if (open.length > 1) {\n return {\n closed: false,\n reason: `${open.length} positions open on ${symbol} (hedge mode); pass positionSide to pick one`,\n };\n }\n\n const position = open[0] as PositionRisk;\n const rules = await this.symbolRules(symbol);\n const quantity = floorToStep(\n Math.abs(position.positionAmt) * portion,\n rules.marketStepSize,\n rules.marketStepDecimals,\n );\n if (quantity <= 0) {\n return { closed: false, reason: 'closing quantity rounds to zero at this symbol step size', position };\n }\n\n const hedgeMode = position.positionSide !== 'BOTH';\n const request: Record<string, unknown> = {\n symbol,\n side: position.positionAmt > 0 ? 'SELL' : 'BUY',\n type: 'MARKET',\n quantity: formatToDecimals(quantity, rules.marketStepDecimals),\n ...(hedgeMode ? { positionSide: position.positionSide } : { reduceOnly: true }),\n };\n\n if (params.dryRun) return { closed: false, reason: 'dryRun', position, request };\n\n const order = await this.trading.createOrder(request as never);\n return { closed: true, position, order, request };\n }\n\n /**\n * One-call market picture: 24h stats, mark/index and funding, open interest and\n * positioning. Uses allSettled so a single unavailable feed degrades one field\n * instead of failing the whole snapshot.\n */\n async marketSnapshot(\n symbol: string,\n options?: { period?: string },\n ): Promise<Record<string, unknown>> {\n const s = symbol.toUpperCase();\n const period = options?.period ?? '1h';\n const [ticker, premium, openInterest, longShort] = await Promise.allSettled([\n this.market.ticker24hr(s),\n this.data.premiumIndex(s),\n this.data.openInterest(s),\n this.data.globalLongShortAccountRatio(s, period, 1),\n ]);\n\n const settled = <T>(r: PromiseSettledResult<T>): unknown =>\n r.status === 'fulfilled' ? r.value : { error: String((r as PromiseRejectedResult).reason) };\n\n return {\n symbol: s,\n asOf: Date.now(),\n ticker24hr: settled(ticker),\n markPrice: settled(premium),\n openInterest: settled(openInterest),\n longShortAccountRatio: settled(longShort),\n };\n }\n\n /** Balances, open positions and working orders in one call, with the noise filtered out. */\n async accountOverview(): Promise<Record<string, unknown>> {\n const [balances, positions, openOrders] = await Promise.allSettled([\n this.account.balanceV3(),\n this.account.positionRiskV3(),\n this.trading.getOpenOrders(),\n ]);\n\n const fundedBalances =\n balances.status === 'fulfilled' ? balances.value.filter((b) => b.balance !== 0) : [];\n const openPositions =\n positions.status === 'fulfilled' ? positions.value.filter((p) => p.positionAmt !== 0) : [];\n\n return {\n asOf: Date.now(),\n balances: balances.status === 'fulfilled' ? fundedBalances : { error: String(balances.reason) },\n positions: positions.status === 'fulfilled' ? openPositions : { error: String(positions.reason) },\n openOrders: openOrders.status === 'fulfilled' ? openOrders.value : { error: String(openOrders.reason) },\n totals:\n positions.status === 'fulfilled'\n ? {\n openPositionCount: openPositions.length,\n unrealizedPnl: openPositions.reduce((sum, p) => sum + p.unRealizedProfit, 0),\n grossNotional: openPositions.reduce((sum, p) => sum + Math.abs(p.notional), 0),\n }\n : undefined,\n };\n }\n\n /**\n * Entry order plus its protective stop-loss and optional take-profit, with every\n * price quantized to the symbol tick.\n *\n * The protective legs are placed after the entry is accepted. If a protective leg\n * fails, the failure is reported per-leg rather than unwound: the entry may already\n * have filled, so cancelling it is not a safe automatic recovery.\n */\n async placeBracketOrder(params: BracketOrderParams): Promise<Record<string, unknown>> {\n const symbol = params.symbol.toUpperCase();\n const rules = await this.symbolRules(symbol);\n const tick = (p: number): string =>\n formatToDecimals(roundToStep(p, rules.tickSize, rules.tickDecimals), rules.tickDecimals);\n\n const quantity = formatToDecimals(\n floorToStep(Number(params.quantity), rules.stepSize, rules.stepDecimals),\n rules.stepDecimals,\n );\n if (Number(quantity) <= 0) throw new Error('quantity rounds to zero at this symbol step size');\n\n const exitSide = params.side === 'BUY' ? 'SELL' : 'BUY';\n const hedgeMode = params.positionSide !== undefined && params.positionSide !== 'BOTH';\n const sideFields = hedgeMode ? { positionSide: params.positionSide } : { reduceOnly: true };\n const workingType = params.workingType ?? 'MARK_PRICE';\n\n const entry = await this.trading.createOrder({\n symbol,\n side: params.side,\n type: params.entryPrice === undefined ? 'MARKET' : 'LIMIT',\n quantity,\n ...(params.entryPrice === undefined\n ? {}\n : { price: tick(params.entryPrice), timeInForce: 'GTC' as const }),\n ...(hedgeMode ? { positionSide: params.positionSide } : {}),\n });\n\n const protective = await Promise.allSettled([\n this.trading.createOrder({\n symbol,\n side: exitSide,\n type: 'STOP_MARKET',\n quantity,\n stopPrice: tick(params.stopLossPrice),\n workingType,\n ...sideFields,\n } as never),\n ...(params.takeProfitPrice === undefined\n ? []\n : [\n this.trading.createOrder({\n symbol,\n side: exitSide,\n type: 'TAKE_PROFIT_MARKET',\n quantity,\n stopPrice: tick(params.takeProfitPrice),\n workingType,\n ...sideFields,\n } as never),\n ]),\n ]);\n\n const [stopLoss, takeProfit] = protective;\n const leg = (r?: PromiseSettledResult<unknown>): unknown =>\n r === undefined\n ? undefined\n : r.status === 'fulfilled'\n ? r.value\n : { error: String((r as PromiseRejectedResult).reason) };\n\n const failures = protective.filter((r) => r.status === 'rejected').length;\n return {\n symbol,\n quantity,\n entry,\n stopLoss: leg(stopLoss),\n takeProfit: leg(takeProfit),\n protectionComplete: failures === 0,\n ...(failures > 0\n ? {\n warning:\n 'Entry was submitted but at least one protective order failed. The position may be ' +\n 'unprotected — review and place the missing leg manually.',\n }\n : {}),\n };\n }\n}\n","import { HttpClient } from '../client/HttpClient.js';\nimport { ListenKey, ListenKeySchema } from '../types/userdata.types.js';\n\nexport class UserDataStream {\n constructor(private readonly http: HttpClient) {}\n\n async createListenKey(): Promise<ListenKey> {\n return ListenKeySchema.parse(await this.http.post('/fapi/v1/listenKey', undefined, 'apiKey'));\n }\n\n async keepAliveListenKey(): Promise<Record<string, unknown>> {\n return this.http.put('/fapi/v1/listenKey', undefined, 'apiKey');\n }\n\n async closeListenKey(): Promise<Record<string, unknown>> {\n return this.http.delete('/fapi/v1/listenKey', undefined, 'apiKey');\n }\n}\n","import { EventEmitter } from 'node:events';\nimport WebSocket, { type RawData } from 'ws';\nimport { parseWsPayload, type WsStreamPayload } from '../types/ws.types.js';\n\nexport interface BaseWSOptions {\n baseStreamUrl: string;\n reconnectDelayMs?: number;\n maxReconnectDelayMs?: number;\n}\n\ninterface CombinedStreamMessage {\n stream: string;\n data: unknown;\n}\n\nexport class BaseWS extends EventEmitter {\n private ws: WebSocket | null = null;\n private readonly streams = new Set<string>();\n private reconnectAttempt = 0;\n private closedByUser = false;\n\n constructor(private readonly options: BaseWSOptions) {\n super();\n }\n\n subscribe(streams: string[]): void {\n streams.forEach((s) => this.streams.add(s));\n if (this.isOpen()) {\n this.send({ method: 'SUBSCRIBE', params: streams, id: Date.now() });\n } else {\n this.connect();\n }\n }\n\n unsubscribe(streams: string[]): void {\n streams.forEach((s) => this.streams.delete(s));\n if (this.isOpen()) {\n this.send({ method: 'UNSUBSCRIBE', params: streams, id: Date.now() });\n }\n }\n\n close(): void {\n this.closedByUser = true;\n this.ws?.close();\n }\n\n reconnect(): void {\n if (this.ws?.readyState === WebSocket.OPEN) this.ws.close();\n this.reconnectAttempt = 0;\n if (!this.closedByUser) this.connect();\n }\n\n resetReconnectAttempts(): void {\n this.reconnectAttempt = 0;\n }\n\n private isOpen(): boolean {\n return this.ws?.readyState === WebSocket.OPEN;\n }\n\n private send(payload: unknown): void {\n this.ws?.send(JSON.stringify(payload));\n }\n\n private connect(): void {\n this.closedByUser = false;\n const url = `${this.options.baseStreamUrl}?streams=${[...this.streams].join('/')}`;\n this.ws = new WebSocket(url);\n\n this.ws.on('open', () => {\n this.reconnectAttempt = 0;\n this.emit('open');\n });\n\n this.ws.on('message', (raw: RawData) => {\n this.handleMessage(raw.toString());\n });\n\n this.ws.on('close', () => {\n this.emit('close');\n if (!this.closedByUser) this.scheduleReconnect();\n });\n\n this.ws.on('error', (err: Error) => {\n if (this.closedByUser) return;\n this.emit('error', err);\n });\n }\n\n private handleMessage(raw: string): void {\n let parsed: CombinedStreamMessage;\n try {\n parsed = JSON.parse(raw) as CombinedStreamMessage;\n } catch {\n return;\n }\n if (!parsed.stream || parsed.data === undefined) return;\n\n try {\n const payload: WsStreamPayload = parseWsPayload(parsed.stream, parsed.data);\n this.emit('message', parsed.stream, payload);\n this.emit(parsed.stream, payload);\n } catch (err) {\n this.emit('error', err);\n }\n }\n\n private scheduleReconnect(): void {\n const base = this.options.reconnectDelayMs ?? 1000;\n const max = this.options.maxReconnectDelayMs ?? 30_000;\n const delay = Math.min(base * 2 ** this.reconnectAttempt, max);\n this.reconnectAttempt += 1;\n setTimeout(() => {\n if (!this.closedByUser) this.connect();\n }, delay);\n }\n}\n","import { z } from 'zod';\n\nexport const WsKlinePayloadSchema = z.object({\n e: z.literal('kline'),\n E: z.number(),\n s: z.string(),\n k: z.object({\n t: z.number(),\n T: z.number(),\n s: z.string(),\n i: z.string(),\n o: z.string().transform(Number),\n c: z.string().transform(Number),\n h: z.string().transform(Number),\n l: z.string().transform(Number),\n v: z.string().transform(Number),\n n: z.number(),\n x: z.boolean(),\n q: z.string().transform(Number),\n V: z.string().transform(Number),\n Q: z.string().transform(Number),\n }),\n});\nexport type WsKlinePayload = z.infer<typeof WsKlinePayloadSchema>;\n\nexport const WsAggTradePayloadSchema = z.object({\n e: z.literal('aggTrade'),\n E: z.number(),\n s: z.string(),\n a: z.number(),\n p: z.string().transform(Number),\n q: z.string().transform(Number),\n f: z.number(),\n l: z.number(),\n T: z.number(),\n m: z.boolean(),\n});\nexport type WsAggTradePayload = z.infer<typeof WsAggTradePayloadSchema>;\n\nexport const WsTradePayloadSchema = z.object({\n e: z.literal('trade'),\n E: z.number(),\n s: z.string(),\n t: z.number(),\n p: z.string().transform(Number),\n q: z.string().transform(Number),\n T: z.number(),\n m: z.boolean(),\n});\nexport type WsTradePayload = z.infer<typeof WsTradePayloadSchema>;\n\nexport const WsDepthUpdatePayloadSchema = z.object({\n e: z.literal('depthUpdate'),\n E: z.number(),\n s: z.string(),\n U: z.number(),\n u: z.number(),\n T: z.number().optional(),\n pu: z.number().optional(),\n b: z.array(z.tuple([z.string(), z.string()])),\n a: z.array(z.tuple([z.string(), z.string()])),\n});\nexport type WsDepthUpdatePayload = z.infer<typeof WsDepthUpdatePayloadSchema>;\n\nexport const WsTicker24hrPayloadSchema = z.object({\n e: z.literal('24hrTicker'),\n E: z.number(),\n s: z.string(),\n p: z.string().transform(Number),\n P: z.string().transform(Number),\n c: z.string().transform(Number),\n o: z.string().transform(Number),\n h: z.string().transform(Number),\n l: z.string().transform(Number),\n v: z.string().transform(Number),\n q: z.string().transform(Number),\n});\nexport type WsTicker24hrPayload = z.infer<typeof WsTicker24hrPayloadSchema>;\n\nexport const WsBookTickerPayloadSchema = z.object({\n u: z.number(),\n s: z.string(),\n b: z.string().transform(Number),\n B: z.string().transform(Number),\n a: z.string().transform(Number),\n A: z.string().transform(Number),\n});\nexport type WsBookTickerPayload = z.infer<typeof WsBookTickerPayloadSchema>;\n\nexport const WsMarkPricePayloadSchema = z.object({\n e: z.literal('markPriceUpdate'),\n E: z.number(),\n s: z.string(),\n p: z.string().transform(Number),\n i: z.string().transform(Number),\n P: z.string().transform(Number),\n r: z.string().transform(Number),\n T: z.number(),\n});\nexport type WsMarkPricePayload = z.infer<typeof WsMarkPricePayloadSchema>;\n\nexport const WsMiniTickerPayloadSchema = z.object({\n e: z.literal('24hrMiniTicker'),\n E: z.number(),\n s: z.string(),\n c: z.string().transform(Number),\n o: z.string().transform(Number),\n h: z.string().transform(Number),\n l: z.string().transform(Number),\n v: z.string().transform(Number),\n q: z.string().transform(Number),\n});\nexport type WsMiniTickerPayload = z.infer<typeof WsMiniTickerPayloadSchema>;\n\nexport const WsForceOrderPayloadSchema = z.object({\n e: z.literal('forceOrder'),\n E: z.number(),\n o: z.object({\n s: z.string(),\n S: z.string(),\n o: z.string(),\n f: z.string(),\n q: z.string().transform(Number),\n p: z.string().transform(Number),\n ap: z.string().transform(Number),\n X: z.string(),\n l: z.string().transform(Number),\n z: z.string().transform(Number),\n T: z.number(),\n }),\n});\nexport type WsForceOrderPayload = z.infer<typeof WsForceOrderPayloadSchema>;\n\nexport const WsCompositeIndexPayloadSchema = z.object({\n e: z.literal('compositeIndex'),\n E: z.number(),\n s: z.string(),\n p: z.string().transform(Number),\n c: z.array(\n z.object({\n b: z.string(),\n q: z.string(),\n w: z.string().transform(Number),\n p: z.string().transform(Number),\n }),\n ),\n});\nexport type WsCompositeIndexPayload = z.infer<typeof WsCompositeIndexPayloadSchema>;\n\nexport const WsAssetIndexPayloadSchema = z.object({\n e: z.literal('assetIndex'),\n E: z.number(),\n s: z.string(),\n i: z.string().transform(Number),\n b: z.string().transform(Number),\n a: z.string().transform(Number),\n});\nexport type WsAssetIndexPayload = z.infer<typeof WsAssetIndexPayloadSchema>;\n\nexport const WsRollingWindowTickerPayloadSchema = z.object({\n e: z.enum(['1hTicker', '4hTicker', '1dTicker', '7dTicker', '30dTicker']),\n E: z.number(),\n s: z.string(),\n p: z.string().transform(Number),\n P: z.string().transform(Number),\n o: z.string().transform(Number),\n h: z.string().transform(Number),\n l: z.string().transform(Number),\n c: z.string().transform(Number),\n v: z.string().transform(Number),\n q: z.string().transform(Number),\n O: z.number(),\n C: z.number(),\n});\nexport type WsRollingWindowTickerPayload = z.infer<typeof WsRollingWindowTickerPayloadSchema>;\n\nexport const WsSpotAvgPricePayloadSchema = z.object({\n e: z.literal('avgPrice'),\n E: z.number(),\n s: z.string(),\n i: z.string(),\n w: z.string().transform(Number),\n T: z.number(),\n});\nexport type WsSpotAvgPricePayload = z.infer<typeof WsSpotAvgPricePayloadSchema>;\n\nexport type WsStreamPayload =\n | WsKlinePayload\n | WsAggTradePayload\n | WsTradePayload\n | WsDepthUpdatePayload\n | WsTicker24hrPayload\n | WsBookTickerPayload\n | WsMarkPricePayload\n | WsMiniTickerPayload\n | WsForceOrderPayload\n | WsCompositeIndexPayload\n | WsAssetIndexPayload\n | WsRollingWindowTickerPayload\n | WsSpotAvgPricePayload;\n\nexport function parseWsPayload(streamName: string, raw: unknown): WsStreamPayload {\n if (streamName.includes('@kline_')) return WsKlinePayloadSchema.parse(raw);\n if (streamName.includes('@continuousKline_') || streamName.includes('@indexPriceKline_') || streamName.includes('@markPriceKline_')) {\n return WsKlinePayloadSchema.parse(raw);\n }\n if (streamName.includes('@aggTrade')) return WsAggTradePayloadSchema.parse(raw);\n if (streamName.includes('@trade')) return WsTradePayloadSchema.parse(raw);\n if (streamName.includes('@depth')) return WsDepthUpdatePayloadSchema.parse(raw);\n if (streamName.includes('@bookTicker')) return WsBookTickerPayloadSchema.parse(raw);\n if (streamName.includes('@markPrice')) return WsMarkPricePayloadSchema.parse(raw);\n if (streamName.includes('@miniTicker')) return WsMiniTickerPayloadSchema.parse(raw);\n if (streamName.includes('@forceOrder')) return WsForceOrderPayloadSchema.parse(raw);\n if (streamName.includes('@compositeIndex')) return WsCompositeIndexPayloadSchema.parse(raw);\n if (streamName.includes('@assetIndex')) return WsAssetIndexPayloadSchema.parse(raw);\n if (streamName.includes('@avgPrice')) return WsSpotAvgPricePayloadSchema.parse(raw);\n if (streamName.includes('@ticker_')) return WsRollingWindowTickerPayloadSchema.parse(raw);\n if (streamName.includes('@ticker')) return WsTicker24hrPayloadSchema.parse(raw);\n throw new Error(`Unknown WS stream type: ${streamName}`);\n}\n","import { BaseWS } from './BaseWS.js';\nimport type { KlineInterval } from '../types/market.types.js';\n\nexport type ContractType = 'perpetual' | 'current_quarter' | 'next_quarter';\nexport type MarkPriceSpeed = '1s' | '3s';\n\nexport class FuturesMarketWS extends BaseWS {\n constructor(baseStreamUrl = 'wss://fstream.binance.com/stream') {\n super({ baseStreamUrl });\n }\n\n kline(symbol: string, interval: KlineInterval): string {\n return `${symbol.toLowerCase()}@kline_${interval}`;\n }\n\n continuousKline(symbol: string, contractType: ContractType, interval: KlineInterval): string {\n return `${symbol.toLowerCase()}@continuousKline_${contractType}_${interval}`;\n }\n\n indexPriceKline(symbol: string, interval: KlineInterval): string {\n return `${symbol.toLowerCase()}@indexPriceKline_${interval}`;\n }\n\n markPriceKline(symbol: string, interval: KlineInterval): string {\n return `${symbol.toLowerCase()}@markPriceKline_${interval}`;\n }\n\n aggTrade(symbol: string): string {\n return `${symbol.toLowerCase()}@aggTrade`;\n }\n\n trade(symbol: string): string {\n return `${symbol.toLowerCase()}@trade`;\n }\n\n depth(symbol: string, level: 5 | 10 | 20 = 20): string {\n return `${symbol.toLowerCase()}@depth${level}`;\n }\n\n depthDiff(symbol: string): string {\n return `${symbol.toLowerCase()}@depth`;\n }\n\n depthDiffSpeed(symbol: string, updateSpeed: '100ms' | '500ms'): string {\n return `${symbol.toLowerCase()}@depth@${updateSpeed}`;\n }\n\n ticker(symbol: string): string {\n return `${symbol.toLowerCase()}@ticker`;\n }\n\n rollingWindowTicker(symbol: string, window: '1h' | '4h' | '1d' = '1h'): string {\n return `${symbol.toLowerCase()}@ticker_${window}`;\n }\n\n allRollingWindowTickers(window: '1h' | '4h' | '1d' = '1h'): string {\n return `!ticker_${window}@arr`;\n }\n\n allMarketTickers(): string {\n return '!ticker@arr';\n }\n\n allBookTickers(): string {\n return '!bookTicker';\n }\n\n miniTicker(symbol: string): string {\n return `${symbol.toLowerCase()}@miniTicker`;\n }\n\n allMiniTickers(): string {\n return '!miniTicker@arr';\n }\n\n markPrice(symbol: string, updateSpeed: MarkPriceSpeed = '3s'): string {\n return `${symbol.toLowerCase()}@markPrice@${updateSpeed}`;\n }\n\n allMarkPrices(): string {\n return '!markPrice@arr';\n }\n\n bookTicker(symbol: string): string {\n return `${symbol.toLowerCase()}@bookTicker`;\n }\n\n liquidationOrder(symbol: string): string {\n return `${symbol.toLowerCase()}@forceOrder`;\n }\n\n allLiquidationOrders(): string {\n return '!forceOrder@arr';\n }\n\n compositeIndex(symbol: string): string {\n return `${symbol.toLowerCase()}@compositeIndex`;\n }\n\n assetIndex(symbol: string): string {\n return `${symbol.toLowerCase()}@assetIndex`;\n }\n\n allAssetIndices(): string {\n return '!assetIndex@arr';\n }\n}\n","import { BaseWS } from './BaseWS.js';\nimport type { KlineInterval } from '../types/market.types.js';\n\nexport class SpotMarketWS extends BaseWS {\n constructor(baseStreamUrl = 'wss://stream.binance.com:9443/stream') {\n super({ baseStreamUrl });\n }\n\n kline(symbol: string, interval: KlineInterval): string {\n return `${symbol.toLowerCase()}@kline_${interval}`;\n }\n\n aggTrade(symbol: string): string {\n return `${symbol.toLowerCase()}@aggTrade`;\n }\n\n trade(symbol: string): string {\n return `${symbol.toLowerCase()}@trade`;\n }\n\n depth(symbol: string, level: 5 | 10 | 20 = 20): string {\n return `${symbol.toLowerCase()}@depth${level}`;\n }\n\n depthDiff(symbol: string): string {\n return `${symbol.toLowerCase()}@depth`;\n }\n\n depthDiffSpeed(symbol: string, updateSpeed: '100ms'): string {\n return `${symbol.toLowerCase()}@depth@${updateSpeed}`;\n }\n\n avgPrice(symbol: string): string {\n return `${symbol.toLowerCase()}@avgPrice`;\n }\n\n ticker(symbol: string): string {\n return `${symbol.toLowerCase()}@ticker`;\n }\n\n rollingWindowTicker(\n symbol: string,\n window: '1h' | '4h' | '1d' | '7d' | '30d' = '1h',\n ): string {\n return `${symbol.toLowerCase()}@ticker_${window}`;\n }\n\n allRollingWindowTickers(window: '1h' | '4h' | '1d' | '7d' | '30d' = '1h'): string {\n return `!ticker_${window}@arr`;\n }\n\n miniTicker(symbol: string): string {\n return `${symbol.toLowerCase()}@miniTicker`;\n }\n\n allMarketTickers(): string {\n return '!ticker@arr';\n }\n\n allMiniTickers(): string {\n return '!miniTicker@arr';\n }\n\n bookTicker(symbol: string): string {\n return `${symbol.toLowerCase()}@bookTicker`;\n }\n\n allBookTickers(): string {\n return '!bookTicker';\n }\n}\n","import { EventEmitter } from 'node:events';\nimport WebSocket, { type RawData } from 'ws';\nimport { parseSpotUserDataEvent, type SpotUserDataEvent } from '../types/spot.types.js';\n\nexport interface SpotUserWSOptions {\n baseUserUrl: string;\n getListenKey: () => string | null;\n reconnectDelayMs?: number;\n maxReconnectDelayMs?: number;\n}\n\nexport class SpotUserWS extends EventEmitter {\n private ws: WebSocket | null = null;\n private reconnectAttempt = 0;\n private closedByUser = false;\n\n constructor(private readonly options: SpotUserWSOptions) {\n super();\n }\n\n connect(): void {\n const listenKey = this.options.getListenKey();\n if (!listenKey) {\n this.emit('error', new Error('No spot listenKey available for user data stream'));\n return;\n }\n this.closedByUser = false;\n const url = `${this.options.baseUserUrl}/${listenKey}`;\n this.ws = new WebSocket(url);\n\n this.ws.on('open', () => {\n this.reconnectAttempt = 0;\n this.emit('open');\n });\n\n this.ws.on('message', (raw: RawData) => {\n this.handleMessage(raw.toString());\n });\n\n this.ws.on('close', () => {\n this.emit('close');\n if (!this.closedByUser) this.scheduleReconnect();\n });\n\n this.ws.on('error', (err: Error) => {\n this.emit('error', err);\n });\n }\n\n close(): void {\n this.closedByUser = true;\n this.ws?.close();\n }\n\n reconnect(): void {\n if (this.ws?.readyState === WebSocket.OPEN) this.ws.close();\n this.reconnectAttempt = 0;\n if (!this.closedByUser) this.connect();\n }\n\n resetReconnectAttempts(): void {\n this.reconnectAttempt = 0;\n }\n\n private handleMessage(raw: string): void {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n return;\n }\n try {\n const event: SpotUserDataEvent = parseSpotUserDataEvent(parsed);\n this.emit(event.e, event);\n this.emit('userData', event);\n } catch (err) {\n this.emit('error', err);\n }\n }\n\n private scheduleReconnect(): void {\n const base = this.options.reconnectDelayMs ?? 1000;\n const max = this.options.maxReconnectDelayMs ?? 30_000;\n const delay = Math.min(base * 2 ** this.reconnectAttempt, max);\n this.reconnectAttempt += 1;\n setTimeout(() => {\n if (!this.closedByUser) this.connect();\n }, delay);\n }\n}\n","import { EventEmitter } from 'node:events';\nimport WebSocket, { type RawData } from 'ws';\nimport {\n parseUserDataEvent,\n type UserDataEvent,\n} from '../types/userdata.types.js';\n\nexport interface FuturesUserWSOptions {\n baseUserUrl: string;\n getListenKey: () => string | null;\n reconnectDelayMs?: number;\n maxReconnectDelayMs?: number;\n}\n\nexport class FuturesUserWS extends EventEmitter {\n private ws: WebSocket | null = null;\n private reconnectAttempt = 0;\n private closedByUser = false;\n\n constructor(private readonly options: FuturesUserWSOptions) {\n super();\n }\n\n connect(): void {\n const listenKey = this.options.getListenKey();\n if (!listenKey) {\n this.emit('error', new Error('No listenKey available for user data stream'));\n return;\n }\n this.closedByUser = false;\n const url = `${this.options.baseUserUrl}/${listenKey}`;\n this.ws = new WebSocket(url);\n\n this.ws.on('open', () => {\n this.reconnectAttempt = 0;\n this.emit('open');\n });\n\n this.ws.on('message', (raw: RawData) => {\n this.handleMessage(raw.toString());\n });\n\n this.ws.on('close', () => {\n this.emit('close');\n if (!this.closedByUser) this.scheduleReconnect();\n });\n\n this.ws.on('error', (err: Error) => {\n this.emit('error', err);\n });\n }\n\n close(): void {\n this.closedByUser = true;\n this.ws?.close();\n }\n\n reconnect(): void {\n if (this.ws?.readyState === WebSocket.OPEN) this.ws.close();\n this.reconnectAttempt = 0;\n if (!this.closedByUser) this.connect();\n }\n\n resetReconnectAttempts(): void {\n this.reconnectAttempt = 0;\n }\n\n private handleMessage(raw: string): void {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n return;\n }\n try {\n const event: UserDataEvent = parseUserDataEvent(parsed);\n this.emit(event.e, event);\n this.emit('userData', event);\n } catch (err) {\n this.emit('error', err);\n }\n }\n\n private scheduleReconnect(): void {\n const base = this.options.reconnectDelayMs ?? 1000;\n const max = this.options.maxReconnectDelayMs ?? 30_000;\n const delay = Math.min(base * 2 ** this.reconnectAttempt, max);\n this.reconnectAttempt += 1;\n setTimeout(() => {\n if (!this.closedByUser) this.connect();\n }, delay);\n }\n}\n","import { createHmac, randomUUID } from 'node:crypto';\nimport WebSocket from 'ws';\nimport { NetworkError } from '../errors/index.js';\nimport type { WsApiResponse } from '../types/userdata.types.js';\n\nexport interface WsApiOptions {\n baseUrl: string;\n apiKey?: string;\n apiSecret?: string;\n recvWindow?: number;\n timeoutMs?: number;\n}\n\ninterface WsApiRequestParams {\n id?: string;\n [key: string]: unknown;\n}\n\nfunction buildQueryString(data: Record<string, unknown>): string {\n return Object.entries(data)\n .filter(([, val]) => val !== undefined && val !== null)\n .map(([key, val]) => `${key}=${encodeURIComponent(String(val))}`)\n .join('&');\n}\n\nexport class WsApi {\n constructor(private readonly options: WsApiOptions) {}\n\n async request(\n method: string,\n params: WsApiRequestParams = {},\n options?: { signed?: boolean },\n ): Promise<WsApiResponse> {\n const { apiKey, apiSecret } = this.options;\n const signed = options?.signed ?? true;\n const { id = randomUUID(), ...methodParams } = params;\n const requestParams: Record<string, unknown> = { ...methodParams };\n\n if (signed) {\n if (!apiKey || !apiSecret) {\n throw new Error('API key and secret required for signed WebSocket API requests');\n }\n requestParams.apiKey = apiKey;\n requestParams.timestamp = Date.now();\n requestParams.recvWindow = this.options.recvWindow ?? 5000;\n const queryString = buildQueryString(requestParams);\n requestParams.signature = createHmac('sha256', apiSecret).update(queryString).digest('hex');\n }\n\n return new Promise((resolve, reject) => {\n const ws = new WebSocket(this.options.baseUrl);\n const timeout = setTimeout(() => {\n ws.close();\n reject(new NetworkError(`WebSocket API request timed out: ${method}`));\n }, this.options.timeoutMs ?? 15_000);\n\n ws.on('open', () => ws.send(JSON.stringify({ id, method, params: requestParams })));\n ws.on('message', (raw: Buffer) => {\n clearTimeout(timeout);\n ws.close();\n try {\n const parsed = JSON.parse(raw.toString()) as WsApiResponse;\n if (parsed.status >= 400) {\n reject(new Error(parsed.error?.msg ?? `WebSocket API error: ${method}`));\n } else {\n resolve(parsed);\n }\n } catch (err) {\n reject(new NetworkError('Invalid WebSocket API JSON payload', err));\n }\n });\n ws.on('error', (err: Error) => {\n clearTimeout(timeout);\n reject(new NetworkError(err.message, err));\n });\n });\n }\n\n placeOrder(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('order.place', params);\n }\n\n cancelOrder(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('order.cancel', params);\n }\n\n modifyOrder(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('order.modify', params);\n }\n\n placeAlgoOrder(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('algoOrder.place', params);\n }\n\n cancelAlgoOrder(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('algoOrder.cancel', params);\n }\n\n orderStatus(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('order.status', params);\n }\n\n placeOrderList(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('orderList.place', params);\n }\n\n cancelOrderList(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('orderList.cancel', params);\n }\n\n orderListStatus(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('orderList.status', params);\n }\n\n accountStatus(): Promise<WsApiResponse> {\n return this.request('account.status', {});\n }\n\n accountPosition(params: Record<string, unknown> = {}): Promise<WsApiResponse> {\n return this.request('account.position', params);\n }\n\n userDataStreamStart(): Promise<WsApiResponse> {\n return this.request('userDataStream.start', {});\n }\n\n userDataStreamPing(listenKey: string): Promise<WsApiResponse> {\n return this.request('userDataStream.ping', { listenKey });\n }\n\n userDataStreamStop(listenKey: string): Promise<WsApiResponse> {\n return this.request('userDataStream.stop', { listenKey });\n }\n\n // ---- Public market data (no signature required) ----\n\n time(): Promise<WsApiResponse> {\n return this.request('time', {}, { signed: false });\n }\n\n exchangeInfo(params: Record<string, unknown> = {}): Promise<WsApiResponse> {\n return this.request('exchangeInfo', params, { signed: false });\n }\n\n klines(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('klines', params, { signed: false });\n }\n\n aggTrades(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('aggTrades', params, { signed: false });\n }\n\n trades(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('trades', params, { signed: false });\n }\n\n depth(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('depth', params, { signed: false });\n }\n\n avgPrice(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('avgPrice', params, { signed: false });\n }\n\n tickerPrice(params: Record<string, unknown> = {}): Promise<WsApiResponse> {\n return this.request('ticker.price', params, { signed: false });\n }\n\n tickerBookTicker(params: Record<string, unknown> = {}): Promise<WsApiResponse> {\n return this.request('ticker.bookTicker', params, { signed: false });\n }\n\n ticker24hr(params: Record<string, unknown> = {}): Promise<WsApiResponse> {\n return this.request('ticker.24hr', params, { signed: false });\n }\n}\n","import { HttpClient } from './HttpClient.js';\nimport { resolveEnvironment } from './endpoints.js';\nimport { FuturesData } from '../resources/FuturesData.js';\nimport { FuturesMarket } from '../resources/FuturesMarket.js';\nimport { SpotMarket } from '../resources/SpotMarket.js';\nimport { SpotAccount, SpotTrading } from '../resources/SpotTrading.js';\nimport { SpotUserDataStream } from '../resources/SpotUserDataStream.js';\nimport { FuturesAccount } from '../resources/FuturesAccount.js';\nimport { FuturesTrading } from '../resources/FuturesTrading.js';\nimport { FuturesOps } from '../resources/FuturesOps.js';\nimport { UserDataStream } from '../resources/UserDataStream.js';\nimport { FuturesMarketWS } from '../ws/FuturesMarketWS.js';\nimport { SpotMarketWS } from '../ws/SpotMarketWS.js';\nimport { SpotUserWS } from '../ws/SpotUserWS.js';\nimport { FuturesUserWS } from '../ws/FuturesUserWS.js';\nimport { WsApi } from '../ws/WsApi.js';\n\nexport interface BinanceClientOptions {\n apiKey?: string;\n apiSecret?: string;\n testnet?: boolean;\n demo?: boolean;\n recvWindow?: number;\n apiBase?: string;\n wsBase?: string;\n wsUserBase?: string;\n wsApiBase?: string;\n timeoutMs?: number;\n maxRetries?: number;\n rateLimitTokensPerSecond?: number;\n rateLimitMaxTokens?: number;\n retryBaseDelayMs?: number;\n retryMaxDelayMs?: number;\n}\n\nexport class BinanceClient {\n readonly spot: {\n market: SpotMarket;\n account: SpotAccount;\n trading: SpotTrading;\n userStream: SpotUserDataStream;\n ws: SpotMarketWS;\n wsUser: SpotUserWS;\n };\n readonly futures: {\n market: FuturesMarket;\n data: FuturesData;\n account: FuturesAccount;\n trading: FuturesTrading;\n ops: FuturesOps;\n userStream: UserDataStream;\n ws: FuturesMarketWS;\n wsUser: FuturesUserWS;\n wsApi: WsApi;\n };\n\n private readonly authHttp: HttpClient;\n private listenKeyValue: string | null = null;\n private keepAliveInterval: NodeJS.Timeout | null = null;\n private spotListenKeyValue: string | null = null;\n private spotKeepAliveInterval: NodeJS.Timeout | null = null;\n\n static nowSeconds(): number {\n return Math.floor(Date.now() / 1000);\n }\n\n static buildPair(base: string, target: string): string {\n return `${base}${target}`.toUpperCase();\n }\n\n static parsePair(pair: string): { base: string; target: string } | null {\n const match = pair.match(/^([A-Z0-9]+)(USDT|USDC|BUSD|BTC|ETH|BNB)$/);\n if (!match) return null;\n return { base: match[1] as string, target: match[2] as string };\n }\n\n static calculateLiquidationPrice(entryPrice: number, leverage: number, side: 'buy' | 'sell', mm = 0.005): number {\n const dir = side === 'buy' ? 1 : -1;\n return dir === 1\n ? entryPrice * (1 - 1 / leverage + mm)\n : entryPrice * (1 + 1 / leverage - mm);\n }\n\n constructor(options: BinanceClientOptions = {}) {\n const { endpoints } = resolveEnvironment(options);\n const httpOptions = {\n apiKey: options.apiKey,\n apiSecret: options.apiSecret,\n recvWindow: options.recvWindow ?? 5000,\n timeoutMs: options.timeoutMs ?? 15_000,\n maxRetries: options.maxRetries ?? 3,\n retryBaseDelayMs: options.retryBaseDelayMs,\n retryMaxDelayMs: options.retryMaxDelayMs,\n };\n\n this.authHttp = new HttpClient({ baseURL: endpoints.restRoot, ...httpOptions });\n\n const spotHttp = new HttpClient({ baseURL: endpoints.restSpot, ...httpOptions });\n this.spot = {\n market: new SpotMarket(spotHttp),\n account: new SpotAccount(spotHttp),\n trading: new SpotTrading(spotHttp),\n userStream: new SpotUserDataStream(spotHttp),\n ws: new SpotMarketWS(endpoints.wsSpotMarket),\n wsUser: new SpotUserWS({\n baseUserUrl: endpoints.wsSpotUser,\n getListenKey: () => this.spotListenKeyValue,\n }),\n };\n\n const futuresMarket = new FuturesMarket(\n new HttpClient({ baseURL: endpoints.restFapi, ...httpOptions }),\n endpoints.restRoot,\n );\n const futuresData = new FuturesData({\n restFapi: endpoints.restFapi,\n restFuturesData: endpoints.restFuturesData,\n ...httpOptions,\n });\n const futuresAccount = new FuturesAccount(this.authHttp);\n const futuresTrading = new FuturesTrading(this.authHttp);\n\n this.futures = {\n market: futuresMarket,\n data: futuresData,\n account: futuresAccount,\n trading: futuresTrading,\n ops: new FuturesOps(futuresMarket, futuresData, futuresAccount, futuresTrading),\n userStream: new UserDataStream(this.authHttp),\n ws: new FuturesMarketWS(endpoints.wsMarket),\n wsUser: new FuturesUserWS({\n baseUserUrl: endpoints.wsUser,\n getListenKey: () => this.listenKeyValue,\n }),\n wsApi: new WsApi({\n baseUrl: endpoints.wsApi,\n apiKey: options.apiKey,\n apiSecret: options.apiSecret,\n recvWindow: options.recvWindow,\n }),\n };\n }\n\n async startUserStream(): Promise<string> {\n const { listenKey } = await this.futures.userStream.createListenKey();\n this.listenKeyValue = listenKey;\n this.keepAliveInterval = setInterval(() => {\n this.futures.userStream.keepAliveListenKey().catch(() => {\n /* listenKey keep-alive failures are retried on the next tick */\n });\n }, 30 * 60 * 1000);\n this.futures.wsUser.connect();\n return listenKey;\n }\n\n closeUserStream(): void {\n if (this.keepAliveInterval) clearInterval(this.keepAliveInterval);\n this.keepAliveInterval = null;\n this.futures.wsUser.close();\n this.futures.userStream.closeListenKey().catch(() => {\n /* best-effort cleanup */\n });\n this.listenKeyValue = null;\n }\n\n async startSpotUserStream(): Promise<string> {\n const { listenKey } = await this.spot.userStream.createListenKey();\n this.spotListenKeyValue = listenKey;\n this.spotKeepAliveInterval = setInterval(() => {\n this.spot.userStream.keepAliveListenKey().catch(() => {\n /* spot listenKey keep-alive failures are retried on the next tick */\n });\n }, 30 * 60 * 1000);\n this.spot.wsUser.connect();\n return listenKey;\n }\n\n closeSpotUserStream(): void {\n if (this.spotKeepAliveInterval) clearInterval(this.spotKeepAliveInterval);\n this.spotKeepAliveInterval = null;\n this.spot.wsUser.close();\n this.spot.userStream.closeListenKey().catch(() => {\n /* best-effort cleanup */\n });\n this.spotListenKeyValue = null;\n }\n\n closeAllWebSockets(): void {\n this.futures.ws.close();\n this.futures.wsUser.close();\n this.spot.ws.close();\n this.spot.wsUser.close();\n this.closeUserStream();\n this.closeSpotUserStream();\n }\n\n reconnectWebSocket(target: 'ws' | 'wsUser' | 'spot' | 'spotUser'): void {\n if (target === 'ws') this.futures.ws.reconnect();\n else if (target === 'wsUser') this.futures.wsUser.reconnect();\n else if (target === 'spot') this.spot.ws.reconnect();\n else this.spot.wsUser.reconnect();\n }\n\n resetReconnectAttempts(): void {\n this.futures.ws.resetReconnectAttempts();\n this.futures.wsUser.resetReconnectAttempts();\n this.spot.ws.resetReconnectAttempts();\n this.spot.wsUser.resetReconnectAttempts();\n }\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { BinanceClient } from '../client/BinanceClient.js';\nimport { createFuturesToolkit } from '../tools/index.js';\n\nexport function createBinanceMcpServer(client: BinanceClient): McpServer {\n const server = new McpServer({ name: 'binance-sdk', version: '3.0.0' });\n const toolkit = createFuturesToolkit(client);\n\n toolkit.tools.forEach((tool) => {\n server.registerTool(tool.name, { description: tool.description, inputSchema: tool.inputSchema }, async (args) => ({\n content: [{ type: 'text', text: String(await tool.handler(args, { env: 'live', isSigned: true })) }],\n }));\n });\n\n registerResources(server, client);\n\n return server;\n}\n\n/**\n * Reference data exposed as MCP resources rather than tools: hosts can attach these\n * to context directly, without the model having to decide to call something first.\n */\nfunction registerResources(server: McpServer, client: BinanceClient): void {\n const json = (uri: string, data: unknown) => ({\n contents: [{ uri, mimeType: 'application/json', text: JSON.stringify(data, null, 2) }],\n });\n\n server.registerResource(\n 'futures-symbols',\n 'binance://futures/symbols',\n {\n title: 'Futures Trading Symbols',\n description: 'Every tradeable USD-M futures symbol with its contract type and status',\n mimeType: 'application/json',\n },\n async (uri) => {\n const info = await client.futures.market.exchangeInfo();\n return json(uri.href, info.symbols);\n },\n );\n\n server.registerResource(\n 'futures-premium-index',\n 'binance://futures/premium-index',\n {\n title: 'Premium Index',\n description: 'Mark price, index price and funding rate across all USD-M pairs',\n mimeType: 'application/json',\n },\n async (uri) => json(uri.href, await client.futures.data.assetIndex()),\n );\n\n server.registerResource(\n 'spot-symbols',\n 'binance://spot/symbols',\n {\n title: 'Spot Trading Symbols',\n description: 'Every tradeable Spot symbol with its status, base/quote assets and permissions',\n mimeType: 'application/json',\n },\n async (uri) => {\n const info = await client.spot.market.exchangeInfo();\n return json(uri.href, info.symbols);\n },\n );\n}\n","import { z } from 'zod';\nimport type { BinanceClient } from '../client/BinanceClient.js';\nimport type { ToolDefinition } from './types.js';\nimport { textResult, normalizeSymbol } from './types.js';\n\nconst optionalSymbol = z.string().min(1).describe('USD-M pair, e.g. BTCUSDT').optional();\nconst limit = z.number().int().positive().max(1000).default(100);\nconst startTime = z.number().int().positive().optional();\nconst endTime = z.number().int().positive().optional();\n\nexport function accountTools(client: BinanceClient): ToolDefinition[] {\n const a = client.futures.account;\n\n return [\n {\n name: 'futures_balance',\n description: 'Get futures account balances (v3): asset, wallet balance, unrealized profit, margin balance, available balance (signed).',\n inputSchema: z.object({}),\n handler: async () => textResult(await a.balanceV3()),\n },\n {\n name: 'futures_account',\n description: 'Get full account information (v3): total wallet/margin balance, unrealized profit, available balance, assets & positions (signed).',\n inputSchema: z.object({}),\n handler: async () => textResult(await a.accountV3()),\n },\n {\n name: 'futures_balance_v2',\n description: 'Get futures account balance (v2 legacy) per asset (signed).',\n inputSchema: z.object({}),\n handler: async () => textResult(await a.balance()),\n },\n {\n name: 'futures_account_v2',\n description: 'Get futures account information (v2 legacy) (signed).',\n inputSchema: z.object({}),\n handler: async () => textResult(await a.account()),\n },\n {\n name: 'futures_position_risk',\n description: 'Get current open positions (v3): symbol, side, size, entry price, mark price, liquidation price, leverage, unrealized PnL, margin (signed).',\n inputSchema: z.object({ symbol: optionalSymbol }),\n handler: async ({ symbol }) => textResult(await a.positionRiskV3(symbol ? normalizeSymbol(symbol) : undefined)),\n },\n {\n name: 'futures_income_history',\n description: 'Get futures income history (realized PnL, funding fees, commissions, transfers, insurance clearing). incomeType examples: TRANSFER, REALIZED_PNL, FUNDING_FEE, COMMISSION, INSURANCE_CLEAR, REFERRAL_KICKBACK (signed).',\n inputSchema: z.object({ symbol: optionalSymbol, incomeType: z.string().optional().describe('e.g. TRANSFER, REALIZED_PNL, FUNDING_FEE, COMMISSION'), startTime, endTime, limit: limit.default(100) }),\n handler: async ({ symbol, incomeType, startTime, endTime, limit }) =>\n textResult(await a.incomeHistory({ symbol: symbol ? normalizeSymbol(symbol) : undefined, incomeType, startTime, endTime, limit: Number(limit) })),\n },\n {\n name: 'futures_user_trades',\n description: 'Get account trade list (filled trades) for a symbol with optional time range (signed).',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'), startTime, endTime, limit: limit.default(100), fromId: z.number().int().positive().optional() }),\n handler: async ({ symbol, startTime, endTime, limit, fromId }) =>\n textResult(await a.userTrades({ symbol: normalizeSymbol(symbol), startTime, endTime, limit: Number(limit), fromId })),\n },\n {\n name: 'futures_leverage_brackets',\n description: 'Get notional and leverage brackets for one symbol or all: tier caps, maintenance margin rate, max leverage (signed).',\n inputSchema: z.object({ symbol: optionalSymbol }),\n handler: async ({ symbol }) => textResult(await a.leverageBrackets(symbol ? normalizeSymbol(symbol) : undefined)),\n },\n {\n name: 'futures_commission_rate',\n description: 'Get user commission rate (taker & maker fee) for a symbol (signed).',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. ETHUSDT') }),\n handler: async ({ symbol }) => textResult(await a.commissionRate(normalizeSymbol(symbol))),\n },\n {\n name: 'futures_multi_assets_mode',\n description: 'Get current multi-assets margin mode status (signed).',\n inputSchema: z.object({}),\n handler: async () => textResult(await a.multiAssetsMargin()),\n },\n {\n name: 'futures_set_multi_assets_mode',\n description: 'Enable or disable multi-assets mode (signed; 7-day cooldown between toggles).',\n inputSchema: z.object({ enabled: z.boolean().describe('true to enable, false to disable') }),\n handler: async ({ enabled }) => textResult(await a.setMultiAssetsMargin(enabled)),\n },\n {\n name: 'futures_fee_burn_status',\n description: 'Get BNB fee burn status for futures trades (signed).',\n inputSchema: z.object({}),\n handler: async () => textResult(await a.feeBurnStatus()),\n },\n {\n name: 'futures_set_fee_burn',\n description: 'Toggle BNB fee burn on futures trades (signed).',\n inputSchema: z.object({ enabled: z.boolean().describe('true to enable fee burn') }),\n handler: async ({ enabled }) => textResult(await a.setFeeBurnStatus(enabled)),\n },\n {\n name: 'futures_position_mode',\n description: 'Get current position mode: one-way (BOTH) or hedge mode (LONG/SHORT) (signed).',\n inputSchema: z.object({}),\n handler: async () => textResult(await a.positionMode()),\n },\n {\n name: 'futures_set_position_mode',\n description: 'Change position mode: hedgeMode true = dual side (hedge), false = one-way (signed; 30-day cooldown).',\n inputSchema: z.object({ hedgeMode: z.boolean().describe('true = hedge mode, false = one-way') }),\n handler: async ({ hedgeMode }) => textResult(await a.setPositionMode(hedgeMode)),\n },\n {\n name: 'futures_api_trading_status',\n description: 'Get futures trading quantitative rules indicators and disable intervals (signed).',\n inputSchema: z.object({}),\n handler: async () => textResult(await a.apiTradingStatus()),\n },\n {\n name: 'futures_position_margin_history',\n description: 'Get isolated position margin change history. type: 1 = add margin, 2 = reduce margin (signed).',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'), type: z.enum(['1', '2']).describe('1 = add margin, 2 = reduce margin'), startTime, endTime, limit: limit.default(50) }),\n handler: async ({ symbol, type, startTime, endTime, limit }) =>\n textResult(await a.positionMarginHistory({ symbol: normalizeSymbol(symbol), type: Number(type), startTime, endTime, limit: Number(limit) })),\n },\n {\n name: 'futures_rate_limit_order',\n description: 'Query the current user order rate limit usage (signed).',\n inputSchema: z.object({}),\n handler: async () => textResult(await a.rateLimitOrder()),\n },\n {\n name: 'futures_request_order_download',\n description: 'Request a futures order-history download (async, 7-day window). Returns a downloadId (signed).',\n inputSchema: z.object({ symbol: optionalSymbol, startTime, endTime }),\n handler: async ({ symbol, startTime, endTime }) =>\n textResult(await a.requestOrderDownload({ symbol: symbol ? normalizeSymbol(symbol) : undefined, startTime, endTime })),\n },\n {\n name: 'futures_order_download_status',\n description: 'Get the futures order-history download link by downloadId (signed).',\n inputSchema: z.object({ downloadId: z.string().min(1) }),\n handler: async ({ downloadId }) => textResult(await a.getOrderDownloadStatus(downloadId)),\n },\n {\n name: 'futures_request_trade_download',\n description: 'Request a futures trade-history download (async, 7-day window). Returns a downloadId (signed).',\n inputSchema: z.object({ symbol: optionalSymbol, startTime, endTime }),\n handler: async ({ symbol, startTime, endTime }) =>\n textResult(await a.requestTradeDownload({ symbol: symbol ? normalizeSymbol(symbol) : undefined, startTime, endTime })),\n },\n {\n name: 'futures_trade_download_status',\n description: 'Get the futures trade-history download link by downloadId (signed).',\n inputSchema: z.object({ downloadId: z.string().min(1) }),\n handler: async ({ downloadId }) => textResult(await a.getTradeDownloadStatus(downloadId)),\n },\n {\n name: 'futures_account_config',\n description: 'Get futures account configuration: fee tier, trading permissions, dual-side position setting (signed).',\n inputSchema: z.object({}),\n handler: async () => textResult(await a.accountConfig()),\n },\n {\n name: 'futures_portfolio_margin_account_info',\n description: 'Get Portfolio Margin account info for an asset: cross margin balance and liability (signed).',\n inputSchema: z.object({ asset: z.string().min(1).describe('Asset, e.g. USDT') }),\n handler: async ({ asset }) => textResult(await a.pmAccountInfo(asset)),\n },\n {\n name: 'futures_request_income_download',\n description: 'Request a futures income/transaction-history download (async). Returns a downloadId (signed).',\n inputSchema: z.object({ startTime: startTime.unwrap(), endTime: endTime.unwrap() }),\n handler: async ({ startTime, endTime }) => textResult(await a.requestIncomeDownload({ startTime, endTime })),\n },\n {\n name: 'futures_income_download_status',\n description: 'Get the futures income/transaction-history download link by downloadId (signed).',\n inputSchema: z.object({ downloadId: z.string().min(1) }),\n handler: async ({ downloadId }) => textResult(await a.getIncomeDownloadStatus(downloadId)),\n },\n ];\n}\n","import { z } from 'zod';\n\nexport interface ToolContext {\n env: 'live' | 'testnet' | 'demo';\n isSigned: boolean;\n}\n\nexport interface ToolDefinition<TInput extends z.ZodTypeAny = z.ZodTypeAny> {\n name: string;\n description: string;\n inputSchema: TInput;\n handler: (args: any, ctx: ToolContext) => Promise<unknown>;\n}\n\nexport function normalizeSymbol(value: unknown): string {\n return String(value ?? '').trim().toUpperCase();\n}\nexport function normalizeLimit(value: unknown): number {\n return Number(value);\n}\n\nexport function toJsonSchema(inputSchema: z.ZodTypeAny): Record<string, unknown> {\n return z.toJSONSchema(inputSchema, { target: 'json' });\n}\n\nexport function toOpenAITool(tool: ToolDefinition): Record<string, unknown> {\n return {\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: toJsonSchema(tool.inputSchema),\n },\n };\n}\n\nexport function toAnthropicTool(tool: ToolDefinition): Record<string, unknown> {\n return {\n name: tool.name,\n description: tool.description,\n input_schema: toJsonSchema(tool.inputSchema),\n };\n}\n\nexport function toMCPTool(tool: ToolDefinition): {\n name: string;\n description: string;\n inputSchema: Record<string, unknown>;\n} {\n return {\n name: tool.name,\n description: tool.description,\n inputSchema: toJsonSchema(tool.inputSchema),\n };\n}\n\nexport function toToolList<TInput extends z.ZodTypeAny>(\n tools: ToolDefinition<TInput>[],\n format: 'openai' | 'anthropic' | 'mcp',\n): Record<string, unknown>[] {\n const adapter =\n format === 'openai' ? toOpenAITool : format === 'anthropic' ? toAnthropicTool : toMCPTool;\n return tools.map(adapter);\n}\n\nexport function textResult(data: unknown): string {\n return JSON.stringify(data, null, 2);\n}\n","import { z } from 'zod';\nimport type { BinanceClient } from '../client/BinanceClient.js';\nimport type { ToolDefinition } from './types.js';\nimport { textResult, normalizeSymbol } from './types.js';\n\nconst symbol = z.string().min(1).describe('USD-M pair, e.g. BTCUSDT');\n\n/**\n * Derived tools: each one fans out over several REST endpoints and returns a\n * single answer. They exist so the model does not have to chain primitives and\n * do float arithmetic on tick/step sizes itself.\n */\nexport function derivedTools(client: BinanceClient): ToolDefinition[] {\n const ops = client.futures.ops;\n\n return [\n {\n name: 'futures_symbol_rules',\n description:\n 'Get the tradeable rules for a symbol in one call: tick size, step size, min/max quantity, market-order lot bounds and minimum notional, flattened out of exchangeInfo filters. Call this before sizing or pricing any order.',\n inputSchema: z.object({ symbol, refresh: z.boolean().default(false).describe('Bypass the 60s cache') }),\n handler: async ({ symbol: s, refresh }) => textResult(await ops.symbolRules(normalizeSymbol(s), { refresh })),\n },\n {\n name: 'futures_quantize',\n description:\n \"Round a price to the symbol's tick size and a quantity to its step size, returning exchange-ready strings. Use this instead of rounding numbers yourself — Binance rejects off-tick prices (-1111).\",\n inputSchema: z.object({\n symbol,\n price: z.number().positive().optional(),\n quantity: z.number().positive().optional(),\n marketOrder: z.boolean().default(false).describe('Use MARKET_LOT_SIZE bounds instead of LOT_SIZE'),\n }),\n handler: async ({ symbol: s, price, quantity, marketOrder }) =>\n textResult(await ops.quantize(normalizeSymbol(s), { price, quantity, marketOrder })),\n },\n {\n name: 'futures_size_position',\n description:\n 'Convert a risk budget into an exchange-ready order quantity. Given a stop price and either riskAmount (quote currency) or riskPct (percent of available balance), returns the quantity rounded down to the symbol step size, plus the notional, required margin and every constraint that failed (min notional, lot bounds, wrong-side stop). Never increases risk to satisfy a minimum — it reports instead.',\n inputSchema: z.object({\n symbol,\n side: z.enum(['BUY', 'SELL']),\n stopPrice: z.number().positive().describe('Protective stop price'),\n entryPrice: z.number().positive().optional().describe('Defaults to current mark price'),\n riskAmount: z.number().positive().optional().describe('Quote-currency amount to risk, e.g. 50 USDT'),\n riskPct: z.number().positive().max(100).optional().describe('Percent of available balance to risk (signed call)'),\n leverage: z.number().int().min(1).max(125).optional().describe('Used to report required margin'),\n marketOrder: z.boolean().default(false),\n }),\n handler: async (args) => textResult(await ops.sizePosition({ ...args, symbol: normalizeSymbol(args.symbol) })),\n },\n {\n name: 'futures_close_position',\n description:\n 'Flatten an open position with a reduce-only market order. Reads the current position, derives the closing side from its sign, and automatically uses reduceOnly in one-way mode vs positionSide in hedge mode (Binance rejects the wrong one). Set dryRun to preview the order without sending it. Signed, destructive.',\n inputSchema: z.object({\n symbol,\n positionSide: z.enum(['BOTH', 'LONG', 'SHORT']).optional().describe('Required when hedge mode has both sides open'),\n portion: z.number().positive().max(1).default(1).describe('Fraction of the position to close, e.g. 0.5 for half'),\n dryRun: z.boolean().default(false),\n }),\n handler: async (args) => textResult(await ops.closePosition({ ...args, symbol: normalizeSymbol(args.symbol) })),\n },\n {\n name: 'futures_market_snapshot',\n description:\n 'One-call market picture for a symbol: 24h stats, mark/index price with funding, open interest and long/short positioning. Replaces four separate primitive calls; individual feeds degrade to an error field rather than failing the whole snapshot.',\n inputSchema: z.object({\n symbol,\n period: z.enum(['5m', '15m', '30m', '1h', '2h', '4h', '6h', '12h', '1d']).default('1h'),\n }),\n handler: async ({ symbol: s, period }) => textResult(await ops.marketSnapshot(normalizeSymbol(s), { period })),\n },\n {\n name: 'futures_account_overview',\n description:\n 'One-call account picture: funded balances, open positions only (zero-size entries filtered out), working orders, and totals for unrealized PnL and gross notional. Signed.',\n inputSchema: z.object({}),\n handler: async () => textResult(await ops.accountOverview()),\n },\n {\n name: 'futures_place_bracket_order',\n description:\n 'Place an entry order together with its protective stop-loss and optional take-profit, with all prices quantized to the symbol tick. Returns each leg separately; if a protective leg fails the response is flagged protectionComplete=false and the entry is NOT auto-cancelled (it may already have filled). Signed, destructive.',\n inputSchema: z.object({\n symbol,\n side: z.enum(['BUY', 'SELL']),\n quantity: z.union([z.string(), z.number()]),\n entryPrice: z.number().positive().optional().describe('Omit for a MARKET entry'),\n stopLossPrice: z.number().positive(),\n takeProfitPrice: z.number().positive().optional(),\n positionSide: z.enum(['BOTH', 'LONG', 'SHORT']).optional(),\n workingType: z.enum(['MARK_PRICE', 'CONTRACT_PRICE']).default('MARK_PRICE'),\n }),\n handler: async (args) => textResult(await ops.placeBracketOrder({ ...args, symbol: normalizeSymbol(args.symbol) })),\n },\n ];\n}\n","import { z } from 'zod';\nimport type { BinanceClient } from '../client/BinanceClient.js';\nimport { KlineIntervalSchema } from '../types/market.types.js';\nimport type { ToolDefinition } from './types.js';\nimport { textResult, normalizeSymbol } from './types.js';\n\nconst u = (s: z.ZodTypeAny) => s.optional();\nconst optSymbol = u(z.string().min(1)).describe('USD-M pair, e.g. BTCUSDT');\nconst limitDefault = z.number().int().positive().max(1500).default(100);\nconst startTime = z.number().int().positive().optional();\nconst endTime = z.number().int().positive().optional();\nconst period = z.enum(['5m', '15m', '30m', '1h', '2h', '4h', '6h', '12h', '1d']).default('1h');\nconst contractType = z.enum(['perpetual', 'current_quarter', 'next_quarter']).default('perpetual');\n\nexport function marketDataTools(client: BinanceClient): ToolDefinition[] {\n const m = client.futures.market;\n const d = client.futures.data;\n\n const tools: ToolDefinition[] = [\n {\n name: 'futures_ping',\n description: 'Test connectivity to the Binance USD-M futures REST API. Returns empty object {} on success.',\n inputSchema: z.object({}),\n handler: async () => textResult(await m.ping()),\n },\n {\n name: 'futures_server_time',\n description: 'Get the current Binance USD-M futures server time in milliseconds since epoch.',\n inputSchema: z.object({}),\n handler: async () => textResult(await m.serverTime()),\n },\n {\n name: 'futures_exchange_info',\n description: 'Get exchange trading rules and symbol metadata: contract type, status, base/quote assets, price/quantity filters, tick size, step size, notional and leverage brackets, delivery dates.',\n inputSchema: z.object({}),\n handler: async () => textResult(await m.exchangeInfo()),\n },\n {\n name: 'futures_ticker_price',\n description: 'Get latest price for one symbol (v1).',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT') }),\n handler: async ({ symbol }) => textResult(await m.tickerPrice(normalizeSymbol(symbol))),\n },\n {\n name: 'futures_ticker_price_v2',\n description: 'Get latest price for one symbol, or for all symbols when symbol is omitted (v2 endpoint). Use all-symbols mode for market overviews.',\n inputSchema: z.object({ symbol: optSymbol }),\n handler: async ({ symbol }) => textResult(await m.tickerPriceV2(symbol ? normalizeSymbol(symbol) : undefined)),\n },\n {\n name: 'futures_ticker_24hr',\n description: 'Get 24-hour rolling price change statistics for a symbol: price change %, high, low, volume, quote volume, open interest.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT') }),\n handler: async ({ symbol }) => textResult(await m.ticker24hr(normalizeSymbol(symbol))),\n },\n {\n name: 'futures_book_ticker',\n description: 'Get best bid/ask (top of book) for a single symbol (v1).',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT') }),\n handler: async ({ symbol }) => textResult(await m.bookTicker(normalizeSymbol(symbol))),\n },\n {\n name: 'futures_book_ticker_v2',\n description: 'Get best bid/ask (top of book) for one symbol, or all symbols when omitted (v2 endpoint).',\n inputSchema: z.object({ symbol: optSymbol }),\n handler: async ({ symbol }) => textResult(await m.bookTickerV2(symbol ? normalizeSymbol(symbol) : undefined)),\n },\n {\n name: 'futures_order_book',\n description: 'Get order book depth for a symbol. Limits: 5, 10, 20, 50, 100, 500, 1000.',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'),\n limit: z.enum(['5', '10', '20', '50', '100', '500', '1000']).default('100'),\n }),\n handler: async ({ symbol, limit }) => textResult(await m.depth(normalizeSymbol(symbol), Number(limit))),\n },\n {\n name: 'futures_recent_trades',\n description: 'Get the most recent executed trades for a symbol (public endpoint).',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'),\n limit: limitDefault.default(500),\n }),\n handler: async ({ symbol, limit }) => textResult(await m.trades(normalizeSymbol(symbol), Number(limit))),\n },\n {\n name: 'futures_historical_trades',\n description: 'Get older trades for a symbol by fromId (older than recent).',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'),\n limit: limitDefault.default(500),\n fromId: z.number().int().positive().optional(),\n }),\n handler: async ({ symbol, limit, fromId }) =>\n textResult(await m.historicalTrades(normalizeSymbol(symbol), { limit: Number(limit), fromId })),\n },\n {\n name: 'futures_agg_trades',\n description: 'Get compressed/aggregate trades for a symbol within an optional time window. Each entry aggregates trades with the same price and side.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'), limit: limitDefault.default(500), startTime, endTime }),\n handler: async ({ symbol, limit, startTime, endTime }) =>\n textResult(await m.aggTrades(normalizeSymbol(symbol), { limit: Number(limit), startTime, endTime })),\n },\n {\n name: 'futures_klines',\n description: 'Get candlestick (OHLCV) data for a symbol. Intervals: 1m,3m,5m,15m,30m,1h,2h,4h,6h,8h,12h,1d,3d,1w,1M. Max 1500 per request.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'), interval: KlineIntervalSchema, limit: limitDefault.default(500), startTime, endTime }),\n handler: async ({ symbol, interval, limit, startTime, endTime }) =>\n textResult(await m.klines(normalizeSymbol(symbol), interval, { limit: Number(limit), startTime, endTime })),\n },\n {\n name: 'futures_continuous_klines',\n description: 'Get klines for a continuous contract (perpetual, current_quarter, next_quarter) identified by base pair (e.g. BTCUSDT).',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('Base pair, e.g. BTCUSDT'),\n contractType,\n interval: KlineIntervalSchema,\n limit: limitDefault.default(500),\n startTime,\n endTime,\n }),\n handler: async ({ symbol, contractType, interval, limit, startTime, endTime }) =>\n textResult(await m.continuousKlines(normalizeSymbol(symbol), contractType, interval, { limit: Number(limit), startTime, endTime })),\n },\n {\n name: 'futures_index_price_klines',\n description: 'Get index price candlesticks for a pair (e.g. BTCUSDT index).',\n inputSchema: z.object({ symbol: z.string().min(1).describe('Base pair, e.g. BTCUSDT'), interval: KlineIntervalSchema, limit: limitDefault.default(500), startTime, endTime }),\n handler: async ({ symbol, interval, limit, startTime, endTime }) =>\n textResult(await m.indexPriceKlines(normalizeSymbol(symbol), interval, { limit: Number(limit), startTime, endTime })),\n },\n {\n name: 'futures_mark_price_klines',\n description: 'Get mark price candlesticks for a symbol.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'), interval: KlineIntervalSchema, limit: limitDefault.default(500), startTime, endTime }),\n handler: async ({ symbol, interval, limit, startTime, endTime }) =>\n textResult(await m.markPriceKlines(normalizeSymbol(symbol), interval, { limit: Number(limit), startTime, endTime })),\n },\n {\n name: 'futures_trading_day_ticker',\n description: 'Get the trading-day ticker (v1: rolling window stats by symbol, including open, close, high, low, volume, closeTime).',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT') }),\n handler: async ({ symbol }) => textResult(await m.tradingDayTicker(normalizeSymbol(symbol))),\n },\n {\n name: 'futures_mark_price',\n description: 'Get mark price, index price, estimated settle price, last funding rate, next funding time and interest rate for a symbol.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT') }),\n handler: async ({ symbol }) => textResult(await d.premiumIndex(normalizeSymbol(symbol))),\n },\n {\n name: 'futures_funding_rate_history',\n description: 'Get historical funding rates for a symbol.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'), limit: limitDefault.default(100), startTime, endTime }),\n handler: async ({ symbol, limit, startTime, endTime }) =>\n textResult(await d.fundingRateHistory(normalizeSymbol(symbol), { limit: Number(limit), startTime, endTime })),\n },\n {\n name: 'futures_funding_info',\n description: 'Get funding rate configuration for all symbols with adjusted funding cap/floor or interval (e.g. under extreme volatility).',\n inputSchema: z.object({}),\n handler: async () => textResult(await d.fundingInfo()),\n },\n {\n name: 'futures_open_interest',\n description: 'Get the current total open interest for a symbol.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT') }),\n handler: async ({ symbol }) => textResult(await d.openInterest(normalizeSymbol(symbol))),\n },\n {\n name: 'futures_open_interest_hist',\n description: 'Get historical open interest statistics per period.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'), period, limit: limitDefault.default(30) }),\n handler: async ({ symbol, period, limit }) => textResult(await d.openInterestHist(normalizeSymbol(symbol), period, Number(limit))),\n },\n {\n name: 'futures_top_long_short_account_ratio',\n description: 'Get top trader long/short account ratio (number of accounts) for a symbol.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'), period, limit: limitDefault.default(30) }),\n handler: async ({ symbol, period, limit }) => textResult(await d.topLongShortAccountRatio(normalizeSymbol(symbol), period, Number(limit))),\n },\n {\n name: 'futures_top_long_short_position_ratio',\n description: 'Get top trader long/short position ratio (accounts with net positions) for a symbol.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'), period, limit: limitDefault.default(30) }),\n handler: async ({ symbol, period, limit }) => textResult(await d.topLongShortPositionRatio(normalizeSymbol(symbol), period, Number(limit))),\n },\n {\n name: 'futures_global_long_short_ratio',\n description: 'Get global long/short account ratio for a symbol (all accounts).',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'), period, limit: limitDefault.default(30) }),\n handler: async ({ symbol, period, limit }) => textResult(await d.globalLongShortAccountRatio(normalizeSymbol(symbol), period, Number(limit))),\n },\n {\n name: 'futures_taker_long_short_ratio',\n description: 'Get taker buy/sell volume ratio for a symbol.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'), period, limit: limitDefault.default(30) }),\n handler: async ({ symbol, period, limit }) => textResult(await d.takerLongShortRatio(normalizeSymbol(symbol), period, Number(limit))),\n },\n {\n name: 'futures_basis',\n description: 'Get basis data (spot-futures spread, mark price - index price) for a pair and contract type.',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('Base pair, e.g. BTCUSDT'),\n period,\n limit: limitDefault.default(30),\n startTime,\n endTime,\n }),\n handler: async ({ symbol, period, limit, startTime, endTime }) =>\n textResult(await d.basis(normalizeSymbol(symbol), period, { limit: Number(limit), startTime, endTime })),\n },\n {\n name: 'futures_asset_index',\n description: 'Get multi-assets mode asset index (collateral price) for one asset or all assets.',\n inputSchema: z.object({ symbol: optSymbol.describe('Asset index symbol, e.g. ADAUSD') }),\n handler: async ({ symbol }) => textResult(await d.assetIndex(symbol ? normalizeSymbol(symbol) : undefined)),\n },\n {\n name: 'futures_composite_index_info',\n description: 'Get composite index symbol information (e.g. DEFIUSDT) with constituent weights.',\n inputSchema: z.object({ symbol: optSymbol }),\n handler: async ({ symbol }) => textResult(await d.compositeIndexInfo(symbol ? normalizeSymbol(symbol) : undefined)),\n },\n {\n name: 'futures_insurance_balance',\n description: 'Get insurance fund balance snapshots for a symbol.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BNBUSDT'), limit: limitDefault.default(100), startTime, endTime }),\n handler: async ({ symbol, limit, startTime, endTime }) =>\n textResult(await d.insuranceFundBalance({ symbol: normalizeSymbol(symbol), limit: Number(limit), startTime, endTime })),\n },\n {\n name: 'futures_index_price_constituents',\n description: 'Get the index price constituents (exchange weights) for a symbol.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT') }),\n handler: async ({ symbol }) => textResult(await d.indexPriceConstituents(normalizeSymbol(symbol))),\n },\n {\n name: 'futures_premium_index_klines',\n description: 'Get premium index candlesticks for a symbol (mark price premium over index price).',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'), interval: KlineIntervalSchema, limit: limitDefault.default(500), startTime, endTime }),\n handler: async ({ symbol, interval, limit, startTime, endTime }) =>\n textResult(await m.premiumIndexKlines(normalizeSymbol(symbol), interval, { limit: Number(limit), startTime, endTime })),\n },\n {\n name: 'futures_rpi_depth',\n description: 'Get the RPI (Retail Price Improvement) order book depth for a symbol.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'), limit: z.number().int().positive().default(1000) }),\n handler: async ({ symbol, limit }) => textResult(await m.rpiDepth(normalizeSymbol(symbol), Number(limit))),\n },\n {\n name: 'futures_delivery_price',\n description: 'Get historical quarterly contract settlement/delivery prices for a pair.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('Base pair, e.g. BTCUSDT') }),\n handler: async ({ symbol }) => textResult(await d.deliveryPrice(normalizeSymbol(symbol))),\n },\n {\n name: 'futures_symbol_adl_risk',\n description: 'Get the auto-deleveraging (ADL) risk level for one symbol or all symbols on the account (signed).',\n inputSchema: z.object({ symbol: optSymbol }),\n handler: async ({ symbol }) => textResult(await d.symbolAdlRisk(symbol ? normalizeSymbol(symbol) : undefined)),\n },\n {\n name: 'futures_adl_quantile',\n description: 'Get the position ADL (auto-deleveraging) quantile estimation for one symbol or all symbols (signed).',\n inputSchema: z.object({ symbol: optSymbol }),\n handler: async ({ symbol }) => textResult(await d.adlQuantile(symbol ? normalizeSymbol(symbol) : undefined)),\n },\n {\n name: 'futures_force_orders',\n description: \"Get the user's force-liquidation orders (LIQUIDATION) and ADL orders for a symbol or all symbols (signed).\",\n inputSchema: z.object({\n symbol: optSymbol,\n autoCloseType: z.enum(['LIQUIDATION', 'ADL']).optional(),\n startTime,\n endTime,\n limit: limitDefault.default(50),\n }),\n handler: async ({ symbol, autoCloseType, startTime, endTime, limit }) =>\n textResult(\n await d.forceOrders({\n symbol: symbol ? normalizeSymbol(symbol) : undefined,\n autoCloseType,\n startTime,\n endTime,\n limit: Number(limit),\n }),\n ),\n },\n ];\n\n return tools;\n}\n","import { z } from 'zod';\nimport type { BinanceClient } from '../client/BinanceClient.js';\nimport type { ToolDefinition } from './types.js';\nimport { textResult, normalizeSymbol } from './types.js';\n\nexport interface PaperState {\n balance: number;\n positions: PaperPosition[];\n history: PaperEvent[];\n}\n\nexport interface PaperPosition {\n id: string;\n symbol: string;\n side: 'LONG' | 'SHORT';\n quantity: number;\n entryPrice: number;\n openedAt: string;\n}\n\nexport interface PaperEvent extends PaperPosition {\n type: 'open' | 'close';\n exitPrice?: number;\n realizedPnl?: number;\n closedAt?: string;\n}\n\nexport interface PaperContext {\n state: PaperState;\n client: BinanceClient;\n}\n\nexport function createPaperContext(client: BinanceClient, initialState: Partial<PaperState> = {}): PaperContext {\n return {\n client,\n state: { balance: initialState.balance ?? 10000, positions: initialState.positions ?? [], history: initialState.history ?? [] },\n };\n}\n\nfunction pnl(position: PaperPosition, price: number): number {\n const direction = position.side === 'LONG' ? 1 : -1;\n return (price - position.entryPrice) * position.quantity * direction;\n}\n\nexport function paperTools(ctx: PaperContext): ToolDefinition[] {\n const s = ctx.state;\n const t = ctx.client.futures.market;\n\n return [\n {\n name: 'paper_init',\n description: 'Initialize paper-trading state (reset balances, positions, history). No API keys required.',\n inputSchema: z.object({ balance: z.number().positive().default(10000).describe('Starting USDT balance') }),\n handler: async ({ balance }) => {\n s.balance = balance;\n s.positions = [];\n s.history = [];\n return textResult(s);\n },\n },\n {\n name: 'paper_balance',\n description: 'Get current paper-trading balance and open-position equity (uses live market prices if an open position exists). No API keys required.',\n inputSchema: z.object({}),\n handler: async () => textResult(s),\n },\n {\n name: 'paper_open_position',\n description: 'Open an in-memory paper position at the live ticker price (or a fixed price). No API keys required.',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'),\n side: z.enum(['LONG', 'SHORT']),\n quantity: z.number().positive(),\n price: z.number().positive().optional().describe('If omitted, uses live ticker price'),\n }),\n handler: async ({ symbol, side, quantity, price }) => {\n const sym = normalizeSymbol(symbol);\n const market = price ?? Number((await t.tickerPrice(sym)).price);\n const position: PaperPosition = { id: Date.now().toString(), symbol: sym, side, quantity, entryPrice: market, openedAt: new Date().toISOString() };\n s.positions.push(position);\n s.history.push({ type: 'open', ...position });\n return textResult(position);\n },\n },\n {\n name: 'paper_close_position',\n description: 'Close a paper position by id (or symbol) and realize PnL at the live/last price.',\n inputSchema: z.object({\n id: z.string().optional().describe('Position id from paper_open_position'),\n symbol: z.string().min(1).optional().describe('Close the position for this symbol'),\n price: z.number().positive().optional().describe('If omitted, uses live ticker price'),\n }),\n handler: async ({ id, symbol, price }) => {\n const idx = s.positions.findIndex((p) => (id ? p.id === id : normalizeSymbol(p.symbol) === normalizeSymbol(symbol ?? '')));\n if (idx === -1) throw new Error('paper position not found');\n const position = s.positions[idx];\n const market = price ?? Number((await t.tickerPrice(position.symbol)).price);\n const realizedPnl = pnl(position, market);\n s.balance += realizedPnl;\n const closed: PaperEvent = { type: 'close', ...position, exitPrice: market, realizedPnl, closedAt: new Date().toISOString() };\n s.positions.splice(idx, 1);\n s.history.push(closed);\n return textResult(closed);\n },\n },\n {\n name: 'paper_positions',\n description: 'List open paper positions with live unrealized PnL (marked to market).',\n inputSchema: z.object({}),\n handler: async () => {\n const out = await Promise.all(\n s.positions.map(async (p) => {\n const price = Number((await t.tickerPrice(p.symbol)).price);\n return { ...p, markPrice: price, unrealizedPnl: pnl(p, price) };\n }),\n );\n return textResult(out);\n },\n },\n {\n name: 'paper_history',\n description: 'List paper-trading history of open/close events with realized PnL.',\n inputSchema: z.object({}),\n handler: async () => textResult(s.history),\n },\n {\n name: 'paper_summary',\n description: 'Summarize paper-trading state: balance, open positions, trade count.',\n inputSchema: z.object({}),\n handler: async () =>\n textResult({ balance: s.balance, openPositions: s.positions.length, trades: s.history.length }),\n },\n ];\n}\n","import { z } from 'zod';\nimport type { BinanceClient } from '../client/BinanceClient.js';\nimport { KlineIntervalSchema } from '../types/market.types.js';\nimport type { ToolDefinition } from './types.js';\nimport { textResult, normalizeSymbol } from './types.js';\n\nconst spotSymbol = z.string().min(1).describe('Spot pair, e.g. BTCUSDT');\nconst optionalSymbol = z.string().min(1).describe('Spot pair, e.g. BTCUSDT').optional();\nconst limit = z.number().int().positive().max(1000).default(100);\nconst startTime = z.number().int().positive().optional();\nconst endTime = z.number().int().positive().optional();\nconst side = z.enum(['BUY', 'SELL']);\n\nexport const spotOrderParamsSchema = z.object({\n symbol: spotSymbol,\n side,\n type: z.enum(['LIMIT', 'MARKET', 'LIMIT_MAKER', 'STOP_LOSS', 'STOP_LOSS_LIMIT', 'TAKE_PROFIT', 'TAKE_PROFIT_LIMIT']),\n quantity: z.union([z.string(), z.number()]).optional().describe('Base-asset quantity; omit if using quoteOrderQty'),\n quoteOrderQty: z.union([z.string(), z.number()]).optional().describe('Quote-asset quantity (e.g. spend 100 USDT on a MARKET order)'),\n price: z.union([z.string(), z.number()]).optional().describe('Required for LIMIT / STOP_LOSS_LIMIT / TAKE_PROFIT_LIMIT'),\n stopPrice: z.union([z.string(), z.number()]).optional().describe('Trigger price for STOP_LOSS / TAKE_PROFIT variants'),\n timeInForce: z.enum(['GTC', 'IOC', 'FOK']).optional().describe('Required for LIMIT'),\n newClientOrderId: z.string().optional(),\n newOrderRespType: z.enum(['ACK', 'RESULT', 'FULL']).optional(),\n icebergQty: z.union([z.string(), z.number()]).optional(),\n selfTradePreventionMode: z.enum(['NONE', 'EXPIRE_TAKER', 'EXPIRE_MAKER', 'EXPIRE_BOTH']).optional(),\n});\n\nexport function spotTools(client: BinanceClient): ToolDefinition[] {\n const m = client.spot.market;\n const a = client.spot.account;\n const t = client.spot.trading;\n\n const tools: ToolDefinition[] = [\n // ---- Market data (public) ----\n {\n name: 'spot_ping',\n description: 'Test connectivity to the Binance Spot REST API.',\n inputSchema: z.object({}),\n handler: async () => textResult(await m.ping()),\n },\n {\n name: 'spot_server_time',\n description: 'Get the current Binance Spot server time in ms since epoch.',\n inputSchema: z.object({}),\n handler: async () => textResult(await m.serverTime()),\n },\n {\n name: 'spot_exchange_info',\n description: 'Get Spot exchange trading rules and symbol metadata (status, base/quote assets, filters, permissions).',\n inputSchema: z.object({}),\n handler: async () => textResult(await m.exchangeInfo()),\n },\n {\n name: 'spot_ticker_price',\n description: 'Get the latest price for a Spot symbol.',\n inputSchema: z.object({ symbol: spotSymbol }),\n handler: async ({ symbol }) => textResult(await m.tickerPrice(normalizeSymbol(symbol))),\n },\n {\n name: 'spot_ticker_24hr',\n description: 'Get 24-hour rolling price change statistics for a Spot symbol.',\n inputSchema: z.object({ symbol: spotSymbol }),\n handler: async ({ symbol }) => textResult(await m.ticker24hr(normalizeSymbol(symbol))),\n },\n {\n name: 'spot_book_ticker',\n description: 'Get the best bid/ask (top of book) for a Spot symbol.',\n inputSchema: z.object({ symbol: spotSymbol }),\n handler: async ({ symbol }) => textResult(await m.bookTicker(normalizeSymbol(symbol))),\n },\n {\n name: 'spot_order_book',\n description: 'Get the Spot order book depth for a symbol (limits 5/10/20/50/100/500/1000/5000).',\n inputSchema: z.object({\n symbol: spotSymbol,\n limit: z.enum(['5', '10', '20', '50', '100', '500', '1000', '5000']).default('100'),\n }),\n handler: async ({ symbol, limit }) => textResult(await m.depth(normalizeSymbol(symbol), Number(limit))),\n },\n {\n name: 'spot_recent_trades',\n description: 'Get the most recent executed trades for a Spot symbol.',\n inputSchema: z.object({ symbol: spotSymbol, limit: limit.default(500) }),\n handler: async ({ symbol, limit }) => textResult(await m.trades(normalizeSymbol(symbol), Number(limit))),\n },\n {\n name: 'spot_historical_trades',\n description: 'Get older Spot trades for a symbol by fromId.',\n inputSchema: z.object({ symbol: spotSymbol, limit: limit.default(500), fromId: z.number().int().positive().optional() }),\n handler: async ({ symbol, limit, fromId }) =>\n textResult(await m.historicalTrades(normalizeSymbol(symbol), { limit: Number(limit), fromId })),\n },\n {\n name: 'spot_agg_trades',\n description: 'Get compressed/aggregate Spot trades for a symbol within an optional time window.',\n inputSchema: z.object({ symbol: spotSymbol, limit: limit.default(500), startTime, endTime }),\n handler: async ({ symbol, limit, startTime, endTime }) =>\n textResult(await m.aggTrades(normalizeSymbol(symbol), { limit: Number(limit), startTime, endTime })),\n },\n {\n name: 'spot_klines',\n description: 'Get Spot candlesticks (OHLCV). Intervals 1m…1M; max 1000 per request.',\n inputSchema: z.object({ symbol: spotSymbol, interval: KlineIntervalSchema, limit: limit.default(500), startTime, endTime }),\n handler: async ({ symbol, interval, limit, startTime, endTime }) =>\n textResult(await m.klines(normalizeSymbol(symbol), interval, { limit: Number(limit), startTime, endTime })),\n },\n {\n name: 'spot_ui_klines',\n description: 'Get Spot candlesticks via the optimized uiKlines endpoint (same shape as spot_klines).',\n inputSchema: z.object({ symbol: spotSymbol, interval: KlineIntervalSchema, limit: limit.default(500), startTime, endTime }),\n handler: async ({ symbol, interval, limit, startTime, endTime }) =>\n textResult(await m.uiKlines(normalizeSymbol(symbol), interval, { limit: Number(limit), startTime, endTime })),\n },\n {\n name: 'spot_avg_price',\n description: 'Get the current average price (5-minute rolling average) for a Spot symbol.',\n inputSchema: z.object({ symbol: spotSymbol }),\n handler: async ({ symbol }) => textResult(await m.avgPrice(normalizeSymbol(symbol))),\n },\n {\n name: 'spot_rolling_window_ticker',\n description: 'Get rolling-window price change statistics (1d/7d/30d). Omit symbol for all symbols.',\n inputSchema: z.object({\n symbol: optionalSymbol,\n windowSize: z.enum(['1d', '7d', '30d']).optional(),\n }),\n handler: async ({ symbol, windowSize }) =>\n textResult(await m.rollingWindowTicker(symbol ? normalizeSymbol(symbol) : undefined, windowSize)),\n },\n {\n name: 'spot_trading_day_ticker',\n description: 'Get the Spot trading-day ticker (open/close/high/low/volume by UTC day). Omit symbol for all symbols.',\n inputSchema: z.object({ symbol: optionalSymbol, timeZone: z.string().optional(), type: z.enum(['FULL', 'MINI']).optional() }),\n handler: async ({ symbol, timeZone, type }) =>\n textResult(await m.tradingDayTicker(symbol ? normalizeSymbol(symbol) : undefined, { timeZone, type })),\n },\n\n // ---- Account (signed) ----\n {\n name: 'spot_account',\n description: 'Get the Spot account: balances (free/locked), commissions, permissions (signed).',\n inputSchema: z.object({}),\n handler: async () => textResult(await a.account()),\n },\n {\n name: 'spot_my_trades',\n description: 'Get the Spot account trade list (filled trades) for a symbol with optional time range (signed).',\n inputSchema: z.object({ symbol: spotSymbol, orderId: z.number().int().positive().optional(), startTime, endTime, fromId: z.number().int().positive().optional(), limit: limit.default(500) }),\n handler: async ({ symbol, orderId, startTime, endTime, fromId, limit }) =>\n textResult(await a.myTrades(normalizeSymbol(symbol), { orderId, startTime, endTime, fromId, limit: Number(limit) })),\n },\n {\n name: 'spot_my_prevented_matches',\n description: 'Get Spot orders that were expired by the self-trade-prevention (STP) mechanism (signed).',\n inputSchema: z.object({ symbol: spotSymbol, preventedMatchId: z.number().int().positive().optional(), orderId: z.number().int().positive().optional(), limit: limit.default(500) }),\n handler: async ({ symbol, preventedMatchId, orderId, limit }) =>\n textResult(await a.myPreventedMatches(normalizeSymbol(symbol), { preventedMatchId, orderId, limit: Number(limit) })),\n },\n {\n name: 'spot_account_commission',\n description: 'Get the Spot account commission rates for a symbol (signed).',\n inputSchema: z.object({ symbol: spotSymbol }),\n handler: async ({ symbol }) => textResult(await a.accountCommission(normalizeSymbol(symbol))),\n },\n {\n name: 'spot_rate_limit_order',\n description: 'Query the current Spot order rate limit usage (signed).',\n inputSchema: z.object({}),\n handler: async () => textResult(await a.rateLimitOrder()),\n },\n\n // ---- Trading (signed) ----\n {\n name: 'spot_new_order',\n description: 'Place a new Spot order. Types: LIMIT, MARKET, LIMIT_MAKER, STOP_LOSS, STOP_LOSS_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT. For MARKET orders use quantity OR quoteOrderQty. Signed.',\n inputSchema: spotOrderParamsSchema,\n handler: async (args) => textResult(await t.createOrder({ ...args, symbol: normalizeSymbol(args.symbol) })),\n },\n {\n name: 'spot_test_order',\n description: 'Validate a Spot order without submitting it. Signed.',\n inputSchema: spotOrderParamsSchema,\n handler: async (args) => textResult(await t.testOrder({ ...args, symbol: normalizeSymbol(args.symbol) })),\n },\n {\n name: 'spot_get_order',\n description: 'Query a specific Spot order by orderId or client order id. Signed.',\n inputSchema: z.object({ symbol: spotSymbol, orderId: z.number().int().positive().optional(), origClientOrderId: z.string().optional() }),\n handler: async ({ symbol, orderId, origClientOrderId }) =>\n textResult(await t.getOrder(normalizeSymbol(symbol), { orderId, origClientOrderId })),\n },\n {\n name: 'spot_cancel_order',\n description: 'Cancel a specific open Spot order by orderId or client order id. Signed.',\n inputSchema: z.object({ symbol: spotSymbol, orderId: z.number().int().positive().optional(), origClientOrderId: z.string().optional(), newClientOrderId: z.string().optional() }),\n handler: async ({ symbol, orderId, origClientOrderId, newClientOrderId }) =>\n textResult(await t.cancelOrder(normalizeSymbol(symbol), { orderId, origClientOrderId, newClientOrderId })),\n },\n {\n name: 'spot_open_orders',\n description: 'Get all current open Spot orders, for one symbol or all symbols. Signed.',\n inputSchema: z.object({ symbol: optionalSymbol }),\n handler: async ({ symbol }) => textResult(await t.getOpenOrders(symbol ? normalizeSymbol(symbol) : undefined)),\n },\n {\n name: 'spot_all_orders',\n description: 'Get historical Spot orders for a symbol with optional time range. Signed.',\n inputSchema: z.object({ symbol: spotSymbol, orderId: z.number().int().positive().optional(), startTime, endTime, limit }),\n handler: async ({ symbol, orderId, startTime, endTime, limit }) =>\n textResult(await t.getAllOrders(normalizeSymbol(symbol), { orderId, startTime, endTime, limit })),\n },\n {\n name: 'spot_cancel_open_orders',\n description: 'Cancel all open Spot orders for a symbol. Signed.',\n inputSchema: z.object({ symbol: spotSymbol }),\n handler: async ({ symbol }) => textResult(await t.cancelOpenOrders(normalizeSymbol(symbol))),\n },\n {\n name: 'spot_cancel_replace_order',\n description: 'Cancel an existing Spot order and place a new one on the same symbol (cancel-replace). Signed.',\n inputSchema: z.object({\n symbol: spotSymbol,\n side,\n type: z.enum(['LIMIT', 'MARKET', 'STOP_LOSS', 'STOP_LOSS_LIMIT', 'TAKE_PROFIT', 'TAKE_PROFIT_LIMIT']),\n cancelReplaceMode: z.enum(['STOP_ON_FAILURE', 'ALLOW_FAILURE']).default('STOP_ON_FAILURE'),\n cancelOrderId: z.number().int().positive().optional(),\n cancelOrigClientOrderId: z.string().optional(),\n cancelNewClientOrderId: z.string().optional(),\n quantity: z.union([z.string(), z.number()]).optional(),\n price: z.union([z.string(), z.number()]).optional(),\n timeInForce: z.enum(['GTC', 'IOC', 'FOK']).optional(),\n newClientOrderId: z.string().optional(),\n }),\n handler: async (args) => textResult(await t.cancelReplaceOrder({ ...args, symbol: normalizeSymbol(args.symbol) })),\n },\n {\n name: 'spot_new_oco_order',\n description: 'Place a new Spot OCO (one-cancels-other) order: a stop-loss limit + a limit-maker take-profit. Signed.',\n inputSchema: z.object({\n symbol: spotSymbol,\n side,\n quantity: z.union([z.string(), z.number()]).describe('Total base-asset quantity for both legs'),\n price: z.union([z.string(), z.number()]).describe('Limit (take-profit) price'),\n stopPrice: z.union([z.string(), z.number()]).describe('Stop-loss trigger price'),\n stopLimitPrice: z.union([z.string(), z.number()]).optional().describe('Stop-loss limit price (defaults to stopPrice)'),\n stopLimitTimeInForce: z.enum(['GTC', 'IOC', 'FOK']).optional(),\n listClientOrderId: z.string().optional(),\n limitClientOrderId: z.string().optional(),\n stopClientOrderId: z.string().optional(),\n }),\n handler: async (args) => textResult(await t.createOCOOrder({ ...args, symbol: normalizeSymbol(args.symbol) })),\n },\n {\n name: 'spot_cancel_oco_order',\n description: 'Cancel an entire Spot OCO order list by orderListId or listClientOrderId. Signed.',\n inputSchema: z.object({ symbol: spotSymbol, orderListId: z.number().int().positive().optional(), listClientOrderId: z.string().optional(), newClientOrderId: z.string().optional() }),\n handler: async ({ symbol, orderListId, listClientOrderId, newClientOrderId }) =>\n textResult(await t.cancelOCOOrder(normalizeSymbol(symbol), { orderListId, listClientOrderId, newClientOrderId })),\n },\n {\n name: 'spot_get_oco_order',\n description: 'Query a Spot OCO order list by orderListId or listClientOrderId. Signed.',\n inputSchema: z.object({ symbol: spotSymbol, orderListId: z.number().int().positive().optional(), origClientOrderId: z.string().optional() }),\n handler: async ({ symbol, orderListId, origClientOrderId }) =>\n textResult(await t.getOCOOrder(normalizeSymbol(symbol), { orderListId, origClientOrderId })),\n },\n {\n name: 'spot_open_oco_orders',\n description: 'Get all current open Spot OCO order lists. Signed.',\n inputSchema: z.object({}),\n handler: async () => textResult(await t.getOpenOCOOrders()),\n },\n {\n name: 'spot_all_oco_orders',\n description: 'Get historical Spot OCO order lists for a symbol with optional time range. Signed.',\n inputSchema: z.object({ symbol: spotSymbol, fromId: z.number().int().positive().optional(), startTime, endTime, limit }),\n handler: async ({ symbol, fromId, startTime, endTime, limit }) =>\n textResult(await t.getAllOCOOrders(normalizeSymbol(symbol), { fromId, startTime, endTime, limit })),\n },\n {\n name: 'spot_cancel_open_oco_orders',\n description: 'Cancel all open Spot OCO order lists for a symbol. Signed.',\n inputSchema: z.object({ symbol: spotSymbol }),\n handler: async ({ symbol }) => textResult(await t.cancelOpenOCOOrders(normalizeSymbol(symbol))),\n },\n\n // ---- User data stream (signed) ----\n {\n name: 'spot_ws_start_user_stream',\n description: 'Start the Spot user data stream: creates a listenKey, connects the private WebSocket, and begins keep-alive. Emits executionReport, outboundAccountPosition, balanceUpdate, listStatus.',\n inputSchema: z.object({}),\n handler: async () => textResult({ listenKey: await client.startSpotUserStream() }),\n },\n {\n name: 'spot_ws_stop_user_stream',\n description: 'Stop the Spot user data stream: closes the private WebSocket and invalidates the listenKey.',\n inputSchema: z.object({}),\n handler: async () => {\n client.closeSpotUserStream();\n return textResult({ stopped: true });\n },\n },\n ];\n\n return tools;\n}\n","import { z } from 'zod';\nimport type { BinanceClient } from '../client/BinanceClient.js';\nimport type { ToolDefinition } from './types.js';\nimport { textResult, normalizeSymbol } from './types.js';\n\nconst symbol = z.string().min(1).describe('USD-M pair, e.g. BTCUSDT');\nconst optionalSymbol = z.string().min(1).describe('USD-M pair, e.g. BTCUSDT').optional();\nconst limit = z.number().int().positive().max(1000).default(100);\nconst startTime = z.number().int().positive().optional();\nconst endTime = z.number().int().positive().optional();\nconst side = z.enum(['BUY', 'SELL']);\nconst positionSide = z.enum(['BOTH', 'LONG', 'SHORT']).optional();\n\nexport const orderParamsSchema = z.object({\n symbol,\n side,\n type: z.enum(['LIMIT', 'MARKET', 'STOP', 'STOP_MARKET', 'TAKE_PROFIT', 'TAKE_PROFIT_MARKET', 'TRAILING_STOP_MARKET']),\n quantity: z.union([z.string(), z.number()]).describe('Order quantity in base asset'),\n price: z.union([z.string(), z.number()]).optional().describe('Required for LIMIT and STOP/TAKE_PROFIT (limit-triggered) types'),\n timeInForce: z.enum(['GTC', 'IOC', 'FOK', 'GTX']).optional(),\n stopPrice: z.union([z.string(), z.number()]).optional().describe('Trigger price for STOP/STOP_MARKET/TAKE_PROFIT/TAKE_PROFIT_MARKET'),\n reduceOnly: z.boolean().optional().describe('true = only reduces the position, never opens'),\n positionSide,\n newClientOrderId: z.string().optional(),\n closePosition: z.boolean().optional().describe('Close the full position on trigger (mutually exclusive with quantity)'),\n newOrderRespType: z.enum(['ACK', 'RESULT']).optional(),\n priceProtect: z.boolean().optional(),\n workingType: z.enum(['MARK_PRICE', 'CONTRACT_PRICE']).optional().describe('Trigger price basis; default CONTRACT_PRICE'),\n callbackRate: z.union([z.string(), z.number()]).optional().describe('Percent callback for TRAILING_STOP_MARKET, e.g. 0.5'),\n activationPrice: z.union([z.string(), z.number()]).optional().describe('Activation price for TRAILING_STOP_MARKET'),\n selfTradePreventionMode: z.enum(['NONE', 'EXPIRE_TAKER', 'EXPIRE_MAKER', 'EXPIRE_BOTH']).optional(),\n goodTillDate: z.number().int().optional().describe('Timestamp when a GTD order expires'),\n});\n\nexport function tradingTools(client: BinanceClient): ToolDefinition[] {\n const t = client.futures.trading;\n\n return [\n {\n name: 'futures_new_order',\n description: 'Place a new futures order. Types: LIMIT, MARKET, STOP, STOP_MARKET, TAKE_PROFIT, TAKE_PROFIT_MARKET, TRAILING_STOP_MARKET. Use STOP_MARKET as the take-profit/stop-loss trigger and LIMIT for the actual fill. Signed.',\n inputSchema: orderParamsSchema,\n handler: async (args) => textResult(await t.createOrder({ ...args, symbol: normalizeSymbol(args.symbol) })),\n },\n {\n name: 'futures_test_order',\n description: 'Validate a new order without submitting it. Returns 200 on success; use to validate fields and margin before real orders. Signed.',\n inputSchema: orderParamsSchema,\n handler: async (args) => textResult(await t.createTestOrder({ ...args, symbol: normalizeSymbol(args.symbol) })),\n },\n {\n name: 'futures_get_order',\n description: 'Query a specific order by orderId or client order id. Signed.',\n inputSchema: z.object({ symbol, orderId: z.number().int().positive().optional(), origClientOrderId: z.string().optional() }),\n handler: async ({ symbol, orderId, origClientOrderId }) =>\n textResult(await t.getOrder(normalizeSymbol(symbol), { orderId, origClientOrderId })),\n },\n {\n name: 'futures_cancel_order',\n description: 'Cancel a specific open order by orderId or client order id. Signed.',\n inputSchema: z.object({ symbol, orderId: z.number().int().positive().optional(), origClientOrderId: z.string().optional() }),\n handler: async ({ symbol, orderId, origClientOrderId }) =>\n textResult(await t.cancelOrder(normalizeSymbol(symbol), { orderId, origClientOrderId })),\n },\n {\n name: 'futures_get_open_order',\n description: 'Query a current open order (must exist in the open order book). Signed.',\n inputSchema: z.object({ symbol, orderId: z.number().int().positive().optional(), origClientOrderId: z.string().optional() }),\n handler: async ({ symbol, orderId, origClientOrderId }) =>\n textResult(await t.getCurrentOrder(normalizeSymbol(symbol), { orderId, origClientOrderId })),\n },\n {\n name: 'futures_open_orders',\n description: 'Get all current open orders, for one symbol or all symbols. Signed.',\n inputSchema: z.object({ symbol: optionalSymbol }),\n handler: async ({ symbol }) => textResult(await t.getOpenOrders(symbol ? normalizeSymbol(symbol) : undefined)),\n },\n {\n name: 'futures_all_orders',\n description: 'Get historical orders for a symbol with optional time range (last 7 days by default). Signed.',\n inputSchema: z.object({ symbol, orderId: z.number().int().positive().optional(), startTime, endTime, limit }),\n handler: async ({ symbol, orderId, startTime, endTime, limit }) =>\n textResult(await t.getAllOrders(normalizeSymbol(symbol), { orderId, startTime, endTime, limit })),\n },\n {\n name: 'futures_cancel_all_orders',\n description: 'Cancel all open orders for a symbol. Signed.',\n inputSchema: z.object({ symbol }),\n handler: async ({ symbol }) => textResult(await t.cancelAllOpenOrders(normalizeSymbol(symbol))),\n },\n {\n name: 'futures_modify_order',\n description: 'Modify an open order (price/quantity/stopPrice). Cannot modify when position side is BOTH and closePosition is true. Signed.',\n inputSchema: z.object({\n symbol,\n side,\n quantity: z.union([z.string(), z.number()]),\n price: z.union([z.string(), z.number()]).optional(),\n orderId: z.number().int().positive().optional(),\n origClientOrderId: z.string().optional(),\n stopPrice: z.union([z.string(), z.number()]).optional(),\n timeInForce: z.enum(['GTC', 'IOC', 'FOK', 'GTX']).optional(),\n positionSide,\n newClientOrderId: z.string().optional(),\n }),\n handler: async (args) => textResult(await t.modifyOrder({ ...args, symbol: normalizeSymbol(args.symbol) })),\n },\n {\n name: 'futures_order_modify_history',\n description: 'Get order modification history for a symbol. Signed.',\n inputSchema: z.object({ symbol, startTime, endTime, limit }),\n handler: async ({ symbol, startTime, endTime, limit }) =>\n textResult(await t.getOrderModifyHistory(normalizeSymbol(symbol), { startTime, endTime, limit })),\n },\n {\n name: 'futures_batch_orders',\n description: 'Place up to 5 orders in one request (array of order objects, max 30 per minute per symbol). Signed.',\n inputSchema: z.object({ orders: z.array(orderParamsSchema).min(1).max(5) }),\n handler: async (args) => {\n const mapped = args.orders.map((o: z.infer<typeof orderParamsSchema>) => ({ ...o, symbol: normalizeSymbol(o.symbol) }));\n return textResult(await t.createBatchOrders(mapped));\n },\n },\n {\n name: 'futures_cancel_batch_orders',\n description: 'Cancel multiple orders at once (up to 10 by orderId list or client order id list). Signed.',\n inputSchema: z.object({\n symbol,\n orderIdList: z.array(z.number().int().positive()).max(10).optional(),\n origClientOrderIdList: z.array(z.string()).max(10).optional(),\n }),\n handler: async ({ symbol, orderIdList, origClientOrderIdList }) =>\n textResult(await t.cancelBatchOrders(normalizeSymbol(symbol), { orderIdList, origClientOrderIdList })),\n },\n {\n name: 'futures_set_leverage',\n description: 'Change initial leverage for a symbol (1-125, within bracket). Signed.',\n inputSchema: z.object({ symbol, leverage: z.number().int().min(1).max(125) }),\n handler: async ({ symbol, leverage }) => textResult(await t.setLeverage(normalizeSymbol(symbol), leverage)),\n },\n {\n name: 'futures_set_margin_type',\n description: 'Change margin type for a symbol: isolated or cross. Only allowed when no open position for the symbol. Signed.',\n inputSchema: z.object({ symbol, marginType: z.enum(['isolated', 'cross']) }),\n handler: async ({ symbol, marginType }) => textResult(await t.setMarginType(normalizeSymbol(symbol), marginType)),\n },\n {\n name: 'futures_modify_position_margin',\n description: 'Add or reduce isolated position margin. marginType: 1 = add margin, 2 = reduce margin. Signed.',\n inputSchema: z.object({ symbol, amount: z.number().positive(), marginType: z.enum(['1', '2']).describe('1 = add margin, 2 = reduce margin') }),\n handler: async ({ symbol, amount, marginType }) => textResult(await t.modifyPositionMargin(normalizeSymbol(symbol), amount, Number(marginType))),\n },\n {\n name: 'futures_countdown_cancel_all',\n description: 'Auto-cancel all open orders for a symbol after countdownTime ms (0 = cancel the countdown). Emergency circuit breaker. Signed.',\n inputSchema: z.object({ symbol, countdownTime: z.number().int().min(100).max(60000) }),\n handler: async ({ symbol, countdownTime }) => textResult(await t.setCountdownCancelAll(normalizeSymbol(symbol), countdownTime)),\n },\n {\n name: 'futures_new_algo_order',\n description: 'Place a conditional algo order (CONDITIONAL or VP). CONDITIONAL supports STOP_MARKET/TAKE_PROFIT_MARKET types with triggerPrice; VP is a volume-participation order with urgency and quantity. Signed.',\n inputSchema: z.object({\n algoType: z.enum(['CONDITIONAL', 'VP']),\n symbol,\n side,\n positionSide,\n type: z.enum(['STOP_MARKET', 'TAKE_PROFIT_MARKET', 'LIMIT']).describe('For CONDITIONAL: STOP_MARKET/TAKE_PROFIT_MARKET. For VP: LIMIT'),\n quantity: z.union([z.string(), z.number()]),\n triggerPrice: z.union([z.string(), z.number()]).optional().describe('Required for CONDITIONAL'),\n price: z.union([z.string(), z.number()]).optional(),\n timeInForce: z.enum(['GTC', 'IOC', 'FOK', 'GTX']).optional(),\n workingType: z.enum(['MARK_PRICE', 'CONTRACT_PRICE']).optional(),\n priceProtect: z.boolean().optional(),\n reduceOnly: z.boolean().optional(),\n closePosition: z.boolean().optional(),\n urgency: z.enum(['LOW', 'MEDIUM', 'HIGH']).optional().describe('Required for VP'),\n clientAlgoId: z.string().optional(),\n }),\n handler: async (args) =>\n textResult(await t.createAlgoOrder({ ...args, symbol: normalizeSymbol(args.symbol) })),\n },\n {\n name: 'futures_cancel_algo_order',\n description: 'Cancel an open algo order by algoId or clientAlgoId. Signed.',\n inputSchema: z.object({ symbol, algoId: z.number().int().positive().optional(), clientAlgoId: z.string().optional() }),\n handler: async ({ symbol, algoId, clientAlgoId }) =>\n textResult(await t.cancelAlgoOrder(normalizeSymbol(symbol), { algoId, clientAlgoId })),\n },\n {\n name: 'futures_cancel_all_algo_orders',\n description: 'Cancel all open algo orders for a symbol. Signed.',\n inputSchema: z.object({ symbol }),\n handler: async ({ symbol }) => textResult(await t.cancelAllOpenAlgoOrders(normalizeSymbol(symbol))),\n },\n {\n name: 'futures_get_algo_order',\n description: 'Query an algo order by algoId or clientAlgoId. Signed.',\n inputSchema: z.object({ symbol, algoId: z.number().int().positive().optional(), clientAlgoId: z.string().optional() }),\n handler: async ({ symbol, algoId, clientAlgoId }) =>\n textResult(await t.getAlgoOrder(normalizeSymbol(symbol), { algoId, clientAlgoId })),\n },\n {\n name: 'futures_open_algo_orders',\n description: 'Get all current open algo orders, optionally filtered by symbol. Signed.',\n inputSchema: z.object({ symbol: optionalSymbol }),\n handler: async ({ symbol }) => textResult(await t.getOpenAlgoOrders(symbol ? normalizeSymbol(symbol) : undefined)),\n },\n {\n name: 'futures_all_algo_orders',\n description: 'Get historical algo orders for a symbol with optional time range. Signed.',\n inputSchema: z.object({ symbol, startTime, endTime, limit }),\n handler: async ({ symbol, startTime, endTime, limit }) =>\n textResult(await t.getAllAlgoOrders(normalizeSymbol(symbol), { startTime, endTime, limit })),\n },\n {\n name: 'futures_convert_exchange_info',\n description: 'List asset pairs eligible for futures Convert, optionally filtered by fromAsset/toAsset.',\n inputSchema: z.object({ fromAsset: z.string().optional(), toAsset: z.string().optional() }),\n handler: async ({ fromAsset, toAsset }) => textResult(await t.convertExchangeInfo({ fromAsset, toAsset })),\n },\n {\n name: 'futures_convert_get_quote',\n description: 'Request a Convert quote between two assets (quote expires quickly; accept with futures_convert_accept_quote). Signed.',\n inputSchema: z.object({\n fromAsset: z.string().min(1),\n toAsset: z.string().min(1),\n fromAmount: z.number().positive().optional(),\n toAmount: z.number().positive().optional(),\n validTime: z.enum(['10s', '30s', '1m', '2m']).optional(),\n }),\n handler: async (args) => textResult(await t.convertGetQuote(args)),\n },\n {\n name: 'futures_convert_accept_quote',\n description: 'Accept a previously requested Convert quote by quoteId. Signed.',\n inputSchema: z.object({ quoteId: z.string().min(1) }),\n handler: async ({ quoteId }) => textResult(await t.convertAcceptQuote(quoteId)),\n },\n {\n name: 'futures_convert_order_status',\n description: 'Query the status of a Convert order by orderId or quoteId. Signed.',\n inputSchema: z.object({ orderId: z.string().optional(), quoteId: z.string().optional() }),\n handler: async ({ orderId, quoteId }) => textResult(await t.convertOrderStatus({ orderId, quoteId })),\n },\n ];\n}\n","import { z } from 'zod';\nimport type { BinanceClient } from '../client/BinanceClient.js';\nimport type { ToolDefinition } from './types.js';\nimport { textResult, normalizeSymbol } from './types.js';\n\ninterface WsBuffer {\n subscriptions: Set<string>;\n events: { stream: string; payload: unknown; ts: number }[];\n}\n\nconst buffers = new Map<BinanceClient, WsBuffer>();\nconst MAX_BUFFER = 500;\n\nfunction bufferFor(client: BinanceClient): WsBuffer {\n let buffer = buffers.get(client);\n if (!buffer) {\n buffer = { subscriptions: new Set(), events: [] };\n buffers.set(client, buffer);\n client.futures.ws.on('message', (stream: string, payload: unknown) => {\n buffer!.events.push({ stream, payload, ts: Date.now() });\n if (buffer!.events.length > MAX_BUFFER) buffer!.events.splice(0, buffer!.events.length - MAX_BUFFER);\n });\n }\n return buffer;\n}\n\nexport function getBufferedWsEvents(client: BinanceClient, limit = 50): unknown[] {\n return bufferFor(client).events.slice(-limit);\n}\n\nexport function clearBufferedWsEvents(client: BinanceClient): void {\n bufferFor(client).events = [];\n}\n\nexport function wsTools(client: BinanceClient): ToolDefinition[] {\n const buffer = bufferFor(client);\n\n return [\n {\n name: 'futures_ws_subscribe',\n description:\n 'Subscribe to real-time market data streams. Topic format: <symbol>@<stream>, e.g. btcusdt@aggTrade, btcusdt@kline_1m, btcusdt@depth20, btcusdt@markPrice@1s, btcusdt@bookTicker, btcusdt@ticker, btcusdt@miniTicker, btcusdt@forceOrder, or all-market topics !ticker@arr, !bookTicker, !markPrice@arr, !forceOrder@arr, !miniTicker@arr. Multiple topics can be passed at once.',\n inputSchema: z.object({\n topics: z.array(z.string().min(1)).min(1).describe('Stream topics, e.g. [\"btcusdt@aggTrade\", \"btcusdt@kline_1m\"]'),\n }),\n handler: async ({ topics }) => {\n const normalized = topics.map((t: string) => t.trim().toLowerCase());\n client.futures.ws.subscribe(normalized);\n normalized.forEach((t: string) => buffer.subscriptions.add(t));\n return textResult({ subscribed: normalized, active: [...buffer.subscriptions] });\n },\n },\n {\n name: 'futures_ws_unsubscribe',\n description: 'Unsubscribe from previously subscribed market data streams.',\n inputSchema: z.object({ topics: z.array(z.string().min(1)).min(1) }),\n handler: async ({ topics }) => {\n const normalized = topics.map((t: string) => t.trim().toLowerCase());\n client.futures.ws.unsubscribe(normalized);\n normalized.forEach((t: string) => buffer.subscriptions.delete(t));\n return textResult({ unsubscribed: normalized, active: [...buffer.subscriptions] });\n },\n },\n {\n name: 'futures_ws_subscriptions',\n description: 'List the currently subscribed WebSocket market streams for this client.',\n inputSchema: z.object({}),\n handler: async () => textResult({ active: [...buffer.subscriptions] }),\n },\n {\n name: 'futures_ws_events',\n description:\n 'Read the buffered real-time payloads received since the last read for the subscribed streams (aggregate trades, klines, depth deltas, mark price, book tickers, tickers, force orders). Payloads are parsed; depth deltas must be applied to a snapshot from futures_order_book.',\n inputSchema: z.object({ limit: z.number().int().min(1).max(200).default(50) }),\n handler: async ({ limit }) => textResult(getBufferedWsEvents(client, limit)),\n },\n {\n name: 'futures_ws_clear_events',\n description: 'Clear the buffered WebSocket events so the next read only returns new payloads.',\n inputSchema: z.object({}),\n handler: async () => {\n clearBufferedWsEvents(client);\n return textResult({ cleared: true });\n },\n },\n {\n name: 'futures_ws_start_user_stream',\n description:\n 'Start the user data stream: creates a listenKey, connects the private WebSocket, and begins a 30-minute keep-alive. Emits private events (ACCOUNT_UPDATE, ORDER_TRADE_UPDATE, MARGIN_CALL, ACCOUNT_CONFIG_UPDATE, listenKeyExpired) that the application can consume from the client.',\n inputSchema: z.object({}),\n handler: async () => textResult({ listenKey: await client.startUserStream() }),\n },\n {\n name: 'futures_ws_stop_user_stream',\n description: 'Stop the user data stream: closes the private WebSocket and invalidates the listenKey.',\n inputSchema: z.object({}),\n handler: async () => {\n client.closeUserStream();\n return textResult({ stopped: true });\n },\n },\n {\n name: 'futures_ws_api_order_status',\n description: 'Query an order via the signed WebSocket API (order.status) — lower-latency alternative to futures_get_order.',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'),\n orderId: z.number().int().positive().optional(),\n origClientOrderId: z.string().optional(),\n }),\n handler: async ({ symbol, orderId, origClientOrderId }) =>\n textResult(await client.futures.wsApi.orderStatus({ symbol: normalizeSymbol(symbol), orderId, origClientOrderId })),\n },\n {\n name: 'futures_ws_api_account_status',\n description: 'Get account info via the signed WebSocket API (account.status).',\n inputSchema: z.object({}),\n handler: async () => textResult(await client.futures.wsApi.accountStatus()),\n },\n {\n name: 'futures_ws_api_account_position',\n description: 'Get current positions via the signed WebSocket API (account.position).',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT').optional() }),\n handler: async ({ symbol }) =>\n textResult(await client.futures.wsApi.accountPosition(symbol ? { symbol: normalizeSymbol(symbol) } : {})),\n },\n {\n name: 'futures_ws_api_user_data_stream_start',\n description: 'Create a listenKey via the signed WebSocket API (userDataStream.start) — no REST call required.',\n inputSchema: z.object({}),\n handler: async () => textResult(await client.futures.wsApi.userDataStreamStart()),\n },\n {\n name: 'futures_ws_api_user_data_stream_stop',\n description: 'Invalidate a listenKey via the signed WebSocket API (userDataStream.stop).',\n inputSchema: z.object({ listenKey: z.string().min(1) }),\n handler: async ({ listenKey }) => textResult(await client.futures.wsApi.userDataStreamStop(listenKey)),\n },\n {\n name: 'futures_ws_api_ticker_price',\n description: 'Get latest price via the unsigned WebSocket API (ticker.price); omit symbol for all symbols.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT').optional() }),\n handler: async ({ symbol }) =>\n textResult(await client.futures.wsApi.tickerPrice(symbol ? { symbol: normalizeSymbol(symbol) } : {})),\n },\n {\n name: 'futures_ws_api_order_book',\n description: 'Get order-book depth via the unsigned WebSocket API (depth).',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'),\n limit: z.enum(['5', '10', '20', '50', '100', '500', '1000']).optional(),\n }),\n handler: async ({ symbol, limit }) =>\n textResult(await client.futures.wsApi.depth({ symbol: normalizeSymbol(symbol), limit })),\n },\n ];\n}\n","import type { BinanceClient } from '../client/BinanceClient.js';\nimport { accountTools } from './account.tools.js';\nimport { derivedTools } from './derived.tools.js';\nimport { marketDataTools } from './market-data.tools.js';\nimport { createPaperContext, type PaperContext, paperTools } from './paper.tools.js';\nimport { spotTools } from './spot.tools.js';\nimport { tradingTools } from './trading.tools.js';\nimport { wsTools } from './ws.tools.js';\nimport type { ToolDefinition } from './types.js';\nimport { toToolList } from './types.js';\n\nexport type { ToolDefinition, ToolContext } from './types.js';\nexport { toJsonSchema, toOpenAITool, toAnthropicTool, toMCPTool, toToolList, textResult } from './types.js';\nexport { marketDataTools } from './market-data.tools.js';\nexport { accountTools } from './account.tools.js';\nexport { tradingTools } from './trading.tools.js';\nexport { spotTools } from './spot.tools.js';\nexport { derivedTools } from './derived.tools.js';\nexport { wsTools, getBufferedWsEvents, clearBufferedWsEvents } from './ws.tools.js';\nexport { createPaperContext, paperTools, type PaperState, type PaperPosition, type PaperEvent, type PaperContext } from './paper.tools.js';\n\nexport interface FuturesToolkit {\n client: BinanceClient;\n tools: ToolDefinition[];\n market: ToolDefinition[];\n account: ToolDefinition[];\n trading: ToolDefinition[];\n spot: ToolDefinition[];\n ws: ToolDefinition[];\n /** Composite tools that fan out over several endpoints. */\n derived: ToolDefinition[];\n paper: ToolDefinition[];\n paperContext: PaperContext;\n}\n\nexport function createFuturesToolkit(client: BinanceClient): FuturesToolkit {\n const market = marketDataTools(client);\n const account = accountTools(client);\n const trading = tradingTools(client);\n const spot = spotTools(client);\n const ws = wsTools(client);\n const derived = derivedTools(client);\n const paperContext = createPaperContext(client);\n const paper = paperTools(paperContext);\n return {\n client,\n tools: [...market, ...account, ...trading, ...spot, ...ws, ...derived, ...paper],\n market,\n account,\n trading,\n spot,\n ws,\n derived,\n paper,\n paperContext,\n };\n}\n\nexport function toolkitToFormats(toolkit: FuturesToolkit): {\n openai: Record<string, unknown>[];\n anthropic: Record<string, unknown>[];\n mcp: Record<string, unknown>[];\n} {\n return {\n openai: toToolList(toolkit.tools, 'openai'),\n anthropic: toToolList(toolkit.tools, 'anthropic'),\n mcp: toToolList(toolkit.tools, 'mcp'),\n };\n}\n"],"mappings":"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","names":["symbol","period","limit","z","http","symbol","limit","http","contractType","symbol","limit","http","symbol","z","z","http","symbol","z","http","z","http","symbol","z","http","symbol","symbol","symbol","period","http","z","symbol","contractType","symbol","EventEmitter","WebSocket","EventEmitter","WebSocket","EventEmitter","WebSocket","EventEmitter","WebSocket","createHmac","WebSocket","createHmac","WebSocket","side","z","z","z","symbol","startTime","endTime","limit","z","z","period","z","z","startTime","endTime","symbol","limit","contractType","period","z","z","symbol","side","z","z","optionalSymbol","limit","startTime","endTime","symbol","z","symbol","z","optionalSymbol","limit","startTime","endTime","side","z","limit","z","symbol"]}
|
|
1
|
+
{"version":3,"sources":["../../src/mcp/index.ts","../../src/client/HttpClient.ts","../../src/errors/BinanceError.ts","../../src/errors/BinanceAuthError.ts","../../src/errors/BinanceApiError.ts","../../src/errors/RateLimitError.ts","../../src/errors/NetworkError.ts","../../src/errors/PolicyViolationError.ts","../../src/errors/DryRunError.ts","../../src/client/RateLimitTracker.ts","../../src/client/Signer.ts","../../src/client/TradingPolicy.ts","../../src/client/endpoints.ts","../../src/types/futures.types.ts","../../src/resources/FuturesData.ts","../../src/types/market.types.ts","../../src/resources/MarketDataBase.ts","../../src/resources/FuturesMarket.ts","../../src/resources/SpotMarket.ts","../../src/types/spot.types.ts","../../src/resources/SpotTrading.ts","../../src/types/userdata.types.ts","../../src/resources/SpotUserDataStream.ts","../../src/types/account.types.ts","../../src/resources/FuturesAccount.ts","../../src/types/trading.types.ts","../../src/resources/FuturesTrading.ts","../../src/types/filters.types.ts","../../src/resources/FuturesOps.ts","../../src/resources/UserDataStream.ts","../../src/types/coinm.types.ts","../../src/resources/CoinMMarket.ts","../../src/resources/CoinMAccount.ts","../../src/resources/CoinMTrading.ts","../../src/resources/CoinMUserDataStream.ts","../../src/types/margin.types.ts","../../src/resources/Margin.ts","../../src/types/wallet.types.ts","../../src/resources/Wallet.ts","../../src/types/subaccount.types.ts","../../src/resources/SubAccount.ts","../../src/ws/BaseWS.ts","../../src/types/ws.types.ts","../../src/ws/FuturesMarketWS.ts","../../src/ws/SpotMarketWS.ts","../../src/ws/SpotUserWS.ts","../../src/ws/FuturesUserWS.ts","../../src/ws/CoinMMarketWS.ts","../../src/ws/CoinMUserWS.ts","../../src/ws/WsApi.ts","../../src/ws/SpotWsApi.ts","../../src/client/BinanceClient.ts","../../src/mcp/server.ts","../../src/tools/account.tools.ts","../../src/tools/types.ts","../../src/tools/derived.tools.ts","../../src/tools/market-data.tools.ts","../../src/tools/paper.tools.ts","../../src/tools/spot.tools.ts","../../src/tools/trading.tools.ts","../../src/tools/ws.tools.ts","../../src/tools/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport http from 'node:http';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport { BinanceClient } from '../client/BinanceClient.js';\nimport { createBinanceMcpServer } from './server.js';\n\nfunction clientFromEnv(): BinanceClient {\n return new BinanceClient({\n apiKey: process.env.BINANCE_API_KEY,\n apiSecret: process.env.BINANCE_API_SECRET,\n testnet: process.env.BINANCE_TESTNET === 'true' || process.env.BINANCE_ENV === 'testnet',\n demo: process.env.BINANCE_ENV === 'demo',\n });\n}\n\nasync function startStdio(): Promise<void> {\n const server = createBinanceMcpServer(clientFromEnv());\n await server.connect(new StdioServerTransport());\n}\n\nfunction startHttp(): void {\n const port = Number(process.env.PORT || process.env.MCP_PORT || 3100);\n const server = http.createServer((req, res) => {\n res.setHeader('content-type', 'application/json');\n if (req.url === '/health') {\n res.end(JSON.stringify({ ok: true, name: 'binance-sdk-mcp' }));\n return;\n }\n res.statusCode = 501;\n res.end(JSON.stringify({ error: 'Use stdio for MCP JSON-RPC. HTTP health endpoint is available at /health.' }));\n });\n server.listen(port, () => console.error(`binance-sdk MCP HTTP health server listening on ${port}`));\n}\n\nif (process.argv.includes('--http') || process.env.MCP_TRANSPORT === 'http') startHttp();\nelse startStdio().catch((error) => {\n console.error(error);\n process.exit(1);\n});\n","import axios, { type AxiosInstance, type AxiosRequestConfig } from 'axios';\nimport Bottleneck from 'bottleneck';\nimport { BinanceApiError, BinanceAuthError, NetworkError, RateLimitError } from '../errors/index.js';\nimport { RateLimitTracker, type RateLimitUsage } from './RateLimitTracker.js';\nimport { Signer, type SignatureAlgorithm } from './Signer.js';\nimport type { TradingPolicy } from './TradingPolicy.js';\n\nexport type AuthMode = 'public' | 'apiKey' | 'signed';\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE';\nexport type { SignatureAlgorithm };\n\nexport interface HttpClientOptions {\n baseURL: string;\n apiKey?: string;\n apiSecret?: string;\n /** PEM-encoded Ed25519 or RSA private key. When set, requests are signed with it instead of HMAC. */\n privateKey?: string | Buffer;\n /** Defaults to 'ED25519' when privateKey is set, otherwise 'HMAC'. */\n signatureAlgorithm?: SignatureAlgorithm;\n recvWindow?: number;\n timeoutMs?: number;\n maxRetries?: number;\n minTimeMs?: number;\n /** @deprecated unused; superseded by header-based tracking (rateLimitWeightPerMinute/rateLimitSafetyMargin). */\n rateLimitTokensPerSecond?: number;\n /** @deprecated unused; superseded by header-based tracking (rateLimitWeightPerMinute/rateLimitSafetyMargin). */\n rateLimitMaxTokens?: number;\n /** Assumed per-minute IP weight ceiling used to preempt -1003 bans. Binance's default is 6000 for most REST hosts. */\n rateLimitWeightPerMinute?: number;\n /** Fraction of rateLimitWeightPerMinute at which requests are delayed until the next minute window. Set >=1 to disable. */\n rateLimitSafetyMargin?: number;\n retryBaseDelayMs?: number;\n retryMaxDelayMs?: number;\n retryFactor?: number;\n /** Custom keep-alive/https agent, e.g. for corporate proxies or connection pooling. */\n httpsAgent?: AxiosRequestConfig['httpsAgent'];\n /** Axios proxy configuration. */\n proxy?: AxiosRequestConfig['proxy'];\n /** Client-side guardrails evaluated before any mutating request is sent. */\n policy?: TradingPolicy;\n}\n\ninterface BinanceErrorBody {\n code?: number;\n msg?: string;\n}\n\nconst RETRYABLE_STATUS = new Set([429, 418, 500, 502, 503, 504]);\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction normalizeHeaders(headers: unknown): Record<string, string> {\n const result: Record<string, string> = {};\n if (!headers || typeof headers !== 'object') return result;\n for (const [key, value] of Object.entries(headers as Record<string, unknown>)) {\n if (value !== undefined && value !== null) result[key.toLowerCase()] = String(value);\n }\n return result;\n}\n\nexport class HttpClient {\n private readonly axios: AxiosInstance;\n private readonly limiter: Bottleneck;\n private readonly signer: Signer;\n private readonly rateLimitTracker: RateLimitTracker;\n private readonly policy?: TradingPolicy;\n private readonly apiKey?: string;\n private readonly recvWindow: number;\n private readonly timeoutMs: number;\n private maxRetries: number;\n private minTimeMs: number;\n private retryBaseDelayMs: number;\n private retryMaxDelayMs: number;\n private retryFactor: number;\n private pendingRequests = 0;\n private timeOffsetMs = 0;\n\n constructor(options: HttpClientOptions) {\n this.apiKey = options.apiKey;\n this.recvWindow = options.recvWindow ?? 5000;\n this.timeoutMs = options.timeoutMs ?? 15_000;\n this.maxRetries = options.maxRetries ?? 3;\n this.minTimeMs = options.minTimeMs ?? 50;\n this.retryBaseDelayMs = options.retryBaseDelayMs ?? 1000;\n this.retryMaxDelayMs = options.retryMaxDelayMs ?? 30_000;\n this.retryFactor = options.retryFactor ?? 2;\n this.signer = new Signer({\n algorithm: options.signatureAlgorithm,\n apiSecret: options.apiSecret,\n privateKey: options.privateKey,\n });\n this.rateLimitTracker = new RateLimitTracker({\n weightLimitPerMinute: options.rateLimitWeightPerMinute,\n safetyMargin: options.rateLimitSafetyMargin,\n });\n this.policy = options.policy;\n this.axios = axios.create({\n baseURL: options.baseURL,\n timeout: this.timeoutMs,\n httpsAgent: options.httpsAgent,\n proxy: options.proxy,\n });\n this.limiter = new Bottleneck({ minTime: this.minTimeMs });\n }\n\n async get<T>(path: string, params?: Record<string, unknown>, mode: AuthMode = 'public'): Promise<T> {\n return this.request<T>('GET', path, params, mode);\n }\n\n async post<T>(path: string, params?: Record<string, unknown>, mode: AuthMode = 'public'): Promise<T> {\n return this.request<T>('POST', path, params, mode);\n }\n\n async put<T>(path: string, params?: Record<string, unknown>, mode: AuthMode = 'public'): Promise<T> {\n return this.request<T>('PUT', path, params, mode);\n }\n\n async delete<T>(path: string, params?: Record<string, unknown>, mode: AuthMode = 'public'): Promise<T> {\n return this.request<T>('DELETE', path, params, mode);\n }\n\n getRateLimiterStatus(): { minTimeMs: number; queueLength: number } {\n return { minTimeMs: this.minTimeMs, queueLength: this.pendingRequests };\n }\n\n /** Snapshot of the most recently observed `X-MBX-USED-WEIGHT-*` / `X-MBX-ORDER-COUNT-*` response headers. */\n getRateLimitUsage(): Readonly<RateLimitUsage> {\n return this.rateLimitTracker.getUsage();\n }\n\n configureRateLimiter(options: { minTimeMs?: number }): void {\n if (options.minTimeMs !== undefined) {\n this.minTimeMs = options.minTimeMs;\n this.limiter.updateSettings({ minTime: this.minTimeMs });\n }\n }\n\n getRetryConfig(): {\n maxRetries: number;\n baseDelayMs: number;\n maxDelayMs: number;\n factor: number;\n } {\n return {\n maxRetries: this.maxRetries,\n baseDelayMs: this.retryBaseDelayMs,\n maxDelayMs: this.retryMaxDelayMs,\n factor: this.retryFactor,\n };\n }\n\n configureRetry(options: { maxRetries?: number; baseDelayMs?: number; maxDelayMs?: number; factor?: number }): void {\n if (options.maxRetries !== undefined) this.maxRetries = options.maxRetries;\n if (options.baseDelayMs !== undefined) this.retryBaseDelayMs = options.baseDelayMs;\n if (options.maxDelayMs !== undefined) this.retryMaxDelayMs = options.maxDelayMs;\n if (options.factor !== undefined) this.retryFactor = options.factor;\n }\n\n /**\n * Fetches server time from `timePath` (e.g. '/time', '/fapi/v1/time', '/dapi/v1/time') and\n * stores the offset from local time, applied to every signed request's `timestamp` param.\n * Mitigates `-1021` (timestamp outside recvWindow) errors caused by local clock drift.\n */\n async syncTime(timePath = '/time'): Promise<number> {\n const res = await this.axios.request<{ serverTime: number }>({ method: 'GET', url: timePath });\n this.timeOffsetMs = res.data.serverTime - Date.now();\n return this.timeOffsetMs;\n }\n\n getTimeOffsetMs(): number {\n return this.timeOffsetMs;\n }\n\n private async request<T>(\n method: HttpMethod,\n path: string,\n params: Record<string, unknown> | undefined,\n mode: AuthMode,\n ): Promise<T> {\n // Evaluated before signing and before the limiter, so a refused request costs no\n // rate-limit budget and never has a signature generated for it.\n this.policy?.check(method, path, params ?? {});\n const url = this.buildUrl(path, params, mode);\n const config: AxiosRequestConfig = { method, url, headers: this.buildHeaders(mode) };\n return this.limiter.schedule(async () => {\n const throttleMs = this.rateLimitTracker.getThrottleDelayMs();\n if (throttleMs > 0) await sleep(throttleMs);\n return this.requestWithRetry<T>(config, 0, method, path);\n });\n }\n\n private buildHeaders(mode: AuthMode): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'User-Agent': 'binance-sdk',\n };\n if (mode !== 'public') headers['X-MBX-APIKEY'] = this.requireApiKey();\n return headers;\n }\n\n private buildUrl(\n path: string,\n params: Record<string, unknown> | undefined,\n mode: AuthMode,\n ): string {\n if (mode !== 'signed') return this.appendQuery(path, params);\n const requestData = { ...params, timestamp: Date.now() + this.timeOffsetMs, recvWindow: this.recvWindow };\n const queryString = this.buildQueryString(requestData);\n const signature = this.sign(queryString);\n return `${path}?${queryString}&signature=${signature}`;\n }\n\n private appendQuery(path: string, params: Record<string, unknown> | undefined): string {\n const queryString = this.buildQueryString(params);\n return queryString ? `${path}?${queryString}` : path;\n }\n\n private buildQueryString(params: Record<string, unknown> | undefined): string {\n if (!params) return '';\n return Object.entries(params)\n .filter(([, val]) => val !== undefined && val !== null)\n .flatMap(([key, val]) =>\n Array.isArray(val)\n ? val.map((item) => `${key}=${encodeURIComponent(String(item))}`)\n : [`${key}=${encodeURIComponent(String(val))}`],\n )\n .join('&');\n }\n\n private sign(queryString: string): string {\n if (!this.signer.canSign()) {\n throw new BinanceAuthError(this.signer.algorithm === 'HMAC' ? 'apiSecret' : 'privateKey');\n }\n return this.signer.sign(queryString);\n }\n\n private requireApiKey(): string {\n if (!this.apiKey) throw new BinanceAuthError('apiKey');\n return this.apiKey;\n }\n\n private async requestWithRetry<T>(\n config: AxiosRequestConfig,\n attempt: number,\n method: HttpMethod,\n endpoint: string,\n ): Promise<T> {\n this.pendingRequests += 1;\n try {\n const res = await this.axios.request<T>(config);\n this.rateLimitTracker.update(normalizeHeaders(res.headers));\n return res.data;\n } catch (err) {\n if (!axios.isAxiosError(err)) {\n throw new NetworkError('Unexpected error calling Binance API', err);\n }\n const status = err.response?.status;\n const body = err.response?.data as BinanceErrorBody | undefined;\n const headers = normalizeHeaders(err.response?.headers);\n this.rateLimitTracker.update(headers);\n\n if (attempt < this.maxRetries && this.shouldRetry(err)) {\n await sleep(this.calculateDelay(attempt));\n return this.requestWithRetry<T>(config, attempt + 1, method, endpoint);\n }\n\n const context = { endpoint, method, headers };\n if (status === 429 || status === 418) {\n throw new RateLimitError(\n body?.msg ?? 'Binance rate limit exceeded',\n body?.code ?? -1,\n status,\n this.parseRetryAfterMs(headers),\n context,\n );\n }\n if (status && body) {\n throw new BinanceApiError(body.msg ?? 'Binance API error', body.code ?? -1, status, context);\n }\n throw new NetworkError(err.message, err);\n } finally {\n this.pendingRequests -= 1;\n }\n }\n\n private parseRetryAfterMs(headers: Record<string, string>): number | undefined {\n const raw = headers['retry-after'];\n if (!raw) return undefined;\n const seconds = Number(raw);\n return Number.isFinite(seconds) ? seconds * 1000 : undefined;\n }\n\n private shouldRetry(err: { response?: { status?: number } }): boolean {\n if (err.response?.status !== undefined) return RETRYABLE_STATUS.has(err.response.status);\n return true;\n }\n\n private calculateDelay(attempt: number): number {\n const delay = Math.min(this.retryBaseDelayMs * this.retryFactor ** attempt, this.retryMaxDelayMs);\n const jitter = delay * 0.1 * (Math.random() * 2 - 1);\n return Math.max(0, delay + jitter);\n }\n}\n","export class BinanceError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'BinanceError';\n }\n}\n","import { BinanceError } from './BinanceError.js';\n\nexport class BinanceAuthError extends BinanceError {\n readonly missing: 'apiKey' | 'apiSecret' | 'privateKey';\n\n constructor(missing: 'apiKey' | 'apiSecret' | 'privateKey') {\n super(`API ${missing} required for authenticated requests`);\n this.name = 'BinanceAuthError';\n this.missing = missing;\n }\n}\n","import { BinanceError } from './BinanceError.js';\n\nexport interface BinanceApiErrorContext {\n endpoint?: string;\n method?: string;\n headers?: Record<string, string>;\n}\n\nexport class BinanceApiError extends BinanceError {\n readonly code: number;\n readonly status: number;\n readonly endpoint?: string;\n readonly method?: string;\n readonly headers?: Record<string, string>;\n\n constructor(message: string, code: number, status: number, context?: BinanceApiErrorContext) {\n super(message);\n this.name = 'BinanceApiError';\n this.code = code;\n this.status = status;\n this.endpoint = context?.endpoint;\n this.method = context?.method;\n this.headers = context?.headers;\n }\n\n /** -1003 (way too many requests) or HTTP 429/418. */\n isRateLimitError(): boolean {\n return this.code === -1003 || this.status === 429 || this.status === 418;\n }\n\n /** -1021: request timestamp outside recvWindow, usually caused by local clock drift. */\n isTimestampError(): boolean {\n return this.code === -1021;\n }\n\n /** -2010: account has insufficient balance for the requested action. */\n isInsufficientBalance(): boolean {\n return this.code === -2010;\n }\n}\n","import { BinanceApiError, type BinanceApiErrorContext } from './BinanceApiError.js';\n\nexport class RateLimitError extends BinanceApiError {\n readonly retryAfterMs?: number;\n\n constructor(\n message: string,\n code: number,\n status: number,\n retryAfterMs?: number,\n context?: BinanceApiErrorContext,\n ) {\n super(message, code, status, context);\n this.name = 'RateLimitError';\n this.retryAfterMs = retryAfterMs;\n }\n}\n","import { BinanceError } from './BinanceError.js';\n\nexport class NetworkError extends BinanceError {\n readonly cause?: unknown;\n\n constructor(message: string, cause?: unknown) {\n super(message);\n this.name = 'NetworkError';\n this.cause = cause;\n }\n}\n","import { BinanceError } from './BinanceError.js';\n\nexport type PolicyRule =\n | 'readOnly'\n | 'symbolNotAllowed'\n | 'maxNotionalPerOrder'\n | 'notionalUndeterminable'\n | 'withdrawalsBlocked'\n | 'transfersBlocked'\n | 'blockedPath';\n\n/**\n * Thrown when a request is refused by the client's own {@link TradingPolicy} — before it\n * ever reaches Binance. Distinct from BinanceApiError, which reports an exchange rejection.\n */\nexport class PolicyViolationError extends BinanceError {\n readonly rule: PolicyRule;\n readonly method: string;\n readonly endpoint: string;\n readonly details?: Record<string, unknown>;\n\n constructor(\n rule: PolicyRule,\n message: string,\n method: string,\n endpoint: string,\n details?: Record<string, unknown>,\n ) {\n super(`Blocked by trading policy (${rule}): ${message} [${method} ${endpoint}]`);\n this.name = 'PolicyViolationError';\n this.rule = rule;\n this.method = method;\n this.endpoint = endpoint;\n this.details = details;\n }\n}\n","import { BinanceError } from './BinanceError.js';\n\n/**\n * Thrown instead of sending a mutating request when the client is in dry-run mode.\n *\n * Dry run deliberately throws rather than returning a synthetic success payload: a fabricated\n * orderId would lead an agent to believe an order exists and then try to manage or cancel it.\n * Failing loudly — while carrying the exact request that *would* have been sent — is the only\n * safe signal. Tool layers should catch this and surface `describe()` back to the model.\n */\nexport class DryRunError extends BinanceError {\n readonly method: string;\n readonly endpoint: string;\n readonly params: Record<string, unknown>;\n\n constructor(method: string, endpoint: string, params: Record<string, unknown> = {}) {\n super(`DRY RUN — request not sent: ${method} ${endpoint} ${JSON.stringify(params)}`);\n this.name = 'DryRunError';\n this.method = method;\n this.endpoint = endpoint;\n this.params = params;\n }\n\n /** Human/LLM-readable description of the suppressed request. */\n describe(): string {\n return `Would have sent ${this.method} ${this.endpoint} with ${JSON.stringify(this.params)}`;\n }\n}\n","export interface RateLimitUsage {\n /** Highest `x-mbx-used-weight-*` value seen across all interval headers on the last response. */\n usedWeight: number;\n /** Per-header-suffix used-weight snapshot, e.g. `{ '1m': 120 }`. */\n usedWeightByInterval: Record<string, number>;\n /** Per-header-suffix order-count snapshot, e.g. `{ '10s': 3, '1d': 45 }`. */\n orderCountByInterval: Record<string, number>;\n lastUpdated: number;\n}\n\nexport interface RateLimitTrackerOptions {\n /** Assumed weight-per-minute ceiling used to compute throttling delay. Binance's default IP limit is 6000 for most REST hosts. */\n weightLimitPerMinute?: number;\n /** Fraction of the weight limit at which the tracker starts delaying requests (0-1). Set >=1 to disable throttling. */\n safetyMargin?: number;\n}\n\nconst WEIGHT_HEADER = /^x-mbx-used-weight-(.+)$/i;\nconst ORDER_COUNT_HEADER = /^x-mbx-order-count-(.+)$/i;\n\n/**\n * Tracks Binance's `X-MBX-USED-WEIGHT-*` / `X-MBX-ORDER-COUNT-*` response headers so callers can\n * back off before hitting `-1003` (IP ban) instead of reacting to it after the fact.\n */\nexport class RateLimitTracker {\n private readonly weightLimitPerMinute: number;\n private readonly safetyMargin: number;\n private usage: RateLimitUsage = {\n usedWeight: 0,\n usedWeightByInterval: {},\n orderCountByInterval: {},\n lastUpdated: 0,\n };\n\n constructor(options: RateLimitTrackerOptions = {}) {\n this.weightLimitPerMinute = options.weightLimitPerMinute ?? 6000;\n this.safetyMargin = options.safetyMargin ?? 0.8;\n }\n\n update(headers: Record<string, string> | undefined): void {\n if (!headers) return;\n const usedWeightByInterval: Record<string, number> = {};\n const orderCountByInterval: Record<string, number> = {};\n\n for (const [key, value] of Object.entries(headers)) {\n const weightMatch = key.match(WEIGHT_HEADER);\n if (weightMatch?.[1]) {\n usedWeightByInterval[weightMatch[1]] = Number(value);\n continue;\n }\n const orderMatch = key.match(ORDER_COUNT_HEADER);\n if (orderMatch?.[1]) {\n orderCountByInterval[orderMatch[1]] = Number(value);\n }\n }\n\n if (Object.keys(usedWeightByInterval).length === 0 && Object.keys(orderCountByInterval).length === 0) {\n return;\n }\n\n this.usage = {\n usedWeight: Math.max(0, ...Object.values(usedWeightByInterval)),\n usedWeightByInterval,\n orderCountByInterval,\n lastUpdated: Date.now(),\n };\n }\n\n getUsage(): Readonly<RateLimitUsage> {\n return this.usage;\n }\n\n /**\n * Milliseconds a caller should wait before its next request, based on the most recently\n * observed 1-minute weight usage. Returns 0 when usage is stale or under the safety margin.\n */\n getThrottleDelayMs(): number {\n if (this.safetyMargin >= 1) return 0;\n const oneMinuteWeight = this.usage.usedWeightByInterval['1m'] ?? this.usage.usedWeight;\n if (!oneMinuteWeight) return 0;\n if (Date.now() - this.usage.lastUpdated > 60_000) return 0;\n\n const threshold = this.weightLimitPerMinute * this.safetyMargin;\n if (oneMinuteWeight < threshold) return 0;\n\n const msIntoMinute = Date.now() % 60_000;\n return 60_000 - msIntoMinute;\n }\n}\n","import { createHmac, createPrivateKey, createSign, sign as cryptoSign, type KeyObject } from 'node:crypto';\n\nexport type SignatureAlgorithm = 'HMAC' | 'ED25519' | 'RSA';\n\nexport interface SignerOptions {\n algorithm?: SignatureAlgorithm;\n /** HMAC secret string. Required when algorithm is 'HMAC' (the default). */\n apiSecret?: string;\n /** PEM-encoded private key (or raw Buffer). Required for 'ED25519' and 'RSA'. */\n privateKey?: string | Buffer;\n}\n\n/**\n * Signs Binance request payloads. HMAC-SHA256 (the classic API-secret flow) is the default;\n * Ed25519 and RSA keys — which Binance now recommends over HMAC — are signed via `privateKey`.\n */\nexport class Signer {\n readonly algorithm: SignatureAlgorithm;\n private readonly apiSecret?: string;\n private readonly privateKey?: KeyObject;\n\n constructor(options: SignerOptions) {\n this.algorithm = options.algorithm ?? (options.privateKey ? 'ED25519' : 'HMAC');\n this.apiSecret = options.apiSecret;\n if (options.privateKey) {\n this.privateKey = createPrivateKey(options.privateKey);\n }\n }\n\n canSign(): boolean {\n return this.algorithm === 'HMAC' ? Boolean(this.apiSecret) : Boolean(this.privateKey);\n }\n\n sign(payload: string): string {\n switch (this.algorithm) {\n case 'HMAC': {\n if (!this.apiSecret) throw new Error('apiSecret is required for HMAC signing');\n return createHmac('sha256', this.apiSecret).update(payload).digest('hex');\n }\n case 'ED25519': {\n if (!this.privateKey) throw new Error('privateKey is required for ED25519 signing');\n return cryptoSign(null, Buffer.from(payload), this.privateKey).toString('base64');\n }\n case 'RSA': {\n if (!this.privateKey) throw new Error('privateKey is required for RSA signing');\n return createSign('RSA-SHA256').update(payload).sign(this.privateKey, 'base64');\n }\n default: {\n const exhaustive: never = this.algorithm;\n throw new Error(`Unsupported signature algorithm: ${String(exhaustive)}`);\n }\n }\n }\n}\n","import { DryRunError } from '../errors/DryRunError.js';\nimport { PolicyViolationError, type PolicyRule } from '../errors/PolicyViolationError.js';\nimport type { HttpMethod } from './HttpClient.js';\n\nexport interface TradingPolicyOptions {\n /**\n * Intercept every mutating request (POST/PUT/DELETE) and throw {@link DryRunError} instead of\n * sending it. Read-only GETs still hit the network, so an agent can research freely but\n * cannot act.\n */\n dryRun?: boolean;\n /** Reject every mutating request outright. Unlike dryRun this is not a rehearsal mode. */\n readOnly?: boolean;\n /**\n * Allowlist of tradeable symbols. Any order-bearing request naming a symbol outside this\n * list is rejected. Case-insensitive.\n */\n allowedSymbols?: string[];\n /**\n * Hard cap on a single order's notional value, in quote currency. When set, an order whose\n * notional cannot be determined from its parameters (e.g. a MARKET order with no price) is\n * also rejected — an unverifiable order is not a safe order.\n */\n maxNotionalPerOrder?: number;\n /** Permit withdrawal requests. Defaults to false: opting into a policy at all denies withdrawals. */\n allowWithdrawals?: boolean;\n /** Permit account-to-account transfers. Defaults to true; set false to pin funds in place. */\n allowTransfers?: boolean;\n /** Extra path fragments to refuse, matched case-insensitively as substrings. */\n blockedPaths?: string[];\n}\n\nconst WITHDRAW_FRAGMENTS = ['/capital/withdraw/apply'];\nconst TRANSFER_FRAGMENTS = [\n '/asset/transfer',\n '/margin/transfer',\n '/margin/isolated/transfer',\n '/universaltransfer',\n '/futures/transfer',\n];\nconst MUTATING_METHODS = new Set<HttpMethod>(['POST', 'PUT', 'DELETE']);\n\nfunction toNumber(value: unknown): number | undefined {\n if (value === undefined || value === null || value === '') return undefined;\n const num = Number(value);\n return Number.isFinite(num) ? num : undefined;\n}\n\nfunction includesFragment(path: string, fragments: string[]): boolean {\n const lower = path.toLowerCase();\n return fragments.some((fragment) => lower.includes(fragment.toLowerCase()));\n}\n\n/**\n * Client-side guardrails evaluated before a request leaves the process.\n *\n * This exists for autonomous/LLM-driven callers: a misread prompt should not be able to spend\n * the account. It is a defence-in-depth layer, not a substitute for exchange-side API-key\n * restrictions (IP allowlists, disabled withdrawals) — anything that bypasses this HttpClient\n * bypasses the policy too.\n */\nexport class TradingPolicy {\n private readonly allowedSymbols?: Set<string>;\n\n constructor(private readonly options: TradingPolicyOptions = {}) {\n if (options.allowedSymbols?.length) {\n this.allowedSymbols = new Set(options.allowedSymbols.map((s) => s.toUpperCase()));\n }\n }\n\n /** Throws {@link PolicyViolationError} or {@link DryRunError} if the request is not permitted. */\n check(method: HttpMethod, path: string, params: Record<string, unknown> = {}): void {\n if (!MUTATING_METHODS.has(method)) return;\n\n const deny = (rule: PolicyRule, message: string, details?: Record<string, unknown>): never => {\n throw new PolicyViolationError(rule, message, method, path, details);\n };\n\n if (this.options.blockedPaths?.length && includesFragment(path, this.options.blockedPaths)) {\n deny('blockedPath', 'endpoint is on the blocked-path list');\n }\n\n if (this.options.readOnly) {\n deny('readOnly', 'client is in read-only mode; mutating requests are refused');\n }\n\n if (includesFragment(path, WITHDRAW_FRAGMENTS) && this.options.allowWithdrawals !== true) {\n deny('withdrawalsBlocked', 'withdrawals are disabled; set safety.allowWithdrawals to permit them');\n }\n\n if (includesFragment(path, TRANSFER_FRAGMENTS) && this.options.allowTransfers === false) {\n deny('transfersBlocked', 'account transfers are disabled by policy');\n }\n\n this.checkSymbol(path, params, deny);\n this.checkNotional(path, params, deny);\n\n if (this.options.dryRun) {\n throw new DryRunError(method, path, params);\n }\n }\n\n private checkSymbol(\n path: string,\n params: Record<string, unknown>,\n deny: (rule: PolicyRule, message: string, details?: Record<string, unknown>) => never,\n ): void {\n if (!this.allowedSymbols) return;\n const symbol = params.symbol;\n if (typeof symbol !== 'string' || symbol === '') return;\n if (!this.allowedSymbols.has(symbol.toUpperCase())) {\n deny('symbolNotAllowed', `symbol ${symbol} is not in the allowed list`, {\n symbol,\n allowed: [...this.allowedSymbols],\n });\n }\n }\n\n private checkNotional(\n path: string,\n params: Record<string, unknown>,\n deny: (rule: PolicyRule, message: string, details?: Record<string, unknown>) => never,\n ): void {\n const max = this.options.maxNotionalPerOrder;\n if (max === undefined) return;\n if (!path.toLowerCase().includes('order')) return;\n\n const quantity = toNumber(params.quantity);\n const quoteOrderQty = toNumber(params.quoteOrderQty);\n // Only order-placing requests carry a size; cancels and queries are unaffected.\n if (quantity === undefined && quoteOrderQty === undefined) return;\n\n const price = toNumber(params.price);\n const notional = quoteOrderQty ?? (price !== undefined && quantity !== undefined ? price * quantity : undefined);\n\n if (notional === undefined) {\n deny(\n 'notionalUndeterminable',\n `cannot verify notional against the ${max} cap (no price on this order); supply a price or raise/remove maxNotionalPerOrder`,\n { quantity, maxNotionalPerOrder: max },\n );\n }\n\n if (notional > max) {\n deny('maxNotionalPerOrder', `order notional ${notional} exceeds the ${max} cap`, {\n notional,\n maxNotionalPerOrder: max,\n });\n }\n }\n}\n","export type Environment = 'live' | 'testnet' | 'demo';\n\nexport interface Endpoints {\n restRoot: string;\n restFapi: string;\n restFuturesData: string;\n restSpot: string;\n restApiRoot: string;\n restDapiRoot: string;\n restDapi: string;\n wsMarket: string;\n wsUser: string;\n wsApi: string;\n wsSpotMarket: string;\n wsSpotUser: string;\n wsSpotApi: string;\n wsDapiMarket: string;\n wsDapiUser: string;\n}\n\nexport function resolveEnvironment(options?: {\n testnet?: boolean;\n demo?: boolean;\n apiBase?: string;\n wsBase?: string;\n wsUserBase?: string;\n wsApiBase?: string;\n dapiBase?: string;\n wsSpotApiBase?: string;\n wsDapiBase?: string;\n}): { env: Environment; endpoints: Endpoints } {\n const env: Environment = options?.demo ? 'demo' : options?.testnet ? 'testnet' : 'live';\n\n const restHost =\n options?.apiBase ??\n (env === 'demo'\n ? 'https://demo-fapi.binance.com'\n : env === 'testnet'\n ? 'https://testnet.binancefuture.com'\n : 'https://fapi.binance.com');\n\n const wsMarketHost =\n options?.wsBase ??\n (env === 'demo'\n ? 'wss://demo-fstream.binance.com/stream'\n : env === 'testnet'\n ? 'wss://fstream.binancefuture.com/stream'\n : 'wss://fstream.binance.com/stream');\n\n const wsUserHost =\n options?.wsUserBase ??\n (env === 'demo'\n ? 'wss://demo-fstream.binance.com/ws'\n : env === 'testnet'\n ? 'wss://fstream.binancefuture.com/ws'\n : 'wss://fstream.binance.com/ws');\n\n const wsApiHost =\n options?.wsApiBase ??\n (env === 'demo'\n ? 'wss://demo-fapi.binance.com/ws-fapi/v1'\n : 'wss://ws-fapi.binance.com/ws-fapi/v1');\n\n const restSpotHost =\n options?.apiBase ??\n (env === 'testnet' ? 'https://testnet.binance.vision' : 'https://api.binance.com');\n\n const wsSpotMarketHost =\n options?.wsBase ??\n (env === 'testnet' ? 'wss://testnet.binance.vision/stream' : 'wss://stream.binance.com:9443/stream');\n\n const wsSpotUserHost =\n options?.wsUserBase ??\n (env === 'testnet' ? 'wss://testnet.binance.vision/ws' : 'wss://stream.binance.com:9443/ws');\n\n // Binance has no dedicated COIN-M demo trading host, so demo mode falls back to testnet.\n const restDapiHost =\n options?.dapiBase ??\n (env === 'testnet' || env === 'demo' ? 'https://testnet.binancefuture.com' : 'https://dapi.binance.com');\n\n const wsSpotApiHost =\n options?.wsSpotApiBase ??\n (env === 'testnet' ? 'wss://testnet.binance.vision/ws-api/v3' : 'wss://ws-api.binance.com:443/ws-api/v3');\n\n // Binance has no dedicated COIN-M demo WS host either, so demo mode falls back to testnet here too.\n const wsDapiHost =\n options?.wsDapiBase ??\n (env === 'testnet' || env === 'demo' ? 'wss://dstream.binancefuture.com' : 'wss://dstream.binance.com');\n\n return {\n env,\n endpoints: {\n restRoot: restHost,\n restFapi: `${restHost}/fapi/v1`,\n restFuturesData: `${restHost}/futures/data`,\n restSpot: `${restSpotHost}/api/v3`,\n restApiRoot: restSpotHost,\n restDapiRoot: restDapiHost,\n restDapi: `${restDapiHost}/dapi/v1`,\n wsMarket: wsMarketHost,\n wsUser: wsUserHost,\n wsApi: wsApiHost,\n wsSpotMarket: wsSpotMarketHost,\n wsSpotUser: wsSpotUserHost,\n wsSpotApi: wsSpotApiHost,\n wsDapiMarket: `${wsDapiHost}/stream`,\n wsDapiUser: `${wsDapiHost}/ws`,\n },\n };\n}\n","import { z } from 'zod';\n\nexport const FundingRateSchema = z.object({\n symbol: z.string(),\n fundingTime: z.number(),\n fundingRate: z.string().transform(Number),\n markPrice: z.string().transform(Number).optional(),\n});\nexport type FundingRate = z.infer<typeof FundingRateSchema>;\nexport const FundingRateHistorySchema = z.array(FundingRateSchema);\n\nexport const PremiumIndexSchema = z.object({\n symbol: z.string(),\n markPrice: z.string().transform(Number),\n indexPrice: z.string().transform(Number),\n estimatedSettlePrice: z.string().transform(Number),\n lastFundingRate: z.string().transform(Number),\n nextFundingTime: z.number(),\n interestRate: z.string().transform(Number),\n time: z.number(),\n});\nexport type PremiumIndex = z.infer<typeof PremiumIndexSchema>;\n\nexport const OpenInterestSchema = z.object({\n symbol: z.string(),\n openInterest: z.string().transform(Number),\n time: z.number(),\n});\nexport type OpenInterest = z.infer<typeof OpenInterestSchema>;\n\nexport const OpenInterestHistEntrySchema = z.object({\n symbol: z.string(),\n sumOpenInterest: z.string().transform(Number),\n sumOpenInterestValue: z.string().transform(Number),\n timestamp: z.number(),\n});\nexport type OpenInterestHistEntry = z.infer<typeof OpenInterestHistEntrySchema>;\nexport const OpenInterestHistSchema = z.array(OpenInterestHistEntrySchema);\n\nexport const LongShortRatioEntrySchema = z.object({\n symbol: z.string(),\n longShortRatio: z.string().transform(Number),\n longAccount: z.string().transform(Number),\n shortAccount: z.string().transform(Number),\n timestamp: z.number(),\n});\nexport type LongShortRatioEntry = z.infer<typeof LongShortRatioEntrySchema>;\nexport const LongShortRatioSchema = z.array(LongShortRatioEntrySchema);\n\nexport const TakerLongShortRatioEntrySchema = z.object({\n buySellRatio: z.string().transform(Number),\n buyVol: z.string().transform(Number),\n sellVol: z.string().transform(Number),\n timestamp: z.number(),\n});\nexport type TakerLongShortRatioEntry = z.infer<typeof TakerLongShortRatioEntrySchema>;\nexport const TakerLongShortRatioSchema = z.array(TakerLongShortRatioEntrySchema);\n","import { HttpClient } from '../client/HttpClient.js';\nimport {\n FundingRate,\n FundingRateHistorySchema,\n LongShortRatioEntry,\n LongShortRatioSchema,\n OpenInterest,\n OpenInterestHistEntry,\n OpenInterestHistSchema,\n OpenInterestSchema,\n PremiumIndex,\n PremiumIndexSchema,\n TakerLongShortRatioEntry,\n TakerLongShortRatioSchema,\n} from '../types/futures.types.js';\nimport type { KlineInterval } from '../types/market.types.js';\n\nexport interface FuturesDataEndpoints {\n restFapi?: string;\n restFuturesData?: string;\n apiKey?: string;\n apiSecret?: string;\n recvWindow?: number;\n timeoutMs?: number;\n maxRetries?: number;\n retryBaseDelayMs?: number;\n retryMaxDelayMs?: number;\n}\n\nexport class FuturesData {\n private readonly http: HttpClient;\n private readonly dataHttp: HttpClient;\n\n constructor(endpoints?: FuturesDataEndpoints) {\n const { restFapi, restFuturesData, ...httpOptions } = endpoints ?? {};\n this.http = new HttpClient({ baseURL: restFapi ?? 'https://fapi.binance.com/fapi/v1', ...httpOptions });\n this.dataHttp = new HttpClient({\n baseURL: restFuturesData ?? 'https://fapi.binance.com/futures/data',\n ...httpOptions,\n });\n }\n\n async fundingRateHistory(\n symbol: string,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<FundingRate[]> {\n const data = await this.http.get('/fundingRate', {\n symbol,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit ?? 100,\n });\n return FundingRateHistorySchema.parse(data);\n }\n\n async premiumIndex(symbol: string): Promise<PremiumIndex> {\n return PremiumIndexSchema.parse(await this.http.get('/premiumIndex', { symbol }));\n }\n\n async openInterest(symbol: string): Promise<OpenInterest> {\n return OpenInterestSchema.parse(await this.http.get('/openInterest', { symbol }));\n }\n\n async openInterestHist(symbol: string, period: string, limit = 30): Promise<OpenInterestHistEntry[]> {\n const data = await this.dataHttp.get('/openInterestHist', { symbol, period, limit });\n return OpenInterestHistSchema.parse(data);\n }\n\n async topLongShortAccountRatio(symbol: string, period: string, limit = 30): Promise<LongShortRatioEntry[]> {\n const data = await this.dataHttp.get('/topLongShortAccountRatio', { symbol, period, limit });\n return LongShortRatioSchema.parse(data);\n }\n\n async topLongShortPositionRatio(symbol: string, period: string, limit = 30): Promise<LongShortRatioEntry[]> {\n const data = await this.dataHttp.get('/topLongShortPositionRatio', { symbol, period, limit });\n return LongShortRatioSchema.parse(data);\n }\n\n async globalLongShortAccountRatio(symbol: string, period: string, limit = 30): Promise<LongShortRatioEntry[]> {\n const data = await this.dataHttp.get('/globalLongShortAccountRatio', { symbol, period, limit });\n return LongShortRatioSchema.parse(data);\n }\n\n async takerLongShortRatio(symbol: string, period: string, limit = 30): Promise<TakerLongShortRatioEntry[]> {\n const data = await this.dataHttp.get('/takerlongshortRatio', { symbol, period, limit });\n return TakerLongShortRatioSchema.parse(data);\n }\n\n async basis(\n symbol: string,\n period: string,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<unknown[]> {\n return this.dataHttp.get('/basis', {\n symbol,\n period,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit,\n });\n }\n\n async fundingInfo(): Promise<unknown[]> {\n return this.http.get('/fundingInfo');\n }\n\n async assetIndex(symbol?: string): Promise<unknown[] | unknown> {\n const params = symbol ? { symbol } : {};\n return this.http.get('/assetIndex', params);\n }\n\n async compositeIndexInfo(symbol?: string): Promise<unknown> {\n const params = symbol ? { symbol } : {};\n return this.http.get('/indexInfo', params);\n }\n\n async adlQuantile(symbol?: string): Promise<unknown[]> {\n const params = symbol ? { symbol } : {};\n return this.http.get('/adlQuantile', params, 'signed');\n }\n\n async blvtInfo(\n tokenName: string,\n interval: KlineInterval,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<unknown[]> {\n return this.http.get('/lvtKlines', {\n tokenName,\n interval,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit,\n });\n }\n\n async indexPriceConstituents(symbol: string): Promise<unknown> {\n return this.http.get('/constituents', { symbol });\n }\n\n async symbolConfig(symbol?: string): Promise<unknown[]> {\n const params = symbol ? { symbol } : {};\n return this.http.get('/symbolConfig', params, 'signed');\n }\n\n async forceOrders(options?: {\n symbol?: string;\n autoCloseType?: 'LIQUIDATION' | 'ADL';\n startTime?: number;\n endTime?: number;\n limit?: number;\n }): Promise<unknown[]> {\n return this.http.get(\n '/forceOrders',\n {\n symbol: options?.symbol,\n autoCloseType: options?.autoCloseType,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit,\n },\n 'signed',\n );\n }\n\n async insuranceFundBalance(options?: { symbol?: string; startTime?: number; endTime?: number; limit?: number }): Promise<unknown[]> {\n return this.dataHttp.get('/insuranceBalance', {\n symbol: options?.symbol,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit,\n });\n }\n\n async pmExchangeInfo(): Promise<unknown> {\n return this.http.get('/pmExchangeInfo');\n }\n\n async delistSchedule(symbol?: string): Promise<unknown[]> {\n const params = symbol ? { symbol } : {};\n return this.http.get('/delistSchedule', params);\n }\n\n async symbolAdlRisk(symbol?: string): Promise<unknown[]> {\n const params = symbol ? { symbol } : {};\n return this.http.get('/symbolAdlRisk', params, 'signed');\n }\n\n async deliveryPrice(pair: string): Promise<{ deliveryTime: number; deliveryPrice: number }[]> {\n return this.dataHttp.get('/delivery-price', { pair });\n }\n}\n","import { z } from 'zod';\n\nexport const KlineIntervalSchema = z.enum([\n '1m', '3m', '5m', '15m', '30m',\n '1h', '2h', '4h', '6h', '8h', '12h',\n '1d', '3d', '1w', '1M',\n]);\nexport type KlineInterval = z.infer<typeof KlineIntervalSchema>;\n\nconst RawKlineSchema = z.tuple([\n z.number(), z.string(), z.string(), z.string(), z.string(), z.string(),\n z.number(), z.string(), z.number(), z.string(), z.string(), z.string(),\n]);\n\nexport const KlineSchema = RawKlineSchema.transform(\n ([openTime, open, high, low, close, volume, closeTime, quoteAssetVolume, trades, takerBuyBaseVolume, takerBuyQuoteVolume]) => ({\n openTime,\n open: Number(open),\n high: Number(high),\n low: Number(low),\n close: Number(close),\n volume: Number(volume),\n closeTime,\n quoteAssetVolume: Number(quoteAssetVolume),\n trades,\n takerBuyBaseVolume: Number(takerBuyBaseVolume),\n takerBuyQuoteVolume: Number(takerBuyQuoteVolume),\n }),\n);\nexport type Kline = z.infer<typeof KlineSchema>;\nexport const KlinesResponseSchema = z.array(KlineSchema);\n\nexport const TickerPriceSchema = z.object({\n symbol: z.string(),\n price: z.string().transform(Number),\n time: z.number().optional(),\n});\nexport type TickerPrice = z.infer<typeof TickerPriceSchema>;\n\nexport const Ticker24hrSchema = z.object({\n symbol: z.string(),\n priceChange: z.string().transform(Number),\n priceChangePercent: z.string().transform(Number),\n weightedAvgPrice: z.string().transform(Number),\n lastPrice: z.string().transform(Number),\n lastQty: z.string().transform(Number),\n openPrice: z.string().transform(Number),\n highPrice: z.string().transform(Number),\n lowPrice: z.string().transform(Number),\n volume: z.string().transform(Number),\n quoteVolume: z.string().transform(Number),\n openTime: z.number(),\n closeTime: z.number(),\n firstId: z.number(),\n lastId: z.number(),\n count: z.number(),\n});\nexport type Ticker24hr = z.infer<typeof Ticker24hrSchema>;\n\nexport const BookTickerSchema = z.object({\n symbol: z.string(),\n bidPrice: z.string().transform(Number),\n bidQty: z.string().transform(Number),\n askPrice: z.string().transform(Number),\n askQty: z.string().transform(Number),\n time: z.number().optional(),\n});\nexport type BookTicker = z.infer<typeof BookTickerSchema>;\n\nconst DepthLevelSchema = z\n .tuple([z.string(), z.string()])\n .transform(([price, qty]) => ({ price: Number(price), qty: Number(qty) }));\n\nexport const DepthSnapshotSchema = z.object({\n lastUpdateId: z.number(),\n bids: z.array(DepthLevelSchema),\n asks: z.array(DepthLevelSchema),\n});\nexport type DepthSnapshot = z.infer<typeof DepthSnapshotSchema>;\n\nexport const TradeSchema = z.object({\n id: z.number(),\n price: z.string().transform(Number),\n qty: z.string().transform(Number),\n quoteQty: z.string().transform(Number),\n time: z.number(),\n isBuyerMaker: z.boolean(),\n});\nexport type Trade = z.infer<typeof TradeSchema>;\nexport const TradesResponseSchema = z.array(TradeSchema);\n\nexport const AggTradeSchema = z.object({\n a: z.number(),\n p: z.string().transform(Number),\n q: z.string().transform(Number),\n f: z.number(),\n l: z.number(),\n T: z.number(),\n m: z.boolean(),\n});\nexport type AggTrade = z.infer<typeof AggTradeSchema>;\nexport const AggTradesResponseSchema = z.array(AggTradeSchema);\n\nexport const AvgPriceSchema = z.object({\n mins: z.number(),\n price: z.string().transform(Number),\n});\nexport type AvgPrice = z.infer<typeof AvgPriceSchema>;\n\nexport const ExchangeSymbolSchema = z\n .object({\n symbol: z.string(),\n status: z.string(),\n baseAsset: z.string(),\n quoteAsset: z.string(),\n })\n .loose();\nexport type ExchangeSymbol = z.infer<typeof ExchangeSymbolSchema>;\n\nexport const ExchangeInfoSchema = z\n .object({\n timezone: z.string(),\n serverTime: z.number(),\n symbols: z.array(ExchangeSymbolSchema),\n })\n .loose();\nexport type ExchangeInfo = z.infer<typeof ExchangeInfoSchema>;\n","import type { HttpClient } from '../client/HttpClient.js';\nimport {\n AggTrade,\n AggTradesResponseSchema,\n BookTicker,\n BookTickerSchema,\n DepthSnapshot,\n DepthSnapshotSchema,\n ExchangeInfo,\n ExchangeInfoSchema,\n Kline,\n KlineInterval,\n KlinesResponseSchema,\n Ticker24hr,\n Ticker24hrSchema,\n TickerPrice,\n TickerPriceSchema,\n Trade,\n TradesResponseSchema,\n} from '../types/market.types.js';\n\nexport class MarketDataBase {\n constructor(protected readonly http: HttpClient) {}\n\n async exchangeInfo(): Promise<ExchangeInfo> {\n return ExchangeInfoSchema.parse(await this.http.get('/exchangeInfo'));\n }\n\n async ping(): Promise<Record<string, unknown>> {\n return this.http.get('/ping');\n }\n\n async serverTime(): Promise<{ serverTime: number }> {\n return this.http.get('/time');\n }\n\n async historicalTrades(symbol: string, options?: { fromId?: number; limit?: number }): Promise<Trade[]> {\n const data = await this.http.get('/historicalTrades', {\n symbol,\n fromId: options?.fromId,\n limit: options?.limit ?? 500,\n });\n return TradesResponseSchema.parse(data);\n }\n\n async klines(\n symbol: string,\n interval: KlineInterval,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<Kline[]> {\n const data = await this.http.get('/klines', {\n symbol,\n interval,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit ?? 500,\n });\n return KlinesResponseSchema.parse(data);\n }\n\n async tickerPrice(symbol: string): Promise<TickerPrice> {\n return TickerPriceSchema.parse(await this.http.get('/ticker/price', { symbol }));\n }\n\n async ticker24hr(symbol: string): Promise<Ticker24hr> {\n return Ticker24hrSchema.parse(await this.http.get('/ticker/24hr', { symbol }));\n }\n\n async bookTicker(symbol: string): Promise<BookTicker> {\n return BookTickerSchema.parse(await this.http.get('/ticker/bookTicker', { symbol }));\n }\n\n async depth(symbol: string, limit = 100): Promise<DepthSnapshot> {\n return DepthSnapshotSchema.parse(await this.http.get('/depth', { symbol, limit }));\n }\n\n async trades(symbol: string, limit = 500): Promise<Trade[]> {\n return TradesResponseSchema.parse(await this.http.get('/trades', { symbol, limit }));\n }\n\n async aggTrades(\n symbol: string,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<AggTrade[]> {\n const data = await this.http.get('/aggTrades', {\n symbol,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit ?? 500,\n });\n return AggTradesResponseSchema.parse(data);\n }\n}\n","import { HttpClient } from '../client/HttpClient.js';\nimport { MarketDataBase } from './MarketDataBase.js';\nimport {\n Kline,\n KlinesResponseSchema,\n KlineInterval,\n TickerPrice,\n TickerPriceSchema,\n BookTicker,\n BookTickerSchema,\n DepthSnapshot,\n DepthSnapshotSchema,\n ExchangeInfo,\n ExchangeInfoSchema,\n} from '../types/market.types.js';\n\nexport class FuturesMarket extends MarketDataBase {\n private readonly rootHttp: HttpClient;\n\n constructor(http?: HttpClient, restRoot?: string) {\n super(http ?? new HttpClient({ baseURL: 'https://fapi.binance.com/fapi/v1' }));\n this.rootHttp = new HttpClient({ baseURL: restRoot ?? 'https://fapi.binance.com' });\n }\n\n async continuousKlines(\n pair: string,\n contractType: 'perpetual' | 'current_quarter' | 'next_quarter',\n interval: KlineInterval,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<Kline[]> {\n const data = await this.http.get('/continuousKlines', {\n pair,\n contractType,\n interval,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit ?? 500,\n });\n return KlinesResponseSchema.parse(data);\n }\n\n async indexPriceKlines(\n pair: string,\n interval: KlineInterval,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<Kline[]> {\n const data = await this.http.get('/indexPriceKlines', {\n pair,\n interval,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit ?? 500,\n });\n return KlinesResponseSchema.parse(data);\n }\n\n async markPriceKlines(\n symbol: string,\n interval: KlineInterval,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<Kline[]> {\n const data = await this.http.get('/markPriceKlines', {\n symbol,\n interval,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit ?? 500,\n });\n return KlinesResponseSchema.parse(data);\n }\n\n async premiumIndexKlines(\n symbol: string,\n interval: KlineInterval,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<Kline[]> {\n const data = await this.http.get('/premiumIndexKlines', {\n symbol,\n interval,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit ?? 500,\n });\n return KlinesResponseSchema.parse(data);\n }\n\n async rpiDepth(symbol: string, limit = 1000): Promise<DepthSnapshot> {\n return DepthSnapshotSchema.parse(await this.http.get('/rpiDepth', { symbol, limit }));\n }\n\n async tradingDayTicker(symbol?: string): Promise<unknown[]> {\n const params = symbol ? { symbol } : {};\n return this.http.get('/tradingDayTicker', params);\n }\n\n async tickerPriceV2(symbol?: string): Promise<TickerPrice[] | TickerPrice> {\n const params = symbol ? { symbol } : {};\n return TickerPriceSchema.parse(await this.rootHttp.get('/fapi/v2/ticker/price', params));\n }\n\n async bookTickerV2(symbol?: string): Promise<BookTicker[] | BookTicker> {\n const params = symbol ? { symbol } : {};\n return BookTickerSchema.parse(await this.rootHttp.get('/fapi/v2/ticker/bookTicker', params));\n }\n\n async instrumentDetails(symbol: string): Promise<ExchangeInfo['symbols'][number]> {\n const info = await ExchangeInfoSchema.parse(await this.http.get('/exchangeInfo'));\n const details = info.symbols.find((s) => s.symbol === symbol);\n if (!details) throw new Error(`Instrument ${symbol} not found`);\n return details;\n }\n}\n","import { HttpClient } from '../client/HttpClient.js';\nimport { MarketDataBase } from './MarketDataBase.js';\nimport { AvgPrice, AvgPriceSchema, Kline, KlineInterval, KlinesResponseSchema } from '../types/market.types.js';\n\nexport class SpotMarket extends MarketDataBase {\n constructor(http?: HttpClient) {\n super(http ?? new HttpClient({ baseURL: 'https://api.binance.com/api/v3' }));\n }\n\n async avgPrice(symbol: string): Promise<AvgPrice> {\n return AvgPriceSchema.parse(await this.http.get('/avgPrice', { symbol }));\n }\n\n /** Optimized klines endpoint (`/uiKlines`) with the same response shape as `/klines`. */\n async uiKlines(\n symbol: string,\n interval: KlineInterval,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<Kline[]> {\n const data = await this.http.get('/uiKlines', {\n symbol,\n interval,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit ?? 500,\n });\n return KlinesResponseSchema.parse(data);\n }\n\n /** Rolling window ticker (`/ticker`). Omit `symbol` for all symbols. */\n async rollingWindowTicker(\n symbol?: string,\n windowSize?: '1d' | '7d' | '30d',\n ): Promise<unknown[] | unknown> {\n const params = { symbol, windowSize };\n return this.http.get('/ticker', params);\n }\n\n /** Trading-day ticker (`/ticker/tradingDay`). Omit `symbol` for all symbols. */\n async tradingDayTicker(\n symbol?: string,\n options?: { timeZone?: string; type?: 'FULL' | 'MINI' },\n ): Promise<unknown[] | unknown> {\n return this.http.get('/ticker/tradingDay', { symbol, ...options });\n }\n}\n","import { z } from 'zod';\n\n// ---- Spot order / OCO / trade ----\n\nexport const SpotOrderSchema = z\n .object({\n symbol: z.string(),\n orderId: z.number(),\n clientOrderId: z.string(),\n status: z.string(),\n side: z.string(),\n type: z.string(),\n timeInForce: z.string().optional(),\n price: z.string().transform(Number).optional(),\n origQty: z.string().transform(Number).optional(),\n executedQty: z.string().transform(Number).optional(),\n cummulativeQuoteQty: z.string().transform(Number).optional(),\n stopPrice: z.string().transform(Number).optional(),\n icebergQty: z.string().transform(Number).optional(),\n originalQuoteOrderQty: z.string().transform(Number).optional(),\n transactTime: z.number().optional(),\n workingTime: z.number().optional(),\n orderListId: z.number().optional(),\n selfTradePreventionMode: z.string().optional(),\n fills: z.array(z.unknown()).optional(),\n })\n .loose();\nexport type SpotOrder = z.infer<typeof SpotOrderSchema>;\nexport const SpotOrderResponseSchema = SpotOrderSchema;\nexport const SpotOrdersResponseSchema = z.array(SpotOrderSchema);\n\nexport const SpotOCOOrderAckSchema = z\n .object({\n orderListId: z.number(),\n contingencyType: z.string(),\n listStatusType: z.string(),\n listOrderStatus: z.string(),\n listClientOrderId: z.string(),\n transactionTime: z.number(),\n symbol: z.string(),\n orders: z.array(SpotOrderSchema),\n orderReports: z.array(z.unknown()).optional(),\n })\n .loose();\nexport type SpotOCOOrderAck = z.infer<typeof SpotOCOOrderAckSchema>;\nexport const SpotOCOOrderAckResponseSchema = SpotOCOOrderAckSchema;\nexport const SpotOCOOrdersResponseSchema = z.array(SpotOCOOrderAckSchema);\n\nexport const SpotTradeSchema = z\n .object({\n symbol: z.string(),\n id: z.number(),\n orderId: z.number(),\n orderListId: z.number().optional(),\n price: z.string().transform(Number),\n qty: z.string().transform(Number),\n quoteQty: z.string().transform(Number),\n commission: z.string().transform(Number),\n commissionAsset: z.string(),\n time: z.number(),\n isBuyer: z.boolean(),\n isMaker: z.boolean(),\n isBestMatch: z.boolean(),\n })\n .loose();\nexport type SpotTrade = z.infer<typeof SpotTradeSchema>;\nexport const SpotTradesResponseSchema = z.array(SpotTradeSchema);\n\n// ---- Spot account ----\n\nexport const SpotBalanceSchema = z.object({\n asset: z.string(),\n free: z.string().transform(Number),\n locked: z.string().transform(Number),\n});\nexport type SpotBalance = z.infer<typeof SpotBalanceSchema>;\n\nexport const SpotAccountSchema = z\n .object({\n makerCommission: z.number(),\n takerCommission: z.number(),\n buyerCommission: z.number(),\n sellerCommission: z.number(),\n canTrade: z.boolean(),\n canWithdraw: z.boolean(),\n canDeposit: z.boolean(),\n updateTime: z.number().optional(),\n accountType: z.string().optional(),\n balances: z.array(SpotBalanceSchema),\n permissions: z.array(z.string()).optional(),\n })\n .loose();\nexport type SpotAccountInfo = z.infer<typeof SpotAccountSchema>;\n\n// ---- Spot user data stream events (listenKey stream) ----\n\nexport const SpotExecutionReportSchema = z.object({ e: z.literal('executionReport') }).loose();\nexport type SpotExecutionReport = z.infer<typeof SpotExecutionReportSchema>;\n\nexport const SpotOutboundAccountPositionSchema = z\n .object({ e: z.literal('outboundAccountPosition') })\n .loose();\nexport type SpotOutboundAccountPosition = z.infer<typeof SpotOutboundAccountPositionSchema>;\n\nexport const SpotBalanceUpdateSchema = z.object({ e: z.literal('balanceUpdate') }).loose();\nexport type SpotBalanceUpdate = z.infer<typeof SpotBalanceUpdateSchema>;\n\nexport const SpotListStatusSchema = z.object({ e: z.literal('listStatus') }).loose();\nexport type SpotListStatus = z.infer<typeof SpotListStatusSchema>;\n\nexport type SpotUserDataEvent =\n | SpotExecutionReport\n | SpotOutboundAccountPosition\n | SpotBalanceUpdate\n | SpotListStatus;\n\nexport function parseSpotUserDataEvent(raw: unknown): SpotUserDataEvent {\n if (typeof raw !== 'object' || raw === null) {\n throw new Error('Invalid spot user-data payload');\n }\n const eventType = (raw as { e?: string }).e;\n if (eventType === 'executionReport') return SpotExecutionReportSchema.parse(raw);\n if (eventType === 'outboundAccountPosition') return SpotOutboundAccountPositionSchema.parse(raw);\n if (eventType === 'balanceUpdate') return SpotBalanceUpdateSchema.parse(raw);\n if (eventType === 'listStatus') return SpotListStatusSchema.parse(raw);\n throw new Error(`Unknown spot user-data event type: ${eventType}`);\n}\n","import { HttpClient } from '../client/HttpClient.js';\nimport {\n SpotAccountInfo,\n SpotAccountSchema,\n SpotOCOOrderAck,\n SpotOCOOrderAckResponseSchema,\n SpotOCOOrdersResponseSchema,\n SpotOrder,\n SpotOrderSchema,\n SpotOrdersResponseSchema,\n SpotTrade,\n SpotTradesResponseSchema,\n} from '../types/spot.types.js';\n\nexport class SpotTrading {\n constructor(private readonly http: HttpClient) {}\n\n async createOrder(params: Record<string, unknown>): Promise<SpotOrder> {\n return SpotOrderSchema.parse(await this.http.post('/order', params, 'signed'));\n }\n\n async testOrder(params: Record<string, unknown>): Promise<Record<string, unknown>> {\n return this.http.post('/order/test', params, 'signed');\n }\n\n async getOrder(symbol: string, options?: { orderId?: number; origClientOrderId?: string }): Promise<SpotOrder> {\n return SpotOrderSchema.parse(\n await this.http.get('/order', { symbol, ...options }, 'signed'),\n );\n }\n\n async cancelOrder(\n symbol: string,\n options?: { orderId?: number; origClientOrderId?: string; newClientOrderId?: string },\n ): Promise<SpotOrder> {\n return SpotOrderSchema.parse(\n await this.http.delete('/order', { symbol, ...options }, 'signed'),\n );\n }\n\n async cancelOpenOrders(symbol: string): Promise<SpotOrder[]> {\n return SpotOrdersResponseSchema.parse(\n await this.http.delete('/openOrders', { symbol }, 'signed'),\n );\n }\n\n async getOpenOrders(symbol?: string): Promise<SpotOrder[]> {\n const params = symbol ? { symbol } : {};\n return SpotOrdersResponseSchema.parse(await this.http.get('/openOrders', params, 'signed'));\n }\n\n async getAllOrders(\n symbol: string,\n options?: { orderId?: number; startTime?: number; endTime?: number; limit?: number },\n ): Promise<SpotOrder[]> {\n return SpotOrdersResponseSchema.parse(\n await this.http.get('/allOrders', { symbol, ...options }, 'signed'),\n );\n }\n\n async cancelReplaceOrder(params: Record<string, unknown>): Promise<Record<string, unknown>> {\n return this.http.post('/order/cancelReplace', params, 'signed');\n }\n\n // ---- OCO order lists ----\n\n async createOCOOrder(params: Record<string, unknown>): Promise<SpotOCOOrderAck> {\n return SpotOCOOrderAckResponseSchema.parse(\n await this.http.post('/orderList', params, 'signed'),\n );\n }\n\n async cancelOCOOrder(\n symbol: string,\n options?: { orderListId?: number; listClientOrderId?: string; newClientOrderId?: string },\n ): Promise<SpotOCOOrderAck> {\n return SpotOCOOrderAckResponseSchema.parse(\n await this.http.delete('/orderList', { symbol, ...options }, 'signed'),\n );\n }\n\n async getOCOOrder(\n symbol: string,\n options?: { orderListId?: number; origClientOrderId?: string },\n ): Promise<SpotOCOOrderAck> {\n return SpotOCOOrderAckResponseSchema.parse(\n await this.http.get('/orderList', { symbol, ...options }, 'signed'),\n );\n }\n\n async getOpenOCOOrders(): Promise<SpotOCOOrderAck[]> {\n return SpotOCOOrdersResponseSchema.parse(\n await this.http.get('/openOrderLists', undefined, 'signed'),\n );\n }\n\n async getAllOCOOrders(\n symbol: string,\n options?: { fromId?: number; startTime?: number; endTime?: number; limit?: number },\n ): Promise<SpotOCOOrderAck[]> {\n return SpotOCOOrdersResponseSchema.parse(\n await this.http.get('/allOrderLists', { symbol, ...options }, 'signed'),\n );\n }\n\n async cancelOpenOCOOrders(symbol: string): Promise<SpotOCOOrderAck[]> {\n return SpotOCOOrdersResponseSchema.parse(\n await this.http.delete('/openOrderLists', { symbol }, 'signed'),\n );\n }\n}\n\nexport class SpotAccount {\n constructor(private readonly http: HttpClient) {}\n\n async account(): Promise<SpotAccountInfo> {\n return SpotAccountSchema.parse(await this.http.get('/account', undefined, 'signed'));\n }\n\n async myTrades(\n symbol: string,\n options?: { orderId?: number; startTime?: number; endTime?: number; fromId?: number; limit?: number },\n ): Promise<SpotTrade[]> {\n return SpotTradesResponseSchema.parse(\n await this.http.get('/myTrades', { symbol, ...options }, 'signed'),\n );\n }\n\n async myPreventedMatches(\n symbol: string,\n options?: {\n preventedMatchId?: number;\n orderId?: number;\n fromPreventedMatchId?: number;\n limit?: number;\n },\n ): Promise<unknown[]> {\n return this.http.get('/myPreventedMatches', { symbol, ...options }, 'signed');\n }\n\n async accountCommission(symbol: string): Promise<Record<string, unknown>> {\n return this.http.get('/account/commission', { symbol }, 'signed');\n }\n\n async rateLimitOrder(): Promise<unknown[]> {\n return this.http.get('/rateLimit/order', undefined, 'signed');\n }\n}\n","import { z } from 'zod';\n\nexport const ListenKeySchema = z.object({\n listenKey: z.string(),\n});\nexport type ListenKey = z.infer<typeof ListenKeySchema>;\n\nexport const UserDataAccountUpdateSchema = z.object({\n e: z.literal('ACCOUNT_UPDATE'),\n E: z.number(),\n T: z.number(),\n a: z.object({\n m: z.string().transform(Number),\n B: z.array(\n z.object({\n a: z.string(),\n wb: z.string().transform(Number),\n cw: z.string().transform(Number),\n bc: z.string().transform(Number),\n }),\n ),\n P: z.array(\n z.object({\n s: z.string(),\n pa: z.string().transform(Number),\n ep: z.string().transform(Number),\n cr: z.string().transform(Number),\n up: z.string().transform(Number),\n mt: z.string(),\n iw: z.string().transform(Number).optional(),\n ps: z.string(),\n }),\n ),\n }),\n});\nexport type UserDataAccountUpdate = z.infer<typeof UserDataAccountUpdateSchema>;\n\nexport const UserDataOrderTradeUpdateSchema = z.object({\n e: z.literal('ORDER_TRADE_UPDATE'),\n E: z.number(),\n T: z.number(),\n o: z.object({\n s: z.string(),\n c: z.string(),\n i: z.number(),\n S: z.string(),\n o: z.string(),\n f: z.string(),\n q: z.string().transform(Number),\n p: z.string().transform(Number),\n ap: z.string().transform(Number),\n sp: z.string().transform(Number),\n x: z.string(),\n X: z.string(),\n l: z.string().transform(Number),\n z: z.string().transform(Number),\n L: z.string().transform(Number),\n n: z.string().transform(Number),\n N: z.string(),\n T: z.number(),\n t: z.number(),\n b: z.string().transform(Number),\n a: z.string().transform(Number),\n m: z.boolean(),\n R: z.boolean(),\n wt: z.string(),\n ot: z.string(),\n ps: z.string(),\n cp: z.boolean().optional(),\n AP: z.string().transform(Number).optional(),\n cr: z.string().transform(Number).optional(),\n rp: z.string().transform(Number).optional(),\n }),\n});\nexport type UserDataOrderTradeUpdate = z.infer<typeof UserDataOrderTradeUpdateSchema>;\n\nexport const UserDataMarginCallSchema = z.object({\n e: z.literal('MARGIN_CALL'),\n E: z.number(),\n cw: z.string().transform(Number),\n p: z.array(\n z.object({\n s: z.string(),\n ps: z.string(),\n pa: z.string().transform(Number),\n mt: z.string(),\n iw: z.string().transform(Number),\n mp: z.string().transform(Number),\n up: z.string().transform(Number),\n mm: z.string().transform(Number),\n }),\n ),\n});\nexport type UserDataMarginCall = z.infer<typeof UserDataMarginCallSchema>;\n\nexport type UserDataEvent = UserDataAccountUpdate | UserDataOrderTradeUpdate | UserDataMarginCall;\n\nexport function parseUserDataEvent(raw: unknown): UserDataEvent {\n if (typeof raw !== 'object' || raw === null) {\n throw new Error('Invalid user-data payload');\n }\n const eventType = (raw as { e?: string }).e;\n if (eventType === 'ACCOUNT_UPDATE') return UserDataAccountUpdateSchema.parse(raw);\n if (eventType === 'ORDER_TRADE_UPDATE') return UserDataOrderTradeUpdateSchema.parse(raw);\n if (eventType === 'MARGIN_CALL') return UserDataMarginCallSchema.parse(raw);\n throw new Error(`Unknown user-data event type: ${eventType}`);\n}\n\nexport const WsApiResponseSchema = z.object({\n id: z.string(),\n status: z.number(),\n result: z.unknown(),\n error: z\n .object({\n code: z.number(),\n msg: z.string(),\n })\n .optional(),\n});\nexport type WsApiResponse = z.infer<typeof WsApiResponseSchema>;\n","import { HttpClient } from '../client/HttpClient.js';\nimport { ListenKey, ListenKeySchema } from '../types/userdata.types.js';\n\nexport class SpotUserDataStream {\n constructor(private readonly http: HttpClient) {}\n\n async createListenKey(): Promise<ListenKey> {\n return ListenKeySchema.parse(await this.http.post('/userDataStream', undefined, 'apiKey'));\n }\n\n async keepAliveListenKey(): Promise<Record<string, unknown>> {\n return this.http.put('/userDataStream', undefined, 'apiKey');\n }\n\n async closeListenKey(): Promise<Record<string, unknown>> {\n return this.http.delete('/userDataStream', undefined, 'apiKey');\n }\n}\n","import { z } from 'zod';\n\nexport const BalanceSchema = z.object({\n accountAlias: z.string(),\n asset: z.string(),\n balance: z.string().transform(Number),\n crossWalletBalance: z.string().transform(Number),\n crossUnPnl: z.string().transform(Number),\n availableBalance: z.string().transform(Number),\n maxWithdrawAmount: z.string().transform(Number),\n marginAvailable: z.boolean(),\n updateTime: z.number(),\n});\nexport type Balance = z.infer<typeof BalanceSchema>;\nexport const BalancesResponseSchema = z.array(BalanceSchema);\n\nexport const PositionRiskSchema = z.object({\n symbol: z.string(),\n positionAmt: z.string().transform(Number),\n entryPrice: z.string().transform(Number),\n markPrice: z.string().transform(Number),\n unRealizedProfit: z.string().transform(Number),\n liquidationPrice: z.string().transform(Number),\n leverage: z.string().transform(Number),\n marginType: z.enum(['isolated', 'cross']),\n positionSide: z.string(),\n isolatedWallet: z.string().transform(Number).optional(),\n isolatedMargin: z.string().transform(Number).optional(),\n notional: z.string().transform(Number),\n updateTime: z.number().optional(),\n});\nexport type PositionRisk = z.infer<typeof PositionRiskSchema>;\nexport const PositionRiskResponseSchema = z.array(PositionRiskSchema);\n\nexport const AccountAssetSchema = z.object({\n asset: z.string(),\n walletBalance: z.string().transform(Number),\n unrealizedProfit: z.string().transform(Number),\n marginBalance: z.string().transform(Number),\n maintMargin: z.string().transform(Number),\n initialMargin: z.string().transform(Number),\n positionInitialMargin: z.string().transform(Number),\n openOrderInitialMargin: z.string().transform(Number),\n crossWalletBalance: z.string().transform(Number),\n crossUnPnl: z.string().transform(Number),\n availableBalance: z.string().transform(Number),\n maxWithdrawAmount: z.string().transform(Number),\n marginAvailable: z.boolean().optional(),\n updateTime: z.number(),\n});\nexport type AccountAsset = z.infer<typeof AccountAssetSchema>;\n\nexport const AccountPositionSchema = z.object({\n symbol: z.string(),\n positionAmt: z.string().transform(Number),\n initialMargin: z.string().transform(Number),\n maintMargin: z.string().transform(Number),\n unrealizedProfit: z.string().transform(Number),\n positionInitialMargin: z.string().transform(Number),\n openOrderInitialMargin: z.string().transform(Number),\n leverage: z.string().transform(Number),\n isolated: z.boolean(),\n entryPrice: z.string().transform(Number),\n positionSide: z.string(),\n positionNotional: z.string().transform(Number),\n isolatedWallet: z.string().transform(Number).optional(),\n isolatedMargin: z.string().transform(Number).optional(),\n notional: z.string().transform(Number).optional(),\n});\nexport type AccountPosition = z.infer<typeof AccountPositionSchema>;\n\nexport const AccountSchema = z.object({\n feeTier: z.number(),\n canTrade: z.boolean(),\n canDeposit: z.boolean(),\n canWithdraw: z.boolean(),\n updateTime: z.number(),\n totalInitialMargin: z.string().transform(Number),\n totalMaintMargin: z.string().transform(Number),\n totalWalletBalance: z.string().transform(Number),\n totalUnrealizedProfit: z.string().transform(Number),\n totalMarginBalance: z.string().transform(Number),\n totalPositionInitialMargin: z.string().transform(Number),\n totalOpenOrderInitialMargin: z.string().transform(Number),\n totalCrossWalletBalance: z.string().transform(Number),\n totalCrossUnPnl: z.string().transform(Number),\n availableBalance: z.string().transform(Number),\n maxWithdrawAmount: z.string().transform(Number),\n assets: z.array(AccountAssetSchema),\n positions: z.array(AccountPositionSchema),\n});\nexport type Account = z.infer<typeof AccountSchema>;\n\nexport const IncomeSchema = z.object({\n symbol: z.string().optional(),\n incomeType: z.string(),\n income: z.string().transform(Number),\n asset: z.string(),\n time: z.number(),\n info: z.string().optional(),\n tranId: z.number(),\n tradeId: z.string().optional(),\n});\nexport type Income = z.infer<typeof IncomeSchema>;\nexport const IncomeHistoryResponseSchema = z.array(IncomeSchema);\n\nexport const UserTradeSchema = z.object({\n buyer: z.boolean(),\n commission: z.string().transform(Number),\n commissionAsset: z.string(),\n id: z.number(),\n maker: z.boolean(),\n orderId: z.number(),\n price: z.string().transform(Number),\n qty: z.string().transform(Number),\n quoteQty: z.string().transform(Number),\n realizedPnl: z.string().transform(Number),\n side: z.string(),\n positionSide: z.string(),\n symbol: z.string(),\n time: z.number(),\n});\nexport type UserTrade = z.infer<typeof UserTradeSchema>;\nexport const UserTradesResponseSchema = z.array(UserTradeSchema);\n\nexport const CommissionRateSchema = z.object({\n symbol: z.string(),\n makerCommissionRate: z.string().transform(Number),\n takerCommissionRate: z.string().transform(Number),\n});\nexport type CommissionRate = z.infer<typeof CommissionRateSchema>;\n\nexport const LeverageBracketSchema = z.object({\n symbol: z.string().optional(),\n bracketNotional: z.string().transform(Number).optional(),\n bracket: z.number().optional(),\n maxLeverage: z.number().optional(),\n maintMarginRatio: z.string().transform(Number).optional(),\n cum: z.string().transform(Number).optional(),\n});\nexport type LeverageBracket = z.infer<typeof LeverageBracketSchema>;\nexport const LeverageBracketResponseSchema = z.array(\n z.object({\n symbol: z.string(),\n brackets: z.array(LeverageBracketSchema),\n }),\n);\n\nexport const PositionModeSchema = z.object({\n dualSidePosition: z.boolean(),\n});\nexport type PositionMode = z.infer<typeof PositionModeSchema>;\n\nexport const MultiAssetsMarginSchema = z.object({\n multiAssetsMargin: z.boolean(),\n});\nexport type MultiAssetsMargin = z.infer<typeof MultiAssetsMarginSchema>;\n\nexport const FeeBurnStatusSchema = z.object({\n feeBurn: z.boolean(),\n});\nexport type FeeBurnStatus = z.infer<typeof FeeBurnStatusSchema>;\n\nexport const PositionMarginHistoryEntrySchema = z.object({\n amount: z.string().transform(Number),\n asset: z.string(),\n symbol: z.string(),\n time: z.number(),\n type: z.number(),\n positionSide: z.string(),\n});\nexport type PositionMarginHistoryEntry = z.infer<typeof PositionMarginHistoryEntrySchema>;\nexport const PositionMarginHistorySchema = z.array(PositionMarginHistoryEntrySchema);\n\nexport const ApiTradingStatusSchema = z.object({\n isLocked: z.boolean(),\n plannedRecoverTime: z.number(),\n updateTime: z.number(),\n triggerCondition: z.record(z.string(), z.number()).optional(),\n indicators: z.record(z.string(), z.unknown()).optional(),\n});\nexport type ApiTradingStatus = z.infer<typeof ApiTradingStatusSchema>;\n\nexport const RateLimitOrderSchema = z.object({\n rateLimitType: z.string(),\n interval: z.string(),\n intervalNum: z.number(),\n limit: z.number(),\n count: z.number(),\n});\nexport type RateLimitOrder = z.infer<typeof RateLimitOrderSchema>;\nexport const RateLimitOrderResponseSchema = z.array(RateLimitOrderSchema);\n","import { HttpClient } from '../client/HttpClient.js';\nimport {\n Account,\n AccountSchema,\n ApiTradingStatus,\n ApiTradingStatusSchema,\n Balance,\n BalancesResponseSchema,\n CommissionRate,\n CommissionRateSchema,\n FeeBurnStatus,\n FeeBurnStatusSchema,\n Income,\n IncomeHistoryResponseSchema,\n LeverageBracket,\n LeverageBracketResponseSchema,\n MultiAssetsMargin,\n MultiAssetsMarginSchema,\n PositionMarginHistoryEntry,\n PositionMarginHistorySchema,\n PositionMode,\n PositionModeSchema,\n PositionRisk,\n PositionRiskResponseSchema,\n RateLimitOrder,\n RateLimitOrderResponseSchema,\n UserTrade,\n UserTradesResponseSchema,\n} from '../types/account.types.js';\n\nexport class FuturesAccount {\n constructor(private readonly http: HttpClient) {}\n\n async balance(): Promise<Balance[]> {\n return BalancesResponseSchema.parse(await this.http.get('/fapi/v2/balance', undefined, 'signed'));\n }\n\n async account(): Promise<Account> {\n return AccountSchema.parse(await this.http.get('/fapi/v2/account', undefined, 'signed'));\n }\n\n async positionRisk(symbol?: string): Promise<PositionRisk[]> {\n const params = symbol ? { symbol } : {};\n return PositionRiskResponseSchema.parse(await this.http.get('/fapi/v2/positionRisk', params, 'signed'));\n }\n\n async balanceV3(): Promise<Balance[]> {\n return BalancesResponseSchema.parse(await this.http.get('/fapi/v3/balance', undefined, 'signed'));\n }\n\n async accountV3(): Promise<Account> {\n return AccountSchema.parse(await this.http.get('/fapi/v3/account', undefined, 'signed'));\n }\n\n async positionRiskV3(symbol?: string): Promise<PositionRisk[]> {\n const params = symbol ? { symbol } : {};\n return PositionRiskResponseSchema.parse(await this.http.get('/fapi/v3/positionRisk', params, 'signed'));\n }\n\n async incomeHistory(options?: {\n symbol?: string;\n incomeType?: string;\n startTime?: number;\n endTime?: number;\n limit?: number;\n }): Promise<Income[]> {\n const params = {\n symbol: options?.symbol,\n incomeType: options?.incomeType,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit,\n };\n return IncomeHistoryResponseSchema.parse(await this.http.get('/fapi/v1/income', params, 'signed'));\n }\n\n async userTrades(options?: {\n symbol?: string;\n startTime?: number;\n endTime?: number;\n limit?: number;\n fromId?: number;\n }): Promise<UserTrade[]> {\n const params = {\n symbol: options?.symbol,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit,\n fromId: options?.fromId,\n };\n return UserTradesResponseSchema.parse(await this.http.get('/fapi/v1/userTrades', params, 'signed'));\n }\n\n async leverageBrackets(symbol?: string): Promise<{ symbol: string; brackets: LeverageBracket[] }[]> {\n const params = symbol ? { symbol } : {};\n return LeverageBracketResponseSchema.parse(await this.http.get('/fapi/v1/leverageBracket', params, 'signed'));\n }\n\n async commissionRate(symbol: string): Promise<CommissionRate> {\n return CommissionRateSchema.parse(await this.http.get('/fapi/v1/commissionRate', { symbol }, 'signed'));\n }\n\n async multiAssetsMargin(): Promise<MultiAssetsMargin> {\n return MultiAssetsMarginSchema.parse(await this.http.get('/fapi/v1/multiAssetsMargin', undefined, 'signed'));\n }\n\n async setMultiAssetsMargin(multiAssetsMargin: boolean): Promise<Record<string, unknown>> {\n return this.http.post('/fapi/v1/multiAssetsMargin', { multiAssetsMargin }, 'signed');\n }\n\n async feeBurnStatus(): Promise<FeeBurnStatus> {\n return FeeBurnStatusSchema.parse(await this.http.get('/fapi/v1/feeBurn', undefined, 'signed'));\n }\n\n async setFeeBurnStatus(feeBurn: boolean): Promise<Record<string, unknown>> {\n return this.http.post('/fapi/v1/feeBurn', { feeBurn }, 'signed');\n }\n\n async positionMode(): Promise<PositionMode> {\n return PositionModeSchema.parse(await this.http.get('/fapi/v1/positionSide/dual', undefined, 'signed'));\n }\n\n async setPositionMode(dualSidePosition: boolean): Promise<Record<string, unknown>> {\n return this.http.post('/fapi/v1/positionSide/dual', { dualSidePosition }, 'signed');\n }\n\n async apiTradingStatus(): Promise<ApiTradingStatus> {\n return ApiTradingStatusSchema.parse(await this.http.get('/fapi/v1/apiTradingStatus', undefined, 'signed'));\n }\n\n async positionMarginHistory(options?: {\n symbol: string;\n type?: number;\n startTime?: number;\n endTime?: number;\n limit?: number;\n }): Promise<PositionMarginHistoryEntry[]> {\n const params = {\n symbol: options?.symbol,\n type: options?.type,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit,\n };\n return PositionMarginHistorySchema.parse(await this.http.get('/fapi/v1/positionMargin/history', params, 'signed'));\n }\n\n async rateLimitOrder(): Promise<RateLimitOrder[]> {\n return RateLimitOrderResponseSchema.parse(await this.http.get('/fapi/v1/rateLimit/order', undefined, 'signed'));\n }\n\n async accountConfig(): Promise<Record<string, unknown>> {\n return this.http.get('/fapi/v1/accountConfig', undefined, 'signed');\n }\n\n async pmAccountInfo(asset: string): Promise<Record<string, unknown>> {\n return this.http.get('/fapi/v1/pmAccountInfo', { asset }, 'signed');\n }\n\n async requestIncomeDownload(options: { startTime: number; endTime: number }): Promise<Record<string, unknown>> {\n return this.http.get('/fapi/v1/income/asyn', options, 'signed');\n }\n\n async getIncomeDownloadStatus(downloadId: string): Promise<Record<string, unknown>> {\n return this.http.get('/fapi/v1/income/asyn/id', { downloadId }, 'signed');\n }\n\n async requestOrderDownload(options?: {\n symbol?: string;\n startTime?: number;\n endTime?: number;\n }): Promise<Record<string, unknown>> {\n const params = {\n symbol: options?.symbol,\n startTime: options?.startTime,\n endTime: options?.endTime,\n };\n return this.http.get('/fapi/v1/order/asyn', params, 'signed');\n }\n\n async getOrderDownloadStatus(downloadId: string): Promise<Record<string, unknown>> {\n return this.http.get('/fapi/v1/order/asyn/id', { downloadId }, 'signed');\n }\n\n async requestTradeDownload(options?: {\n symbol?: string;\n startTime?: number;\n endTime?: number;\n }): Promise<Record<string, unknown>> {\n const params = {\n symbol: options?.symbol,\n startTime: options?.startTime,\n endTime: options?.endTime,\n };\n return this.http.get('/fapi/v1/trade/asyn', params, 'signed');\n }\n\n async getTradeDownloadStatus(downloadId: string): Promise<Record<string, unknown>> {\n return this.http.get('/fapi/v1/trade/asyn/id', { downloadId }, 'signed');\n }\n}\n","import { z } from 'zod';\n\nexport const OrderSchema = z.object({\n orderId: z.number(),\n symbol: z.string(),\n status: z.string(),\n clientOrderId: z.string(),\n price: z.string().transform(Number),\n avgPrice: z.string().transform(Number),\n origQty: z.string().transform(Number),\n executedQty: z.string().transform(Number),\n cumQuote: z.string().transform(Number),\n type: z.string(),\n reduceOnly: z.boolean(),\n side: z.string(),\n positionSide: z.string(),\n stopPrice: z.string().transform(Number).optional(),\n closePosition: z.boolean().optional(),\n timeInForce: z.string().optional(),\n origType: z.string().optional(),\n time: z.number(),\n updateTime: z.number(),\n workingType: z.string().optional(),\n priceProtect: z.boolean().optional(),\n});\nexport type Order = z.infer<typeof OrderSchema>;\nexport const OrderResponseSchema = OrderSchema;\nexport const OrdersResponseSchema = z.array(OrderSchema);\n\nexport const CreateOrderParamsSchema = z.object({\n symbol: z.string(),\n side: z.enum(['BUY', 'SELL']),\n type: z.string(),\n quantity: z.union([z.string(), z.number()]).optional(),\n price: z.union([z.string(), z.number()]).optional(),\n timeInForce: z.enum(['GTC', 'IOC', 'FOK', 'GTX', 'GTD']).optional(),\n stopPrice: z.union([z.string(), z.number()]).optional(),\n reduceOnly: z.boolean().optional(),\n positionSide: z.enum(['BOTH', 'LONG', 'SHORT']).optional(),\n newClientOrderId: z.string().optional(),\n closePosition: z.boolean().optional(),\n newOrderRespType: z.enum(['ACK', 'RESULT']).optional(),\n priceProtect: z.boolean().optional(),\n workingType: z.enum(['MARK_PRICE', 'CONTRACT_PRICE']).optional(),\n callbackRate: z.union([z.string(), z.number()]).optional(),\n activationPrice: z.union([z.string(), z.number()]).optional(),\n selfTradePreventionMode: z.enum(['NONE', 'EXPIRE_TAKER', 'EXPIRE_MAKER', 'EXPIRE_BOTH']).optional(),\n goodTillDate: z.number().optional(),\n});\nexport type CreateOrderParams = z.infer<typeof CreateOrderParamsSchema>;\n\nexport const ModifyOrderParamsSchema = CreateOrderParamsSchema.extend({\n orderId: z.number().optional(),\n origClientOrderId: z.string().optional(),\n origType: z.string().optional(),\n});\nexport type ModifyOrderParams = z.infer<typeof ModifyOrderParamsSchema>;\n\nexport const AlgoOrderSchema = z.object({\n algoId: z.number(),\n symbol: z.string(),\n side: z.string(),\n positionSide: z.string(),\n totalQty: z.string().transform(Number).optional(),\n executedQty: z.string().transform(Number).optional(),\n executedAmt: z.string().transform(Number).optional(),\n avgPrice: z.string().transform(Number).optional(),\n clientAlgoId: z.string().optional(),\n bookTime: z.number().optional(),\n endTime: z.number().optional(),\n algoStatus: z.string().optional(),\n algoType: z.string().optional(),\n urgency: z.string().optional(),\n});\nexport type AlgoOrder = z.infer<typeof AlgoOrderSchema>;\nexport const AlgoOrderResponseSchema = AlgoOrderSchema;\nexport const AlgoOrdersResponseSchema = z.array(AlgoOrderSchema);\n\nexport const BatchOrdersItemSchema = z.object({\n orderId: z.number(),\n symbol: z.string(),\n status: z.string(),\n clientOrderId: z.string(),\n price: z.string().transform(Number),\n avgPrice: z.string().transform(Number),\n origQty: z.string().transform(Number),\n executedQty: z.string().transform(Number),\n cumQuote: z.string().transform(Number),\n type: z.string(),\n reduceOnly: z.boolean(),\n side: z.string(),\n positionSide: z.string(),\n time: z.number(),\n updateTime: z.number(),\n});\nexport type BatchOrdersItem = z.infer<typeof BatchOrdersItemSchema>;\nexport const BatchOrdersResponseSchema = z.array(BatchOrdersItemSchema);\n\nexport const OrderModifyHistoryEntrySchema = z.object({\n orderId: z.number(),\n symbol: z.string(),\n status: z.string(),\n clientOrderId: z.string(),\n price: z.string().transform(Number),\n avgPrice: z.string().transform(Number),\n origQty: z.string().transform(Number),\n executedQty: z.string().transform(Number),\n cumQuote: z.string().transform(Number),\n type: z.string(),\n reduceOnly: z.boolean(),\n side: z.string(),\n positionSide: z.string(),\n origType: z.string().optional(),\n stopPrice: z.string().transform(Number).optional(),\n updateTime: z.number(),\n});\nexport type OrderModifyHistoryEntry = z.infer<typeof OrderModifyHistoryEntrySchema>;\nexport const OrderModifyHistorySchema = z.array(OrderModifyHistoryEntrySchema);\n\nexport const LeverageChangeSchema = z.object({\n leverage: z.number(),\n maxNotionalValue: z.union([z.string(), z.number()]),\n symbol: z.string(),\n});\nexport type LeverageChange = z.infer<typeof LeverageChangeSchema>;\n\nexport const MarginTypeChangeSchema = z.object({\n code: z.number(),\n msg: z.string(),\n});\nexport type MarginTypeChange = z.infer<typeof MarginTypeChangeSchema>;\n\nexport const PositionMarginChangeSchema = z.object({\n amount: z.number(),\n code: z.number(),\n msg: z.string(),\n type: z.number(),\n});\nexport type PositionMarginChange = z.infer<typeof PositionMarginChangeSchema>;\n\nexport const CountdownCancelAllSchema = z.object({\n symbol: z.string(),\n countdownTime: z.number(),\n});\nexport type CountdownCancelAll = z.infer<typeof CountdownCancelAllSchema>;\n\nexport const NewOrderAckSchema = z.object({\n orderId: z.number(),\n symbol: z.string(),\n status: z.string(),\n clientOrderId: z.string(),\n price: z.string(),\n avgPrice: z.string(),\n origQty: z.string(),\n executedQty: z.string(),\n cumQuote: z.string(),\n type: z.string(),\n reduceOnly: z.boolean(),\n side: z.string(),\n positionSide: z.string(),\n timeInForce: z.string().optional(),\n time: z.number(),\n updateTime: z.number(),\n workingType: z.string().optional(),\n origType: z.string().optional(),\n closePosition: z.boolean().optional(),\n});\nexport type NewOrderAck = z.infer<typeof NewOrderAckSchema>;\n","import { HttpClient } from '../client/HttpClient.js';\nimport {\n AlgoOrder,\n AlgoOrderResponseSchema,\n AlgoOrdersResponseSchema,\n BatchOrdersItem,\n BatchOrdersResponseSchema,\n CountdownCancelAll,\n CountdownCancelAllSchema,\n CreateOrderParams,\n LeverageChange,\n LeverageChangeSchema,\n MarginTypeChange,\n MarginTypeChangeSchema,\n ModifyOrderParams,\n NewOrderAck,\n NewOrderAckSchema,\n Order,\n OrderModifyHistoryEntry,\n OrderModifyHistorySchema,\n OrderResponseSchema,\n OrdersResponseSchema,\n PositionMarginChange,\n PositionMarginChangeSchema,\n} from '../types/trading.types.js';\n\nexport class FuturesTrading {\n constructor(private readonly http: HttpClient) {}\n\n async setLeverage(symbol: string, leverage: number): Promise<LeverageChange> {\n return LeverageChangeSchema.parse(\n await this.http.post('/fapi/v1/leverage', { symbol, leverage }, 'signed'),\n );\n }\n\n async createOrder(params: CreateOrderParams): Promise<NewOrderAck | Order> {\n return NewOrderAckSchema.parse(await this.http.post('/fapi/v1/order', params, 'signed'));\n }\n\n async createTestOrder(params: CreateOrderParams): Promise<Record<string, unknown>> {\n return this.http.post('/fapi/v1/order/test', params, 'signed');\n }\n\n async getOrder(\n symbol: string,\n options?: { orderId?: number; origClientOrderId?: string },\n ): Promise<Order> {\n return OrderResponseSchema.parse(\n await this.http.get('/fapi/v1/order', { symbol, ...options }, 'signed'),\n );\n }\n\n async cancelOrder(\n symbol: string,\n options?: { orderId?: number; origClientOrderId?: string },\n ): Promise<Order> {\n return OrderResponseSchema.parse(\n await this.http.delete('/fapi/v1/order', { symbol, ...options }, 'signed'),\n );\n }\n\n async getCurrentOrder(\n symbol: string,\n options?: { orderId?: number; origClientOrderId?: string },\n ): Promise<Order> {\n return OrderResponseSchema.parse(\n await this.http.get('/fapi/v1/openOrder', { symbol, ...options }, 'signed'),\n );\n }\n\n async getOpenOrders(symbol?: string): Promise<Order[]> {\n const params = symbol ? { symbol } : {};\n return OrdersResponseSchema.parse(await this.http.get('/fapi/v1/openOrders', params, 'signed'));\n }\n\n async getAllOrders(\n symbol: string,\n options?: { orderId?: number; startTime?: number; endTime?: number; limit?: number },\n ): Promise<Order[]> {\n return OrdersResponseSchema.parse(\n await this.http.get('/fapi/v1/allOrders', { symbol, ...options }, 'signed'),\n );\n }\n\n async cancelAllOpenOrders(symbol: string): Promise<Record<string, unknown>> {\n return this.http.delete('/fapi/v1/allOpenOrders', { symbol }, 'signed');\n }\n\n async modifyOrder(params: ModifyOrderParams): Promise<Order> {\n return OrderResponseSchema.parse(await this.http.put('/fapi/v1/order', params, 'signed'));\n }\n\n async createAlgoOrder(params: Record<string, unknown>): Promise<AlgoOrder> {\n return AlgoOrderResponseSchema.parse(await this.http.post('/fapi/v1/algoOrder', params, 'signed'));\n }\n\n async cancelAlgoOrder(\n symbol: string,\n options?: { algoId?: number; clientAlgoId?: string },\n ): Promise<Record<string, unknown>> {\n return this.http.delete('/fapi/v1/algoOrder', { symbol, ...options }, 'signed');\n }\n\n async cancelAllOpenAlgoOrders(symbol: string): Promise<Record<string, unknown>> {\n return this.http.delete('/fapi/v1/algoOpenOrders', { symbol }, 'signed');\n }\n\n async getAlgoOrder(\n symbol: string,\n options?: { algoId?: number; clientAlgoId?: string },\n ): Promise<AlgoOrder> {\n return AlgoOrderResponseSchema.parse(\n await this.http.get('/fapi/v1/algoOrder', { symbol, ...options }, 'signed'),\n );\n }\n\n async getOpenAlgoOrders(symbol?: string): Promise<AlgoOrder[]> {\n const params = symbol ? { symbol } : {};\n return AlgoOrdersResponseSchema.parse(await this.http.get('/fapi/v1/openAlgoOrders', params, 'signed'));\n }\n\n async getAllAlgoOrders(\n symbol: string,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<AlgoOrder[]> {\n return AlgoOrdersResponseSchema.parse(\n await this.http.get('/fapi/v1/allAlgoOrders', { symbol, ...options }, 'signed'),\n );\n }\n\n async createBatchOrders(batchOrders: CreateOrderParams[]): Promise<BatchOrdersItem[]> {\n return BatchOrdersResponseSchema.parse(\n await this.http.post('/fapi/v1/batchOrders', { batchOrders: JSON.stringify(batchOrders) }, 'signed'),\n );\n }\n\n async modifyBatchOrders(batchOrders: ModifyOrderParams[]): Promise<BatchOrdersItem[]> {\n return BatchOrdersResponseSchema.parse(\n await this.http.put('/fapi/v1/batchOrders', { batchOrders: JSON.stringify(batchOrders) }, 'signed'),\n );\n }\n\n async cancelBatchOrders(\n symbol: string,\n options?: { orderIdList?: number[]; origClientOrderIdList?: string[] },\n ): Promise<BatchOrdersItem[]> {\n const params: Record<string, unknown> = { symbol };\n if (options?.orderIdList?.length) params.orderIdList = JSON.stringify(options.orderIdList);\n if (options?.origClientOrderIdList?.length) {\n params.origClientOrderIdList = JSON.stringify(options.origClientOrderIdList);\n }\n return BatchOrdersResponseSchema.parse(await this.http.delete('/fapi/v1/batchOrders', params, 'signed'));\n }\n\n async getOrderModifyHistory(\n symbol: string,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<OrderModifyHistoryEntry[]> {\n return OrderModifyHistorySchema.parse(\n await this.http.get('/fapi/v1/orderAmendment', { symbol, ...options }, 'signed'),\n );\n }\n\n async setMarginType(symbol: string, marginType: 'isolated' | 'cross'): Promise<MarginTypeChange> {\n return MarginTypeChangeSchema.parse(\n await this.http.post('/fapi/v1/marginType', { symbol, marginType }, 'signed'),\n );\n }\n\n async modifyPositionMargin(symbol: string, amount: number, type: number): Promise<PositionMarginChange> {\n return PositionMarginChangeSchema.parse(\n await this.http.post('/fapi/v1/positionMargin', { symbol, amount, type }, 'signed'),\n );\n }\n\n async setCountdownCancelAll(symbol: string, countdownTime: number): Promise<CountdownCancelAll> {\n return CountdownCancelAllSchema.parse(\n await this.http.post('/fapi/v1/countdownCancelAll', { symbol, countdownTime }, 'signed'),\n );\n }\n\n async convertExchangeInfo(options?: { fromAsset?: string; toAsset?: string }): Promise<unknown[]> {\n return this.http.get('/fapi/v1/convert/exchangeInfo', options);\n }\n\n async convertGetQuote(params: {\n fromAsset: string;\n toAsset: string;\n fromAmount?: number;\n toAmount?: number;\n validTime?: '10s' | '30s' | '1m' | '2m';\n }): Promise<Record<string, unknown>> {\n return this.http.post('/fapi/v1/convert/getQuote', params, 'signed');\n }\n\n async convertAcceptQuote(quoteId: string): Promise<Record<string, unknown>> {\n return this.http.post('/fapi/v1/convert/acceptQuote', { quoteId }, 'signed');\n }\n\n async convertOrderStatus(options: { orderId?: string; quoteId?: string }): Promise<Record<string, unknown>> {\n return this.http.get('/fapi/v1/convert/orderStatus', options, 'signed');\n }\n}\n","import type { ExchangeSymbol } from './market.types.js';\n\n/**\n * Symbol trading rules, flattened out of the loose `filters` array that\n * `/fapi/v1/exchangeInfo` returns. Callers need these to round prices and\n * quantities before sending an order — Binance rejects anything that does not\n * sit exactly on a tick/step boundary (-1111) or that falls under the minimum\n * notional (-4164).\n */\nexport interface SymbolRules {\n symbol: string;\n status: string;\n baseAsset: string;\n quoteAsset: string;\n /** Tick the price must sit on, e.g. 0.10 for BTCUSDT. */\n tickSize: number;\n tickDecimals: number;\n /** Step the quantity must sit on for limit orders, e.g. 0.001 for BTCUSDT. */\n stepSize: number;\n stepDecimals: number;\n minQty: number;\n maxQty: number;\n /** MARKET orders carry their own LOT_SIZE, usually with a lower max. */\n marketStepSize: number;\n marketStepDecimals: number;\n marketMinQty: number;\n marketMaxQty: number;\n /** MIN_NOTIONAL — on USD-M futures the field is `notional`, not `minNotional`. */\n minNotional: number;\n}\n\ninterface RawFilter {\n filterType?: unknown;\n [key: string]: unknown;\n}\n\nfunction filtersOf(symbol: ExchangeSymbol): RawFilter[] {\n const raw = (symbol as unknown as Record<string, unknown>).filters;\n return Array.isArray(raw) ? (raw as RawFilter[]) : [];\n}\n\nfunction filterOf(symbol: ExchangeSymbol, filterType: string): RawFilter | undefined {\n return filtersOf(symbol).find((f) => f.filterType === filterType);\n}\n\nfunction num(value: unknown, fallback: number): number {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : fallback;\n}\n\n/**\n * Decimal places implied by a step string, e.g. \"0.00100000\" -> 3, \"1\" -> 0.\n * Derived from the string rather than the number so that a step like 0.0000001\n * never picks up an exponent representation.\n */\nexport function stepDecimals(step: string | number): number {\n const text = typeof step === 'number' ? step.toFixed(12) : String(step).trim();\n const dot = text.indexOf('.');\n if (dot === -1) return 0;\n return text.slice(dot + 1).replace(/0+$/, '').length;\n}\n\n/** Format a value at a fixed precision, which is what should be sent to Binance. */\nexport function formatToDecimals(value: number, decimals: number): string {\n return value.toFixed(decimals);\n}\n\n/**\n * Round down onto a step boundary. Used for quantities, where rounding up would\n * silently take on more risk than the caller asked for. The epsilon absorbs\n * binary-float error so that e.g. 0.3 / 0.1 = 2.9999999999999996 still floors to 3.\n */\nexport function floorToStep(value: number, step: number, decimals = stepDecimals(step)): number {\n if (!(step > 0)) return value;\n const steps = Math.floor(value / step + 1e-9);\n return Number((steps * step).toFixed(decimals));\n}\n\n/** Round to the nearest step boundary. Used for prices, where direction is not a risk. */\nexport function roundToStep(value: number, step: number, decimals = stepDecimals(step)): number {\n if (!(step > 0)) return value;\n const steps = Math.round(value / step);\n return Number((steps * step).toFixed(decimals));\n}\n\n/** Flatten one `exchangeInfo.symbols[]` entry into typed trading rules. */\nexport function symbolRulesFrom(symbol: ExchangeSymbol): SymbolRules {\n const raw = symbol as unknown as Record<string, unknown>;\n const price = filterOf(symbol, 'PRICE_FILTER');\n const lot = filterOf(symbol, 'LOT_SIZE');\n const marketLot = filterOf(symbol, 'MARKET_LOT_SIZE');\n const notional = filterOf(symbol, 'MIN_NOTIONAL');\n\n const tickSizeRaw = price?.tickSize ?? 10 ** -num(raw.pricePrecision, 2);\n const stepSizeRaw = lot?.stepSize ?? 10 ** -num(raw.quantityPrecision, 3);\n const marketStepRaw = marketLot?.stepSize ?? stepSizeRaw;\n\n return {\n symbol: symbol.symbol,\n status: symbol.status,\n baseAsset: symbol.baseAsset,\n quoteAsset: symbol.quoteAsset,\n tickSize: num(tickSizeRaw, 0.01),\n tickDecimals: stepDecimals(tickSizeRaw as string | number),\n stepSize: num(stepSizeRaw, 0.001),\n stepDecimals: stepDecimals(stepSizeRaw as string | number),\n minQty: num(lot?.minQty, 0),\n maxQty: num(lot?.maxQty, Number.POSITIVE_INFINITY),\n marketStepSize: num(marketStepRaw, 0.001),\n marketStepDecimals: stepDecimals(marketStepRaw as string | number),\n marketMinQty: num(marketLot?.minQty, num(lot?.minQty, 0)),\n marketMaxQty: num(marketLot?.maxQty, num(lot?.maxQty, Number.POSITIVE_INFINITY)),\n minNotional: num(notional?.notional, 0),\n };\n}\n","import type { FuturesAccount } from './FuturesAccount.js';\nimport type { FuturesData } from './FuturesData.js';\nimport type { FuturesMarket } from './FuturesMarket.js';\nimport type { FuturesTrading } from './FuturesTrading.js';\nimport type { PositionRisk } from '../types/account.types.js';\nimport {\n floorToStep,\n formatToDecimals,\n roundToStep,\n symbolRulesFrom,\n type SymbolRules,\n} from '../types/filters.types.js';\n\nexport interface SizePositionParams {\n symbol: string;\n side: 'BUY' | 'SELL';\n stopPrice: number;\n entryPrice?: number;\n riskAmount?: number;\n riskPct?: number;\n leverage?: number;\n marketOrder?: boolean;\n}\n\nexport interface PositionSizing {\n ok: boolean;\n reasons: string[];\n symbol: string;\n side: 'BUY' | 'SELL';\n entryPrice: number;\n stopPrice: number;\n riskPerUnit: number;\n riskAmount: number;\n rawQuantity: number;\n quantity: number;\n /** Pass this to createOrder — a string avoids float round-tripping. */\n quantityStr: string;\n notional: number;\n minNotional: number;\n leverage: number;\n requiredMargin: number;\n availableBalance?: number;\n rules: SymbolRules;\n}\n\nexport interface ClosePositionParams {\n symbol: string;\n positionSide?: 'BOTH' | 'LONG' | 'SHORT';\n /** Fraction of the position to close, 0 < portion <= 1. Defaults to the whole position. */\n portion?: number;\n dryRun?: boolean;\n}\n\nexport interface BracketOrderParams {\n symbol: string;\n side: 'BUY' | 'SELL';\n quantity: number | string;\n entryPrice?: number;\n stopLossPrice: number;\n takeProfitPrice?: number;\n positionSide?: 'BOTH' | 'LONG' | 'SHORT';\n workingType?: 'MARK_PRICE' | 'CONTRACT_PRICE';\n}\n\nconst RULES_TTL_MS = 60_000;\n\n/**\n * Composite operations layered over the single-endpoint resources.\n *\n * Everything here fans out over `FuturesMarket` / `FuturesData` / `FuturesAccount` /\n * `FuturesTrading` directly. It deliberately does not call the LLM tool handlers,\n * which return formatted JSON strings — composing at this layer keeps typed values\n * typed and avoids a parse/stringify round-trip per step.\n */\nexport class FuturesOps {\n private rulesCache = new Map<string, { rules: SymbolRules; at: number }>();\n\n constructor(\n private readonly market: FuturesMarket,\n private readonly data: FuturesData,\n private readonly account: FuturesAccount,\n private readonly trading: FuturesTrading,\n ) {}\n\n /** Typed tick/step/notional rules for a symbol, cached briefly (exchangeInfo is a large payload). */\n async symbolRules(symbol: string, options?: { refresh?: boolean }): Promise<SymbolRules> {\n const key = symbol.toUpperCase();\n const cached = this.rulesCache.get(key);\n if (!options?.refresh && cached && Date.now() - cached.at < RULES_TTL_MS) return cached.rules;\n\n const details = await this.market.instrumentDetails(key);\n const rules = symbolRulesFrom(details);\n this.rulesCache.set(key, { rules, at: Date.now() });\n return rules;\n }\n\n /** Round a price to the symbol's tick and a quantity to its step, ready to send. */\n async quantize(\n symbol: string,\n values: { price?: number; quantity?: number; marketOrder?: boolean },\n ): Promise<{ price?: string; quantity?: string; rules: SymbolRules }> {\n const rules = await this.symbolRules(symbol);\n const step = values.marketOrder ? rules.marketStepSize : rules.stepSize;\n const stepDp = values.marketOrder ? rules.marketStepDecimals : rules.stepDecimals;\n return {\n price:\n values.price === undefined\n ? undefined\n : formatToDecimals(roundToStep(values.price, rules.tickSize, rules.tickDecimals), rules.tickDecimals),\n quantity:\n values.quantity === undefined\n ? undefined\n : formatToDecimals(floorToStep(values.quantity, step, stepDp), stepDp),\n rules,\n };\n }\n\n /**\n * Risk-based position sizing. Converts \"risk N quote units between entry and stop\"\n * into a quantity that satisfies the symbol's step size, lot bounds and min notional,\n * and reports every constraint it could not satisfy instead of silently adjusting risk.\n */\n async sizePosition(params: SizePositionParams): Promise<PositionSizing> {\n const symbol = params.symbol.toUpperCase();\n const reasons: string[] = [];\n\n if ((params.riskAmount === undefined) === (params.riskPct === undefined)) {\n throw new Error('Provide exactly one of riskAmount or riskPct');\n }\n\n const rules = await this.symbolRules(symbol);\n const entryPrice = params.entryPrice ?? (await this.data.premiumIndex(symbol)).markPrice;\n\n let availableBalance: number | undefined;\n let riskAmount = params.riskAmount ?? 0;\n if (params.riskPct !== undefined) {\n const balances = await this.account.balanceV3();\n availableBalance = balances.find((b) => b.asset === rules.quoteAsset)?.availableBalance ?? 0;\n riskAmount = availableBalance * (params.riskPct / 100);\n }\n\n const riskPerUnit = Math.abs(entryPrice - params.stopPrice);\n const stopOnCorrectSide =\n params.side === 'BUY' ? params.stopPrice < entryPrice : params.stopPrice > entryPrice;\n if (!stopOnCorrectSide) {\n reasons.push(\n `stopPrice ${params.stopPrice} is on the wrong side of entry ${entryPrice} for a ${params.side}`,\n );\n }\n if (riskPerUnit <= 0) reasons.push('stopPrice equals entryPrice, risk per unit is zero');\n\n const step = params.marketOrder ? rules.marketStepSize : rules.stepSize;\n const stepDp = params.marketOrder ? rules.marketStepDecimals : rules.stepDecimals;\n const minQty = params.marketOrder ? rules.marketMinQty : rules.minQty;\n const maxQty = params.marketOrder ? rules.marketMaxQty : rules.maxQty;\n\n const rawQuantity = riskPerUnit > 0 ? riskAmount / riskPerUnit : 0;\n let quantity = floorToStep(rawQuantity, step, stepDp);\n\n if (quantity > maxQty) {\n reasons.push(`quantity ${quantity} exceeds maxQty ${maxQty}, clamped`);\n quantity = floorToStep(maxQty, step, stepDp);\n }\n if (quantity < minQty) {\n reasons.push(`quantity ${quantity} is below minQty ${minQty} for this symbol`);\n }\n\n const notional = quantity * entryPrice;\n if (rules.minNotional > 0 && notional < rules.minNotional) {\n reasons.push(\n `notional ${notional.toFixed(2)} is below the ${rules.minNotional} minimum; ` +\n `raising risk or widening the stop is required (this tool will not increase risk for you)`,\n );\n }\n if (rules.status !== 'TRADING') reasons.push(`symbol status is ${rules.status}, not TRADING`);\n\n const leverage = params.leverage ?? 1;\n const requiredMargin = notional / leverage;\n if (availableBalance !== undefined && requiredMargin > availableBalance) {\n reasons.push(\n `required margin ${requiredMargin.toFixed(2)} exceeds available balance ${availableBalance.toFixed(2)}`,\n );\n }\n\n return {\n ok: reasons.length === 0 && quantity > 0,\n reasons,\n symbol,\n side: params.side,\n entryPrice,\n stopPrice: params.stopPrice,\n riskPerUnit,\n riskAmount,\n rawQuantity,\n quantity,\n quantityStr: formatToDecimals(quantity, stepDp),\n notional,\n minNotional: rules.minNotional,\n leverage,\n requiredMargin,\n availableBalance,\n rules,\n };\n }\n\n /**\n * Flatten an open position with a reduce-only market order.\n *\n * Picks the closing side from the sign of `positionAmt` and, critically, chooses\n * between `reduceOnly` and `positionSide`: Binance rejects `reduceOnly` in hedge\n * mode, and rejects a LONG/SHORT `positionSide` in one-way mode.\n */\n async closePosition(params: ClosePositionParams): Promise<{\n closed: boolean;\n reason?: string;\n position?: PositionRisk;\n order?: unknown;\n request?: Record<string, unknown>;\n }> {\n const symbol = params.symbol.toUpperCase();\n const portion = params.portion ?? 1;\n if (!(portion > 0 && portion <= 1)) throw new Error('portion must be within (0, 1]');\n\n const positions = await this.account.positionRiskV3(symbol);\n const open = positions.filter(\n (p) =>\n p.positionAmt !== 0 &&\n (params.positionSide === undefined || p.positionSide === params.positionSide),\n );\n\n if (open.length === 0) return { closed: false, reason: `no open position on ${symbol}` };\n if (open.length > 1) {\n return {\n closed: false,\n reason: `${open.length} positions open on ${symbol} (hedge mode); pass positionSide to pick one`,\n };\n }\n\n const position = open[0] as PositionRisk;\n const rules = await this.symbolRules(symbol);\n const quantity = floorToStep(\n Math.abs(position.positionAmt) * portion,\n rules.marketStepSize,\n rules.marketStepDecimals,\n );\n if (quantity <= 0) {\n return { closed: false, reason: 'closing quantity rounds to zero at this symbol step size', position };\n }\n\n const hedgeMode = position.positionSide !== 'BOTH';\n const request: Record<string, unknown> = {\n symbol,\n side: position.positionAmt > 0 ? 'SELL' : 'BUY',\n type: 'MARKET',\n quantity: formatToDecimals(quantity, rules.marketStepDecimals),\n ...(hedgeMode ? { positionSide: position.positionSide } : { reduceOnly: true }),\n };\n\n if (params.dryRun) return { closed: false, reason: 'dryRun', position, request };\n\n const order = await this.trading.createOrder(request as never);\n return { closed: true, position, order, request };\n }\n\n /**\n * One-call market picture: 24h stats, mark/index and funding, open interest and\n * positioning. Uses allSettled so a single unavailable feed degrades one field\n * instead of failing the whole snapshot.\n */\n async marketSnapshot(\n symbol: string,\n options?: { period?: string },\n ): Promise<Record<string, unknown>> {\n const s = symbol.toUpperCase();\n const period = options?.period ?? '1h';\n const [ticker, premium, openInterest, longShort] = await Promise.allSettled([\n this.market.ticker24hr(s),\n this.data.premiumIndex(s),\n this.data.openInterest(s),\n this.data.globalLongShortAccountRatio(s, period, 1),\n ]);\n\n const settled = <T>(r: PromiseSettledResult<T>): unknown =>\n r.status === 'fulfilled' ? r.value : { error: String((r as PromiseRejectedResult).reason) };\n\n return {\n symbol: s,\n asOf: Date.now(),\n ticker24hr: settled(ticker),\n markPrice: settled(premium),\n openInterest: settled(openInterest),\n longShortAccountRatio: settled(longShort),\n };\n }\n\n /** Balances, open positions and working orders in one call, with the noise filtered out. */\n async accountOverview(): Promise<Record<string, unknown>> {\n const [balances, positions, openOrders] = await Promise.allSettled([\n this.account.balanceV3(),\n this.account.positionRiskV3(),\n this.trading.getOpenOrders(),\n ]);\n\n const fundedBalances =\n balances.status === 'fulfilled' ? balances.value.filter((b) => b.balance !== 0) : [];\n const openPositions =\n positions.status === 'fulfilled' ? positions.value.filter((p) => p.positionAmt !== 0) : [];\n\n return {\n asOf: Date.now(),\n balances: balances.status === 'fulfilled' ? fundedBalances : { error: String(balances.reason) },\n positions: positions.status === 'fulfilled' ? openPositions : { error: String(positions.reason) },\n openOrders: openOrders.status === 'fulfilled' ? openOrders.value : { error: String(openOrders.reason) },\n totals:\n positions.status === 'fulfilled'\n ? {\n openPositionCount: openPositions.length,\n unrealizedPnl: openPositions.reduce((sum, p) => sum + p.unRealizedProfit, 0),\n grossNotional: openPositions.reduce((sum, p) => sum + Math.abs(p.notional), 0),\n }\n : undefined,\n };\n }\n\n /**\n * Entry order plus its protective stop-loss and optional take-profit, with every\n * price quantized to the symbol tick.\n *\n * The protective legs are placed after the entry is accepted. If a protective leg\n * fails, the failure is reported per-leg rather than unwound: the entry may already\n * have filled, so cancelling it is not a safe automatic recovery.\n */\n async placeBracketOrder(params: BracketOrderParams): Promise<Record<string, unknown>> {\n const symbol = params.symbol.toUpperCase();\n const rules = await this.symbolRules(symbol);\n const tick = (p: number): string =>\n formatToDecimals(roundToStep(p, rules.tickSize, rules.tickDecimals), rules.tickDecimals);\n\n const quantity = formatToDecimals(\n floorToStep(Number(params.quantity), rules.stepSize, rules.stepDecimals),\n rules.stepDecimals,\n );\n if (Number(quantity) <= 0) throw new Error('quantity rounds to zero at this symbol step size');\n\n const exitSide = params.side === 'BUY' ? 'SELL' : 'BUY';\n const hedgeMode = params.positionSide !== undefined && params.positionSide !== 'BOTH';\n const sideFields = hedgeMode ? { positionSide: params.positionSide } : { reduceOnly: true };\n const workingType = params.workingType ?? 'MARK_PRICE';\n\n const entry = await this.trading.createOrder({\n symbol,\n side: params.side,\n type: params.entryPrice === undefined ? 'MARKET' : 'LIMIT',\n quantity,\n ...(params.entryPrice === undefined\n ? {}\n : { price: tick(params.entryPrice), timeInForce: 'GTC' as const }),\n ...(hedgeMode ? { positionSide: params.positionSide } : {}),\n });\n\n const protective = await Promise.allSettled([\n this.trading.createOrder({\n symbol,\n side: exitSide,\n type: 'STOP_MARKET',\n quantity,\n stopPrice: tick(params.stopLossPrice),\n workingType,\n ...sideFields,\n } as never),\n ...(params.takeProfitPrice === undefined\n ? []\n : [\n this.trading.createOrder({\n symbol,\n side: exitSide,\n type: 'TAKE_PROFIT_MARKET',\n quantity,\n stopPrice: tick(params.takeProfitPrice),\n workingType,\n ...sideFields,\n } as never),\n ]),\n ]);\n\n const [stopLoss, takeProfit] = protective;\n const leg = (r?: PromiseSettledResult<unknown>): unknown =>\n r === undefined\n ? undefined\n : r.status === 'fulfilled'\n ? r.value\n : { error: String((r as PromiseRejectedResult).reason) };\n\n const failures = protective.filter((r) => r.status === 'rejected').length;\n return {\n symbol,\n quantity,\n entry,\n stopLoss: leg(stopLoss),\n takeProfit: leg(takeProfit),\n protectionComplete: failures === 0,\n ...(failures > 0\n ? {\n warning:\n 'Entry was submitted but at least one protective order failed. The position may be ' +\n 'unprotected — review and place the missing leg manually.',\n }\n : {}),\n };\n }\n}\n","import { HttpClient } from '../client/HttpClient.js';\nimport { ListenKey, ListenKeySchema } from '../types/userdata.types.js';\n\nexport class UserDataStream {\n constructor(private readonly http: HttpClient) {}\n\n async createListenKey(): Promise<ListenKey> {\n return ListenKeySchema.parse(await this.http.post('/fapi/v1/listenKey', undefined, 'apiKey'));\n }\n\n async keepAliveListenKey(): Promise<Record<string, unknown>> {\n return this.http.put('/fapi/v1/listenKey', undefined, 'apiKey');\n }\n\n async closeListenKey(): Promise<Record<string, unknown>> {\n return this.http.delete('/fapi/v1/listenKey', undefined, 'apiKey');\n }\n}\n","import { z } from 'zod';\n\nexport const CoinMBalanceSchema = z.object({\n accountAlias: z.string(),\n asset: z.string(),\n balance: z.string().transform(Number),\n withdrawAvailable: z.string().transform(Number),\n crossWalletBalance: z.string().transform(Number),\n crossUnPnl: z.string().transform(Number),\n availableBalance: z.string().transform(Number),\n updateTime: z.number(),\n});\nexport type CoinMBalance = z.infer<typeof CoinMBalanceSchema>;\nexport const CoinMBalanceResponseSchema = z.array(CoinMBalanceSchema);\n\nexport const CoinMPositionRiskSchema = z\n .object({\n symbol: z.string(),\n pair: z.string().optional(),\n positionAmt: z.string().transform(Number),\n entryPrice: z.string().transform(Number),\n markPrice: z.string().transform(Number),\n unRealizedProfit: z.string().transform(Number),\n liquidationPrice: z.string().transform(Number),\n leverage: z.string().transform(Number),\n maxQty: z.string().transform(Number).optional(),\n marginType: z.enum(['isolated', 'cross']),\n isolatedMargin: z.string().transform(Number).optional(),\n isAutoAddMargin: z.union([z.string(), z.boolean()]).optional(),\n positionSide: z.string(),\n notionalValue: z.string().transform(Number).optional(),\n breakEvenPrice: z.string().transform(Number).optional(),\n updateTime: z.number().optional(),\n })\n .loose();\nexport type CoinMPositionRisk = z.infer<typeof CoinMPositionRiskSchema>;\nexport const CoinMPositionRiskResponseSchema = z.array(CoinMPositionRiskSchema);\n\nexport const CoinMAccountAssetSchema = z\n .object({\n asset: z.string(),\n walletBalance: z.string().transform(Number),\n unrealizedProfit: z.string().transform(Number),\n marginBalance: z.string().transform(Number),\n maintMargin: z.string().transform(Number),\n initialMargin: z.string().transform(Number),\n positionInitialMargin: z.string().transform(Number),\n openOrderInitialMargin: z.string().transform(Number),\n maxWithdrawAmount: z.string().transform(Number),\n crossWalletBalance: z.string().transform(Number),\n crossUnPnl: z.string().transform(Number),\n availableBalance: z.string().transform(Number),\n updateTime: z.number(),\n })\n .loose();\nexport type CoinMAccountAsset = z.infer<typeof CoinMAccountAssetSchema>;\n\nexport const CoinMAccountPositionSchema = z\n .object({\n symbol: z.string(),\n positionAmt: z.string().transform(Number),\n initialMargin: z.string().transform(Number),\n maintMargin: z.string().transform(Number),\n unrealizedProfit: z.string().transform(Number),\n positionInitialMargin: z.string().transform(Number),\n openOrderInitialMargin: z.string().transform(Number),\n leverage: z.string().transform(Number),\n isolated: z.boolean(),\n positionSide: z.string(),\n entryPrice: z.string().transform(Number),\n maxQty: z.string().transform(Number).optional(),\n updateTime: z.number().optional(),\n })\n .loose();\nexport type CoinMAccountPosition = z.infer<typeof CoinMAccountPositionSchema>;\n\nexport const CoinMAccountSchema = z\n .object({\n canDeposit: z.boolean(),\n canTrade: z.boolean(),\n canWithdraw: z.boolean(),\n feeTier: z.number(),\n updateTime: z.number(),\n assets: z.array(CoinMAccountAssetSchema),\n positions: z.array(CoinMAccountPositionSchema),\n })\n .loose();\nexport type CoinMAccountInfo = z.infer<typeof CoinMAccountSchema>;\n\nexport const CoinMOrderSchema = z\n .object({\n orderId: z.number(),\n symbol: z.string(),\n pair: z.string().optional(),\n status: z.string(),\n clientOrderId: z.string(),\n price: z.string().transform(Number),\n avgPrice: z.string().transform(Number),\n origQty: z.string().transform(Number),\n executedQty: z.string().transform(Number),\n cumBase: z.string().transform(Number).optional(),\n type: z.string(),\n reduceOnly: z.boolean(),\n closePosition: z.boolean().optional(),\n side: z.string(),\n positionSide: z.string(),\n stopPrice: z.string().transform(Number).optional(),\n workingType: z.string().optional(),\n priceProtect: z.boolean().optional(),\n origType: z.string().optional(),\n timeInForce: z.string().optional(),\n activatePrice: z.string().transform(Number).optional(),\n priceRate: z.string().transform(Number).optional(),\n time: z.number(),\n updateTime: z.number(),\n })\n .loose();\nexport type CoinMOrder = z.infer<typeof CoinMOrderSchema>;\nexport const CoinMOrderResponseSchema = CoinMOrderSchema;\nexport const CoinMOrdersResponseSchema = z.array(CoinMOrderSchema);\n\nexport const CoinMCreateOrderParamsSchema = z.object({\n symbol: z.string(),\n side: z.enum(['BUY', 'SELL']),\n positionSide: z.enum(['BOTH', 'LONG', 'SHORT']).optional(),\n type: z.string(),\n timeInForce: z.enum(['GTC', 'IOC', 'FOK', 'GTX']).optional(),\n quantity: z.union([z.string(), z.number()]).optional(),\n reduceOnly: z.boolean().optional(),\n price: z.union([z.string(), z.number()]).optional(),\n newClientOrderId: z.string().optional(),\n stopPrice: z.union([z.string(), z.number()]).optional(),\n closePosition: z.boolean().optional(),\n activationPrice: z.union([z.string(), z.number()]).optional(),\n callbackRate: z.union([z.string(), z.number()]).optional(),\n workingType: z.enum(['MARK_PRICE', 'CONTRACT_PRICE']).optional(),\n priceProtect: z.boolean().optional(),\n newOrderRespType: z.enum(['ACK', 'RESULT']).optional(),\n});\nexport type CoinMCreateOrderParams = z.infer<typeof CoinMCreateOrderParamsSchema>;\n\nexport const CoinMLeverageChangeSchema = z.object({\n leverage: z.number(),\n maxQty: z.string().transform(Number),\n symbol: z.string(),\n});\nexport type CoinMLeverageChange = z.infer<typeof CoinMLeverageChangeSchema>;\n\nexport const CoinMMarginTypeChangeSchema = z.object({ code: z.number(), msg: z.string() });\nexport type CoinMMarginTypeChange = z.infer<typeof CoinMMarginTypeChangeSchema>;\n\nexport const CoinMPositionMarginChangeSchema = z.object({\n amount: z.number(),\n code: z.number(),\n msg: z.string(),\n type: z.number(),\n});\nexport type CoinMPositionMarginChange = z.infer<typeof CoinMPositionMarginChangeSchema>;\n\nexport const CoinMIncomeSchema = z\n .object({\n symbol: z.string().optional(),\n incomeType: z.string(),\n income: z.string().transform(Number),\n asset: z.string(),\n info: z.string().optional(),\n time: z.number(),\n tranId: z.number(),\n tradeId: z.string().optional(),\n })\n .loose();\nexport type CoinMIncome = z.infer<typeof CoinMIncomeSchema>;\nexport const CoinMIncomeHistoryResponseSchema = z.array(CoinMIncomeSchema);\n\nexport const CoinMUserTradeSchema = z\n .object({\n symbol: z.string(),\n id: z.number(),\n orderId: z.number(),\n pair: z.string().optional(),\n side: z.string(),\n price: z.string().transform(Number),\n qty: z.string().transform(Number),\n realizedPnl: z.string().transform(Number),\n marginAsset: z.string().optional(),\n baseQty: z.string().transform(Number).optional(),\n commission: z.string().transform(Number),\n commissionAsset: z.string(),\n time: z.number(),\n positionSide: z.string(),\n buyer: z.boolean(),\n maker: z.boolean(),\n })\n .loose();\nexport type CoinMUserTrade = z.infer<typeof CoinMUserTradeSchema>;\nexport const CoinMUserTradesResponseSchema = z.array(CoinMUserTradeSchema);\n\nexport const CoinMOpenInterestHistEntrySchema = z.object({\n pair: z.string(),\n contractType: z.string(),\n sumOpenInterest: z.string().transform(Number),\n sumOpenInterestValue: z.string().transform(Number),\n timestamp: z.number(),\n});\nexport type CoinMOpenInterestHistEntry = z.infer<typeof CoinMOpenInterestHistEntrySchema>;\nexport const CoinMOpenInterestHistSchema = z.array(CoinMOpenInterestHistEntrySchema);\n\nexport const CoinMPositionModeSchema = z.object({ dualSidePosition: z.boolean() });\nexport type CoinMPositionMode = z.infer<typeof CoinMPositionModeSchema>;\n\nexport const CoinMLeverageBracketSchema = z.object({\n bracket: z.number(),\n initialLeverage: z.number(),\n qtyCap: z.number(),\n qtyFloor: z.number(),\n maintMarginRatio: z.number(),\n cum: z.number().optional(),\n});\nexport type CoinMLeverageBracket = z.infer<typeof CoinMLeverageBracketSchema>;\nexport const CoinMLeverageBracketResponseSchema = z.array(\n z.object({\n symbol: z.string().optional(),\n pair: z.string().optional(),\n brackets: z.array(CoinMLeverageBracketSchema),\n }),\n);\n\nexport const CoinMCommissionRateSchema = z.object({\n symbol: z.string(),\n makerCommissionRate: z.string().transform(Number),\n takerCommissionRate: z.string().transform(Number),\n});\nexport type CoinMCommissionRate = z.infer<typeof CoinMCommissionRateSchema>;\n","import { HttpClient } from '../client/HttpClient.js';\nimport { MarketDataBase } from './MarketDataBase.js';\nimport { FundingRateHistorySchema, FundingRate, OpenInterestSchema, OpenInterest, PremiumIndexSchema, PremiumIndex } from '../types/futures.types.js';\nimport { Kline, KlineInterval, KlinesResponseSchema } from '../types/market.types.js';\nimport { CoinMOpenInterestHistEntry, CoinMOpenInterestHistSchema } from '../types/coinm.types.js';\n\nexport class CoinMMarket extends MarketDataBase {\n constructor(http?: HttpClient) {\n super(http ?? new HttpClient({ baseURL: 'https://dapi.binance.com/dapi/v1' }));\n }\n\n async continuousKlines(\n pair: string,\n contractType: 'perpetual' | 'current_quarter' | 'next_quarter',\n interval: KlineInterval,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<Kline[]> {\n const data = await this.http.get('/continuousKlines', {\n pair,\n contractType,\n interval,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit ?? 500,\n });\n return KlinesResponseSchema.parse(data);\n }\n\n async indexPriceKlines(\n pair: string,\n interval: KlineInterval,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<Kline[]> {\n const data = await this.http.get('/indexPriceKlines', {\n pair,\n interval,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit ?? 500,\n });\n return KlinesResponseSchema.parse(data);\n }\n\n async markPriceKlines(\n symbol: string,\n interval: KlineInterval,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<Kline[]> {\n const data = await this.http.get('/markPriceKlines', {\n symbol,\n interval,\n startTime: options?.startTime,\n endTime: options?.endTime,\n limit: options?.limit ?? 500,\n });\n return KlinesResponseSchema.parse(data);\n }\n\n async premiumIndex(options?: { symbol?: string; pair?: string }): Promise<PremiumIndex[] | PremiumIndex> {\n return PremiumIndexSchema.or(PremiumIndexSchema.array()).parse(\n await this.http.get('/premiumIndex', options),\n );\n }\n\n async fundingRateHistory(\n symbol: string,\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<FundingRate[]> {\n return FundingRateHistorySchema.parse(await this.http.get('/fundingRate', { symbol, ...options }));\n }\n\n async openInterest(symbol: string): Promise<OpenInterest> {\n return OpenInterestSchema.parse(await this.http.get('/openInterest', { symbol }));\n }\n\n async openInterestHist(\n pair: string,\n contractType: 'ALL' | 'CURRENT_QUARTER' | 'NEXT_QUARTER' | 'PERPETUAL',\n period: '5m' | '15m' | '30m' | '1h' | '2h' | '4h' | '6h' | '12h' | '1d',\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<CoinMOpenInterestHistEntry[]> {\n return CoinMOpenInterestHistSchema.parse(\n await this.http.get('/openInterestHist', { pair, contractType, period, ...options }),\n );\n }\n}\n","import { HttpClient } from '../client/HttpClient.js';\nimport {\n CoinMAccountInfo,\n CoinMAccountSchema,\n CoinMBalance,\n CoinMBalanceResponseSchema,\n CoinMCommissionRate,\n CoinMCommissionRateSchema,\n CoinMIncome,\n CoinMIncomeHistoryResponseSchema,\n CoinMLeverageBracket,\n CoinMLeverageBracketResponseSchema,\n CoinMPositionMode,\n CoinMPositionModeSchema,\n CoinMPositionRisk,\n CoinMPositionRiskResponseSchema,\n CoinMUserTrade,\n CoinMUserTradesResponseSchema,\n} from '../types/coinm.types.js';\n\nexport class CoinMAccount {\n constructor(private readonly http: HttpClient) {}\n\n async balance(): Promise<CoinMBalance[]> {\n return CoinMBalanceResponseSchema.parse(await this.http.get('/dapi/v1/balance', undefined, 'signed'));\n }\n\n async account(): Promise<CoinMAccountInfo> {\n return CoinMAccountSchema.parse(await this.http.get('/dapi/v1/account', undefined, 'signed'));\n }\n\n async positionRisk(options?: { symbol?: string; pair?: string }): Promise<CoinMPositionRisk[]> {\n return CoinMPositionRiskResponseSchema.parse(\n await this.http.get('/dapi/v1/positionRisk', options, 'signed'),\n );\n }\n\n async incomeHistory(options?: {\n symbol?: string;\n incomeType?: string;\n startTime?: number;\n endTime?: number;\n limit?: number;\n }): Promise<CoinMIncome[]> {\n return CoinMIncomeHistoryResponseSchema.parse(await this.http.get('/dapi/v1/income', options, 'signed'));\n }\n\n async userTrades(options?: {\n symbol?: string;\n pair?: string;\n startTime?: number;\n endTime?: number;\n limit?: number;\n fromId?: number;\n }): Promise<CoinMUserTrade[]> {\n return CoinMUserTradesResponseSchema.parse(\n await this.http.get('/dapi/v1/userTrades', options, 'signed'),\n );\n }\n\n async leverageBrackets(symbol?: string): Promise<{ symbol?: string; pair?: string; brackets: CoinMLeverageBracket[] }[]> {\n const params = symbol ? { symbol } : undefined;\n return CoinMLeverageBracketResponseSchema.parse(\n await this.http.get('/dapi/v1/leverageBracket', params, 'signed'),\n );\n }\n\n async commissionRate(symbol: string): Promise<CoinMCommissionRate> {\n return CoinMCommissionRateSchema.parse(\n await this.http.get('/dapi/v1/commissionRate', { symbol }, 'signed'),\n );\n }\n\n async positionMode(): Promise<CoinMPositionMode> {\n return CoinMPositionModeSchema.parse(\n await this.http.get('/dapi/v1/positionSide/dual', undefined, 'signed'),\n );\n }\n\n async setPositionMode(dualSidePosition: boolean): Promise<Record<string, unknown>> {\n return this.http.post('/dapi/v1/positionSide/dual', { dualSidePosition }, 'signed');\n }\n}\n","import { HttpClient } from '../client/HttpClient.js';\nimport {\n CoinMCreateOrderParams,\n CoinMLeverageChange,\n CoinMLeverageChangeSchema,\n CoinMMarginTypeChange,\n CoinMMarginTypeChangeSchema,\n CoinMOrder,\n CoinMOrderResponseSchema,\n CoinMOrdersResponseSchema,\n CoinMPositionMarginChange,\n CoinMPositionMarginChangeSchema,\n} from '../types/coinm.types.js';\n\nexport class CoinMTrading {\n constructor(private readonly http: HttpClient) {}\n\n async setLeverage(symbol: string, leverage: number): Promise<CoinMLeverageChange> {\n return CoinMLeverageChangeSchema.parse(\n await this.http.post('/dapi/v1/leverage', { symbol, leverage }, 'signed'),\n );\n }\n\n async setMarginType(symbol: string, marginType: 'ISOLATED' | 'CROSSED'): Promise<CoinMMarginTypeChange> {\n return CoinMMarginTypeChangeSchema.parse(\n await this.http.post('/dapi/v1/marginType', { symbol, marginType }, 'signed'),\n );\n }\n\n async createOrder(params: CoinMCreateOrderParams): Promise<CoinMOrder> {\n return CoinMOrderResponseSchema.parse(await this.http.post('/dapi/v1/order', params, 'signed'));\n }\n\n async createTestOrder(params: CoinMCreateOrderParams): Promise<Record<string, unknown>> {\n return this.http.post('/dapi/v1/order/test', params, 'signed');\n }\n\n async getOrder(symbol: string, options?: { orderId?: number; origClientOrderId?: string }): Promise<CoinMOrder> {\n return CoinMOrderResponseSchema.parse(\n await this.http.get('/dapi/v1/order', { symbol, ...options }, 'signed'),\n );\n }\n\n async cancelOrder(symbol: string, options?: { orderId?: number; origClientOrderId?: string }): Promise<CoinMOrder> {\n return CoinMOrderResponseSchema.parse(\n await this.http.delete('/dapi/v1/order', { symbol, ...options }, 'signed'),\n );\n }\n\n async cancelAllOpenOrders(symbol: string): Promise<Record<string, unknown>> {\n return this.http.delete('/dapi/v1/allOpenOrders', { symbol }, 'signed');\n }\n\n async getOpenOrders(symbol?: string): Promise<CoinMOrder[]> {\n const params = symbol ? { symbol } : undefined;\n return CoinMOrdersResponseSchema.parse(await this.http.get('/dapi/v1/openOrders', params, 'signed'));\n }\n\n async getAllOrders(\n symbol: string,\n options?: { orderId?: number; startTime?: number; endTime?: number; limit?: number },\n ): Promise<CoinMOrder[]> {\n return CoinMOrdersResponseSchema.parse(\n await this.http.get('/dapi/v1/allOrders', { symbol, ...options }, 'signed'),\n );\n }\n\n async modifyPositionMargin(symbol: string, amount: number, type: number): Promise<CoinMPositionMarginChange> {\n return CoinMPositionMarginChangeSchema.parse(\n await this.http.post('/dapi/v1/positionMargin', { symbol, amount, type }, 'signed'),\n );\n }\n}\n","import { HttpClient } from '../client/HttpClient.js';\nimport { ListenKey, ListenKeySchema } from '../types/userdata.types.js';\n\nexport class CoinMUserDataStream {\n constructor(private readonly http: HttpClient) {}\n\n async createListenKey(): Promise<ListenKey> {\n return ListenKeySchema.parse(await this.http.post('/dapi/v1/listenKey', undefined, 'apiKey'));\n }\n\n async keepAliveListenKey(): Promise<Record<string, unknown>> {\n return this.http.put('/dapi/v1/listenKey', undefined, 'apiKey');\n }\n\n async closeListenKey(): Promise<Record<string, unknown>> {\n return this.http.delete('/dapi/v1/listenKey', undefined, 'apiKey');\n }\n}\n","import { z } from 'zod';\n\nexport const MarginAssetBalanceSchema = z.object({\n asset: z.string(),\n borrowed: z.string().transform(Number),\n free: z.string().transform(Number),\n interest: z.string().transform(Number),\n locked: z.string().transform(Number),\n netAsset: z.string().transform(Number),\n});\nexport type MarginAssetBalance = z.infer<typeof MarginAssetBalanceSchema>;\n\nexport const CrossMarginAccountSchema = z\n .object({\n borrowEnabled: z.boolean(),\n marginLevel: z.string().transform(Number),\n totalAssetOfBtc: z.string().transform(Number),\n totalLiabilityOfBtc: z.string().transform(Number),\n totalNetAssetOfBtc: z.string().transform(Number),\n tradeEnabled: z.boolean(),\n transferEnabled: z.boolean(),\n accountType: z.string().optional(),\n userAssets: z.array(MarginAssetBalanceSchema),\n })\n .loose();\nexport type CrossMarginAccount = z.infer<typeof CrossMarginAccountSchema>;\n\nexport const IsolatedMarginAssetSchema = z\n .object({\n asset: z.string(),\n borrowEnabled: z.boolean(),\n borrowed: z.string().transform(Number),\n free: z.string().transform(Number),\n interest: z.string().transform(Number),\n locked: z.string().transform(Number),\n netAsset: z.string().transform(Number),\n netAssetOfBtc: z.string().transform(Number),\n repayEnabled: z.boolean(),\n totalAsset: z.string().transform(Number),\n })\n .loose();\nexport type IsolatedMarginAsset = z.infer<typeof IsolatedMarginAssetSchema>;\n\nexport const IsolatedMarginSymbolSchema = z\n .object({\n baseAsset: IsolatedMarginAssetSchema,\n quoteAsset: IsolatedMarginAssetSchema,\n symbol: z.string(),\n isolatedCreated: z.boolean().optional(),\n enabled: z.boolean(),\n marginLevel: z.string().transform(Number),\n marginLevelStatus: z.string().optional(),\n marginRatio: z.string().transform(Number).optional(),\n indexPrice: z.string().transform(Number).optional(),\n liquidatePrice: z.string().transform(Number).optional(),\n liquidateRate: z.string().transform(Number).optional(),\n tradeEnabled: z.boolean(),\n })\n .loose();\nexport type IsolatedMarginSymbol = z.infer<typeof IsolatedMarginSymbolSchema>;\n\nexport const IsolatedMarginAccountSchema = z.object({\n assets: z.array(IsolatedMarginSymbolSchema),\n totalAssetOfBtc: z.string().transform(Number).optional(),\n totalLiabilityOfBtc: z.string().transform(Number).optional(),\n totalNetAssetOfBtc: z.string().transform(Number).optional(),\n});\nexport type IsolatedMarginAccount = z.infer<typeof IsolatedMarginAccountSchema>;\n\nexport const MaxBorrowableSchema = z.object({\n amount: z.string().transform(Number),\n borrowLimit: z.string().transform(Number),\n});\nexport type MaxBorrowable = z.infer<typeof MaxBorrowableSchema>;\n\nexport const MaxTransferableSchema = z.object({\n amount: z.string().transform(Number),\n fullAmount: z.string().transform(Number).optional(),\n});\nexport type MaxTransferable = z.infer<typeof MaxTransferableSchema>;\n\nexport const BorrowRepayParamsSchema = z.object({\n asset: z.string(),\n isIsolated: z.enum(['TRUE', 'FALSE']).optional(),\n symbol: z.string().optional(),\n amount: z.union([z.string(), z.number()]),\n type: z.enum(['BORROW', 'REPAY']),\n});\nexport type BorrowRepayParams = z.infer<typeof BorrowRepayParamsSchema>;\n\nexport const BorrowRepayResultSchema = z.object({ tranId: z.number() });\nexport type BorrowRepayResult = z.infer<typeof BorrowRepayResultSchema>;\n\nexport const BorrowRepayRecordEntrySchema = z\n .object({\n isolatedSymbol: z.string().optional(),\n txId: z.number(),\n asset: z.string(),\n principal: z.string().transform(Number),\n timestamp: z.number(),\n status: z.string(),\n })\n .loose();\nexport type BorrowRepayRecordEntry = z.infer<typeof BorrowRepayRecordEntrySchema>;\n\nexport const BorrowRepayRecordResponseSchema = z.object({\n rows: z.array(BorrowRepayRecordEntrySchema),\n total: z.number(),\n});\nexport type BorrowRepayRecordResponse = z.infer<typeof BorrowRepayRecordResponseSchema>;\n\nexport const MarginTransferResultSchema = z.object({ tranId: z.number() });\nexport type MarginTransferResult = z.infer<typeof MarginTransferResultSchema>;\n\nexport const IsolatedTransferParamsSchema = z.object({\n asset: z.string(),\n symbol: z.string(),\n transFrom: z.enum(['SPOT', 'ISOLATED_MARGIN']),\n transTo: z.enum(['SPOT', 'ISOLATED_MARGIN']),\n amount: z.union([z.string(), z.number()]),\n});\nexport type IsolatedTransferParams = z.infer<typeof IsolatedTransferParamsSchema>;\n\nexport const MarginInterestHistoryEntrySchema = z\n .object({\n txId: z.number(),\n interestAccuredTime: z.number(),\n asset: z.string(),\n rawAsset: z.string().optional(),\n principal: z.string().transform(Number),\n interest: z.string().transform(Number),\n interestRate: z.string().transform(Number),\n type: z.string(),\n isolatedSymbol: z.string().optional(),\n })\n .loose();\nexport type MarginInterestHistoryEntry = z.infer<typeof MarginInterestHistoryEntrySchema>;\n\nexport const MarginInterestHistoryResponseSchema = z.object({\n rows: z.array(MarginInterestHistoryEntrySchema),\n total: z.number(),\n});\nexport type MarginInterestHistoryResponse = z.infer<typeof MarginInterestHistoryResponseSchema>;\n\nexport const MarginForceLiquidationEntrySchema = z\n .object({\n avgPrice: z.string().transform(Number),\n executedQty: z.string().transform(Number),\n orderId: z.number(),\n price: z.string().transform(Number),\n qty: z.string().transform(Number),\n side: z.string(),\n symbol: z.string(),\n timeInForce: z.string(),\n isIsolated: z.boolean().optional(),\n updatedTime: z.number(),\n })\n .loose();\nexport type MarginForceLiquidationEntry = z.infer<typeof MarginForceLiquidationEntrySchema>;\n\nexport const MarginForceLiquidationResponseSchema = z.object({\n rows: z.array(MarginForceLiquidationEntrySchema),\n total: z.number(),\n});\nexport type MarginForceLiquidationResponse = z.infer<typeof MarginForceLiquidationResponseSchema>;\n\nexport const MarginPriceIndexSchema = z.object({\n calcTime: z.number(),\n price: z.string().transform(Number),\n symbol: z.string(),\n});\nexport type MarginPriceIndex = z.infer<typeof MarginPriceIndexSchema>;\n\nexport const MarginOrderSchema = z\n .object({\n symbol: z.string(),\n orderId: z.number(),\n clientOrderId: z.string(),\n isIsolated: z.boolean().optional(),\n price: z.string().transform(Number),\n origQty: z.string().transform(Number),\n executedQty: z.string().transform(Number),\n cummulativeQuoteQty: z.string().transform(Number),\n status: z.string(),\n timeInForce: z.string().optional(),\n type: z.string(),\n side: z.string(),\n transactTime: z.number().optional(),\n time: z.number().optional(),\n updateTime: z.number().optional(),\n fills: z.array(z.unknown()).optional(),\n })\n .loose();\nexport type MarginOrder = z.infer<typeof MarginOrderSchema>;\nexport const MarginOrderResponseSchema = MarginOrderSchema;\nexport const MarginOrdersResponseSchema = z.array(MarginOrderSchema);\n\nexport const MarginCreateOrderParamsSchema = z.object({\n symbol: z.string(),\n isIsolated: z.enum(['TRUE', 'FALSE']).optional(),\n side: z.enum(['BUY', 'SELL']),\n type: z.string(),\n quantity: z.union([z.string(), z.number()]).optional(),\n quoteOrderQty: z.union([z.string(), z.number()]).optional(),\n price: z.union([z.string(), z.number()]).optional(),\n stopPrice: z.union([z.string(), z.number()]).optional(),\n newClientOrderId: z.string().optional(),\n icebergQty: z.union([z.string(), z.number()]).optional(),\n timeInForce: z.enum(['GTC', 'IOC', 'FOK']).optional(),\n sideEffectType: z.enum(['NO_SIDE_EFFECT', 'MARGIN_BUY', 'AUTO_REPAY', 'AUTO_BORROW_REPAY']).optional(),\n newOrderRespType: z.enum(['ACK', 'RESULT', 'FULL']).optional(),\n autoRepayAtCancel: z.boolean().optional(),\n});\nexport type MarginCreateOrderParams = z.infer<typeof MarginCreateOrderParamsSchema>;\n\nexport const MarginTradeSchema = z\n .object({\n symbol: z.string(),\n id: z.number(),\n orderId: z.number(),\n price: z.string().transform(Number),\n qty: z.string().transform(Number),\n quoteQty: z.string().transform(Number),\n commission: z.string().transform(Number),\n commissionAsset: z.string(),\n time: z.number(),\n isBuyer: z.boolean(),\n isMaker: z.boolean(),\n isBestMatch: z.boolean().optional(),\n isIsolated: z.boolean().optional(),\n })\n .loose();\nexport type MarginTrade = z.infer<typeof MarginTradeSchema>;\nexport const MarginTradesResponseSchema = z.array(MarginTradeSchema);\n","import { HttpClient } from '../client/HttpClient.js';\nimport {\n BorrowRepayParams,\n BorrowRepayRecordResponse,\n BorrowRepayRecordResponseSchema,\n BorrowRepayResult,\n BorrowRepayResultSchema,\n CrossMarginAccount,\n CrossMarginAccountSchema,\n IsolatedMarginAccount,\n IsolatedMarginAccountSchema,\n IsolatedTransferParams,\n MarginCreateOrderParams,\n MarginForceLiquidationResponse,\n MarginForceLiquidationResponseSchema,\n MarginInterestHistoryResponse,\n MarginInterestHistoryResponseSchema,\n MarginOrder,\n MarginOrderResponseSchema,\n MarginOrdersResponseSchema,\n MarginPriceIndex,\n MarginPriceIndexSchema,\n MarginTradesResponseSchema,\n MarginTrade,\n MarginTransferResult,\n MarginTransferResultSchema,\n MaxBorrowable,\n MaxBorrowableSchema,\n MaxTransferable,\n MaxTransferableSchema,\n} from '../types/margin.types.js';\n\nexport class MarginAccount {\n constructor(private readonly http: HttpClient) {}\n\n async crossAccount(): Promise<CrossMarginAccount> {\n return CrossMarginAccountSchema.parse(await this.http.get('/sapi/v1/margin/account', undefined, 'signed'));\n }\n\n async isolatedAccount(symbols?: string[]): Promise<IsolatedMarginAccount> {\n const params = symbols?.length ? { symbols: symbols.join(',') } : undefined;\n return IsolatedMarginAccountSchema.parse(\n await this.http.get('/sapi/v1/margin/isolated/account', params, 'signed'),\n );\n }\n\n async maxBorrowable(asset: string, isolatedSymbol?: string): Promise<MaxBorrowable> {\n return MaxBorrowableSchema.parse(\n await this.http.get('/sapi/v1/margin/maxBorrowable', { asset, isolatedSymbol }, 'signed'),\n );\n }\n\n async maxTransferable(asset: string, isolatedSymbol?: string): Promise<MaxTransferable> {\n return MaxTransferableSchema.parse(\n await this.http.get('/sapi/v1/margin/maxTransferable', { asset, isolatedSymbol }, 'signed'),\n );\n }\n\n async borrowRepay(params: BorrowRepayParams): Promise<BorrowRepayResult> {\n return BorrowRepayResultSchema.parse(\n await this.http.post('/sapi/v1/margin/borrow-repay', params, 'signed'),\n );\n }\n\n async borrow(asset: string, amount: number, options?: { isIsolated?: boolean; symbol?: string }): Promise<BorrowRepayResult> {\n return this.borrowRepay({\n asset,\n amount,\n type: 'BORROW',\n isIsolated: options?.isIsolated ? 'TRUE' : undefined,\n symbol: options?.symbol,\n });\n }\n\n async repay(asset: string, amount: number, options?: { isIsolated?: boolean; symbol?: string }): Promise<BorrowRepayResult> {\n return this.borrowRepay({\n asset,\n amount,\n type: 'REPAY',\n isIsolated: options?.isIsolated ? 'TRUE' : undefined,\n symbol: options?.symbol,\n });\n }\n\n async borrowRepayRecord(\n type: 'BORROW' | 'REPAY',\n options?: { asset?: string; isolatedSymbol?: string; startTime?: number; endTime?: number; current?: number; size?: number },\n ): Promise<BorrowRepayRecordResponse> {\n return BorrowRepayRecordResponseSchema.parse(\n await this.http.get('/sapi/v1/margin/borrow-repay', { type, ...options }, 'signed'),\n );\n }\n\n async transfer(asset: string, amount: number, type: 1 | 2): Promise<MarginTransferResult> {\n return MarginTransferResultSchema.parse(\n await this.http.post('/sapi/v1/margin/transfer', { asset, amount, type }, 'signed'),\n );\n }\n\n async isolatedTransfer(params: IsolatedTransferParams): Promise<MarginTransferResult> {\n return MarginTransferResultSchema.parse(\n await this.http.post('/sapi/v1/margin/isolated/transfer', params, 'signed'),\n );\n }\n\n async interestHistory(options?: {\n asset?: string;\n isolatedSymbol?: string;\n startTime?: number;\n endTime?: number;\n current?: number;\n size?: number;\n }): Promise<MarginInterestHistoryResponse> {\n return MarginInterestHistoryResponseSchema.parse(\n await this.http.get('/sapi/v1/margin/interestHistory', options, 'signed'),\n );\n }\n\n async forceLiquidationRecord(options?: {\n startTime?: number;\n endTime?: number;\n isolatedSymbol?: string;\n current?: number;\n size?: number;\n }): Promise<MarginForceLiquidationResponse> {\n return MarginForceLiquidationResponseSchema.parse(\n await this.http.get('/sapi/v1/margin/forceLiquidationRec', options, 'signed'),\n );\n }\n\n async priceIndex(symbol: string): Promise<MarginPriceIndex> {\n return MarginPriceIndexSchema.parse(await this.http.get('/sapi/v1/margin/priceIndex', { symbol }));\n }\n}\n\nexport class MarginTrading {\n constructor(private readonly http: HttpClient) {}\n\n async createOrder(params: MarginCreateOrderParams): Promise<MarginOrder> {\n return MarginOrderResponseSchema.parse(await this.http.post('/sapi/v1/margin/order', params, 'signed'));\n }\n\n async cancelOrder(\n symbol: string,\n options?: { isIsolated?: 'TRUE' | 'FALSE'; orderId?: number; origClientOrderId?: string; newClientOrderId?: string },\n ): Promise<MarginOrder> {\n return MarginOrderResponseSchema.parse(\n await this.http.delete('/sapi/v1/margin/order', { symbol, ...options }, 'signed'),\n );\n }\n\n async cancelAllOpenOrders(symbol: string, isIsolated?: 'TRUE' | 'FALSE'): Promise<MarginOrder[]> {\n return MarginOrdersResponseSchema.parse(\n await this.http.delete('/sapi/v1/margin/openOrders', { symbol, isIsolated }, 'signed'),\n );\n }\n\n async getOrder(\n symbol: string,\n options?: { isIsolated?: 'TRUE' | 'FALSE'; orderId?: number; origClientOrderId?: string },\n ): Promise<MarginOrder> {\n return MarginOrderResponseSchema.parse(\n await this.http.get('/sapi/v1/margin/order', { symbol, ...options }, 'signed'),\n );\n }\n\n async getOpenOrders(options?: { symbol?: string; isIsolated?: 'TRUE' | 'FALSE' }): Promise<MarginOrder[]> {\n return MarginOrdersResponseSchema.parse(await this.http.get('/sapi/v1/margin/openOrders', options, 'signed'));\n }\n\n async getAllOrders(\n symbol: string,\n options?: { isIsolated?: 'TRUE' | 'FALSE'; orderId?: number; startTime?: number; endTime?: number; limit?: number },\n ): Promise<MarginOrder[]> {\n return MarginOrdersResponseSchema.parse(\n await this.http.get('/sapi/v1/margin/allOrders', { symbol, ...options }, 'signed'),\n );\n }\n\n async myTrades(\n symbol: string,\n options?: { isIsolated?: 'TRUE' | 'FALSE'; orderId?: number; startTime?: number; endTime?: number; fromId?: number; limit?: number },\n ): Promise<MarginTrade[]> {\n return MarginTradesResponseSchema.parse(\n await this.http.get('/sapi/v1/margin/myTrades', { symbol, ...options }, 'signed'),\n );\n }\n}\n","import { z } from 'zod';\n\nexport const TransferTypeSchema = z.enum([\n 'MAIN_UMFUTURE', 'MAIN_CMFUTURE', 'MAIN_MARGIN', 'MAIN_MINING', 'MAIN_FUNDING', 'MAIN_OPTION',\n 'UMFUTURE_MAIN', 'UMFUTURE_MARGIN', 'UMFUTURE_FUNDING',\n 'CMFUTURE_MAIN', 'CMFUTURE_MARGIN',\n 'MARGIN_MAIN', 'MARGIN_UMFUTURE', 'MARGIN_CMFUTURE', 'MARGIN_MINING', 'MARGIN_FUNDING',\n 'MINING_MAIN', 'MINING_UMFUTURE', 'MINING_MARGIN',\n 'FUNDING_MAIN', 'FUNDING_UMFUTURE', 'FUNDING_MARGIN', 'FUNDING_CMFUTURE',\n 'OPTION_MAIN', 'MAIN_OPTION_MARGIN',\n 'MAIN_PORTFOLIO_MARGIN', 'PORTFOLIO_MARGIN_MAIN',\n 'ISOLATEDMARGIN_MARGIN', 'MARGIN_ISOLATEDMARGIN', 'ISOLATEDMARGIN_ISOLATEDMARGIN',\n]);\nexport type TransferType = z.infer<typeof TransferTypeSchema>;\n\nexport const UniversalTransferParamsSchema = z.object({\n type: TransferTypeSchema,\n asset: z.string(),\n amount: z.union([z.string(), z.number()]),\n fromSymbol: z.string().optional(),\n toSymbol: z.string().optional(),\n});\nexport type UniversalTransferParams = z.infer<typeof UniversalTransferParamsSchema>;\n\nexport const UniversalTransferResultSchema = z.object({ tranId: z.number() });\nexport type UniversalTransferResult = z.infer<typeof UniversalTransferResultSchema>;\n\nexport const UniversalTransferHistoryEntrySchema = z\n .object({\n asset: z.string(),\n amount: z.string().transform(Number),\n type: z.string(),\n status: z.string(),\n tranId: z.number(),\n timestamp: z.number(),\n fromSymbol: z.string().nullable().optional(),\n toSymbol: z.string().nullable().optional(),\n })\n .loose();\nexport type UniversalTransferHistoryEntry = z.infer<typeof UniversalTransferHistoryEntrySchema>;\n\nexport const UniversalTransferHistoryResponseSchema = z.object({\n total: z.number(),\n rows: z.array(UniversalTransferHistoryEntrySchema),\n});\nexport type UniversalTransferHistoryResponse = z.infer<typeof UniversalTransferHistoryResponseSchema>;\n\nexport const FundingAssetSchema = z.object({\n asset: z.string(),\n free: z.string().transform(Number),\n locked: z.string().transform(Number),\n freeze: z.string().transform(Number),\n withdrawing: z.string().transform(Number),\n btcValuation: z.string().transform(Number),\n});\nexport type FundingAsset = z.infer<typeof FundingAssetSchema>;\nexport const FundingAssetsResponseSchema = z.array(FundingAssetSchema);\n\nexport const UserAssetSchema = z.object({\n asset: z.string(),\n free: z.string().transform(Number),\n locked: z.string().transform(Number),\n freeze: z.string().transform(Number),\n withdrawing: z.string().transform(Number),\n ipoable: z.string().transform(Number),\n btcValuation: z.string().transform(Number),\n});\nexport type UserAsset = z.infer<typeof UserAssetSchema>;\nexport const UserAssetsResponseSchema = z.array(UserAssetSchema);\n\nexport const DepositHistoryEntrySchema = z\n .object({\n id: z.string(),\n amount: z.string().transform(Number),\n coin: z.string(),\n network: z.string(),\n status: z.number(),\n address: z.string(),\n addressTag: z.string().optional(),\n txId: z.string(),\n insertTime: z.number(),\n transferType: z.number(),\n confirmTimes: z.string().optional(),\n unlockConfirm: z.union([z.string(), z.number()]).optional(),\n walletType: z.number().optional(),\n })\n .loose();\nexport type DepositHistoryEntry = z.infer<typeof DepositHistoryEntrySchema>;\nexport const DepositHistoryResponseSchema = z.array(DepositHistoryEntrySchema);\n\nexport const WithdrawHistoryEntrySchema = z\n .object({\n id: z.string(),\n amount: z.string().transform(Number),\n transactionFee: z.string().transform(Number),\n coin: z.string(),\n status: z.number(),\n address: z.string(),\n txId: z.string().optional(),\n applyTime: z.string(),\n network: z.string(),\n transferType: z.number(),\n withdrawOrderId: z.string().nullable().optional(),\n info: z.string().optional(),\n confirmNo: z.number().optional(),\n walletType: z.number().optional(),\n })\n .loose();\nexport type WithdrawHistoryEntry = z.infer<typeof WithdrawHistoryEntrySchema>;\nexport const WithdrawHistoryResponseSchema = z.array(WithdrawHistoryEntrySchema);\n\nexport const WithdrawParamsSchema = z.object({\n coin: z.string(),\n address: z.string(),\n amount: z.union([z.string(), z.number()]),\n withdrawOrderId: z.string().optional(),\n network: z.string().optional(),\n addressTag: z.string().optional(),\n transactionFeeFlag: z.boolean().optional(),\n name: z.string().optional(),\n walletType: z.number().optional(),\n});\nexport type WithdrawParams = z.infer<typeof WithdrawParamsSchema>;\n\nexport const WithdrawResultSchema = z.object({ id: z.string() });\nexport type WithdrawResult = z.infer<typeof WithdrawResultSchema>;\n\nexport const DepositAddressSchema = z.object({\n address: z.string(),\n coin: z.string(),\n tag: z.string(),\n url: z.string().optional(),\n});\nexport type DepositAddress = z.infer<typeof DepositAddressSchema>;\n\nexport const ApiKeyPermissionsSchema = z\n .object({\n ipRestrict: z.boolean(),\n createTime: z.number(),\n enableWithdrawals: z.boolean(),\n enableInternalTransfer: z.boolean(),\n enableFutures: z.boolean(),\n enableMargin: z.boolean(),\n enableSpotAndMarginTrading: z.boolean(),\n permitsUniversalTransfer: z.boolean().optional(),\n enableReading: z.boolean().optional(),\n tradingAuthorityExpirationTime: z.number().optional(),\n })\n .loose();\nexport type ApiKeyPermissions = z.infer<typeof ApiKeyPermissionsSchema>;\n\nexport const AssetDetailSchema = z.record(\n z.string(),\n z\n .object({\n minWithdrawAmount: z.string().transform(Number),\n depositStatus: z.boolean(),\n withdrawFee: z.number(),\n withdrawStatus: z.boolean(),\n depositTip: z.string().optional(),\n })\n .loose(),\n);\nexport type AssetDetail = z.infer<typeof AssetDetailSchema>;\n\nexport const DustLogEntrySchema = z\n .object({\n transId: z.number(),\n serviceChargeAmount: z.string().transform(Number),\n amount: z.string().transform(Number),\n operateTime: z.string(),\n transferedAmount: z.string().transform(Number),\n fromAsset: z.string(),\n })\n .loose();\nexport type DustLogEntry = z.infer<typeof DustLogEntrySchema>;\n\nexport const DustLogResponseSchema = z.object({\n total: z.number(),\n userAssetDribblets: z.array(\n z.object({\n operateTime: z.number(),\n totalTransferedAmount: z.string().transform(Number),\n totalServiceChargeAmount: z.string().transform(Number),\n transId: z.number(),\n userAssetDribbletDetails: z.array(DustLogEntrySchema),\n }),\n ),\n});\nexport type DustLogResponse = z.infer<typeof DustLogResponseSchema>;\n\nexport const DustConversionResultSchema = z\n .object({\n totalServiceCharge: z.string().transform(Number),\n totalTransfered: z.string().transform(Number),\n transferResult: z.array(\n z\n .object({\n amount: z.string().transform(Number),\n fromAsset: z.string(),\n operateTime: z.number(),\n serviceChargeAmount: z.string().transform(Number),\n tranId: z.number(),\n transferedAmount: z.string().transform(Number),\n })\n .loose(),\n ),\n })\n .loose();\nexport type DustConversionResult = z.infer<typeof DustConversionResultSchema>;\n\nexport const TradeFeeEntrySchema = z.object({\n symbol: z.string(),\n makerCommission: z.string().transform(Number),\n takerCommission: z.string().transform(Number),\n});\nexport type TradeFeeEntry = z.infer<typeof TradeFeeEntrySchema>;\nexport const TradeFeeResponseSchema = z.array(TradeFeeEntrySchema);\n\nexport const AccountSnapshotSchema = z\n .object({\n code: z.number(),\n msg: z.string(),\n snapshotVos: z.array(\n z\n .object({\n type: z.string(),\n updateTime: z.number(),\n data: z.record(z.string(), z.unknown()),\n })\n .loose(),\n ),\n })\n .loose();\nexport type AccountSnapshot = z.infer<typeof AccountSnapshotSchema>;\n","import { HttpClient } from '../client/HttpClient.js';\nimport {\n AccountSnapshot,\n AccountSnapshotSchema,\n ApiKeyPermissions,\n ApiKeyPermissionsSchema,\n AssetDetail,\n AssetDetailSchema,\n DepositAddress,\n DepositAddressSchema,\n DepositHistoryEntry,\n DepositHistoryResponseSchema,\n DustConversionResult,\n DustConversionResultSchema,\n DustLogResponse,\n DustLogResponseSchema,\n FundingAsset,\n FundingAssetsResponseSchema,\n TradeFeeEntry,\n TradeFeeResponseSchema,\n UniversalTransferHistoryResponse,\n UniversalTransferHistoryResponseSchema,\n UniversalTransferParams,\n UniversalTransferResult,\n UniversalTransferResultSchema,\n UserAsset,\n UserAssetsResponseSchema,\n WithdrawHistoryEntry,\n WithdrawHistoryResponseSchema,\n WithdrawParams,\n WithdrawResult,\n WithdrawResultSchema,\n} from '../types/wallet.types.js';\n\nexport class Wallet {\n constructor(private readonly http: HttpClient) {}\n\n async universalTransfer(params: UniversalTransferParams): Promise<UniversalTransferResult> {\n return UniversalTransferResultSchema.parse(\n await this.http.post('/sapi/v1/asset/transfer', params, 'signed'),\n );\n }\n\n async universalTransferHistory(options: {\n type: string;\n startTime?: number;\n endTime?: number;\n current?: number;\n size?: number;\n fromSymbol?: string;\n toSymbol?: string;\n }): Promise<UniversalTransferHistoryResponse> {\n return UniversalTransferHistoryResponseSchema.parse(\n await this.http.get('/sapi/v1/asset/transfer', options, 'signed'),\n );\n }\n\n async fundingWallet(options?: { asset?: string; needBtcValuation?: boolean }): Promise<FundingAsset[]> {\n return FundingAssetsResponseSchema.parse(\n await this.http.post('/sapi/v1/asset/get-funding-asset', options, 'signed'),\n );\n }\n\n async userAsset(options?: { asset?: string; needBtcValuation?: boolean }): Promise<UserAsset[]> {\n return UserAssetsResponseSchema.parse(\n await this.http.post('/sapi/v3/asset/getUserAsset', options, 'signed'),\n );\n }\n\n async depositHistory(options?: {\n coin?: string;\n status?: number;\n startTime?: number;\n endTime?: number;\n offset?: number;\n limit?: number;\n }): Promise<DepositHistoryEntry[]> {\n return DepositHistoryResponseSchema.parse(\n await this.http.get('/sapi/v1/capital/deposit/hisrec', options, 'signed'),\n );\n }\n\n async withdrawHistory(options?: {\n coin?: string;\n withdrawOrderId?: string;\n status?: number;\n startTime?: number;\n endTime?: number;\n offset?: number;\n limit?: number;\n }): Promise<WithdrawHistoryEntry[]> {\n return WithdrawHistoryResponseSchema.parse(\n await this.http.get('/sapi/v1/capital/withdraw/history', options, 'signed'),\n );\n }\n\n async withdraw(params: WithdrawParams): Promise<WithdrawResult> {\n return WithdrawResultSchema.parse(\n await this.http.post('/sapi/v1/capital/withdraw/apply', params, 'signed'),\n );\n }\n\n async depositAddress(coin: string, network?: string): Promise<DepositAddress> {\n return DepositAddressSchema.parse(\n await this.http.get('/sapi/v1/capital/deposit/address', { coin, network }, 'signed'),\n );\n }\n\n async accountSnapshot(\n type: 'SPOT' | 'MARGIN' | 'FUTURES',\n options?: { startTime?: number; endTime?: number; limit?: number },\n ): Promise<AccountSnapshot> {\n return AccountSnapshotSchema.parse(\n await this.http.get('/sapi/v1/accountSnapshot', { type, ...options }, 'signed'),\n );\n }\n\n async apiKeyPermissions(): Promise<ApiKeyPermissions> {\n return ApiKeyPermissionsSchema.parse(\n await this.http.get('/sapi/v1/account/apiRestrictions', undefined, 'signed'),\n );\n }\n\n async assetDetail(asset?: string): Promise<AssetDetail> {\n const params = asset ? { asset } : undefined;\n return AssetDetailSchema.parse(await this.http.get('/sapi/v1/asset/assetDetail', params, 'signed'));\n }\n\n async dustLog(options?: { accountType?: 'SPOT' | 'MARGIN'; startTime?: number; endTime?: number }): Promise<DustLogResponse> {\n return DustLogResponseSchema.parse(\n await this.http.get('/sapi/v1/asset/dribblet', options, 'signed'),\n );\n }\n\n async convertDustToBnb(assets: string[], accountType?: 'SPOT' | 'MARGIN'): Promise<DustConversionResult> {\n return DustConversionResultSchema.parse(\n await this.http.post('/sapi/v1/asset/dust', { asset: assets, accountType }, 'signed'),\n );\n }\n\n async tradeFee(symbol?: string): Promise<TradeFeeEntry[]> {\n const params = symbol ? { symbol } : undefined;\n return TradeFeeResponseSchema.parse(await this.http.get('/sapi/v1/asset/tradeFee', params, 'signed'));\n }\n}\n","import { z } from 'zod';\n\nexport const SubAccountEntrySchema = z\n .object({\n email: z.string(),\n isFreeze: z.boolean(),\n createTime: z.number(),\n isManagedSubAccount: z.boolean().optional(),\n isAssetManagementSubAccount: z.boolean().optional(),\n type: z.string().optional(),\n })\n .loose();\nexport type SubAccountEntry = z.infer<typeof SubAccountEntrySchema>;\n\nexport const SubAccountListResponseSchema = z.object({\n subAccounts: z.array(SubAccountEntrySchema),\n});\nexport type SubAccountListResponse = z.infer<typeof SubAccountListResponseSchema>;\n\nexport const SubAccountStatusSchema = z\n .object({\n email: z.string(),\n isSubUserEnabled: z.boolean(),\n isUserActive: z.boolean(),\n insertTime: z.number(),\n isMarginEnabled: z.boolean(),\n isFutureEnabled: z.boolean(),\n mobile: z.number().optional(),\n })\n .loose();\nexport type SubAccountStatus = z.infer<typeof SubAccountStatusSchema>;\nexport const SubAccountStatusResponseSchema = z.array(SubAccountStatusSchema);\n\nexport const SubAccountSpotAssetSchema = z.object({\n asset: z.string(),\n free: z.string().transform(Number),\n locked: z.string().transform(Number),\n});\nexport type SubAccountSpotAsset = z.infer<typeof SubAccountSpotAssetSchema>;\n\nexport const SubAccountSpotAssetsResponseSchema = z.object({\n balances: z.array(SubAccountSpotAssetSchema),\n});\nexport type SubAccountSpotAssetsResponse = z.infer<typeof SubAccountSpotAssetsResponseSchema>;\n\nexport const SubAccountSpotSummaryEntrySchema = z\n .object({\n email: z.string(),\n totalAsset: z.string().transform(Number),\n })\n .loose();\nexport type SubAccountSpotSummaryEntry = z.infer<typeof SubAccountSpotSummaryEntrySchema>;\n\nexport const SubAccountSpotSummarySchema = z.object({\n totalCount: z.number(),\n masterAccountTotalAsset: z.string().transform(Number),\n spotSubUserAssetBtcVoList: z.array(SubAccountSpotSummaryEntrySchema),\n});\nexport type SubAccountSpotSummary = z.infer<typeof SubAccountSpotSummarySchema>;\n\nexport const SubAccountFuturesSummarySchema = z\n .object({\n totalCount: z.number().optional(),\n totalMarginBalanceOfBTC: z.string().transform(Number).optional(),\n totalUnrealizedProfitOfBTC: z.string().transform(Number).optional(),\n totalWalletBalanceOfBTC: z.string().transform(Number).optional(),\n subAccountList: z.array(z.record(z.string(), z.unknown())).optional(),\n })\n .loose();\nexport type SubAccountFuturesSummary = z.infer<typeof SubAccountFuturesSummarySchema>;\n\nexport const SubAccountMarginAccountSchema = z\n .object({\n email: z.string(),\n marginLevel: z.string().transform(Number),\n totalAssetOfBtc: z.string().transform(Number),\n totalLiabilityOfBtc: z.string().transform(Number),\n totalNetAssetOfBtc: z.string().transform(Number),\n marginTradeCoeffVo: z.record(z.string(), z.unknown()).optional(),\n marginUserAssetVoList: z.array(z.record(z.string(), z.unknown())).optional(),\n })\n .loose();\nexport type SubAccountMarginAccount = z.infer<typeof SubAccountMarginAccountSchema>;\n\nexport const SubAccountUniversalTransferParamsSchema = z.object({\n fromEmail: z.string().optional(),\n toEmail: z.string().optional(),\n fromAccountType: z.enum(['SPOT', 'USDT_FUTURE', 'COIN_FUTURE', 'MARGIN', 'ISOLATED_MARGIN']),\n toAccountType: z.enum(['SPOT', 'USDT_FUTURE', 'COIN_FUTURE', 'MARGIN', 'ISOLATED_MARGIN']),\n symbol: z.string().optional(),\n asset: z.string(),\n amount: z.union([z.string(), z.number()]),\n clientTranId: z.string().optional(),\n});\nexport type SubAccountUniversalTransferParams = z.infer<typeof SubAccountUniversalTransferParamsSchema>;\n\nexport const SubAccountUniversalTransferResultSchema = z.object({\n tranId: z.number(),\n clientTranId: z.string().optional(),\n});\nexport type SubAccountUniversalTransferResult = z.infer<typeof SubAccountUniversalTransferResultSchema>;\n\nexport const SubAccountUniversalTransferEntrySchema = z\n .object({\n tranId: z.number(),\n fromEmail: z.string(),\n toEmail: z.string(),\n asset: z.string(),\n amount: z.string().transform(Number),\n fromAccountType: z.string(),\n toAccountType: z.string(),\n status: z.string(),\n createTimeStamp: z.number(),\n clientTranId: z.string().optional(),\n })\n .loose();\nexport type SubAccountUniversalTransferEntry = z.infer<typeof SubAccountUniversalTransferEntrySchema>;\n\nexport const SubAccountUniversalTransferHistoryResponseSchema = z.object({\n result: z.array(SubAccountUniversalTransferEntrySchema),\n totalCount: z.number(),\n});\nexport type SubAccountUniversalTransferHistoryResponse = z.infer<\n typeof SubAccountUniversalTransferHistoryResponseSchema\n>;\n\nexport const VirtualSubAccountResultSchema = z.object({ email: z.string() });\nexport type VirtualSubAccountResult = z.infer<typeof VirtualSubAccountResultSchema>;\n\nexport const SubAccountDepositAddressSchema = z.object({\n address: z.string(),\n coin: z.string(),\n tag: z.string(),\n url: z.string().optional(),\n});\nexport type SubAccountDepositAddress = z.infer<typeof SubAccountDepositAddressSchema>;\n\nexport const SubAccountDepositHistoryEntrySchema = z\n .object({\n id: z.string(),\n amount: z.string().transform(Number),\n coin: z.string(),\n network: z.string(),\n status: z.number(),\n address: z.string(),\n txId: z.string(),\n insertTime: z.number(),\n transferType: z.number(),\n })\n .loose();\nexport type SubAccountDepositHistoryEntry = z.infer<typeof SubAccountDepositHistoryEntrySchema>;\nexport const SubAccountDepositHistoryResponseSchema = z.array(SubAccountDepositHistoryEntrySchema);\n\nexport const SubAccountEnableResultSchema = z\n .object({\n email: z.string(),\n isFuturesEnabled: z.boolean().optional(),\n isMarginEnabled: z.boolean().optional(),\n })\n .loose();\nexport type SubAccountEnableResult = z.infer<typeof SubAccountEnableResultSchema>;\n","import { HttpClient } from '../client/HttpClient.js';\nimport {\n SubAccountEntry,\n SubAccountDepositAddress,\n SubAccountDepositAddressSchema,\n SubAccountDepositHistoryEntry,\n SubAccountDepositHistoryResponseSchema,\n SubAccountEnableResult,\n SubAccountEnableResultSchema,\n SubAccountFuturesSummary,\n SubAccountFuturesSummarySchema,\n SubAccountListResponseSchema,\n SubAccountMarginAccount,\n SubAccountMarginAccountSchema,\n SubAccountSpotAssetsResponse,\n SubAccountSpotAssetsResponseSchema,\n SubAccountSpotSummary,\n SubAccountSpotSummarySchema,\n SubAccountStatus,\n SubAccountStatusResponseSchema,\n SubAccountUniversalTransferHistoryResponse,\n SubAccountUniversalTransferHistoryResponseSchema,\n SubAccountUniversalTransferParams,\n SubAccountUniversalTransferResult,\n SubAccountUniversalTransferResultSchema,\n VirtualSubAccountResult,\n VirtualSubAccountResultSchema,\n} from '../types/subaccount.types.js';\n\nexport class SubAccount {\n constructor(private readonly http: HttpClient) {}\n\n async list(options?: { email?: string; isFreeze?: boolean; page?: number; limit?: number }): Promise<SubAccountEntry[]> {\n const res = await this.http.get('/sapi/v1/sub-account/list', options, 'signed');\n return SubAccountListResponseSchema.parse(res).subAccounts;\n }\n\n async status(email?: string): Promise<SubAccountStatus[]> {\n const params = email ? { email } : undefined;\n return SubAccountStatusResponseSchema.parse(\n await this.http.get('/sapi/v1/sub-account/status', params, 'signed'),\n );\n }\n\n async spotAssets(email: string): Promise<SubAccountSpotAssetsResponse> {\n return SubAccountSpotAssetsResponseSchema.parse(\n await this.http.get('/sapi/v3/sub-account/assets', { email }, 'signed'),\n );\n }\n\n async spotSummary(options?: { email?: string; page?: number; size?: number }): Promise<SubAccountSpotSummary> {\n return SubAccountSpotSummarySchema.parse(\n await this.http.get('/sapi/v1/sub-account/spotSummary', options, 'signed'),\n );\n }\n\n async futuresAccountSummary(futuresType: 1 | 2): Promise<SubAccountFuturesSummary> {\n return SubAccountFuturesSummarySchema.parse(\n await this.http.get('/sapi/v2/sub-account/futures/accountSummary', { futuresType }, 'signed'),\n );\n }\n\n async marginAccount(email: string): Promise<SubAccountMarginAccount> {\n return SubAccountMarginAccountSchema.parse(\n await this.http.get('/sapi/v1/sub-account/margin/account', { email }, 'signed'),\n );\n }\n\n async universalTransfer(params: SubAccountUniversalTransferParams): Promise<SubAccountUniversalTransferResult> {\n return SubAccountUniversalTransferResultSchema.parse(\n await this.http.post('/sapi/v1/sub-account/universalTransfer', params, 'signed'),\n );\n }\n\n async universalTransferHistory(options?: {\n fromEmail?: string;\n toEmail?: string;\n clientTranId?: string;\n startTime?: number;\n endTime?: number;\n page?: number;\n limit?: number;\n }): Promise<SubAccountUniversalTransferHistoryResponse> {\n return SubAccountUniversalTransferHistoryResponseSchema.parse(\n await this.http.get('/sapi/v1/sub-account/universalTransfer', options, 'signed'),\n );\n }\n\n async createVirtualSubAccount(subAccountString: string): Promise<VirtualSubAccountResult> {\n return VirtualSubAccountResultSchema.parse(\n await this.http.post('/sapi/v1/sub-account/virtualSubAccount', { subAccountString }, 'signed'),\n );\n }\n\n async enableFutures(email: string): Promise<SubAccountEnableResult> {\n return SubAccountEnableResultSchema.parse(\n await this.http.post('/sapi/v1/sub-account/futures/enable', { email }, 'signed'),\n );\n }\n\n async enableMargin(email: string): Promise<SubAccountEnableResult> {\n return SubAccountEnableResultSchema.parse(\n await this.http.post('/sapi/v1/sub-account/margin/enable', { email }, 'signed'),\n );\n }\n\n async depositAddress(email: string, coin: string, network?: string): Promise<SubAccountDepositAddress> {\n return SubAccountDepositAddressSchema.parse(\n await this.http.get('/sapi/v1/capital/deposit/subAddress', { email, coin, network }, 'signed'),\n );\n }\n\n async depositHistory(options: {\n email: string;\n coin?: string;\n status?: number;\n startTime?: number;\n endTime?: number;\n limit?: number;\n offset?: number;\n }): Promise<SubAccountDepositHistoryEntry[]> {\n return SubAccountDepositHistoryResponseSchema.parse(\n await this.http.get('/sapi/v1/capital/deposit/subHisrec', options, 'signed'),\n );\n }\n}\n","import { EventEmitter } from 'node:events';\nimport WebSocket, { type RawData } from 'ws';\nimport { parseWsPayload, type WsStreamPayload } from '../types/ws.types.js';\n\nexport interface BaseWSOptions {\n baseStreamUrl: string;\n reconnectDelayMs?: number;\n maxReconnectDelayMs?: number;\n}\n\ninterface CombinedStreamMessage {\n stream: string;\n data: unknown;\n}\n\nexport class BaseWS extends EventEmitter {\n private ws: WebSocket | null = null;\n private readonly streams = new Set<string>();\n private reconnectAttempt = 0;\n private closedByUser = false;\n\n constructor(private readonly options: BaseWSOptions) {\n super();\n }\n\n subscribe(streams: string[]): void {\n streams.forEach((s) => this.streams.add(s));\n if (this.isOpen()) {\n this.send({ method: 'SUBSCRIBE', params: streams, id: Date.now() });\n } else {\n this.connect();\n }\n }\n\n unsubscribe(streams: string[]): void {\n streams.forEach((s) => this.streams.delete(s));\n if (this.isOpen()) {\n this.send({ method: 'UNSUBSCRIBE', params: streams, id: Date.now() });\n }\n }\n\n close(): void {\n this.closedByUser = true;\n this.ws?.close();\n }\n\n reconnect(): void {\n if (this.ws?.readyState === WebSocket.OPEN) this.ws.close();\n this.reconnectAttempt = 0;\n if (!this.closedByUser) this.connect();\n }\n\n resetReconnectAttempts(): void {\n this.reconnectAttempt = 0;\n }\n\n private isOpen(): boolean {\n return this.ws?.readyState === WebSocket.OPEN;\n }\n\n private send(payload: unknown): void {\n this.ws?.send(JSON.stringify(payload));\n }\n\n private connect(): void {\n this.closedByUser = false;\n const url = `${this.options.baseStreamUrl}?streams=${[...this.streams].join('/')}`;\n this.ws = new WebSocket(url);\n\n this.ws.on('open', () => {\n this.reconnectAttempt = 0;\n this.emit('open');\n });\n\n this.ws.on('message', (raw: RawData) => {\n this.handleMessage(raw.toString());\n });\n\n this.ws.on('close', () => {\n this.emit('close');\n if (!this.closedByUser) this.scheduleReconnect();\n });\n\n this.ws.on('error', (err: Error) => {\n if (this.closedByUser) return;\n this.emit('error', err);\n });\n }\n\n private handleMessage(raw: string): void {\n let parsed: CombinedStreamMessage;\n try {\n parsed = JSON.parse(raw) as CombinedStreamMessage;\n } catch {\n return;\n }\n if (!parsed.stream || parsed.data === undefined) return;\n\n try {\n const payload: WsStreamPayload = parseWsPayload(parsed.stream, parsed.data);\n this.emit('message', parsed.stream, payload);\n this.emit(parsed.stream, payload);\n } catch (err) {\n this.emit('error', err);\n }\n }\n\n private scheduleReconnect(): void {\n const base = this.options.reconnectDelayMs ?? 1000;\n const max = this.options.maxReconnectDelayMs ?? 30_000;\n const delay = Math.min(base * 2 ** this.reconnectAttempt, max);\n this.reconnectAttempt += 1;\n setTimeout(() => {\n if (!this.closedByUser) this.connect();\n }, delay);\n }\n}\n","import { z } from 'zod';\n\nexport const WsKlinePayloadSchema = z.object({\n e: z.literal('kline'),\n E: z.number(),\n s: z.string(),\n k: z.object({\n t: z.number(),\n T: z.number(),\n s: z.string(),\n i: z.string(),\n o: z.string().transform(Number),\n c: z.string().transform(Number),\n h: z.string().transform(Number),\n l: z.string().transform(Number),\n v: z.string().transform(Number),\n n: z.number(),\n x: z.boolean(),\n q: z.string().transform(Number),\n V: z.string().transform(Number),\n Q: z.string().transform(Number),\n }),\n});\nexport type WsKlinePayload = z.infer<typeof WsKlinePayloadSchema>;\n\nexport const WsAggTradePayloadSchema = z.object({\n e: z.literal('aggTrade'),\n E: z.number(),\n s: z.string(),\n a: z.number(),\n p: z.string().transform(Number),\n q: z.string().transform(Number),\n f: z.number(),\n l: z.number(),\n T: z.number(),\n m: z.boolean(),\n});\nexport type WsAggTradePayload = z.infer<typeof WsAggTradePayloadSchema>;\n\nexport const WsTradePayloadSchema = z.object({\n e: z.literal('trade'),\n E: z.number(),\n s: z.string(),\n t: z.number(),\n p: z.string().transform(Number),\n q: z.string().transform(Number),\n T: z.number(),\n m: z.boolean(),\n});\nexport type WsTradePayload = z.infer<typeof WsTradePayloadSchema>;\n\nexport const WsDepthUpdatePayloadSchema = z.object({\n e: z.literal('depthUpdate'),\n E: z.number(),\n s: z.string(),\n U: z.number(),\n u: z.number(),\n T: z.number().optional(),\n pu: z.number().optional(),\n b: z.array(z.tuple([z.string(), z.string()])),\n a: z.array(z.tuple([z.string(), z.string()])),\n});\nexport type WsDepthUpdatePayload = z.infer<typeof WsDepthUpdatePayloadSchema>;\n\nexport const WsTicker24hrPayloadSchema = z.object({\n e: z.literal('24hrTicker'),\n E: z.number(),\n s: z.string(),\n p: z.string().transform(Number),\n P: z.string().transform(Number),\n c: z.string().transform(Number),\n o: z.string().transform(Number),\n h: z.string().transform(Number),\n l: z.string().transform(Number),\n v: z.string().transform(Number),\n q: z.string().transform(Number),\n});\nexport type WsTicker24hrPayload = z.infer<typeof WsTicker24hrPayloadSchema>;\n\nexport const WsBookTickerPayloadSchema = z.object({\n u: z.number(),\n s: z.string(),\n b: z.string().transform(Number),\n B: z.string().transform(Number),\n a: z.string().transform(Number),\n A: z.string().transform(Number),\n});\nexport type WsBookTickerPayload = z.infer<typeof WsBookTickerPayloadSchema>;\n\nexport const WsMarkPricePayloadSchema = z.object({\n e: z.literal('markPriceUpdate'),\n E: z.number(),\n s: z.string(),\n p: z.string().transform(Number),\n i: z.string().transform(Number),\n P: z.string().transform(Number),\n r: z.string().transform(Number),\n T: z.number(),\n});\nexport type WsMarkPricePayload = z.infer<typeof WsMarkPricePayloadSchema>;\n\nexport const WsMiniTickerPayloadSchema = z.object({\n e: z.literal('24hrMiniTicker'),\n E: z.number(),\n s: z.string(),\n c: z.string().transform(Number),\n o: z.string().transform(Number),\n h: z.string().transform(Number),\n l: z.string().transform(Number),\n v: z.string().transform(Number),\n q: z.string().transform(Number),\n});\nexport type WsMiniTickerPayload = z.infer<typeof WsMiniTickerPayloadSchema>;\n\nexport const WsForceOrderPayloadSchema = z.object({\n e: z.literal('forceOrder'),\n E: z.number(),\n o: z.object({\n s: z.string(),\n S: z.string(),\n o: z.string(),\n f: z.string(),\n q: z.string().transform(Number),\n p: z.string().transform(Number),\n ap: z.string().transform(Number),\n X: z.string(),\n l: z.string().transform(Number),\n z: z.string().transform(Number),\n T: z.number(),\n }),\n});\nexport type WsForceOrderPayload = z.infer<typeof WsForceOrderPayloadSchema>;\n\nexport const WsCompositeIndexPayloadSchema = z.object({\n e: z.literal('compositeIndex'),\n E: z.number(),\n s: z.string(),\n p: z.string().transform(Number),\n c: z.array(\n z.object({\n b: z.string(),\n q: z.string(),\n w: z.string().transform(Number),\n p: z.string().transform(Number),\n }),\n ),\n});\nexport type WsCompositeIndexPayload = z.infer<typeof WsCompositeIndexPayloadSchema>;\n\nexport const WsAssetIndexPayloadSchema = z.object({\n e: z.literal('assetIndex'),\n E: z.number(),\n s: z.string(),\n i: z.string().transform(Number),\n b: z.string().transform(Number),\n a: z.string().transform(Number),\n});\nexport type WsAssetIndexPayload = z.infer<typeof WsAssetIndexPayloadSchema>;\n\nexport const WsRollingWindowTickerPayloadSchema = z.object({\n e: z.enum(['1hTicker', '4hTicker', '1dTicker', '7dTicker', '30dTicker']),\n E: z.number(),\n s: z.string(),\n p: z.string().transform(Number),\n P: z.string().transform(Number),\n o: z.string().transform(Number),\n h: z.string().transform(Number),\n l: z.string().transform(Number),\n c: z.string().transform(Number),\n v: z.string().transform(Number),\n q: z.string().transform(Number),\n O: z.number(),\n C: z.number(),\n});\nexport type WsRollingWindowTickerPayload = z.infer<typeof WsRollingWindowTickerPayloadSchema>;\n\nexport const WsSpotAvgPricePayloadSchema = z.object({\n e: z.literal('avgPrice'),\n E: z.number(),\n s: z.string(),\n i: z.string(),\n w: z.string().transform(Number),\n T: z.number(),\n});\nexport type WsSpotAvgPricePayload = z.infer<typeof WsSpotAvgPricePayloadSchema>;\n\nexport type WsStreamPayload =\n | WsKlinePayload\n | WsAggTradePayload\n | WsTradePayload\n | WsDepthUpdatePayload\n | WsTicker24hrPayload\n | WsBookTickerPayload\n | WsMarkPricePayload\n | WsMiniTickerPayload\n | WsForceOrderPayload\n | WsCompositeIndexPayload\n | WsAssetIndexPayload\n | WsRollingWindowTickerPayload\n | WsSpotAvgPricePayload;\n\nexport function parseWsPayload(streamName: string, raw: unknown): WsStreamPayload {\n if (streamName.includes('@kline_')) return WsKlinePayloadSchema.parse(raw);\n if (streamName.includes('@continuousKline_') || streamName.includes('@indexPriceKline_') || streamName.includes('@markPriceKline_')) {\n return WsKlinePayloadSchema.parse(raw);\n }\n if (streamName.includes('@aggTrade')) return WsAggTradePayloadSchema.parse(raw);\n if (streamName.includes('@trade')) return WsTradePayloadSchema.parse(raw);\n if (streamName.includes('@depth')) return WsDepthUpdatePayloadSchema.parse(raw);\n if (streamName.includes('@bookTicker')) return WsBookTickerPayloadSchema.parse(raw);\n if (streamName.includes('@markPrice')) return WsMarkPricePayloadSchema.parse(raw);\n if (streamName.includes('@miniTicker')) return WsMiniTickerPayloadSchema.parse(raw);\n if (streamName.includes('@forceOrder')) return WsForceOrderPayloadSchema.parse(raw);\n if (streamName.includes('@compositeIndex')) return WsCompositeIndexPayloadSchema.parse(raw);\n if (streamName.includes('@assetIndex')) return WsAssetIndexPayloadSchema.parse(raw);\n if (streamName.includes('@avgPrice')) return WsSpotAvgPricePayloadSchema.parse(raw);\n if (streamName.includes('@ticker_')) return WsRollingWindowTickerPayloadSchema.parse(raw);\n if (streamName.includes('@ticker')) return WsTicker24hrPayloadSchema.parse(raw);\n throw new Error(`Unknown WS stream type: ${streamName}`);\n}\n","import { BaseWS } from './BaseWS.js';\nimport type { KlineInterval } from '../types/market.types.js';\n\nexport type ContractType = 'perpetual' | 'current_quarter' | 'next_quarter';\nexport type MarkPriceSpeed = '1s' | '3s';\n\nexport class FuturesMarketWS extends BaseWS {\n constructor(baseStreamUrl = 'wss://fstream.binance.com/stream') {\n super({ baseStreamUrl });\n }\n\n kline(symbol: string, interval: KlineInterval): string {\n return `${symbol.toLowerCase()}@kline_${interval}`;\n }\n\n continuousKline(symbol: string, contractType: ContractType, interval: KlineInterval): string {\n return `${symbol.toLowerCase()}@continuousKline_${contractType}_${interval}`;\n }\n\n indexPriceKline(symbol: string, interval: KlineInterval): string {\n return `${symbol.toLowerCase()}@indexPriceKline_${interval}`;\n }\n\n markPriceKline(symbol: string, interval: KlineInterval): string {\n return `${symbol.toLowerCase()}@markPriceKline_${interval}`;\n }\n\n aggTrade(symbol: string): string {\n return `${symbol.toLowerCase()}@aggTrade`;\n }\n\n trade(symbol: string): string {\n return `${symbol.toLowerCase()}@trade`;\n }\n\n depth(symbol: string, level: 5 | 10 | 20 = 20): string {\n return `${symbol.toLowerCase()}@depth${level}`;\n }\n\n depthDiff(symbol: string): string {\n return `${symbol.toLowerCase()}@depth`;\n }\n\n depthDiffSpeed(symbol: string, updateSpeed: '100ms' | '500ms'): string {\n return `${symbol.toLowerCase()}@depth@${updateSpeed}`;\n }\n\n ticker(symbol: string): string {\n return `${symbol.toLowerCase()}@ticker`;\n }\n\n rollingWindowTicker(symbol: string, window: '1h' | '4h' | '1d' = '1h'): string {\n return `${symbol.toLowerCase()}@ticker_${window}`;\n }\n\n allRollingWindowTickers(window: '1h' | '4h' | '1d' = '1h'): string {\n return `!ticker_${window}@arr`;\n }\n\n allMarketTickers(): string {\n return '!ticker@arr';\n }\n\n allBookTickers(): string {\n return '!bookTicker';\n }\n\n miniTicker(symbol: string): string {\n return `${symbol.toLowerCase()}@miniTicker`;\n }\n\n allMiniTickers(): string {\n return '!miniTicker@arr';\n }\n\n markPrice(symbol: string, updateSpeed: MarkPriceSpeed = '3s'): string {\n return `${symbol.toLowerCase()}@markPrice@${updateSpeed}`;\n }\n\n allMarkPrices(): string {\n return '!markPrice@arr';\n }\n\n bookTicker(symbol: string): string {\n return `${symbol.toLowerCase()}@bookTicker`;\n }\n\n liquidationOrder(symbol: string): string {\n return `${symbol.toLowerCase()}@forceOrder`;\n }\n\n allLiquidationOrders(): string {\n return '!forceOrder@arr';\n }\n\n compositeIndex(symbol: string): string {\n return `${symbol.toLowerCase()}@compositeIndex`;\n }\n\n assetIndex(symbol: string): string {\n return `${symbol.toLowerCase()}@assetIndex`;\n }\n\n allAssetIndices(): string {\n return '!assetIndex@arr';\n }\n}\n","import { BaseWS } from './BaseWS.js';\nimport type { KlineInterval } from '../types/market.types.js';\n\nexport class SpotMarketWS extends BaseWS {\n constructor(baseStreamUrl = 'wss://stream.binance.com:9443/stream') {\n super({ baseStreamUrl });\n }\n\n kline(symbol: string, interval: KlineInterval): string {\n return `${symbol.toLowerCase()}@kline_${interval}`;\n }\n\n aggTrade(symbol: string): string {\n return `${symbol.toLowerCase()}@aggTrade`;\n }\n\n trade(symbol: string): string {\n return `${symbol.toLowerCase()}@trade`;\n }\n\n depth(symbol: string, level: 5 | 10 | 20 = 20): string {\n return `${symbol.toLowerCase()}@depth${level}`;\n }\n\n depthDiff(symbol: string): string {\n return `${symbol.toLowerCase()}@depth`;\n }\n\n depthDiffSpeed(symbol: string, updateSpeed: '100ms'): string {\n return `${symbol.toLowerCase()}@depth@${updateSpeed}`;\n }\n\n avgPrice(symbol: string): string {\n return `${symbol.toLowerCase()}@avgPrice`;\n }\n\n ticker(symbol: string): string {\n return `${symbol.toLowerCase()}@ticker`;\n }\n\n rollingWindowTicker(\n symbol: string,\n window: '1h' | '4h' | '1d' | '7d' | '30d' = '1h',\n ): string {\n return `${symbol.toLowerCase()}@ticker_${window}`;\n }\n\n allRollingWindowTickers(window: '1h' | '4h' | '1d' | '7d' | '30d' = '1h'): string {\n return `!ticker_${window}@arr`;\n }\n\n miniTicker(symbol: string): string {\n return `${symbol.toLowerCase()}@miniTicker`;\n }\n\n allMarketTickers(): string {\n return '!ticker@arr';\n }\n\n allMiniTickers(): string {\n return '!miniTicker@arr';\n }\n\n bookTicker(symbol: string): string {\n return `${symbol.toLowerCase()}@bookTicker`;\n }\n\n allBookTickers(): string {\n return '!bookTicker';\n }\n}\n","import { EventEmitter } from 'node:events';\nimport WebSocket, { type RawData } from 'ws';\nimport { parseSpotUserDataEvent, type SpotUserDataEvent } from '../types/spot.types.js';\n\nexport interface SpotUserWSOptions {\n baseUserUrl: string;\n getListenKey: () => string | null;\n reconnectDelayMs?: number;\n maxReconnectDelayMs?: number;\n}\n\nexport class SpotUserWS extends EventEmitter {\n private ws: WebSocket | null = null;\n private reconnectAttempt = 0;\n private closedByUser = false;\n\n constructor(private readonly options: SpotUserWSOptions) {\n super();\n }\n\n connect(): void {\n const listenKey = this.options.getListenKey();\n if (!listenKey) {\n this.emit('error', new Error('No spot listenKey available for user data stream'));\n return;\n }\n this.closedByUser = false;\n const url = `${this.options.baseUserUrl}/${listenKey}`;\n this.ws = new WebSocket(url);\n\n this.ws.on('open', () => {\n this.reconnectAttempt = 0;\n this.emit('open');\n });\n\n this.ws.on('message', (raw: RawData) => {\n this.handleMessage(raw.toString());\n });\n\n this.ws.on('close', () => {\n this.emit('close');\n if (!this.closedByUser) this.scheduleReconnect();\n });\n\n this.ws.on('error', (err: Error) => {\n this.emit('error', err);\n });\n }\n\n close(): void {\n this.closedByUser = true;\n this.ws?.close();\n }\n\n reconnect(): void {\n if (this.ws?.readyState === WebSocket.OPEN) this.ws.close();\n this.reconnectAttempt = 0;\n if (!this.closedByUser) this.connect();\n }\n\n resetReconnectAttempts(): void {\n this.reconnectAttempt = 0;\n }\n\n private handleMessage(raw: string): void {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n return;\n }\n try {\n const event: SpotUserDataEvent = parseSpotUserDataEvent(parsed);\n this.emit(event.e, event);\n this.emit('userData', event);\n } catch (err) {\n this.emit('error', err);\n }\n }\n\n private scheduleReconnect(): void {\n const base = this.options.reconnectDelayMs ?? 1000;\n const max = this.options.maxReconnectDelayMs ?? 30_000;\n const delay = Math.min(base * 2 ** this.reconnectAttempt, max);\n this.reconnectAttempt += 1;\n setTimeout(() => {\n if (!this.closedByUser) this.connect();\n }, delay);\n }\n}\n","import { EventEmitter } from 'node:events';\nimport WebSocket, { type RawData } from 'ws';\nimport {\n parseUserDataEvent,\n type UserDataEvent,\n} from '../types/userdata.types.js';\n\nexport interface FuturesUserWSOptions {\n baseUserUrl: string;\n getListenKey: () => string | null;\n reconnectDelayMs?: number;\n maxReconnectDelayMs?: number;\n}\n\nexport class FuturesUserWS extends EventEmitter {\n private ws: WebSocket | null = null;\n private reconnectAttempt = 0;\n private closedByUser = false;\n\n constructor(private readonly options: FuturesUserWSOptions) {\n super();\n }\n\n connect(): void {\n const listenKey = this.options.getListenKey();\n if (!listenKey) {\n this.emit('error', new Error('No listenKey available for user data stream'));\n return;\n }\n this.closedByUser = false;\n const url = `${this.options.baseUserUrl}/${listenKey}`;\n this.ws = new WebSocket(url);\n\n this.ws.on('open', () => {\n this.reconnectAttempt = 0;\n this.emit('open');\n });\n\n this.ws.on('message', (raw: RawData) => {\n this.handleMessage(raw.toString());\n });\n\n this.ws.on('close', () => {\n this.emit('close');\n if (!this.closedByUser) this.scheduleReconnect();\n });\n\n this.ws.on('error', (err: Error) => {\n this.emit('error', err);\n });\n }\n\n close(): void {\n this.closedByUser = true;\n this.ws?.close();\n }\n\n reconnect(): void {\n if (this.ws?.readyState === WebSocket.OPEN) this.ws.close();\n this.reconnectAttempt = 0;\n if (!this.closedByUser) this.connect();\n }\n\n resetReconnectAttempts(): void {\n this.reconnectAttempt = 0;\n }\n\n private handleMessage(raw: string): void {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n return;\n }\n try {\n const event: UserDataEvent = parseUserDataEvent(parsed);\n this.emit(event.e, event);\n this.emit('userData', event);\n } catch (err) {\n this.emit('error', err);\n }\n }\n\n private scheduleReconnect(): void {\n const base = this.options.reconnectDelayMs ?? 1000;\n const max = this.options.maxReconnectDelayMs ?? 30_000;\n const delay = Math.min(base * 2 ** this.reconnectAttempt, max);\n this.reconnectAttempt += 1;\n setTimeout(() => {\n if (!this.closedByUser) this.connect();\n }, delay);\n }\n}\n","import { BaseWS } from './BaseWS.js';\nimport type { KlineInterval } from '../types/market.types.js';\n\nexport type CoinMContractType = 'perpetual' | 'current_quarter' | 'next_quarter';\nexport type CoinMMarkPriceSpeed = '1s' | '3s';\n\n/**\n * COIN-M stream names mirror USD-M's naming scheme exactly, just against `dstream.binance.com`\n * and inverse-contract symbols/pairs (e.g. `btcusd_perp`, `btcusd`).\n */\nexport class CoinMMarketWS extends BaseWS {\n constructor(baseStreamUrl = 'wss://dstream.binance.com/stream') {\n super({ baseStreamUrl });\n }\n\n kline(symbol: string, interval: KlineInterval): string {\n return `${symbol.toLowerCase()}@kline_${interval}`;\n }\n\n continuousKline(pair: string, contractType: CoinMContractType, interval: KlineInterval): string {\n return `${pair.toLowerCase()}_${contractType}@continuousKline_${interval}`;\n }\n\n indexPriceKline(pair: string, interval: KlineInterval): string {\n return `${pair.toLowerCase()}@indexPriceKline_${interval}`;\n }\n\n markPriceKline(symbol: string, interval: KlineInterval): string {\n return `${symbol.toLowerCase()}@markPriceKline_${interval}`;\n }\n\n aggTrade(symbol: string): string {\n return `${symbol.toLowerCase()}@aggTrade`;\n }\n\n trade(symbol: string): string {\n return `${symbol.toLowerCase()}@trade`;\n }\n\n depth(symbol: string, level: 5 | 10 | 20 = 20): string {\n return `${symbol.toLowerCase()}@depth${level}`;\n }\n\n depthDiff(symbol: string): string {\n return `${symbol.toLowerCase()}@depth`;\n }\n\n depthDiffSpeed(symbol: string, updateSpeed: '100ms' | '250ms' | '500ms'): string {\n return `${symbol.toLowerCase()}@depth@${updateSpeed}`;\n }\n\n ticker(symbol: string): string {\n return `${symbol.toLowerCase()}@ticker`;\n }\n\n allMarketTickers(): string {\n return '!ticker@arr';\n }\n\n miniTicker(symbol: string): string {\n return `${symbol.toLowerCase()}@miniTicker`;\n }\n\n allMiniTickers(): string {\n return '!miniTicker@arr';\n }\n\n bookTicker(symbol: string): string {\n return `${symbol.toLowerCase()}@bookTicker`;\n }\n\n allBookTickers(): string {\n return '!bookTicker';\n }\n\n markPrice(symbol: string, updateSpeed: CoinMMarkPriceSpeed = '3s'): string {\n return `${symbol.toLowerCase()}@markPrice@${updateSpeed}`;\n }\n\n markPriceForPair(pair: string, updateSpeed: CoinMMarkPriceSpeed = '3s'): string {\n return `${pair.toLowerCase()}@markPrice@${updateSpeed}`;\n }\n\n liquidationOrder(symbol: string): string {\n return `${symbol.toLowerCase()}@forceOrder`;\n }\n\n allLiquidationOrders(): string {\n return '!forceOrder@arr';\n }\n}\n","import { EventEmitter } from 'node:events';\nimport WebSocket, { type RawData } from 'ws';\nimport {\n parseUserDataEvent,\n type UserDataEvent,\n} from '../types/userdata.types.js';\n\nexport interface CoinMUserWSOptions {\n baseUserUrl: string;\n getListenKey: () => string | null;\n reconnectDelayMs?: number;\n maxReconnectDelayMs?: number;\n}\n\n/**\n * COIN-M user data events (ACCOUNT_UPDATE, ORDER_TRADE_UPDATE, MARGIN_CALL) share the same\n * event shape as USD-M's, so the USD-M parser/types are reused as-is.\n */\nexport class CoinMUserWS extends EventEmitter {\n private ws: WebSocket | null = null;\n private reconnectAttempt = 0;\n private closedByUser = false;\n\n constructor(private readonly options: CoinMUserWSOptions) {\n super();\n }\n\n connect(): void {\n const listenKey = this.options.getListenKey();\n if (!listenKey) {\n this.emit('error', new Error('No listenKey available for COIN-M user data stream'));\n return;\n }\n this.closedByUser = false;\n const url = `${this.options.baseUserUrl}/${listenKey}`;\n this.ws = new WebSocket(url);\n\n this.ws.on('open', () => {\n this.reconnectAttempt = 0;\n this.emit('open');\n });\n\n this.ws.on('message', (raw: RawData) => {\n this.handleMessage(raw.toString());\n });\n\n this.ws.on('close', () => {\n this.emit('close');\n if (!this.closedByUser) this.scheduleReconnect();\n });\n\n this.ws.on('error', (err: Error) => {\n this.emit('error', err);\n });\n }\n\n close(): void {\n this.closedByUser = true;\n this.ws?.close();\n }\n\n reconnect(): void {\n if (this.ws?.readyState === WebSocket.OPEN) this.ws.close();\n this.reconnectAttempt = 0;\n if (!this.closedByUser) this.connect();\n }\n\n resetReconnectAttempts(): void {\n this.reconnectAttempt = 0;\n }\n\n private handleMessage(raw: string): void {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n return;\n }\n try {\n const event: UserDataEvent = parseUserDataEvent(parsed);\n this.emit(event.e, event);\n this.emit('userData', event);\n } catch (err) {\n this.emit('error', err);\n }\n }\n\n private scheduleReconnect(): void {\n const base = this.options.reconnectDelayMs ?? 1000;\n const max = this.options.maxReconnectDelayMs ?? 30_000;\n const delay = Math.min(base * 2 ** this.reconnectAttempt, max);\n this.reconnectAttempt += 1;\n setTimeout(() => {\n if (!this.closedByUser) this.connect();\n }, delay);\n }\n}\n","import { randomUUID } from 'node:crypto';\nimport WebSocket from 'ws';\nimport { NetworkError } from '../errors/index.js';\nimport type { WsApiResponse } from '../types/userdata.types.js';\nimport { Signer, type SignatureAlgorithm } from '../client/Signer.js';\n\nexport interface WsApiOptions {\n baseUrl: string;\n apiKey?: string;\n apiSecret?: string;\n /** PEM-encoded Ed25519 or RSA private key. When set, requests are signed with it instead of HMAC. */\n privateKey?: string | Buffer;\n /** Defaults to 'ED25519' when privateKey is set, otherwise 'HMAC'. */\n signatureAlgorithm?: SignatureAlgorithm;\n recvWindow?: number;\n timeoutMs?: number;\n}\n\ninterface WsApiRequestParams {\n id?: string;\n [key: string]: unknown;\n}\n\nfunction buildQueryString(data: Record<string, unknown>): string {\n return Object.entries(data)\n .filter(([, val]) => val !== undefined && val !== null)\n .map(([key, val]) => `${key}=${encodeURIComponent(String(val))}`)\n .join('&');\n}\n\nexport class WsApi {\n private readonly signer: Signer;\n\n constructor(private readonly options: WsApiOptions) {\n this.signer = new Signer({\n algorithm: options.signatureAlgorithm,\n apiSecret: options.apiSecret,\n privateKey: options.privateKey,\n });\n }\n\n async request(\n method: string,\n params: WsApiRequestParams = {},\n options?: { signed?: boolean },\n ): Promise<WsApiResponse> {\n const { apiKey } = this.options;\n const signed = options?.signed ?? true;\n const { id = randomUUID(), ...methodParams } = params;\n const requestParams: Record<string, unknown> = { ...methodParams };\n\n if (signed) {\n if (!apiKey || !this.signer.canSign()) {\n throw new Error('API key and secret (or privateKey) required for signed WebSocket API requests');\n }\n requestParams.apiKey = apiKey;\n requestParams.timestamp = Date.now();\n requestParams.recvWindow = this.options.recvWindow ?? 5000;\n const queryString = buildQueryString(requestParams);\n requestParams.signature = this.signer.sign(queryString);\n }\n\n return new Promise((resolve, reject) => {\n const ws = new WebSocket(this.options.baseUrl);\n const timeout = setTimeout(() => {\n ws.close();\n reject(new NetworkError(`WebSocket API request timed out: ${method}`));\n }, this.options.timeoutMs ?? 15_000);\n\n ws.on('open', () => ws.send(JSON.stringify({ id, method, params: requestParams })));\n ws.on('message', (raw: Buffer) => {\n clearTimeout(timeout);\n ws.close();\n try {\n const parsed = JSON.parse(raw.toString()) as WsApiResponse;\n if (parsed.status >= 400) {\n reject(new Error(parsed.error?.msg ?? `WebSocket API error: ${method}`));\n } else {\n resolve(parsed);\n }\n } catch (err) {\n reject(new NetworkError('Invalid WebSocket API JSON payload', err));\n }\n });\n ws.on('error', (err: Error) => {\n clearTimeout(timeout);\n reject(new NetworkError(err.message, err));\n });\n });\n }\n\n placeOrder(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('order.place', params);\n }\n\n cancelOrder(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('order.cancel', params);\n }\n\n modifyOrder(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('order.modify', params);\n }\n\n placeAlgoOrder(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('algoOrder.place', params);\n }\n\n cancelAlgoOrder(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('algoOrder.cancel', params);\n }\n\n orderStatus(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('order.status', params);\n }\n\n placeOrderList(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('orderList.place', params);\n }\n\n cancelOrderList(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('orderList.cancel', params);\n }\n\n orderListStatus(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('orderList.status', params);\n }\n\n accountStatus(): Promise<WsApiResponse> {\n return this.request('account.status', {});\n }\n\n accountPosition(params: Record<string, unknown> = {}): Promise<WsApiResponse> {\n return this.request('account.position', params);\n }\n\n userDataStreamStart(): Promise<WsApiResponse> {\n return this.request('userDataStream.start', {});\n }\n\n userDataStreamPing(listenKey: string): Promise<WsApiResponse> {\n return this.request('userDataStream.ping', { listenKey });\n }\n\n userDataStreamStop(listenKey: string): Promise<WsApiResponse> {\n return this.request('userDataStream.stop', { listenKey });\n }\n\n // ---- Public market data (no signature required) ----\n\n time(): Promise<WsApiResponse> {\n return this.request('time', {}, { signed: false });\n }\n\n exchangeInfo(params: Record<string, unknown> = {}): Promise<WsApiResponse> {\n return this.request('exchangeInfo', params, { signed: false });\n }\n\n klines(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('klines', params, { signed: false });\n }\n\n aggTrades(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('aggTrades', params, { signed: false });\n }\n\n trades(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('trades', params, { signed: false });\n }\n\n depth(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('depth', params, { signed: false });\n }\n\n avgPrice(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('avgPrice', params, { signed: false });\n }\n\n tickerPrice(params: Record<string, unknown> = {}): Promise<WsApiResponse> {\n return this.request('ticker.price', params, { signed: false });\n }\n\n tickerBookTicker(params: Record<string, unknown> = {}): Promise<WsApiResponse> {\n return this.request('ticker.bookTicker', params, { signed: false });\n }\n\n ticker24hr(params: Record<string, unknown> = {}): Promise<WsApiResponse> {\n return this.request('ticker.24hr', params, { signed: false });\n }\n}\n","import { randomUUID } from 'node:crypto';\nimport WebSocket from 'ws';\nimport { NetworkError } from '../errors/index.js';\nimport type { WsApiResponse } from '../types/userdata.types.js';\nimport { Signer, type SignatureAlgorithm } from '../client/Signer.js';\n\nexport interface SpotWsApiOptions {\n baseUrl: string;\n apiKey?: string;\n apiSecret?: string;\n /** PEM-encoded Ed25519 or RSA private key. When set, requests are signed with it instead of HMAC. */\n privateKey?: string | Buffer;\n /** Defaults to 'ED25519' when privateKey is set, otherwise 'HMAC'. */\n signatureAlgorithm?: SignatureAlgorithm;\n recvWindow?: number;\n timeoutMs?: number;\n}\n\ninterface WsApiRequestParams {\n id?: string;\n [key: string]: unknown;\n}\n\nfunction buildQueryString(data: Record<string, unknown>): string {\n return Object.entries(data)\n .filter(([, val]) => val !== undefined && val !== null)\n .map(([key, val]) => `${key}=${encodeURIComponent(String(val))}`)\n .join('&');\n}\n\n/**\n * Spot WebSocket API (`wss://ws-api.binance.com:443/ws-api/v3`). Same request/response envelope\n * as the futures {@link WsApi}, but Spot uses its own method identifiers (`trades.recent` rather\n * than `trades`, `ticker.book` rather than `ticker.bookTicker`, etc.) — hence a separate class\n * rather than pointing WsApi at a different host.\n */\nexport class SpotWsApi {\n private readonly signer: Signer;\n\n constructor(private readonly options: SpotWsApiOptions) {\n this.signer = new Signer({\n algorithm: options.signatureAlgorithm,\n apiSecret: options.apiSecret,\n privateKey: options.privateKey,\n });\n }\n\n async request(\n method: string,\n params: WsApiRequestParams = {},\n options?: { signed?: boolean },\n ): Promise<WsApiResponse> {\n const { apiKey } = this.options;\n const signed = options?.signed ?? true;\n const { id = randomUUID(), ...methodParams } = params;\n const requestParams: Record<string, unknown> = { ...methodParams };\n\n if (signed) {\n if (!apiKey || !this.signer.canSign()) {\n throw new Error('API key and secret (or privateKey) required for signed WebSocket API requests');\n }\n requestParams.apiKey = apiKey;\n requestParams.timestamp = Date.now();\n requestParams.recvWindow = this.options.recvWindow ?? 5000;\n const queryString = buildQueryString(requestParams);\n requestParams.signature = this.signer.sign(queryString);\n }\n\n return new Promise((resolve, reject) => {\n const ws = new WebSocket(this.options.baseUrl);\n const timeout = setTimeout(() => {\n ws.close();\n reject(new NetworkError(`WebSocket API request timed out: ${method}`));\n }, this.options.timeoutMs ?? 15_000);\n\n ws.on('open', () => ws.send(JSON.stringify({ id, method, params: requestParams })));\n ws.on('message', (raw: Buffer) => {\n clearTimeout(timeout);\n ws.close();\n try {\n const parsed = JSON.parse(raw.toString()) as WsApiResponse;\n if (parsed.status >= 400) {\n reject(new Error(parsed.error?.msg ?? `WebSocket API error: ${method}`));\n } else {\n resolve(parsed);\n }\n } catch (err) {\n reject(new NetworkError('Invalid WebSocket API JSON payload', err));\n }\n });\n ws.on('error', (err: Error) => {\n clearTimeout(timeout);\n reject(new NetworkError(err.message, err));\n });\n });\n }\n\n // ---- Trading (signed) ----\n\n placeOrder(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('order.place', params);\n }\n\n testOrder(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('order.test', params);\n }\n\n cancelOrder(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('order.cancel', params);\n }\n\n cancelReplaceOrder(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('order.cancelReplace', params);\n }\n\n orderStatus(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('order.status', params);\n }\n\n openOrdersStatus(params: Record<string, unknown> = {}): Promise<WsApiResponse> {\n return this.request('openOrders.status', params);\n }\n\n cancelOpenOrders(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('openOrders.cancelAll', params);\n }\n\n placeOrderList(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('orderList.place', params);\n }\n\n cancelOrderList(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('orderList.cancel', params);\n }\n\n orderListStatus(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('orderList.status', params);\n }\n\n openOrderListsStatus(): Promise<WsApiResponse> {\n return this.request('openOrderLists.status', {});\n }\n\n // ---- Account (signed) ----\n\n accountStatus(): Promise<WsApiResponse> {\n return this.request('account.status', {});\n }\n\n accountCommission(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('account.commission', params);\n }\n\n accountRateLimitsOrders(): Promise<WsApiResponse> {\n return this.request('account.rateLimits.orders', {});\n }\n\n allOrders(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('allOrders', params);\n }\n\n allOrderLists(params: Record<string, unknown> = {}): Promise<WsApiResponse> {\n return this.request('allOrderLists', params);\n }\n\n myTrades(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('myTrades', params);\n }\n\n // ---- User data stream (managed listen keys) ----\n\n userDataStreamStart(): Promise<WsApiResponse> {\n return this.request('userDataStream.start', {});\n }\n\n userDataStreamPing(listenKey: string): Promise<WsApiResponse> {\n return this.request('userDataStream.ping', { listenKey });\n }\n\n userDataStreamStop(listenKey: string): Promise<WsApiResponse> {\n return this.request('userDataStream.stop', { listenKey });\n }\n\n // ---- Public market data (no signature required) ----\n\n ping(): Promise<WsApiResponse> {\n return this.request('ping', {}, { signed: false });\n }\n\n time(): Promise<WsApiResponse> {\n return this.request('time', {}, { signed: false });\n }\n\n exchangeInfo(params: Record<string, unknown> = {}): Promise<WsApiResponse> {\n return this.request('exchangeInfo', params, { signed: false });\n }\n\n depth(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('depth', params, { signed: false });\n }\n\n recentTrades(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('trades.recent', params, { signed: false });\n }\n\n historicalTrades(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('trades.historical', params, { signed: false });\n }\n\n aggTrades(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('trades.aggregate', params, { signed: false });\n }\n\n klines(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('klines', params, { signed: false });\n }\n\n uiKlines(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('uiKlines', params, { signed: false });\n }\n\n avgPrice(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('avgPrice', params, { signed: false });\n }\n\n ticker24hr(params: Record<string, unknown> = {}): Promise<WsApiResponse> {\n return this.request('ticker.24hr', params, { signed: false });\n }\n\n tickerTradingDay(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('ticker.tradingDay', params, { signed: false });\n }\n\n tickerPrice(params: Record<string, unknown> = {}): Promise<WsApiResponse> {\n return this.request('ticker.price', params, { signed: false });\n }\n\n tickerBook(params: Record<string, unknown> = {}): Promise<WsApiResponse> {\n return this.request('ticker.book', params, { signed: false });\n }\n\n ticker(params: Record<string, unknown>): Promise<WsApiResponse> {\n return this.request('ticker', params, { signed: false });\n }\n}\n","import type { AxiosRequestConfig } from 'axios';\nimport { HttpClient, type SignatureAlgorithm } from './HttpClient.js';\nimport type { RateLimitUsage } from './RateLimitTracker.js';\nimport { TradingPolicy, type TradingPolicyOptions } from './TradingPolicy.js';\nimport { resolveEnvironment } from './endpoints.js';\nimport { FuturesData } from '../resources/FuturesData.js';\nimport { FuturesMarket } from '../resources/FuturesMarket.js';\nimport { SpotMarket } from '../resources/SpotMarket.js';\nimport { SpotAccount, SpotTrading } from '../resources/SpotTrading.js';\nimport { SpotUserDataStream } from '../resources/SpotUserDataStream.js';\nimport { FuturesAccount } from '../resources/FuturesAccount.js';\nimport { FuturesTrading } from '../resources/FuturesTrading.js';\nimport { FuturesOps } from '../resources/FuturesOps.js';\nimport { UserDataStream } from '../resources/UserDataStream.js';\nimport { CoinMMarket } from '../resources/CoinMMarket.js';\nimport { CoinMAccount } from '../resources/CoinMAccount.js';\nimport { CoinMTrading } from '../resources/CoinMTrading.js';\nimport { CoinMUserDataStream } from '../resources/CoinMUserDataStream.js';\nimport { MarginAccount, MarginTrading } from '../resources/Margin.js';\nimport { Wallet } from '../resources/Wallet.js';\nimport { SubAccount } from '../resources/SubAccount.js';\nimport { FuturesMarketWS } from '../ws/FuturesMarketWS.js';\nimport { SpotMarketWS } from '../ws/SpotMarketWS.js';\nimport { SpotUserWS } from '../ws/SpotUserWS.js';\nimport { FuturesUserWS } from '../ws/FuturesUserWS.js';\nimport { CoinMMarketWS } from '../ws/CoinMMarketWS.js';\nimport { CoinMUserWS } from '../ws/CoinMUserWS.js';\nimport { WsApi } from '../ws/WsApi.js';\nimport { SpotWsApi } from '../ws/SpotWsApi.js';\n\nexport interface BinanceClientOptions {\n apiKey?: string;\n apiSecret?: string;\n /** PEM-encoded Ed25519 or RSA private key. When set, requests are signed with it instead of HMAC. */\n privateKey?: string | Buffer;\n /** Defaults to 'ED25519' when privateKey is set, otherwise 'HMAC'. */\n signatureAlgorithm?: SignatureAlgorithm;\n testnet?: boolean;\n demo?: boolean;\n recvWindow?: number;\n apiBase?: string;\n wsBase?: string;\n wsUserBase?: string;\n wsApiBase?: string;\n dapiBase?: string;\n wsSpotApiBase?: string;\n wsDapiBase?: string;\n timeoutMs?: number;\n maxRetries?: number;\n /** @deprecated unused; superseded by header-based tracking (rateLimitWeightPerMinute/rateLimitSafetyMargin). */\n rateLimitTokensPerSecond?: number;\n /** @deprecated unused; superseded by header-based tracking (rateLimitWeightPerMinute/rateLimitSafetyMargin). */\n rateLimitMaxTokens?: number;\n /** Assumed per-minute IP weight ceiling used to preempt -1003 bans. Binance's default is 6000 for most REST hosts. */\n rateLimitWeightPerMinute?: number;\n /** Fraction of rateLimitWeightPerMinute at which requests are delayed until the next minute window. Set >=1 to disable. */\n rateLimitSafetyMargin?: number;\n retryBaseDelayMs?: number;\n retryMaxDelayMs?: number;\n /** Custom keep-alive/https agent, e.g. for corporate proxies or connection pooling. */\n httpsAgent?: AxiosRequestConfig['httpsAgent'];\n /** Axios proxy configuration. */\n proxy?: AxiosRequestConfig['proxy'];\n /**\n * Client-side guardrails for autonomous/LLM-driven callers: dry run, read-only, symbol\n * allowlist, per-order notional cap, withdrawal and transfer switches. Omit for no policy\n * (all requests permitted). Opting in denies withdrawals unless explicitly allowed.\n */\n safety?: TradingPolicyOptions;\n}\n\nexport class BinanceClient {\n readonly spot: {\n market: SpotMarket;\n account: SpotAccount;\n trading: SpotTrading;\n userStream: SpotUserDataStream;\n ws: SpotMarketWS;\n wsUser: SpotUserWS;\n wsApi: SpotWsApi;\n };\n readonly futures: {\n market: FuturesMarket;\n data: FuturesData;\n account: FuturesAccount;\n trading: FuturesTrading;\n ops: FuturesOps;\n userStream: UserDataStream;\n ws: FuturesMarketWS;\n wsUser: FuturesUserWS;\n wsApi: WsApi;\n };\n readonly coinm: {\n market: CoinMMarket;\n account: CoinMAccount;\n trading: CoinMTrading;\n userStream: CoinMUserDataStream;\n ws: CoinMMarketWS;\n wsUser: CoinMUserWS;\n };\n readonly margin: {\n account: MarginAccount;\n trading: MarginTrading;\n };\n readonly wallet: Wallet;\n readonly subaccount: SubAccount;\n /** The active guardrail policy, or undefined when no `safety` config was supplied. */\n readonly policy?: TradingPolicy;\n\n private readonly authHttp: HttpClient;\n private readonly spotHttp: HttpClient;\n private readonly dapiHttp: HttpClient;\n private readonly sapiHttp: HttpClient;\n private listenKeyValue: string | null = null;\n private keepAliveInterval: NodeJS.Timeout | null = null;\n private spotListenKeyValue: string | null = null;\n private spotKeepAliveInterval: NodeJS.Timeout | null = null;\n private coinmListenKeyValue: string | null = null;\n private coinmKeepAliveInterval: NodeJS.Timeout | null = null;\n\n static nowSeconds(): number {\n return Math.floor(Date.now() / 1000);\n }\n\n static buildPair(base: string, target: string): string {\n return `${base}${target}`.toUpperCase();\n }\n\n static parsePair(pair: string): { base: string; target: string } | null {\n const match = pair.match(/^([A-Z0-9]+)(USDT|USDC|BUSD|BTC|ETH|BNB)$/);\n if (!match) return null;\n return { base: match[1] as string, target: match[2] as string };\n }\n\n static calculateLiquidationPrice(entryPrice: number, leverage: number, side: 'buy' | 'sell', mm = 0.005): number {\n const dir = side === 'buy' ? 1 : -1;\n return dir === 1\n ? entryPrice * (1 - 1 / leverage + mm)\n : entryPrice * (1 + 1 / leverage - mm);\n }\n\n constructor(options: BinanceClientOptions = {}) {\n const { endpoints } = resolveEnvironment(options);\n this.policy = options.safety ? new TradingPolicy(options.safety) : undefined;\n const httpOptions = {\n policy: this.policy,\n apiKey: options.apiKey,\n apiSecret: options.apiSecret,\n privateKey: options.privateKey,\n signatureAlgorithm: options.signatureAlgorithm,\n recvWindow: options.recvWindow ?? 5000,\n timeoutMs: options.timeoutMs ?? 15_000,\n maxRetries: options.maxRetries ?? 3,\n retryBaseDelayMs: options.retryBaseDelayMs,\n retryMaxDelayMs: options.retryMaxDelayMs,\n rateLimitWeightPerMinute: options.rateLimitWeightPerMinute,\n rateLimitSafetyMargin: options.rateLimitSafetyMargin,\n httpsAgent: options.httpsAgent,\n proxy: options.proxy,\n };\n\n this.authHttp = new HttpClient({ baseURL: endpoints.restRoot, ...httpOptions });\n\n this.spotHttp = new HttpClient({ baseURL: endpoints.restSpot, ...httpOptions });\n const spotHttp = this.spotHttp;\n this.spot = {\n market: new SpotMarket(spotHttp),\n account: new SpotAccount(spotHttp),\n trading: new SpotTrading(spotHttp),\n userStream: new SpotUserDataStream(spotHttp),\n ws: new SpotMarketWS(endpoints.wsSpotMarket),\n wsUser: new SpotUserWS({\n baseUserUrl: endpoints.wsSpotUser,\n getListenKey: () => this.spotListenKeyValue,\n }),\n wsApi: new SpotWsApi({\n baseUrl: endpoints.wsSpotApi,\n apiKey: options.apiKey,\n apiSecret: options.apiSecret,\n privateKey: options.privateKey,\n signatureAlgorithm: options.signatureAlgorithm,\n recvWindow: options.recvWindow,\n }),\n };\n\n const futuresMarket = new FuturesMarket(\n new HttpClient({ baseURL: endpoints.restFapi, ...httpOptions }),\n endpoints.restRoot,\n );\n const futuresData = new FuturesData({\n restFapi: endpoints.restFapi,\n restFuturesData: endpoints.restFuturesData,\n ...httpOptions,\n });\n const futuresAccount = new FuturesAccount(this.authHttp);\n const futuresTrading = new FuturesTrading(this.authHttp);\n\n this.futures = {\n market: futuresMarket,\n data: futuresData,\n account: futuresAccount,\n trading: futuresTrading,\n ops: new FuturesOps(futuresMarket, futuresData, futuresAccount, futuresTrading),\n userStream: new UserDataStream(this.authHttp),\n ws: new FuturesMarketWS(endpoints.wsMarket),\n wsUser: new FuturesUserWS({\n baseUserUrl: endpoints.wsUser,\n getListenKey: () => this.listenKeyValue,\n }),\n wsApi: new WsApi({\n baseUrl: endpoints.wsApi,\n apiKey: options.apiKey,\n apiSecret: options.apiSecret,\n privateKey: options.privateKey,\n signatureAlgorithm: options.signatureAlgorithm,\n recvWindow: options.recvWindow,\n }),\n };\n\n this.dapiHttp = new HttpClient({ baseURL: endpoints.restDapiRoot, ...httpOptions });\n this.coinm = {\n market: new CoinMMarket(new HttpClient({ baseURL: endpoints.restDapi, ...httpOptions })),\n account: new CoinMAccount(this.dapiHttp),\n trading: new CoinMTrading(this.dapiHttp),\n userStream: new CoinMUserDataStream(this.dapiHttp),\n ws: new CoinMMarketWS(endpoints.wsDapiMarket),\n wsUser: new CoinMUserWS({\n baseUserUrl: endpoints.wsDapiUser,\n getListenKey: () => this.coinmListenKeyValue,\n }),\n };\n\n this.sapiHttp = new HttpClient({ baseURL: endpoints.restApiRoot, ...httpOptions });\n this.margin = {\n account: new MarginAccount(this.sapiHttp),\n trading: new MarginTrading(this.sapiHttp),\n };\n this.wallet = new Wallet(this.sapiHttp);\n this.subaccount = new SubAccount(this.sapiHttp);\n }\n\n /**\n * Syncs local time against each REST host's server clock and stores the offset, applied to\n * every subsequent signed request's `timestamp` param. Call this once after construction to\n * mitigate `-1021` errors caused by local clock drift.\n */\n async syncTime(): Promise<void> {\n await Promise.all([\n this.authHttp.syncTime('/fapi/v1/time'),\n this.spotHttp.syncTime('/time'),\n this.dapiHttp.syncTime('/dapi/v1/time'),\n this.sapiHttp.syncTime('/api/v3/time'),\n ]);\n }\n\n /**\n * Snapshot of the most recently observed `X-MBX-USED-WEIGHT-*` / `X-MBX-ORDER-COUNT-*`\n * response headers, per REST host. Each host tracks its own weight budget independently.\n */\n getRateLimitUsage(): {\n spot: RateLimitUsage;\n futures: RateLimitUsage;\n coinm: RateLimitUsage;\n sapi: RateLimitUsage;\n } {\n return {\n spot: this.spotHttp.getRateLimitUsage(),\n futures: this.authHttp.getRateLimitUsage(),\n coinm: this.dapiHttp.getRateLimitUsage(),\n sapi: this.sapiHttp.getRateLimitUsage(),\n };\n }\n\n async startUserStream(): Promise<string> {\n const { listenKey } = await this.futures.userStream.createListenKey();\n this.listenKeyValue = listenKey;\n this.keepAliveInterval = setInterval(() => {\n this.futures.userStream.keepAliveListenKey().catch(() => {\n /* listenKey keep-alive failures are retried on the next tick */\n });\n }, 30 * 60 * 1000);\n this.futures.wsUser.connect();\n return listenKey;\n }\n\n closeUserStream(): void {\n if (this.keepAliveInterval) clearInterval(this.keepAliveInterval);\n this.keepAliveInterval = null;\n this.futures.wsUser.close();\n this.futures.userStream.closeListenKey().catch(() => {\n /* best-effort cleanup */\n });\n this.listenKeyValue = null;\n }\n\n async startSpotUserStream(): Promise<string> {\n const { listenKey } = await this.spot.userStream.createListenKey();\n this.spotListenKeyValue = listenKey;\n this.spotKeepAliveInterval = setInterval(() => {\n this.spot.userStream.keepAliveListenKey().catch(() => {\n /* spot listenKey keep-alive failures are retried on the next tick */\n });\n }, 30 * 60 * 1000);\n this.spot.wsUser.connect();\n return listenKey;\n }\n\n closeSpotUserStream(): void {\n if (this.spotKeepAliveInterval) clearInterval(this.spotKeepAliveInterval);\n this.spotKeepAliveInterval = null;\n this.spot.wsUser.close();\n this.spot.userStream.closeListenKey().catch(() => {\n /* best-effort cleanup */\n });\n this.spotListenKeyValue = null;\n }\n\n async startCoinMUserStream(): Promise<string> {\n const { listenKey } = await this.coinm.userStream.createListenKey();\n this.coinmListenKeyValue = listenKey;\n this.coinmKeepAliveInterval = setInterval(() => {\n this.coinm.userStream.keepAliveListenKey().catch(() => {\n /* COIN-M listenKey keep-alive failures are retried on the next tick */\n });\n }, 30 * 60 * 1000);\n this.coinm.wsUser.connect();\n return listenKey;\n }\n\n closeCoinMUserStream(): void {\n if (this.coinmKeepAliveInterval) clearInterval(this.coinmKeepAliveInterval);\n this.coinmKeepAliveInterval = null;\n this.coinm.wsUser.close();\n this.coinm.userStream.closeListenKey().catch(() => {\n /* best-effort cleanup */\n });\n this.coinmListenKeyValue = null;\n }\n\n closeAllWebSockets(): void {\n this.futures.ws.close();\n this.futures.wsUser.close();\n this.spot.ws.close();\n this.spot.wsUser.close();\n this.coinm.ws.close();\n this.coinm.wsUser.close();\n this.closeUserStream();\n this.closeSpotUserStream();\n this.closeCoinMUserStream();\n }\n\n reconnectWebSocket(target: 'ws' | 'wsUser' | 'spot' | 'spotUser' | 'coinm' | 'coinmUser'): void {\n if (target === 'ws') this.futures.ws.reconnect();\n else if (target === 'wsUser') this.futures.wsUser.reconnect();\n else if (target === 'spot') this.spot.ws.reconnect();\n else if (target === 'spotUser') this.spot.wsUser.reconnect();\n else if (target === 'coinm') this.coinm.ws.reconnect();\n else this.coinm.wsUser.reconnect();\n }\n\n resetReconnectAttempts(): void {\n this.futures.ws.resetReconnectAttempts();\n this.futures.wsUser.resetReconnectAttempts();\n this.spot.ws.resetReconnectAttempts();\n this.spot.wsUser.resetReconnectAttempts();\n this.coinm.ws.resetReconnectAttempts();\n this.coinm.wsUser.resetReconnectAttempts();\n }\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { BinanceClient } from '../client/BinanceClient.js';\nimport { createFuturesToolkit } from '../tools/index.js';\n\nexport function createBinanceMcpServer(client: BinanceClient): McpServer {\n const server = new McpServer({ name: 'binance-sdk', version: '2.0.0' });\n const toolkit = createFuturesToolkit(client);\n\n toolkit.tools.forEach((tool) => {\n server.registerTool(tool.name, { description: tool.description, inputSchema: tool.inputSchema }, async (args) => ({\n content: [{ type: 'text', text: String(await tool.handler(args, { env: 'live', isSigned: true })) }],\n }));\n });\n\n registerResources(server, client);\n\n return server;\n}\n\n/**\n * Reference data exposed as MCP resources rather than tools: hosts can attach these\n * to context directly, without the model having to decide to call something first.\n */\nfunction registerResources(server: McpServer, client: BinanceClient): void {\n const json = (uri: string, data: unknown) => ({\n contents: [{ uri, mimeType: 'application/json', text: JSON.stringify(data, null, 2) }],\n });\n\n server.registerResource(\n 'futures-symbols',\n 'binance://futures/symbols',\n {\n title: 'Futures Trading Symbols',\n description: 'Every tradeable USD-M futures symbol with its contract type and status',\n mimeType: 'application/json',\n },\n async (uri) => {\n const info = await client.futures.market.exchangeInfo();\n return json(uri.href, info.symbols);\n },\n );\n\n server.registerResource(\n 'futures-premium-index',\n 'binance://futures/premium-index',\n {\n title: 'Premium Index',\n description: 'Mark price, index price and funding rate across all USD-M pairs',\n mimeType: 'application/json',\n },\n async (uri) => json(uri.href, await client.futures.data.assetIndex()),\n );\n\n server.registerResource(\n 'spot-symbols',\n 'binance://spot/symbols',\n {\n title: 'Spot Trading Symbols',\n description: 'Every tradeable Spot symbol with its status, base/quote assets and permissions',\n mimeType: 'application/json',\n },\n async (uri) => {\n const info = await client.spot.market.exchangeInfo();\n return json(uri.href, info.symbols);\n },\n );\n}\n","import { z } from 'zod';\nimport type { BinanceClient } from '../client/BinanceClient.js';\nimport type { ToolDefinition } from './types.js';\nimport { textResult, normalizeSymbol } from './types.js';\n\nconst optionalSymbol = z.string().min(1).describe('USD-M pair, e.g. BTCUSDT').optional();\nconst limit = z.number().int().positive().max(1000).default(100);\nconst startTime = z.number().int().positive().optional();\nconst endTime = z.number().int().positive().optional();\n\nexport function accountTools(client: BinanceClient): ToolDefinition[] {\n const a = client.futures.account;\n\n return [\n {\n name: 'futures_balance',\n description: 'Get futures account balances (v3): asset, wallet balance, unrealized profit, margin balance, available balance (signed).',\n inputSchema: z.object({}),\n handler: async () => textResult(await a.balanceV3()),\n },\n {\n name: 'futures_account',\n description: 'Get full account information (v3): total wallet/margin balance, unrealized profit, available balance, assets & positions (signed).',\n inputSchema: z.object({}),\n handler: async () => textResult(await a.accountV3()),\n },\n {\n name: 'futures_balance_v2',\n description: 'Get futures account balance (v2 legacy) per asset (signed).',\n inputSchema: z.object({}),\n handler: async () => textResult(await a.balance()),\n },\n {\n name: 'futures_account_v2',\n description: 'Get futures account information (v2 legacy) (signed).',\n inputSchema: z.object({}),\n handler: async () => textResult(await a.account()),\n },\n {\n name: 'futures_position_risk',\n description: 'Get current open positions (v3): symbol, side, size, entry price, mark price, liquidation price, leverage, unrealized PnL, margin (signed).',\n inputSchema: z.object({ symbol: optionalSymbol }),\n handler: async ({ symbol }) => textResult(await a.positionRiskV3(symbol ? normalizeSymbol(symbol) : undefined)),\n },\n {\n name: 'futures_income_history',\n description: 'Get futures income history (realized PnL, funding fees, commissions, transfers, insurance clearing). incomeType examples: TRANSFER, REALIZED_PNL, FUNDING_FEE, COMMISSION, INSURANCE_CLEAR, REFERRAL_KICKBACK (signed).',\n inputSchema: z.object({ symbol: optionalSymbol, incomeType: z.string().optional().describe('e.g. TRANSFER, REALIZED_PNL, FUNDING_FEE, COMMISSION'), startTime, endTime, limit: limit.default(100) }),\n handler: async ({ symbol, incomeType, startTime, endTime, limit }) =>\n textResult(await a.incomeHistory({ symbol: symbol ? normalizeSymbol(symbol) : undefined, incomeType, startTime, endTime, limit: Number(limit) })),\n },\n {\n name: 'futures_user_trades',\n description: 'Get account trade list (filled trades) for a symbol with optional time range (signed).',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'), startTime, endTime, limit: limit.default(100), fromId: z.number().int().positive().optional() }),\n handler: async ({ symbol, startTime, endTime, limit, fromId }) =>\n textResult(await a.userTrades({ symbol: normalizeSymbol(symbol), startTime, endTime, limit: Number(limit), fromId })),\n },\n {\n name: 'futures_leverage_brackets',\n description: 'Get notional and leverage brackets for one symbol or all: tier caps, maintenance margin rate, max leverage (signed).',\n inputSchema: z.object({ symbol: optionalSymbol }),\n handler: async ({ symbol }) => textResult(await a.leverageBrackets(symbol ? normalizeSymbol(symbol) : undefined)),\n },\n {\n name: 'futures_commission_rate',\n description: 'Get user commission rate (taker & maker fee) for a symbol (signed).',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. ETHUSDT') }),\n handler: async ({ symbol }) => textResult(await a.commissionRate(normalizeSymbol(symbol))),\n },\n {\n name: 'futures_multi_assets_mode',\n description: 'Get current multi-assets margin mode status (signed).',\n inputSchema: z.object({}),\n handler: async () => textResult(await a.multiAssetsMargin()),\n },\n {\n name: 'futures_set_multi_assets_mode',\n description: 'Enable or disable multi-assets mode (signed; 7-day cooldown between toggles).',\n inputSchema: z.object({ enabled: z.boolean().describe('true to enable, false to disable') }),\n handler: async ({ enabled }) => textResult(await a.setMultiAssetsMargin(enabled)),\n },\n {\n name: 'futures_fee_burn_status',\n description: 'Get BNB fee burn status for futures trades (signed).',\n inputSchema: z.object({}),\n handler: async () => textResult(await a.feeBurnStatus()),\n },\n {\n name: 'futures_set_fee_burn',\n description: 'Toggle BNB fee burn on futures trades (signed).',\n inputSchema: z.object({ enabled: z.boolean().describe('true to enable fee burn') }),\n handler: async ({ enabled }) => textResult(await a.setFeeBurnStatus(enabled)),\n },\n {\n name: 'futures_position_mode',\n description: 'Get current position mode: one-way (BOTH) or hedge mode (LONG/SHORT) (signed).',\n inputSchema: z.object({}),\n handler: async () => textResult(await a.positionMode()),\n },\n {\n name: 'futures_set_position_mode',\n description: 'Change position mode: hedgeMode true = dual side (hedge), false = one-way (signed; 30-day cooldown).',\n inputSchema: z.object({ hedgeMode: z.boolean().describe('true = hedge mode, false = one-way') }),\n handler: async ({ hedgeMode }) => textResult(await a.setPositionMode(hedgeMode)),\n },\n {\n name: 'futures_api_trading_status',\n description: 'Get futures trading quantitative rules indicators and disable intervals (signed).',\n inputSchema: z.object({}),\n handler: async () => textResult(await a.apiTradingStatus()),\n },\n {\n name: 'futures_position_margin_history',\n description: 'Get isolated position margin change history. type: 1 = add margin, 2 = reduce margin (signed).',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'), type: z.enum(['1', '2']).describe('1 = add margin, 2 = reduce margin'), startTime, endTime, limit: limit.default(50) }),\n handler: async ({ symbol, type, startTime, endTime, limit }) =>\n textResult(await a.positionMarginHistory({ symbol: normalizeSymbol(symbol), type: Number(type), startTime, endTime, limit: Number(limit) })),\n },\n {\n name: 'futures_rate_limit_order',\n description: 'Query the current user order rate limit usage (signed).',\n inputSchema: z.object({}),\n handler: async () => textResult(await a.rateLimitOrder()),\n },\n {\n name: 'futures_request_order_download',\n description: 'Request a futures order-history download (async, 7-day window). Returns a downloadId (signed).',\n inputSchema: z.object({ symbol: optionalSymbol, startTime, endTime }),\n handler: async ({ symbol, startTime, endTime }) =>\n textResult(await a.requestOrderDownload({ symbol: symbol ? normalizeSymbol(symbol) : undefined, startTime, endTime })),\n },\n {\n name: 'futures_order_download_status',\n description: 'Get the futures order-history download link by downloadId (signed).',\n inputSchema: z.object({ downloadId: z.string().min(1) }),\n handler: async ({ downloadId }) => textResult(await a.getOrderDownloadStatus(downloadId)),\n },\n {\n name: 'futures_request_trade_download',\n description: 'Request a futures trade-history download (async, 7-day window). Returns a downloadId (signed).',\n inputSchema: z.object({ symbol: optionalSymbol, startTime, endTime }),\n handler: async ({ symbol, startTime, endTime }) =>\n textResult(await a.requestTradeDownload({ symbol: symbol ? normalizeSymbol(symbol) : undefined, startTime, endTime })),\n },\n {\n name: 'futures_trade_download_status',\n description: 'Get the futures trade-history download link by downloadId (signed).',\n inputSchema: z.object({ downloadId: z.string().min(1) }),\n handler: async ({ downloadId }) => textResult(await a.getTradeDownloadStatus(downloadId)),\n },\n {\n name: 'futures_account_config',\n description: 'Get futures account configuration: fee tier, trading permissions, dual-side position setting (signed).',\n inputSchema: z.object({}),\n handler: async () => textResult(await a.accountConfig()),\n },\n {\n name: 'futures_portfolio_margin_account_info',\n description: 'Get Portfolio Margin account info for an asset: cross margin balance and liability (signed).',\n inputSchema: z.object({ asset: z.string().min(1).describe('Asset, e.g. USDT') }),\n handler: async ({ asset }) => textResult(await a.pmAccountInfo(asset)),\n },\n {\n name: 'futures_request_income_download',\n description: 'Request a futures income/transaction-history download (async). Returns a downloadId (signed).',\n inputSchema: z.object({ startTime: startTime.unwrap(), endTime: endTime.unwrap() }),\n handler: async ({ startTime, endTime }) => textResult(await a.requestIncomeDownload({ startTime, endTime })),\n },\n {\n name: 'futures_income_download_status',\n description: 'Get the futures income/transaction-history download link by downloadId (signed).',\n inputSchema: z.object({ downloadId: z.string().min(1) }),\n handler: async ({ downloadId }) => textResult(await a.getIncomeDownloadStatus(downloadId)),\n },\n ];\n}\n","import { z } from 'zod';\n\nexport interface ToolContext {\n env: 'live' | 'testnet' | 'demo';\n isSigned: boolean;\n}\n\nexport interface ToolDefinition<TInput extends z.ZodTypeAny = z.ZodTypeAny> {\n name: string;\n description: string;\n inputSchema: TInput;\n handler: (args: any, ctx: ToolContext) => Promise<unknown>;\n}\n\nexport function normalizeSymbol(value: unknown): string {\n return String(value ?? '').trim().toUpperCase();\n}\nexport function normalizeLimit(value: unknown): number {\n return Number(value);\n}\n\nexport function toJsonSchema(inputSchema: z.ZodTypeAny): Record<string, unknown> {\n return z.toJSONSchema(inputSchema, { target: 'json' });\n}\n\nexport function toOpenAITool(tool: ToolDefinition): Record<string, unknown> {\n return {\n type: 'function',\n function: {\n name: tool.name,\n description: tool.description,\n parameters: toJsonSchema(tool.inputSchema),\n },\n };\n}\n\nexport function toAnthropicTool(tool: ToolDefinition): Record<string, unknown> {\n return {\n name: tool.name,\n description: tool.description,\n input_schema: toJsonSchema(tool.inputSchema),\n };\n}\n\nexport function toMCPTool(tool: ToolDefinition): {\n name: string;\n description: string;\n inputSchema: Record<string, unknown>;\n} {\n return {\n name: tool.name,\n description: tool.description,\n inputSchema: toJsonSchema(tool.inputSchema),\n };\n}\n\nexport function toToolList<TInput extends z.ZodTypeAny>(\n tools: ToolDefinition<TInput>[],\n format: 'openai' | 'anthropic' | 'mcp',\n): Record<string, unknown>[] {\n const adapter =\n format === 'openai' ? toOpenAITool : format === 'anthropic' ? toAnthropicTool : toMCPTool;\n return tools.map(adapter);\n}\n\nexport function textResult(data: unknown): string {\n return JSON.stringify(data, null, 2);\n}\n","import { z } from 'zod';\nimport type { BinanceClient } from '../client/BinanceClient.js';\nimport type { ToolDefinition } from './types.js';\nimport { textResult, normalizeSymbol } from './types.js';\n\nconst symbol = z.string().min(1).describe('USD-M pair, e.g. BTCUSDT');\n\n/**\n * Derived tools: each one fans out over several REST endpoints and returns a\n * single answer. They exist so the model does not have to chain primitives and\n * do float arithmetic on tick/step sizes itself.\n */\nexport function derivedTools(client: BinanceClient): ToolDefinition[] {\n const ops = client.futures.ops;\n\n return [\n {\n name: 'futures_symbol_rules',\n description:\n 'Get the tradeable rules for a symbol in one call: tick size, step size, min/max quantity, market-order lot bounds and minimum notional, flattened out of exchangeInfo filters. Call this before sizing or pricing any order.',\n inputSchema: z.object({ symbol, refresh: z.boolean().default(false).describe('Bypass the 60s cache') }),\n handler: async ({ symbol: s, refresh }) => textResult(await ops.symbolRules(normalizeSymbol(s), { refresh })),\n },\n {\n name: 'futures_quantize',\n description:\n \"Round a price to the symbol's tick size and a quantity to its step size, returning exchange-ready strings. Use this instead of rounding numbers yourself — Binance rejects off-tick prices (-1111).\",\n inputSchema: z.object({\n symbol,\n price: z.number().positive().optional(),\n quantity: z.number().positive().optional(),\n marketOrder: z.boolean().default(false).describe('Use MARKET_LOT_SIZE bounds instead of LOT_SIZE'),\n }),\n handler: async ({ symbol: s, price, quantity, marketOrder }) =>\n textResult(await ops.quantize(normalizeSymbol(s), { price, quantity, marketOrder })),\n },\n {\n name: 'futures_size_position',\n description:\n 'Convert a risk budget into an exchange-ready order quantity. Given a stop price and either riskAmount (quote currency) or riskPct (percent of available balance), returns the quantity rounded down to the symbol step size, plus the notional, required margin and every constraint that failed (min notional, lot bounds, wrong-side stop). Never increases risk to satisfy a minimum — it reports instead.',\n inputSchema: z.object({\n symbol,\n side: z.enum(['BUY', 'SELL']),\n stopPrice: z.number().positive().describe('Protective stop price'),\n entryPrice: z.number().positive().optional().describe('Defaults to current mark price'),\n riskAmount: z.number().positive().optional().describe('Quote-currency amount to risk, e.g. 50 USDT'),\n riskPct: z.number().positive().max(100).optional().describe('Percent of available balance to risk (signed call)'),\n leverage: z.number().int().min(1).max(125).optional().describe('Used to report required margin'),\n marketOrder: z.boolean().default(false),\n }),\n handler: async (args) => textResult(await ops.sizePosition({ ...args, symbol: normalizeSymbol(args.symbol) })),\n },\n {\n name: 'futures_close_position',\n description:\n 'Flatten an open position with a reduce-only market order. Reads the current position, derives the closing side from its sign, and automatically uses reduceOnly in one-way mode vs positionSide in hedge mode (Binance rejects the wrong one). Set dryRun to preview the order without sending it. Signed, destructive.',\n inputSchema: z.object({\n symbol,\n positionSide: z.enum(['BOTH', 'LONG', 'SHORT']).optional().describe('Required when hedge mode has both sides open'),\n portion: z.number().positive().max(1).default(1).describe('Fraction of the position to close, e.g. 0.5 for half'),\n dryRun: z.boolean().default(false),\n }),\n handler: async (args) => textResult(await ops.closePosition({ ...args, symbol: normalizeSymbol(args.symbol) })),\n },\n {\n name: 'futures_market_snapshot',\n description:\n 'One-call market picture for a symbol: 24h stats, mark/index price with funding, open interest and long/short positioning. Replaces four separate primitive calls; individual feeds degrade to an error field rather than failing the whole snapshot.',\n inputSchema: z.object({\n symbol,\n period: z.enum(['5m', '15m', '30m', '1h', '2h', '4h', '6h', '12h', '1d']).default('1h'),\n }),\n handler: async ({ symbol: s, period }) => textResult(await ops.marketSnapshot(normalizeSymbol(s), { period })),\n },\n {\n name: 'futures_account_overview',\n description:\n 'One-call account picture: funded balances, open positions only (zero-size entries filtered out), working orders, and totals for unrealized PnL and gross notional. Signed.',\n inputSchema: z.object({}),\n handler: async () => textResult(await ops.accountOverview()),\n },\n {\n name: 'futures_place_bracket_order',\n description:\n 'Place an entry order together with its protective stop-loss and optional take-profit, with all prices quantized to the symbol tick. Returns each leg separately; if a protective leg fails the response is flagged protectionComplete=false and the entry is NOT auto-cancelled (it may already have filled). Signed, destructive.',\n inputSchema: z.object({\n symbol,\n side: z.enum(['BUY', 'SELL']),\n quantity: z.union([z.string(), z.number()]),\n entryPrice: z.number().positive().optional().describe('Omit for a MARKET entry'),\n stopLossPrice: z.number().positive(),\n takeProfitPrice: z.number().positive().optional(),\n positionSide: z.enum(['BOTH', 'LONG', 'SHORT']).optional(),\n workingType: z.enum(['MARK_PRICE', 'CONTRACT_PRICE']).default('MARK_PRICE'),\n }),\n handler: async (args) => textResult(await ops.placeBracketOrder({ ...args, symbol: normalizeSymbol(args.symbol) })),\n },\n ];\n}\n","import { z } from 'zod';\nimport type { BinanceClient } from '../client/BinanceClient.js';\nimport { KlineIntervalSchema } from '../types/market.types.js';\nimport type { ToolDefinition } from './types.js';\nimport { textResult, normalizeSymbol } from './types.js';\n\nconst u = (s: z.ZodTypeAny) => s.optional();\nconst optSymbol = u(z.string().min(1)).describe('USD-M pair, e.g. BTCUSDT');\nconst limitDefault = z.number().int().positive().max(1500).default(100);\nconst startTime = z.number().int().positive().optional();\nconst endTime = z.number().int().positive().optional();\nconst period = z.enum(['5m', '15m', '30m', '1h', '2h', '4h', '6h', '12h', '1d']).default('1h');\nconst contractType = z.enum(['perpetual', 'current_quarter', 'next_quarter']).default('perpetual');\n\nexport function marketDataTools(client: BinanceClient): ToolDefinition[] {\n const m = client.futures.market;\n const d = client.futures.data;\n\n const tools: ToolDefinition[] = [\n {\n name: 'futures_ping',\n description: 'Test connectivity to the Binance USD-M futures REST API. Returns empty object {} on success.',\n inputSchema: z.object({}),\n handler: async () => textResult(await m.ping()),\n },\n {\n name: 'futures_server_time',\n description: 'Get the current Binance USD-M futures server time in milliseconds since epoch.',\n inputSchema: z.object({}),\n handler: async () => textResult(await m.serverTime()),\n },\n {\n name: 'futures_exchange_info',\n description: 'Get exchange trading rules and symbol metadata: contract type, status, base/quote assets, price/quantity filters, tick size, step size, notional and leverage brackets, delivery dates.',\n inputSchema: z.object({}),\n handler: async () => textResult(await m.exchangeInfo()),\n },\n {\n name: 'futures_ticker_price',\n description: 'Get latest price for one symbol (v1).',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT') }),\n handler: async ({ symbol }) => textResult(await m.tickerPrice(normalizeSymbol(symbol))),\n },\n {\n name: 'futures_ticker_price_v2',\n description: 'Get latest price for one symbol, or for all symbols when symbol is omitted (v2 endpoint). Use all-symbols mode for market overviews.',\n inputSchema: z.object({ symbol: optSymbol }),\n handler: async ({ symbol }) => textResult(await m.tickerPriceV2(symbol ? normalizeSymbol(symbol) : undefined)),\n },\n {\n name: 'futures_ticker_24hr',\n description: 'Get 24-hour rolling price change statistics for a symbol: price change %, high, low, volume, quote volume, open interest.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT') }),\n handler: async ({ symbol }) => textResult(await m.ticker24hr(normalizeSymbol(symbol))),\n },\n {\n name: 'futures_book_ticker',\n description: 'Get best bid/ask (top of book) for a single symbol (v1).',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT') }),\n handler: async ({ symbol }) => textResult(await m.bookTicker(normalizeSymbol(symbol))),\n },\n {\n name: 'futures_book_ticker_v2',\n description: 'Get best bid/ask (top of book) for one symbol, or all symbols when omitted (v2 endpoint).',\n inputSchema: z.object({ symbol: optSymbol }),\n handler: async ({ symbol }) => textResult(await m.bookTickerV2(symbol ? normalizeSymbol(symbol) : undefined)),\n },\n {\n name: 'futures_order_book',\n description: 'Get order book depth for a symbol. Limits: 5, 10, 20, 50, 100, 500, 1000.',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'),\n limit: z.enum(['5', '10', '20', '50', '100', '500', '1000']).default('100'),\n }),\n handler: async ({ symbol, limit }) => textResult(await m.depth(normalizeSymbol(symbol), Number(limit))),\n },\n {\n name: 'futures_recent_trades',\n description: 'Get the most recent executed trades for a symbol (public endpoint).',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'),\n limit: limitDefault.default(500),\n }),\n handler: async ({ symbol, limit }) => textResult(await m.trades(normalizeSymbol(symbol), Number(limit))),\n },\n {\n name: 'futures_historical_trades',\n description: 'Get older trades for a symbol by fromId (older than recent).',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'),\n limit: limitDefault.default(500),\n fromId: z.number().int().positive().optional(),\n }),\n handler: async ({ symbol, limit, fromId }) =>\n textResult(await m.historicalTrades(normalizeSymbol(symbol), { limit: Number(limit), fromId })),\n },\n {\n name: 'futures_agg_trades',\n description: 'Get compressed/aggregate trades for a symbol within an optional time window. Each entry aggregates trades with the same price and side.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'), limit: limitDefault.default(500), startTime, endTime }),\n handler: async ({ symbol, limit, startTime, endTime }) =>\n textResult(await m.aggTrades(normalizeSymbol(symbol), { limit: Number(limit), startTime, endTime })),\n },\n {\n name: 'futures_klines',\n description: 'Get candlestick (OHLCV) data for a symbol. Intervals: 1m,3m,5m,15m,30m,1h,2h,4h,6h,8h,12h,1d,3d,1w,1M. Max 1500 per request.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'), interval: KlineIntervalSchema, limit: limitDefault.default(500), startTime, endTime }),\n handler: async ({ symbol, interval, limit, startTime, endTime }) =>\n textResult(await m.klines(normalizeSymbol(symbol), interval, { limit: Number(limit), startTime, endTime })),\n },\n {\n name: 'futures_continuous_klines',\n description: 'Get klines for a continuous contract (perpetual, current_quarter, next_quarter) identified by base pair (e.g. BTCUSDT).',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('Base pair, e.g. BTCUSDT'),\n contractType,\n interval: KlineIntervalSchema,\n limit: limitDefault.default(500),\n startTime,\n endTime,\n }),\n handler: async ({ symbol, contractType, interval, limit, startTime, endTime }) =>\n textResult(await m.continuousKlines(normalizeSymbol(symbol), contractType, interval, { limit: Number(limit), startTime, endTime })),\n },\n {\n name: 'futures_index_price_klines',\n description: 'Get index price candlesticks for a pair (e.g. BTCUSDT index).',\n inputSchema: z.object({ symbol: z.string().min(1).describe('Base pair, e.g. BTCUSDT'), interval: KlineIntervalSchema, limit: limitDefault.default(500), startTime, endTime }),\n handler: async ({ symbol, interval, limit, startTime, endTime }) =>\n textResult(await m.indexPriceKlines(normalizeSymbol(symbol), interval, { limit: Number(limit), startTime, endTime })),\n },\n {\n name: 'futures_mark_price_klines',\n description: 'Get mark price candlesticks for a symbol.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'), interval: KlineIntervalSchema, limit: limitDefault.default(500), startTime, endTime }),\n handler: async ({ symbol, interval, limit, startTime, endTime }) =>\n textResult(await m.markPriceKlines(normalizeSymbol(symbol), interval, { limit: Number(limit), startTime, endTime })),\n },\n {\n name: 'futures_trading_day_ticker',\n description: 'Get the trading-day ticker (v1: rolling window stats by symbol, including open, close, high, low, volume, closeTime).',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT') }),\n handler: async ({ symbol }) => textResult(await m.tradingDayTicker(normalizeSymbol(symbol))),\n },\n {\n name: 'futures_mark_price',\n description: 'Get mark price, index price, estimated settle price, last funding rate, next funding time and interest rate for a symbol.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT') }),\n handler: async ({ symbol }) => textResult(await d.premiumIndex(normalizeSymbol(symbol))),\n },\n {\n name: 'futures_funding_rate_history',\n description: 'Get historical funding rates for a symbol.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'), limit: limitDefault.default(100), startTime, endTime }),\n handler: async ({ symbol, limit, startTime, endTime }) =>\n textResult(await d.fundingRateHistory(normalizeSymbol(symbol), { limit: Number(limit), startTime, endTime })),\n },\n {\n name: 'futures_funding_info',\n description: 'Get funding rate configuration for all symbols with adjusted funding cap/floor or interval (e.g. under extreme volatility).',\n inputSchema: z.object({}),\n handler: async () => textResult(await d.fundingInfo()),\n },\n {\n name: 'futures_open_interest',\n description: 'Get the current total open interest for a symbol.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT') }),\n handler: async ({ symbol }) => textResult(await d.openInterest(normalizeSymbol(symbol))),\n },\n {\n name: 'futures_open_interest_hist',\n description: 'Get historical open interest statistics per period.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'), period, limit: limitDefault.default(30) }),\n handler: async ({ symbol, period, limit }) => textResult(await d.openInterestHist(normalizeSymbol(symbol), period, Number(limit))),\n },\n {\n name: 'futures_top_long_short_account_ratio',\n description: 'Get top trader long/short account ratio (number of accounts) for a symbol.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'), period, limit: limitDefault.default(30) }),\n handler: async ({ symbol, period, limit }) => textResult(await d.topLongShortAccountRatio(normalizeSymbol(symbol), period, Number(limit))),\n },\n {\n name: 'futures_top_long_short_position_ratio',\n description: 'Get top trader long/short position ratio (accounts with net positions) for a symbol.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'), period, limit: limitDefault.default(30) }),\n handler: async ({ symbol, period, limit }) => textResult(await d.topLongShortPositionRatio(normalizeSymbol(symbol), period, Number(limit))),\n },\n {\n name: 'futures_global_long_short_ratio',\n description: 'Get global long/short account ratio for a symbol (all accounts).',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'), period, limit: limitDefault.default(30) }),\n handler: async ({ symbol, period, limit }) => textResult(await d.globalLongShortAccountRatio(normalizeSymbol(symbol), period, Number(limit))),\n },\n {\n name: 'futures_taker_long_short_ratio',\n description: 'Get taker buy/sell volume ratio for a symbol.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'), period, limit: limitDefault.default(30) }),\n handler: async ({ symbol, period, limit }) => textResult(await d.takerLongShortRatio(normalizeSymbol(symbol), period, Number(limit))),\n },\n {\n name: 'futures_basis',\n description: 'Get basis data (spot-futures spread, mark price - index price) for a pair and contract type.',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('Base pair, e.g. BTCUSDT'),\n period,\n limit: limitDefault.default(30),\n startTime,\n endTime,\n }),\n handler: async ({ symbol, period, limit, startTime, endTime }) =>\n textResult(await d.basis(normalizeSymbol(symbol), period, { limit: Number(limit), startTime, endTime })),\n },\n {\n name: 'futures_asset_index',\n description: 'Get multi-assets mode asset index (collateral price) for one asset or all assets.',\n inputSchema: z.object({ symbol: optSymbol.describe('Asset index symbol, e.g. ADAUSD') }),\n handler: async ({ symbol }) => textResult(await d.assetIndex(symbol ? normalizeSymbol(symbol) : undefined)),\n },\n {\n name: 'futures_composite_index_info',\n description: 'Get composite index symbol information (e.g. DEFIUSDT) with constituent weights.',\n inputSchema: z.object({ symbol: optSymbol }),\n handler: async ({ symbol }) => textResult(await d.compositeIndexInfo(symbol ? normalizeSymbol(symbol) : undefined)),\n },\n {\n name: 'futures_insurance_balance',\n description: 'Get insurance fund balance snapshots for a symbol.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BNBUSDT'), limit: limitDefault.default(100), startTime, endTime }),\n handler: async ({ symbol, limit, startTime, endTime }) =>\n textResult(await d.insuranceFundBalance({ symbol: normalizeSymbol(symbol), limit: Number(limit), startTime, endTime })),\n },\n {\n name: 'futures_index_price_constituents',\n description: 'Get the index price constituents (exchange weights) for a symbol.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT') }),\n handler: async ({ symbol }) => textResult(await d.indexPriceConstituents(normalizeSymbol(symbol))),\n },\n {\n name: 'futures_premium_index_klines',\n description: 'Get premium index candlesticks for a symbol (mark price premium over index price).',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'), interval: KlineIntervalSchema, limit: limitDefault.default(500), startTime, endTime }),\n handler: async ({ symbol, interval, limit, startTime, endTime }) =>\n textResult(await m.premiumIndexKlines(normalizeSymbol(symbol), interval, { limit: Number(limit), startTime, endTime })),\n },\n {\n name: 'futures_rpi_depth',\n description: 'Get the RPI (Retail Price Improvement) order book depth for a symbol.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'), limit: z.number().int().positive().default(1000) }),\n handler: async ({ symbol, limit }) => textResult(await m.rpiDepth(normalizeSymbol(symbol), Number(limit))),\n },\n {\n name: 'futures_delivery_price',\n description: 'Get historical quarterly contract settlement/delivery prices for a pair.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('Base pair, e.g. BTCUSDT') }),\n handler: async ({ symbol }) => textResult(await d.deliveryPrice(normalizeSymbol(symbol))),\n },\n {\n name: 'futures_symbol_adl_risk',\n description: 'Get the auto-deleveraging (ADL) risk level for one symbol or all symbols on the account (signed).',\n inputSchema: z.object({ symbol: optSymbol }),\n handler: async ({ symbol }) => textResult(await d.symbolAdlRisk(symbol ? normalizeSymbol(symbol) : undefined)),\n },\n {\n name: 'futures_adl_quantile',\n description: 'Get the position ADL (auto-deleveraging) quantile estimation for one symbol or all symbols (signed).',\n inputSchema: z.object({ symbol: optSymbol }),\n handler: async ({ symbol }) => textResult(await d.adlQuantile(symbol ? normalizeSymbol(symbol) : undefined)),\n },\n {\n name: 'futures_force_orders',\n description: \"Get the user's force-liquidation orders (LIQUIDATION) and ADL orders for a symbol or all symbols (signed).\",\n inputSchema: z.object({\n symbol: optSymbol,\n autoCloseType: z.enum(['LIQUIDATION', 'ADL']).optional(),\n startTime,\n endTime,\n limit: limitDefault.default(50),\n }),\n handler: async ({ symbol, autoCloseType, startTime, endTime, limit }) =>\n textResult(\n await d.forceOrders({\n symbol: symbol ? normalizeSymbol(symbol) : undefined,\n autoCloseType,\n startTime,\n endTime,\n limit: Number(limit),\n }),\n ),\n },\n ];\n\n return tools;\n}\n","import { z } from 'zod';\nimport type { BinanceClient } from '../client/BinanceClient.js';\nimport type { ToolDefinition } from './types.js';\nimport { textResult, normalizeSymbol } from './types.js';\n\nexport interface PaperState {\n balance: number;\n positions: PaperPosition[];\n history: PaperEvent[];\n}\n\nexport interface PaperPosition {\n id: string;\n symbol: string;\n side: 'LONG' | 'SHORT';\n quantity: number;\n entryPrice: number;\n openedAt: string;\n}\n\nexport interface PaperEvent extends PaperPosition {\n type: 'open' | 'close';\n exitPrice?: number;\n realizedPnl?: number;\n closedAt?: string;\n}\n\nexport interface PaperContext {\n state: PaperState;\n client: BinanceClient;\n}\n\nexport function createPaperContext(client: BinanceClient, initialState: Partial<PaperState> = {}): PaperContext {\n return {\n client,\n state: { balance: initialState.balance ?? 10000, positions: initialState.positions ?? [], history: initialState.history ?? [] },\n };\n}\n\nfunction pnl(position: PaperPosition, price: number): number {\n const direction = position.side === 'LONG' ? 1 : -1;\n return (price - position.entryPrice) * position.quantity * direction;\n}\n\nexport function paperTools(ctx: PaperContext): ToolDefinition[] {\n const s = ctx.state;\n const t = ctx.client.futures.market;\n\n return [\n {\n name: 'paper_init',\n description: 'Initialize paper-trading state (reset balances, positions, history). No API keys required.',\n inputSchema: z.object({ balance: z.number().positive().default(10000).describe('Starting USDT balance') }),\n handler: async ({ balance }) => {\n s.balance = balance;\n s.positions = [];\n s.history = [];\n return textResult(s);\n },\n },\n {\n name: 'paper_balance',\n description: 'Get current paper-trading balance and open-position equity (uses live market prices if an open position exists). No API keys required.',\n inputSchema: z.object({}),\n handler: async () => textResult(s),\n },\n {\n name: 'paper_open_position',\n description: 'Open an in-memory paper position at the live ticker price (or a fixed price). No API keys required.',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'),\n side: z.enum(['LONG', 'SHORT']),\n quantity: z.number().positive(),\n price: z.number().positive().optional().describe('If omitted, uses live ticker price'),\n }),\n handler: async ({ symbol, side, quantity, price }) => {\n const sym = normalizeSymbol(symbol);\n const market = price ?? Number((await t.tickerPrice(sym)).price);\n const position: PaperPosition = { id: Date.now().toString(), symbol: sym, side, quantity, entryPrice: market, openedAt: new Date().toISOString() };\n s.positions.push(position);\n s.history.push({ type: 'open', ...position });\n return textResult(position);\n },\n },\n {\n name: 'paper_close_position',\n description: 'Close a paper position by id (or symbol) and realize PnL at the live/last price.',\n inputSchema: z.object({\n id: z.string().optional().describe('Position id from paper_open_position'),\n symbol: z.string().min(1).optional().describe('Close the position for this symbol'),\n price: z.number().positive().optional().describe('If omitted, uses live ticker price'),\n }),\n handler: async ({ id, symbol, price }) => {\n const idx = s.positions.findIndex((p) => (id ? p.id === id : normalizeSymbol(p.symbol) === normalizeSymbol(symbol ?? '')));\n if (idx === -1) throw new Error('paper position not found');\n const position = s.positions[idx];\n const market = price ?? Number((await t.tickerPrice(position.symbol)).price);\n const realizedPnl = pnl(position, market);\n s.balance += realizedPnl;\n const closed: PaperEvent = { type: 'close', ...position, exitPrice: market, realizedPnl, closedAt: new Date().toISOString() };\n s.positions.splice(idx, 1);\n s.history.push(closed);\n return textResult(closed);\n },\n },\n {\n name: 'paper_positions',\n description: 'List open paper positions with live unrealized PnL (marked to market).',\n inputSchema: z.object({}),\n handler: async () => {\n const out = await Promise.all(\n s.positions.map(async (p) => {\n const price = Number((await t.tickerPrice(p.symbol)).price);\n return { ...p, markPrice: price, unrealizedPnl: pnl(p, price) };\n }),\n );\n return textResult(out);\n },\n },\n {\n name: 'paper_history',\n description: 'List paper-trading history of open/close events with realized PnL.',\n inputSchema: z.object({}),\n handler: async () => textResult(s.history),\n },\n {\n name: 'paper_summary',\n description: 'Summarize paper-trading state: balance, open positions, trade count.',\n inputSchema: z.object({}),\n handler: async () =>\n textResult({ balance: s.balance, openPositions: s.positions.length, trades: s.history.length }),\n },\n ];\n}\n","import { z } from 'zod';\nimport type { BinanceClient } from '../client/BinanceClient.js';\nimport { KlineIntervalSchema } from '../types/market.types.js';\nimport type { ToolDefinition } from './types.js';\nimport { textResult, normalizeSymbol } from './types.js';\n\nconst spotSymbol = z.string().min(1).describe('Spot pair, e.g. BTCUSDT');\nconst optionalSymbol = z.string().min(1).describe('Spot pair, e.g. BTCUSDT').optional();\nconst limit = z.number().int().positive().max(1000).default(100);\nconst startTime = z.number().int().positive().optional();\nconst endTime = z.number().int().positive().optional();\nconst side = z.enum(['BUY', 'SELL']);\n\nexport const spotOrderParamsSchema = z.object({\n symbol: spotSymbol,\n side,\n type: z.enum(['LIMIT', 'MARKET', 'LIMIT_MAKER', 'STOP_LOSS', 'STOP_LOSS_LIMIT', 'TAKE_PROFIT', 'TAKE_PROFIT_LIMIT']),\n quantity: z.union([z.string(), z.number()]).optional().describe('Base-asset quantity; omit if using quoteOrderQty'),\n quoteOrderQty: z.union([z.string(), z.number()]).optional().describe('Quote-asset quantity (e.g. spend 100 USDT on a MARKET order)'),\n price: z.union([z.string(), z.number()]).optional().describe('Required for LIMIT / STOP_LOSS_LIMIT / TAKE_PROFIT_LIMIT'),\n stopPrice: z.union([z.string(), z.number()]).optional().describe('Trigger price for STOP_LOSS / TAKE_PROFIT variants'),\n timeInForce: z.enum(['GTC', 'IOC', 'FOK']).optional().describe('Required for LIMIT'),\n newClientOrderId: z.string().optional(),\n newOrderRespType: z.enum(['ACK', 'RESULT', 'FULL']).optional(),\n icebergQty: z.union([z.string(), z.number()]).optional(),\n selfTradePreventionMode: z.enum(['NONE', 'EXPIRE_TAKER', 'EXPIRE_MAKER', 'EXPIRE_BOTH']).optional(),\n});\n\nexport function spotTools(client: BinanceClient): ToolDefinition[] {\n const m = client.spot.market;\n const a = client.spot.account;\n const t = client.spot.trading;\n\n const tools: ToolDefinition[] = [\n // ---- Market data (public) ----\n {\n name: 'spot_ping',\n description: 'Test connectivity to the Binance Spot REST API.',\n inputSchema: z.object({}),\n handler: async () => textResult(await m.ping()),\n },\n {\n name: 'spot_server_time',\n description: 'Get the current Binance Spot server time in ms since epoch.',\n inputSchema: z.object({}),\n handler: async () => textResult(await m.serverTime()),\n },\n {\n name: 'spot_exchange_info',\n description: 'Get Spot exchange trading rules and symbol metadata (status, base/quote assets, filters, permissions).',\n inputSchema: z.object({}),\n handler: async () => textResult(await m.exchangeInfo()),\n },\n {\n name: 'spot_ticker_price',\n description: 'Get the latest price for a Spot symbol.',\n inputSchema: z.object({ symbol: spotSymbol }),\n handler: async ({ symbol }) => textResult(await m.tickerPrice(normalizeSymbol(symbol))),\n },\n {\n name: 'spot_ticker_24hr',\n description: 'Get 24-hour rolling price change statistics for a Spot symbol.',\n inputSchema: z.object({ symbol: spotSymbol }),\n handler: async ({ symbol }) => textResult(await m.ticker24hr(normalizeSymbol(symbol))),\n },\n {\n name: 'spot_book_ticker',\n description: 'Get the best bid/ask (top of book) for a Spot symbol.',\n inputSchema: z.object({ symbol: spotSymbol }),\n handler: async ({ symbol }) => textResult(await m.bookTicker(normalizeSymbol(symbol))),\n },\n {\n name: 'spot_order_book',\n description: 'Get the Spot order book depth for a symbol (limits 5/10/20/50/100/500/1000/5000).',\n inputSchema: z.object({\n symbol: spotSymbol,\n limit: z.enum(['5', '10', '20', '50', '100', '500', '1000', '5000']).default('100'),\n }),\n handler: async ({ symbol, limit }) => textResult(await m.depth(normalizeSymbol(symbol), Number(limit))),\n },\n {\n name: 'spot_recent_trades',\n description: 'Get the most recent executed trades for a Spot symbol.',\n inputSchema: z.object({ symbol: spotSymbol, limit: limit.default(500) }),\n handler: async ({ symbol, limit }) => textResult(await m.trades(normalizeSymbol(symbol), Number(limit))),\n },\n {\n name: 'spot_historical_trades',\n description: 'Get older Spot trades for a symbol by fromId.',\n inputSchema: z.object({ symbol: spotSymbol, limit: limit.default(500), fromId: z.number().int().positive().optional() }),\n handler: async ({ symbol, limit, fromId }) =>\n textResult(await m.historicalTrades(normalizeSymbol(symbol), { limit: Number(limit), fromId })),\n },\n {\n name: 'spot_agg_trades',\n description: 'Get compressed/aggregate Spot trades for a symbol within an optional time window.',\n inputSchema: z.object({ symbol: spotSymbol, limit: limit.default(500), startTime, endTime }),\n handler: async ({ symbol, limit, startTime, endTime }) =>\n textResult(await m.aggTrades(normalizeSymbol(symbol), { limit: Number(limit), startTime, endTime })),\n },\n {\n name: 'spot_klines',\n description: 'Get Spot candlesticks (OHLCV). Intervals 1m…1M; max 1000 per request.',\n inputSchema: z.object({ symbol: spotSymbol, interval: KlineIntervalSchema, limit: limit.default(500), startTime, endTime }),\n handler: async ({ symbol, interval, limit, startTime, endTime }) =>\n textResult(await m.klines(normalizeSymbol(symbol), interval, { limit: Number(limit), startTime, endTime })),\n },\n {\n name: 'spot_ui_klines',\n description: 'Get Spot candlesticks via the optimized uiKlines endpoint (same shape as spot_klines).',\n inputSchema: z.object({ symbol: spotSymbol, interval: KlineIntervalSchema, limit: limit.default(500), startTime, endTime }),\n handler: async ({ symbol, interval, limit, startTime, endTime }) =>\n textResult(await m.uiKlines(normalizeSymbol(symbol), interval, { limit: Number(limit), startTime, endTime })),\n },\n {\n name: 'spot_avg_price',\n description: 'Get the current average price (5-minute rolling average) for a Spot symbol.',\n inputSchema: z.object({ symbol: spotSymbol }),\n handler: async ({ symbol }) => textResult(await m.avgPrice(normalizeSymbol(symbol))),\n },\n {\n name: 'spot_rolling_window_ticker',\n description: 'Get rolling-window price change statistics (1d/7d/30d). Omit symbol for all symbols.',\n inputSchema: z.object({\n symbol: optionalSymbol,\n windowSize: z.enum(['1d', '7d', '30d']).optional(),\n }),\n handler: async ({ symbol, windowSize }) =>\n textResult(await m.rollingWindowTicker(symbol ? normalizeSymbol(symbol) : undefined, windowSize)),\n },\n {\n name: 'spot_trading_day_ticker',\n description: 'Get the Spot trading-day ticker (open/close/high/low/volume by UTC day). Omit symbol for all symbols.',\n inputSchema: z.object({ symbol: optionalSymbol, timeZone: z.string().optional(), type: z.enum(['FULL', 'MINI']).optional() }),\n handler: async ({ symbol, timeZone, type }) =>\n textResult(await m.tradingDayTicker(symbol ? normalizeSymbol(symbol) : undefined, { timeZone, type })),\n },\n\n // ---- Account (signed) ----\n {\n name: 'spot_account',\n description: 'Get the Spot account: balances (free/locked), commissions, permissions (signed).',\n inputSchema: z.object({}),\n handler: async () => textResult(await a.account()),\n },\n {\n name: 'spot_my_trades',\n description: 'Get the Spot account trade list (filled trades) for a symbol with optional time range (signed).',\n inputSchema: z.object({ symbol: spotSymbol, orderId: z.number().int().positive().optional(), startTime, endTime, fromId: z.number().int().positive().optional(), limit: limit.default(500) }),\n handler: async ({ symbol, orderId, startTime, endTime, fromId, limit }) =>\n textResult(await a.myTrades(normalizeSymbol(symbol), { orderId, startTime, endTime, fromId, limit: Number(limit) })),\n },\n {\n name: 'spot_my_prevented_matches',\n description: 'Get Spot orders that were expired by the self-trade-prevention (STP) mechanism (signed).',\n inputSchema: z.object({ symbol: spotSymbol, preventedMatchId: z.number().int().positive().optional(), orderId: z.number().int().positive().optional(), limit: limit.default(500) }),\n handler: async ({ symbol, preventedMatchId, orderId, limit }) =>\n textResult(await a.myPreventedMatches(normalizeSymbol(symbol), { preventedMatchId, orderId, limit: Number(limit) })),\n },\n {\n name: 'spot_account_commission',\n description: 'Get the Spot account commission rates for a symbol (signed).',\n inputSchema: z.object({ symbol: spotSymbol }),\n handler: async ({ symbol }) => textResult(await a.accountCommission(normalizeSymbol(symbol))),\n },\n {\n name: 'spot_rate_limit_order',\n description: 'Query the current Spot order rate limit usage (signed).',\n inputSchema: z.object({}),\n handler: async () => textResult(await a.rateLimitOrder()),\n },\n\n // ---- Trading (signed) ----\n {\n name: 'spot_new_order',\n description: 'Place a new Spot order. Types: LIMIT, MARKET, LIMIT_MAKER, STOP_LOSS, STOP_LOSS_LIMIT, TAKE_PROFIT, TAKE_PROFIT_LIMIT. For MARKET orders use quantity OR quoteOrderQty. Signed.',\n inputSchema: spotOrderParamsSchema,\n handler: async (args) => textResult(await t.createOrder({ ...args, symbol: normalizeSymbol(args.symbol) })),\n },\n {\n name: 'spot_test_order',\n description: 'Validate a Spot order without submitting it. Signed.',\n inputSchema: spotOrderParamsSchema,\n handler: async (args) => textResult(await t.testOrder({ ...args, symbol: normalizeSymbol(args.symbol) })),\n },\n {\n name: 'spot_get_order',\n description: 'Query a specific Spot order by orderId or client order id. Signed.',\n inputSchema: z.object({ symbol: spotSymbol, orderId: z.number().int().positive().optional(), origClientOrderId: z.string().optional() }),\n handler: async ({ symbol, orderId, origClientOrderId }) =>\n textResult(await t.getOrder(normalizeSymbol(symbol), { orderId, origClientOrderId })),\n },\n {\n name: 'spot_cancel_order',\n description: 'Cancel a specific open Spot order by orderId or client order id. Signed.',\n inputSchema: z.object({ symbol: spotSymbol, orderId: z.number().int().positive().optional(), origClientOrderId: z.string().optional(), newClientOrderId: z.string().optional() }),\n handler: async ({ symbol, orderId, origClientOrderId, newClientOrderId }) =>\n textResult(await t.cancelOrder(normalizeSymbol(symbol), { orderId, origClientOrderId, newClientOrderId })),\n },\n {\n name: 'spot_open_orders',\n description: 'Get all current open Spot orders, for one symbol or all symbols. Signed.',\n inputSchema: z.object({ symbol: optionalSymbol }),\n handler: async ({ symbol }) => textResult(await t.getOpenOrders(symbol ? normalizeSymbol(symbol) : undefined)),\n },\n {\n name: 'spot_all_orders',\n description: 'Get historical Spot orders for a symbol with optional time range. Signed.',\n inputSchema: z.object({ symbol: spotSymbol, orderId: z.number().int().positive().optional(), startTime, endTime, limit }),\n handler: async ({ symbol, orderId, startTime, endTime, limit }) =>\n textResult(await t.getAllOrders(normalizeSymbol(symbol), { orderId, startTime, endTime, limit })),\n },\n {\n name: 'spot_cancel_open_orders',\n description: 'Cancel all open Spot orders for a symbol. Signed.',\n inputSchema: z.object({ symbol: spotSymbol }),\n handler: async ({ symbol }) => textResult(await t.cancelOpenOrders(normalizeSymbol(symbol))),\n },\n {\n name: 'spot_cancel_replace_order',\n description: 'Cancel an existing Spot order and place a new one on the same symbol (cancel-replace). Signed.',\n inputSchema: z.object({\n symbol: spotSymbol,\n side,\n type: z.enum(['LIMIT', 'MARKET', 'STOP_LOSS', 'STOP_LOSS_LIMIT', 'TAKE_PROFIT', 'TAKE_PROFIT_LIMIT']),\n cancelReplaceMode: z.enum(['STOP_ON_FAILURE', 'ALLOW_FAILURE']).default('STOP_ON_FAILURE'),\n cancelOrderId: z.number().int().positive().optional(),\n cancelOrigClientOrderId: z.string().optional(),\n cancelNewClientOrderId: z.string().optional(),\n quantity: z.union([z.string(), z.number()]).optional(),\n price: z.union([z.string(), z.number()]).optional(),\n timeInForce: z.enum(['GTC', 'IOC', 'FOK']).optional(),\n newClientOrderId: z.string().optional(),\n }),\n handler: async (args) => textResult(await t.cancelReplaceOrder({ ...args, symbol: normalizeSymbol(args.symbol) })),\n },\n {\n name: 'spot_new_oco_order',\n description: 'Place a new Spot OCO (one-cancels-other) order: a stop-loss limit + a limit-maker take-profit. Signed.',\n inputSchema: z.object({\n symbol: spotSymbol,\n side,\n quantity: z.union([z.string(), z.number()]).describe('Total base-asset quantity for both legs'),\n price: z.union([z.string(), z.number()]).describe('Limit (take-profit) price'),\n stopPrice: z.union([z.string(), z.number()]).describe('Stop-loss trigger price'),\n stopLimitPrice: z.union([z.string(), z.number()]).optional().describe('Stop-loss limit price (defaults to stopPrice)'),\n stopLimitTimeInForce: z.enum(['GTC', 'IOC', 'FOK']).optional(),\n listClientOrderId: z.string().optional(),\n limitClientOrderId: z.string().optional(),\n stopClientOrderId: z.string().optional(),\n }),\n handler: async (args) => textResult(await t.createOCOOrder({ ...args, symbol: normalizeSymbol(args.symbol) })),\n },\n {\n name: 'spot_cancel_oco_order',\n description: 'Cancel an entire Spot OCO order list by orderListId or listClientOrderId. Signed.',\n inputSchema: z.object({ symbol: spotSymbol, orderListId: z.number().int().positive().optional(), listClientOrderId: z.string().optional(), newClientOrderId: z.string().optional() }),\n handler: async ({ symbol, orderListId, listClientOrderId, newClientOrderId }) =>\n textResult(await t.cancelOCOOrder(normalizeSymbol(symbol), { orderListId, listClientOrderId, newClientOrderId })),\n },\n {\n name: 'spot_get_oco_order',\n description: 'Query a Spot OCO order list by orderListId or listClientOrderId. Signed.',\n inputSchema: z.object({ symbol: spotSymbol, orderListId: z.number().int().positive().optional(), origClientOrderId: z.string().optional() }),\n handler: async ({ symbol, orderListId, origClientOrderId }) =>\n textResult(await t.getOCOOrder(normalizeSymbol(symbol), { orderListId, origClientOrderId })),\n },\n {\n name: 'spot_open_oco_orders',\n description: 'Get all current open Spot OCO order lists. Signed.',\n inputSchema: z.object({}),\n handler: async () => textResult(await t.getOpenOCOOrders()),\n },\n {\n name: 'spot_all_oco_orders',\n description: 'Get historical Spot OCO order lists for a symbol with optional time range. Signed.',\n inputSchema: z.object({ symbol: spotSymbol, fromId: z.number().int().positive().optional(), startTime, endTime, limit }),\n handler: async ({ symbol, fromId, startTime, endTime, limit }) =>\n textResult(await t.getAllOCOOrders(normalizeSymbol(symbol), { fromId, startTime, endTime, limit })),\n },\n {\n name: 'spot_cancel_open_oco_orders',\n description: 'Cancel all open Spot OCO order lists for a symbol. Signed.',\n inputSchema: z.object({ symbol: spotSymbol }),\n handler: async ({ symbol }) => textResult(await t.cancelOpenOCOOrders(normalizeSymbol(symbol))),\n },\n\n // ---- User data stream (signed) ----\n {\n name: 'spot_ws_start_user_stream',\n description: 'Start the Spot user data stream: creates a listenKey, connects the private WebSocket, and begins keep-alive. Emits executionReport, outboundAccountPosition, balanceUpdate, listStatus.',\n inputSchema: z.object({}),\n handler: async () => textResult({ listenKey: await client.startSpotUserStream() }),\n },\n {\n name: 'spot_ws_stop_user_stream',\n description: 'Stop the Spot user data stream: closes the private WebSocket and invalidates the listenKey.',\n inputSchema: z.object({}),\n handler: async () => {\n client.closeSpotUserStream();\n return textResult({ stopped: true });\n },\n },\n ];\n\n return tools;\n}\n","import { z } from 'zod';\nimport type { BinanceClient } from '../client/BinanceClient.js';\nimport type { ToolDefinition } from './types.js';\nimport { textResult, normalizeSymbol } from './types.js';\n\nconst symbol = z.string().min(1).describe('USD-M pair, e.g. BTCUSDT');\nconst optionalSymbol = z.string().min(1).describe('USD-M pair, e.g. BTCUSDT').optional();\nconst limit = z.number().int().positive().max(1000).default(100);\nconst startTime = z.number().int().positive().optional();\nconst endTime = z.number().int().positive().optional();\nconst side = z.enum(['BUY', 'SELL']);\nconst positionSide = z.enum(['BOTH', 'LONG', 'SHORT']).optional();\n\nexport const orderParamsSchema = z.object({\n symbol,\n side,\n type: z.enum(['LIMIT', 'MARKET', 'STOP', 'STOP_MARKET', 'TAKE_PROFIT', 'TAKE_PROFIT_MARKET', 'TRAILING_STOP_MARKET']),\n quantity: z.union([z.string(), z.number()]).describe('Order quantity in base asset'),\n price: z.union([z.string(), z.number()]).optional().describe('Required for LIMIT and STOP/TAKE_PROFIT (limit-triggered) types'),\n timeInForce: z.enum(['GTC', 'IOC', 'FOK', 'GTX']).optional(),\n stopPrice: z.union([z.string(), z.number()]).optional().describe('Trigger price for STOP/STOP_MARKET/TAKE_PROFIT/TAKE_PROFIT_MARKET'),\n reduceOnly: z.boolean().optional().describe('true = only reduces the position, never opens'),\n positionSide,\n newClientOrderId: z.string().optional(),\n closePosition: z.boolean().optional().describe('Close the full position on trigger (mutually exclusive with quantity)'),\n newOrderRespType: z.enum(['ACK', 'RESULT']).optional(),\n priceProtect: z.boolean().optional(),\n workingType: z.enum(['MARK_PRICE', 'CONTRACT_PRICE']).optional().describe('Trigger price basis; default CONTRACT_PRICE'),\n callbackRate: z.union([z.string(), z.number()]).optional().describe('Percent callback for TRAILING_STOP_MARKET, e.g. 0.5'),\n activationPrice: z.union([z.string(), z.number()]).optional().describe('Activation price for TRAILING_STOP_MARKET'),\n selfTradePreventionMode: z.enum(['NONE', 'EXPIRE_TAKER', 'EXPIRE_MAKER', 'EXPIRE_BOTH']).optional(),\n goodTillDate: z.number().int().optional().describe('Timestamp when a GTD order expires'),\n});\n\nexport function tradingTools(client: BinanceClient): ToolDefinition[] {\n const t = client.futures.trading;\n\n return [\n {\n name: 'futures_new_order',\n description: 'Place a new futures order. Types: LIMIT, MARKET, STOP, STOP_MARKET, TAKE_PROFIT, TAKE_PROFIT_MARKET, TRAILING_STOP_MARKET. Use STOP_MARKET as the take-profit/stop-loss trigger and LIMIT for the actual fill. Signed.',\n inputSchema: orderParamsSchema,\n handler: async (args) => textResult(await t.createOrder({ ...args, symbol: normalizeSymbol(args.symbol) })),\n },\n {\n name: 'futures_test_order',\n description: 'Validate a new order without submitting it. Returns 200 on success; use to validate fields and margin before real orders. Signed.',\n inputSchema: orderParamsSchema,\n handler: async (args) => textResult(await t.createTestOrder({ ...args, symbol: normalizeSymbol(args.symbol) })),\n },\n {\n name: 'futures_get_order',\n description: 'Query a specific order by orderId or client order id. Signed.',\n inputSchema: z.object({ symbol, orderId: z.number().int().positive().optional(), origClientOrderId: z.string().optional() }),\n handler: async ({ symbol, orderId, origClientOrderId }) =>\n textResult(await t.getOrder(normalizeSymbol(symbol), { orderId, origClientOrderId })),\n },\n {\n name: 'futures_cancel_order',\n description: 'Cancel a specific open order by orderId or client order id. Signed.',\n inputSchema: z.object({ symbol, orderId: z.number().int().positive().optional(), origClientOrderId: z.string().optional() }),\n handler: async ({ symbol, orderId, origClientOrderId }) =>\n textResult(await t.cancelOrder(normalizeSymbol(symbol), { orderId, origClientOrderId })),\n },\n {\n name: 'futures_get_open_order',\n description: 'Query a current open order (must exist in the open order book). Signed.',\n inputSchema: z.object({ symbol, orderId: z.number().int().positive().optional(), origClientOrderId: z.string().optional() }),\n handler: async ({ symbol, orderId, origClientOrderId }) =>\n textResult(await t.getCurrentOrder(normalizeSymbol(symbol), { orderId, origClientOrderId })),\n },\n {\n name: 'futures_open_orders',\n description: 'Get all current open orders, for one symbol or all symbols. Signed.',\n inputSchema: z.object({ symbol: optionalSymbol }),\n handler: async ({ symbol }) => textResult(await t.getOpenOrders(symbol ? normalizeSymbol(symbol) : undefined)),\n },\n {\n name: 'futures_all_orders',\n description: 'Get historical orders for a symbol with optional time range (last 7 days by default). Signed.',\n inputSchema: z.object({ symbol, orderId: z.number().int().positive().optional(), startTime, endTime, limit }),\n handler: async ({ symbol, orderId, startTime, endTime, limit }) =>\n textResult(await t.getAllOrders(normalizeSymbol(symbol), { orderId, startTime, endTime, limit })),\n },\n {\n name: 'futures_cancel_all_orders',\n description: 'Cancel all open orders for a symbol. Signed.',\n inputSchema: z.object({ symbol }),\n handler: async ({ symbol }) => textResult(await t.cancelAllOpenOrders(normalizeSymbol(symbol))),\n },\n {\n name: 'futures_modify_order',\n description: 'Modify an open order (price/quantity/stopPrice). Cannot modify when position side is BOTH and closePosition is true. Signed.',\n inputSchema: z.object({\n symbol,\n side,\n quantity: z.union([z.string(), z.number()]),\n price: z.union([z.string(), z.number()]).optional(),\n orderId: z.number().int().positive().optional(),\n origClientOrderId: z.string().optional(),\n stopPrice: z.union([z.string(), z.number()]).optional(),\n timeInForce: z.enum(['GTC', 'IOC', 'FOK', 'GTX']).optional(),\n positionSide,\n newClientOrderId: z.string().optional(),\n }),\n handler: async (args) => textResult(await t.modifyOrder({ ...args, symbol: normalizeSymbol(args.symbol) })),\n },\n {\n name: 'futures_order_modify_history',\n description: 'Get order modification history for a symbol. Signed.',\n inputSchema: z.object({ symbol, startTime, endTime, limit }),\n handler: async ({ symbol, startTime, endTime, limit }) =>\n textResult(await t.getOrderModifyHistory(normalizeSymbol(symbol), { startTime, endTime, limit })),\n },\n {\n name: 'futures_batch_orders',\n description: 'Place up to 5 orders in one request (array of order objects, max 30 per minute per symbol). Signed.',\n inputSchema: z.object({ orders: z.array(orderParamsSchema).min(1).max(5) }),\n handler: async (args) => {\n const mapped = args.orders.map((o: z.infer<typeof orderParamsSchema>) => ({ ...o, symbol: normalizeSymbol(o.symbol) }));\n return textResult(await t.createBatchOrders(mapped));\n },\n },\n {\n name: 'futures_cancel_batch_orders',\n description: 'Cancel multiple orders at once (up to 10 by orderId list or client order id list). Signed.',\n inputSchema: z.object({\n symbol,\n orderIdList: z.array(z.number().int().positive()).max(10).optional(),\n origClientOrderIdList: z.array(z.string()).max(10).optional(),\n }),\n handler: async ({ symbol, orderIdList, origClientOrderIdList }) =>\n textResult(await t.cancelBatchOrders(normalizeSymbol(symbol), { orderIdList, origClientOrderIdList })),\n },\n {\n name: 'futures_set_leverage',\n description: 'Change initial leverage for a symbol (1-125, within bracket). Signed.',\n inputSchema: z.object({ symbol, leverage: z.number().int().min(1).max(125) }),\n handler: async ({ symbol, leverage }) => textResult(await t.setLeverage(normalizeSymbol(symbol), leverage)),\n },\n {\n name: 'futures_set_margin_type',\n description: 'Change margin type for a symbol: isolated or cross. Only allowed when no open position for the symbol. Signed.',\n inputSchema: z.object({ symbol, marginType: z.enum(['isolated', 'cross']) }),\n handler: async ({ symbol, marginType }) => textResult(await t.setMarginType(normalizeSymbol(symbol), marginType)),\n },\n {\n name: 'futures_modify_position_margin',\n description: 'Add or reduce isolated position margin. marginType: 1 = add margin, 2 = reduce margin. Signed.',\n inputSchema: z.object({ symbol, amount: z.number().positive(), marginType: z.enum(['1', '2']).describe('1 = add margin, 2 = reduce margin') }),\n handler: async ({ symbol, amount, marginType }) => textResult(await t.modifyPositionMargin(normalizeSymbol(symbol), amount, Number(marginType))),\n },\n {\n name: 'futures_countdown_cancel_all',\n description: 'Auto-cancel all open orders for a symbol after countdownTime ms (0 = cancel the countdown). Emergency circuit breaker. Signed.',\n inputSchema: z.object({ symbol, countdownTime: z.number().int().min(100).max(60000) }),\n handler: async ({ symbol, countdownTime }) => textResult(await t.setCountdownCancelAll(normalizeSymbol(symbol), countdownTime)),\n },\n {\n name: 'futures_new_algo_order',\n description: 'Place a conditional algo order (CONDITIONAL or VP). CONDITIONAL supports STOP_MARKET/TAKE_PROFIT_MARKET types with triggerPrice; VP is a volume-participation order with urgency and quantity. Signed.',\n inputSchema: z.object({\n algoType: z.enum(['CONDITIONAL', 'VP']),\n symbol,\n side,\n positionSide,\n type: z.enum(['STOP_MARKET', 'TAKE_PROFIT_MARKET', 'LIMIT']).describe('For CONDITIONAL: STOP_MARKET/TAKE_PROFIT_MARKET. For VP: LIMIT'),\n quantity: z.union([z.string(), z.number()]),\n triggerPrice: z.union([z.string(), z.number()]).optional().describe('Required for CONDITIONAL'),\n price: z.union([z.string(), z.number()]).optional(),\n timeInForce: z.enum(['GTC', 'IOC', 'FOK', 'GTX']).optional(),\n workingType: z.enum(['MARK_PRICE', 'CONTRACT_PRICE']).optional(),\n priceProtect: z.boolean().optional(),\n reduceOnly: z.boolean().optional(),\n closePosition: z.boolean().optional(),\n urgency: z.enum(['LOW', 'MEDIUM', 'HIGH']).optional().describe('Required for VP'),\n clientAlgoId: z.string().optional(),\n }),\n handler: async (args) =>\n textResult(await t.createAlgoOrder({ ...args, symbol: normalizeSymbol(args.symbol) })),\n },\n {\n name: 'futures_cancel_algo_order',\n description: 'Cancel an open algo order by algoId or clientAlgoId. Signed.',\n inputSchema: z.object({ symbol, algoId: z.number().int().positive().optional(), clientAlgoId: z.string().optional() }),\n handler: async ({ symbol, algoId, clientAlgoId }) =>\n textResult(await t.cancelAlgoOrder(normalizeSymbol(symbol), { algoId, clientAlgoId })),\n },\n {\n name: 'futures_cancel_all_algo_orders',\n description: 'Cancel all open algo orders for a symbol. Signed.',\n inputSchema: z.object({ symbol }),\n handler: async ({ symbol }) => textResult(await t.cancelAllOpenAlgoOrders(normalizeSymbol(symbol))),\n },\n {\n name: 'futures_get_algo_order',\n description: 'Query an algo order by algoId or clientAlgoId. Signed.',\n inputSchema: z.object({ symbol, algoId: z.number().int().positive().optional(), clientAlgoId: z.string().optional() }),\n handler: async ({ symbol, algoId, clientAlgoId }) =>\n textResult(await t.getAlgoOrder(normalizeSymbol(symbol), { algoId, clientAlgoId })),\n },\n {\n name: 'futures_open_algo_orders',\n description: 'Get all current open algo orders, optionally filtered by symbol. Signed.',\n inputSchema: z.object({ symbol: optionalSymbol }),\n handler: async ({ symbol }) => textResult(await t.getOpenAlgoOrders(symbol ? normalizeSymbol(symbol) : undefined)),\n },\n {\n name: 'futures_all_algo_orders',\n description: 'Get historical algo orders for a symbol with optional time range. Signed.',\n inputSchema: z.object({ symbol, startTime, endTime, limit }),\n handler: async ({ symbol, startTime, endTime, limit }) =>\n textResult(await t.getAllAlgoOrders(normalizeSymbol(symbol), { startTime, endTime, limit })),\n },\n {\n name: 'futures_convert_exchange_info',\n description: 'List asset pairs eligible for futures Convert, optionally filtered by fromAsset/toAsset.',\n inputSchema: z.object({ fromAsset: z.string().optional(), toAsset: z.string().optional() }),\n handler: async ({ fromAsset, toAsset }) => textResult(await t.convertExchangeInfo({ fromAsset, toAsset })),\n },\n {\n name: 'futures_convert_get_quote',\n description: 'Request a Convert quote between two assets (quote expires quickly; accept with futures_convert_accept_quote). Signed.',\n inputSchema: z.object({\n fromAsset: z.string().min(1),\n toAsset: z.string().min(1),\n fromAmount: z.number().positive().optional(),\n toAmount: z.number().positive().optional(),\n validTime: z.enum(['10s', '30s', '1m', '2m']).optional(),\n }),\n handler: async (args) => textResult(await t.convertGetQuote(args)),\n },\n {\n name: 'futures_convert_accept_quote',\n description: 'Accept a previously requested Convert quote by quoteId. Signed.',\n inputSchema: z.object({ quoteId: z.string().min(1) }),\n handler: async ({ quoteId }) => textResult(await t.convertAcceptQuote(quoteId)),\n },\n {\n name: 'futures_convert_order_status',\n description: 'Query the status of a Convert order by orderId or quoteId. Signed.',\n inputSchema: z.object({ orderId: z.string().optional(), quoteId: z.string().optional() }),\n handler: async ({ orderId, quoteId }) => textResult(await t.convertOrderStatus({ orderId, quoteId })),\n },\n ];\n}\n","import { z } from 'zod';\nimport type { BinanceClient } from '../client/BinanceClient.js';\nimport type { ToolDefinition } from './types.js';\nimport { textResult, normalizeSymbol } from './types.js';\n\ninterface WsBuffer {\n subscriptions: Set<string>;\n events: { stream: string; payload: unknown; ts: number }[];\n}\n\nconst buffers = new Map<BinanceClient, WsBuffer>();\nconst MAX_BUFFER = 500;\n\nfunction bufferFor(client: BinanceClient): WsBuffer {\n let buffer = buffers.get(client);\n if (!buffer) {\n buffer = { subscriptions: new Set(), events: [] };\n buffers.set(client, buffer);\n client.futures.ws.on('message', (stream: string, payload: unknown) => {\n buffer!.events.push({ stream, payload, ts: Date.now() });\n if (buffer!.events.length > MAX_BUFFER) buffer!.events.splice(0, buffer!.events.length - MAX_BUFFER);\n });\n }\n return buffer;\n}\n\nexport function getBufferedWsEvents(client: BinanceClient, limit = 50): unknown[] {\n return bufferFor(client).events.slice(-limit);\n}\n\nexport function clearBufferedWsEvents(client: BinanceClient): void {\n bufferFor(client).events = [];\n}\n\nexport function wsTools(client: BinanceClient): ToolDefinition[] {\n const buffer = bufferFor(client);\n\n return [\n {\n name: 'futures_ws_subscribe',\n description:\n 'Subscribe to real-time market data streams. Topic format: <symbol>@<stream>, e.g. btcusdt@aggTrade, btcusdt@kline_1m, btcusdt@depth20, btcusdt@markPrice@1s, btcusdt@bookTicker, btcusdt@ticker, btcusdt@miniTicker, btcusdt@forceOrder, or all-market topics !ticker@arr, !bookTicker, !markPrice@arr, !forceOrder@arr, !miniTicker@arr. Multiple topics can be passed at once.',\n inputSchema: z.object({\n topics: z.array(z.string().min(1)).min(1).describe('Stream topics, e.g. [\"btcusdt@aggTrade\", \"btcusdt@kline_1m\"]'),\n }),\n handler: async ({ topics }) => {\n const normalized = topics.map((t: string) => t.trim().toLowerCase());\n client.futures.ws.subscribe(normalized);\n normalized.forEach((t: string) => buffer.subscriptions.add(t));\n return textResult({ subscribed: normalized, active: [...buffer.subscriptions] });\n },\n },\n {\n name: 'futures_ws_unsubscribe',\n description: 'Unsubscribe from previously subscribed market data streams.',\n inputSchema: z.object({ topics: z.array(z.string().min(1)).min(1) }),\n handler: async ({ topics }) => {\n const normalized = topics.map((t: string) => t.trim().toLowerCase());\n client.futures.ws.unsubscribe(normalized);\n normalized.forEach((t: string) => buffer.subscriptions.delete(t));\n return textResult({ unsubscribed: normalized, active: [...buffer.subscriptions] });\n },\n },\n {\n name: 'futures_ws_subscriptions',\n description: 'List the currently subscribed WebSocket market streams for this client.',\n inputSchema: z.object({}),\n handler: async () => textResult({ active: [...buffer.subscriptions] }),\n },\n {\n name: 'futures_ws_events',\n description:\n 'Read the buffered real-time payloads received since the last read for the subscribed streams (aggregate trades, klines, depth deltas, mark price, book tickers, tickers, force orders). Payloads are parsed; depth deltas must be applied to a snapshot from futures_order_book.',\n inputSchema: z.object({ limit: z.number().int().min(1).max(200).default(50) }),\n handler: async ({ limit }) => textResult(getBufferedWsEvents(client, limit)),\n },\n {\n name: 'futures_ws_clear_events',\n description: 'Clear the buffered WebSocket events so the next read only returns new payloads.',\n inputSchema: z.object({}),\n handler: async () => {\n clearBufferedWsEvents(client);\n return textResult({ cleared: true });\n },\n },\n {\n name: 'futures_ws_start_user_stream',\n description:\n 'Start the user data stream: creates a listenKey, connects the private WebSocket, and begins a 30-minute keep-alive. Emits private events (ACCOUNT_UPDATE, ORDER_TRADE_UPDATE, MARGIN_CALL, ACCOUNT_CONFIG_UPDATE, listenKeyExpired) that the application can consume from the client.',\n inputSchema: z.object({}),\n handler: async () => textResult({ listenKey: await client.startUserStream() }),\n },\n {\n name: 'futures_ws_stop_user_stream',\n description: 'Stop the user data stream: closes the private WebSocket and invalidates the listenKey.',\n inputSchema: z.object({}),\n handler: async () => {\n client.closeUserStream();\n return textResult({ stopped: true });\n },\n },\n {\n name: 'futures_ws_api_order_status',\n description: 'Query an order via the signed WebSocket API (order.status) — lower-latency alternative to futures_get_order.',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'),\n orderId: z.number().int().positive().optional(),\n origClientOrderId: z.string().optional(),\n }),\n handler: async ({ symbol, orderId, origClientOrderId }) =>\n textResult(await client.futures.wsApi.orderStatus({ symbol: normalizeSymbol(symbol), orderId, origClientOrderId })),\n },\n {\n name: 'futures_ws_api_account_status',\n description: 'Get account info via the signed WebSocket API (account.status).',\n inputSchema: z.object({}),\n handler: async () => textResult(await client.futures.wsApi.accountStatus()),\n },\n {\n name: 'futures_ws_api_account_position',\n description: 'Get current positions via the signed WebSocket API (account.position).',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT').optional() }),\n handler: async ({ symbol }) =>\n textResult(await client.futures.wsApi.accountPosition(symbol ? { symbol: normalizeSymbol(symbol) } : {})),\n },\n {\n name: 'futures_ws_api_user_data_stream_start',\n description: 'Create a listenKey via the signed WebSocket API (userDataStream.start) — no REST call required.',\n inputSchema: z.object({}),\n handler: async () => textResult(await client.futures.wsApi.userDataStreamStart()),\n },\n {\n name: 'futures_ws_api_user_data_stream_stop',\n description: 'Invalidate a listenKey via the signed WebSocket API (userDataStream.stop).',\n inputSchema: z.object({ listenKey: z.string().min(1) }),\n handler: async ({ listenKey }) => textResult(await client.futures.wsApi.userDataStreamStop(listenKey)),\n },\n {\n name: 'futures_ws_api_ticker_price',\n description: 'Get latest price via the unsigned WebSocket API (ticker.price); omit symbol for all symbols.',\n inputSchema: z.object({ symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT').optional() }),\n handler: async ({ symbol }) =>\n textResult(await client.futures.wsApi.tickerPrice(symbol ? { symbol: normalizeSymbol(symbol) } : {})),\n },\n {\n name: 'futures_ws_api_order_book',\n description: 'Get order-book depth via the unsigned WebSocket API (depth).',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('USD-M pair, e.g. BTCUSDT'),\n limit: z.enum(['5', '10', '20', '50', '100', '500', '1000']).optional(),\n }),\n handler: async ({ symbol, limit }) =>\n textResult(await client.futures.wsApi.depth({ symbol: normalizeSymbol(symbol), limit })),\n },\n ];\n}\n","import type { BinanceClient } from '../client/BinanceClient.js';\nimport { accountTools } from './account.tools.js';\nimport { derivedTools } from './derived.tools.js';\nimport { marketDataTools } from './market-data.tools.js';\nimport { createPaperContext, type PaperContext, paperTools } from './paper.tools.js';\nimport { spotTools } from './spot.tools.js';\nimport { tradingTools } from './trading.tools.js';\nimport { wsTools } from './ws.tools.js';\nimport type { ToolDefinition } from './types.js';\nimport { toToolList } from './types.js';\n\nexport type { ToolDefinition, ToolContext } from './types.js';\nexport { toJsonSchema, toOpenAITool, toAnthropicTool, toMCPTool, toToolList, textResult } from './types.js';\nexport { marketDataTools } from './market-data.tools.js';\nexport { accountTools } from './account.tools.js';\nexport { tradingTools } from './trading.tools.js';\nexport { spotTools } from './spot.tools.js';\nexport { derivedTools } from './derived.tools.js';\nexport { wsTools, getBufferedWsEvents, clearBufferedWsEvents } from './ws.tools.js';\nexport { createPaperContext, paperTools, type PaperState, type PaperPosition, type PaperEvent, type PaperContext } from './paper.tools.js';\n\nexport interface FuturesToolkit {\n client: BinanceClient;\n tools: ToolDefinition[];\n market: ToolDefinition[];\n account: ToolDefinition[];\n trading: ToolDefinition[];\n spot: ToolDefinition[];\n ws: ToolDefinition[];\n /** Composite tools that fan out over several endpoints. */\n derived: ToolDefinition[];\n paper: ToolDefinition[];\n paperContext: PaperContext;\n}\n\nexport function createFuturesToolkit(client: BinanceClient): FuturesToolkit {\n const market = marketDataTools(client);\n const account = accountTools(client);\n const trading = tradingTools(client);\n const spot = spotTools(client);\n const ws = wsTools(client);\n const derived = derivedTools(client);\n const paperContext = createPaperContext(client);\n const paper = paperTools(paperContext);\n return {\n client,\n tools: [...market, ...account, ...trading, ...spot, ...ws, ...derived, ...paper],\n market,\n account,\n trading,\n spot,\n ws,\n derived,\n paper,\n paperContext,\n };\n}\n\nexport function toolkitToFormats(toolkit: FuturesToolkit): {\n openai: Record<string, unknown>[];\n anthropic: Record<string, unknown>[];\n mcp: Record<string, unknown>[];\n} {\n return {\n openai: toToolList(toolkit.tools, 'openai'),\n anthropic: toToolList(toolkit.tools, 'anthropic'),\n mcp: toToolList(toolkit.tools, 'mcp'),\n };\n}\n"],"mappings":"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","names":["num","symbol","symbol","period","limit","z","http","symbol","limit","http","contractType","symbol","limit","http","symbol","z","z","http","symbol","z","http","z","http","symbol","z","http","symbol","symbol","symbol","period","http","z","http","contractType","symbol","period","http","symbol","http","symbol","http","z","http","symbol","z","http","symbol","z","http","z","symbol","contractType","symbol","EventEmitter","WebSocket","EventEmitter","WebSocket","EventEmitter","WebSocket","EventEmitter","WebSocket","symbol","contractType","EventEmitter","WebSocket","EventEmitter","WebSocket","WebSocket","WebSocket","randomUUID","WebSocket","buildQueryString","randomUUID","WebSocket","side","z","z","z","symbol","startTime","endTime","limit","z","z","period","z","z","startTime","endTime","symbol","limit","contractType","period","z","z","symbol","side","z","z","optionalSymbol","limit","startTime","endTime","symbol","z","symbol","z","optionalSymbol","limit","startTime","endTime","side","z","limit","z","symbol"]}
|