@orderly.network/net 1.0.71 → 1.0.73
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/.turbo/turbo-build.log +8 -8
- package/CHANGELOG.md +12 -0
- package/dist/index.js +11 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +11 -4
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/ws/ws.ts +16 -4
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @orderly.network/net@1.0.
|
|
2
|
+
> @orderly.network/net@1.0.72 build /Users/leo/orderly/orderly-web/packages/net
|
|
3
3
|
> tsup
|
|
4
4
|
|
|
5
5
|
CLI Building entry: src/index.ts
|
|
@@ -10,13 +10,13 @@ CLI Target: es6
|
|
|
10
10
|
CLI Cleaning output folder
|
|
11
11
|
CJS Build start
|
|
12
12
|
ESM Build start
|
|
13
|
-
ESM dist/index.mjs 17.
|
|
14
|
-
ESM dist/index.mjs.map 30.
|
|
15
|
-
ESM ⚡️ Build success in
|
|
16
|
-
CJS dist/index.js 18.
|
|
17
|
-
CJS dist/index.js.map
|
|
18
|
-
CJS ⚡️ Build success in
|
|
13
|
+
ESM dist/index.mjs 17.53 KB
|
|
14
|
+
ESM dist/index.mjs.map 30.95 KB
|
|
15
|
+
ESM ⚡️ Build success in 13ms
|
|
16
|
+
CJS dist/index.js 18.58 KB
|
|
17
|
+
CJS dist/index.js.map 31.19 KB
|
|
18
|
+
CJS ⚡️ Build success in 13ms
|
|
19
19
|
DTS Build start
|
|
20
|
-
DTS ⚡️ Build success in
|
|
20
|
+
DTS ⚡️ Build success in 733ms
|
|
21
21
|
DTS dist/index.d.ts 2.89 KB
|
|
22
22
|
DTS dist/index.d.mts 2.89 KB
|
package/CHANGELOG.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -478,7 +478,8 @@ var WS = class {
|
|
|
478
478
|
subscribe(params, callback, once) {
|
|
479
479
|
const [subscribeMessage, onUnsubscribe] = this.generateMessage(
|
|
480
480
|
params,
|
|
481
|
-
callback.onUnsubscribe
|
|
481
|
+
callback.onUnsubscribe,
|
|
482
|
+
callback.onMessage
|
|
482
483
|
);
|
|
483
484
|
if (this.publicSocket.readyState !== WebSocket.OPEN) {
|
|
484
485
|
this._pendingPublicSubscribe.push([params, callback, once]);
|
|
@@ -557,8 +558,14 @@ var WS = class {
|
|
|
557
558
|
webSocket.send(JSON.stringify(unsubscribeMessage));
|
|
558
559
|
handlerMap.delete(topic);
|
|
559
560
|
} else {
|
|
561
|
+
const index = handler.callback.findIndex(
|
|
562
|
+
(cb) => cb.onMessage === parmas.onMessage
|
|
563
|
+
);
|
|
564
|
+
console.log(index, handler.callback.length);
|
|
565
|
+
if (index === -1)
|
|
566
|
+
return;
|
|
560
567
|
handlerMap.set(topic, __spreadProps(__spreadValues({}, handler), {
|
|
561
|
-
callback: handler.callback.slice(0,
|
|
568
|
+
callback: handler.callback.slice(index != null ? index : 0, 1)
|
|
562
569
|
}));
|
|
563
570
|
}
|
|
564
571
|
}
|
|
@@ -569,7 +576,7 @@ var WS = class {
|
|
|
569
576
|
unsubscribePublic(parmas) {
|
|
570
577
|
this.unsubscribe(parmas, this.publicSocket, this._eventHandlers);
|
|
571
578
|
}
|
|
572
|
-
generateMessage(params, onUnsubscribe) {
|
|
579
|
+
generateMessage(params, onUnsubscribe, onMessage) {
|
|
573
580
|
let subscribeMessage;
|
|
574
581
|
if (typeof params === "string") {
|
|
575
582
|
subscribeMessage = { event: "subscribe", topic: params };
|
|
@@ -583,7 +590,7 @@ var WS = class {
|
|
|
583
590
|
onUnsubscribe = () => ({ event: "unsubscribe", topic: params.topic });
|
|
584
591
|
}
|
|
585
592
|
}
|
|
586
|
-
return [subscribeMessage, onUnsubscribe];
|
|
593
|
+
return [__spreadProps(__spreadValues({}, subscribeMessage), { onMessage }), onUnsubscribe];
|
|
587
594
|
}
|
|
588
595
|
reconnectPublic() {
|
|
589
596
|
if (this.publicIsReconnecting)
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/fetch/index.ts","../src/constants.ts","../src/ws/handler/baseHandler.ts","../src/ws/handler/ping.ts","../src/ws/handler/handler.ts","../src/ws/ws.ts"],"sourcesContent":["export { get, post, del, put, mutate } from \"./fetch\";\n\nexport { __ORDERLY_API_URL_KEY__ } from \"./constants\";\n\nexport { WS } from \"./ws/ws\";\n","async 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(urlInstance, {\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 }\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 // 根据返回的数据结构,返回需要的数据\n if (Array.isArray(res.data[\"rows\"])) {\n return res.data[\"rows\"] 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 };\n","export const __ORDERLY_API_URL_KEY__: string = \"__ORDERLY_API_URL__\";\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","import { 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 type MessageParams = {\n event: string;\n topic: string;\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 {\n private publicSocket!: WebSocket;\n private privateSocket?: WebSocket;\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 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(\"online\", this.onNetworkStatusChange.bind(this));\n // window.addEventListener(\"offline\", this.onNetworkStatusChange);\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 * 判断当前连接状态,\n * 1、如果已断开则重连\n * 2、如果太久没有收到消息,则主动断开,并重连\n * 3、从后台返回、网络状态变化时,都走以下流程\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 // 如果容器不可见,则不做处理\n if (document.visibilityState !== \"visible\") return;\n // 如果网络不可用,则不做处理\n if (!navigator.onLine) return;\n\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();\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();\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() {\n this.authenticated = false;\n this._pendingPrivateSubscribe = [];\n\n this._eventPrivateHandlers.clear();\n\n this.privateSocket?.close();\n }\n\n private createPublicSC(options: WSOptions) {\n if (this.publicSocket && this.publicSocket.readyState === WebSocket.OPEN)\n return;\n this.publicSocket = new WebSocket(\n `${this.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.onclose = this.onPublicClose.bind(this);\n this.publicSocket.onerror = this.onPublicError.bind(this);\n }\n\n private createPrivateSC(options: WSOptions) {\n if (this.privateSocket && this.privateSocket.readyState === WebSocket.OPEN)\n return;\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 this._publicRetryCount = 0;\n }\n\n private onPrivateOpen(event: Event) {\n //auth\n this.authenticate(this.options.accountId!);\n this.privateIsReconnecting = false;\n this._privateRetryCount = 0;\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 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 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 // if (eventhandler.isOnce) {\n // handlerMap.delete(topicKey);\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 // 更新最后收到消息的时间\n this._publicHeartbeatTime = Date.now();\n }\n\n private onPrivateMessage(event: MessageEvent) {\n this.onMessage(event, this.privateSocket!, this._eventPrivateHandlers);\n // 更新最后收到消息的时间\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 setTimeout(() => this.checkSocketStatus(), 0);\n }\n\n private onPrivateClose(event: CloseEvent) {\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 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();\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 }\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();\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 }\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 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 } else {\n handler.callback.push(callbacks);\n }\n\n this.privateSocket.send(JSON.stringify(subscribeMessage));\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 ): unsubscribe | undefined {\n //\n\n const [subscribeMessage, onUnsubscribe] = this.generateMessage(\n params,\n (callback as WSMessageHandler).onUnsubscribe\n );\n\n //\n\n if (this.publicSocket.readyState !== WebSocket.OPEN) {\n this._pendingPublicSubscribe.push([params, callback, once]);\n\n if (!once) {\n return () => {\n this.unsubscribePublic(subscribeMessage);\n };\n }\n return;\n }\n\n let 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 // 是否once,如果是once,则替换掉之前的callback\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 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 handlerMap.set(topic, {\n ...handler,\n callback: handler.callback.slice(0, -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 ): [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, onUnsubscribe];\n }\n\n private reconnectPublic() {\n if (this.publicIsReconnecting) return;\n this.publicIsReconnecting = true;\n\n window.setTimeout(() => {\n this.createPublicSC(this.options);\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 window.setTimeout(() => {\n this.createPrivateSC(this.options);\n }, this.reconnectInterval);\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/fetch/index.ts","../src/constants.ts","../src/ws/handler/baseHandler.ts","../src/ws/handler/ping.ts","../src/ws/handler/handler.ts","../src/ws/ws.ts"],"sourcesContent":["export { get, post, del, put, mutate } from \"./fetch\";\n\nexport { __ORDERLY_API_URL_KEY__ } from \"./constants\";\n\nexport { WS } from \"./ws/ws\";\n","async 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(urlInstance, {\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 }\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 // 根据返回的数据结构,返回需要的数据\n if (Array.isArray(res.data[\"rows\"])) {\n return res.data[\"rows\"] 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 };\n","export const __ORDERLY_API_URL_KEY__: string = \"__ORDERLY_API_URL__\";\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","import { 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 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 {\n private publicSocket!: WebSocket;\n private privateSocket?: WebSocket;\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 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(\"online\", this.onNetworkStatusChange.bind(this));\n // window.addEventListener(\"offline\", this.onNetworkStatusChange);\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 * 判断当前连接状态,\n * 1、如果已断开则重连\n * 2、如果太久没有收到消息,则主动断开,并重连\n * 3、从后台返回、网络状态变化时,都走以下流程\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 // 如果容器不可见,则不做处理\n if (document.visibilityState !== \"visible\") return;\n // 如果网络不可用,则不做处理\n if (!navigator.onLine) return;\n\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();\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();\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() {\n this.authenticated = false;\n this._pendingPrivateSubscribe = [];\n\n this._eventPrivateHandlers.clear();\n\n this.privateSocket?.close();\n }\n\n private createPublicSC(options: WSOptions) {\n if (this.publicSocket && this.publicSocket.readyState === WebSocket.OPEN)\n return;\n this.publicSocket = new WebSocket(\n `${this.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.onclose = this.onPublicClose.bind(this);\n this.publicSocket.onerror = this.onPublicError.bind(this);\n }\n\n private createPrivateSC(options: WSOptions) {\n if (this.privateSocket && this.privateSocket.readyState === WebSocket.OPEN)\n return;\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 this._publicRetryCount = 0;\n }\n\n private onPrivateOpen(event: Event) {\n //auth\n this.authenticate(this.options.accountId!);\n this.privateIsReconnecting = false;\n this._privateRetryCount = 0;\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 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 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 // if (eventhandler.isOnce) {\n // handlerMap.delete(topicKey);\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 // 更新最后收到消息的时间\n this._publicHeartbeatTime = Date.now();\n }\n\n private onPrivateMessage(event: MessageEvent) {\n this.onMessage(event, this.privateSocket!, this._eventPrivateHandlers);\n // 更新最后收到消息的时间\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 setTimeout(() => this.checkSocketStatus(), 0);\n }\n\n private onPrivateClose(event: CloseEvent) {\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 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();\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 }\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();\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 }\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 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 } else {\n handler.callback.push(callbacks);\n }\n\n this.privateSocket.send(JSON.stringify(subscribeMessage));\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 ): unsubscribe | undefined {\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]);\n\n if (!once) {\n return () => {\n this.unsubscribePublic(subscribeMessage);\n };\n }\n return;\n }\n\n let 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 // 是否once,如果是once,则替换掉之前的callback\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 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 handlerMap.set(topic, {\n ...handler,\n callback: handler.callback.slice(index ?? 0, 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 window.setTimeout(() => {\n this.createPublicSC(this.options);\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 window.setTimeout(() => {\n this.createPrivateSC(this.options);\n }, this.reconnectInterval);\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.mjs
CHANGED
|
@@ -449,7 +449,8 @@ var WS = class {
|
|
|
449
449
|
subscribe(params, callback, once) {
|
|
450
450
|
const [subscribeMessage, onUnsubscribe] = this.generateMessage(
|
|
451
451
|
params,
|
|
452
|
-
callback.onUnsubscribe
|
|
452
|
+
callback.onUnsubscribe,
|
|
453
|
+
callback.onMessage
|
|
453
454
|
);
|
|
454
455
|
if (this.publicSocket.readyState !== WebSocket.OPEN) {
|
|
455
456
|
this._pendingPublicSubscribe.push([params, callback, once]);
|
|
@@ -528,8 +529,14 @@ var WS = class {
|
|
|
528
529
|
webSocket.send(JSON.stringify(unsubscribeMessage));
|
|
529
530
|
handlerMap.delete(topic);
|
|
530
531
|
} else {
|
|
532
|
+
const index = handler.callback.findIndex(
|
|
533
|
+
(cb) => cb.onMessage === parmas.onMessage
|
|
534
|
+
);
|
|
535
|
+
console.log(index, handler.callback.length);
|
|
536
|
+
if (index === -1)
|
|
537
|
+
return;
|
|
531
538
|
handlerMap.set(topic, __spreadProps(__spreadValues({}, handler), {
|
|
532
|
-
callback: handler.callback.slice(0,
|
|
539
|
+
callback: handler.callback.slice(index != null ? index : 0, 1)
|
|
533
540
|
}));
|
|
534
541
|
}
|
|
535
542
|
}
|
|
@@ -540,7 +547,7 @@ var WS = class {
|
|
|
540
547
|
unsubscribePublic(parmas) {
|
|
541
548
|
this.unsubscribe(parmas, this.publicSocket, this._eventHandlers);
|
|
542
549
|
}
|
|
543
|
-
generateMessage(params, onUnsubscribe) {
|
|
550
|
+
generateMessage(params, onUnsubscribe, onMessage) {
|
|
544
551
|
let subscribeMessage;
|
|
545
552
|
if (typeof params === "string") {
|
|
546
553
|
subscribeMessage = { event: "subscribe", topic: params };
|
|
@@ -554,7 +561,7 @@ var WS = class {
|
|
|
554
561
|
onUnsubscribe = () => ({ event: "unsubscribe", topic: params.topic });
|
|
555
562
|
}
|
|
556
563
|
}
|
|
557
|
-
return [subscribeMessage, onUnsubscribe];
|
|
564
|
+
return [__spreadProps(__spreadValues({}, subscribeMessage), { onMessage }), onUnsubscribe];
|
|
558
565
|
}
|
|
559
566
|
reconnectPublic() {
|
|
560
567
|
if (this.publicIsReconnecting)
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/fetch/index.ts","../src/constants.ts","../src/ws/handler/baseHandler.ts","../src/ws/handler/ping.ts","../src/ws/handler/handler.ts","../src/ws/ws.ts"],"sourcesContent":["async 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(urlInstance, {\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 }\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 // 根据返回的数据结构,返回需要的数据\n if (Array.isArray(res.data[\"rows\"])) {\n return res.data[\"rows\"] 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 };\n","export const __ORDERLY_API_URL_KEY__: string = \"__ORDERLY_API_URL__\";\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","import { 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 type MessageParams = {\n event: string;\n topic: string;\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 {\n private publicSocket!: WebSocket;\n private privateSocket?: WebSocket;\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 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(\"online\", this.onNetworkStatusChange.bind(this));\n // window.addEventListener(\"offline\", this.onNetworkStatusChange);\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 * 判断当前连接状态,\n * 1、如果已断开则重连\n * 2、如果太久没有收到消息,则主动断开,并重连\n * 3、从后台返回、网络状态变化时,都走以下流程\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 // 如果容器不可见,则不做处理\n if (document.visibilityState !== \"visible\") return;\n // 如果网络不可用,则不做处理\n if (!navigator.onLine) return;\n\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();\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();\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() {\n this.authenticated = false;\n this._pendingPrivateSubscribe = [];\n\n this._eventPrivateHandlers.clear();\n\n this.privateSocket?.close();\n }\n\n private createPublicSC(options: WSOptions) {\n if (this.publicSocket && this.publicSocket.readyState === WebSocket.OPEN)\n return;\n this.publicSocket = new WebSocket(\n `${this.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.onclose = this.onPublicClose.bind(this);\n this.publicSocket.onerror = this.onPublicError.bind(this);\n }\n\n private createPrivateSC(options: WSOptions) {\n if (this.privateSocket && this.privateSocket.readyState === WebSocket.OPEN)\n return;\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 this._publicRetryCount = 0;\n }\n\n private onPrivateOpen(event: Event) {\n //auth\n this.authenticate(this.options.accountId!);\n this.privateIsReconnecting = false;\n this._privateRetryCount = 0;\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 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 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 // if (eventhandler.isOnce) {\n // handlerMap.delete(topicKey);\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 // 更新最后收到消息的时间\n this._publicHeartbeatTime = Date.now();\n }\n\n private onPrivateMessage(event: MessageEvent) {\n this.onMessage(event, this.privateSocket!, this._eventPrivateHandlers);\n // 更新最后收到消息的时间\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 setTimeout(() => this.checkSocketStatus(), 0);\n }\n\n private onPrivateClose(event: CloseEvent) {\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 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();\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 }\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();\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 }\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 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 } else {\n handler.callback.push(callbacks);\n }\n\n this.privateSocket.send(JSON.stringify(subscribeMessage));\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 ): unsubscribe | undefined {\n //\n\n const [subscribeMessage, onUnsubscribe] = this.generateMessage(\n params,\n (callback as WSMessageHandler).onUnsubscribe\n );\n\n //\n\n if (this.publicSocket.readyState !== WebSocket.OPEN) {\n this._pendingPublicSubscribe.push([params, callback, once]);\n\n if (!once) {\n return () => {\n this.unsubscribePublic(subscribeMessage);\n };\n }\n return;\n }\n\n let 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 // 是否once,如果是once,则替换掉之前的callback\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 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 handlerMap.set(topic, {\n ...handler,\n callback: handler.callback.slice(0, -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 ): [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, onUnsubscribe];\n }\n\n private reconnectPublic() {\n if (this.publicIsReconnecting) return;\n this.publicIsReconnecting = true;\n\n window.setTimeout(() => {\n this.createPublicSC(this.options);\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 window.setTimeout(() => {\n this.createPrivateSC(this.options);\n }, this.reconnectInterval);\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/fetch/index.ts","../src/constants.ts","../src/ws/handler/baseHandler.ts","../src/ws/handler/ping.ts","../src/ws/handler/handler.ts","../src/ws/ws.ts"],"sourcesContent":["async 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(urlInstance, {\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 }\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 // 根据返回的数据结构,返回需要的数据\n if (Array.isArray(res.data[\"rows\"])) {\n return res.data[\"rows\"] 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 };\n","export const __ORDERLY_API_URL_KEY__: string = \"__ORDERLY_API_URL__\";\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","import { 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 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 {\n private publicSocket!: WebSocket;\n private privateSocket?: WebSocket;\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 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(\"online\", this.onNetworkStatusChange.bind(this));\n // window.addEventListener(\"offline\", this.onNetworkStatusChange);\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 * 判断当前连接状态,\n * 1、如果已断开则重连\n * 2、如果太久没有收到消息,则主动断开,并重连\n * 3、从后台返回、网络状态变化时,都走以下流程\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 // 如果容器不可见,则不做处理\n if (document.visibilityState !== \"visible\") return;\n // 如果网络不可用,则不做处理\n if (!navigator.onLine) return;\n\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();\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();\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() {\n this.authenticated = false;\n this._pendingPrivateSubscribe = [];\n\n this._eventPrivateHandlers.clear();\n\n this.privateSocket?.close();\n }\n\n private createPublicSC(options: WSOptions) {\n if (this.publicSocket && this.publicSocket.readyState === WebSocket.OPEN)\n return;\n this.publicSocket = new WebSocket(\n `${this.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.onclose = this.onPublicClose.bind(this);\n this.publicSocket.onerror = this.onPublicError.bind(this);\n }\n\n private createPrivateSC(options: WSOptions) {\n if (this.privateSocket && this.privateSocket.readyState === WebSocket.OPEN)\n return;\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 this._publicRetryCount = 0;\n }\n\n private onPrivateOpen(event: Event) {\n //auth\n this.authenticate(this.options.accountId!);\n this.privateIsReconnecting = false;\n this._privateRetryCount = 0;\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 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 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 // if (eventhandler.isOnce) {\n // handlerMap.delete(topicKey);\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 // 更新最后收到消息的时间\n this._publicHeartbeatTime = Date.now();\n }\n\n private onPrivateMessage(event: MessageEvent) {\n this.onMessage(event, this.privateSocket!, this._eventPrivateHandlers);\n // 更新最后收到消息的时间\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 setTimeout(() => this.checkSocketStatus(), 0);\n }\n\n private onPrivateClose(event: CloseEvent) {\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 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();\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 }\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();\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 }\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 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 } else {\n handler.callback.push(callbacks);\n }\n\n this.privateSocket.send(JSON.stringify(subscribeMessage));\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 ): unsubscribe | undefined {\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]);\n\n if (!once) {\n return () => {\n this.unsubscribePublic(subscribeMessage);\n };\n }\n return;\n }\n\n let 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 // 是否once,如果是once,则替换掉之前的callback\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 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 handlerMap.set(topic, {\n ...handler,\n callback: handler.callback.slice(index ?? 0, 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 window.setTimeout(() => {\n this.createPublicSC(this.options);\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 window.setTimeout(() => {\n this.createPrivateSC(this.options);\n }, this.reconnectInterval);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAe,QAAQ,KAAa,SAAsB;AAAA;AAExD,QAAI,CAAC,IAAI,WAAW,MAAM,GAAG;AAC3B,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AACA,UAAM,cAAc,IAAI,IAAI,GAAG;AAC/B,UAAM,WAAW,MAAM,MAAM,aAAa,iCACrC,UADqC;AAAA;AAAA;AAAA,MAIxC,SAAS,eAAe,QAAQ,SAAS,QAAQ,MAAM;AAAA,IACzD,EAAC;AAED,QAAI,SAAS,IAAI;AACf,YAAM,MAAM,MAAM,SAAS,KAAK;AAChC,aAAO;AAAA,IAMT;AAEA,UAAM,IAAI,MAAM,SAAS,UAAU;AAAA,EACrC;AAAA;AAEA,SAAS,eACP,UAAuB,CAAC,GACxB,QACa;AAEb,QAAM,WAAW,IAAI,QAAQ,OAAO;AAGpC,MAAI,CAAC,SAAS,IAAI,cAAc,GAAG;AACjC,QAAI,WAAW,UAAU;AACvB,eAAS,OAAO,gBAAgB,gCAAgC;AAAA,IAClE,OAAO;AACL,eAAS,OAAO,gBAAgB,mCAAmC;AAAA,IACrE;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAe,IACb,KACA,SACA,WACY;AAAA;AACZ,UAAM,MAAM,MAAM,QAAQ,KAAK;AAAA,MAC7B,QAAQ;AAAA,OACL,QACJ;AAED,QAAI,IAAI,SAAS;AACf,UAAI,OAAO,cAAc,YAAY;AACnC,eAAO,UAAU,IAAI,IAAI;AAAA,MAC3B;AAEA,UAAI,MAAM,QAAQ,IAAI,KAAK,MAAM,CAAC,GAAG;AACnC,eAAO,IAAI,KAAK,MAAM;AAAA,MACxB;AACA,aAAO,IAAI;AAAA,IACb;AACA,UAAM,IAAI,MAAM,IAAI,OAAO;AAAA,EAC7B;AAAA;AACA,SAAe,KACb,KACA,MACA,SACc;AAAA;AACd,UAAM,MAAM,MAAM,QAAQ,KAAK;AAAA,MAC7B,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU,IAAI;AAAA,OACtB,QACJ;AAED,WAAO;AAAA,EACT;AAAA;AAEA,SAAe,IACb,KACA,MACA,SACc;AAAA;AACd,UAAM,MAAM,MAAM,QAAQ,KAAK;AAAA,MAC7B,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU,IAAI;AAAA,OACtB,QACJ;AAED,WAAO;AAAA,EACT;AAAA;AAEA,SAAe,IACb,KACA,SACc;AAAA;AACd,UAAM,MAAM,MAAM,QAAQ,KAAK;AAAA,MAC7B,QAAQ;AAAA,OACL,QACJ;AAED,WAAO;AAAA,EACT;AAAA;AAEA,SAAe,OAAO,KAAa,MAAmB;AAAA;AACpD,UAAM,MAAM,MAAM,QAAQ,KAAK,IAAI;AAEnC,WAAO;AAAA,EACT;AAAA;;;AC/GO,IAAM,0BAAkC;;;ACE/C,IAAqB,cAArB,MAA2D;AAAA,EACzD,OAAO,SAAc,WAAsB;AACzC,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AACF;;;ACJA,IAAqB,cAArB,cAAyC,YAAY;AAAA,EACnD,OAAO,GAAQ,WAAsB;AACnC,cAAU,KAAK,KAAK,UAAU,EAAE,OAAO,QAAQ,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;AAAA,EAClE;AACF;;;ACQO,IAAM,kBAAkB,oBAAI,IAAiC;AAAA,EAClE,CAAC,QAAQ,IAAI,YAAY,CAAC;AAC5B,CAAC;;;ACwBD,IAAM,0BAA0B,CAAC,YAAiB,QAAQ;AAC1D,IAAM,YAAY;AAElB,IAAM,WAAW,MAAO,KAAK;AAC7B,IAAM,gBAAgB;AAEf,IAAM,KAAN,MAAS;AAAA,EAwBd,YAAoB,SAAoB;AAApB;AApBpB,SAAQ,uBAAgC;AACxC,SAAQ,wBAAiC;AAEzC,SAAQ,oBAA4B;AAEpC,SAAQ,gBAAyB;AAEjC,SAAQ,2BAAoC,CAAC;AAC7C,SAAQ,0BAAmC,CAAC;AAG5C;AAAA,SAAQ,iBAAsC,oBAAI,IAAI;AACtD,SAAQ,wBAA6C,oBAAI,IAAI;AAK7D,SAAQ,oBAA4B;AACpC,SAAQ,qBAA6B;AA6SrC,gBAAO,CAAC,YAAiB;AACvB,UAAI,OAAO,YAAY,UAAU;AAC/B,kBAAU,KAAK,UAAU,OAAO;AAAA,MAClC;AACA,UAAI,OAAO,YAAY;AAAa;AACpC,UAAI,KAAK,aAAa,eAAe,UAAU,MAAM;AACnD,aAAK,aAAa,KAAK,OAAO;AAAA,MAEhC,OAAO;AACL,gBAAQ,KAAK,wDAAwD;AAAA,MACvE;AAAA,IACF;AArTE,SAAK,eAAe,OAAO;AAE3B,QAAI,CAAC,CAAC,QAAQ,WAAW;AACvB,WAAK,gBAAgB,OAAO;AAAA,IAC9B;AAEA,SAAK,WAAW;AAAA,EAClB;AAAA,EAEQ,aAAa;AACnB,QAAI,OAAO,aAAa,aAAa;AACnC,eAAS;AAAA,QACP;AAAA,QACA,KAAK,mBAAmB,KAAK,IAAI;AAAA,MACnC;AAAA,IACF;AAEA,QAAI,OAAO,WAAW,aAAa;AACjC,aAAO,iBAAiB,UAAU,KAAK,sBAAsB,KAAK,IAAI,CAAC;AAAA,IAEzE;AAAA,EACF;AAAA,EAEQ,qBAAqB;AAC3B,QAAI,SAAS,oBAAoB,WAAW;AAC1C,WAAK,kBAAkB;AAAA,IACzB;AAAA,EAKF;AAAA,EAEQ,wBAAwB;AAC9B,QAAI,UAAU,QAAQ;AACpB,WAAK,kBAAkB;AAAA,IACzB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,oBAAoB;AApH9B;AAqHI,UAAM,MAAM,KAAK,IAAI;AAarB,QAAI,SAAS,oBAAoB;AAAW;AAE5C,QAAI,CAAC,UAAU;AAAQ;AAIvB,QAAI,CAAC,KAAK,sBAAsB;AAC9B,UAAI,KAAK,aAAa,eAAe,UAAU,QAAQ;AACrD,aAAK,gBAAgB;AAAA,MACvB,OAAO;AACL,YAAI,MAAM,KAAK,uBAAwB,UAAU;AAE/C,eAAK,aAAa,MAAM;AAAA,QAC1B;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,KAAK,uBAAuB;AAE/B,YAAI,UAAK,kBAAL,mBAAoB,gBAAe,UAAU,QAAQ;AACvD,aAAK,iBAAiB;AAAA,MACxB,OAAO;AACL,YACE,KAAK,yBACL,MAAM,KAAK,wBAAyB,UACpC;AAEA,qBAAK,kBAAL,mBAAoB;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEO,YAAY,WAAmB;AAnKxC;AAoKI,UAAI,UAAK,kBAAL,mBAAoB,gBAAe,UAAU,MAAM;AACrD;AAAA,IACF;AACA,SAAK,gBAAgB,iCAChB,KAAK,UADW;AAAA,MAEnB;AAAA,IACF,EAAC;AAAA,EACH;AAAA,EAEO,eAAe;AA7KxB;AA8KI,SAAK,gBAAgB;AACrB,SAAK,2BAA2B,CAAC;AAEjC,SAAK,sBAAsB,MAAM;AAEjC,eAAK,kBAAL,mBAAoB;AAAA,EACtB;AAAA,EAEQ,eAAe,SAAoB;AACzC,QAAI,KAAK,gBAAgB,KAAK,aAAa,eAAe,UAAU;AAClE;AACF,SAAK,eAAe,IAAI;AAAA,MACtB,GAAG,KAAK,QAAQ,SAAS,cAAc,SAAS;AAAA,IAClD;AACA,SAAK,aAAa,SAAS,KAAK,OAAO,KAAK,IAAI;AAChD,SAAK,aAAa,YAAY,KAAK,gBAAgB,KAAK,IAAI;AAC5D,SAAK,aAAa,UAAU,KAAK,cAAc,KAAK,IAAI;AACxD,SAAK,aAAa,UAAU,KAAK,cAAc,KAAK,IAAI;AAAA,EAC1D;AAAA,EAEQ,gBAAgB,SAAoB;AAC1C,QAAI,KAAK,iBAAiB,KAAK,cAAc,eAAe,UAAU;AACpE;AAEF,SAAK,UAAU;AAEf,SAAK,gBAAgB,IAAI;AAAA,MACvB,GAAG,KAAK,QAAQ,UAAU,yBAAyB,QAAQ,SAAS;AAAA,IACtE;AACA,SAAK,cAAc,SAAS,KAAK,cAAc,KAAK,IAAI;AACxD,SAAK,cAAc,YAAY,KAAK,iBAAiB,KAAK,IAAI;AAC9D,SAAK,cAAc,UAAU,KAAK,eAAe,KAAK,IAAI;AAC1D,SAAK,cAAc,UAAU,KAAK,eAAe,KAAK,IAAI;AAAA,EAC5D;AAAA,EAEQ,OAAO,OAAc;AAE3B,QAAI,KAAK,wBAAwB,SAAS,GAAG;AAC3C,WAAK,wBAAwB,QAAQ,CAAC,CAAC,QAAQ,IAAI,MAAM,MAAM;AAC7D,aAAK,UAAU,QAAQ,IAAI,MAAM;AAAA,MACnC,CAAC;AACD,WAAK,0BAA0B,CAAC;AAAA,IAClC;AAEA,SAAK,uBAAuB;AAC5B,SAAK,oBAAoB;AAAA,EAC3B;AAAA,EAEQ,cAAc,OAAc;AAElC,SAAK,aAAa,KAAK,QAAQ,SAAU;AACzC,SAAK,wBAAwB;AAC7B,SAAK,qBAAqB;AAAA,EAC5B;AAAA,EAEQ,UACN,OACA,QACA,YACA;AACA,QAAI;AACF,YAAM,UAAU,KAAK,MAAM,MAAM,IAAI;AACrC,YAAM,iBAAiB,gBAAgB,IAAI,QAAQ,KAAK;AAExD,UAAI,QAAQ,UAAU,UAAU,QAAQ,SAAS;AAC/C,aAAK,gBAAgB;AACrB,aAAK,0BAA0B;AAC/B;AAAA,MACF;AAEA,UAAI,gBAAgB;AAClB,uBAAe,OAAO,SAAS,MAAM;AAAA,MACvC,OAAO;AACL,cAAM,WAAW,KAAK,uBAAuB,OAAO;AAEpD,cAAM,eAAe,WAAW,IAAI,QAAQ;AAE5C,YAAI,6CAAc,UAAU;AAC1B,uBAAa,SAAS,QAAQ,CAAC,OAAO;AACpC,kBAAM,OAAO,GAAG,YACZ,GAAG,UAAU,OAAO,IACpB,wBAAwB,OAAO;AAEnC,gBAAI,MAAM;AACR,iBAAG,UAAU,IAAI;AAAA,YACnB;AAAA,UACF,CAAC;AAAA,QAMH;AAAA,MACF;AAAA,IAGF,SAAS,GAAG;AAAA,IAAC;AAAA,EAGf;AAAA,EAEQ,gBAAgB,OAAqB;AAC3C,SAAK,UAAU,OAAO,KAAK,cAAc,KAAK,cAAc;AAE5D,SAAK,uBAAuB,KAAK,IAAI;AAAA,EACvC;AAAA,EAEQ,iBAAiB,OAAqB;AAC5C,SAAK,UAAU,OAAO,KAAK,eAAgB,KAAK,qBAAqB;AAErE,SAAK,wBAAwB,KAAK,IAAI;AAAA,EACxC;AAAA,EAEQ,4BAA4B;AAClC,QAAI,KAAK,yBAAyB,SAAS,GAAG;AAC5C,WAAK,yBAAyB,QAAQ,CAAC,CAAC,QAAQ,EAAE,MAAM;AACtD,aAAK,iBAAiB,QAAQ,EAAE;AAAA,MAClC,CAAC;AACD,WAAK,2BAA2B,CAAC;AAAA,IACnC;AAAA,EACF;AAAA,EAEQ,cAAc,OAAmB;AAEvC,SAAK,eAAe,QAAQ,CAAC,OAAO,QAAQ;AAC1C,YAAM,SAAS,QAAQ,CAAC,OAAO;AAC7B,aAAK,wBAAwB,KAAK,CAAC,MAAM,QAAQ,IAAI,MAAM,MAAM,CAAC;AAAA,MACpE,CAAC;AAED,WAAK,eAAe,OAAO,GAAG;AAAA,IAChC,CAAC;AAED,eAAW,MAAM,KAAK,kBAAkB,GAAG,CAAC;AAAA,EAC9C;AAAA,EAEQ,eAAe,OAAmB;AACxC,QAAI,KAAK;AAAuB;AAChC,SAAK,sBAAsB,QAAQ,CAAC,OAAO,QAAQ;AACjD,YAAM,SAAS,QAAQ,CAAC,OAAO;AAC7B,aAAK,yBAAyB,KAAK,CAAC,MAAM,QAAQ,IAAI,MAAM,MAAM,CAAC;AAAA,MACrE,CAAC;AAED,WAAK,sBAAsB,OAAO,GAAG;AAAA,IACvC,CAAC;AACD,SAAK,gBAAgB;AAErB,eAAW,MAAM,KAAK,kBAAkB,GAAG,CAAC;AAAA,EAC9C;AAAA,EAEQ,cAAc,OAAc;AAClC,YAAQ,MAAM,2BAA2B,KAAK;AAC9C,SAAK,uBAAuB;AAE5B,QAAI,KAAK,aAAa,eAAe,UAAU,MAAM;AACnD,WAAK,aAAa,MAAM;AAAA,IAC1B,OAAO;AAEL,UAAI,KAAK,oBAAoB;AAAe;AAC5C,iBAAW,MAAM;AAEf,aAAK,gBAAgB;AACrB,aAAK;AAAA,MACP,GAAG,KAAK,oBAAoB,GAAI;AAAA,IAClC;AAEA,SAAK,gBAAgB,OAAO,KAAK,cAAc;AAAA,EACjD;AAAA,EAEQ,eAAe,OAAc;AAtVvC;AAuVI,YAAQ,MAAM,4BAA4B,KAAK;AAC/C,SAAK,wBAAwB;AAE7B,UAAI,UAAK,kBAAL,mBAAoB,gBAAe,UAAU,MAAM;AACrD,WAAK,cAAc,MAAM;AAAA,IAC3B,OAAO;AAEL,UAAI,KAAK,qBAAqB;AAAe;AAC7C,iBAAW,MAAM;AAEf,aAAK,iBAAiB;AACtB,aAAK;AAAA,MACP,GAAG,KAAK,qBAAqB,GAAI;AAAA,IACnC;AAEA,SAAK,gBAAgB,OAAO,KAAK,qBAAqB;AAAA,EACxD;AAAA,EAEQ,gBAAgB,OAAY,eAAoC;AACtE,kBAAc,QAAQ,CAAC,UAAU;AAC/B,YAAM,SAAS,QAAQ,CAAC,OAAO;AA3WrC;AA4WQ,iBAAG,YAAH,4BAAa;AAAA,MACf,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAeA,QAAQ;AA9XV;AA+XI,SAAK,aAAa,MAAM;AACxB,eAAK,kBAAL,mBAAoB;AAAA,EACtB;AAAA,EAEA,IAAI,UAAU,WAAmB;AAAA,EAAC;AAAA,EAEpB,aAAa,WAAmB;AAAA;AArYhD;AAsYI,UAAI,KAAK;AAAe;AACxB,UAAI,CAAC,KAAK,eAAe;AACvB,gBAAQ,MAAM,0BAA0B;AACxC;AAAA,MACF;AAEA,YAAM,UAAU,OAAM,gBAAK,SAAQ,sBAAb,4BAAiC;AAEvD,WAAK,cAAc;AAAA,QACjB,KAAK,UAAU;AAAA,UACb,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,QAAQ;AAAA,YACN,aAAa,QAAQ;AAAA,YACrB,MAAM,QAAQ;AAAA,YACd,WAAW,QAAQ;AAAA,UACrB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IAGF;AAAA;AAAA,EAEA,iBACE,QACA,UACA;AAhaJ;AAiaI,UAAM,CAAC,kBAAkB,aAAa,IAAI,KAAK;AAAA,MAC7C;AAAA,MACC,SAA8B;AAAA,IACjC;AAEA,UAAI,UAAK,kBAAL,mBAAoB,gBAAe,UAAU,MAAM;AACrD,WAAK,yBAAyB,KAAK,CAAC,QAAQ,QAAQ,CAAC;AACrD,aAAO,MAAM;AACX,aAAK,mBAAmB,gBAAgB;AAAA,MAC1C;AAAA,IACF;AAEA,UAAM,QAAQ,iBAAiB,SAAS,iBAAiB;AAEzD,UAAM,UAAU,KAAK,sBAAsB,IAAI,KAAK;AACpD,UAAM,YAAY,iCACb,WADa;AAAA,MAEhB;AAAA,IACF;AAEA,QAAI,CAAC,SAAS;AACZ,WAAK,sBAAsB,IAAI,OAAO;AAAA,QACpC;AAAA,QACA,UAAU,CAAC,SAAS;AAAA,MACtB,CAAC;AAAA,IACH,OAAO;AACL,cAAQ,SAAS,KAAK,SAAS;AAAA,IACjC;AAEA,SAAK,cAAc,KAAK,KAAK,UAAU,gBAAgB,CAAC;AAExD,WAAO,MAAM;AACX,WAAK,mBAAmB,gBAAgB;AAAA,IAC1C;AAAA,EACF;AAAA,EAEA,UACE,QACA,UACA,MACyB;AAGzB,UAAM,CAAC,kBAAkB,aAAa,IAAI,KAAK;AAAA,MAC7C;AAAA,MACC,SAA8B;AAAA,MAC9B,SAA8B;AAAA,IACjC;AAIA,QAAI,KAAK,aAAa,eAAe,UAAU,MAAM;AACnD,WAAK,wBAAwB,KAAK,CAAC,QAAQ,UAAU,IAAI,CAAC;AAE1D,UAAI,CAAC,MAAM;AACT,eAAO,MAAM;AACX,eAAK,kBAAkB,gBAAgB;AAAA,QACzC;AAAA,MACF;AACA;AAAA,IACF;AAEA,QAAI,QAAQ,KAAK,sBAAsB,gBAAgB;AAGvD,UAAM,UAAU,KAAK,eAAe,IAAI,KAAK;AAC7C,UAAM,YAAY,iCACb,WADa;AAAA,MAEhB;AAAA,IACF;AAEA,QAAI,CAAC,SAAS;AACZ,WAAK,eAAe,IAAI,OAAO;AAAA,QAC7B;AAAA,QACA,QAAQ;AAAA,QACR,UAAU,CAAC,SAAS;AAAA,MACtB,CAAC;AACD,WAAK,aAAa,KAAK,KAAK,UAAU,gBAAgB,CAAC;AAAA,IACzD,OAAO;AAEL,UAAI,MAAM;AACR,gBAAQ,WAAW,CAAC,SAAS;AAC7B,aAAK,aAAa,KAAK,KAAK,UAAU,gBAAgB,CAAC;AAAA,MACzD,OAAO;AACL,gBAAQ,SAAS,KAAK,SAAS;AAAA,MACjC;AAAA,IACF;AAIA,QAAI,CAAC,MAAM;AACT,aAAO,MAAM;AACX,aAAK,kBAAkB,gBAAgB;AAAA,MACzC;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,sBAAsB,QAAqB;AACjD,QAAI;AAEJ,QAAI,OAAO,OAAO;AAChB,cAAQ,OAAO;AAAA,IACjB,OAAO;AACL,YAAM,YAAY,OAAO;AACzB,cAAQ,OAAO;AAEf,UAAI,OAAO,IAAI;AACb,iBAAS,IAAI,OAAO,EAAE;AAAA,MACxB;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,uBAAuB,SAAsB;AACnD,QAAI;AACJ,QAAI,QAAQ,OAAO;AACjB,cAAQ,QAAQ;AAAA,IAClB,OAAO;AACL,UAAI,QAAQ,OAAO;AACjB,gBAAQ,GAAG,QAAQ,KAAK;AAExB,YAAI,QAAQ,IAAI;AACd,mBAAS,IAAI,QAAQ,EAAE;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAMA,cACE,QACA,UACA;AACA,SAAK,UAAU,QAAQ,UAAU,IAAI;AAAA,EACvC;AAAA,EAEQ,YACN,QACA,WACA,YACA;AACA,UAAM,QAAQ,OAAO,SAAS,OAAO;AACrC,UAAM,UAAU,WAAW,IAAI,KAAK;AAEpC,QAAI,CAAC,CAAC,WAAW,MAAM,QAAQ,mCAAS,QAAQ,GAAG;AACjD,UAAI,QAAS,SAAS,WAAW,GAAG;AAClC,cAAM,qBAAqB,QAAS,SAAS,CAAC,EAAE,cAAc,KAAK;AAGnE,kBAAU,KAAK,KAAK,UAAU,kBAAkB,CAAC;AACjD,mBAAW,OAAO,KAAK;AAAA,MAEzB,OAAO;AACL,cAAM,QAAQ,QAAQ,SAAS;AAAA,UAC7B,CAAC,OAAO,GAAG,cAAc,OAAO;AAAA,QAClC;AAEA,gBAAQ,IAAI,OAAO,QAAQ,SAAS,MAAM;AAE1C,YAAI,UAAU;AAAI;AAElB,mBAAW,IAAI,OAAO,iCACjB,UADiB;AAAA,UAEpB,UAAU,QAAQ,SAAS,MAAM,wBAAS,GAAG,CAAC;AAAA,QAChD,EAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,mBAAmB,QAAuB;AAChD,SAAK,YAAY,QAAQ,KAAK,eAAgB,KAAK,qBAAqB;AAAA,EAC1E;AAAA,EAEQ,kBAAkB,QAAuB;AAC/C,SAAK,YAAY,QAAQ,KAAK,cAAc,KAAK,cAAc;AAAA,EACjE;AAAA,EAEQ,gBACN,QACA,eACA,WACyC;AACzC,QAAI;AAEJ,QAAI,OAAO,WAAW,UAAU;AAC9B,yBAAmB,EAAE,OAAO,aAAa,OAAO,OAAO;AAAA,IACzD,OAAO;AACL,yBAAmB;AAAA,IACrB;AAEA,QAAI,OAAO,kBAAkB,YAAY;AACvC,UAAI,OAAO,WAAW,UAAU;AAC9B,wBAAgB,OAAO,EAAE,OAAO,eAAe,OAAO,OAAO;AAAA,MAC/D,OAAO;AACL,wBAAgB,OAAO,EAAE,OAAO,eAAe,OAAO,OAAO,MAAM;AAAA,MACrE;AAAA,IACF;AAEA,WAAO,CAAC,iCAAK,mBAAL,EAAuB,UAAU,IAAG,aAAa;AAAA,EAC3D;AAAA,EAEQ,kBAAkB;AACxB,QAAI,KAAK;AAAsB;AAC/B,SAAK,uBAAuB;AAE5B,WAAO,WAAW,MAAM;AACtB,WAAK,eAAe,KAAK,OAAO;AAAA,IAClC,GAAG,KAAK,iBAAiB;AAAA,EAC3B;AAAA,EAEQ,mBAAmB;AACzB,QAAI,CAAC,KAAK,QAAQ;AAAW;AAC7B,QAAI,KAAK;AAAuB;AAChC,SAAK,wBAAwB;AAE7B,WAAO,WAAW,MAAM;AACtB,WAAK,gBAAgB,KAAK,OAAO;AAAA,IACnC,GAAG,KAAK,iBAAiB;AAAA,EAC3B;AACF;","names":[]}
|
package/package.json
CHANGED
package/src/ws/ws.ts
CHANGED
|
@@ -17,6 +17,8 @@ export type MessageParams = {
|
|
|
17
17
|
event: string;
|
|
18
18
|
topic: string;
|
|
19
19
|
|
|
20
|
+
onMessage?: (message: any) => any;
|
|
21
|
+
|
|
20
22
|
params?: any;
|
|
21
23
|
// [key: string]: any;
|
|
22
24
|
};
|
|
@@ -458,7 +460,8 @@ export class WS {
|
|
|
458
460
|
|
|
459
461
|
const [subscribeMessage, onUnsubscribe] = this.generateMessage(
|
|
460
462
|
params,
|
|
461
|
-
(callback as WSMessageHandler).onUnsubscribe
|
|
463
|
+
(callback as WSMessageHandler).onUnsubscribe,
|
|
464
|
+
(callback as WSMessageHandler).onMessage
|
|
462
465
|
);
|
|
463
466
|
|
|
464
467
|
//
|
|
@@ -571,9 +574,17 @@ export class WS {
|
|
|
571
574
|
handlerMap.delete(topic);
|
|
572
575
|
//post unsubscribe message
|
|
573
576
|
} else {
|
|
577
|
+
const index = handler.callback.findIndex(
|
|
578
|
+
(cb) => cb.onMessage === parmas.onMessage
|
|
579
|
+
);
|
|
580
|
+
|
|
581
|
+
console.log(index, handler.callback.length);
|
|
582
|
+
|
|
583
|
+
if (index === -1) return;
|
|
584
|
+
|
|
574
585
|
handlerMap.set(topic, {
|
|
575
586
|
...handler,
|
|
576
|
-
callback: handler.callback.slice(0,
|
|
587
|
+
callback: handler.callback.slice(index ?? 0, 1),
|
|
577
588
|
});
|
|
578
589
|
}
|
|
579
590
|
}
|
|
@@ -589,7 +600,8 @@ export class WS {
|
|
|
589
600
|
|
|
590
601
|
private generateMessage(
|
|
591
602
|
params: any,
|
|
592
|
-
onUnsubscribe?: (event: string) => any
|
|
603
|
+
onUnsubscribe?: (event: string) => any,
|
|
604
|
+
onMessage?: (message: any) => any
|
|
593
605
|
): [MessageParams, (event: string) => any] {
|
|
594
606
|
let subscribeMessage;
|
|
595
607
|
|
|
@@ -607,7 +619,7 @@ export class WS {
|
|
|
607
619
|
}
|
|
608
620
|
}
|
|
609
621
|
|
|
610
|
-
return [subscribeMessage, onUnsubscribe];
|
|
622
|
+
return [{ ...subscribeMessage, onMessage }, onUnsubscribe];
|
|
611
623
|
}
|
|
612
624
|
|
|
613
625
|
private reconnectPublic() {
|