@structbuild/sdk 0.2.11 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/errors.ts", "../src/http.ts", "../src/namespaces/base.ts", "../src/namespaces/assets.ts", "../src/namespaces/holders.ts", "../src/namespaces/tags.ts", "../src/namespaces/events.ts", "../src/namespaces/markets.ts", "../src/namespaces/series.ts", "../src/namespaces/trader.ts", "../src/namespaces/bonds.ts", "../src/namespaces/search.ts", "../src/namespaces/orderBook.ts", "../src/namespaces/webhooks.ts", "../src/client.ts", "../src/ws-transport.ts", "../src/ws.ts", "../src/paginate.ts"],
3
+ "sources": ["../src/errors.ts", "../src/http.ts", "../src/namespaces/base.ts", "../src/namespaces/assets.ts", "../src/namespaces/holders.ts", "../src/namespaces/tags.ts", "../src/namespaces/events.ts", "../src/namespaces/markets.ts", "../src/namespaces/series.ts", "../src/namespaces/trader.ts", "../src/namespaces/bonds.ts", "../src/namespaces/search.ts", "../src/namespaces/orderBook.ts", "../src/namespaces/webhooks.ts", "../src/client.ts", "../src/ws-transport.ts", "../src/ws.ts", "../src/ws-alerts.ts", "../src/paginate.ts"],
4
4
  "sourcesContent": [
5
5
  "export class StructError extends Error {\n\tconstructor(message: string, options?: ErrorOptions) {\n\t\tsuper(message, options);\n\t\tthis.name = \"StructError\";\n\t}\n}\n\nexport class HttpError extends StructError {\n\treadonly status: number;\n\treadonly statusText: string;\n\treadonly body: unknown;\n\treadonly responseHeaders: Headers | undefined;\n\n\tconstructor(status: number, statusText: string, body: unknown, responseHeaders?: Headers) {\n\t\tsuper(`HTTP ${status}: ${statusText}`);\n\t\tthis.name = \"HttpError\";\n\t\tthis.status = status;\n\t\tthis.statusText = statusText;\n\t\tthis.body = body;\n\t\tthis.responseHeaders = responseHeaders;\n\t}\n}\n\nexport class NetworkError extends StructError {\n\tconstructor(message: string, options?: ErrorOptions) {\n\t\tsuper(message, options);\n\t\tthis.name = \"NetworkError\";\n\t}\n}\n\nexport class TimeoutError extends StructError {\n\tconstructor(timeout: number) {\n\t\tsuper(`Request timed out after ${timeout}ms`);\n\t\tthis.name = \"TimeoutError\";\n\t}\n}\n\nexport class WebSocketError extends StructError {\n\tconstructor(message: string, options?: ErrorOptions) {\n\t\tsuper(message, options);\n\t\tthis.name = \"WebSocketError\";\n\t}\n}\n\nexport class WebSocketClosedError extends WebSocketError {\n\treadonly code: number;\n\treadonly reason: string;\n\n\tconstructor(code: number, reason: string) {\n\t\tsuper(`WebSocket closed: ${code} ${reason}`);\n\t\tthis.name = \"WebSocketClosedError\";\n\t\tthis.code = code;\n\t\tthis.reason = reason;\n\t}\n}\n",
6
6
  "import { HttpError, NetworkError, StructError, TimeoutError } from \"./errors.js\";\nimport type { HttpClientConfig, HttpResponse, RequestOptions, RequestHookInfo, ResponseHookInfo, RetryConfig, ApiResponseInfo, PaginationInfo } from \"./types/http.js\";\n\nconst DEFAULT_TIMEOUT = 30_000;\nconst DEFAULT_MAX_RETRIES = 3;\nconst DEFAULT_INITIAL_DELAY_MS = 1_000;\nconst DEFAULT_MAX_DELAY_MS = 30_000;\nconst RETRYABLE_STATUSES = new Set([429, 500, 502, 503, 504]);\n\nexport class HttpClient {\n\tprivate readonly baseUrl: string;\n\tprivate readonly defaultHeaders: Record<string, string>;\n\tprivate readonly timeout: number;\n\tprivate readonly retry: RetryConfig | undefined;\n\tprivate readonly onRequest: ((info: RequestHookInfo) => void | Promise<void>) | undefined;\n\tprivate readonly onResponse: ((info: ResponseHookInfo) => void | Promise<void>) | undefined;\n\n\tconstructor(config: HttpClientConfig) {\n\t\tthis.baseUrl = config.baseUrl.replace(/\\/+$/, \"\");\n\t\tthis.defaultHeaders = config.defaultHeaders ?? {};\n\t\tthis.timeout = config.timeout ?? DEFAULT_TIMEOUT;\n\t\tthis.retry = config.retry;\n\t\tthis.onRequest = config.onRequest;\n\t\tthis.onResponse = config.onResponse;\n\t}\n\n\tasync get<T>(path: string, options?: RequestOptions): Promise<HttpResponse<T>> {\n\t\treturn this.request<T>(\"GET\", path, options);\n\t}\n\n\tasync post<T>(path: string, body?: unknown, options?: RequestOptions): Promise<HttpResponse<T>> {\n\t\treturn this.request<T>(\"POST\", path, options, body);\n\t}\n\n\tasync put<T>(path: string, body?: unknown, options?: RequestOptions): Promise<HttpResponse<T>> {\n\t\treturn this.request<T>(\"PUT\", path, options, body);\n\t}\n\n\tasync delete<T>(path: string, options?: RequestOptions): Promise<HttpResponse<T>> {\n\t\treturn this.request<T>(\"DELETE\", path, options);\n\t}\n\n\tprivate async request<T>(method: string, path: string, options?: RequestOptions, body?: unknown): Promise<HttpResponse<T>> {\n\t\tconst maxRetries = this.retry\n\t\t\t? (this.retry.maxRetries ?? DEFAULT_MAX_RETRIES)\n\t\t\t: 0;\n\t\tconst initialDelay = this.retry?.initialDelayMs ?? DEFAULT_INITIAL_DELAY_MS;\n\t\tconst maxDelay = this.retry?.maxDelayMs ?? DEFAULT_MAX_DELAY_MS;\n\n\t\tlet lastError: unknown;\n\n\t\tfor (let attempt = 0; attempt <= maxRetries; attempt++) {\n\t\t\tif (attempt > 0 && lastError !== undefined) {\n\t\t\t\tconst retryAfter = lastError instanceof HttpError\n\t\t\t\t\t? this.parseRetryAfter(lastError)\n\t\t\t\t\t: undefined;\n\t\t\t\tconst exponentialDelay = Math.min(initialDelay * 2 ** (attempt - 1), maxDelay);\n\t\t\t\tconst delay = retryAfter ?? exponentialDelay;\n\t\t\t\tawait this.sleep(delay, options?.signal);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\treturn await this.executeRequest<T>(method, path, options, body);\n\t\t\t} catch (error) {\n\t\t\t\tif (attempt < maxRetries && this.shouldRetry(error)) {\n\t\t\t\t\tlastError = error;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tif (lastError instanceof Error) {\n\t\t\tthrow lastError;\n\t\t}\n\t\tthrow new NetworkError(\"Request failed after retries\");\n\t}\n\n\tprivate async executeRequest<T>(method: string, path: string, options?: RequestOptions, body?: unknown): Promise<HttpResponse<T>> {\n\t\tconst url = this.buildUrl(path, options?.params);\n\t\tconst headers = { ...this.defaultHeaders, ...options?.headers };\n\n\t\tif (body !== undefined) {\n\t\t\theaders[\"Content-Type\"] = \"application/json\";\n\t\t}\n\n\t\tconst controller = new AbortController();\n\t\tconst timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n\t\tconst signal = options?.signal ? AbortSignal.any([options.signal, controller.signal]) : controller.signal;\n\n\t\ttry {\n\t\t\tif (this.onRequest) {\n\t\t\t\ttry { await this.onRequest({ method, url, headers }); } catch {}\n\t\t\t}\n\n\t\t\tconst startTime = performance.now();\n\t\t\tconst response = await fetch(url, {\n\t\t\t\tmethod,\n\t\t\t\theaders,\n\t\t\t\tsignal,\n\t\t\t\tbody: body !== undefined ? JSON.stringify(body) : undefined,\n\t\t\t});\n\n\t\t\tif (this.onResponse) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.onResponse({\n\t\t\t\t\t\tmethod,\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tstatus: response.status,\n\t\t\t\t\t\theaders: response.headers,\n\t\t\t\t\t\tdurationMs: performance.now() - startTime,\n\t\t\t\t\t});\n\t\t\t\t} catch {}\n\t\t\t}\n\n\t\t\tif (!response.ok) {\n\t\t\t\tlet body: unknown;\n\t\t\t\ttry {\n\t\t\t\t\tbody = await response.json();\n\t\t\t\t} catch {\n\t\t\t\t\tbody = await response.text();\n\t\t\t\t}\n\t\t\t\tthrow new HttpError(response.status, response.statusText, body, response.headers);\n\t\t\t}\n\n\t\t\treturn await this.parseApiResponse<T>(response, method);\n\t\t} catch (error) {\n\t\t\tif (error instanceof HttpError) throw error;\n\t\t\tif (error instanceof SyntaxError || error instanceof TypeError) {\n\t\t\t\tthrow new StructError(\"Failed to parse HTTP response body\", { cause: error });\n\t\t\t}\n\n\t\t\tif (error instanceof DOMException && error.name === \"AbortError\") {\n\t\t\t\tif (options?.signal?.aborted) throw error;\n\t\t\t\tthrow new TimeoutError(this.timeout);\n\t\t\t}\n\n\t\t\tthrow new NetworkError(\"Network request failed\", { cause: error });\n\t\t} finally {\n\t\t\tclearTimeout(timeoutId);\n\t\t}\n\t}\n\n\tprivate shouldRetry(error: unknown): boolean {\n\t\tif (error instanceof HttpError) {\n\t\t\treturn RETRYABLE_STATUSES.has(error.status);\n\t\t}\n\t\treturn error instanceof NetworkError || error instanceof TimeoutError;\n\t}\n\n\tprivate async parseApiResponse<T>(response: Response, method: string): Promise<HttpResponse<T>> {\n\t\tif (method === \"HEAD\" || response.status === 204 || response.status === 205) {\n\t\t\treturn { data: undefined as T, message: null, success: true };\n\t\t}\n\n\t\tconst text = await response.text();\n\t\tif (text.length === 0) {\n\t\t\treturn { data: undefined as T, message: null, success: true };\n\t\t}\n\n\t\tconst contentType = response.headers.get(\"content-type\")?.toLowerCase() ?? \"\";\n\t\tif (!contentType.includes(\"json\")) {\n\t\t\treturn { data: text as T, message: null, success: true };\n\t\t}\n\n\t\tconst body = JSON.parse(text);\n\n\t\tif (body && typeof body === \"object\" && \"success\" in body && \"data\" in body) {\n\t\t\treturn {\n\t\t\t\tdata: body.data as T,\n\t\t\t\tmessage: body.message ?? null,\n\t\t\t\tsuccess: body.success,\n\t\t\t\tinfo: body.info as ApiResponseInfo | undefined,\n\t\t\t\tpagination: body.pagination as PaginationInfo | undefined,\n\t\t\t};\n\t\t}\n\n\t\treturn { data: body as T, message: null, success: true };\n\t}\n\n\tprivate parseRetryAfter(error: HttpError): number | undefined {\n\t\tconst header = error.responseHeaders?.get(\"retry-after\");\n\t\tif (!header) return undefined;\n\n\t\tconst seconds = Number(header);\n\t\tif (!Number.isNaN(seconds) && seconds > 0) return seconds * 1_000;\n\n\t\tconst date = Date.parse(header);\n\t\tif (!Number.isNaN(date)) {\n\t\t\tconst delay = date - Date.now();\n\t\t\treturn delay > 0 ? delay : undefined;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tprivate sleep(ms: number, signal?: AbortSignal): Promise<void> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (signal?.aborted) {\n\t\t\t\treject(signal.reason);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst timer = setTimeout(resolve, ms);\n\t\t\tsignal?.addEventListener(\"abort\", () => {\n\t\t\t\tclearTimeout(timer);\n\t\t\t\treject(signal.reason);\n\t\t\t}, { once: true });\n\t\t});\n\t}\n\n\tprivate buildUrl(path: string, params?: Record<string, string | number | boolean | undefined>): string {\n\t\tconst url = new URL(this.baseUrl + path);\n\n\t\tif (params) {\n\t\t\tfor (const [key, value] of Object.entries(params)) {\n\t\t\t\tif (value !== undefined) {\n\t\t\t\t\turl.searchParams.set(key, String(value));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn url.toString();\n\t}\n}\n",
@@ -17,11 +17,12 @@
17
17
  "import { Namespace } from \"./base.js\";\nimport type { HttpResponse } from \"../types/http.js\";\nimport type { Venue } from \"../types/common.js\";\nimport type {\n\tGetOrderBookParams,\n\tGetOrderBookHistoryParams,\n\tGetMarketOrderBookParams,\n\tGetSpreadHistoryParams,\n} from \"../types/index.js\";\n\nexport class OrderBookNamespace extends Namespace {\n\tasync getOrderBook(params: GetOrderBookParams, venue?: Venue): Promise<HttpResponse<unknown>> {\n\t\treturn this.get<unknown>(venue, \"/order-book\", { params: { ...params } });\n\t}\n\n\tasync getOrderBookHistory(params?: GetOrderBookHistoryParams, venue?: Venue): Promise<HttpResponse<unknown>> {\n\t\treturn this.get<unknown>(venue, \"/order-book/history\", { params: { ...params } });\n\t}\n\n\tasync getMarketOrderBook(params?: GetMarketOrderBookParams, venue?: Venue): Promise<HttpResponse<unknown>> {\n\t\treturn this.get<unknown>(venue, \"/order-book/market\", { params: { ...params } });\n\t}\n\n\tasync getSpreadHistory(params?: GetSpreadHistoryParams, venue?: Venue): Promise<HttpResponse<unknown>> {\n\t\treturn this.get<unknown>(venue, \"/order-book/spread\", { params: { ...params } });\n\t}\n}\n",
18
18
  "import { PlatformNamespace } from \"./base.js\";\nimport type { HttpResponse } from \"../types/http.js\";\nimport type {\n\tWebhookResponse,\n\tWebhookListResponseBody,\n\tWebhookTestResponseBody,\n\tRotateSecretResponse,\n\tListEventsResponse,\n\tListWebhooksParams,\n\tGetWebhookParams,\n\tCreateWebhookParams,\n\tUpdateWebhookParams,\n\tDeleteWebhookParams,\n\tDeleteWebhookResponse,\n\tTestWebhookParams,\n\tRotateSecretParams,\n} from \"../types/index.js\";\n\nexport class WebhooksNamespace extends PlatformNamespace {\n\tasync list(params?: ListWebhooksParams): Promise<HttpResponse<WebhookListResponseBody>> {\n\t\treturn this.http.get<WebhookListResponseBody>(\"/webhooks\", { params: { ...params } });\n\t}\n\n\tasync create(body: CreateWebhookParams): Promise<HttpResponse<WebhookResponse>> {\n\t\treturn this.http.post<WebhookResponse>(\"/webhooks\", body);\n\t}\n\n\tasync getWebhook(params: GetWebhookParams): Promise<HttpResponse<WebhookResponse>> {\n\t\treturn this.http.get<WebhookResponse>(`/webhooks/${encodeURIComponent(params.webhookId)}`);\n\t}\n\n\tasync update(params: UpdateWebhookParams): Promise<HttpResponse<WebhookResponse>> {\n\t\tconst { webhookId, ...body } = params;\n\t\treturn this.http.put<WebhookResponse>(`/webhooks/${encodeURIComponent(webhookId)}`, body);\n\t}\n\n\tasync deleteWebhook(params: DeleteWebhookParams): Promise<HttpResponse<DeleteWebhookResponse>> {\n\t\treturn this.http.delete<DeleteWebhookResponse>(`/webhooks/${encodeURIComponent(params.webhookId)}`);\n\t}\n\n\tasync test(params: TestWebhookParams): Promise<HttpResponse<WebhookTestResponseBody>> {\n\t\treturn this.http.post<WebhookTestResponseBody>(`/webhooks/${encodeURIComponent(params.webhookId)}/test`);\n\t}\n\n\tasync rotateSecret(params: RotateSecretParams): Promise<HttpResponse<RotateSecretResponse>> {\n\t\treturn this.http.post<RotateSecretResponse>(`/webhooks/${encodeURIComponent(params.webhookId)}/rotate-secret`);\n\t}\n\n\tasync listEvents(): Promise<HttpResponse<ListEventsResponse>> {\n\t\treturn this.http.get<ListEventsResponse>(\"/webhooks/events\");\n\t}\n}\n",
19
19
  "import { HttpClient } from \"./http.js\";\nimport type { Venue } from \"./types/common.js\";\nimport type { RetryConfig, RequestHookInfo, ResponseHookInfo } from \"./types/index.js\";\nimport {\n\tAssetsNamespace,\n\tHoldersNamespace,\n\tTagsNamespace,\n\tEventsNamespace,\n\tMarketsNamespace,\n\tSeriesNamespace,\n\tTraderNamespace,\n\tBondsNamespace,\n\tSearchNamespace,\n\tOrderBookNamespace,\n\tWebhooksNamespace,\n} from \"./namespaces/index.js\";\n\nconst DEFAULT_BASE_URL = \"https://api.struct.to/v1\";\n\nexport interface StructClientConfig {\n\tapiKey: string;\n\tjwt?: string;\n\tbaseUrl?: string;\n\tvenue?: Venue;\n\theaders?: Record<string, string>;\n\ttimeout?: number;\n\tretry?: RetryConfig;\n\tonRequest?: (info: RequestHookInfo) => void | Promise<void>;\n\tonResponse?: (info: ResponseHookInfo) => void | Promise<void>;\n}\n\nexport class StructClient {\n\treadonly assets: AssetsNamespace;\n\treadonly holders: HoldersNamespace;\n\treadonly tags: TagsNamespace;\n\treadonly events: EventsNamespace;\n\treadonly markets: MarketsNamespace;\n\treadonly series: SeriesNamespace;\n\treadonly trader: TraderNamespace;\n\treadonly bonds: BondsNamespace;\n\treadonly search: SearchNamespace;\n\treadonly orderBook: OrderBookNamespace;\n\treadonly webhooks: WebhooksNamespace;\n\n\tconstructor(config: StructClientConfig) {\n\t\tconst authHeaders: Record<string, string> = {\n\t\t\t\"X-API-Key\": config.apiKey,\n\t\t};\n\t\tif (config.jwt) {\n\t\t\tauthHeaders[\"Authorization\"] = `Bearer ${config.jwt}`;\n\t\t}\n\n\t\tconst http = new HttpClient({\n\t\t\tbaseUrl: config.baseUrl ?? DEFAULT_BASE_URL,\n\t\t\tdefaultHeaders: {\n\t\t\t\t...authHeaders,\n\t\t\t\t...config.headers,\n\t\t\t},\n\t\t\ttimeout: config.timeout,\n\t\t\tretry: config.retry,\n\t\t\tonRequest: config.onRequest,\n\t\t\tonResponse: config.onResponse,\n\t\t});\n\n\t\tconst venue = config.venue ?? \"polymarket\";\n\t\tthis.assets = new AssetsNamespace(http, venue);\n\t\tthis.holders = new HoldersNamespace(http, venue);\n\t\tthis.tags = new TagsNamespace(http, venue);\n\t\tthis.events = new EventsNamespace(http, venue);\n\t\tthis.markets = new MarketsNamespace(http, venue);\n\t\tthis.series = new SeriesNamespace(http, venue);\n\t\tthis.trader = new TraderNamespace(http, venue);\n\t\tthis.bonds = new BondsNamespace(http, venue);\n\t\tthis.search = new SearchNamespace(http, venue);\n\t\tthis.orderBook = new OrderBookNamespace(http, venue);\n\t\tthis.webhooks = new WebhooksNamespace(http);\n\t}\n}\n",
20
- "import { WebSocketError, WebSocketClosedError } from \"./errors.js\";\nimport type { ConnectionState, WebSocketMessage } from \"./types/ws.js\";\nimport type { RetryConfig } from \"./types/http.js\";\n\nconst DEFAULT_INITIAL_DELAY_MS = 1_000;\nconst DEFAULT_MAX_DELAY_MS = 30_000;\n\nexport interface WebSocketTransportCallbacks {\n\tonOpen: () => void;\n\tonClose: (code: number, reason: string) => void;\n\tonError: (error: Error) => void;\n\tonMessage: (data: unknown) => void;\n\tonReconnecting: (attempt: number) => void;\n}\n\nexport class WebSocketTransport {\n\tprivate ws: WebSocket | null = null;\n\tprivate _state: ConnectionState = \"disconnected\";\n\tprivate reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n\tprivate reconnectAttempt = 0;\n\tprivate intentionalClose = false;\n\tprivate readonly pendingMessages: WebSocketMessage[] = [];\n\tprivate readonly replayMessages: WebSocketMessage[] = [];\n\tprivate readonly url: string;\n\tprivate readonly retry: RetryConfig;\n\tprivate readonly callbacks: WebSocketTransportCallbacks;\n\n\tconstructor(url: string, retry: RetryConfig, callbacks: WebSocketTransportCallbacks) {\n\t\tthis.url = url;\n\t\tthis.retry = retry;\n\t\tthis.callbacks = callbacks;\n\t}\n\n\tget state(): ConnectionState {\n\t\treturn this._state;\n\t}\n\n\tconnect(): void {\n\t\tif (this._state === \"connected\" || this._state === \"connecting\" || this._state === \"reconnecting\") {\n\t\t\treturn;\n\t\t}\n\t\tif (this.ws && (this.ws.readyState === WebSocket.OPEN || this.ws.readyState === WebSocket.CONNECTING)) {\n\t\t\treturn;\n\t\t}\n\t\tthis.intentionalClose = false;\n\t\tthis.clearReconnectTimer();\n\t\tthis.setState(\"connecting\");\n\t\tthis.createSocket();\n\t}\n\n\tdisconnect(): void {\n\t\tthis.intentionalClose = true;\n\t\tthis.clearReconnectTimer();\n\t\tthis.pendingMessages.length = 0;\n\t\tthis.replayMessages.length = 0;\n\t\tif (this.ws) {\n\t\t\tthis.ws.close(1000, \"client disconnect\");\n\t\t\tthis.ws = null;\n\t\t}\n\t\tthis.setState(\"disconnected\");\n\t}\n\n\tsend(message: WebSocketMessage): void {\n\t\tif (this._state === \"connected\" && this.ws?.readyState === WebSocket.OPEN) {\n\t\t\tthis.ws.send(JSON.stringify(message));\n\t\t} else {\n\t\t\tthis.pendingMessages.push(message);\n\t\t}\n\t}\n\n\taddReplayMessage(message: WebSocketMessage): void {\n\t\tthis.replayMessages.push(message);\n\t}\n\n\tremoveReplayMessages(predicate: (msg: WebSocketMessage) => boolean): void {\n\t\tfor (let i = this.replayMessages.length - 1; i >= 0; i--) {\n\t\t\tif (predicate(this.replayMessages[i]!)) {\n\t\t\t\tthis.replayMessages.splice(i, 1);\n\t\t\t}\n\t\t}\n\t}\n\n\tclearReplayMessages(): void {\n\t\tthis.replayMessages.length = 0;\n\t}\n\n\tprivate createSocket(): void {\n\t\ttry {\n\t\t\tthis.ws = new WebSocket(this.url);\n\t\t} catch (err) {\n\t\t\tthis.callbacks.onError(\n\t\t\t\tnew WebSocketError(\"Failed to create WebSocket\", { cause: err }),\n\t\t\t);\n\t\t\tthis.scheduleReconnect();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.ws.onopen = () => {\n\t\t\tthis._state = \"connected\";\n\t\t\tthis.reconnectAttempt = 0;\n\t\t\tthis.replaySubscriptions();\n\t\t\tthis.flushPendingMessages();\n\t\t\tthis.callbacks.onOpen();\n\t\t};\n\n\t\tthis.ws.onclose = (event: CloseEvent) => {\n\t\t\tthis.ws = null;\n\t\t\tif (this.intentionalClose) {\n\t\t\t\tthis.setState(\"disconnected\");\n\t\t\t\tthis.callbacks.onClose(event.code, event.reason);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.callbacks.onClose(event.code, event.reason);\n\t\t\tthis.scheduleReconnect();\n\t\t};\n\n\t\tthis.ws.onerror = () => {\n\t\t\tthis.callbacks.onError(new WebSocketError(\"WebSocket connection error\"));\n\t\t};\n\n\t\tthis.ws.onmessage = (event: MessageEvent) => {\n\t\t\ttry {\n\t\t\t\tconst data: unknown = JSON.parse(String(event.data));\n\t\t\t\tthis.callbacks.onMessage(data);\n\t\t\t} catch {\n\t\t\t\tthis.callbacks.onError(new WebSocketError(\"Failed to parse WebSocket message\"));\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate replaySubscriptions(): void {\n\t\tfor (const msg of this.replayMessages) {\n\t\t\tif (this.ws?.readyState === WebSocket.OPEN) {\n\t\t\t\tthis.ws.send(JSON.stringify(msg));\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate flushPendingMessages(): void {\n\t\twhile (this.pendingMessages.length > 0) {\n\t\t\tconst msg = this.pendingMessages.shift()!;\n\t\t\tif (this.ws?.readyState === WebSocket.OPEN) {\n\t\t\t\tthis.ws.send(JSON.stringify(msg));\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate scheduleReconnect(): void {\n\t\tconst maxRetries = this.retry.maxRetries ?? Infinity;\n\t\tif (this.reconnectAttempt >= maxRetries) {\n\t\t\tthis.setState(\"disconnected\");\n\t\t\tthis.callbacks.onError(\n\t\t\t\tnew WebSocketClosedError(1006, \"Max reconnection attempts reached\"),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.setState(\"reconnecting\");\n\t\tthis.reconnectAttempt++;\n\t\tthis.callbacks.onReconnecting(this.reconnectAttempt);\n\n\t\tconst initialDelay = this.retry.initialDelayMs ?? DEFAULT_INITIAL_DELAY_MS;\n\t\tconst maxDelay = this.retry.maxDelayMs ?? DEFAULT_MAX_DELAY_MS;\n\t\tconst exponentialDelay = Math.min(initialDelay * 2 ** (this.reconnectAttempt - 1), maxDelay);\n\t\tconst jitter = exponentialDelay * 0.2 * Math.random();\n\t\tconst delay = exponentialDelay + jitter;\n\n\t\tthis.reconnectTimer = setTimeout(() => {\n\t\t\tthis.reconnectTimer = null;\n\t\t\tthis.createSocket();\n\t\t}, delay);\n\t}\n\n\tprivate clearReconnectTimer(): void {\n\t\tif (this.reconnectTimer !== null) {\n\t\t\tclearTimeout(this.reconnectTimer);\n\t\t\tthis.reconnectTimer = null;\n\t\t}\n\t}\n\n\tprivate setState(state: ConnectionState): void {\n\t\tthis._state = state;\n\t}\n}\n",
21
- "import { WebSocketTransport } from \"./ws-transport.js\";\nimport type {\n\tConnectionState,\n\tStructWebSocketConfig,\n\tWebSocketEventMap,\n\tWebSocketMessage,\n\tWebSocketServerMessage,\n} from \"./types/ws.js\";\nimport type { Address } from \"./types/common.js\";\n\nconst DEFAULT_BASE_URL = \"https://api.struct.to/v1\";\n\ntype Listener<T> = (payload: T) => void;\n\nexport class StructWebSocket {\n\tprivate readonly transport: WebSocketTransport;\n\tprivate readonly listeners = new Map<string, Set<Function>>();\n\tprivate readonly activeMarkets = new Set<string>();\n\tprivate readonly activeMarketPositions = new Set<string>();\n\tprivate readonly activeWallets = new Set<string>();\n\tprivate readonly activeConditions = new Set<string>();\n\tprivate readonly activeSpecialRooms = new Set<string>();\n\n\tconstructor(config: StructWebSocketConfig) {\n\t\tconst httpBase = (config.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/+$/, \"\");\n\t\tconst wsBase = httpBase.replace(/^https:\\/\\//, \"wss://\").replace(/^http:\\/\\//, \"ws://\");\n\t\tconst url = config.jwt\n\t\t\t? `${wsBase}?api-key=${encodeURIComponent(config.apiKey)}&token=${encodeURIComponent(config.jwt)}`\n\t\t\t: `${wsBase}?token=${encodeURIComponent(config.apiKey)}`;\n\n\t\tthis.transport = new WebSocketTransport(\n\t\t\turl,\n\t\t\tconfig.reconnect ?? {},\n\t\t\t{\n\t\t\t\tonOpen: () => this.handleOpen(),\n\t\t\t\tonClose: (code, reason) => this.handleClose(code, reason),\n\t\t\t\tonError: (error) => this.emit(\"error\", error),\n\t\t\t\tonMessage: (data) => this.handleMessage(data),\n\t\t\t\tonReconnecting: (attempt) => this.emit(\"reconnecting\", { attempt }),\n\t\t\t},\n\t\t);\n\t}\n\n\tget state(): ConnectionState {\n\t\treturn this.transport.state;\n\t}\n\n\tconnect(): void {\n\t\tthis.transport.connect();\n\t}\n\n\tdisconnect(): void {\n\t\tthis.activeMarkets.clear();\n\t\tthis.activeMarketPositions.clear();\n\t\tthis.activeWallets.clear();\n\t\tthis.activeConditions.clear();\n\t\tthis.activeSpecialRooms.clear();\n\t\tthis.transport.disconnect();\n\t}\n\n\ton<K extends keyof WebSocketEventMap>(event: K, listener: Listener<WebSocketEventMap[K]>): this {\n\t\tlet set = this.listeners.get(event as string);\n\t\tif (!set) {\n\t\t\tset = new Set();\n\t\t\tthis.listeners.set(event as string, set);\n\t\t}\n\t\tset.add(listener);\n\t\treturn this;\n\t}\n\n\toff<K extends keyof WebSocketEventMap>(event: K, listener: Listener<WebSocketEventMap[K]>): this {\n\t\tthis.listeners.get(event as string)?.delete(listener);\n\t\treturn this;\n\t}\n\n\tonce<K extends keyof WebSocketEventMap>(event: K, listener: Listener<WebSocketEventMap[K]>): this {\n\t\tconst wrapper = (payload: WebSocketEventMap[K]) => {\n\t\t\tthis.off(event, wrapper);\n\t\t\tlistener(payload);\n\t\t};\n\t\treturn this.on(event, wrapper);\n\t}\n\n\tsubscribeMarket(conditionId: string): void {\n\t\tif (this.activeMarkets.has(conditionId)) return;\n\t\tthis.activeMarkets.add(conditionId);\n\t\tconst msg = this.marketSubscribeMessage(conditionId);\n\t\tthis.transport.addReplayMessage(msg);\n\t\tthis.transport.send(msg);\n\t}\n\n\tunsubscribeMarket(conditionId: string): void {\n\t\tif (!this.activeMarkets.has(conditionId)) return;\n\t\tthis.activeMarkets.delete(conditionId);\n\t\tconst msg: WebSocketMessage = {\n\t\t\ttype: \"unsubscribe_market\",\n\t\t\troom_id: `market_${conditionId}`,\n\t\t\tmessage: {},\n\t\t};\n\t\tthis.transport.removeReplayMessages(\n\t\t\t(m) => m.type === \"subscribe_market\" && m.room_id === `market_${conditionId}`,\n\t\t);\n\t\tthis.transport.send(msg);\n\t}\n\n\tsubscribeMarketByPosition(positionId: string): void {\n\t\tif (this.activeMarketPositions.has(positionId)) return;\n\t\tthis.activeMarketPositions.add(positionId);\n\t\tconst msg = this.marketPositionSubscribeMessage(positionId);\n\t\tthis.transport.addReplayMessage(msg);\n\t\tthis.transport.send(msg);\n\t}\n\n\tunsubscribeMarketByPosition(positionId: string): void {\n\t\tif (!this.activeMarketPositions.has(positionId)) return;\n\t\tthis.activeMarketPositions.delete(positionId);\n\t\tconst msg: WebSocketMessage = {\n\t\t\ttype: \"unsubscribe_market\",\n\t\t\troom_id: `market_position_${positionId}`,\n\t\t\tmessage: {},\n\t\t};\n\t\tthis.transport.removeReplayMessages(\n\t\t\t(m) => m.type === \"subscribe_market\" && m.room_id === `market_position_${positionId}`,\n\t\t);\n\t\tthis.transport.send(msg);\n\t}\n\n\ttrackWallets(addresses: Address[]): void {\n\t\tconst uniqueAddresses = [...new Set(addresses)];\n\t\tconst added = uniqueAddresses.filter((addr) => !this.activeWallets.has(addr));\n\t\tif (added.length === 0) return;\n\t\tfor (const addr of added) this.activeWallets.add(addr);\n\t\tconst msg = this.walletTrackMessage(\"subscribe\", added);\n\t\tthis.rebuildWalletReplay();\n\t\tthis.transport.send(msg);\n\t}\n\n\tuntrackWallets(addresses: Address[]): void {\n\t\tconst uniqueAddresses = [...new Set(addresses)];\n\t\tconst removed = uniqueAddresses.filter((addr) => this.activeWallets.has(addr));\n\t\tif (removed.length === 0) return;\n\t\tfor (const addr of removed) this.activeWallets.delete(addr);\n\t\tconst msg = this.walletTrackMessage(\"unsubscribe\", removed);\n\t\tthis.rebuildWalletReplay();\n\t\tthis.transport.send(msg);\n\t}\n\n\tsubscribeWhaleTrades(): void {\n\t\tthis.subscribeSpecialRoom(\"whale_trades\");\n\t}\n\n\tunsubscribeWhaleTrades(): void {\n\t\tthis.unsubscribeSpecialRoom(\"whale_trades\");\n\t}\n\n\tsubscribeSmartMoneyTrades(): void {\n\t\tthis.subscribeSpecialRoom(\"smart_money_trades\");\n\t}\n\n\tunsubscribeSmartMoneyTrades(): void {\n\t\tthis.unsubscribeSpecialRoom(\"smart_money_trades\");\n\t}\n\n\tsubscribeInsiderTrades(): void {\n\t\tthis.subscribeSpecialRoom(\"insider_trades\");\n\t}\n\n\tunsubscribeInsiderTrades(): void {\n\t\tthis.unsubscribeSpecialRoom(\"insider_trades\");\n\t}\n\n\ttrackConditions(conditionIds: string[]): void {\n\t\tconst uniqueConditionIds = [...new Set(conditionIds)];\n\t\tconst added = uniqueConditionIds.filter((id) => !this.activeConditions.has(id));\n\t\tif (added.length === 0) return;\n\t\tfor (const id of added) this.activeConditions.add(id);\n\t\tconst msg = this.conditionsTrackMessage(\"subscribe\", added);\n\t\tthis.rebuildConditionsReplay();\n\t\tthis.transport.send(msg);\n\t}\n\n\tuntrackConditions(conditionIds: string[]): void {\n\t\tconst uniqueConditionIds = [...new Set(conditionIds)];\n\t\tconst removed = uniqueConditionIds.filter((id) => this.activeConditions.has(id));\n\t\tif (removed.length === 0) return;\n\t\tfor (const id of removed) this.activeConditions.delete(id);\n\t\tconst msg = this.conditionsTrackMessage(\"unsubscribe\", removed);\n\t\tthis.rebuildConditionsReplay();\n\t\tthis.transport.send(msg);\n\t}\n\n\tprivate handleOpen(): void {\n\t\tthis.emit(\"connected\", undefined as never);\n\t}\n\n\tprivate handleClose(code: number, reason: string): void {\n\t\tthis.emit(\"disconnected\", { code, reason });\n\t}\n\n\tprivate handleMessage(raw: unknown): void {\n\t\tconst msg = raw as WebSocketServerMessage;\n\t\tif (!msg || typeof msg !== \"object\") return;\n\n\t\tconst roomId = msg.room_id ?? \"\";\n\t\tconst type = msg.type;\n\n\t\tif (type === \"market_trade\" || roomId.startsWith(\"market_\")) {\n\t\t\tthis.emit(\"market_trade\", msg.data as never);\n\t\t} else if (type === \"whale_trade\" || roomId === \"whale_trades\") {\n\t\t\tthis.emit(\"whale_trade\", msg.data as never);\n\t\t} else if (type === \"smart_money_trade\" || roomId === \"smart_money_trades\") {\n\t\t\tthis.emit(\"smart_money_trade\", msg.data as never);\n\t\t} else if (type === \"insider_trade\" || roomId === \"insider_trades\") {\n\t\t\tthis.emit(\"insider_trade\", msg.data as never);\n\t\t} else if (type === \"wallet_tracking_alert\") {\n\t\t\tthis.emit(\"wallet_tracking_alert\", msg.data as never);\n\t\t} else if (type === \"conditions_tracking_alert\") {\n\t\t\tthis.emit(\"conditions_tracking_alert\", msg.data as never);\n\t\t}\n\t}\n\n\tprivate emit<K extends keyof WebSocketEventMap>(event: K, payload: WebSocketEventMap[K]): void {\n\t\tconst set = this.listeners.get(event as string);\n\t\tif (!set) return;\n\t\tfor (const fn of set) {\n\t\t\ttry {\n\t\t\t\t(fn as Listener<WebSocketEventMap[K]>)(payload);\n\t\t\t} catch {}\n\t\t}\n\t}\n\n\tprivate marketSubscribeMessage(conditionId: string): WebSocketMessage {\n\t\treturn { type: \"subscribe_market\", room_id: `market_${conditionId}`, message: {} };\n\t}\n\n\tprivate marketPositionSubscribeMessage(positionId: string): WebSocketMessage {\n\t\treturn { type: \"subscribe_market\", room_id: `market_position_${positionId}`, message: {} };\n\t}\n\n\tprivate walletTrackMessage(action: string, addresses: Address[]): WebSocketMessage {\n\t\treturn { type: \"wallet_tracking\", action, wallet_addresses: addresses };\n\t}\n\n\tprivate conditionsTrackMessage(action: string, conditionIds: string[]): WebSocketMessage {\n\t\treturn { type: \"conditions_tracking\", action, condition_ids: conditionIds };\n\t}\n\n\tprivate subscribeSpecialRoom(roomId: string): void {\n\t\tif (this.activeSpecialRooms.has(roomId)) return;\n\t\tthis.activeSpecialRooms.add(roomId);\n\t\tconst msg: WebSocketMessage = { type: \"subscribe_market\", room_id: roomId, message: {} };\n\t\tthis.transport.addReplayMessage(msg);\n\t\tthis.transport.send(msg);\n\t}\n\n\tprivate unsubscribeSpecialRoom(roomId: string): void {\n\t\tif (!this.activeSpecialRooms.has(roomId)) return;\n\t\tthis.activeSpecialRooms.delete(roomId);\n\t\tconst msg: WebSocketMessage = { type: \"unsubscribe_market\", room_id: roomId, message: {} };\n\t\tthis.transport.removeReplayMessages(\n\t\t\t(m) => m.type === \"subscribe_market\" && m.room_id === roomId,\n\t\t);\n\t\tthis.transport.send(msg);\n\t}\n\n\tprivate rebuildWalletReplay(): void {\n\t\tthis.transport.removeReplayMessages((m) => m.type === \"wallet_tracking\");\n\t\tif (this.activeWallets.size > 0) {\n\t\t\tthis.transport.addReplayMessage(\n\t\t\t\tthis.walletTrackMessage(\"subscribe\", [...this.activeWallets]),\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate rebuildConditionsReplay(): void {\n\t\tthis.transport.removeReplayMessages((m) => m.type === \"conditions_tracking\");\n\t\tif (this.activeConditions.size > 0) {\n\t\t\tthis.transport.addReplayMessage(\n\t\t\t\tthis.conditionsTrackMessage(\"subscribe\", [...this.activeConditions]),\n\t\t\t);\n\t\t}\n\t}\n}\n",
20
+ "import { WebSocketError, WebSocketClosedError } from \"./errors.js\";\nimport type { ConnectionState } from \"./types/ws.js\";\nimport type { RetryConfig } from \"./types/http.js\";\n\nconst DEFAULT_INITIAL_DELAY_MS = 1_000;\nconst DEFAULT_MAX_DELAY_MS = 30_000;\nconst DEFAULT_MAX_PENDING_MESSAGES = 256;\nconst AUTH_FAILURE_CLOSE_CODES = new Set([1008, 4401]);\n\ninterface QueuedMessage {\n\tmessage: Record<string, unknown>;\n}\n\ninterface ReplayMessageGroup {\n\tmessages: QueuedMessage[];\n}\n\ninterface ConnectWaiter {\n\tresolve: () => void;\n\treject: (err: Error) => void;\n}\n\nexport function buildWebSocketUrl(\n\tpath: string,\n\tconfig: { apiKey: string; jwt?: string; baseUrl?: string },\n\tdefaultBaseUrl: string,\n): string {\n\tconst base = trimTrailingSlashes(config.baseUrl ?? defaultBaseUrl);\n\tconst wsBase = toWebSocketBaseUrl(base);\n\tconst params = new URLSearchParams({ \"api-key\": config.apiKey });\n\tif (config.jwt) params.set(\"token\", config.jwt);\n\treturn `${wsBase}${path}?${params.toString()}`;\n}\n\nfunction trimTrailingSlashes(value: string): string {\n\tlet end = value.length;\n\twhile (end > 0 && value.charCodeAt(end - 1) === 47) {\n\t\tend--;\n\t}\n\treturn end === value.length ? value : value.slice(0, end);\n}\n\nfunction toWebSocketBaseUrl(baseUrl: string): string {\n\tif (baseUrl.startsWith(\"https://\")) {\n\t\treturn `wss://${baseUrl.slice(\"https://\".length)}`;\n\t}\n\tif (baseUrl.startsWith(\"http://\")) {\n\t\treturn `ws://${baseUrl.slice(\"http://\".length)}`;\n\t}\n\treturn baseUrl;\n}\n\nexport interface WebSocketTransportCallbacks {\n\tonOpen: () => void;\n\tonClose: (code: number, reason: string) => void;\n\tonError: (error: Error) => void;\n\tonMessage: (data: unknown) => void;\n\tonReconnecting: (attempt: number) => void;\n\tonReconnectFailed: (error: Error) => void;\n\tonAuthFailed: (error: WebSocketClosedError) => void;\n\tonWarning: (warning: Error) => void;\n}\n\nexport class WebSocketTransport {\n\tprivate ws: WebSocket | null = null;\n\tprivate _state: ConnectionState = \"disconnected\";\n\tprivate reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n\tprivate reconnectAttempt = 0;\n\tprivate intentionalClose = false;\n\tprivate readonly connectWaiters = new Set<ConnectWaiter>();\n\tprivate readonly pendingMessages: QueuedMessage[] = [];\n\tprivate readonly replayMessages: ReplayMessageGroup[] = [];\n\tprivate readonly getUrl: () => string;\n\tprivate readonly retry: RetryConfig;\n\tprivate readonly callbacks: WebSocketTransportCallbacks;\n\n\tconstructor(url: string | (() => string), retry: RetryConfig, callbacks: WebSocketTransportCallbacks) {\n\t\tthis.getUrl = typeof url === \"function\" ? url : () => url;\n\t\tthis.retry = retry;\n\t\tthis.callbacks = callbacks;\n\t}\n\n\tget state(): ConnectionState {\n\t\treturn this._state;\n\t}\n\n\tconnect(): Promise<void> {\n\t\tif (this._state === \"connected\") return Promise.resolve();\n\t\tconst promise = this.createConnectPromise();\n\t\tif (this._state === \"connecting\" || this._state === \"reconnecting\") {\n\t\t\treturn promise;\n\t\t}\n\n\t\tthis.intentionalClose = false;\n\t\tthis.clearReconnectTimer();\n\t\tthis.setState(\"connecting\");\n\t\tthis.createSocket();\n\t\treturn promise;\n\t}\n\n\tdisconnect(): void {\n\t\tthis.intentionalClose = true;\n\t\tthis.clearReconnectTimer();\n\t\tthis.pendingMessages.length = 0;\n\t\tthis.replayMessages.length = 0;\n\t\tthis.rejectConnect(new WebSocketClosedError(1000, \"client disconnect\"));\n\t\tif (this.ws) {\n\t\t\tthis.ws.close(1000, \"client disconnect\");\n\t\t\tthis.ws = null;\n\t\t}\n\t\tthis.setState(\"disconnected\");\n\t}\n\n\tsend(message: Record<string, unknown>): boolean {\n\t\tconst queuedMessage: QueuedMessage = { message };\n\t\tif (this.sendMessage(queuedMessage)) return true;\n\t\tthis.enqueueMessage(this.pendingMessages, queuedMessage, \"pending\");\n\t\treturn false;\n\t}\n\n\tsendNow(message: Record<string, unknown>): boolean {\n\t\treturn this.sendMessage({ message });\n\t}\n\n\taddReplayMessage(message: Record<string, unknown>): void {\n\t\tthis.addReplayMessages([message]);\n\t}\n\n\taddReplayMessages(messages: Record<string, unknown>[]): void {\n\t\tthis.enqueueReplayMessages(messages.map((message) => ({ message })));\n\t}\n\n\tclearReplayMessages(): void {\n\t\tthis.replayMessages.length = 0;\n\t}\n\n\tclose(code: number, reason: string): void {\n\t\tthis.ws?.close(code, reason);\n\t}\n\n\tprivate createConnectPromise(): Promise<void> {\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\tthis.connectWaiters.add({ resolve, reject });\n\t\t});\n\t}\n\n\tprivate resolveConnect(): void {\n\t\tfor (const waiter of this.connectWaiters) {\n\t\t\twaiter.resolve();\n\t\t}\n\t\tthis.connectWaiters.clear();\n\t}\n\n\tprivate rejectConnect(error: Error): void {\n\t\tfor (const waiter of this.connectWaiters) {\n\t\t\twaiter.reject(error);\n\t\t}\n\t\tthis.connectWaiters.clear();\n\t}\n\n\tprivate createSocket(): void {\n\t\ttry {\n\t\t\tthis.ws = new WebSocket(this.getUrl());\n\t\t} catch (err) {\n\t\t\tconst error = new WebSocketError(\"Failed to create WebSocket\", { cause: err });\n\t\t\tthis.callbacks.onError(error);\n\t\t\tthis.scheduleReconnect();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.ws.onopen = () => {\n\t\t\tthis._state = \"connected\";\n\t\t\tthis.reconnectAttempt = 0;\n\t\t\tthis.replaySubscriptions();\n\t\t\tthis.flushPendingMessages();\n\t\t\tthis.resolveConnect();\n\t\t\tthis.callbacks.onOpen();\n\t\t};\n\n\t\tthis.ws.onclose = (event: CloseEvent) => {\n\t\t\tthis.ws = null;\n\t\t\tif (this.intentionalClose) {\n\t\t\t\tthis.setState(\"disconnected\");\n\t\t\t\tthis.callbacks.onClose(event.code, event.reason);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst error = new WebSocketClosedError(event.code, event.reason);\n\t\t\tthis.callbacks.onClose(event.code, event.reason);\n\t\t\tif (this.isAuthFailure(event.code)) {\n\t\t\t\tthis.setState(\"disconnected\");\n\t\t\t\tthis.rejectConnect(error);\n\t\t\t\tthis.callbacks.onAuthFailed(error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.scheduleReconnect();\n\t\t};\n\n\t\tthis.ws.onerror = () => {\n\t\t\tthis.callbacks.onError(new WebSocketError(\"WebSocket connection error\"));\n\t\t};\n\n\t\tthis.ws.onmessage = (event: MessageEvent) => {\n\t\t\ttry {\n\t\t\t\tconst data: unknown = JSON.parse(String(event.data));\n\t\t\t\tthis.callbacks.onMessage(data);\n\t\t\t} catch {\n\t\t\t\tthis.callbacks.onError(new WebSocketError(\"Failed to parse WebSocket message\"));\n\t\t\t}\n\t\t};\n\t}\n\n\tprivate replaySubscriptions(): void {\n\t\tfor (const replayGroup of this.replayMessages) {\n\t\t\tfor (const queuedMessage of replayGroup.messages) {\n\t\t\t\tthis.sendMessage(queuedMessage);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate flushPendingMessages(): void {\n\t\twhile (this.pendingMessages.length > 0) {\n\t\t\tthis.sendMessage(this.pendingMessages.shift()!);\n\t\t}\n\t}\n\n\tprivate scheduleReconnect(): void {\n\t\tconst maxRetries = this.retry.maxRetries ?? Infinity;\n\t\tif (this.reconnectAttempt >= maxRetries) {\n\t\t\tconst error = new WebSocketClosedError(1006, \"Max reconnection attempts reached\");\n\t\t\tthis.setState(\"disconnected\");\n\t\t\tthis.rejectConnect(error);\n\t\t\tthis.callbacks.onReconnectFailed(error);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.setState(\"reconnecting\");\n\t\tthis.reconnectAttempt++;\n\t\tthis.callbacks.onReconnecting(this.reconnectAttempt);\n\n\t\tconst initialDelay = this.retry.initialDelayMs ?? DEFAULT_INITIAL_DELAY_MS;\n\t\tconst maxDelay = this.retry.maxDelayMs ?? DEFAULT_MAX_DELAY_MS;\n\t\tconst exponentialDelay = Math.min(initialDelay * 2 ** (this.reconnectAttempt - 1), maxDelay);\n\t\tconst jitter = exponentialDelay * 0.2 * Math.random();\n\t\tconst delay = exponentialDelay + jitter;\n\n\t\tthis.reconnectTimer = setTimeout(() => {\n\t\t\tthis.reconnectTimer = null;\n\t\t\tthis.createSocket();\n\t\t}, delay);\n\t}\n\n\tprivate clearReconnectTimer(): void {\n\t\tif (this.reconnectTimer !== null) {\n\t\t\tclearTimeout(this.reconnectTimer);\n\t\t\tthis.reconnectTimer = null;\n\t\t}\n\t}\n\n\tprivate sendMessage(queuedMessage: QueuedMessage): boolean {\n\t\tif (this.ws?.readyState !== WebSocket.OPEN) return false;\n\t\tthis.ws.send(JSON.stringify(queuedMessage.message));\n\t\treturn true;\n\t}\n\n\tprivate enqueueMessage(queue: QueuedMessage[], queuedMessage: QueuedMessage, queueName: \"pending\" | \"replay\"): void {\n\t\tqueue.push(queuedMessage);\n\t\tconst maxPendingMessages = this.retry.maxPendingMessages ?? DEFAULT_MAX_PENDING_MESSAGES;\n\t\tif (queue.length > maxPendingMessages) {\n\t\t\tqueue.shift();\n\t\t\tthis.callbacks.onWarning(\n\t\t\t\tnew WebSocketError(\n\t\t\t\t\t`WebSocket ${queueName} queue exceeded ${maxPendingMessages} messages; dropped oldest message`,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate enqueueReplayMessages(messages: QueuedMessage[]): void {\n\t\tthis.replayMessages.push({ messages });\n\t\tconst maxPendingMessages = this.retry.maxPendingMessages ?? DEFAULT_MAX_PENDING_MESSAGES;\n\t\tif (this.replayMessages.length > maxPendingMessages) {\n\t\t\tthis.replayMessages.shift();\n\t\t\tthis.callbacks.onWarning(\n\t\t\t\tnew WebSocketError(\n\t\t\t\t\t`WebSocket replay queue exceeded ${maxPendingMessages} entries; dropped oldest replay entry`,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate isAuthFailure(code: number): boolean {\n\t\treturn AUTH_FAILURE_CLOSE_CODES.has(code);\n\t}\n\n\tprivate setState(state: ConnectionState): void {\n\t\tthis._state = state;\n\t}\n}\n",
21
+ "import { WebSocketTransport, buildWebSocketUrl } from \"./ws-transport.js\";\nimport { WebSocketError } from \"./errors.js\";\nimport type {\n\tConnectionState,\n\tStructWebSocketConfig,\n\tWebSocketEventMap,\n\tWsRoomId,\n\tWsFiltersOptionalRoom,\n\tWsFiltersRequiredRoom,\n\tWsSubscriptionMap,\n\tWsSubscribeResponseMap,\n} from \"./types/ws.js\";\n\nconst DEFAULT_BASE_URL = \"wss://api.struct.to\";\nconst PING_INTERVAL_MS = 30_000;\nconst DEFAULT_SUBSCRIBE_TIMEOUT_MS = 10_000;\n\ntype Listener<T> = (payload: T) => void;\n\ninterface PendingSubscribe {\n\tresolve: (data: unknown) => void;\n\treject: (err: Error) => void;\n\ttimer: ReturnType<typeof setTimeout> | null;\n}\n\nexport class StructWebSocket {\n\tprivate readonly transport: WebSocketTransport;\n\tprivate readonly listeners = new Map<string, Set<Listener<any>>>();\n\tprivate readonly subscriptions = new Map<WsRoomId, Record<string, unknown>>();\n\tprivate readonly pendingSubscribes = new Map<WsRoomId, PendingSubscribe>();\n\tprivate readonly subscribeTimeout: number;\n\tprivate pingTimer: ReturnType<typeof setInterval> | null = null;\n\tprivate pongTimer: ReturnType<typeof setTimeout> | null = null;\n\tprivate isEmittingListenerError = false;\n\n\tconstructor(config: StructWebSocketConfig) {\n\t\tthis.subscribeTimeout = config.subscribeTimeout ?? DEFAULT_SUBSCRIBE_TIMEOUT_MS;\n\t\tconst getUrl = () => buildWebSocketUrl(\"/ws\", {\n\t\t\tapiKey: config.apiKey,\n\t\t\tjwt: config.getJwt?.() ?? config.jwt,\n\t\t\tbaseUrl: config.baseUrl,\n\t\t}, DEFAULT_BASE_URL);\n\n\t\tthis.transport = new WebSocketTransport(\n\t\t\tgetUrl,\n\t\t\tconfig.reconnect ?? {},\n\t\t\t{\n\t\t\t\tonOpen: () => this.handleOpen(),\n\t\t\t\tonClose: (code, reason) => this.handleClose(code, reason),\n\t\t\t\tonError: (error) => this.emit(\"error\", error),\n\t\t\t\tonMessage: (data) => this.handleMessage(data),\n\t\t\t\tonReconnecting: (attempt) => this.emit(\"reconnecting\", { attempt }),\n\t\t\t\tonReconnectFailed: (error) => this.emit(\"reconnect_failed\", error),\n\t\t\t\tonAuthFailed: (error) => this.emit(\"auth_failed\", error),\n\t\t\t\tonWarning: (warning) => this.emit(\"warning\", warning),\n\t\t\t},\n\t\t);\n\t}\n\n\tget state(): ConnectionState {\n\t\treturn this.transport.state;\n\t}\n\n\tconnect(): Promise<void> {\n\t\treturn this.transport.connect();\n\t}\n\n\tdisconnect(): void {\n\t\tthis.stopPing();\n\t\tfor (const [, pending] of this.pendingSubscribes) {\n\t\t\tthis.clearSubscribeTimer(pending);\n\t\t\tpending.reject(new WebSocketError(\"Disconnected\"));\n\t\t}\n\t\tthis.pendingSubscribes.clear();\n\t\tthis.subscriptions.clear();\n\t\tthis.transport.disconnect();\n\t}\n\n\ton<K extends keyof WebSocketEventMap>(event: K, listener: Listener<WebSocketEventMap[K]>): () => void {\n\t\tlet set = this.listeners.get(event as string);\n\t\tif (!set) {\n\t\t\tset = new Set();\n\t\t\tthis.listeners.set(event as string, set);\n\t\t}\n\t\tset.add(listener);\n\t\treturn () => { set.delete(listener); };\n\t}\n\n\toff<K extends keyof WebSocketEventMap>(event: K, listener: Listener<WebSocketEventMap[K]>): void {\n\t\tthis.listeners.get(event as string)?.delete(listener);\n\t}\n\n\tonce<K extends keyof WebSocketEventMap>(event: K, listener: Listener<WebSocketEventMap[K]>): () => void {\n\t\tconst wrapper = (payload: WebSocketEventMap[K]) => {\n\t\t\tthis.off(event, wrapper);\n\t\t\tlistener(payload);\n\t\t};\n\t\treturn this.on(event, wrapper);\n\t}\n\n\tremoveAllListeners(event?: keyof WebSocketEventMap): void {\n\t\tif (event) {\n\t\t\tthis.listeners.delete(event as string);\n\t\t} else {\n\t\t\tthis.listeners.clear();\n\t\t}\n\t}\n\n\tsubscribe<R extends WsFiltersOptionalRoom>(room: R, filters?: WsSubscriptionMap[R]): Promise<WsSubscribeResponseMap[R]>;\n\tsubscribe<R extends WsFiltersRequiredRoom>(room: R, filters: WsSubscriptionMap[R]): Promise<WsSubscribeResponseMap[R]>;\n\tsubscribe<R extends WsRoomId>(room: R, filters?: WsSubscriptionMap[R]): Promise<WsSubscribeResponseMap[R]> {\n\t\tconst resolvedFilters = (filters ?? {}) as Record<string, unknown>;\n\t\tconst isNewRoom = !this.subscriptions.has(room);\n\n\t\tconst existing = this.pendingSubscribes.get(room);\n\t\tif (existing) {\n\t\t\tthis.clearSubscribeTimer(existing);\n\t\t\texisting.reject(new WebSocketError(\"Superseded by new subscription\"));\n\t\t}\n\n\t\tthis.subscriptions.set(room, resolvedFilters);\n\t\tthis.rebuildReplay();\n\n\t\treturn new Promise<WsSubscribeResponseMap[R]>((resolve, reject) => {\n\t\t\tconst pending: PendingSubscribe = {\n\t\t\t\tresolve: resolve as (data: unknown) => void,\n\t\t\t\treject,\n\t\t\t\ttimer: null,\n\t\t\t};\n\t\t\tthis.pendingSubscribes.set(room, pending);\n\t\t\tif (this.sendSubscription(room, resolvedFilters, isNewRoom)) {\n\t\t\t\tthis.armSubscribeTimer(room, pending);\n\t\t\t}\n\t\t});\n\t}\n\n\tunsubscribe(room: WsRoomId): void {\n\t\tif (!this.subscriptions.has(room)) return;\n\n\t\tconst pending = this.pendingSubscribes.get(room);\n\t\tif (pending) {\n\t\t\tthis.clearSubscribeTimer(pending);\n\t\t\tpending.reject(new WebSocketError(\"Unsubscribed\"));\n\t\t\tthis.pendingSubscribes.delete(room);\n\t\t}\n\n\t\tthis.subscriptions.delete(room);\n\t\tthis.rebuildReplay();\n\t\tif (this.state === \"connected\") {\n\t\t\tthis.transport.sendNow({\n\t\t\t\ttype: \"room_message\",\n\t\t\t\tpayload: { room_id: room, message: { action: \"unsubscribe_all\" } },\n\t\t\t});\n\t\t\tthis.transport.sendNow({ type: \"leave_room\", payload: { room_id: room } });\n\t\t}\n\t}\n\n\tprivate rebuildReplay(): void {\n\t\tthis.transport.clearReplayMessages();\n\t\tfor (const [roomId, filters] of this.subscriptions) {\n\t\t\tthis.transport.addReplayMessages([\n\t\t\t\t{ type: \"join_room\", payload: { room_id: roomId } },\n\t\t\t\t{\n\t\t\t\t\ttype: \"room_message\",\n\t\t\t\t\tpayload: { room_id: roomId, message: { action: \"subscribe\", ...filters } },\n\t\t\t\t},\n\t\t\t]);\n\t\t}\n\t}\n\n\tprivate handleOpen(): void {\n\t\tthis.startPing();\n\t\tthis.restartPendingSubscribes();\n\t\tthis.emit(\"connected\", undefined as never);\n\t}\n\n\tprivate handleClose(code: number, reason: string): void {\n\t\tthis.stopPing();\n\t\tthis.pausePendingSubscribes();\n\t\tthis.emit(\"disconnected\", { code, reason });\n\t}\n\n\tprivate handleMessage(raw: unknown): void {\n\t\tconst msg = raw as { type?: string; room_id?: string; data?: unknown };\n\t\tif (!msg || typeof msg !== \"object\" || !msg.type) return;\n\t\tif (msg.type === \"pong\") {\n\t\t\tthis.clearPongTimer();\n\t\t\treturn;\n\t\t}\n\n\t\tif (msg.type === \"subscribed\" && msg.room_id) {\n\t\t\tconst pending = this.pendingSubscribes.get(msg.room_id as WsRoomId);\n\t\t\tif (pending) {\n\t\t\t\tthis.clearSubscribeTimer(pending);\n\t\t\t\tthis.pendingSubscribes.delete(msg.room_id as WsRoomId);\n\t\t\t\tconst subscribeError = this.getSubscribeError(msg.data);\n\t\t\t\tif (subscribeError) {\n\t\t\t\t\tconst error = new WebSocketError(subscribeError);\n\t\t\t\t\tpending.reject(error);\n\t\t\t\t\tthis.emit(\"error\", error);\n\t\t\t\t} else {\n\t\t\t\t\tpending.resolve(msg.data);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tthis.emit(msg.type as keyof WebSocketEventMap, msg.data as never);\n\t}\n\n\tprivate emit<K extends keyof WebSocketEventMap>(event: K, payload: WebSocketEventMap[K]): void {\n\t\tconst set = this.listeners.get(event as string);\n\t\tif (!set) return;\n\t\tfor (const fn of set) {\n\t\t\ttry {\n\t\t\t\t(fn as Listener<WebSocketEventMap[K]>)(payload);\n\t\t\t} catch (error) {\n\t\t\t\tthis.handleListenerError(error);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate startPing(): void {\n\t\tthis.stopPing();\n\t\tthis.pingTimer = setInterval(() => {\n\t\t\tif (this.transport.sendNow({ type: \"ping\" })) {\n\t\t\t\tthis.armPongTimer();\n\t\t\t}\n\t\t}, PING_INTERVAL_MS);\n\t}\n\n\tprivate stopPing(): void {\n\t\tif (this.pingTimer !== null) {\n\t\t\tclearInterval(this.pingTimer);\n\t\t\tthis.pingTimer = null;\n\t\t}\n\t\tthis.clearPongTimer();\n\t}\n\n\tprivate sendSubscription(room: WsRoomId, filters: Record<string, unknown>, joinRoom: boolean): boolean {\n\t\tif (this.state !== \"connected\") return false;\n\t\tlet sent = true;\n\t\tif (joinRoom) {\n\t\t\tsent = this.transport.sendNow({ type: \"join_room\", payload: { room_id: room } }) && sent;\n\t\t}\n\t\tsent = this.transport.sendNow({\n\t\t\ttype: \"room_message\",\n\t\t\tpayload: { room_id: room, message: { action: \"subscribe\", ...filters } },\n\t\t}) && sent;\n\t\treturn sent;\n\t}\n\n\tprivate restartPendingSubscribes(): void {\n\t\tfor (const [room, pending] of this.pendingSubscribes) {\n\t\t\tif (pending.timer === null) {\n\t\t\t\tthis.armSubscribeTimer(room, pending);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate pausePendingSubscribes(): void {\n\t\tfor (const [, pending] of this.pendingSubscribes) {\n\t\t\tthis.clearSubscribeTimer(pending);\n\t\t}\n\t}\n\n\tprivate armSubscribeTimer(room: WsRoomId, pending: PendingSubscribe): void {\n\t\tthis.clearSubscribeTimer(pending);\n\t\tpending.timer = setTimeout(() => {\n\t\t\tpending.timer = null;\n\t\t\tthis.pendingSubscribes.delete(room);\n\t\t\tpending.reject(new WebSocketError(`Subscribe to ${room} timed out`));\n\t\t}, this.subscribeTimeout);\n\t}\n\n\tprivate clearSubscribeTimer(pending: PendingSubscribe): void {\n\t\tif (pending.timer !== null) {\n\t\t\tclearTimeout(pending.timer);\n\t\t\tpending.timer = null;\n\t\t}\n\t}\n\n\tprivate armPongTimer(): void {\n\t\tif (this.pongTimer !== null) return;\n\t\tthis.pongTimer = setTimeout(() => {\n\t\t\tthis.pongTimer = null;\n\t\t\tthis.transport.close(4000, \"pong timeout\");\n\t\t}, PING_INTERVAL_MS * 2);\n\t}\n\n\tprivate clearPongTimer(): void {\n\t\tif (this.pongTimer !== null) {\n\t\t\tclearTimeout(this.pongTimer);\n\t\t\tthis.pongTimer = null;\n\t\t}\n\t}\n\n\tprivate getSubscribeError(data: unknown): string | null {\n\t\tif (!data || typeof data !== \"object\") return null;\n\t\tconst error = (data as { error?: unknown }).error;\n\t\treturn typeof error === \"string\" && error.length > 0 ? error : null;\n\t}\n\n\tprivate handleListenerError(error: unknown): void {\n\t\tconst normalizedError = error instanceof Error\n\t\t\t? error\n\t\t\t: new WebSocketError(\"WebSocket listener threw\", { cause: error });\n\t\tif (!this.isEmittingListenerError && (this.listeners.get(\"error\")?.size ?? 0) > 0) {\n\t\t\tthis.isEmittingListenerError = true;\n\t\t\ttry {\n\t\t\t\tthis.emit(\"error\", normalizedError);\n\t\t\t\treturn;\n\t\t\t} finally {\n\t\t\t\tthis.isEmittingListenerError = false;\n\t\t\t}\n\t\t}\n\t\tconsole.error(normalizedError);\n\t}\n}\n",
22
+ "import { WebSocketTransport, buildWebSocketUrl } from \"./ws-transport.js\";\nimport { WebSocketError } from \"./errors.js\";\nimport type {\n\tConnectionState,\n\tStructWebSocketConfig,\n\tAlertsWebSocketEventMap,\n\tWsAlertSubscribedResponse,\n} from \"./types/ws.js\";\nimport type { WsAlertSubscribeMap, WsAlertEventName } from \"./types/ws-helpers.js\";\n\nconst DEFAULT_BASE_URL = \"wss://api.struct.to\";\nconst PING_INTERVAL_MS = 30_000;\nconst DEFAULT_SUBSCRIBE_TIMEOUT_MS = 10_000;\n\ntype Listener<T> = (payload: T) => void;\n\ninterface PendingSubscribe {\n\tresolve: (data: unknown) => void;\n\treject: (err: Error) => void;\n\ttimer: ReturnType<typeof setTimeout> | null;\n}\n\nexport class StructAlertsWebSocket {\n\tprivate readonly transport: WebSocketTransport;\n\tprivate readonly listeners = new Map<string, Set<Listener<any>>>();\n\tprivate readonly subscriptions = new Map<WsAlertEventName, Record<string, unknown>>();\n\tprivate readonly pendingSubscribes = new Map<WsAlertEventName, PendingSubscribe>();\n\tprivate readonly subscribeTimeout: number;\n\tprivate pingTimer: ReturnType<typeof setInterval> | null = null;\n\tprivate pongTimer: ReturnType<typeof setTimeout> | null = null;\n\tprivate isEmittingListenerError = false;\n\n\tconstructor(config: StructWebSocketConfig) {\n\t\tthis.subscribeTimeout = config.subscribeTimeout ?? DEFAULT_SUBSCRIBE_TIMEOUT_MS;\n\t\tconst getUrl = () => buildWebSocketUrl(\"/ws/alerts\", {\n\t\t\tapiKey: config.apiKey,\n\t\t\tjwt: config.getJwt?.() ?? config.jwt,\n\t\t\tbaseUrl: config.baseUrl,\n\t\t}, DEFAULT_BASE_URL);\n\n\t\tthis.transport = new WebSocketTransport(\n\t\t\tgetUrl,\n\t\t\tconfig.reconnect ?? {},\n\t\t\t{\n\t\t\t\tonOpen: () => this.handleOpen(),\n\t\t\t\tonClose: (code, reason) => this.handleClose(code, reason),\n\t\t\t\tonError: (error) => this.emit(\"error\", error),\n\t\t\t\tonMessage: (data) => this.handleMessage(data),\n\t\t\t\tonReconnecting: (attempt) => this.emit(\"reconnecting\", { attempt }),\n\t\t\t\tonReconnectFailed: (error) => this.emit(\"reconnect_failed\", error),\n\t\t\t\tonAuthFailed: (error) => this.emit(\"auth_failed\", error),\n\t\t\t\tonWarning: (warning) => this.emit(\"warning\", warning),\n\t\t\t},\n\t\t);\n\t}\n\n\tget state(): ConnectionState {\n\t\treturn this.transport.state;\n\t}\n\n\tconnect(): Promise<void> {\n\t\treturn this.transport.connect();\n\t}\n\n\tdisconnect(): void {\n\t\tthis.stopPing();\n\t\tfor (const [, pending] of this.pendingSubscribes) {\n\t\t\tthis.clearSubscribeTimer(pending);\n\t\t\tpending.reject(new WebSocketError(\"Disconnected\"));\n\t\t}\n\t\tthis.pendingSubscribes.clear();\n\t\tthis.subscriptions.clear();\n\t\tthis.transport.disconnect();\n\t}\n\n\ton<K extends keyof AlertsWebSocketEventMap>(event: K, listener: Listener<AlertsWebSocketEventMap[K]>): () => void {\n\t\tlet set = this.listeners.get(event as string);\n\t\tif (!set) {\n\t\t\tset = new Set();\n\t\t\tthis.listeners.set(event as string, set);\n\t\t}\n\t\tset.add(listener);\n\t\treturn () => { set.delete(listener); };\n\t}\n\n\toff<K extends keyof AlertsWebSocketEventMap>(event: K, listener: Listener<AlertsWebSocketEventMap[K]>): void {\n\t\tthis.listeners.get(event as string)?.delete(listener);\n\t}\n\n\tonce<K extends keyof AlertsWebSocketEventMap>(event: K, listener: Listener<AlertsWebSocketEventMap[K]>): () => void {\n\t\tconst wrapper = (payload: AlertsWebSocketEventMap[K]) => {\n\t\t\tthis.off(event, wrapper);\n\t\t\tlistener(payload);\n\t\t};\n\t\treturn this.on(event, wrapper);\n\t}\n\n\tremoveAllListeners(event?: keyof AlertsWebSocketEventMap): void {\n\t\tif (event) {\n\t\t\tthis.listeners.delete(event as string);\n\t\t} else {\n\t\t\tthis.listeners.clear();\n\t\t}\n\t}\n\n\tsubscribe<E extends WsAlertEventName>(\n\t\tevent: E,\n\t\tfilters: Omit<WsAlertSubscribeMap[E], \"op\" | \"event\">,\n\t): Promise<WsAlertSubscribedResponse> {\n\t\tconst message = { op: \"subscribe\", event, ...filters } as Record<string, unknown>;\n\n\t\tconst existing = this.pendingSubscribes.get(event);\n\t\tif (existing) {\n\t\t\tthis.clearSubscribeTimer(existing);\n\t\t\texisting.reject(new WebSocketError(\"Superseded by new subscription\"));\n\t\t}\n\n\t\tthis.subscriptions.set(event, message);\n\t\tthis.rebuildReplay();\n\n\t\treturn new Promise<WsAlertSubscribedResponse>((resolve, reject) => {\n\t\t\tconst pending: PendingSubscribe = {\n\t\t\t\tresolve: resolve as (data: unknown) => void,\n\t\t\t\treject,\n\t\t\t\ttimer: null,\n\t\t\t};\n\t\t\tthis.pendingSubscribes.set(event, pending);\n\t\t\tif (this.sendSubscription(message)) {\n\t\t\t\tthis.armSubscribeTimer(event, pending);\n\t\t\t}\n\t\t});\n\t}\n\n\tunsubscribe(event: WsAlertEventName): void {\n\t\tconst sub = this.subscriptions.get(event);\n\t\tif (!sub) return;\n\n\t\tconst pending = this.pendingSubscribes.get(event);\n\t\tif (pending) {\n\t\t\tthis.clearSubscribeTimer(pending);\n\t\t\tpending.reject(new WebSocketError(\"Unsubscribed\"));\n\t\t\tthis.pendingSubscribes.delete(event);\n\t\t}\n\n\t\tthis.subscriptions.delete(event);\n\t\tthis.rebuildReplay();\n\t\tif (this.state === \"connected\") {\n\t\t\tthis.transport.sendNow({ ...sub, op: \"unsubscribe\" });\n\t\t}\n\t}\n\n\tprivate rebuildReplay(): void {\n\t\tthis.transport.clearReplayMessages();\n\t\tfor (const [, message] of this.subscriptions) {\n\t\t\tthis.transport.addReplayMessage(message);\n\t\t}\n\t}\n\n\tprivate handleOpen(): void {\n\t\tthis.startPing();\n\t\tthis.restartPendingSubscribes();\n\t\tthis.emit(\"connected\", undefined as never);\n\t}\n\n\tprivate handleClose(code: number, reason: string): void {\n\t\tthis.stopPing();\n\t\tthis.pausePendingSubscribes();\n\t\tthis.emit(\"disconnected\", { code, reason });\n\t}\n\n\tprivate handleMessage(raw: unknown): void {\n\t\tconst msg = raw as { op?: string; type?: string; event?: string; error?: string; subscription_id?: string; timestamp?: number; data?: unknown };\n\t\tif (!msg || typeof msg !== \"object\") return;\n\t\tif (msg.op === \"pong\" || msg.type === \"pong\") {\n\t\t\tthis.clearPongTimer();\n\t\t\treturn;\n\t\t}\n\n\t\tif (msg.error) {\n\t\t\tconst error = new WebSocketError(msg.error);\n\t\t\tif (msg.event) {\n\t\t\t\tconst pending = this.pendingSubscribes.get(msg.event as WsAlertEventName);\n\t\t\t\tif (pending) {\n\t\t\t\t\tthis.clearSubscribeTimer(pending);\n\t\t\t\t\tthis.pendingSubscribes.delete(msg.event as WsAlertEventName);\n\t\t\t\t\tpending.reject(error);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.emit(\"error\", error);\n\t\t\treturn;\n\t\t}\n\n\t\tif (msg.op === \"subscribed\" && msg.event) {\n\t\t\tconst pending = this.pendingSubscribes.get(msg.event as WsAlertEventName);\n\t\t\tif (pending) {\n\t\t\t\tthis.clearSubscribeTimer(pending);\n\t\t\t\tthis.pendingSubscribes.delete(msg.event as WsAlertEventName);\n\t\t\t\tpending.resolve({ op: \"subscribed\", event: msg.event, subscription_id: msg.subscription_id });\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (msg.op === \"unsubscribed\") return;\n\n\t\tif (msg.event && msg.data !== undefined) {\n\t\t\tthis.emit(msg.event as keyof AlertsWebSocketEventMap, {\n\t\t\t\tevent: msg.event,\n\t\t\t\ttimestamp: msg.timestamp,\n\t\t\t\tdata: msg.data,\n\t\t\t} as never);\n\t\t}\n\t}\n\n\tprivate emit<K extends keyof AlertsWebSocketEventMap>(event: K, payload: AlertsWebSocketEventMap[K]): void {\n\t\tconst set = this.listeners.get(event as string);\n\t\tif (!set) return;\n\t\tfor (const fn of set) {\n\t\t\ttry {\n\t\t\t\t(fn as Listener<AlertsWebSocketEventMap[K]>)(payload);\n\t\t\t} catch (error) {\n\t\t\t\tthis.handleListenerError(error);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate startPing(): void {\n\t\tthis.stopPing();\n\t\tthis.pingTimer = setInterval(() => {\n\t\t\tif (this.transport.sendNow({ type: \"ping\" })) {\n\t\t\t\tthis.armPongTimer();\n\t\t\t}\n\t\t}, PING_INTERVAL_MS);\n\t}\n\n\tprivate stopPing(): void {\n\t\tif (this.pingTimer !== null) {\n\t\t\tclearInterval(this.pingTimer);\n\t\t\tthis.pingTimer = null;\n\t\t}\n\t\tthis.clearPongTimer();\n\t}\n\n\tprivate sendSubscription(message: Record<string, unknown>): boolean {\n\t\tif (this.state !== \"connected\") return false;\n\t\treturn this.transport.sendNow(message);\n\t}\n\n\tprivate restartPendingSubscribes(): void {\n\t\tfor (const [event, pending] of this.pendingSubscribes) {\n\t\t\tif (pending.timer === null) {\n\t\t\t\tthis.armSubscribeTimer(event, pending);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate pausePendingSubscribes(): void {\n\t\tfor (const [, pending] of this.pendingSubscribes) {\n\t\t\tthis.clearSubscribeTimer(pending);\n\t\t}\n\t}\n\n\tprivate armSubscribeTimer(event: WsAlertEventName, pending: PendingSubscribe): void {\n\t\tthis.clearSubscribeTimer(pending);\n\t\tpending.timer = setTimeout(() => {\n\t\t\tpending.timer = null;\n\t\t\tthis.pendingSubscribes.delete(event);\n\t\t\tpending.reject(new WebSocketError(`Subscribe to alert ${event} timed out`));\n\t\t}, this.subscribeTimeout);\n\t}\n\n\tprivate clearSubscribeTimer(pending: PendingSubscribe): void {\n\t\tif (pending.timer !== null) {\n\t\t\tclearTimeout(pending.timer);\n\t\t\tpending.timer = null;\n\t\t}\n\t}\n\n\tprivate armPongTimer(): void {\n\t\tif (this.pongTimer !== null) return;\n\t\tthis.pongTimer = setTimeout(() => {\n\t\t\tthis.pongTimer = null;\n\t\t\tthis.transport.close(4000, \"pong timeout\");\n\t\t}, PING_INTERVAL_MS * 2);\n\t}\n\n\tprivate clearPongTimer(): void {\n\t\tif (this.pongTimer !== null) {\n\t\t\tclearTimeout(this.pongTimer);\n\t\t\tthis.pongTimer = null;\n\t\t}\n\t}\n\n\tprivate handleListenerError(error: unknown): void {\n\t\tconst normalizedError = error instanceof Error\n\t\t\t? error\n\t\t\t: new WebSocketError(\"WebSocket listener threw\", { cause: error });\n\t\tif (!this.isEmittingListenerError && (this.listeners.get(\"error\")?.size ?? 0) > 0) {\n\t\t\tthis.isEmittingListenerError = true;\n\t\t\ttry {\n\t\t\t\tthis.emit(\"error\", normalizedError);\n\t\t\t\treturn;\n\t\t\t} finally {\n\t\t\t\tthis.isEmittingListenerError = false;\n\t\t\t}\n\t\t}\n\t\tconsole.error(normalizedError);\n\t}\n}\n",
22
23
  "import type { PaginationParams } from \"./types/common.js\";\nimport type { HttpResponse } from \"./types/http.js\";\n\nconst DEFAULT_PAGE_SIZE = 100;\n\nexport async function* paginate<T, P extends PaginationParams>(\n\tfetcher: (params: P) => Promise<HttpResponse<T[]>>,\n\tparams: P,\n\tpageSize: number = DEFAULT_PAGE_SIZE,\n): AsyncGenerator<T> {\n\tlet paginationKey: string | number | undefined;\n\n\twhile (true) {\n\t\tconst response = await fetcher({ ...params, limit: pageSize, pagination_key: paginationKey } as P);\n\n\t\tfor (const item of response.data) {\n\t\t\tyield item;\n\t\t}\n\n\t\tif (!response.pagination?.has_more || response.pagination.pagination_key == null) {\n\t\t\tbreak;\n\t\t}\n\n\t\tpaginationKey = response.pagination.pagination_key;\n\t}\n}\n"
23
24
  ],
24
- "mappings": "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",
25
- "debugId": "BC93A176E3C2ACA564756E2164756E21",
25
+ "mappings": "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",
26
+ "debugId": "14A417375B65E26F64756E2164756E21",
26
27
  "names": []
27
28
  }
package/dist/index.d.ts CHANGED
@@ -3,6 +3,7 @@ export type { StructClientConfig } from "./client.js";
3
3
  export { HttpClient } from "./http.js";
4
4
  export { StructError, HttpError, NetworkError, TimeoutError, WebSocketError, WebSocketClosedError } from "./errors.js";
5
5
  export { StructWebSocket } from "./ws.js";
6
+ export { StructAlertsWebSocket } from "./ws-alerts.js";
6
7
  export { paginate } from "./paginate.js";
7
8
  export type { Venue } from "./types/common.js";
8
9
  export type * from "./types/index.js";