@nmtjs/ws-client 0.12.2 → 0.12.5

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 CHANGED
@@ -1,5 +1,5 @@
1
1
  import { ClientMessageType, concat, encodeNumber } from "@nmtjs/protocol";
2
- import { ProtocolTransport } from "@nmtjs/protocol/client";
2
+ import { ProtocolTransport, ProtocolTransportStatus } from "@nmtjs/protocol/client";
3
3
  export class WebSocketClientTransport extends ProtocolTransport {
4
4
  webSocket = null;
5
5
  connecting = null;
@@ -21,17 +21,20 @@ export class WebSocketClientTransport extends ProtocolTransport {
21
21
  if (auth) wsUrl.searchParams.set("auth", auth);
22
22
  const ws = this.options.wsFactory?.(wsUrl) ?? new WebSocket(wsUrl.toString());
23
23
  ws.binaryType = "arraybuffer";
24
+ this.status = ProtocolTransportStatus.CONNECTING;
24
25
  ws.addEventListener("message", ({ data }) => {
25
26
  this.protocol.handleServerMessage(data, this, transformer);
26
27
  });
27
28
  ws.addEventListener("close", (event) => {
28
29
  console.dir(event);
30
+ this.status = ProtocolTransportStatus.DISCONNECTED;
29
31
  if (event.code !== 1e3) this.emit("disconnected");
30
32
  this.webSocket = null;
31
33
  }, { once: true });
32
34
  this.webSocket = ws;
33
35
  this.connecting = new Promise((resolve, reject) => {
34
36
  ws.addEventListener("open", () => {
37
+ this.status = ProtocolTransportStatus.CONNECTED;
35
38
  this.emit("connected");
36
39
  resolve();
37
40
  }, { once: true });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"mappings":"AAAA,SAAS,mBAAmB,QAAQ,oBAAoB,iBAAiB;AACzE,SAIE,yBACK,wBAAwB;AAiB/B,OAAO,MAAM,iCAAiC,kBAAkB;CAC9D,AAAU,YAA8B;CACxC,AAAU,aAAmC;CAC7C,AAAU;CAEV,YACqBA,UACnBC,SACA;AACA,SAAO;OAHY;AAInB,OAAK,UAAU;GACb,OAAO;GACP,GAAG;EACJ;CACF;CAED,QAAQC,MAAWC,aAAqD;EAEtE,MAAM,QAAQ,IAAI,IAAI,QAAQ,KAAK,QAAQ;AAC3C,MAAI,KAAK,SAAS,aAAa;AAC7B,SAAM,aAAa,IAAI,gBAAgB,KAAK,SAAS,YAAY;AACjE,SAAM,aAAa,IAAI,UAAU,KAAK,SAAS,YAAY;EAC5D;AACD,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;AAC3C,QAAK,SAAS,oBAAoB,MAAqB,MAAM,YAAY;EAC1E,EAAC;AAEF,KAAG,iBACD,SACA,CAAC,UAAU;AACT,WAAQ,IAAI,MAAM;AAClB,OAAI,MAAM,SAAS,IAAM,MAAK,KAAK,eAAe;AAClD,QAAK,YAAY;EAClB,GACD,EAAE,MAAM,KAAM,EACf;AAED,OAAK,YAAY;AAEjB,OAAK,aAAa,IAAI,QAAQ,CAAC,SAAS,WAAW;AACjD,MAAG,iBACD,QACA,MAAM;AACJ,SAAK,KAAK,YAAY;AACtB,aAAS;GACV,GACD,EAAE,MAAM,KAAM,EACf;AAED,MAAG,iBACD,SACA,CAAC,UAAU;AACT,WAAO,IAAI,MAAM,mBAAmB,EAAE,OAAO,MAAO,GAAE;GACvD,GACD,EAAE,MAAM,KAAM,EACf;EACF;AAED,SAAO,KAAK;CACb;CAED,MAAM,aAA4B;AAChC,MAAI,KAAK,cAAc,KAAM;AAC7B,OAAK,UAAW,MAAM,KAAM,OAAO;AACnC,SAAO,MAAM,KAAK,WAAW,QAAQ;CACtC;CAED,MAAM,KACJC,WACAC,WACAC,SACAC,SACAJ,aACA;EACA,MAAM,EAAE,MAAM,QAAQ,GAAG,KAAK,SAAS,UACrC,WACA,WACA,SACA,SACA,YACD;AACD,QAAM,KAAK,KAAK,kBAAkB,KAAK,OAAO;AAC9C,SAAO;CACR;CAED,MAAM,KACJK,aACAC,QACe;AACf,MAAI,KAAK,WAAY,OAAM,KAAK;AAChC,OAAK,UAAW,KAAK,OAAO,aAAa,aAAa,QAAQ,EAAE,OAAO,CAAC;CACzE;AACF;AAED,SAAS,MAAMC,QAAqBC,OAAe;AACjD,QAAO,IAAI,QAAc,CAAC,YAAY;AACpC,SAAO,iBAAiB,OAAO,MAAM,SAAS,EAAE,EAAE,MAAM,KAAM,EAAC;CAChE;AACF","names":["protocol: Protocol","options: WebSocketClientTransportOptions","auth: any","transformer: ProtocolBaseTransformer","namespace: string","procedure: string","payload: any","options: ProtocolBaseClientCallOptions","messageType: ClientMessageType","buffer: ArrayBuffer","target: EventTarget","event: string"],"sources":["../src/index.ts"],"sourcesContent":["import { ClientMessageType, concat, encodeNumber } from '@nmtjs/protocol'\nimport {\n type Protocol,\n type ProtocolBaseClientCallOptions,\n type ProtocolBaseTransformer,\n ProtocolTransport,\n} from '@nmtjs/protocol/client'\n\nexport type WebSocketClientTransportOptions = {\n /**\n * The origin of the server\n * @example 'http://localhost:3000'\n */\n origin: string\n /**\n * Custom WebSocket class\n * @default globalThis.WebSocket\n */\n wsFactory?: (url: URL) => WebSocket\n\n debug?: boolean\n}\n\nexport class WebSocketClientTransport extends ProtocolTransport {\n protected webSocket: WebSocket | null = null\n protected connecting: Promise<void> | null = null\n protected options: WebSocketClientTransportOptions\n\n constructor(\n protected readonly protocol: Protocol,\n options: WebSocketClientTransportOptions,\n ) {\n super()\n this.options = {\n debug: false,\n ...options,\n }\n }\n\n connect(auth: any, transformer: ProtocolBaseTransformer): Promise<void> {\n // this.auth = auth\n const wsUrl = new URL('/api', this.options.origin)\n if (this.protocol.contentType) {\n wsUrl.searchParams.set('content-type', this.protocol.contentType)\n wsUrl.searchParams.set('accept', this.protocol.contentType)\n }\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 this.protocol.handleServerMessage(data as ArrayBuffer, this, transformer)\n })\n\n ws.addEventListener(\n 'close',\n (event) => {\n console.dir(event)\n if (event.code !== 1000) this.emit('disconnected')\n this.webSocket = null\n },\n { once: true },\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) => {\n reject(new Error('WebSocket error', { cause: event }))\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(1000, 'user')\n return _once(this.webSocket, 'close')\n }\n\n async call(\n namespace: string,\n procedure: string,\n payload: any,\n options: ProtocolBaseClientCallOptions,\n transformer: ProtocolBaseTransformer,\n ) {\n const { call, buffer } = this.protocol.createRpc(\n namespace,\n procedure,\n payload,\n options,\n transformer,\n )\n await this.send(ClientMessageType.Rpc, buffer)\n return call\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,"file":"index.js"}
1
+ {"mappings":"AAAA,SAAS,mBAAmB,QAAQ,oBAAoB,iBAAiB;AACzE,SAIE,mBACA,+BACK,wBAAwB;AAiB/B,OAAO,MAAM,iCAAiC,kBAAkB;CAC9D,AAAU,YAA8B;CACxC,AAAU,aAAmC;CAC7C,AAAU;CAEV,YACqBA,UACnBC,SACA;AACA,SAAO;OAHY;AAInB,OAAK,UAAU;GACb,OAAO;GACP,GAAG;EACJ;CACF;CAED,QAAQC,MAAWC,aAAqD;EAEtE,MAAM,QAAQ,IAAI,IAAI,QAAQ,KAAK,QAAQ;AAC3C,MAAI,KAAK,SAAS,aAAa;AAC7B,SAAM,aAAa,IAAI,gBAAgB,KAAK,SAAS,YAAY;AACjE,SAAM,aAAa,IAAI,UAAU,KAAK,SAAS,YAAY;EAC5D;AACD,MAAI,KAAM,OAAM,aAAa,IAAI,QAAQ,KAAK;EAE9C,MAAM,KACJ,KAAK,QAAQ,YAAY,MAAM,IAAI,IAAI,UAAU,MAAM,UAAU;AAEnE,KAAG,aAAa;AAEhB,OAAK,SAAS,wBAAwB;AAEtC,KAAG,iBAAiB,WAAW,CAAC,EAAE,MAAM,KAAK;AAC3C,QAAK,SAAS,oBAAoB,MAAqB,MAAM,YAAY;EAC1E,EAAC;AAEF,KAAG,iBACD,SACA,CAAC,UAAU;AACT,WAAQ,IAAI,MAAM;AAClB,QAAK,SAAS,wBAAwB;AACtC,OAAI,MAAM,SAAS,IAAM,MAAK,KAAK,eAAe;AAClD,QAAK,YAAY;EAClB,GACD,EAAE,MAAM,KAAM,EACf;AAED,OAAK,YAAY;AAEjB,OAAK,aAAa,IAAI,QAAQ,CAAC,SAAS,WAAW;AACjD,MAAG,iBACD,QACA,MAAM;AACJ,SAAK,SAAS,wBAAwB;AACtC,SAAK,KAAK,YAAY;AACtB,aAAS;GACV,GACD,EAAE,MAAM,KAAM,EACf;AAED,MAAG,iBACD,SACA,CAAC,UAAU;AACT,WAAO,IAAI,MAAM,mBAAmB,EAAE,OAAO,MAAO,GAAE;GACvD,GACD,EAAE,MAAM,KAAM,EACf;EACF;AAED,SAAO,KAAK;CACb;CAED,MAAM,aAA4B;AAChC,MAAI,KAAK,cAAc,KAAM;AAC7B,OAAK,UAAW,MAAM,KAAM,OAAO;AACnC,SAAO,MAAM,KAAK,WAAW,QAAQ;CACtC;CAED,MAAM,KACJC,WACAC,WACAC,SACAC,SACAJ,aACA;EACA,MAAM,EAAE,MAAM,QAAQ,GAAG,KAAK,SAAS,UACrC,WACA,WACA,SACA,SACA,YACD;AACD,QAAM,KAAK,KAAK,kBAAkB,KAAK,OAAO;AAC9C,SAAO;CACR;CAED,MAAM,KACJK,aACAC,QACe;AACf,MAAI,KAAK,WAAY,OAAM,KAAK;AAChC,OAAK,UAAW,KAAK,OAAO,aAAa,aAAa,QAAQ,EAAE,OAAO,CAAC;CACzE;AACF;AAED,SAAS,MAAMC,QAAqBC,OAAe;AACjD,QAAO,IAAI,QAAc,CAAC,YAAY;AACpC,SAAO,iBAAiB,OAAO,MAAM,SAAS,EAAE,EAAE,MAAM,KAAM,EAAC;CAChE;AACF","names":["protocol: Protocol","options: WebSocketClientTransportOptions","auth: any","transformer: ProtocolBaseTransformer","namespace: string","procedure: string","payload: any","options: ProtocolBaseClientCallOptions","messageType: ClientMessageType","buffer: ArrayBuffer","target: EventTarget","event: string"],"sources":["../src/index.ts"],"sourcesContent":["import { ClientMessageType, concat, encodeNumber } from '@nmtjs/protocol'\nimport {\n type Protocol,\n type ProtocolBaseClientCallOptions,\n type ProtocolBaseTransformer,\n ProtocolTransport,\n ProtocolTransportStatus,\n} from '@nmtjs/protocol/client'\n\nexport type WebSocketClientTransportOptions = {\n /**\n * The origin of the server\n * @example 'http://localhost:3000'\n */\n origin: string\n /**\n * Custom WebSocket class\n * @default globalThis.WebSocket\n */\n wsFactory?: (url: URL) => WebSocket\n\n debug?: boolean\n}\n\nexport class WebSocketClientTransport extends ProtocolTransport {\n protected webSocket: WebSocket | null = null\n protected connecting: Promise<void> | null = null\n protected options: WebSocketClientTransportOptions\n\n constructor(\n protected readonly protocol: Protocol,\n options: WebSocketClientTransportOptions,\n ) {\n super()\n this.options = {\n debug: false,\n ...options,\n }\n }\n\n connect(auth: any, transformer: ProtocolBaseTransformer): Promise<void> {\n // this.auth = auth\n const wsUrl = new URL('/api', this.options.origin)\n if (this.protocol.contentType) {\n wsUrl.searchParams.set('content-type', this.protocol.contentType)\n wsUrl.searchParams.set('accept', this.protocol.contentType)\n }\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 this.status = ProtocolTransportStatus.CONNECTING\n\n ws.addEventListener('message', ({ data }) => {\n this.protocol.handleServerMessage(data as ArrayBuffer, this, transformer)\n })\n\n ws.addEventListener(\n 'close',\n (event) => {\n console.dir(event)\n this.status = ProtocolTransportStatus.DISCONNECTED\n if (event.code !== 1000) this.emit('disconnected')\n this.webSocket = null\n },\n { once: true },\n )\n\n this.webSocket = ws\n\n this.connecting = new Promise((resolve, reject) => {\n ws.addEventListener(\n 'open',\n () => {\n this.status = ProtocolTransportStatus.CONNECTED\n this.emit('connected')\n resolve()\n },\n { once: true },\n )\n\n ws.addEventListener(\n 'error',\n (event) => {\n reject(new Error('WebSocket error', { cause: event }))\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(1000, 'user')\n return _once(this.webSocket, 'close')\n }\n\n async call(\n namespace: string,\n procedure: string,\n payload: any,\n options: ProtocolBaseClientCallOptions,\n transformer: ProtocolBaseTransformer,\n ) {\n const { call, buffer } = this.protocol.createRpc(\n namespace,\n procedure,\n payload,\n options,\n transformer,\n )\n await this.send(ClientMessageType.Rpc, buffer)\n return call\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,"file":"index.js"}
package/package.json CHANGED
@@ -8,14 +8,14 @@
8
8
  }
9
9
  },
10
10
  "dependencies": {
11
- "@nmtjs/common": "0.12.2",
12
- "@nmtjs/protocol": "0.12.2",
13
- "@nmtjs/client": "0.12.2"
11
+ "@nmtjs/protocol": "0.12.5",
12
+ "@nmtjs/client": "0.12.5",
13
+ "@nmtjs/common": "0.12.5"
14
14
  },
15
15
  "peerDependencies": {
16
- "@nmtjs/common": "0.12.2",
17
- "@nmtjs/protocol": "0.12.2",
18
- "@nmtjs/client": "0.12.2"
16
+ "@nmtjs/client": "0.12.5",
17
+ "@nmtjs/common": "0.12.5",
18
+ "@nmtjs/protocol": "0.12.5"
19
19
  },
20
20
  "files": [
21
21
  "src",
@@ -23,7 +23,7 @@
23
23
  "LICENSE.md",
24
24
  "README.md"
25
25
  ],
26
- "version": "0.12.2",
26
+ "version": "0.12.5",
27
27
  "scripts": {
28
28
  "build": "neemata-build --root=./src './*.ts'",
29
29
  "type-check": "tsc --noEmit"
package/src/index.ts CHANGED
@@ -4,6 +4,7 @@ import {
4
4
  type ProtocolBaseClientCallOptions,
5
5
  type ProtocolBaseTransformer,
6
6
  ProtocolTransport,
7
+ ProtocolTransportStatus,
7
8
  } from '@nmtjs/protocol/client'
8
9
 
9
10
  export type WebSocketClientTransportOptions = {
@@ -51,6 +52,8 @@ export class WebSocketClientTransport extends ProtocolTransport {
51
52
 
52
53
  ws.binaryType = 'arraybuffer'
53
54
 
55
+ this.status = ProtocolTransportStatus.CONNECTING
56
+
54
57
  ws.addEventListener('message', ({ data }) => {
55
58
  this.protocol.handleServerMessage(data as ArrayBuffer, this, transformer)
56
59
  })
@@ -59,6 +62,7 @@ export class WebSocketClientTransport extends ProtocolTransport {
59
62
  'close',
60
63
  (event) => {
61
64
  console.dir(event)
65
+ this.status = ProtocolTransportStatus.DISCONNECTED
62
66
  if (event.code !== 1000) this.emit('disconnected')
63
67
  this.webSocket = null
64
68
  },
@@ -71,6 +75,7 @@ export class WebSocketClientTransport extends ProtocolTransport {
71
75
  ws.addEventListener(
72
76
  'open',
73
77
  () => {
78
+ this.status = ProtocolTransportStatus.CONNECTED
74
79
  this.emit('connected')
75
80
  resolve()
76
81
  },