infoway-sdk 0.1.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 +214 -0
- package/dist/index.d.mts +317 -0
- package/dist/index.d.ts +317 -0
- package/dist/index.js +615 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +561 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/rest/market-data.ts","../src/rest/stock.ts","../src/rest/crypto.ts","../src/rest/japan.ts","../src/rest/india.ts","../src/rest/common.ts","../src/rest/basic.ts","../src/rest/market.ts","../src/rest/plate.ts","../src/rest/stock-info.ts","../src/client.ts","../src/ws/client.ts","../src/types.ts"],"sourcesContent":["/**\n * Infoway SDK exception types.\n */\n\n/** Raised when a request times out. */\nexport class InfowayTimeoutError extends Error {\n constructor(message = \"Request timed out\") {\n super(message);\n this.name = \"InfowayTimeoutError\";\n }\n}\n\n/** Raised when the API returns a non-success response. */\nexport class InfowayAPIError extends Error {\n readonly ret: number;\n readonly msg: string;\n readonly traceId?: string;\n\n constructor(ret: number, msg: string, traceId?: string) {\n const suffix = traceId ? ` (trace: ${traceId})` : \"\";\n super(`[${ret}] ${msg}${suffix}`);\n this.name = \"InfowayAPIError\";\n this.ret = ret;\n this.msg = msg;\n this.traceId = traceId;\n }\n}\n\n/** Raised on 401 Unauthorized. */\nexport class InfowayAuthError extends InfowayAPIError {\n constructor(msg = \"Unauthorized\") {\n super(401, msg);\n this.name = \"InfowayAuthError\";\n }\n}\n","/**\n * Low-level HTTP client with retry and error handling.\n * Uses native fetch (Node 18+).\n */\n\nimport { InfowayAPIError, InfowayAuthError, InfowayTimeoutError } from \"./errors.js\";\nimport type { ApiResponse } from \"./types.js\";\n\nconst DEFAULT_BASE_URL = \"https://data.infoway.io\";\nconst DEFAULT_TIMEOUT = 15_000;\nconst DEFAULT_RETRIES = 3;\n\nexport class HttpClient {\n private readonly _apiKey: string;\n private readonly _baseUrl: string;\n private readonly _timeout: number;\n private readonly _maxRetries: number;\n\n constructor(options: {\n apiKey?: string;\n baseUrl?: string;\n timeout?: number;\n maxRetries?: number;\n } = {}) {\n this._apiKey = options.apiKey || process.env.INFOWAY_API_KEY || \"\";\n this._baseUrl = (options.baseUrl || DEFAULT_BASE_URL).replace(/\\/+$/, \"\");\n this._timeout = options.timeout ?? DEFAULT_TIMEOUT;\n this._maxRetries = options.maxRetries ?? DEFAULT_RETRIES;\n }\n\n /** Expose apiKey for testing. */\n get apiKey(): string {\n return this._apiKey;\n }\n\n async get(path: string, params?: Record<string, string | number | undefined>): Promise<unknown> {\n const url = this._buildUrl(path, params);\n return this._request(\"GET\", url);\n }\n\n async post(path: string, body?: Record<string, unknown>): Promise<unknown> {\n const url = this._buildUrl(path);\n return this._request(\"POST\", url, body);\n }\n\n private _buildUrl(path: string, params?: Record<string, string | number | undefined>): string {\n const url = new URL(path, this._baseUrl);\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined && value !== null) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n return url.toString();\n }\n\n private async _request(method: string, url: string, body?: Record<string, unknown>): Promise<unknown> {\n let lastError: Error | undefined;\n\n for (let attempt = 0; attempt < this._maxRetries; attempt++) {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this._timeout);\n\n const headers: Record<string, string> = {\n apiKey: this._apiKey,\n };\n\n const init: RequestInit = {\n method,\n headers,\n signal: controller.signal,\n };\n\n if (body) {\n headers[\"Content-Type\"] = \"application/json\";\n init.body = JSON.stringify(body);\n }\n\n const resp = await fetch(url, init);\n clearTimeout(timeoutId);\n\n return this._handleResponse(resp);\n } catch (error) {\n if (error instanceof InfowayAPIError || error instanceof InfowayAuthError) {\n throw error;\n }\n\n if (error instanceof DOMException && error.name === \"AbortError\") {\n lastError = new InfowayTimeoutError(`Request to ${url} timed out`);\n } else {\n lastError = error instanceof Error ? error : new Error(String(error));\n }\n\n if (attempt < this._maxRetries - 1) {\n await this._sleep(Math.min(2 ** attempt * 1000, 8000));\n }\n }\n }\n\n throw lastError!;\n }\n\n private async _handleResponse(resp: Response): Promise<unknown> {\n if (resp.status === 401) {\n throw new InfowayAuthError();\n }\n\n const data = (await resp.json()) as ApiResponse;\n const ret = data.ret ?? data.code ?? 200;\n const msg = data.msg ?? \"\";\n const traceId = data.traceId;\n\n if (ret === 401) {\n throw new InfowayAuthError(msg);\n }\n if (ret !== 200) {\n throw new InfowayAPIError(ret, msg, traceId);\n }\n\n return data.data;\n }\n\n private _sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","/**\n * Shared market data methods for trade/depth/kline.\n * Base class for StockClient, CryptoClient, JapanClient, IndiaClient, CommonClient.\n */\n\nimport type { HttpClient } from \"../http.js\";\n\nexport abstract class MarketDataClient {\n protected abstract readonly _prefix: string;\n protected readonly _http: HttpClient;\n\n constructor(http: HttpClient) {\n this._http = http;\n }\n\n /**\n * Get real-time trade data.\n * @param codes - Comma-separated symbol codes (e.g. \"AAPL.US\" or \"AAPL.US,TSLA.US\")\n */\n async getTrade(codes: string): Promise<unknown> {\n return this._http.get(`/${this._prefix}/batch_trade/${codes}`);\n }\n\n /**\n * Get real-time order book depth.\n * @param codes - Comma-separated symbol codes\n */\n async getDepth(codes: string): Promise<unknown> {\n return this._http.get(`/${this._prefix}/batch_depth/${codes}`);\n }\n\n /**\n * Get candlestick/K-line data.\n * @param codes - Comma-separated symbol codes\n * @param klineType - K-line interval (use KlineType enum or number 1-12)\n * @param count - Number of candles to return\n */\n async getKline(codes: string, klineType: number, count: number): Promise<unknown> {\n return this._http.post(`/${this._prefix}/v2/batch_kline`, {\n codes,\n klineType,\n klineCount: count,\n });\n }\n}\n","/** Stock market data client (HK, US, CN). */\n\nimport { MarketDataClient } from \"./market-data.js\";\n\nexport class StockClient extends MarketDataClient {\n protected readonly _prefix = \"stock\";\n}\n","/** Crypto market data client. */\n\nimport { MarketDataClient } from \"./market-data.js\";\n\nexport class CryptoClient extends MarketDataClient {\n protected readonly _prefix = \"crypto\";\n}\n","/** Japan market data client. */\n\nimport { MarketDataClient } from \"./market-data.js\";\n\nexport class JapanClient extends MarketDataClient {\n protected readonly _prefix = \"japan\";\n}\n","/** India market data client. */\n\nimport { MarketDataClient } from \"./market-data.js\";\n\nexport class IndiaClient extends MarketDataClient {\n protected readonly _prefix = \"india\";\n}\n","/** Common market data client. */\n\nimport { MarketDataClient } from \"./market-data.js\";\n\nexport class CommonClient extends MarketDataClient {\n protected readonly _prefix = \"common\";\n}\n","/** Basic information client (symbols, trading days, hours). */\n\nimport type { HttpClient } from \"../http.js\";\n\nexport class BasicClient {\n private readonly _http: HttpClient;\n\n constructor(http: HttpClient) {\n this._http = http;\n }\n\n async getSymbols(market?: string): Promise<unknown> {\n return this._http.get(\"/common/basic/symbols\", market ? { market } : undefined);\n }\n\n async getSymbolInfo(codes: string): Promise<unknown> {\n return this._http.get(\"/common/basic/symbols/info\", { codes });\n }\n\n async getAdjustmentFactors(codes: string): Promise<unknown> {\n return this._http.get(\"/common/basic/symbols/adjustment_factors\", { codes });\n }\n\n async getTradingDays(market: string): Promise<unknown> {\n return this._http.get(\"/common/basic/markets/trading_days\", { market });\n }\n\n async getTradingHours(market?: string): Promise<unknown> {\n return this._http.get(\"/common/basic/markets\", market ? { market } : undefined);\n }\n}\n","/** Market overview client (temperature, breadth, indexes, leaders). */\n\nimport type { HttpClient } from \"../http.js\";\n\nexport class MarketClient {\n private readonly _http: HttpClient;\n\n constructor(http: HttpClient) {\n this._http = http;\n }\n\n async getTemperature(market = \"HK,US,CN,SG\"): Promise<unknown> {\n return this._http.get(\"/common/v2/basic/market/temperature\", { market });\n }\n\n async getBreadth(market: string): Promise<unknown> {\n return this._http.get(`/common/v2/basic/market/breadth/${market}`);\n }\n\n async getIndexes(): Promise<unknown> {\n return this._http.get(\"/common/v2/basic/market/indexes\");\n }\n\n async getLeaders(market: string, limit = 10): Promise<unknown> {\n return this._http.get(`/common/v2/basic/market/leaders/${market}`, { limit });\n }\n\n async getRankConfig(market: string): Promise<unknown> {\n return this._http.get(`/common/v2/basic/market/rank-config/${market}`);\n }\n}\n","/** Plate (sector) data client. */\n\nimport type { HttpClient } from \"../http.js\";\n\nexport class PlateClient {\n private readonly _http: HttpClient;\n\n constructor(http: HttpClient) {\n this._http = http;\n }\n\n async getIndustry(market: string, limit = 200): Promise<unknown> {\n return this._http.get(`/common/v2/basic/plate/industry/${market}`, { limit });\n }\n\n async getConcept(market: string, limit = 100): Promise<unknown> {\n return this._http.get(`/common/v2/basic/plate/concept/${market}`, { limit });\n }\n\n async getMembers(plateSymbol: string, offset = 0, limit = 50): Promise<unknown> {\n return this._http.get(`/common/v2/basic/plate/members/${plateSymbol}`, { offset, limit });\n }\n\n async getIntro(plateSymbol: string): Promise<unknown> {\n return this._http.get(`/common/v2/basic/plate/intro/${plateSymbol}`);\n }\n\n async getChart(market: string, limit = 50): Promise<unknown> {\n return this._http.get(`/common/v2/basic/plate/chart/${market}`, { limit });\n }\n}\n","/** Stock fundamental data client. */\n\nimport type { HttpClient } from \"../http.js\";\n\nexport class StockInfoClient {\n private readonly _http: HttpClient;\n\n constructor(http: HttpClient) {\n this._http = http;\n }\n\n async getValuation(symbol: string): Promise<unknown> {\n return this._http.get(`/common/v2/basic/stock/valuation/${symbol}`);\n }\n\n async getRatings(symbol: string): Promise<unknown> {\n return this._http.get(`/common/v2/basic/stock/ratings/${symbol}`);\n }\n\n async getCompany(symbol: string): Promise<unknown> {\n return this._http.get(`/common/v2/basic/stock/company/${symbol}`);\n }\n\n async getPanorama(symbol: string): Promise<unknown> {\n return this._http.get(`/common/v2/basic/stock/panorama/${symbol}`);\n }\n\n async getConcepts(symbol: string): Promise<unknown> {\n return this._http.get(`/common/v2/basic/stock/concepts/${symbol}`);\n }\n\n async getEvents(symbol: string, limit = 20): Promise<unknown> {\n return this._http.get(`/common/v2/basic/stock/events/${symbol}`, { limit });\n }\n\n async getDrivers(symbol: string): Promise<unknown> {\n return this._http.get(`/common/v2/basic/stock/drivers/${symbol}`);\n }\n}\n","/**\n * Main entry point for the Infoway SDK.\n */\n\nimport { HttpClient } from \"./http.js\";\nimport { StockClient } from \"./rest/stock.js\";\nimport { CryptoClient } from \"./rest/crypto.js\";\nimport { JapanClient } from \"./rest/japan.js\";\nimport { IndiaClient } from \"./rest/india.js\";\nimport { CommonClient } from \"./rest/common.js\";\nimport { BasicClient } from \"./rest/basic.js\";\nimport { MarketClient } from \"./rest/market.js\";\nimport { PlateClient } from \"./rest/plate.js\";\nimport { StockInfoClient } from \"./rest/stock-info.js\";\nimport type { InfowayClientOptions } from \"./types.js\";\n\n/**\n * Infoway API client.\n *\n * @example\n * ```ts\n * import { InfowayClient } from \"infoway-sdk\";\n *\n * const client = new InfowayClient({ apiKey: \"YOUR_API_KEY\" });\n * const trades = await client.stock.getTrade(\"AAPL.US\");\n * const klines = await client.crypto.getKline(\"BTCUSDT\", 8, 100);\n * const temp = await client.market.getTemperature(\"HK,US\");\n * ```\n */\nexport class InfowayClient {\n /** @internal */\n readonly _http: HttpClient;\n\n readonly stock: StockClient;\n readonly crypto: CryptoClient;\n readonly japan: JapanClient;\n readonly india: IndiaClient;\n readonly common: CommonClient;\n readonly basic: BasicClient;\n readonly market: MarketClient;\n readonly plate: PlateClient;\n readonly stockInfo: StockInfoClient;\n\n constructor(options: InfowayClientOptions = {}) {\n this._http = new HttpClient({\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n timeout: options.timeout,\n maxRetries: options.maxRetries,\n });\n\n this.stock = new StockClient(this._http);\n this.crypto = new CryptoClient(this._http);\n this.japan = new JapanClient(this._http);\n this.india = new IndiaClient(this._http);\n this.common = new CommonClient(this._http);\n this.basic = new BasicClient(this._http);\n this.market = new MarketClient(this._http);\n this.plate = new PlateClient(this._http);\n this.stockInfo = new StockInfoClient(this._http);\n }\n}\n","/**\n * WebSocket client with auto-reconnect, heartbeat, and subscription management.\n */\n\nimport WebSocket from \"ws\";\nimport { randomBytes } from \"node:crypto\";\nimport { WsCode } from \"../types.js\";\nimport type { InfowayWebSocketOptions, WsMessage } from \"../types.js\";\n\nconst BASE_WS_URL = \"wss://data.infoway.io/ws\";\nconst HEARTBEAT_INTERVAL = 30_000;\nconst INITIAL_BACKOFF = 1_000;\nconst MAX_BACKOFF = 30_000;\n\ntype MessageHandler = (msg: Record<string, unknown>) => void;\ntype ErrorHandler = (err: Error) => void;\ntype VoidHandler = () => void;\n\nexport class InfowayWebSocket {\n /** @internal */\n readonly _url: string;\n private readonly _maxReconnect: number | undefined;\n private _ws: WebSocket | null = null;\n /** @internal */\n readonly _subscriptions: Set<string> = new Set();\n private _running = false;\n private _backoff = INITIAL_BACKOFF;\n private _heartbeatTimer: ReturnType<typeof setInterval> | null = null;\n\n /** Called when a trade push message is received. */\n onTrade: MessageHandler | null = null;\n /** Called when a depth push message is received. */\n onDepth: MessageHandler | null = null;\n /** Called when a kline push message is received. */\n onKline: MessageHandler | null = null;\n /** Called when an error occurs. */\n onError: ErrorHandler | null = null;\n /** Called after a successful reconnection. */\n onReconnect: VoidHandler | null = null;\n /** Called when the connection is lost. */\n onDisconnect: VoidHandler | null = null;\n\n constructor(options: InfowayWebSocketOptions) {\n const baseUrl = options.baseUrl || BASE_WS_URL;\n this._url = `${baseUrl}?business=${options.business}&apikey=${options.apiKey}`;\n this._maxReconnect = options.maxReconnectAttempts;\n }\n\n /**\n * Build a WebSocket message JSON string.\n * @internal\n */\n _buildMessage(code: WsCode | number, codes?: string): string {\n const msg: WsMessage = {\n code: Number(code),\n trace: randomBytes(6).toString(\"hex\"),\n };\n if (codes !== undefined) {\n msg.data = { codes };\n }\n return JSON.stringify(msg);\n }\n\n /**\n * Connect and start listening. Returns a Promise that resolves\n * when the connection is closed intentionally or max reconnects exceeded.\n */\n async connect(): Promise<void> {\n this._running = true;\n let attempt = 0;\n\n while (this._running) {\n try {\n await this._connectOnce();\n // Connection closed cleanly\n if (!this._running) break;\n } catch (err) {\n if (!this._running) break;\n\n attempt++;\n if (this._maxReconnect !== undefined && attempt > this._maxReconnect) {\n break;\n }\n\n if (this.onDisconnect) this.onDisconnect();\n\n await this._sleep(this._backoff);\n this._backoff = Math.min(this._backoff * 2, MAX_BACKOFF);\n }\n }\n }\n\n private _connectOnce(): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n const ws = new WebSocket(this._url);\n this._ws = ws;\n\n ws.on(\"open\", () => {\n this._backoff = INITIAL_BACKOFF;\n\n // Start heartbeat\n this._startHeartbeat();\n\n // Re-subscribe existing subscriptions\n if (this._subscriptions.size > 0) {\n this._resubscribe();\n if (this.onReconnect) this.onReconnect();\n }\n });\n\n ws.on(\"message\", (raw: WebSocket.RawData) => {\n try {\n const msg = JSON.parse(raw.toString()) as Record<string, unknown>;\n const code = msg.code as number;\n\n if (code === WsCode.PUSH_TRADE && this.onTrade) {\n this.onTrade(msg);\n } else if (code === WsCode.PUSH_DEPTH && this.onDepth) {\n this.onDepth(msg);\n } else if (code === WsCode.PUSH_KLINE && this.onKline) {\n this.onKline(msg);\n }\n // Heartbeat pongs and other messages are silently consumed\n } catch {\n // Non-JSON message, ignore\n }\n });\n\n ws.on(\"close\", () => {\n this._stopHeartbeat();\n if (this._running) {\n reject(new Error(\"Connection closed\"));\n } else {\n resolve();\n }\n });\n\n ws.on(\"error\", (err: Error) => {\n this._stopHeartbeat();\n if (this.onError) this.onError(err);\n reject(err);\n });\n });\n }\n\n private _startHeartbeat(): void {\n this._stopHeartbeat();\n this._heartbeatTimer = setInterval(() => {\n if (this._ws && this._ws.readyState === WebSocket.OPEN) {\n this._ws.send(this._buildMessage(WsCode.HEARTBEAT));\n }\n }, HEARTBEAT_INTERVAL);\n }\n\n private _stopHeartbeat(): void {\n if (this._heartbeatTimer) {\n clearInterval(this._heartbeatTimer);\n this._heartbeatTimer = null;\n }\n }\n\n private _resubscribe(): void {\n const codeMap: Record<string, WsCode> = {\n trade: WsCode.SUB_TRADE,\n depth: WsCode.SUB_DEPTH,\n kline: WsCode.SUB_KLINE,\n };\n\n for (const entry of this._subscriptions) {\n const [subType, codes] = entry.split(\"|\", 2);\n const wsCode = codeMap[subType];\n if (wsCode && this._ws && this._ws.readyState === WebSocket.OPEN) {\n this._ws.send(this._buildMessage(wsCode, codes));\n }\n }\n }\n\n async subscribeTrade(codes: string): Promise<void> {\n this._subscriptions.add(`trade|${codes}`);\n if (this._ws && this._ws.readyState === WebSocket.OPEN) {\n this._ws.send(this._buildMessage(WsCode.SUB_TRADE, codes));\n }\n }\n\n async subscribeDepth(codes: string): Promise<void> {\n this._subscriptions.add(`depth|${codes}`);\n if (this._ws && this._ws.readyState === WebSocket.OPEN) {\n this._ws.send(this._buildMessage(WsCode.SUB_DEPTH, codes));\n }\n }\n\n async subscribeKline(codes: string): Promise<void> {\n this._subscriptions.add(`kline|${codes}`);\n if (this._ws && this._ws.readyState === WebSocket.OPEN) {\n this._ws.send(this._buildMessage(WsCode.SUB_KLINE, codes));\n }\n }\n\n async unsubscribeTrade(codes: string): Promise<void> {\n this._subscriptions.delete(`trade|${codes}`);\n if (this._ws && this._ws.readyState === WebSocket.OPEN) {\n this._ws.send(this._buildMessage(WsCode.UNSUB_TRADE, codes));\n }\n }\n\n async unsubscribeDepth(codes: string): Promise<void> {\n this._subscriptions.delete(`depth|${codes}`);\n if (this._ws && this._ws.readyState === WebSocket.OPEN) {\n this._ws.send(this._buildMessage(WsCode.UNSUB_DEPTH, codes));\n }\n }\n\n async unsubscribeKline(codes: string): Promise<void> {\n this._subscriptions.delete(`kline|${codes}`);\n if (this._ws && this._ws.readyState === WebSocket.OPEN) {\n this._ws.send(this._buildMessage(WsCode.UNSUB_KLINE, codes));\n }\n }\n\n async close(): Promise<void> {\n this._running = false;\n this._stopHeartbeat();\n if (this._ws) {\n this._ws.close();\n this._ws = null;\n }\n }\n\n private _sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","/**\n * Shared type definitions and enums for the Infoway SDK.\n */\n\n/** K-line (candlestick) interval types. */\nexport enum KlineType {\n MIN_1 = 1,\n MIN_5 = 2,\n MIN_15 = 3,\n MIN_30 = 4,\n HOUR_1 = 5,\n HOUR_2 = 6,\n HOUR_4 = 7,\n DAY = 8,\n WEEK = 9,\n MONTH = 10,\n QUARTER = 11,\n YEAR = 12,\n}\n\n/** Business types for WebSocket connections. */\nexport const Business = {\n STOCK: \"stock\",\n JAPAN: \"japan\",\n INDIA: \"india\",\n CRYPTO: \"crypto\",\n COMMON: \"common\",\n} as const;\n\nexport type Business = (typeof Business)[keyof typeof Business];\n\n/** WebSocket message codes. */\nexport enum WsCode {\n SUB_TRADE = 10000,\n PUSH_TRADE = 10001,\n UNSUB_TRADE = 10002,\n SUB_DEPTH = 10003,\n PUSH_DEPTH = 10004,\n UNSUB_DEPTH = 10005,\n SUB_KLINE = 10006,\n PUSH_KLINE = 10007,\n UNSUB_KLINE = 10008,\n HEARTBEAT = 10010,\n}\n\n/** Options for creating an InfowayClient. */\nexport interface InfowayClientOptions {\n /** Your Infoway API key. Falls back to INFOWAY_API_KEY env var. */\n apiKey?: string;\n /** Base URL for REST API. Default: https://data.infoway.io */\n baseUrl?: string;\n /** Request timeout in milliseconds. Default: 15000 */\n timeout?: number;\n /** Max retry attempts for failed requests. Default: 3 */\n maxRetries?: number;\n}\n\n/** Options for creating an InfowayWebSocket. */\nexport interface InfowayWebSocketOptions {\n /** Your Infoway API key. */\n apiKey: string;\n /** Business type (stock, crypto, japan, india, common). */\n business: Business;\n /** Base WebSocket URL. Default: wss://data.infoway.io/ws */\n baseUrl?: string;\n /** Maximum reconnect attempts. Unlimited if not set. */\n maxReconnectAttempts?: number;\n}\n\n/** Standard API response envelope. */\nexport interface ApiResponse<T = unknown> {\n ret: number;\n /** Some endpoints return `code` instead of `ret`. */\n code?: number;\n msg: string;\n traceId?: string;\n data: T;\n}\n\n/** WebSocket message structure. */\nexport interface WsMessage {\n code: number;\n trace: string;\n data?: Record<string, unknown>;\n}\n"],"mappings":"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","names":["KlineType","WsCode"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "infoway-sdk",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Official Node.js/TypeScript SDK for Infoway real-time financial data API",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"module": "./dist/index.mjs",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": {
|
|
11
|
+
"types": "./dist/index.d.mts",
|
|
12
|
+
"default": "./dist/index.mjs"
|
|
13
|
+
},
|
|
14
|
+
"require": {
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"default": "./dist/index.js"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"dist"
|
|
22
|
+
],
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "tsup",
|
|
25
|
+
"test": "vitest run",
|
|
26
|
+
"test:watch": "vitest",
|
|
27
|
+
"lint": "tsc --noEmit",
|
|
28
|
+
"clean": "rm -rf dist"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [
|
|
31
|
+
"infoway",
|
|
32
|
+
"stock",
|
|
33
|
+
"crypto",
|
|
34
|
+
"market-data",
|
|
35
|
+
"financial",
|
|
36
|
+
"websocket",
|
|
37
|
+
"real-time",
|
|
38
|
+
"trading",
|
|
39
|
+
"api"
|
|
40
|
+
],
|
|
41
|
+
"author": "Infoway",
|
|
42
|
+
"license": "MIT",
|
|
43
|
+
"engines": {
|
|
44
|
+
"node": ">=18.0.0"
|
|
45
|
+
},
|
|
46
|
+
"dependencies": {
|
|
47
|
+
"ws": "^8.18.0"
|
|
48
|
+
},
|
|
49
|
+
"devDependencies": {
|
|
50
|
+
"@types/node": "^20.17.0",
|
|
51
|
+
"@types/ws": "^8.5.13",
|
|
52
|
+
"tsup": "^8.3.0",
|
|
53
|
+
"typescript": "^5.6.0",
|
|
54
|
+
"vitest": "^2.1.0"
|
|
55
|
+
}
|
|
56
|
+
}
|