@nmtjs/ws-client 0.15.3 → 0.16.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +5 -5
- package/dist/index.js +17 -11
- package/dist/index.js.map +1 -1
- package/package.json +7 -7
- package/src/index.ts +28 -19
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { BidirectionalTransport, ClientTransportFactory, TransportConnectParams, TransportSendOptions } from '@nmtjs/client';
|
|
2
2
|
import type { ProtocolVersion } from '@nmtjs/protocol';
|
|
3
3
|
import type { BaseClientFormat } from '@nmtjs/protocol/client';
|
|
4
4
|
import { ConnectionType } from '@nmtjs/protocol';
|
|
@@ -15,7 +15,7 @@ export type WsClientTransportOptions = {
|
|
|
15
15
|
*/
|
|
16
16
|
WebSocket?: typeof WebSocket;
|
|
17
17
|
};
|
|
18
|
-
export declare class WsTransportClient {
|
|
18
|
+
export declare class WsTransportClient implements BidirectionalTransport {
|
|
19
19
|
protected readonly format: BaseClientFormat;
|
|
20
20
|
protected readonly protocol: ProtocolVersion;
|
|
21
21
|
protected options: WsClientTransportOptions;
|
|
@@ -24,9 +24,9 @@ export declare class WsTransportClient {
|
|
|
24
24
|
protected connecting: Promise<void> | null;
|
|
25
25
|
protected closingByClient: boolean;
|
|
26
26
|
constructor(format: BaseClientFormat, protocol: ProtocolVersion, options: WsClientTransportOptions);
|
|
27
|
-
connect(params:
|
|
27
|
+
connect(params: TransportConnectParams): Promise<void>;
|
|
28
28
|
disconnect(): Promise<void>;
|
|
29
|
-
send(message: ArrayBufferView, options:
|
|
29
|
+
send(message: ArrayBufferView, options: TransportSendOptions): Promise<void>;
|
|
30
30
|
}
|
|
31
|
-
export type WsTransportFactory = ClientTransportFactory<
|
|
31
|
+
export type WsTransportFactory = ClientTransportFactory<WsTransportClient, WsClientTransportOptions>;
|
|
32
32
|
export declare const WsTransportFactory: WsTransportFactory;
|
package/dist/index.js
CHANGED
|
@@ -29,15 +29,17 @@ export class WsTransportClient {
|
|
|
29
29
|
: new WebSocket(url.toString());
|
|
30
30
|
ws.binaryType = 'arraybuffer';
|
|
31
31
|
this.connecting = new Promise((resolve, reject) => {
|
|
32
|
-
let
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
let connectSettled = false;
|
|
33
|
+
let opened = false;
|
|
34
|
+
const settleConnect = (fn) => {
|
|
35
|
+
if (connectSettled)
|
|
35
36
|
return;
|
|
36
|
-
|
|
37
|
+
connectSettled = true;
|
|
37
38
|
fn();
|
|
38
39
|
};
|
|
39
40
|
ws.addEventListener('open', () => {
|
|
40
|
-
|
|
41
|
+
opened = true;
|
|
42
|
+
settleConnect(() => {
|
|
41
43
|
this.connecting = null;
|
|
42
44
|
params.onConnect();
|
|
43
45
|
resolve();
|
|
@@ -47,7 +49,7 @@ export class WsTransportClient {
|
|
|
47
49
|
params.onMessage(new Uint8Array(event.data));
|
|
48
50
|
});
|
|
49
51
|
ws.addEventListener('error', (event) => {
|
|
50
|
-
|
|
52
|
+
settleConnect(() => {
|
|
51
53
|
this.connecting = null;
|
|
52
54
|
reject(new Error('WebSocket error', {
|
|
53
55
|
cause: event.error,
|
|
@@ -58,11 +60,15 @@ export class WsTransportClient {
|
|
|
58
60
|
const reason = this.closingByClient || event.reason === 'client'
|
|
59
61
|
? 'client'
|
|
60
62
|
: 'server';
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
63
|
+
this.webSocket = null;
|
|
64
|
+
this.connecting = null;
|
|
65
|
+
if (!opened) {
|
|
66
|
+
settleConnect(() => {
|
|
67
|
+
reject(new Error('WebSocket closed before opening'));
|
|
68
|
+
});
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
params.onDisconnect(reason);
|
|
66
72
|
});
|
|
67
73
|
});
|
|
68
74
|
this.webSocket = ws;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -10,16 +10,16 @@
|
|
|
10
10
|
}
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@nmtjs/client": "0.
|
|
14
|
-
"@nmtjs/common": "0.
|
|
13
|
+
"@nmtjs/client": "0.16.0-beta.1",
|
|
14
|
+
"@nmtjs/common": "0.16.0-beta.1"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
|
-
"@nmtjs/protocol": "0.
|
|
17
|
+
"@nmtjs/protocol": "0.16.0-beta.1"
|
|
18
18
|
},
|
|
19
19
|
"peerDependencies": {
|
|
20
|
-
"@nmtjs/client": "0.
|
|
21
|
-
"@nmtjs/
|
|
22
|
-
"@nmtjs/
|
|
20
|
+
"@nmtjs/client": "0.16.0-beta.1",
|
|
21
|
+
"@nmtjs/common": "0.16.0-beta.1",
|
|
22
|
+
"@nmtjs/protocol": "0.16.0-beta.1"
|
|
23
23
|
},
|
|
24
24
|
"files": [
|
|
25
25
|
"dist",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"LICENSE.md",
|
|
28
28
|
"README.md"
|
|
29
29
|
],
|
|
30
|
-
"version": "0.
|
|
30
|
+
"version": "0.16.0-beta.1",
|
|
31
31
|
"scripts": {
|
|
32
32
|
"clean-build": "rm -rf ./dist"
|
|
33
33
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type {
|
|
2
|
-
|
|
2
|
+
BidirectionalTransport,
|
|
3
3
|
ClientTransportFactory,
|
|
4
|
-
|
|
4
|
+
TransportConnectParams,
|
|
5
|
+
TransportSendOptions,
|
|
5
6
|
} from '@nmtjs/client'
|
|
6
7
|
import type { ProtocolVersion } from '@nmtjs/protocol'
|
|
7
8
|
import type { BaseClientFormat } from '@nmtjs/protocol/client'
|
|
@@ -23,7 +24,7 @@ export type WsClientTransportOptions = {
|
|
|
23
24
|
WebSocket?: typeof WebSocket
|
|
24
25
|
}
|
|
25
26
|
|
|
26
|
-
export class WsTransportClient {
|
|
27
|
+
export class WsTransportClient implements BidirectionalTransport {
|
|
27
28
|
type: ConnectionType.Bidirectional = ConnectionType.Bidirectional
|
|
28
29
|
|
|
29
30
|
protected webSocket: WebSocket | null = null
|
|
@@ -38,7 +39,7 @@ export class WsTransportClient {
|
|
|
38
39
|
this.options = { debug: false, ...options }
|
|
39
40
|
}
|
|
40
41
|
|
|
41
|
-
async connect(params:
|
|
42
|
+
async connect(params: TransportConnectParams) {
|
|
42
43
|
this.closingByClient = false
|
|
43
44
|
const url = new URL(
|
|
44
45
|
params.application ? `/${params.application}` : '/',
|
|
@@ -62,15 +63,18 @@ export class WsTransportClient {
|
|
|
62
63
|
ws.binaryType = 'arraybuffer'
|
|
63
64
|
|
|
64
65
|
this.connecting = new Promise((resolve, reject) => {
|
|
65
|
-
let
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
66
|
+
let connectSettled = false
|
|
67
|
+
let opened = false
|
|
68
|
+
|
|
69
|
+
const settleConnect = (fn: () => void) => {
|
|
70
|
+
if (connectSettled) return
|
|
71
|
+
connectSettled = true
|
|
69
72
|
fn()
|
|
70
73
|
}
|
|
71
74
|
|
|
72
75
|
ws.addEventListener('open', () => {
|
|
73
|
-
|
|
76
|
+
opened = true
|
|
77
|
+
settleConnect(() => {
|
|
74
78
|
this.connecting = null
|
|
75
79
|
params.onConnect()
|
|
76
80
|
resolve()
|
|
@@ -80,7 +84,7 @@ export class WsTransportClient {
|
|
|
80
84
|
params.onMessage(new Uint8Array(event.data as ArrayBuffer))
|
|
81
85
|
})
|
|
82
86
|
ws.addEventListener('error', (event) => {
|
|
83
|
-
|
|
87
|
+
settleConnect(() => {
|
|
84
88
|
this.connecting = null
|
|
85
89
|
reject(
|
|
86
90
|
new Error('WebSocket error', {
|
|
@@ -94,11 +98,17 @@ export class WsTransportClient {
|
|
|
94
98
|
this.closingByClient || event.reason === 'client'
|
|
95
99
|
? 'client'
|
|
96
100
|
: 'server'
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
101
|
+
this.webSocket = null
|
|
102
|
+
this.connecting = null
|
|
103
|
+
|
|
104
|
+
if (!opened) {
|
|
105
|
+
settleConnect(() => {
|
|
106
|
+
reject(new Error('WebSocket closed before opening'))
|
|
107
|
+
})
|
|
108
|
+
return
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
params.onDisconnect(reason)
|
|
102
112
|
})
|
|
103
113
|
})
|
|
104
114
|
|
|
@@ -115,7 +125,7 @@ export class WsTransportClient {
|
|
|
115
125
|
return closing
|
|
116
126
|
}
|
|
117
127
|
|
|
118
|
-
async send(message: ArrayBufferView, options:
|
|
128
|
+
async send(message: ArrayBufferView, options: TransportSendOptions) {
|
|
119
129
|
if (this.webSocket === null) throw new Error('WebSocket is not connected')
|
|
120
130
|
await this.connecting
|
|
121
131
|
if (!options.signal?.aborted) this.webSocket!.send(message as any)
|
|
@@ -123,9 +133,8 @@ export class WsTransportClient {
|
|
|
123
133
|
}
|
|
124
134
|
|
|
125
135
|
export type WsTransportFactory = ClientTransportFactory<
|
|
126
|
-
|
|
127
|
-
WsClientTransportOptions
|
|
128
|
-
WsTransportClient
|
|
136
|
+
WsTransportClient,
|
|
137
|
+
WsClientTransportOptions
|
|
129
138
|
>
|
|
130
139
|
|
|
131
140
|
export const WsTransportFactory: WsTransportFactory = (params, options) =>
|