napcon 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -0
- package/dist/connection-CBr_CAbl.d.mts +669 -0
- package/dist/index.d.mts +7 -0
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -0
- package/dist/utils/index.d.mts +1079 -0
- package/dist/utils/index.mjs +2 -0
- package/dist/utils/index.mjs.map +1 -0
- package/dist/value-DuBx3P7B.mjs +2 -0
- package/dist/value-DuBx3P7B.mjs.map +1 -0
- package/package.json +54 -0
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { $ as ProtocolNoticeFriendEvent, $t as ProtocolMessageRecordRecvSegment, A as ProtocolEventCommon, At as ProtocolMessageContactSendSegment, B as ProtocolMessageGroupEvent, Bt as ProtocolMessageImageSendSegment, C as ProtocolReplyStreamResponse, Ct as ProtocolNoticeNotifyInputStatusEvent, D as ProtocolStreamErrorMessage, Dt as ProtocolRequestEvent, E as ProtocolStreamDataMessage, Et as ProtocolNoticeNotifyProfileLikeEvent, F as ProtocolFriendRequestEvent, Ft as ProtocolMessageFileRecvSegment, G as ProtocolMetaEventCommon, Gt as ProtocolMessageMfaceSendSegment, H as ProtocolMessagePrivateEventSubTypes, Ht as ProtocolMessageJsonSendSegment, I as ProtocolGroupRequestEvent, It as ProtocolMessageFileSendSegment, J as ProtocolMetaLifecycleEventSubTypes, Jt as ProtocolMessageMusicSendSegment, K as ProtocolMetaHeartbeatEvent, Kt as ProtocolMessageMiniAppSegment, L as ProtocolMessageEmojiLike, Lt as ProtocolMessageFlashTransferSegment, M as ProtocolEventNamePaths, Mt as ProtocolMessageDiceRecvSegment, N as ProtocolEventNames, Nt as ProtocolMessageDiceSendSegment, O as ProtocolStreamMessage, Ot as ProtocolRequestEventCommon, P as ProtocolEventPostTypes, Pt as ProtocolMessageFaceSegment, Q as ProtocolNoticeFriendAddEvent, Qt as ProtocolMessagePokeSendSegment, R as ProtocolMessageEvent, Rt as ProtocolMessageForwardRecvSegment, S as ProtocolReplyStream, St as ProtocolNoticeNotifyGroupTitleEvent, T as ProtocolStreamCompleteMessage, Tt as ProtocolNoticeNotifyPokeEventCommon, U as ProtocolMessageSentEvent, Ut as ProtocolMessageLocationSegment, V as ProtocolMessagePrivateEvent, Vt as ProtocolMessageJsonRecvSegment, W as ProtocolMetaEvent, Wt as ProtocolMessageMarkdownSegment, X as ProtocolNoticeEvent, Xt as ProtocolMessageOnlineFileSegment, Y as ProtocolNoticeBotOfflineEvent, Yt as ProtocolMessageNode, Z as ProtocolNoticeEventCommon, Zt as ProtocolMessagePokeRecvSegment, _ as SubOff, _t as ProtocolNoticeGroupUploadFile, a as ConnectionStreamResult, an as ProtocolMessageRpsSendSegment, at as ProtocolNoticeGroupCardEvent, b as ProtocolReplyFailed, bt as ProtocolNoticeNotifyGroupNameEvent, c as ReadyState, cn as ProtocolMessageTextSegment, ct as ProtocolNoticeGroupEssenceEvent, d as TransportEventHandlers, dn as ProtocolMessageXmlSegment, dt as ProtocolNoticeGroupEventCommon, en as ProtocolMessageRecordSendSegment, et as ProtocolNoticeFriendRecallEvent, f as OffHalf, fn as Dispose, ft as ProtocolNoticeGroupIncreaseEvent, g as SubHalf, gt as ProtocolNoticeGroupUploadEvent, h as PubSubOff, ht as ProtocolNoticeGroupRecallEvent, i as ConnectionPubSub, in as ProtocolMessageRpsRecvSegment, it as ProtocolNoticeGroupBanEventSubTypes, j as ProtocolEventHandlers, jt as ProtocolMessageContentNode, k as ProtocolEvent, kt as ProtocolMessageAtSegment, l as Transport, ln as ProtocolMessageVideoRecvSegment, lt as ProtocolNoticeGroupEssenceEventSubTypes, m as PubSub, mn as MaybePromiseLike, mt as ProtocolNoticeGroupMessageEmojiLikeEvent, n as ConnectionBasicEventHandlers, nn as ProtocolMessageRefNode, nt as ProtocolNoticeGroupAdminEventSubTypes, o as OpenConnection, on as ProtocolMessageSegment, ot as ProtocolNoticeGroupDecreaseEvent, p as PubHalf, pn as MaybeArray, pt as ProtocolNoticeGroupIncreaseEventSubTypes, q as ProtocolMetaLifecycleEvent, qt as ProtocolMessageMusicRecvSegment, r as ConnectionEventHandlers, rn as ProtocolMessageReplySegment, rt as ProtocolNoticeGroupBanEvent, s as OpenConnectionOptions, sn as ProtocolMessageSendSegment, st as ProtocolNoticeGroupDecreaseEventSubTypes, t as Connection, tn as ProtocolMessageRecvSegment, tt as ProtocolNoticeGroupAdminEvent, u as TransportCommon, un as ProtocolMessageVideoSendSegment, ut as ProtocolNoticeGroupEvent, v as ProtocolReadableStream, vt as ProtocolNoticeNotifyEvent, w as ProtocolRequest, wt as ProtocolNoticeNotifyPokeEvent, x as ProtocolReplyOk, xt as ProtocolNoticeNotifyGroupPokeEvent, y as ProtocolReply, yt as ProtocolNoticeNotifyFriendPokeEvent, z as ProtocolMessageEventCommon, zt as ProtocolMessageImageRecvSegment } from "./connection-CBr_CAbl.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/connection/index.d.ts
|
|
4
|
+
declare function open(options: OpenConnectionOptions): Connection;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { Connection, ConnectionBasicEventHandlers, ConnectionEventHandlers, ConnectionPubSub, ConnectionStreamResult, Dispose, MaybeArray, MaybePromiseLike, OffHalf, OpenConnection, OpenConnectionOptions, ProtocolEvent, ProtocolEventCommon, ProtocolEventHandlers, ProtocolEventNamePaths, ProtocolEventNames, ProtocolEventPostTypes, ProtocolFriendRequestEvent, ProtocolGroupRequestEvent, ProtocolMessageAtSegment, ProtocolMessageContactSendSegment, ProtocolMessageContentNode, ProtocolMessageDiceRecvSegment, ProtocolMessageDiceSendSegment, ProtocolMessageEmojiLike, ProtocolMessageEvent, ProtocolMessageEventCommon, ProtocolMessageFaceSegment, ProtocolMessageFileRecvSegment, ProtocolMessageFileSendSegment, ProtocolMessageFlashTransferSegment, ProtocolMessageForwardRecvSegment, ProtocolMessageGroupEvent, ProtocolMessageImageRecvSegment, ProtocolMessageImageSendSegment, ProtocolMessageJsonRecvSegment, ProtocolMessageJsonSendSegment, ProtocolMessageLocationSegment, ProtocolMessageMarkdownSegment, ProtocolMessageMfaceSendSegment, ProtocolMessageMiniAppSegment, ProtocolMessageMusicRecvSegment, ProtocolMessageMusicSendSegment, ProtocolMessageNode, ProtocolMessageOnlineFileSegment, ProtocolMessagePokeRecvSegment, ProtocolMessagePokeSendSegment, ProtocolMessagePrivateEvent, ProtocolMessagePrivateEventSubTypes, ProtocolMessageRecordRecvSegment, ProtocolMessageRecordSendSegment, ProtocolMessageRecvSegment, ProtocolMessageRefNode, ProtocolMessageReplySegment, ProtocolMessageRpsRecvSegment, ProtocolMessageRpsSendSegment, ProtocolMessageSegment, ProtocolMessageSendSegment, ProtocolMessageSentEvent, ProtocolMessageTextSegment, ProtocolMessageVideoRecvSegment, ProtocolMessageVideoSendSegment, ProtocolMessageXmlSegment, ProtocolMetaEvent, ProtocolMetaEventCommon, ProtocolMetaHeartbeatEvent, ProtocolMetaLifecycleEvent, ProtocolMetaLifecycleEventSubTypes, ProtocolNoticeBotOfflineEvent, ProtocolNoticeEvent, ProtocolNoticeEventCommon, ProtocolNoticeFriendAddEvent, ProtocolNoticeFriendEvent, ProtocolNoticeFriendRecallEvent, ProtocolNoticeGroupAdminEvent, ProtocolNoticeGroupAdminEventSubTypes, ProtocolNoticeGroupBanEvent, ProtocolNoticeGroupBanEventSubTypes, ProtocolNoticeGroupCardEvent, ProtocolNoticeGroupDecreaseEvent, ProtocolNoticeGroupDecreaseEventSubTypes, ProtocolNoticeGroupEssenceEvent, ProtocolNoticeGroupEssenceEventSubTypes, ProtocolNoticeGroupEvent, ProtocolNoticeGroupEventCommon, ProtocolNoticeGroupIncreaseEvent, ProtocolNoticeGroupIncreaseEventSubTypes, ProtocolNoticeGroupMessageEmojiLikeEvent, ProtocolNoticeGroupRecallEvent, ProtocolNoticeGroupUploadEvent, ProtocolNoticeGroupUploadFile, ProtocolNoticeNotifyEvent, ProtocolNoticeNotifyFriendPokeEvent, ProtocolNoticeNotifyGroupNameEvent, ProtocolNoticeNotifyGroupPokeEvent, ProtocolNoticeNotifyGroupTitleEvent, ProtocolNoticeNotifyInputStatusEvent, ProtocolNoticeNotifyPokeEvent, ProtocolNoticeNotifyPokeEventCommon, ProtocolNoticeNotifyProfileLikeEvent, ProtocolReadableStream, ProtocolReply, ProtocolReplyFailed, ProtocolReplyOk, ProtocolReplyStream, ProtocolReplyStreamResponse, ProtocolRequest, ProtocolRequestEvent, ProtocolRequestEventCommon, ProtocolStreamCompleteMessage, ProtocolStreamDataMessage, ProtocolStreamErrorMessage, ProtocolStreamMessage, PubHalf, PubSub, PubSubOff, ReadyState, SubHalf, SubOff, Transport, TransportCommon, TransportEventHandlers, open };
|
|
7
|
+
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as e}from"./value-DuBx3P7B.mjs";var t=class{listeners=new Map;constructor(e,t){this.onerror=e,this._uncaughtEvents=t,this.onerror=e}_inner(e,t){let n=this.listeners.get(e);if(!n){if(!t)return;n=new Set,this.listeners.set(e,n)}return n}on(t,...n){let r=this._inner(t,!0);if(n.length===0)return e;if(n.length===1)return r.add(n[0]),()=>r.delete(n[0]);for(let e of n)r.add(e);return()=>{this.off(t,...n)}}off(e,...t){let n=this._inner(e);if(n){if(t.length===0)return!1;if(t.length===1)return n.delete(t[0]);{let e=!0;for(let r of t)e&&=n.delete(r);return e}}}emit(e,...t){let n=this._inner(e);if(n){let r=Promise.resolve();for(let i of n)r.then(()=>i(...t)).catch(this._uncaughtEvents?.includes(e)?null:this.onerror)}}},n=class extends t{_transport;_disposeTransportEvents;_reconnectAttempts=0;_reconnectTimer;_manualClose=!1;_isReconnecting=!1;_callbacks=new Map;_streams=new Map;constructor(e){super(e=>this._handleError(e),[`connection.error`]),this._options=e}get transport(){if(!this._transport)throw Error(`Transport not connected`);return this._transport}async connect(){this._manualClose=!1,await this._connect()}_handleError(e){this.emit(`connection.error`,e,this)}async _connect(e=!1){try{let t=await this._options.transport(this._options.token??``);this._transport=t,e&&this.emit(`connection.reconnect`,this._transport,this),this._bindTransportEvents(t)}catch(e){throw this._handleError(e),e}}_createStream(e){let t={resolve:null,reject:null},n=new Promise((e,n)=>{t.resolve=e,t.reject=n});return[new ReadableStream({start:n=>{this._streams.set(e,{enqueue:e=>n.enqueue(e),raise:e=>{t.reject?.(e),n.error(e)},complete:e=>{t.resolve?.(e),n.close()},close:()=>n.close()})},cancel:()=>{this._streams.delete(e),t.reject?.(Error(`Stream canceled`))}}),n]}request(e,t,n){return new Promise((r,i)=>{let a=crypto.randomUUID(),o={action:e,params:t,echo:a,stream:n?`stream-action`:`normal-action`};if(n){let e=this._createStream(a);try{this.emit(`connection.request`,o,this),this.transport.send(JSON.stringify(o)),r(e)}catch(e){this._streams.delete(a),this._handleError(e),i(e)}return}let s=setTimeout(()=>{if(this._callbacks.has(a)){this._callbacks.delete(a);let t=Error(`API Request Timeout: ${e}`);this._handleError(t),i(t)}},this._options.timeout??3e4);this._callbacks.set(a,{resolve:r,reject:i,timer:s});try{this.emit(`connection.request`,o,this),this.transport.send(JSON.stringify(o))}catch(e){clearTimeout(s),this._callbacks.delete(a),this._handleError(e),i(e)}})}_bindTransportEvents(e){this._disposeTransportEvents?.();let t=()=>{this.emit(`connection.connected`,e,this),this._isReconnecting&&(this._isReconnecting=!1,this._reconnectAttempts=0,clearTimeout(this._reconnectTimer))},n=e=>{let t=typeof e.data==`string`?(()=>{try{return JSON.parse(e.data)}catch{return null}})():e.data;t&&this._handleMessage(t)},r=e=>{this.emit(`connection.error`,e,this)},i=()=>{this._disposeTransportEvents?.(),this._disposeTransportEvents=void 0,this.emit(`connection.disconnected`,e,this),this._transport=void 0;for(let[e,{raise:t}]of this._streams)t(Error(`Connection closed`));this._streams.clear();for(let[e,{reject:t,timer:n}]of this._callbacks)clearTimeout(n),t(Error(`Connection closed`));this._callbacks.clear(),this._manualClose||this._scheduleReconnect()};e.addEventListener(`open`,t),e.addEventListener(`message`,n),e.addEventListener(`error`,r),e.addEventListener(`close`,i),e.readyState===1&&t(),this._disposeTransportEvents=()=>{e.removeEventListener(`open`,t),e.removeEventListener(`message`,n),e.removeEventListener(`error`,r),e.removeEventListener(`close`,i)}}_handleMessage(e){if(e){if(e.echo){if(this.emit(`connection.reply`,e,this),e.stream===`stream-action`){this.emit(`connection.reply.stream`,e,this);let t=this._streams.get(e.echo);if(!t)return;let n=e;n.status===`ok`?n.data.type===`stream`&&n.data.data_type===`data_chunk`?t.enqueue(n.data):n.data.type===`response`&&n.data.data_type===`data_complete`&&(this._streams.delete(e.echo),t.complete(n.data)):n.status===`failed`&&(this._streams.delete(e.echo),t.raise(Error(`Stream Error: ${n.message||`code ${n.retcode}`}`)));return}let t=this._callbacks.get(e.echo);if(t){clearTimeout(t.timer),this._callbacks.delete(e.echo),e.status===`ok`?t.resolve(e.data):t.reject(Error(`Request Error: ${e.message||`code ${e.retcode}`}`));return}}e.post_type&&this.emit(`connection.event`,e,this)}}_scheduleReconnect(){let{reconnect:e}=this._options;if(!e||this._manualClose)return;let{attempts:t,interval:n}=e;if(t!==`always`&&this._reconnectAttempts>=t)return this.emit(`connection.error`,Error(`Reconnect failed`),this);this._isReconnecting=!0,this._reconnectAttempts++,this._reconnectTimer&&clearTimeout(this._reconnectTimer),this._reconnectTimer=setTimeout(()=>{this._connect(!0).catch(()=>{this._scheduleReconnect()})},n)}close(){this._manualClose=!0,this._disposeTransportEvents?.(),this._transport?.close()}};function r(e){return new n(e)}export{r as open};
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/utils/pubsub.ts","../src/connection/index.ts"],"sourcesContent":["import type { PubSubOff } from '@/types/pubsub'\nimport { noop } from './value'\n\nexport class PubSubImpl<T extends Record<string, any[]> = Record<string, any[]>> implements PubSubOff<T> {\n private readonly listeners = new Map<keyof T, Set<(...args: any[]) => any>>()\n\n constructor(private onerror?: (error: Error) => void, private _uncaughtEvents?: (keyof T)[]) {\n this.onerror = onerror\n }\n\n private _inner(type: keyof T, create?: boolean) {\n let listeners = this.listeners.get(type)\n if (!listeners) {\n if (!create) {\n return\n }\n listeners = new Set()\n this.listeners.set(type, listeners)\n }\n return listeners\n }\n\n on<const K extends keyof T>(type: K, ...listeners: Array<(...args: T[K]) => void>) {\n const inner = this._inner(type, true)!\n if (listeners.length === 0) {\n return noop\n }\n else if (listeners.length === 1) {\n inner.add(listeners[0]!)\n return () => inner.delete(listeners[0]!)\n }\n else {\n for (const fn of listeners) {\n inner.add(fn)\n }\n return () => {\n this.off(type, ...listeners)\n }\n }\n }\n\n off(type: keyof T, ...listeners: Array<(...args: any[]) => any>) {\n const inner = this._inner(type)\n if (inner) {\n if (listeners.length === 0) {\n return false\n }\n else if (listeners.length === 1) {\n return inner.delete(listeners[0]!)\n }\n else {\n let success = true\n for (const listener of listeners) {\n success &&= inner.delete(listener)\n }\n return success\n }\n }\n }\n\n emit<const K extends keyof T>(type: K, ...args: T[K]) {\n const listeners = this._inner(type)\n if (listeners) {\n const p = Promise.resolve()\n for (const listener of listeners) {\n p.then(() => listener(...args))\n .catch(this._uncaughtEvents?.includes(type) ? null : this.onerror)\n }\n }\n }\n}\n","import type { Dispose } from '@/types/common'\nimport type { Connection, ConnectionEventHandlers, OpenConnectionOptions } from '@/types/connection'\nimport type { ProtocolReadableStream, ProtocolReplyStream, ProtocolRequest, ProtocolStreamCompleteMessage } from '@/types/protocol'\nimport type { Transport } from '@/types/transport'\nimport { PubSubImpl } from '@/utils/pubsub'\n\nexport class ConnectionImpl extends PubSubImpl<ConnectionEventHandlers> implements Connection {\n private _transport: Transport | undefined\n private _disposeTransportEvents: Dispose | undefined\n private _reconnectAttempts = 0\n private _reconnectTimer: any | undefined\n private _manualClose = false\n private _isReconnecting = false\n private _callbacks = new Map<string, { resolve: (data: any) => void, reject: (err: any) => void, timer: NodeJS.Timeout }>()\n private _streams = new Map<string, { enqueue: (data: any) => void, raise: (err: any) => void, complete: (value: any) => void, close: () => void }>()\n\n constructor(private readonly _options: OpenConnectionOptions) {\n super(err => this._handleError(err), ['connection.error'])\n }\n\n get transport(): Transport {\n if (!this._transport) {\n throw new Error('Transport not connected')\n }\n return this._transport\n }\n\n async connect(): Promise<void> {\n this._manualClose = false\n await this._connect()\n }\n\n private _handleError(error: any) {\n this.emit('connection.error', error, this)\n }\n\n private async _connect(reconnecting = false): Promise<void> {\n try {\n const transportOrPromise = this._options.transport(this._options.token ?? '')\n const transport = await transportOrPromise\n this._transport = transport\n if (reconnecting) {\n this.emit('connection.reconnect', this._transport, this)\n }\n this._bindTransportEvents(transport)\n }\n catch (error) {\n this._handleError(error)\n throw error\n }\n }\n\n private _createStream(echo: string): [ReadableStream<any>, Promise<any>] {\n const deferred = { resolve: null, reject: null } as any\n const promise = new Promise<any>((res, rej) => {\n deferred.resolve = res\n deferred.reject = rej\n })\n\n return [new ReadableStream<any>({\n start: (controller) => {\n this._streams.set(echo, {\n enqueue: data => controller.enqueue(data),\n raise: (err) => {\n deferred.reject?.(err)\n controller.error(err)\n },\n complete: (value) => {\n deferred.resolve?.(value)\n controller.close()\n },\n close: () => controller.close(),\n })\n },\n cancel: () => {\n this._streams.delete(echo)\n deferred.reject?.(new Error('Stream canceled'))\n },\n }), promise]\n }\n\n request<const P, R = any>(method: string, args: P, stream?: false): Promise<R>\n request<const P, R = any>(method: string, args: P, stream: true): Promise<[ProtocolReadableStream, Promise<ProtocolStreamCompleteMessage<R>>]>\n request<P, R = any>(method: string, args?: P, stream?: boolean): Promise<R> | Promise<[ProtocolReadableStream, Promise<ProtocolStreamCompleteMessage<R>>]> {\n return new Promise<any>((resolve, reject) => {\n const echo = crypto.randomUUID()\n const request: ProtocolRequest = {\n action: method,\n params: args,\n echo,\n stream: stream ? 'stream-action' : 'normal-action',\n }\n\n if (stream) {\n const result = this._createStream(echo)\n try {\n this.emit('connection.request', request, this)\n this.transport.send(JSON.stringify(request))\n resolve(result)\n }\n catch (error) {\n this._streams.delete(echo)\n this._handleError(error)\n reject(error)\n }\n return\n }\n\n const timer = setTimeout(() => {\n if (this._callbacks.has(echo)) {\n this._callbacks.delete(echo)\n const error = new Error(`API Request Timeout: ${method}`)\n\n this._handleError(error)\n reject(error)\n }\n }, this._options.timeout ?? 30000) // 30s timeout\n\n this._callbacks.set(echo, { resolve, reject, timer })\n\n try {\n this.emit('connection.request', request, this)\n this.transport.send(JSON.stringify(request))\n }\n catch (error) {\n clearTimeout(timer)\n this._callbacks.delete(echo)\n this._handleError(error)\n reject(error)\n }\n })\n }\n\n private _bindTransportEvents(transport: Transport) {\n this._disposeTransportEvents?.()\n\n const onOpen = () => {\n this.emit('connection.connected', transport, this)\n if (this._isReconnecting) {\n this._isReconnecting = false\n this._reconnectAttempts = 0\n clearTimeout(this._reconnectTimer)\n }\n }\n\n const onMessage = (event: { data: any }) => {\n const data = typeof event.data === 'string'\n ? (() => {\n try {\n return JSON.parse(event.data)\n }\n catch {\n return null\n }\n })()\n : event.data\n\n if (data) {\n this._handleMessage(data)\n }\n }\n\n const onError = (error: any) => {\n this.emit('connection.error', error, this)\n }\n\n const onClose = () => {\n this._disposeTransportEvents?.()\n this._disposeTransportEvents = undefined\n\n this.emit('connection.disconnected', transport, this)\n this._transport = undefined\n\n // Clear all pending streams\n for (const [_, { raise }] of this._streams) {\n raise(new Error('Connection closed'))\n }\n this._streams.clear()\n\n // Clear all pending requests\n for (const [_, { reject, timer }] of this._callbacks) {\n clearTimeout(timer)\n reject(new Error('Connection closed'))\n }\n this._callbacks.clear()\n\n if (!this._manualClose) {\n this._scheduleReconnect()\n }\n }\n\n transport.addEventListener('open', onOpen)\n transport.addEventListener('message', onMessage)\n transport.addEventListener('error', onError)\n transport.addEventListener('close', onClose)\n\n if (transport.readyState === 1 /* OPEN */) {\n onOpen()\n }\n\n this._disposeTransportEvents = () => {\n transport.removeEventListener('open', onOpen)\n transport.removeEventListener('message', onMessage)\n transport.removeEventListener('error', onError)\n transport.removeEventListener('close', onClose)\n }\n }\n\n private _handleMessage(data: any) {\n if (!data)\n return\n\n // Handle Reply\n if (data.echo) {\n this.emit('connection.reply', data, this)\n if (data.stream === 'stream-action') {\n this.emit('connection.reply.stream', data, this)\n\n const stream = this._streams.get(data.echo)\n if (!stream)\n return\n\n const message = data as ProtocolReplyStream\n if (message.status === 'ok') {\n if (message.data!.type === 'stream' && message.data!.data_type === 'data_chunk') {\n stream.enqueue(message.data!)\n }\n else if (message.data!.type === 'response' && message.data!.data_type === 'data_complete') {\n this._streams.delete(data.echo)\n stream.complete(message.data!)\n }\n }\n else if (message.status === 'failed') {\n this._streams.delete(data.echo)\n stream.raise(new Error(`Stream Error: ${message.message || `code ${message.retcode}`}`))\n }\n return\n }\n\n const pending = this._callbacks.get(data.echo)\n if (pending) {\n clearTimeout(pending.timer)\n this._callbacks.delete(data.echo)\n\n if (data.status === 'ok') {\n pending.resolve(data.data)\n }\n else {\n pending.reject(new Error(`Request Error: ${data.message || `code ${data.retcode}`}`))\n }\n return\n }\n }\n\n // Handle Event\n if (data.post_type) {\n this.emit('connection.event', data, this)\n }\n }\n\n private _scheduleReconnect() {\n const { reconnect } = this._options\n if (!reconnect || this._manualClose)\n return\n\n const { attempts, interval } = reconnect\n\n if (attempts !== 'always' && this._reconnectAttempts >= attempts) {\n // Reconnect failed\n return this.emit('connection.error', new Error('Reconnect failed'), this)\n }\n\n this._isReconnecting = true\n this._reconnectAttempts++\n\n if (this._reconnectTimer)\n clearTimeout(this._reconnectTimer)\n\n this._reconnectTimer = setTimeout(() => {\n this._connect(true).catch(() => {\n this._scheduleReconnect()\n })\n }, interval)\n }\n\n close() {\n this._manualClose = true\n this._disposeTransportEvents?.()\n this._transport?.close()\n }\n}\n\nexport function open(options: OpenConnectionOptions): Connection {\n const conn = new ConnectionImpl(options)\n return conn\n}\n"],"mappings":"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"}
|