@kodiak-finance/orderly-net 2.7.4 → 2.8.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.
- package/dist/index.js.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/version.ts","../src/errors/apiError.ts","../src/fetch/index.ts","../src/constants.ts","../src/ws/ws.ts","../src/ws/handler/baseHandler.ts","../src/ws/handler/ping.ts","../src/ws/handler/handler.ts"],"sourcesContent":["export { default as version } from \"./version\";\nexport { get, post, del, put, mutate } from \"./fetch\";\n\nexport { __ORDERLY_API_URL_KEY__ } from \"./constants\";\n\nexport { WS, WebSocketEvent } from \"./ws/ws\";\n","declare global {\n interface Window {\n __ORDERLY_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif (typeof window !== \"undefined\") {\n window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};\n window.__ORDERLY_VERSION__[\"@kodiak-finance/orderly-net\"] = \"2.7.4\";\n}\n\nexport default \"2.7.4\";\n","export class ApiError extends Error {\n constructor(message: string, private readonly code: number) {\n super(message);\n this.name = \"ApiError\";\n }\n}\n","import { ApiError } from \"../errors/apiError\";\n\nasync function request(url: string, options: RequestInit) {\n //\n if (!url.startsWith(\"http\")) {\n throw new Error(\"url must start with http(s)\");\n }\n // const urlInstance = new URL(url);\n const response = await fetch(url, {\n ...options,\n // mode: \"cors\",\n // credentials: \"include\",\n headers: _createHeaders(options.headers, options.method),\n });\n\n if (response.ok) {\n const res = await response.json();\n return res;\n // if (res.success) {\n // return res;\n // } else {\n // throw new Error(res.message);\n // }\n } else {\n // console.log(response.status);\n try {\n const errorMsg = await response.json();\n if (response.status === 400) {\n throw new ApiError(\n errorMsg.message || errorMsg.code || response.statusText,\n errorMsg.code,\n );\n }\n // TODO: throw error code\n throw new Error(errorMsg.message || errorMsg.code || response.statusText);\n } catch (e) {\n throw e;\n }\n }\n\n // throw new Error(response.statusText);\n}\n\nfunction _createHeaders(\n headers: HeadersInit = {},\n method?: string,\n): HeadersInit {\n //\n const _headers = new Headers(headers);\n // _headers.append(\"Accept\", \"application/json\");\n\n if (!_headers.has(\"Content-Type\")) {\n if (method !== \"DELETE\") {\n _headers.append(\"Content-Type\", \"application/json;charset=utf-8\");\n } else {\n _headers.append(\"Content-Type\", \"application/x-www-form-urlencoded\");\n }\n }\n\n return _headers;\n}\n\nasync function get<R>(\n url: string,\n options?: RequestInit,\n formatter?: (data: any) => R,\n): Promise<R> {\n const res = await request(url, {\n method: \"GET\",\n ...options,\n });\n\n if (res.success) {\n if (typeof formatter === \"function\") {\n return formatter(res.data);\n }\n // Return the required data based on the returned data structure\n if (Array.isArray(res.data[\"rows\"])) {\n return res.data[\"rows\"] as unknown as R;\n }\n return res.data;\n }\n throw new Error(res.message);\n}\nasync function post(\n url: string,\n data: any,\n options?: Omit<RequestInit, \"method\">,\n): Promise<any> {\n const res = await request(url, {\n method: \"POST\",\n body: JSON.stringify(data),\n ...options,\n });\n\n return res;\n}\n\nasync function put(\n url: string,\n data: any,\n options?: Omit<RequestInit, \"method\">,\n): Promise<any> {\n const res = await request(url, {\n method: \"PUT\",\n body: JSON.stringify(data),\n ...options,\n });\n\n return res;\n}\n\nasync function del(\n url: string,\n options?: Omit<RequestInit, \"method\">,\n): Promise<any> {\n const res = await request(url, {\n method: \"DELETE\",\n ...options,\n });\n\n return res;\n}\n\nasync function mutate(url: string, init: RequestInit) {\n const res = await request(url, init);\n\n return res;\n}\n\nexport { get, post, del, put, mutate, request };\n","export const __ORDERLY_API_URL_KEY__: string = \"__ORDERLY_API_URL__\";\n","import EventEmitter from \"eventemitter3\";\nimport { messageHandlers } from \"./handler/handler\";\n\nexport type NetworkId = \"testnet\" | \"mainnet\";\n\nexport type WSOptions = {\n privateUrl: string;\n publicUrl?: string;\n networkId?: NetworkId;\n accountId?: string;\n\n onSigntureRequest?: (accountId: string) => Promise<any>;\n};\n\nexport type unsubscribe = () => void;\n\nexport enum WebSocketEvent {\n OPEN = \"open\",\n CLOSE = \"close\",\n ERROR = \"error\",\n MESSAGE = \"message\",\n CONNECTING = \"connecting\",\n RECONNECTING = \"reconnecting\",\n}\n\nexport type MessageParams = {\n event: string;\n topic: string;\n\n onMessage?: (message: any) => any;\n\n params?: any;\n // [key: string]: any;\n};\n\ntype WSMessageHandler = {\n onMessage: (message: any) => void;\n onError?: (error: any) => void;\n onClose?: (event: any) => void;\n onUnsubscribe: (event: any) => any;\n formatter?: (message: any) => any;\n};\n\ntype Topics = {\n params: MessageParams;\n isPrivate?: boolean;\n isOnce?: boolean;\n callback: WSMessageHandler[];\n};\n\nconst defaultMessageFormatter = (message: any) => message.data;\nconst COMMON_ID = \"OqdphuyCtYWxwzhxyLLjOWNdFP7sQt8RPWzmb5xY\";\n\nconst TIME_OUT = 1000 * 60 * 2;\nconst CONNECT_LIMIT = 5;\n\nexport class WS extends EventEmitter {\n private _publicSocket!: WebSocket;\n private privateSocket?: WebSocket;\n\n private _eventContainer: Map<string, Set<(message: any) => void>> = new Map();\n\n private publicIsReconnecting: boolean = false;\n private privateIsReconnecting: boolean = false;\n\n private reconnectInterval: number = 1000;\n\n private authenticated: boolean = false;\n\n private _pendingPrivateSubscribe: any[][] = [];\n private _pendingPublicSubscribe: any[][] = [];\n\n // all message handlers\n private _eventHandlers: Map<string, Topics> = new Map();\n private _eventPrivateHandlers: Map<string, Topics> = new Map();\n\n private _publicHeartbeatTime?: number;\n private _privateHeartbeatTime?: number;\n\n private _publicRetryCount: number = 0;\n private _privateRetryCount: number = 0;\n\n constructor(private options: WSOptions) {\n super();\n this.createPublicSC(options);\n\n if (!!options.accountId) {\n this.createPrivateSC(options);\n }\n\n this.bindEvents();\n }\n\n private bindEvents() {\n if (typeof document !== \"undefined\") {\n document.addEventListener?.(\n \"visibilitychange\",\n this.onVisibilityChange.bind(this),\n );\n }\n\n if (typeof window !== \"undefined\") {\n window.addEventListener?.(\n \"online\",\n this.onNetworkStatusChange.bind(this),\n );\n // window.addEventListener?.(\"offline\", (e) => {\n // // console.log(\"👀👀👀👀👀👀👀👀👀\", \"offline\");\n // this.emit(\"offline\", e);\n // });\n }\n }\n\n private onVisibilityChange() {\n if (document.visibilityState === \"visible\") {\n this.checkSocketStatus();\n }\n // else {\n // this.publicSocket.close();\n // this.privateSocket?.close();\n // }\n }\n\n private onNetworkStatusChange() {\n if (navigator.onLine) {\n this.checkSocketStatus();\n }\n }\n\n /**\n * Determine the current connection status,\n * 1. If it is disconnected, reconnect\n * 2. If no message is received for too long, disconnect and reconnect actively\n * 3. When returning from the background and the network status changes, the following process is followed\n */\n private checkSocketStatus() {\n const now = Date.now();\n\n //\n // \"👀👀 checkNetworkStatus 👀👀\",\n // this._publicHeartbeatTime,\n // this._privateHeartbeatTime,\n // now,\n // this.publicSocket.readyState,\n // this.privateSocket?.readyState\n // );\n\n // check the last time\n // If the view is not visible, do not process it\n if (document.visibilityState !== \"visible\") return;\n // If the network is not available, do not process it\n if (!navigator.onLine) return;\n\n // public\n if (!this.publicIsReconnecting) {\n if (this._publicSocket?.readyState === WebSocket.CLOSED) {\n this.reconnectPublic();\n } else {\n if (now - this._publicHeartbeatTime! > TIME_OUT) {\n //unsubscribe all public topic\n this._publicSocket?.close(3888);\n }\n }\n }\n\n if (!this.privateIsReconnecting) {\n // private\n if (this.privateSocket?.readyState === WebSocket.CLOSED) {\n this.reconnectPrivate();\n } else {\n if (\n this._privateHeartbeatTime &&\n now - this._privateHeartbeatTime! > TIME_OUT\n ) {\n // unsubscribe all private topic\n this.privateSocket?.close(3888);\n }\n }\n }\n }\n\n public openPrivate(accountId: string) {\n if (this.privateSocket?.readyState === WebSocket.OPEN) {\n return;\n }\n this.createPrivateSC({\n ...this.options,\n accountId,\n });\n }\n\n public closePrivate(code?: number, reason?: string) {\n if (this.privateSocket?.readyState !== WebSocket.OPEN) {\n return;\n }\n\n this.authenticated = false;\n\n this._pendingPrivateSubscribe = [];\n\n this._eventPrivateHandlers.clear();\n\n this.privateSocket?.close(code, reason);\n }\n\n private createPublicSC(options: WSOptions) {\n if (!options.publicUrl) {\n return;\n }\n\n if (\n this._publicSocket &&\n this._publicSocket.readyState === WebSocket.OPEN\n ) {\n return;\n }\n\n this._publicSocket = new WebSocket(\n `${options.publicUrl}/ws/stream/${COMMON_ID}`,\n );\n this._publicSocket.onopen = this.onOpen.bind(this);\n // this.publicSocket.onmessage = this.onPublicMessage.bind(this);\n this._publicSocket.addEventListener(\n \"message\",\n this.onPublicMessage.bind(this),\n );\n this._publicSocket.addEventListener(\"close\", this.onPublicClose.bind(this));\n this._publicSocket.addEventListener(\"error\", this.onPublicError.bind(this));\n // this.publicSocket.onclose = this.onPublicClose.bind(this);\n // this.publicSocket.onerror = this.onPublicError.bind(this);\n }\n\n private createPrivateSC(options: WSOptions) {\n if (\n this.privateSocket &&\n this.privateSocket.readyState === WebSocket.OPEN\n ) {\n return;\n }\n\n this.options = options;\n\n this.privateSocket = new WebSocket(\n `${this.options.privateUrl}/v2/ws/private/stream/${options.accountId}`,\n );\n this.privateSocket.onopen = this.onPrivateOpen.bind(this);\n this.privateSocket.onmessage = this.onPrivateMessage.bind(this);\n this.privateSocket.onclose = this.onPrivateClose.bind(this);\n this.privateSocket.onerror = this.onPrivateError.bind(this);\n }\n\n private onOpen(event: Event) {\n //\n if (this._pendingPublicSubscribe.length > 0) {\n this._pendingPublicSubscribe.forEach(([params, cb, isOnce]) => {\n this.subscribe(params, cb, isOnce);\n });\n this._pendingPublicSubscribe = [];\n }\n\n this.publicIsReconnecting = false;\n\n this.emit(\"status:change\", {\n type: WebSocketEvent.OPEN,\n isPrivate: false,\n isReconnect: this._publicRetryCount > 0,\n });\n\n this._publicRetryCount = 0;\n }\n\n private onPrivateOpen(event: Event) {\n // auth\n this.authenticate(this.options.accountId!)\n .then(() => {\n this.privateIsReconnecting = false;\n\n this.emit(\"status:change\", {\n type: WebSocketEvent.OPEN,\n isPrivate: true,\n isReconnect: this._privateRetryCount > 0,\n });\n\n this._privateRetryCount = 0;\n })\n .catch((e) => {\n console.log(\"ws authenticate failed\", e);\n });\n }\n\n private onMessage(\n event: MessageEvent,\n socket: WebSocket,\n handlerMap: Map<string, Topics>,\n ) {\n try {\n const message = JSON.parse(event.data);\n\n const commoneHandler = messageHandlers.get(message.event);\n\n if (message.event === \"auth\" && message.success) {\n this.authenticated = true;\n this.handlePendingPrivateTopic();\n return;\n }\n\n if (commoneHandler) {\n commoneHandler.handle(message, socket);\n } else {\n const topicKey = this.getTopicKeyFromMessage(message);\n\n const eventhandler = handlerMap.get(topicKey);\n //\n if (eventhandler?.callback) {\n // console.log(\"👀👀👀👀👀👀👀👀👀\", topicKey, eventhandler?.callback);\n eventhandler.callback.forEach((cb) => {\n const data = cb.formatter\n ? cb.formatter(message)\n : defaultMessageFormatter(message);\n\n if (data) {\n cb.onMessage(data);\n }\n });\n }\n\n // emit event\n this._eventContainer.forEach((_, key) => {\n const reg = new RegExp(key);\n if (reg.test(topicKey)) {\n this.emit(key, message);\n }\n });\n }\n\n //\n } catch (e) {}\n\n // You can process the received message here\n }\n\n private onPublicMessage(event: MessageEvent) {\n this.onMessage(event, this._publicSocket, this._eventHandlers);\n // update last message time for public\n this._publicHeartbeatTime = Date.now();\n }\n\n private onPrivateMessage(event: MessageEvent) {\n this.onMessage(event, this.privateSocket!, this._eventPrivateHandlers);\n // update last message time for private\n this._privateHeartbeatTime = Date.now();\n }\n\n private handlePendingPrivateTopic() {\n if (this._pendingPrivateSubscribe.length > 0) {\n this._pendingPrivateSubscribe.forEach(([params, cb]) => {\n this.privateSubscribe(params, cb);\n });\n this._pendingPrivateSubscribe = [];\n }\n }\n\n private onPublicClose(event: CloseEvent) {\n // move handler to pending\n this._eventHandlers.forEach((value, key) => {\n value.callback.forEach((cb) => {\n this._pendingPublicSubscribe.push([value.params, cb, value.isOnce]);\n });\n\n this._eventHandlers.delete(key);\n });\n\n this.emit(\"status:change\", {\n type: WebSocketEvent.CLOSE,\n isPrivate: false,\n });\n\n setTimeout(() => this.checkSocketStatus(), 0);\n }\n\n private onPrivateClose(event: CloseEvent) {\n if (event.code === 3887) return;\n if (this.privateIsReconnecting) return;\n this._eventPrivateHandlers.forEach((value, key) => {\n value.callback.forEach((cb) => {\n this._pendingPrivateSubscribe.push([value.params, cb, value.isOnce]);\n });\n\n this._eventPrivateHandlers.delete(key);\n });\n this.authenticated = false;\n\n this.emit(\"status:change\", {\n type: WebSocketEvent.CLOSE,\n isPrivate: true,\n event,\n });\n\n setTimeout(() => this.checkSocketStatus(), 0);\n }\n\n private onPublicError(event: Event) {\n console.error(\"public WebSocket error:\", event);\n this.publicIsReconnecting = false;\n\n if (this._publicSocket?.readyState === WebSocket.OPEN) {\n this._publicSocket?.close(3888);\n } else {\n // retry connect\n if (this._publicRetryCount > CONNECT_LIMIT) return;\n setTimeout(() => {\n // this.createPublicSC(this.options);\n this.reconnectPublic();\n // this._publicRetryCount++;\n }, this._publicRetryCount * 1000);\n }\n\n this.errorBoardscast(event, this._eventHandlers);\n this.emit(\"status:change\", {\n type: WebSocketEvent.ERROR,\n isPrivate: false,\n });\n }\n\n private onPrivateError(event: Event) {\n console.error(\"Private WebSocket error:\", event);\n this.privateIsReconnecting = false;\n\n if (this.privateSocket?.readyState === WebSocket.OPEN) {\n this.privateSocket.close(3888);\n } else {\n // retry connect\n if (this._privateRetryCount > CONNECT_LIMIT) return;\n setTimeout(() => {\n // this.createPublicSC(this.options);\n this.reconnectPrivate();\n // this._privateRetryCount++;\n }, this._privateRetryCount * 1000);\n }\n\n this.errorBoardscast(event, this._eventPrivateHandlers);\n this.emit(\"status:change\", { type: WebSocketEvent.ERROR, isPrivate: true });\n }\n\n private errorBoardscast(error: any, eventHandlers: Map<string, Topics>) {\n eventHandlers.forEach((value) => {\n value.callback.forEach((cb) => {\n cb.onError?.(error);\n });\n });\n }\n\n send = (message: any) => {\n if (typeof message !== \"string\") {\n message = JSON.stringify(message);\n }\n if (typeof message === \"undefined\") return;\n if (this._publicSocket?.readyState === WebSocket.OPEN) {\n this._publicSocket?.send(message);\n //\n } else {\n console.warn(\"WebSocket connection is not open. Cannot send message.\");\n }\n };\n\n close() {\n this._publicSocket?.close();\n this.privateSocket?.close();\n }\n\n set accountId(accountId: string) {}\n\n private async authenticate(accountId: string) {\n if (this.authenticated) return;\n if (!this.privateSocket) {\n console.error(\"private ws not connected\");\n return;\n }\n\n if (this.privateSocket.readyState !== WebSocket.OPEN) {\n return;\n }\n\n const message = await this.options.onSigntureRequest?.(accountId);\n\n this.privateSocket.send(\n JSON.stringify({\n id: \"auth\",\n event: \"auth\",\n params: {\n orderly_key: message.publicKey,\n sign: message.signature,\n timestamp: message.timestamp,\n },\n }),\n );\n // this.wsSubject.next({ type: \"authenticate\" });\n // this.authenticated = true;\n }\n\n privateSubscribe(\n params: any,\n callback: WSMessageHandler | Omit<WSMessageHandler, \"onUnsubscribe\">,\n ) {\n const [subscribeMessage, onUnsubscribe] = this.generateMessage(\n params,\n (callback as WSMessageHandler).onUnsubscribe,\n );\n\n if (this.privateSocket?.readyState !== WebSocket.OPEN) {\n this._pendingPrivateSubscribe.push([params, callback]);\n return () => {\n this.unsubscribePrivate(subscribeMessage);\n };\n }\n\n const topic = subscribeMessage.topic || subscribeMessage.event;\n\n const handler = this._eventPrivateHandlers.get(topic);\n const callbacks = {\n ...callback,\n onUnsubscribe,\n };\n\n if (!handler) {\n this._eventPrivateHandlers.set(topic, {\n params,\n callback: [callbacks],\n });\n this.privateSocket.send(JSON.stringify(subscribeMessage));\n } else {\n handler.callback.push(callbacks);\n }\n\n return () => {\n this.unsubscribePrivate(subscribeMessage);\n };\n }\n\n subscribe(\n params: any,\n callback: WSMessageHandler | Omit<WSMessageHandler, \"onUnsubscribe\">,\n once?: boolean,\n id?: string,\n ): unsubscribe | undefined {\n if (!this._publicSocket) {\n return;\n }\n\n const [subscribeMessage, onUnsubscribe] = this.generateMessage(\n params,\n (callback as WSMessageHandler).onUnsubscribe,\n (callback as WSMessageHandler).onMessage,\n );\n\n //\n\n if (this._publicSocket.readyState !== WebSocket.OPEN) {\n this._pendingPublicSubscribe.push([params, callback, once, id]);\n\n if (!once) {\n return () => {\n this.unsubscribePublic(subscribeMessage);\n };\n }\n return;\n }\n\n const topic = this.getTopicKeyFromParams(subscribeMessage);\n // const topic = subscribeMessage.topic || subscribeMessage.event;\n\n const handler = this._eventHandlers.get(topic);\n const callbacks = {\n ...callback,\n onUnsubscribe,\n };\n\n if (!handler) {\n this._eventHandlers.set(topic, {\n params,\n isOnce: once,\n callback: [callbacks],\n });\n this._publicSocket.send(JSON.stringify(subscribeMessage));\n } else {\n if (once) {\n handler.callback = [callbacks];\n this._publicSocket.send(JSON.stringify(subscribeMessage));\n } else {\n handler.callback.push(callbacks);\n }\n }\n\n // this._subscriptionPublicTopics.push({params, cb: [cb]});\n\n if (!once) {\n return () => {\n this.unsubscribePublic(subscribeMessage);\n };\n }\n }\n\n private getTopicKeyFromParams(params: any): string {\n let topic;\n\n if (params.topic) {\n topic = params.topic;\n } else {\n const eventName = params.event;\n topic = params.event;\n\n if (params.id) {\n topic += `_${params.id}`;\n }\n }\n\n return topic;\n }\n\n private getTopicKeyFromMessage(message: any): string {\n let topic;\n if (message.topic) {\n topic = message.topic;\n } else {\n if (message.event) {\n topic = `${message.event}`;\n\n if (message.id) {\n topic += `_${message.id}`;\n }\n }\n }\n\n return topic;\n }\n\n // sendPublicMessage(){\n // if(this.publicSocket.readyState !== )\n // }\n\n onceSubscribe(\n params: any,\n callback: Omit<WSMessageHandler, \"onUnsubscribe\">,\n ) {\n this.subscribe(params, callback, true);\n }\n\n private unsubscribe(\n parmas: MessageParams,\n webSocket: WebSocket,\n handlerMap: Map<string, Topics>,\n ) {\n const topic = parmas.topic || parmas.event;\n const handler = handlerMap.get(topic);\n\n // console.log(\"unsubscribe\", topic);\n\n if (!!handler && Array.isArray(handler?.callback)) {\n if (handler!.callback.length === 1) {\n const unsubscribeMessage = handler!.callback[0].onUnsubscribe(topic);\n\n //\n webSocket.send(JSON.stringify(unsubscribeMessage));\n handlerMap.delete(topic);\n //post unsubscribe message\n } else {\n const index = handler.callback.findIndex(\n (cb) => cb.onMessage === parmas.onMessage,\n );\n\n // console.log(index, handler.callback.length);\n\n if (index === -1) return;\n\n handler.callback.splice(index, 1);\n\n // handlerMap.set(topic, {\n // ...handler,\n // callback: handler.callback.splice(index, 1),\n // });\n }\n }\n }\n\n private unsubscribePrivate(parmas: MessageParams) {\n this.unsubscribe(parmas, this.privateSocket!, this._eventPrivateHandlers);\n }\n\n private unsubscribePublic(parmas: MessageParams) {\n this.unsubscribe(parmas, this._publicSocket, this._eventHandlers);\n }\n\n private generateMessage(\n params: any,\n onUnsubscribe?: (event: string) => any,\n onMessage?: (message: any) => any,\n ): [MessageParams, (event: string) => any] {\n let subscribeMessage;\n\n if (typeof params === \"string\") {\n subscribeMessage = { event: \"subscribe\", topic: params };\n } else {\n subscribeMessage = params;\n }\n\n if (typeof onUnsubscribe !== \"function\") {\n if (typeof params === \"string\") {\n onUnsubscribe = () => ({ event: \"unsubscribe\", topic: params });\n } else {\n onUnsubscribe = () => ({ event: \"unsubscribe\", topic: params.topic });\n }\n }\n\n return [{ ...subscribeMessage, onMessage }, onUnsubscribe];\n }\n\n private reconnectPublic() {\n if (this.publicIsReconnecting) return;\n this.publicIsReconnecting = true;\n\n if (typeof window === \"undefined\") return;\n window.setTimeout(() => {\n this._publicRetryCount++;\n this.createPublicSC(this.options);\n // this.emit(\"reconnect:public\", { count: this._publicRetryCount });\n this.emit(\"status:change\", {\n type: WebSocketEvent.RECONNECTING,\n isPrivate: false,\n count: this._publicRetryCount,\n });\n }, this.reconnectInterval);\n }\n\n private reconnectPrivate() {\n if (!this.options.accountId) return;\n if (this.privateIsReconnecting) return;\n this.privateIsReconnecting = true;\n\n if (typeof window === \"undefined\") return;\n window.setTimeout(() => {\n this._privateRetryCount++;\n this.createPrivateSC(this.options);\n\n this.emit(\"status:change\", {\n type: WebSocketEvent.RECONNECTING,\n isPrivate: true,\n count: this._privateRetryCount,\n });\n }, this.reconnectInterval);\n }\n\n // get publicSocket(): WebSocket {\n // return this._publicSocket;\n // }\n\n get client(): {\n public: WebSocket;\n private?: WebSocket;\n } {\n return {\n public: this._publicSocket,\n private: this.privateSocket,\n };\n }\n}\n","import { MessageHandler } from \"../../types/ws\";\n\nexport default class BaseHandler implements MessageHandler {\n handle(message: any, webSocket: WebSocket) {\n throw new Error(\"Method not implemented.\");\n }\n}\n","import BaseHandler from \"./baseHandler\";\n\nexport default class PingHandler extends BaseHandler {\n handle(_: any, webSocket: WebSocket) {\n webSocket.send(JSON.stringify({ event: \"pong\", ts: Date.now() }));\n }\n}\n","import { MessageHandler } from \"../../types/ws\";\nimport PingHandler from \"./ping\";\n\nexport type MessageType =\n | \"ping\"\n | \"pong\"\n | \"subscribe\"\n | \"unsubscribe\"\n | \"authenticate\"\n | \"message\"\n | \"error\"\n | \"auth\"\n | \"close\";\n\nexport const messageHandlers = new Map<MessageType, MessageHandler>([\n [\"ping\", new PingHandler()],\n]);\n"],"mappings":"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","names":["WebSocketEvent","EventEmitter"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/version.ts","../src/errors/apiError.ts","../src/fetch/index.ts","../src/constants.ts","../src/ws/ws.ts","../src/ws/handler/baseHandler.ts","../src/ws/handler/ping.ts","../src/ws/handler/handler.ts"],"sourcesContent":["export { default as version } from \"./version\";\nexport { get, post, del, put, mutate } from \"./fetch\";\n\nexport { __ORDERLY_API_URL_KEY__ } from \"./constants\";\n\nexport { WS, WebSocketEvent } from \"./ws/ws\";\n","declare global {\n interface Window {\n __ORDERLY_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif (typeof window !== \"undefined\") {\n window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};\n window.__ORDERLY_VERSION__[\"@kodiak-finance/orderly-net\"] = \"2.7.4\";\n}\n\nexport default \"2.7.4\";\n","export class ApiError extends Error {\n constructor(message: string, private readonly code: number) {\n super(message);\n this.name = \"ApiError\";\n }\n}\n","import { ApiError } from \"../errors/apiError\";\n\nasync function request(url: string, options: RequestInit) {\n //\n if (!url.startsWith(\"http\")) {\n throw new Error(\"url must start with http(s)\");\n }\n // const urlInstance = new URL(url);\n const response = await fetch(url, {\n ...options,\n // mode: \"cors\",\n // credentials: \"include\",\n headers: _createHeaders(options.headers, options.method),\n });\n\n if (response.ok) {\n const res = await response.json();\n return res;\n // if (res.success) {\n // return res;\n // } else {\n // throw new Error(res.message);\n // }\n } else {\n // console.log(response.status);\n try {\n const errorMsg = await response.json();\n if (response.status === 400) {\n throw new ApiError(\n errorMsg.message || errorMsg.code || response.statusText,\n errorMsg.code,\n );\n }\n // TODO: throw error code\n throw new Error(errorMsg.message || errorMsg.code || response.statusText);\n } catch (e) {\n throw e;\n }\n }\n\n // throw new Error(response.statusText);\n}\n\nfunction _createHeaders(\n headers: HeadersInit = {},\n method?: string,\n): HeadersInit {\n //\n const _headers = new Headers(headers);\n // _headers.append(\"Accept\", \"application/json\");\n\n if (!_headers.has(\"Content-Type\")) {\n if (method !== \"DELETE\") {\n _headers.append(\"Content-Type\", \"application/json;charset=utf-8\");\n } else {\n _headers.append(\"Content-Type\", \"application/x-www-form-urlencoded\");\n }\n }\n\n return _headers;\n}\n\nasync function get<R>(\n url: string,\n options?: RequestInit,\n formatter?: (data: any) => R,\n): Promise<R> {\n const res = await request(url, {\n method: \"GET\",\n ...options,\n });\n\n if (res.success) {\n if (typeof formatter === \"function\") {\n return formatter(res.data);\n }\n // Return the required data based on the returned data structure\n if (Array.isArray(res.data[\"rows\"])) {\n return res.data[\"rows\"] as unknown as R;\n }\n return res.data;\n }\n throw new Error(res.message);\n}\nasync function post(\n url: string,\n data: any,\n options?: Omit<RequestInit, \"method\">,\n): Promise<any> {\n const res = await request(url, {\n method: \"POST\",\n body: JSON.stringify(data),\n ...options,\n });\n\n return res;\n}\n\nasync function put(\n url: string,\n data: any,\n options?: Omit<RequestInit, \"method\">,\n): Promise<any> {\n const res = await request(url, {\n method: \"PUT\",\n body: JSON.stringify(data),\n ...options,\n });\n\n return res;\n}\n\nasync function del(\n url: string,\n options?: Omit<RequestInit, \"method\">,\n): Promise<any> {\n const res = await request(url, {\n method: \"DELETE\",\n ...options,\n });\n\n return res;\n}\n\nasync function mutate(url: string, init: RequestInit) {\n const res = await request(url, init);\n\n return res;\n}\n\nexport { get, post, del, put, mutate, request };\n","export const __ORDERLY_API_URL_KEY__: string = \"__ORDERLY_API_URL__\";\n","import EventEmitter from \"eventemitter3\";\nimport { messageHandlers } from \"./handler/handler\";\n\nexport type NetworkId = \"testnet\" | \"mainnet\";\n\nexport type WSOptions = {\n privateUrl: string;\n publicUrl?: string;\n networkId?: NetworkId;\n accountId?: string;\n\n onSigntureRequest?: (accountId: string) => Promise<any>;\n};\n\nexport type unsubscribe = () => void;\n\nexport enum WebSocketEvent {\n OPEN = \"open\",\n CLOSE = \"close\",\n ERROR = \"error\",\n MESSAGE = \"message\",\n CONNECTING = \"connecting\",\n RECONNECTING = \"reconnecting\",\n}\n\nexport type MessageParams = {\n event: string;\n topic: string;\n\n onMessage?: (message: any) => any;\n\n params?: any;\n // [key: string]: any;\n};\n\ntype WSMessageHandler = {\n onMessage: (message: any) => void;\n onError?: (error: any) => void;\n onClose?: (event: any) => void;\n onUnsubscribe: (event: any) => any;\n formatter?: (message: any) => any;\n};\n\ntype Topics = {\n params: MessageParams;\n isPrivate?: boolean;\n isOnce?: boolean;\n callback: WSMessageHandler[];\n};\n\nconst defaultMessageFormatter = (message: any) => message.data;\nconst COMMON_ID = \"OqdphuyCtYWxwzhxyLLjOWNdFP7sQt8RPWzmb5xY\";\n\nconst TIME_OUT = 1000 * 60 * 2;\nconst CONNECT_LIMIT = 5;\n\nexport class WS extends EventEmitter {\n private _publicSocket!: WebSocket;\n private privateSocket?: WebSocket;\n\n private _eventContainer: Map<string, Set<(message: any) => void>> = new Map();\n\n private publicIsReconnecting: boolean = false;\n private privateIsReconnecting: boolean = false;\n\n private reconnectInterval: number = 1000;\n\n private authenticated: boolean = false;\n\n private _pendingPrivateSubscribe: any[][] = [];\n private _pendingPublicSubscribe: any[][] = [];\n\n // all message handlers\n private _eventHandlers: Map<string, Topics> = new Map();\n private _eventPrivateHandlers: Map<string, Topics> = new Map();\n\n private _publicHeartbeatTime?: number;\n private _privateHeartbeatTime?: number;\n\n private _publicRetryCount: number = 0;\n private _privateRetryCount: number = 0;\n\n constructor(private options: WSOptions) {\n super();\n this.createPublicSC(options);\n\n if (!!options.accountId) {\n this.createPrivateSC(options);\n }\n\n this.bindEvents();\n }\n\n private bindEvents() {\n if (typeof document !== \"undefined\") {\n document.addEventListener?.(\n \"visibilitychange\",\n this.onVisibilityChange.bind(this),\n );\n }\n\n if (typeof window !== \"undefined\") {\n window.addEventListener?.(\n \"online\",\n this.onNetworkStatusChange.bind(this),\n );\n // window.addEventListener?.(\"offline\", (e) => {\n // // console.log(\"👀👀👀👀👀👀👀👀👀\", \"offline\");\n // this.emit(\"offline\", e);\n // });\n }\n }\n\n private onVisibilityChange() {\n if (document.visibilityState === \"visible\") {\n this.checkSocketStatus();\n }\n // else {\n // this.publicSocket.close();\n // this.privateSocket?.close();\n // }\n }\n\n private onNetworkStatusChange() {\n if (navigator.onLine) {\n this.checkSocketStatus();\n }\n }\n\n /**\n * Determine the current connection status,\n * 1. If it is disconnected, reconnect\n * 2. If no message is received for too long, disconnect and reconnect actively\n * 3. When returning from the background and the network status changes, the following process is followed\n */\n private checkSocketStatus() {\n const now = Date.now();\n\n //\n // \"👀👀 checkNetworkStatus 👀👀\",\n // this._publicHeartbeatTime,\n // this._privateHeartbeatTime,\n // now,\n // this.publicSocket.readyState,\n // this.privateSocket?.readyState\n // );\n\n // check the last time\n // If the view is not visible, do not process it\n if (document.visibilityState !== \"visible\") return;\n // If the network is not available, do not process it\n if (!navigator.onLine) return;\n\n // public\n if (!this.publicIsReconnecting) {\n if (this._publicSocket?.readyState === WebSocket.CLOSED) {\n this.reconnectPublic();\n } else {\n if (now - this._publicHeartbeatTime! > TIME_OUT) {\n //unsubscribe all public topic\n this._publicSocket?.close(3888);\n }\n }\n }\n\n if (!this.privateIsReconnecting) {\n // private\n if (this.privateSocket?.readyState === WebSocket.CLOSED) {\n this.reconnectPrivate();\n } else {\n if (\n this._privateHeartbeatTime &&\n now - this._privateHeartbeatTime! > TIME_OUT\n ) {\n // unsubscribe all private topic\n this.privateSocket?.close(3888);\n }\n }\n }\n }\n\n public openPrivate(accountId: string) {\n if (this.privateSocket?.readyState === WebSocket.OPEN) {\n return;\n }\n this.createPrivateSC({\n ...this.options,\n accountId,\n });\n }\n\n public closePrivate(code?: number, reason?: string) {\n if (this.privateSocket?.readyState !== WebSocket.OPEN) {\n return;\n }\n\n this.authenticated = false;\n\n this._pendingPrivateSubscribe = [];\n\n this._eventPrivateHandlers.clear();\n\n this.privateSocket?.close(code, reason);\n }\n\n private createPublicSC(options: WSOptions) {\n if (!options.publicUrl) {\n return;\n }\n\n if (\n this._publicSocket &&\n this._publicSocket.readyState === WebSocket.OPEN\n ) {\n return;\n }\n\n this._publicSocket = new WebSocket(\n `${options.publicUrl}/ws/stream/${COMMON_ID}`,\n );\n this._publicSocket.onopen = this.onOpen.bind(this);\n // this.publicSocket.onmessage = this.onPublicMessage.bind(this);\n this._publicSocket.addEventListener(\n \"message\",\n this.onPublicMessage.bind(this),\n );\n this._publicSocket.addEventListener(\"close\", this.onPublicClose.bind(this));\n this._publicSocket.addEventListener(\"error\", this.onPublicError.bind(this));\n // this.publicSocket.onclose = this.onPublicClose.bind(this);\n // this.publicSocket.onerror = this.onPublicError.bind(this);\n }\n\n private createPrivateSC(options: WSOptions) {\n if (\n this.privateSocket &&\n this.privateSocket.readyState === WebSocket.OPEN\n ) {\n return;\n }\n\n this.options = options;\n\n this.privateSocket = new WebSocket(\n `${this.options.privateUrl}/v2/ws/private/stream/${options.accountId}`,\n );\n this.privateSocket.onopen = this.onPrivateOpen.bind(this);\n this.privateSocket.onmessage = this.onPrivateMessage.bind(this);\n this.privateSocket.onclose = this.onPrivateClose.bind(this);\n this.privateSocket.onerror = this.onPrivateError.bind(this);\n }\n\n private onOpen(event: Event) {\n //\n if (this._pendingPublicSubscribe.length > 0) {\n this._pendingPublicSubscribe.forEach(([params, cb, isOnce]) => {\n this.subscribe(params, cb, isOnce);\n });\n this._pendingPublicSubscribe = [];\n }\n\n this.publicIsReconnecting = false;\n\n this.emit(\"status:change\", {\n type: WebSocketEvent.OPEN,\n isPrivate: false,\n isReconnect: this._publicRetryCount > 0,\n });\n\n this._publicRetryCount = 0;\n }\n\n private onPrivateOpen(event: Event) {\n // auth\n this.authenticate(this.options.accountId!)\n .then(() => {\n this.privateIsReconnecting = false;\n\n this.emit(\"status:change\", {\n type: WebSocketEvent.OPEN,\n isPrivate: true,\n isReconnect: this._privateRetryCount > 0,\n });\n\n this._privateRetryCount = 0;\n })\n .catch((e) => {\n console.log(\"ws authenticate failed\", e);\n });\n }\n\n private onMessage(\n event: MessageEvent,\n socket: WebSocket,\n handlerMap: Map<string, Topics>,\n ) {\n try {\n const message = JSON.parse(event.data);\n\n const commoneHandler = messageHandlers.get(message.event);\n\n if (message.event === \"auth\" && message.success) {\n this.authenticated = true;\n this.handlePendingPrivateTopic();\n return;\n }\n\n if (commoneHandler) {\n commoneHandler.handle(message, socket);\n } else {\n const topicKey = this.getTopicKeyFromMessage(message);\n\n const eventhandler = handlerMap.get(topicKey);\n //\n if (eventhandler?.callback) {\n // console.log(\"👀👀👀👀👀👀👀👀👀\", topicKey, eventhandler?.callback);\n eventhandler.callback.forEach((cb) => {\n const data = cb.formatter\n ? cb.formatter(message)\n : defaultMessageFormatter(message);\n\n if (data) {\n cb.onMessage(data);\n }\n });\n }\n\n // emit event\n this._eventContainer.forEach((_, key) => {\n const reg = new RegExp(key);\n if (reg.test(topicKey)) {\n this.emit(key, message);\n }\n });\n }\n\n //\n } catch (e) {}\n\n // You can process the received message here\n }\n\n private onPublicMessage(event: MessageEvent) {\n this.onMessage(event, this._publicSocket, this._eventHandlers);\n // update last message time for public\n this._publicHeartbeatTime = Date.now();\n }\n\n private onPrivateMessage(event: MessageEvent) {\n this.onMessage(event, this.privateSocket!, this._eventPrivateHandlers);\n // update last message time for private\n this._privateHeartbeatTime = Date.now();\n }\n\n private handlePendingPrivateTopic() {\n if (this._pendingPrivateSubscribe.length > 0) {\n this._pendingPrivateSubscribe.forEach(([params, cb]) => {\n this.privateSubscribe(params, cb);\n });\n this._pendingPrivateSubscribe = [];\n }\n }\n\n private onPublicClose(event: CloseEvent) {\n // move handler to pending\n this._eventHandlers.forEach((value, key) => {\n value.callback.forEach((cb) => {\n this._pendingPublicSubscribe.push([value.params, cb, value.isOnce]);\n });\n\n this._eventHandlers.delete(key);\n });\n\n this.emit(\"status:change\", {\n type: WebSocketEvent.CLOSE,\n isPrivate: false,\n });\n\n setTimeout(() => this.checkSocketStatus(), 0);\n }\n\n private onPrivateClose(event: CloseEvent) {\n if (event.code === 3887) return;\n if (this.privateIsReconnecting) return;\n this._eventPrivateHandlers.forEach((value, key) => {\n value.callback.forEach((cb) => {\n this._pendingPrivateSubscribe.push([value.params, cb, value.isOnce]);\n });\n\n this._eventPrivateHandlers.delete(key);\n });\n this.authenticated = false;\n\n this.emit(\"status:change\", {\n type: WebSocketEvent.CLOSE,\n isPrivate: true,\n event,\n });\n\n setTimeout(() => this.checkSocketStatus(), 0);\n }\n\n private onPublicError(event: Event) {\n console.error(\"public WebSocket error:\", event);\n this.publicIsReconnecting = false;\n\n if (this._publicSocket?.readyState === WebSocket.OPEN) {\n this._publicSocket?.close(3888);\n } else {\n // retry connect\n if (this._publicRetryCount > CONNECT_LIMIT) return;\n setTimeout(() => {\n // this.createPublicSC(this.options);\n this.reconnectPublic();\n // this._publicRetryCount++;\n }, this._publicRetryCount * 1000);\n }\n\n this.errorBoardscast(event, this._eventHandlers);\n this.emit(\"status:change\", {\n type: WebSocketEvent.ERROR,\n isPrivate: false,\n });\n }\n\n private onPrivateError(event: Event) {\n console.error(\"Private WebSocket error:\", event);\n this.privateIsReconnecting = false;\n\n if (this.privateSocket?.readyState === WebSocket.OPEN) {\n this.privateSocket.close(3888);\n } else {\n // retry connect\n if (this._privateRetryCount > CONNECT_LIMIT) return;\n setTimeout(() => {\n // this.createPublicSC(this.options);\n this.reconnectPrivate();\n // this._privateRetryCount++;\n }, this._privateRetryCount * 1000);\n }\n\n this.errorBoardscast(event, this._eventPrivateHandlers);\n this.emit(\"status:change\", { type: WebSocketEvent.ERROR, isPrivate: true });\n }\n\n private errorBoardscast(error: any, eventHandlers: Map<string, Topics>) {\n eventHandlers.forEach((value) => {\n value.callback.forEach((cb) => {\n cb.onError?.(error);\n });\n });\n }\n\n send = (message: any) => {\n if (typeof message !== \"string\") {\n message = JSON.stringify(message);\n }\n if (typeof message === \"undefined\") return;\n if (this._publicSocket?.readyState === WebSocket.OPEN) {\n this._publicSocket?.send(message);\n //\n } else {\n console.warn(\"WebSocket connection is not open. Cannot send message.\");\n }\n };\n\n close() {\n this._publicSocket?.close();\n this.privateSocket?.close();\n }\n\n set accountId(accountId: string) {}\n\n private async authenticate(accountId: string) {\n if (this.authenticated) return;\n if (!this.privateSocket) {\n console.error(\"private ws not connected\");\n return;\n }\n\n if (this.privateSocket.readyState !== WebSocket.OPEN) {\n return;\n }\n\n const message = await this.options.onSigntureRequest?.(accountId);\n\n this.privateSocket.send(\n JSON.stringify({\n id: \"auth\",\n event: \"auth\",\n params: {\n orderly_key: message.publicKey,\n sign: message.signature,\n timestamp: message.timestamp,\n },\n }),\n );\n // this.wsSubject.next({ type: \"authenticate\" });\n // this.authenticated = true;\n }\n\n privateSubscribe(\n params: any,\n callback: WSMessageHandler | Omit<WSMessageHandler, \"onUnsubscribe\">,\n ) {\n const [subscribeMessage, onUnsubscribe] = this.generateMessage(\n params,\n (callback as WSMessageHandler).onUnsubscribe,\n );\n\n if (this.privateSocket?.readyState !== WebSocket.OPEN) {\n this._pendingPrivateSubscribe.push([params, callback]);\n return () => {\n this.unsubscribePrivate(subscribeMessage);\n };\n }\n\n const topic = subscribeMessage.topic || subscribeMessage.event;\n\n const handler = this._eventPrivateHandlers.get(topic);\n const callbacks = {\n ...callback,\n onUnsubscribe,\n };\n\n if (!handler) {\n this._eventPrivateHandlers.set(topic, {\n params,\n callback: [callbacks],\n });\n this.privateSocket.send(JSON.stringify(subscribeMessage));\n } else {\n handler.callback.push(callbacks);\n }\n\n return () => {\n this.unsubscribePrivate(subscribeMessage);\n };\n }\n\n subscribe(\n params: any,\n callback: WSMessageHandler | Omit<WSMessageHandler, \"onUnsubscribe\">,\n once?: boolean,\n id?: string,\n ): unsubscribe | undefined {\n if (!this._publicSocket) {\n return;\n }\n\n const [subscribeMessage, onUnsubscribe] = this.generateMessage(\n params,\n (callback as WSMessageHandler).onUnsubscribe,\n (callback as WSMessageHandler).onMessage,\n );\n\n //\n\n if (this._publicSocket.readyState !== WebSocket.OPEN) {\n this._pendingPublicSubscribe.push([params, callback, once, id]);\n\n if (!once) {\n return () => {\n this.unsubscribePublic(subscribeMessage);\n };\n }\n return;\n }\n\n const topic = this.getTopicKeyFromParams(subscribeMessage);\n // const topic = subscribeMessage.topic || subscribeMessage.event;\n\n const handler = this._eventHandlers.get(topic);\n const callbacks = {\n ...callback,\n onUnsubscribe,\n };\n\n if (!handler) {\n this._eventHandlers.set(topic, {\n params,\n isOnce: once,\n callback: [callbacks],\n });\n this._publicSocket.send(JSON.stringify(subscribeMessage));\n } else {\n if (once) {\n handler.callback = [callbacks];\n this._publicSocket.send(JSON.stringify(subscribeMessage));\n } else {\n handler.callback.push(callbacks);\n }\n }\n\n // this._subscriptionPublicTopics.push({params, cb: [cb]});\n\n if (!once) {\n return () => {\n this.unsubscribePublic(subscribeMessage);\n };\n }\n }\n\n private getTopicKeyFromParams(params: any): string {\n let topic;\n\n if (params.topic) {\n topic = params.topic;\n } else {\n const eventName = params.event;\n topic = params.event;\n\n if (params.id) {\n topic += `_${params.id}`;\n }\n }\n\n return topic;\n }\n\n private getTopicKeyFromMessage(message: any): string {\n let topic;\n if (message.topic) {\n topic = message.topic;\n } else {\n if (message.event) {\n topic = `${message.event}`;\n\n if (message.id) {\n topic += `_${message.id}`;\n }\n }\n }\n\n return topic;\n }\n\n // sendPublicMessage(){\n // if(this.publicSocket.readyState !== )\n // }\n\n onceSubscribe(\n params: any,\n callback: Omit<WSMessageHandler, \"onUnsubscribe\">,\n ) {\n this.subscribe(params, callback, true);\n }\n\n private unsubscribe(\n parmas: MessageParams,\n webSocket: WebSocket,\n handlerMap: Map<string, Topics>,\n ) {\n const topic = parmas.topic || parmas.event;\n const handler = handlerMap.get(topic);\n\n // console.log(\"unsubscribe\", topic);\n\n if (!!handler && Array.isArray(handler?.callback)) {\n if (handler!.callback.length === 1) {\n const unsubscribeMessage = handler!.callback[0].onUnsubscribe(topic);\n\n //\n webSocket.send(JSON.stringify(unsubscribeMessage));\n handlerMap.delete(topic);\n //post unsubscribe message\n } else {\n const index = handler.callback.findIndex(\n (cb) => cb.onMessage === parmas.onMessage,\n );\n\n // console.log(index, handler.callback.length);\n\n if (index === -1) return;\n\n handler.callback.splice(index, 1);\n\n // handlerMap.set(topic, {\n // ...handler,\n // callback: handler.callback.splice(index, 1),\n // });\n }\n }\n }\n\n private unsubscribePrivate(parmas: MessageParams) {\n this.unsubscribe(parmas, this.privateSocket!, this._eventPrivateHandlers);\n }\n\n private unsubscribePublic(parmas: MessageParams) {\n this.unsubscribe(parmas, this._publicSocket, this._eventHandlers);\n }\n\n private generateMessage(\n params: any,\n onUnsubscribe?: (event: string) => any,\n onMessage?: (message: any) => any,\n ): [MessageParams, (event: string) => any] {\n let subscribeMessage;\n\n if (typeof params === \"string\") {\n subscribeMessage = { event: \"subscribe\", topic: params };\n } else {\n subscribeMessage = params;\n }\n\n if (typeof onUnsubscribe !== \"function\") {\n if (typeof params === \"string\") {\n onUnsubscribe = () => ({ event: \"unsubscribe\", topic: params });\n } else {\n onUnsubscribe = () => ({ event: \"unsubscribe\", topic: params.topic });\n }\n }\n\n return [{ ...subscribeMessage, onMessage }, onUnsubscribe];\n }\n\n private reconnectPublic() {\n if (this.publicIsReconnecting) return;\n this.publicIsReconnecting = true;\n\n if (typeof window === \"undefined\") return;\n window.setTimeout(() => {\n this._publicRetryCount++;\n this.createPublicSC(this.options);\n // this.emit(\"reconnect:public\", { count: this._publicRetryCount });\n this.emit(\"status:change\", {\n type: WebSocketEvent.RECONNECTING,\n isPrivate: false,\n count: this._publicRetryCount,\n });\n }, this.reconnectInterval);\n }\n\n private reconnectPrivate() {\n if (!this.options.accountId) return;\n if (this.privateIsReconnecting) return;\n this.privateIsReconnecting = true;\n\n if (typeof window === \"undefined\") return;\n window.setTimeout(() => {\n this._privateRetryCount++;\n this.createPrivateSC(this.options);\n\n this.emit(\"status:change\", {\n type: WebSocketEvent.RECONNECTING,\n isPrivate: true,\n count: this._privateRetryCount,\n });\n }, this.reconnectInterval);\n }\n\n // get publicSocket(): WebSocket {\n // return this._publicSocket;\n // }\n\n get client(): {\n public: WebSocket;\n private?: WebSocket;\n } {\n return {\n public: this._publicSocket,\n private: this.privateSocket,\n };\n }\n}\n","import { MessageHandler } from \"../../types/ws\";\n\nexport default class BaseHandler implements MessageHandler {\n handle(message: any, webSocket: WebSocket) {\n throw new Error(\"Method not implemented.\");\n }\n}\n","import BaseHandler from \"./baseHandler\";\n\nexport default class PingHandler extends BaseHandler {\n handle(_: any, webSocket: WebSocket) {\n webSocket.send(JSON.stringify({ event: \"pong\", ts: Date.now() }));\n }\n}\n","import { MessageHandler } from \"../../types/ws\";\nimport PingHandler from \"./ping\";\n\nexport type MessageType =\n | \"ping\"\n | \"pong\"\n | \"subscribe\"\n | \"unsubscribe\"\n | \"authenticate\"\n | \"message\"\n | \"error\"\n | \"auth\"\n | \"close\";\n\nexport const messageHandlers = new Map<MessageType, MessageHandler>([\n [\"ping\", new PingHandler()],\n]);\n"],"mappings":"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","names":["WebSocketEvent","EventEmitter"]}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/version.ts","../src/errors/apiError.ts","../src/fetch/index.ts","../src/constants.ts","../src/ws/ws.ts","../src/ws/handler/baseHandler.ts","../src/ws/handler/ping.ts","../src/ws/handler/handler.ts"],"sourcesContent":["declare global {\n interface Window {\n __ORDERLY_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif (typeof window !== \"undefined\") {\n window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};\n window.__ORDERLY_VERSION__[\"@kodiak-finance/orderly-net\"] = \"2.7.4\";\n}\n\nexport default \"2.7.4\";\n","export class ApiError extends Error {\n constructor(message: string, private readonly code: number) {\n super(message);\n this.name = \"ApiError\";\n }\n}\n","import { ApiError } from \"../errors/apiError\";\n\nasync function request(url: string, options: RequestInit) {\n //\n if (!url.startsWith(\"http\")) {\n throw new Error(\"url must start with http(s)\");\n }\n // const urlInstance = new URL(url);\n const response = await fetch(url, {\n ...options,\n // mode: \"cors\",\n // credentials: \"include\",\n headers: _createHeaders(options.headers, options.method),\n });\n\n if (response.ok) {\n const res = await response.json();\n return res;\n // if (res.success) {\n // return res;\n // } else {\n // throw new Error(res.message);\n // }\n } else {\n // console.log(response.status);\n try {\n const errorMsg = await response.json();\n if (response.status === 400) {\n throw new ApiError(\n errorMsg.message || errorMsg.code || response.statusText,\n errorMsg.code,\n );\n }\n // TODO: throw error code\n throw new Error(errorMsg.message || errorMsg.code || response.statusText);\n } catch (e) {\n throw e;\n }\n }\n\n // throw new Error(response.statusText);\n}\n\nfunction _createHeaders(\n headers: HeadersInit = {},\n method?: string,\n): HeadersInit {\n //\n const _headers = new Headers(headers);\n // _headers.append(\"Accept\", \"application/json\");\n\n if (!_headers.has(\"Content-Type\")) {\n if (method !== \"DELETE\") {\n _headers.append(\"Content-Type\", \"application/json;charset=utf-8\");\n } else {\n _headers.append(\"Content-Type\", \"application/x-www-form-urlencoded\");\n }\n }\n\n return _headers;\n}\n\nasync function get<R>(\n url: string,\n options?: RequestInit,\n formatter?: (data: any) => R,\n): Promise<R> {\n const res = await request(url, {\n method: \"GET\",\n ...options,\n });\n\n if (res.success) {\n if (typeof formatter === \"function\") {\n return formatter(res.data);\n }\n // Return the required data based on the returned data structure\n if (Array.isArray(res.data[\"rows\"])) {\n return res.data[\"rows\"] as unknown as R;\n }\n return res.data;\n }\n throw new Error(res.message);\n}\nasync function post(\n url: string,\n data: any,\n options?: Omit<RequestInit, \"method\">,\n): Promise<any> {\n const res = await request(url, {\n method: \"POST\",\n body: JSON.stringify(data),\n ...options,\n });\n\n return res;\n}\n\nasync function put(\n url: string,\n data: any,\n options?: Omit<RequestInit, \"method\">,\n): Promise<any> {\n const res = await request(url, {\n method: \"PUT\",\n body: JSON.stringify(data),\n ...options,\n });\n\n return res;\n}\n\nasync function del(\n url: string,\n options?: Omit<RequestInit, \"method\">,\n): Promise<any> {\n const res = await request(url, {\n method: \"DELETE\",\n ...options,\n });\n\n return res;\n}\n\nasync function mutate(url: string, init: RequestInit) {\n const res = await request(url, init);\n\n return res;\n}\n\nexport { get, post, del, put, mutate, request };\n","export const __ORDERLY_API_URL_KEY__: string = \"__ORDERLY_API_URL__\";\n","import EventEmitter from \"eventemitter3\";\nimport { messageHandlers } from \"./handler/handler\";\n\nexport type NetworkId = \"testnet\" | \"mainnet\";\n\nexport type WSOptions = {\n privateUrl: string;\n publicUrl?: string;\n networkId?: NetworkId;\n accountId?: string;\n\n onSigntureRequest?: (accountId: string) => Promise<any>;\n};\n\nexport type unsubscribe = () => void;\n\nexport enum WebSocketEvent {\n OPEN = \"open\",\n CLOSE = \"close\",\n ERROR = \"error\",\n MESSAGE = \"message\",\n CONNECTING = \"connecting\",\n RECONNECTING = \"reconnecting\",\n}\n\nexport type MessageParams = {\n event: string;\n topic: string;\n\n onMessage?: (message: any) => any;\n\n params?: any;\n // [key: string]: any;\n};\n\ntype WSMessageHandler = {\n onMessage: (message: any) => void;\n onError?: (error: any) => void;\n onClose?: (event: any) => void;\n onUnsubscribe: (event: any) => any;\n formatter?: (message: any) => any;\n};\n\ntype Topics = {\n params: MessageParams;\n isPrivate?: boolean;\n isOnce?: boolean;\n callback: WSMessageHandler[];\n};\n\nconst defaultMessageFormatter = (message: any) => message.data;\nconst COMMON_ID = \"OqdphuyCtYWxwzhxyLLjOWNdFP7sQt8RPWzmb5xY\";\n\nconst TIME_OUT = 1000 * 60 * 2;\nconst CONNECT_LIMIT = 5;\n\nexport class WS extends EventEmitter {\n private _publicSocket!: WebSocket;\n private privateSocket?: WebSocket;\n\n private _eventContainer: Map<string, Set<(message: any) => void>> = new Map();\n\n private publicIsReconnecting: boolean = false;\n private privateIsReconnecting: boolean = false;\n\n private reconnectInterval: number = 1000;\n\n private authenticated: boolean = false;\n\n private _pendingPrivateSubscribe: any[][] = [];\n private _pendingPublicSubscribe: any[][] = [];\n\n // all message handlers\n private _eventHandlers: Map<string, Topics> = new Map();\n private _eventPrivateHandlers: Map<string, Topics> = new Map();\n\n private _publicHeartbeatTime?: number;\n private _privateHeartbeatTime?: number;\n\n private _publicRetryCount: number = 0;\n private _privateRetryCount: number = 0;\n\n constructor(private options: WSOptions) {\n super();\n this.createPublicSC(options);\n\n if (!!options.accountId) {\n this.createPrivateSC(options);\n }\n\n this.bindEvents();\n }\n\n private bindEvents() {\n if (typeof document !== \"undefined\") {\n document.addEventListener?.(\n \"visibilitychange\",\n this.onVisibilityChange.bind(this),\n );\n }\n\n if (typeof window !== \"undefined\") {\n window.addEventListener?.(\n \"online\",\n this.onNetworkStatusChange.bind(this),\n );\n // window.addEventListener?.(\"offline\", (e) => {\n // // console.log(\"👀👀👀👀👀👀👀👀👀\", \"offline\");\n // this.emit(\"offline\", e);\n // });\n }\n }\n\n private onVisibilityChange() {\n if (document.visibilityState === \"visible\") {\n this.checkSocketStatus();\n }\n // else {\n // this.publicSocket.close();\n // this.privateSocket?.close();\n // }\n }\n\n private onNetworkStatusChange() {\n if (navigator.onLine) {\n this.checkSocketStatus();\n }\n }\n\n /**\n * Determine the current connection status,\n * 1. If it is disconnected, reconnect\n * 2. If no message is received for too long, disconnect and reconnect actively\n * 3. When returning from the background and the network status changes, the following process is followed\n */\n private checkSocketStatus() {\n const now = Date.now();\n\n //\n // \"👀👀 checkNetworkStatus 👀👀\",\n // this._publicHeartbeatTime,\n // this._privateHeartbeatTime,\n // now,\n // this.publicSocket.readyState,\n // this.privateSocket?.readyState\n // );\n\n // check the last time\n // If the view is not visible, do not process it\n if (document.visibilityState !== \"visible\") return;\n // If the network is not available, do not process it\n if (!navigator.onLine) return;\n\n // public\n if (!this.publicIsReconnecting) {\n if (this._publicSocket?.readyState === WebSocket.CLOSED) {\n this.reconnectPublic();\n } else {\n if (now - this._publicHeartbeatTime! > TIME_OUT) {\n //unsubscribe all public topic\n this._publicSocket?.close(3888);\n }\n }\n }\n\n if (!this.privateIsReconnecting) {\n // private\n if (this.privateSocket?.readyState === WebSocket.CLOSED) {\n this.reconnectPrivate();\n } else {\n if (\n this._privateHeartbeatTime &&\n now - this._privateHeartbeatTime! > TIME_OUT\n ) {\n // unsubscribe all private topic\n this.privateSocket?.close(3888);\n }\n }\n }\n }\n\n public openPrivate(accountId: string) {\n if (this.privateSocket?.readyState === WebSocket.OPEN) {\n return;\n }\n this.createPrivateSC({\n ...this.options,\n accountId,\n });\n }\n\n public closePrivate(code?: number, reason?: string) {\n if (this.privateSocket?.readyState !== WebSocket.OPEN) {\n return;\n }\n\n this.authenticated = false;\n\n this._pendingPrivateSubscribe = [];\n\n this._eventPrivateHandlers.clear();\n\n this.privateSocket?.close(code, reason);\n }\n\n private createPublicSC(options: WSOptions) {\n if (!options.publicUrl) {\n return;\n }\n\n if (\n this._publicSocket &&\n this._publicSocket.readyState === WebSocket.OPEN\n ) {\n return;\n }\n\n this._publicSocket = new WebSocket(\n `${options.publicUrl}/ws/stream/${COMMON_ID}`,\n );\n this._publicSocket.onopen = this.onOpen.bind(this);\n // this.publicSocket.onmessage = this.onPublicMessage.bind(this);\n this._publicSocket.addEventListener(\n \"message\",\n this.onPublicMessage.bind(this),\n );\n this._publicSocket.addEventListener(\"close\", this.onPublicClose.bind(this));\n this._publicSocket.addEventListener(\"error\", this.onPublicError.bind(this));\n // this.publicSocket.onclose = this.onPublicClose.bind(this);\n // this.publicSocket.onerror = this.onPublicError.bind(this);\n }\n\n private createPrivateSC(options: WSOptions) {\n if (\n this.privateSocket &&\n this.privateSocket.readyState === WebSocket.OPEN\n ) {\n return;\n }\n\n this.options = options;\n\n this.privateSocket = new WebSocket(\n `${this.options.privateUrl}/v2/ws/private/stream/${options.accountId}`,\n );\n this.privateSocket.onopen = this.onPrivateOpen.bind(this);\n this.privateSocket.onmessage = this.onPrivateMessage.bind(this);\n this.privateSocket.onclose = this.onPrivateClose.bind(this);\n this.privateSocket.onerror = this.onPrivateError.bind(this);\n }\n\n private onOpen(event: Event) {\n //\n if (this._pendingPublicSubscribe.length > 0) {\n this._pendingPublicSubscribe.forEach(([params, cb, isOnce]) => {\n this.subscribe(params, cb, isOnce);\n });\n this._pendingPublicSubscribe = [];\n }\n\n this.publicIsReconnecting = false;\n\n this.emit(\"status:change\", {\n type: WebSocketEvent.OPEN,\n isPrivate: false,\n isReconnect: this._publicRetryCount > 0,\n });\n\n this._publicRetryCount = 0;\n }\n\n private onPrivateOpen(event: Event) {\n // auth\n this.authenticate(this.options.accountId!)\n .then(() => {\n this.privateIsReconnecting = false;\n\n this.emit(\"status:change\", {\n type: WebSocketEvent.OPEN,\n isPrivate: true,\n isReconnect: this._privateRetryCount > 0,\n });\n\n this._privateRetryCount = 0;\n })\n .catch((e) => {\n console.log(\"ws authenticate failed\", e);\n });\n }\n\n private onMessage(\n event: MessageEvent,\n socket: WebSocket,\n handlerMap: Map<string, Topics>,\n ) {\n try {\n const message = JSON.parse(event.data);\n\n const commoneHandler = messageHandlers.get(message.event);\n\n if (message.event === \"auth\" && message.success) {\n this.authenticated = true;\n this.handlePendingPrivateTopic();\n return;\n }\n\n if (commoneHandler) {\n commoneHandler.handle(message, socket);\n } else {\n const topicKey = this.getTopicKeyFromMessage(message);\n\n const eventhandler = handlerMap.get(topicKey);\n //\n if (eventhandler?.callback) {\n // console.log(\"👀👀👀👀👀👀👀👀👀\", topicKey, eventhandler?.callback);\n eventhandler.callback.forEach((cb) => {\n const data = cb.formatter\n ? cb.formatter(message)\n : defaultMessageFormatter(message);\n\n if (data) {\n cb.onMessage(data);\n }\n });\n }\n\n // emit event\n this._eventContainer.forEach((_, key) => {\n const reg = new RegExp(key);\n if (reg.test(topicKey)) {\n this.emit(key, message);\n }\n });\n }\n\n //\n } catch (e) {}\n\n // You can process the received message here\n }\n\n private onPublicMessage(event: MessageEvent) {\n this.onMessage(event, this._publicSocket, this._eventHandlers);\n // update last message time for public\n this._publicHeartbeatTime = Date.now();\n }\n\n private onPrivateMessage(event: MessageEvent) {\n this.onMessage(event, this.privateSocket!, this._eventPrivateHandlers);\n // update last message time for private\n this._privateHeartbeatTime = Date.now();\n }\n\n private handlePendingPrivateTopic() {\n if (this._pendingPrivateSubscribe.length > 0) {\n this._pendingPrivateSubscribe.forEach(([params, cb]) => {\n this.privateSubscribe(params, cb);\n });\n this._pendingPrivateSubscribe = [];\n }\n }\n\n private onPublicClose(event: CloseEvent) {\n // move handler to pending\n this._eventHandlers.forEach((value, key) => {\n value.callback.forEach((cb) => {\n this._pendingPublicSubscribe.push([value.params, cb, value.isOnce]);\n });\n\n this._eventHandlers.delete(key);\n });\n\n this.emit(\"status:change\", {\n type: WebSocketEvent.CLOSE,\n isPrivate: false,\n });\n\n setTimeout(() => this.checkSocketStatus(), 0);\n }\n\n private onPrivateClose(event: CloseEvent) {\n if (event.code === 3887) return;\n if (this.privateIsReconnecting) return;\n this._eventPrivateHandlers.forEach((value, key) => {\n value.callback.forEach((cb) => {\n this._pendingPrivateSubscribe.push([value.params, cb, value.isOnce]);\n });\n\n this._eventPrivateHandlers.delete(key);\n });\n this.authenticated = false;\n\n this.emit(\"status:change\", {\n type: WebSocketEvent.CLOSE,\n isPrivate: true,\n event,\n });\n\n setTimeout(() => this.checkSocketStatus(), 0);\n }\n\n private onPublicError(event: Event) {\n console.error(\"public WebSocket error:\", event);\n this.publicIsReconnecting = false;\n\n if (this._publicSocket?.readyState === WebSocket.OPEN) {\n this._publicSocket?.close(3888);\n } else {\n // retry connect\n if (this._publicRetryCount > CONNECT_LIMIT) return;\n setTimeout(() => {\n // this.createPublicSC(this.options);\n this.reconnectPublic();\n // this._publicRetryCount++;\n }, this._publicRetryCount * 1000);\n }\n\n this.errorBoardscast(event, this._eventHandlers);\n this.emit(\"status:change\", {\n type: WebSocketEvent.ERROR,\n isPrivate: false,\n });\n }\n\n private onPrivateError(event: Event) {\n console.error(\"Private WebSocket error:\", event);\n this.privateIsReconnecting = false;\n\n if (this.privateSocket?.readyState === WebSocket.OPEN) {\n this.privateSocket.close(3888);\n } else {\n // retry connect\n if (this._privateRetryCount > CONNECT_LIMIT) return;\n setTimeout(() => {\n // this.createPublicSC(this.options);\n this.reconnectPrivate();\n // this._privateRetryCount++;\n }, this._privateRetryCount * 1000);\n }\n\n this.errorBoardscast(event, this._eventPrivateHandlers);\n this.emit(\"status:change\", { type: WebSocketEvent.ERROR, isPrivate: true });\n }\n\n private errorBoardscast(error: any, eventHandlers: Map<string, Topics>) {\n eventHandlers.forEach((value) => {\n value.callback.forEach((cb) => {\n cb.onError?.(error);\n });\n });\n }\n\n send = (message: any) => {\n if (typeof message !== \"string\") {\n message = JSON.stringify(message);\n }\n if (typeof message === \"undefined\") return;\n if (this._publicSocket?.readyState === WebSocket.OPEN) {\n this._publicSocket?.send(message);\n //\n } else {\n console.warn(\"WebSocket connection is not open. Cannot send message.\");\n }\n };\n\n close() {\n this._publicSocket?.close();\n this.privateSocket?.close();\n }\n\n set accountId(accountId: string) {}\n\n private async authenticate(accountId: string) {\n if (this.authenticated) return;\n if (!this.privateSocket) {\n console.error(\"private ws not connected\");\n return;\n }\n\n if (this.privateSocket.readyState !== WebSocket.OPEN) {\n return;\n }\n\n const message = await this.options.onSigntureRequest?.(accountId);\n\n this.privateSocket.send(\n JSON.stringify({\n id: \"auth\",\n event: \"auth\",\n params: {\n orderly_key: message.publicKey,\n sign: message.signature,\n timestamp: message.timestamp,\n },\n }),\n );\n // this.wsSubject.next({ type: \"authenticate\" });\n // this.authenticated = true;\n }\n\n privateSubscribe(\n params: any,\n callback: WSMessageHandler | Omit<WSMessageHandler, \"onUnsubscribe\">,\n ) {\n const [subscribeMessage, onUnsubscribe] = this.generateMessage(\n params,\n (callback as WSMessageHandler).onUnsubscribe,\n );\n\n if (this.privateSocket?.readyState !== WebSocket.OPEN) {\n this._pendingPrivateSubscribe.push([params, callback]);\n return () => {\n this.unsubscribePrivate(subscribeMessage);\n };\n }\n\n const topic = subscribeMessage.topic || subscribeMessage.event;\n\n const handler = this._eventPrivateHandlers.get(topic);\n const callbacks = {\n ...callback,\n onUnsubscribe,\n };\n\n if (!handler) {\n this._eventPrivateHandlers.set(topic, {\n params,\n callback: [callbacks],\n });\n this.privateSocket.send(JSON.stringify(subscribeMessage));\n } else {\n handler.callback.push(callbacks);\n }\n\n return () => {\n this.unsubscribePrivate(subscribeMessage);\n };\n }\n\n subscribe(\n params: any,\n callback: WSMessageHandler | Omit<WSMessageHandler, \"onUnsubscribe\">,\n once?: boolean,\n id?: string,\n ): unsubscribe | undefined {\n if (!this._publicSocket) {\n return;\n }\n\n const [subscribeMessage, onUnsubscribe] = this.generateMessage(\n params,\n (callback as WSMessageHandler).onUnsubscribe,\n (callback as WSMessageHandler).onMessage,\n );\n\n //\n\n if (this._publicSocket.readyState !== WebSocket.OPEN) {\n this._pendingPublicSubscribe.push([params, callback, once, id]);\n\n if (!once) {\n return () => {\n this.unsubscribePublic(subscribeMessage);\n };\n }\n return;\n }\n\n const topic = this.getTopicKeyFromParams(subscribeMessage);\n // const topic = subscribeMessage.topic || subscribeMessage.event;\n\n const handler = this._eventHandlers.get(topic);\n const callbacks = {\n ...callback,\n onUnsubscribe,\n };\n\n if (!handler) {\n this._eventHandlers.set(topic, {\n params,\n isOnce: once,\n callback: [callbacks],\n });\n this._publicSocket.send(JSON.stringify(subscribeMessage));\n } else {\n if (once) {\n handler.callback = [callbacks];\n this._publicSocket.send(JSON.stringify(subscribeMessage));\n } else {\n handler.callback.push(callbacks);\n }\n }\n\n // this._subscriptionPublicTopics.push({params, cb: [cb]});\n\n if (!once) {\n return () => {\n this.unsubscribePublic(subscribeMessage);\n };\n }\n }\n\n private getTopicKeyFromParams(params: any): string {\n let topic;\n\n if (params.topic) {\n topic = params.topic;\n } else {\n const eventName = params.event;\n topic = params.event;\n\n if (params.id) {\n topic += `_${params.id}`;\n }\n }\n\n return topic;\n }\n\n private getTopicKeyFromMessage(message: any): string {\n let topic;\n if (message.topic) {\n topic = message.topic;\n } else {\n if (message.event) {\n topic = `${message.event}`;\n\n if (message.id) {\n topic += `_${message.id}`;\n }\n }\n }\n\n return topic;\n }\n\n // sendPublicMessage(){\n // if(this.publicSocket.readyState !== )\n // }\n\n onceSubscribe(\n params: any,\n callback: Omit<WSMessageHandler, \"onUnsubscribe\">,\n ) {\n this.subscribe(params, callback, true);\n }\n\n private unsubscribe(\n parmas: MessageParams,\n webSocket: WebSocket,\n handlerMap: Map<string, Topics>,\n ) {\n const topic = parmas.topic || parmas.event;\n const handler = handlerMap.get(topic);\n\n // console.log(\"unsubscribe\", topic);\n\n if (!!handler && Array.isArray(handler?.callback)) {\n if (handler!.callback.length === 1) {\n const unsubscribeMessage = handler!.callback[0].onUnsubscribe(topic);\n\n //\n webSocket.send(JSON.stringify(unsubscribeMessage));\n handlerMap.delete(topic);\n //post unsubscribe message\n } else {\n const index = handler.callback.findIndex(\n (cb) => cb.onMessage === parmas.onMessage,\n );\n\n // console.log(index, handler.callback.length);\n\n if (index === -1) return;\n\n handler.callback.splice(index, 1);\n\n // handlerMap.set(topic, {\n // ...handler,\n // callback: handler.callback.splice(index, 1),\n // });\n }\n }\n }\n\n private unsubscribePrivate(parmas: MessageParams) {\n this.unsubscribe(parmas, this.privateSocket!, this._eventPrivateHandlers);\n }\n\n private unsubscribePublic(parmas: MessageParams) {\n this.unsubscribe(parmas, this._publicSocket, this._eventHandlers);\n }\n\n private generateMessage(\n params: any,\n onUnsubscribe?: (event: string) => any,\n onMessage?: (message: any) => any,\n ): [MessageParams, (event: string) => any] {\n let subscribeMessage;\n\n if (typeof params === \"string\") {\n subscribeMessage = { event: \"subscribe\", topic: params };\n } else {\n subscribeMessage = params;\n }\n\n if (typeof onUnsubscribe !== \"function\") {\n if (typeof params === \"string\") {\n onUnsubscribe = () => ({ event: \"unsubscribe\", topic: params });\n } else {\n onUnsubscribe = () => ({ event: \"unsubscribe\", topic: params.topic });\n }\n }\n\n return [{ ...subscribeMessage, onMessage }, onUnsubscribe];\n }\n\n private reconnectPublic() {\n if (this.publicIsReconnecting) return;\n this.publicIsReconnecting = true;\n\n if (typeof window === \"undefined\") return;\n window.setTimeout(() => {\n this._publicRetryCount++;\n this.createPublicSC(this.options);\n // this.emit(\"reconnect:public\", { count: this._publicRetryCount });\n this.emit(\"status:change\", {\n type: WebSocketEvent.RECONNECTING,\n isPrivate: false,\n count: this._publicRetryCount,\n });\n }, this.reconnectInterval);\n }\n\n private reconnectPrivate() {\n if (!this.options.accountId) return;\n if (this.privateIsReconnecting) return;\n this.privateIsReconnecting = true;\n\n if (typeof window === \"undefined\") return;\n window.setTimeout(() => {\n this._privateRetryCount++;\n this.createPrivateSC(this.options);\n\n this.emit(\"status:change\", {\n type: WebSocketEvent.RECONNECTING,\n isPrivate: true,\n count: this._privateRetryCount,\n });\n }, this.reconnectInterval);\n }\n\n // get publicSocket(): WebSocket {\n // return this._publicSocket;\n // }\n\n get client(): {\n public: WebSocket;\n private?: WebSocket;\n } {\n return {\n public: this._publicSocket,\n private: this.privateSocket,\n };\n }\n}\n","import { MessageHandler } from \"../../types/ws\";\n\nexport default class BaseHandler implements MessageHandler {\n handle(message: any, webSocket: WebSocket) {\n throw new Error(\"Method not implemented.\");\n }\n}\n","import BaseHandler from \"./baseHandler\";\n\nexport default class PingHandler extends BaseHandler {\n handle(_: any, webSocket: WebSocket) {\n webSocket.send(JSON.stringify({ event: \"pong\", ts: Date.now() }));\n }\n}\n","import { MessageHandler } from \"../../types/ws\";\nimport PingHandler from \"./ping\";\n\nexport type MessageType =\n | \"ping\"\n | \"pong\"\n | \"subscribe\"\n | \"unsubscribe\"\n | \"authenticate\"\n | \"message\"\n | \"error\"\n | \"auth\"\n | \"close\";\n\nexport const messageHandlers = new Map<MessageType, MessageHandler>([\n [\"ping\", new PingHandler()],\n]);\n"],"mappings":"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","names":["WebSocketEvent"]}
|
|
1
|
+
{"version":3,"sources":["../src/version.ts","../src/errors/apiError.ts","../src/fetch/index.ts","../src/constants.ts","../src/ws/ws.ts","../src/ws/handler/baseHandler.ts","../src/ws/handler/ping.ts","../src/ws/handler/handler.ts"],"sourcesContent":["declare global {\n interface Window {\n __ORDERLY_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif (typeof window !== \"undefined\") {\n window.__ORDERLY_VERSION__ = window.__ORDERLY_VERSION__ || {};\n window.__ORDERLY_VERSION__[\"@kodiak-finance/orderly-net\"] = \"2.7.4\";\n}\n\nexport default \"2.7.4\";\n","export class ApiError extends Error {\n constructor(message: string, private readonly code: number) {\n super(message);\n this.name = \"ApiError\";\n }\n}\n","import { ApiError } from \"../errors/apiError\";\n\nasync function request(url: string, options: RequestInit) {\n //\n if (!url.startsWith(\"http\")) {\n throw new Error(\"url must start with http(s)\");\n }\n // const urlInstance = new URL(url);\n const response = await fetch(url, {\n ...options,\n // mode: \"cors\",\n // credentials: \"include\",\n headers: _createHeaders(options.headers, options.method),\n });\n\n if (response.ok) {\n const res = await response.json();\n return res;\n // if (res.success) {\n // return res;\n // } else {\n // throw new Error(res.message);\n // }\n } else {\n // console.log(response.status);\n try {\n const errorMsg = await response.json();\n if (response.status === 400) {\n throw new ApiError(\n errorMsg.message || errorMsg.code || response.statusText,\n errorMsg.code,\n );\n }\n // TODO: throw error code\n throw new Error(errorMsg.message || errorMsg.code || response.statusText);\n } catch (e) {\n throw e;\n }\n }\n\n // throw new Error(response.statusText);\n}\n\nfunction _createHeaders(\n headers: HeadersInit = {},\n method?: string,\n): HeadersInit {\n //\n const _headers = new Headers(headers);\n // _headers.append(\"Accept\", \"application/json\");\n\n if (!_headers.has(\"Content-Type\")) {\n if (method !== \"DELETE\") {\n _headers.append(\"Content-Type\", \"application/json;charset=utf-8\");\n } else {\n _headers.append(\"Content-Type\", \"application/x-www-form-urlencoded\");\n }\n }\n\n return _headers;\n}\n\nasync function get<R>(\n url: string,\n options?: RequestInit,\n formatter?: (data: any) => R,\n): Promise<R> {\n const res = await request(url, {\n method: \"GET\",\n ...options,\n });\n\n if (res.success) {\n if (typeof formatter === \"function\") {\n return formatter(res.data);\n }\n // Return the required data based on the returned data structure\n if (Array.isArray(res.data[\"rows\"])) {\n return res.data[\"rows\"] as unknown as R;\n }\n return res.data;\n }\n throw new Error(res.message);\n}\nasync function post(\n url: string,\n data: any,\n options?: Omit<RequestInit, \"method\">,\n): Promise<any> {\n const res = await request(url, {\n method: \"POST\",\n body: JSON.stringify(data),\n ...options,\n });\n\n return res;\n}\n\nasync function put(\n url: string,\n data: any,\n options?: Omit<RequestInit, \"method\">,\n): Promise<any> {\n const res = await request(url, {\n method: \"PUT\",\n body: JSON.stringify(data),\n ...options,\n });\n\n return res;\n}\n\nasync function del(\n url: string,\n options?: Omit<RequestInit, \"method\">,\n): Promise<any> {\n const res = await request(url, {\n method: \"DELETE\",\n ...options,\n });\n\n return res;\n}\n\nasync function mutate(url: string, init: RequestInit) {\n const res = await request(url, init);\n\n return res;\n}\n\nexport { get, post, del, put, mutate, request };\n","export const __ORDERLY_API_URL_KEY__: string = \"__ORDERLY_API_URL__\";\n","import EventEmitter from \"eventemitter3\";\nimport { messageHandlers } from \"./handler/handler\";\n\nexport type NetworkId = \"testnet\" | \"mainnet\";\n\nexport type WSOptions = {\n privateUrl: string;\n publicUrl?: string;\n networkId?: NetworkId;\n accountId?: string;\n\n onSigntureRequest?: (accountId: string) => Promise<any>;\n};\n\nexport type unsubscribe = () => void;\n\nexport enum WebSocketEvent {\n OPEN = \"open\",\n CLOSE = \"close\",\n ERROR = \"error\",\n MESSAGE = \"message\",\n CONNECTING = \"connecting\",\n RECONNECTING = \"reconnecting\",\n}\n\nexport type MessageParams = {\n event: string;\n topic: string;\n\n onMessage?: (message: any) => any;\n\n params?: any;\n // [key: string]: any;\n};\n\ntype WSMessageHandler = {\n onMessage: (message: any) => void;\n onError?: (error: any) => void;\n onClose?: (event: any) => void;\n onUnsubscribe: (event: any) => any;\n formatter?: (message: any) => any;\n};\n\ntype Topics = {\n params: MessageParams;\n isPrivate?: boolean;\n isOnce?: boolean;\n callback: WSMessageHandler[];\n};\n\nconst defaultMessageFormatter = (message: any) => message.data;\nconst COMMON_ID = \"OqdphuyCtYWxwzhxyLLjOWNdFP7sQt8RPWzmb5xY\";\n\nconst TIME_OUT = 1000 * 60 * 2;\nconst CONNECT_LIMIT = 5;\n\nexport class WS extends EventEmitter {\n private _publicSocket!: WebSocket;\n private privateSocket?: WebSocket;\n\n private _eventContainer: Map<string, Set<(message: any) => void>> = new Map();\n\n private publicIsReconnecting: boolean = false;\n private privateIsReconnecting: boolean = false;\n\n private reconnectInterval: number = 1000;\n\n private authenticated: boolean = false;\n\n private _pendingPrivateSubscribe: any[][] = [];\n private _pendingPublicSubscribe: any[][] = [];\n\n // all message handlers\n private _eventHandlers: Map<string, Topics> = new Map();\n private _eventPrivateHandlers: Map<string, Topics> = new Map();\n\n private _publicHeartbeatTime?: number;\n private _privateHeartbeatTime?: number;\n\n private _publicRetryCount: number = 0;\n private _privateRetryCount: number = 0;\n\n constructor(private options: WSOptions) {\n super();\n this.createPublicSC(options);\n\n if (!!options.accountId) {\n this.createPrivateSC(options);\n }\n\n this.bindEvents();\n }\n\n private bindEvents() {\n if (typeof document !== \"undefined\") {\n document.addEventListener?.(\n \"visibilitychange\",\n this.onVisibilityChange.bind(this),\n );\n }\n\n if (typeof window !== \"undefined\") {\n window.addEventListener?.(\n \"online\",\n this.onNetworkStatusChange.bind(this),\n );\n // window.addEventListener?.(\"offline\", (e) => {\n // // console.log(\"👀👀👀👀👀👀👀👀👀\", \"offline\");\n // this.emit(\"offline\", e);\n // });\n }\n }\n\n private onVisibilityChange() {\n if (document.visibilityState === \"visible\") {\n this.checkSocketStatus();\n }\n // else {\n // this.publicSocket.close();\n // this.privateSocket?.close();\n // }\n }\n\n private onNetworkStatusChange() {\n if (navigator.onLine) {\n this.checkSocketStatus();\n }\n }\n\n /**\n * Determine the current connection status,\n * 1. If it is disconnected, reconnect\n * 2. If no message is received for too long, disconnect and reconnect actively\n * 3. When returning from the background and the network status changes, the following process is followed\n */\n private checkSocketStatus() {\n const now = Date.now();\n\n //\n // \"👀👀 checkNetworkStatus 👀👀\",\n // this._publicHeartbeatTime,\n // this._privateHeartbeatTime,\n // now,\n // this.publicSocket.readyState,\n // this.privateSocket?.readyState\n // );\n\n // check the last time\n // If the view is not visible, do not process it\n if (document.visibilityState !== \"visible\") return;\n // If the network is not available, do not process it\n if (!navigator.onLine) return;\n\n // public\n if (!this.publicIsReconnecting) {\n if (this._publicSocket?.readyState === WebSocket.CLOSED) {\n this.reconnectPublic();\n } else {\n if (now - this._publicHeartbeatTime! > TIME_OUT) {\n //unsubscribe all public topic\n this._publicSocket?.close(3888);\n }\n }\n }\n\n if (!this.privateIsReconnecting) {\n // private\n if (this.privateSocket?.readyState === WebSocket.CLOSED) {\n this.reconnectPrivate();\n } else {\n if (\n this._privateHeartbeatTime &&\n now - this._privateHeartbeatTime! > TIME_OUT\n ) {\n // unsubscribe all private topic\n this.privateSocket?.close(3888);\n }\n }\n }\n }\n\n public openPrivate(accountId: string) {\n if (this.privateSocket?.readyState === WebSocket.OPEN) {\n return;\n }\n this.createPrivateSC({\n ...this.options,\n accountId,\n });\n }\n\n public closePrivate(code?: number, reason?: string) {\n if (this.privateSocket?.readyState !== WebSocket.OPEN) {\n return;\n }\n\n this.authenticated = false;\n\n this._pendingPrivateSubscribe = [];\n\n this._eventPrivateHandlers.clear();\n\n this.privateSocket?.close(code, reason);\n }\n\n private createPublicSC(options: WSOptions) {\n if (!options.publicUrl) {\n return;\n }\n\n if (\n this._publicSocket &&\n this._publicSocket.readyState === WebSocket.OPEN\n ) {\n return;\n }\n\n this._publicSocket = new WebSocket(\n `${options.publicUrl}/ws/stream/${COMMON_ID}`,\n );\n this._publicSocket.onopen = this.onOpen.bind(this);\n // this.publicSocket.onmessage = this.onPublicMessage.bind(this);\n this._publicSocket.addEventListener(\n \"message\",\n this.onPublicMessage.bind(this),\n );\n this._publicSocket.addEventListener(\"close\", this.onPublicClose.bind(this));\n this._publicSocket.addEventListener(\"error\", this.onPublicError.bind(this));\n // this.publicSocket.onclose = this.onPublicClose.bind(this);\n // this.publicSocket.onerror = this.onPublicError.bind(this);\n }\n\n private createPrivateSC(options: WSOptions) {\n if (\n this.privateSocket &&\n this.privateSocket.readyState === WebSocket.OPEN\n ) {\n return;\n }\n\n this.options = options;\n\n this.privateSocket = new WebSocket(\n `${this.options.privateUrl}/v2/ws/private/stream/${options.accountId}`,\n );\n this.privateSocket.onopen = this.onPrivateOpen.bind(this);\n this.privateSocket.onmessage = this.onPrivateMessage.bind(this);\n this.privateSocket.onclose = this.onPrivateClose.bind(this);\n this.privateSocket.onerror = this.onPrivateError.bind(this);\n }\n\n private onOpen(event: Event) {\n //\n if (this._pendingPublicSubscribe.length > 0) {\n this._pendingPublicSubscribe.forEach(([params, cb, isOnce]) => {\n this.subscribe(params, cb, isOnce);\n });\n this._pendingPublicSubscribe = [];\n }\n\n this.publicIsReconnecting = false;\n\n this.emit(\"status:change\", {\n type: WebSocketEvent.OPEN,\n isPrivate: false,\n isReconnect: this._publicRetryCount > 0,\n });\n\n this._publicRetryCount = 0;\n }\n\n private onPrivateOpen(event: Event) {\n // auth\n this.authenticate(this.options.accountId!)\n .then(() => {\n this.privateIsReconnecting = false;\n\n this.emit(\"status:change\", {\n type: WebSocketEvent.OPEN,\n isPrivate: true,\n isReconnect: this._privateRetryCount > 0,\n });\n\n this._privateRetryCount = 0;\n })\n .catch((e) => {\n console.log(\"ws authenticate failed\", e);\n });\n }\n\n private onMessage(\n event: MessageEvent,\n socket: WebSocket,\n handlerMap: Map<string, Topics>,\n ) {\n try {\n const message = JSON.parse(event.data);\n\n const commoneHandler = messageHandlers.get(message.event);\n\n if (message.event === \"auth\" && message.success) {\n this.authenticated = true;\n this.handlePendingPrivateTopic();\n return;\n }\n\n if (commoneHandler) {\n commoneHandler.handle(message, socket);\n } else {\n const topicKey = this.getTopicKeyFromMessage(message);\n\n const eventhandler = handlerMap.get(topicKey);\n //\n if (eventhandler?.callback) {\n // console.log(\"👀👀👀👀👀👀👀👀👀\", topicKey, eventhandler?.callback);\n eventhandler.callback.forEach((cb) => {\n const data = cb.formatter\n ? cb.formatter(message)\n : defaultMessageFormatter(message);\n\n if (data) {\n cb.onMessage(data);\n }\n });\n }\n\n // emit event\n this._eventContainer.forEach((_, key) => {\n const reg = new RegExp(key);\n if (reg.test(topicKey)) {\n this.emit(key, message);\n }\n });\n }\n\n //\n } catch (e) {}\n\n // You can process the received message here\n }\n\n private onPublicMessage(event: MessageEvent) {\n this.onMessage(event, this._publicSocket, this._eventHandlers);\n // update last message time for public\n this._publicHeartbeatTime = Date.now();\n }\n\n private onPrivateMessage(event: MessageEvent) {\n this.onMessage(event, this.privateSocket!, this._eventPrivateHandlers);\n // update last message time for private\n this._privateHeartbeatTime = Date.now();\n }\n\n private handlePendingPrivateTopic() {\n if (this._pendingPrivateSubscribe.length > 0) {\n this._pendingPrivateSubscribe.forEach(([params, cb]) => {\n this.privateSubscribe(params, cb);\n });\n this._pendingPrivateSubscribe = [];\n }\n }\n\n private onPublicClose(event: CloseEvent) {\n // move handler to pending\n this._eventHandlers.forEach((value, key) => {\n value.callback.forEach((cb) => {\n this._pendingPublicSubscribe.push([value.params, cb, value.isOnce]);\n });\n\n this._eventHandlers.delete(key);\n });\n\n this.emit(\"status:change\", {\n type: WebSocketEvent.CLOSE,\n isPrivate: false,\n });\n\n setTimeout(() => this.checkSocketStatus(), 0);\n }\n\n private onPrivateClose(event: CloseEvent) {\n if (event.code === 3887) return;\n if (this.privateIsReconnecting) return;\n this._eventPrivateHandlers.forEach((value, key) => {\n value.callback.forEach((cb) => {\n this._pendingPrivateSubscribe.push([value.params, cb, value.isOnce]);\n });\n\n this._eventPrivateHandlers.delete(key);\n });\n this.authenticated = false;\n\n this.emit(\"status:change\", {\n type: WebSocketEvent.CLOSE,\n isPrivate: true,\n event,\n });\n\n setTimeout(() => this.checkSocketStatus(), 0);\n }\n\n private onPublicError(event: Event) {\n console.error(\"public WebSocket error:\", event);\n this.publicIsReconnecting = false;\n\n if (this._publicSocket?.readyState === WebSocket.OPEN) {\n this._publicSocket?.close(3888);\n } else {\n // retry connect\n if (this._publicRetryCount > CONNECT_LIMIT) return;\n setTimeout(() => {\n // this.createPublicSC(this.options);\n this.reconnectPublic();\n // this._publicRetryCount++;\n }, this._publicRetryCount * 1000);\n }\n\n this.errorBoardscast(event, this._eventHandlers);\n this.emit(\"status:change\", {\n type: WebSocketEvent.ERROR,\n isPrivate: false,\n });\n }\n\n private onPrivateError(event: Event) {\n console.error(\"Private WebSocket error:\", event);\n this.privateIsReconnecting = false;\n\n if (this.privateSocket?.readyState === WebSocket.OPEN) {\n this.privateSocket.close(3888);\n } else {\n // retry connect\n if (this._privateRetryCount > CONNECT_LIMIT) return;\n setTimeout(() => {\n // this.createPublicSC(this.options);\n this.reconnectPrivate();\n // this._privateRetryCount++;\n }, this._privateRetryCount * 1000);\n }\n\n this.errorBoardscast(event, this._eventPrivateHandlers);\n this.emit(\"status:change\", { type: WebSocketEvent.ERROR, isPrivate: true });\n }\n\n private errorBoardscast(error: any, eventHandlers: Map<string, Topics>) {\n eventHandlers.forEach((value) => {\n value.callback.forEach((cb) => {\n cb.onError?.(error);\n });\n });\n }\n\n send = (message: any) => {\n if (typeof message !== \"string\") {\n message = JSON.stringify(message);\n }\n if (typeof message === \"undefined\") return;\n if (this._publicSocket?.readyState === WebSocket.OPEN) {\n this._publicSocket?.send(message);\n //\n } else {\n console.warn(\"WebSocket connection is not open. Cannot send message.\");\n }\n };\n\n close() {\n this._publicSocket?.close();\n this.privateSocket?.close();\n }\n\n set accountId(accountId: string) {}\n\n private async authenticate(accountId: string) {\n if (this.authenticated) return;\n if (!this.privateSocket) {\n console.error(\"private ws not connected\");\n return;\n }\n\n if (this.privateSocket.readyState !== WebSocket.OPEN) {\n return;\n }\n\n const message = await this.options.onSigntureRequest?.(accountId);\n\n this.privateSocket.send(\n JSON.stringify({\n id: \"auth\",\n event: \"auth\",\n params: {\n orderly_key: message.publicKey,\n sign: message.signature,\n timestamp: message.timestamp,\n },\n }),\n );\n // this.wsSubject.next({ type: \"authenticate\" });\n // this.authenticated = true;\n }\n\n privateSubscribe(\n params: any,\n callback: WSMessageHandler | Omit<WSMessageHandler, \"onUnsubscribe\">,\n ) {\n const [subscribeMessage, onUnsubscribe] = this.generateMessage(\n params,\n (callback as WSMessageHandler).onUnsubscribe,\n );\n\n if (this.privateSocket?.readyState !== WebSocket.OPEN) {\n this._pendingPrivateSubscribe.push([params, callback]);\n return () => {\n this.unsubscribePrivate(subscribeMessage);\n };\n }\n\n const topic = subscribeMessage.topic || subscribeMessage.event;\n\n const handler = this._eventPrivateHandlers.get(topic);\n const callbacks = {\n ...callback,\n onUnsubscribe,\n };\n\n if (!handler) {\n this._eventPrivateHandlers.set(topic, {\n params,\n callback: [callbacks],\n });\n this.privateSocket.send(JSON.stringify(subscribeMessage));\n } else {\n handler.callback.push(callbacks);\n }\n\n return () => {\n this.unsubscribePrivate(subscribeMessage);\n };\n }\n\n subscribe(\n params: any,\n callback: WSMessageHandler | Omit<WSMessageHandler, \"onUnsubscribe\">,\n once?: boolean,\n id?: string,\n ): unsubscribe | undefined {\n if (!this._publicSocket) {\n return;\n }\n\n const [subscribeMessage, onUnsubscribe] = this.generateMessage(\n params,\n (callback as WSMessageHandler).onUnsubscribe,\n (callback as WSMessageHandler).onMessage,\n );\n\n //\n\n if (this._publicSocket.readyState !== WebSocket.OPEN) {\n this._pendingPublicSubscribe.push([params, callback, once, id]);\n\n if (!once) {\n return () => {\n this.unsubscribePublic(subscribeMessage);\n };\n }\n return;\n }\n\n const topic = this.getTopicKeyFromParams(subscribeMessage);\n // const topic = subscribeMessage.topic || subscribeMessage.event;\n\n const handler = this._eventHandlers.get(topic);\n const callbacks = {\n ...callback,\n onUnsubscribe,\n };\n\n if (!handler) {\n this._eventHandlers.set(topic, {\n params,\n isOnce: once,\n callback: [callbacks],\n });\n this._publicSocket.send(JSON.stringify(subscribeMessage));\n } else {\n if (once) {\n handler.callback = [callbacks];\n this._publicSocket.send(JSON.stringify(subscribeMessage));\n } else {\n handler.callback.push(callbacks);\n }\n }\n\n // this._subscriptionPublicTopics.push({params, cb: [cb]});\n\n if (!once) {\n return () => {\n this.unsubscribePublic(subscribeMessage);\n };\n }\n }\n\n private getTopicKeyFromParams(params: any): string {\n let topic;\n\n if (params.topic) {\n topic = params.topic;\n } else {\n const eventName = params.event;\n topic = params.event;\n\n if (params.id) {\n topic += `_${params.id}`;\n }\n }\n\n return topic;\n }\n\n private getTopicKeyFromMessage(message: any): string {\n let topic;\n if (message.topic) {\n topic = message.topic;\n } else {\n if (message.event) {\n topic = `${message.event}`;\n\n if (message.id) {\n topic += `_${message.id}`;\n }\n }\n }\n\n return topic;\n }\n\n // sendPublicMessage(){\n // if(this.publicSocket.readyState !== )\n // }\n\n onceSubscribe(\n params: any,\n callback: Omit<WSMessageHandler, \"onUnsubscribe\">,\n ) {\n this.subscribe(params, callback, true);\n }\n\n private unsubscribe(\n parmas: MessageParams,\n webSocket: WebSocket,\n handlerMap: Map<string, Topics>,\n ) {\n const topic = parmas.topic || parmas.event;\n const handler = handlerMap.get(topic);\n\n // console.log(\"unsubscribe\", topic);\n\n if (!!handler && Array.isArray(handler?.callback)) {\n if (handler!.callback.length === 1) {\n const unsubscribeMessage = handler!.callback[0].onUnsubscribe(topic);\n\n //\n webSocket.send(JSON.stringify(unsubscribeMessage));\n handlerMap.delete(topic);\n //post unsubscribe message\n } else {\n const index = handler.callback.findIndex(\n (cb) => cb.onMessage === parmas.onMessage,\n );\n\n // console.log(index, handler.callback.length);\n\n if (index === -1) return;\n\n handler.callback.splice(index, 1);\n\n // handlerMap.set(topic, {\n // ...handler,\n // callback: handler.callback.splice(index, 1),\n // });\n }\n }\n }\n\n private unsubscribePrivate(parmas: MessageParams) {\n this.unsubscribe(parmas, this.privateSocket!, this._eventPrivateHandlers);\n }\n\n private unsubscribePublic(parmas: MessageParams) {\n this.unsubscribe(parmas, this._publicSocket, this._eventHandlers);\n }\n\n private generateMessage(\n params: any,\n onUnsubscribe?: (event: string) => any,\n onMessage?: (message: any) => any,\n ): [MessageParams, (event: string) => any] {\n let subscribeMessage;\n\n if (typeof params === \"string\") {\n subscribeMessage = { event: \"subscribe\", topic: params };\n } else {\n subscribeMessage = params;\n }\n\n if (typeof onUnsubscribe !== \"function\") {\n if (typeof params === \"string\") {\n onUnsubscribe = () => ({ event: \"unsubscribe\", topic: params });\n } else {\n onUnsubscribe = () => ({ event: \"unsubscribe\", topic: params.topic });\n }\n }\n\n return [{ ...subscribeMessage, onMessage }, onUnsubscribe];\n }\n\n private reconnectPublic() {\n if (this.publicIsReconnecting) return;\n this.publicIsReconnecting = true;\n\n if (typeof window === \"undefined\") return;\n window.setTimeout(() => {\n this._publicRetryCount++;\n this.createPublicSC(this.options);\n // this.emit(\"reconnect:public\", { count: this._publicRetryCount });\n this.emit(\"status:change\", {\n type: WebSocketEvent.RECONNECTING,\n isPrivate: false,\n count: this._publicRetryCount,\n });\n }, this.reconnectInterval);\n }\n\n private reconnectPrivate() {\n if (!this.options.accountId) return;\n if (this.privateIsReconnecting) return;\n this.privateIsReconnecting = true;\n\n if (typeof window === \"undefined\") return;\n window.setTimeout(() => {\n this._privateRetryCount++;\n this.createPrivateSC(this.options);\n\n this.emit(\"status:change\", {\n type: WebSocketEvent.RECONNECTING,\n isPrivate: true,\n count: this._privateRetryCount,\n });\n }, this.reconnectInterval);\n }\n\n // get publicSocket(): WebSocket {\n // return this._publicSocket;\n // }\n\n get client(): {\n public: WebSocket;\n private?: WebSocket;\n } {\n return {\n public: this._publicSocket,\n private: this.privateSocket,\n };\n }\n}\n","import { MessageHandler } from \"../../types/ws\";\n\nexport default class BaseHandler implements MessageHandler {\n handle(message: any, webSocket: WebSocket) {\n throw new Error(\"Method not implemented.\");\n }\n}\n","import BaseHandler from \"./baseHandler\";\n\nexport default class PingHandler extends BaseHandler {\n handle(_: any, webSocket: WebSocket) {\n webSocket.send(JSON.stringify({ event: \"pong\", ts: Date.now() }));\n }\n}\n","import { MessageHandler } from \"../../types/ws\";\nimport PingHandler from \"./ping\";\n\nexport type MessageType =\n | \"ping\"\n | \"pong\"\n | \"subscribe\"\n | \"unsubscribe\"\n | \"authenticate\"\n | \"message\"\n | \"error\"\n | \"auth\"\n | \"close\";\n\nexport const messageHandlers = new Map<MessageType, MessageHandler>([\n [\"ping\", new PingHandler()],\n]);\n"],"mappings":"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","names":["WebSocketEvent"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kodiak-finance/orderly-net",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.8.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"tsup": "^7.1.0",
|
|
21
21
|
"typedoc": "^0.26.5",
|
|
22
22
|
"typescript": "^5.1.6",
|
|
23
|
-
"tsconfig": "0.
|
|
23
|
+
"tsconfig": "0.11.0"
|
|
24
24
|
},
|
|
25
25
|
"publishConfig": {
|
|
26
26
|
"access": "public"
|