@nmtjs/ws-client 0.7.2 → 0.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/src/index.ts +2 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":"AAAA,SAEE,
|
|
1
|
+
{"mappings":"AAAA,SAEE,oBAGK,wBAAwB;AAC/B,SAEE,QACA,cACA,cACA,yBACK,wBAAwB;AAsB/B,OAAO,MAAM,iCACH,aAEV;CACE,aAA+B;CAC/B,cAAoC;CAEpC,YAA6BA,SAA0C;AACrE,SAAO;OADoB;CAE5B;CAED,QACEC,OAA2B,WAC3BC,aACe;EACf,MAAM,QAAQ,IAAI,IAAI,KAAK,QAAQ;AACnC,QAAM,WAAW,MAAM,aAAa,WAAW,SAAS;AACxD,QAAM,WAAW;AACjB,QAAM,aAAa,IAAI,gBAAgB,YAAY;AACnD,QAAM,aAAa,IAAI,UAAU,YAAY;AAC7C,MAAI,KAAM,OAAM,aAAa,IAAI,QAAQ,KAAK;EAE9C,MAAM,KACJ,KAAK,QAAQ,YAAY,MAAM,IAAI,IAAI,UAAU,MAAM,UAAU;AAEnE,KAAG,aAAa;AAEhB,KAAG,iBAAiB,WAAW,CAAC,EAAE,MAAM,KAAK;GAC3C,MAAMC,SAAsB;GAC5B,MAAM,OAAO,aAAa,QAAQ,QAAQ;AAC1C,OAAI,QAAQ,mBAAmB;AAC7B,SAAK,MAAM,EAAE,KAAK,GAAG,OAAO,MAAM,WAAW,kBAAkB,CAAC;GACjE;EACF,EAAC;AAEF,OAAKC,aAAa;AAElB,OAAKC,cAAc,IAAI,QAAQ,CAAC,SAAS,WAAW;AAClD,MAAG,iBACD,QACA,MAAM;AACJ,SAAK,KAAK,YAAY;AACtB,aAAS;GACV,GACD,EAAE,MAAM,KAAM,EACf;AAED,MAAG,iBACD,SACA,CAAC,UAAU,OAAO,IAAI,MAAM,mBAAmB,EAAE,OAAO,MAAO,GAAE,EACjE,EAAE,MAAM,KAAM,EACf;AAED,MAAG,iBACD,SACA,CAAC,UAAU;AACT,SAAK,KAAK,eAAe;AACzB,SAAKD,aAAa;AAClB,QAAI,KAAK,QAAQ,kBAAkB,MAAM;AACvC,gBAAW,MAAM,KAAK,QAAQ,MAAM,YAAY,EAAE,IAAK;IACxD;GACF,GACD,EAAE,MAAM,KAAM,EACf;EACF;AAED,SAAO,KAAKC;CACb;CAED,MAAM,aAA4B;AAChC,MAAI,KAAKD,eAAe,KAAM;AAC9B,OAAKA,WAAY,OAAO;AACxB,SAAO,MAAM,KAAKA,YAAY,QAAQ;CACvC;CAED,MAAM,KACJE,aACAH,QACe;AACf,MAAI,KAAKE,YAAa,OAAM,KAAKA;AACjC,OAAKD,WAAY,KAAK,OAAO,aAAa,aAAa,QAAQ,EAAE,OAAO,CAAC;CAC1E;AACF;AAED,SAAS,MAAMG,QAAqBC,OAAe;AACjD,QAAO,IAAI,QAAc,CAAC,YAAY;AACpC,SAAO,iBAAiB,OAAO,MAAM,SAAS,EAAE,EAAE,MAAM,KAAM,EAAC;CAChE;AACF","names":["options: WebSocketClientTransportOptions","auth: string | undefined","contentType: BaseClientFormat['contentType']","buffer: ArrayBuffer","#webSocket","#connecting","messageType: ClientMessageType","target: EventTarget","event: string"],"sources":["src/index.ts"],"sourcesContent":["import {\n type BaseClientFormat,\n EventEmitter,\n type ProtocolTransport,\n type ProtocolTransportEventMap,\n} from '@nmtjs/protocol/client'\nimport {\n type ClientMessageType,\n concat,\n decodeNumber,\n encodeNumber,\n ServerMessageType,\n} from '@nmtjs/protocol/common'\n\nexport type WebSocketClientTransportOptions = {\n /**\n * The origin of the server\n * @example 'http://localhost:3000'\n */\n origin: string\n /**\n * Whether to autoreconnect on close\n * @default true\n */\n autoreconnect?: boolean\n /**\n * Custom WebSocket class\n * @default globalThis.WebSocket\n */\n wsFactory?: (url: URL) => WebSocket\n\n debug?: boolean\n}\n\nexport class WebSocketClientTransport\n extends EventEmitter<ProtocolTransportEventMap>\n implements ProtocolTransport\n{\n #webSocket: WebSocket | null = null\n #connecting: Promise<void> | null = null\n\n constructor(private readonly options: WebSocketClientTransportOptions) {\n super()\n }\n\n connect(\n auth: string | undefined = undefined,\n contentType: BaseClientFormat['contentType'],\n ): Promise<void> {\n const wsUrl = new URL(this.options.origin)\n wsUrl.protocol = wsUrl.protocol === 'https:' ? 'wss:' : 'ws:'\n wsUrl.pathname = '/api'\n wsUrl.searchParams.set('content-type', contentType)\n wsUrl.searchParams.set('accept', contentType)\n if (auth) wsUrl.searchParams.set('auth', auth)\n\n const ws =\n this.options.wsFactory?.(wsUrl) ?? new WebSocket(wsUrl.toString())\n\n ws.binaryType = 'arraybuffer'\n\n ws.addEventListener('message', ({ data }) => {\n const buffer: ArrayBuffer = data\n const type = decodeNumber(buffer, 'Uint8')\n if (type in ServerMessageType) {\n this.emit(`${type}`, buffer.slice(Uint8Array.BYTES_PER_ELEMENT))\n }\n })\n\n this.#webSocket = ws\n\n this.#connecting = new Promise((resolve, reject) => {\n ws.addEventListener(\n 'open',\n () => {\n this.emit('connected')\n resolve()\n },\n { once: true },\n )\n\n ws.addEventListener(\n 'error',\n (event) => reject(new Error('WebSocket error', { cause: event })),\n { once: true },\n )\n\n ws.addEventListener(\n 'close',\n (event) => {\n this.emit('disconnected')\n this.#webSocket = null\n if (this.options.autoreconnect === true) {\n setTimeout(() => this.connect(auth, contentType), 1000)\n }\n },\n { once: true },\n )\n })\n\n return this.#connecting\n }\n\n async disconnect(): Promise<void> {\n if (this.#webSocket === null) return\n this.#webSocket!.close()\n return _once(this.#webSocket, 'close')\n }\n\n async send(\n messageType: ClientMessageType,\n buffer: ArrayBuffer,\n ): Promise<void> {\n if (this.#connecting) await this.#connecting\n this.#webSocket!.send(concat(encodeNumber(messageType, 'Uint8'), buffer))\n }\n}\n\nfunction _once(target: EventTarget, event: string) {\n return new Promise<void>((resolve) => {\n target.addEventListener(event, () => resolve(), { once: true })\n })\n}\n"],"version":3}
|
package/package.json
CHANGED
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
}
|
|
9
9
|
},
|
|
10
10
|
"dependencies": {
|
|
11
|
-
"@nmtjs/common": "0.7.
|
|
12
|
-
"@nmtjs/protocol": "0.7.
|
|
13
|
-
"@nmtjs/client": "0.7.
|
|
11
|
+
"@nmtjs/common": "0.7.3",
|
|
12
|
+
"@nmtjs/protocol": "0.7.3",
|
|
13
|
+
"@nmtjs/client": "0.7.3"
|
|
14
14
|
},
|
|
15
15
|
"files": [
|
|
16
16
|
"src",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"LICENSE.md",
|
|
19
19
|
"README.md"
|
|
20
20
|
],
|
|
21
|
-
"version": "0.7.
|
|
21
|
+
"version": "0.7.3",
|
|
22
22
|
"scripts": {
|
|
23
23
|
"build": "neemata-build --root=./src './*.ts'",
|
|
24
24
|
"type-check": "tsc --noEmit"
|
package/src/index.ts
CHANGED
|
@@ -2,6 +2,7 @@ import {
|
|
|
2
2
|
type BaseClientFormat,
|
|
3
3
|
EventEmitter,
|
|
4
4
|
type ProtocolTransport,
|
|
5
|
+
type ProtocolTransportEventMap,
|
|
5
6
|
} from '@nmtjs/protocol/client'
|
|
6
7
|
import {
|
|
7
8
|
type ClientMessageType,
|
|
@@ -32,7 +33,7 @@ export type WebSocketClientTransportOptions = {
|
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
export class WebSocketClientTransport
|
|
35
|
-
extends EventEmitter
|
|
36
|
+
extends EventEmitter<ProtocolTransportEventMap>
|
|
36
37
|
implements ProtocolTransport
|
|
37
38
|
{
|
|
38
39
|
#webSocket: WebSocket | null = null
|