@socket-mesh/client 17.1.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/transport.js ADDED
@@ -0,0 +1,459 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { Request } from "@socket-mesh/request";
11
+ import { BadConnectionError, hydrateError, socketProtocolErrorStatuses, TimeoutError } from '@socket-mesh/errors';
12
+ import * as ws from "ws";
13
+ import { SocketState } from "./socket-state";
14
+ /*
15
+ let WebSocket;
16
+ let createWebSocket;
17
+
18
+ if (global.WebSocket) {
19
+ WebSocket = global.WebSocket;
20
+ createWebSocket = function (uri, options) {
21
+ return new WebSocket(uri);
22
+ };
23
+ } else {
24
+ WebSocket = require('ws');
25
+ createWebSocket = function (uri, options) {
26
+ return new WebSocket(uri, [], options);
27
+ };
28
+ }
29
+ */
30
+ //let WebSocket = 'WebSocket' in global ? global.WebSocket : ws.WebSocket;
31
+ function createWebSocket(uri, options) {
32
+ return new ws.WebSocket(uri, [], options);
33
+ }
34
+ export class Transport {
35
+ constructor(authEngine, codecEngine, options, wsOptions, handlers) {
36
+ this.state = SocketState.CLOSED;
37
+ this.auth = authEngine;
38
+ this.codec = codecEngine;
39
+ this.options = options;
40
+ this.wsOptions = wsOptions;
41
+ this.protocolVersion = options.protocolVersion;
42
+ this.connectTimeout = options.connectTimeout;
43
+ this._pingTimeout = options.pingTimeout;
44
+ this.pingTimeoutDisabled = !!options.pingTimeoutDisabled;
45
+ this.callIdGenerator = options.callIdGenerator;
46
+ this.authTokenName = options.authTokenName;
47
+ this.isBufferingBatch = false;
48
+ this._pingTimeoutTicker = null;
49
+ this._callbackMap = {};
50
+ this._batchBuffer = [];
51
+ if (!handlers) {
52
+ handlers = {};
53
+ }
54
+ this._onOpenHandler = handlers.onOpen || function () { };
55
+ this._onOpenAbortHandler = handlers.onOpenAbort || function () { };
56
+ this._onCloseHandler = handlers.onClose || function () { };
57
+ this._onEventHandler = handlers.onEvent || function () { };
58
+ this._onErrorHandler = handlers.onError || function () { };
59
+ this._onInboundInvokeHandler = handlers.onInboundInvoke || function () { };
60
+ this._onInboundTransmitHandler = handlers.onInboundTransmit || function () { };
61
+ // Open the connection.
62
+ this.state = SocketState.CONNECTING;
63
+ let uri = this.uri();
64
+ let wsSocket = createWebSocket(uri, wsOptions);
65
+ wsSocket.binaryType = this.options.binaryType;
66
+ this.socket = wsSocket;
67
+ wsSocket.onopen = () => {
68
+ this._onOpen();
69
+ };
70
+ wsSocket.onclose = (event) => {
71
+ let code;
72
+ if (event.code == null) {
73
+ // This is to handle an edge case in React Native whereby
74
+ // event.code is undefined when the mobile device is locked.
75
+ // TODO: This is not ideal since this condition could also apply to
76
+ // an abnormal close (no close control frame) which would be a 1006.
77
+ code = 1005;
78
+ }
79
+ else {
80
+ code = event.code;
81
+ }
82
+ this._destroy(code, event.reason);
83
+ };
84
+ wsSocket.onmessage = (message) => {
85
+ this._onMessage(message.data);
86
+ };
87
+ wsSocket.onerror = (error) => {
88
+ // The onclose event will be called automatically after the onerror event
89
+ // if the socket is connected - Otherwise, if it's in the middle of
90
+ // connecting, we want to close it manually with a 1006 - This is necessary
91
+ // to prevent inconsistent behavior when running the client in Node.js
92
+ // vs in a browser.
93
+ if (this.state === SocketState.CONNECTING) {
94
+ this._destroy(1006);
95
+ }
96
+ };
97
+ this._connectTimeoutRef = setTimeout(() => {
98
+ this._destroy(4007);
99
+ this.socket.close(4007);
100
+ }, this.connectTimeout);
101
+ if (this.protocolVersion === 1) {
102
+ this._handlePing = (message) => {
103
+ if (message === '#1') {
104
+ this._resetPingTimeout();
105
+ if (this.socket.readyState === this.socket.OPEN) {
106
+ this.send('#2');
107
+ }
108
+ return true;
109
+ }
110
+ return false;
111
+ };
112
+ }
113
+ else {
114
+ this._handlePing = (message) => {
115
+ if (message === '') {
116
+ this._resetPingTimeout();
117
+ if (this.socket.readyState === this.socket.OPEN) {
118
+ this.send('');
119
+ }
120
+ return true;
121
+ }
122
+ return false;
123
+ };
124
+ }
125
+ }
126
+ get pingTimeout() {
127
+ return this._pingTimeout;
128
+ }
129
+ set pingTimeout(value) {
130
+ this._pingTimeout = value;
131
+ this._resetPingTimeout();
132
+ }
133
+ uri() {
134
+ let scheme;
135
+ if (this.options.protocolScheme == null) {
136
+ scheme = this.options.secure ? 'wss' : 'ws';
137
+ }
138
+ else {
139
+ scheme = this.options.protocolScheme;
140
+ }
141
+ let searchParams = new URLSearchParams(typeof this.options.query === 'string' ? this.options.query : '');
142
+ if (typeof this.options.query === 'object') {
143
+ for (let [key, value] of Object.entries(this.options.query || {})) {
144
+ if (Array.isArray(value)) {
145
+ for (let item of value) {
146
+ searchParams.append(key, item);
147
+ }
148
+ }
149
+ else {
150
+ searchParams.set(key, value);
151
+ }
152
+ }
153
+ }
154
+ if (this.options.timestampRequests) {
155
+ searchParams.set(this.options.timestampParam, (new Date()).getTime().toString());
156
+ }
157
+ let qs = searchParams.toString();
158
+ if (qs.length) {
159
+ qs = '?' + qs;
160
+ }
161
+ let host;
162
+ let path;
163
+ if (this.options.socketPath == null) {
164
+ if (this.options.host) {
165
+ host = this.options.host;
166
+ }
167
+ else {
168
+ let port = '';
169
+ if (this.options.port && ((scheme === 'wss' && this.options.port !== 443)
170
+ || (scheme === 'ws' && this.options.port !== 80))) {
171
+ port = ':' + this.options.port;
172
+ }
173
+ host = this.options.hostname + port;
174
+ }
175
+ path = this.options.path;
176
+ }
177
+ else {
178
+ host = this.options.socketPath;
179
+ path = `:${this.options.path}`;
180
+ }
181
+ return scheme + '://' + host + path + qs;
182
+ }
183
+ _onOpen() {
184
+ return __awaiter(this, void 0, void 0, function* () {
185
+ clearTimeout(this._connectTimeoutRef);
186
+ this._resetPingTimeout();
187
+ let status;
188
+ try {
189
+ status = yield this._handshake();
190
+ }
191
+ catch (err) {
192
+ if (err.statusCode == null) {
193
+ err.statusCode = 4003;
194
+ }
195
+ this._onError(err);
196
+ this._destroy(err.statusCode, err.toString());
197
+ this.socket.close(err.statusCode);
198
+ return;
199
+ }
200
+ this.state = SocketState.OPEN;
201
+ if (status) {
202
+ this._pingTimeout = status.pingTimeout;
203
+ }
204
+ this._resetPingTimeout();
205
+ this._onOpenHandler(status);
206
+ });
207
+ }
208
+ _handshake() {
209
+ return __awaiter(this, void 0, void 0, function* () {
210
+ let token = yield this.auth.loadToken(this.authTokenName);
211
+ // Don't wait for this.state to be 'open'.
212
+ // The underlying WebSocket (this.socket) is already open.
213
+ let options = {
214
+ force: true
215
+ };
216
+ let status = yield this.invoke('#handshake', { authToken: token }, options);
217
+ if (status) {
218
+ // Add the token which was used as part of authentication attempt
219
+ // to the status object.
220
+ status.authToken = token;
221
+ if (status.authError) {
222
+ status.authError = hydrateError(status.authError);
223
+ }
224
+ }
225
+ return status;
226
+ });
227
+ }
228
+ _abortAllPendingEventsDueToBadConnection(failureType) {
229
+ Object.keys(this._callbackMap || {}).forEach((i) => {
230
+ let eventObject = this._callbackMap[i];
231
+ delete this._callbackMap[i];
232
+ clearTimeout(eventObject.timeout);
233
+ delete eventObject.timeout;
234
+ let errorMessage = `Event "${eventObject.event}" was aborted due to a bad connection`;
235
+ let badConnectionError = new BadConnectionError(errorMessage, failureType);
236
+ let callback = eventObject.callback;
237
+ if (callback) {
238
+ delete eventObject.callback;
239
+ callback.call(eventObject, badConnectionError, eventObject);
240
+ }
241
+ });
242
+ }
243
+ _destroy(code, reason) {
244
+ if (!reason && socketProtocolErrorStatuses[code]) {
245
+ reason = socketProtocolErrorStatuses[code];
246
+ }
247
+ delete this.socket.onopen;
248
+ delete this.socket.onclose;
249
+ delete this.socket.onmessage;
250
+ delete this.socket.onerror;
251
+ clearTimeout(this._connectTimeoutRef);
252
+ clearTimeout(this._pingTimeoutTicker);
253
+ if (this.state === SocketState.OPEN) {
254
+ this.state = SocketState.CLOSED;
255
+ this._abortAllPendingEventsDueToBadConnection('disconnect');
256
+ this._onCloseHandler({ code, reason });
257
+ }
258
+ else if (this.state === SocketState.CONNECTING) {
259
+ this.state = SocketState.CLOSED;
260
+ this._abortAllPendingEventsDueToBadConnection('connectAbort');
261
+ this._onOpenAbortHandler({ code, reason });
262
+ }
263
+ else if (this.state === SocketState.CLOSED) {
264
+ this._abortAllPendingEventsDueToBadConnection('connectAbort');
265
+ }
266
+ }
267
+ _processInboundPacket(packet, message) {
268
+ if (packet && packet.event != null) {
269
+ if (packet.cid == null) {
270
+ this._onInboundTransmitHandler(Object.assign({}, packet));
271
+ }
272
+ else {
273
+ const request = new Request(this, packet.cid, packet.event, packet.data);
274
+ this._onInboundInvokeHandler(request);
275
+ }
276
+ }
277
+ else if (packet && packet.rid != null) {
278
+ const eventObject = this._callbackMap[packet.rid];
279
+ if (eventObject) {
280
+ clearTimeout(eventObject.timeout);
281
+ delete eventObject.timeout;
282
+ delete this._callbackMap[packet.rid];
283
+ if (eventObject.callback) {
284
+ const rehydratedError = hydrateError(packet.error);
285
+ eventObject.callback(rehydratedError, packet.data);
286
+ }
287
+ }
288
+ }
289
+ else {
290
+ this._onEventHandler({ event: 'raw', data: { message } });
291
+ }
292
+ }
293
+ _onMessage(message) {
294
+ this._onEventHandler({ event: 'message', data: { message } });
295
+ if (this._handlePing(message)) {
296
+ return;
297
+ }
298
+ let packet = this.decode(message);
299
+ if (Array.isArray(packet)) {
300
+ let len = packet.length;
301
+ for (let i = 0; i < len; i++) {
302
+ this._processInboundPacket(packet[i], message);
303
+ }
304
+ }
305
+ else {
306
+ this._processInboundPacket(packet, message);
307
+ }
308
+ }
309
+ _onError(error) {
310
+ this._onErrorHandler({ error });
311
+ }
312
+ _resetPingTimeout() {
313
+ if (this.pingTimeoutDisabled) {
314
+ return;
315
+ }
316
+ clearTimeout(this._pingTimeoutTicker);
317
+ this._pingTimeoutTicker = setTimeout(() => {
318
+ this._destroy(4000);
319
+ this.socket.close(4000);
320
+ }, this._pingTimeout);
321
+ }
322
+ clearAllListeners() {
323
+ this._onOpenHandler = () => { };
324
+ this._onOpenAbortHandler = () => { };
325
+ this._onCloseHandler = () => { };
326
+ this._onEventHandler = () => { };
327
+ this._onErrorHandler = () => { };
328
+ this._onInboundInvokeHandler = () => { };
329
+ this._onInboundTransmitHandler = () => { };
330
+ }
331
+ startBatch() {
332
+ this.isBufferingBatch = true;
333
+ this._batchBuffer = [];
334
+ }
335
+ flushBatch() {
336
+ this.isBufferingBatch = false;
337
+ if (!this._batchBuffer.length) {
338
+ return;
339
+ }
340
+ let serializedBatch = this.serializeObject(this._batchBuffer);
341
+ this._batchBuffer = [];
342
+ this.send(serializedBatch);
343
+ }
344
+ cancelBatch() {
345
+ this.isBufferingBatch = false;
346
+ this._batchBuffer = [];
347
+ }
348
+ getBytesReceived() {
349
+ return ('bytesReceived' in this.socket) ? this.socket.bytesReceived : undefined;
350
+ }
351
+ close(code, reason) {
352
+ if (this.state === SocketState.OPEN || this.state === SocketState.CONNECTING) {
353
+ code = code || 1000;
354
+ this._destroy(code, reason);
355
+ this.socket.close(code, reason);
356
+ }
357
+ }
358
+ transmitObject(eventObject) {
359
+ let simpleEventObject = {
360
+ event: eventObject.event,
361
+ data: eventObject.data
362
+ };
363
+ if (eventObject.callback) {
364
+ simpleEventObject.cid = eventObject.cid = this.callIdGenerator();
365
+ this._callbackMap[eventObject.cid] = eventObject;
366
+ }
367
+ this.sendObject(simpleEventObject);
368
+ return eventObject.cid || null;
369
+ }
370
+ _handleEventAckTimeout(eventObject) {
371
+ if (eventObject.cid) {
372
+ delete this._callbackMap[eventObject.cid];
373
+ }
374
+ delete eventObject.timeout;
375
+ let callback = eventObject.callback;
376
+ if (callback) {
377
+ delete eventObject.callback;
378
+ let error = new TimeoutError(`Event response for "${eventObject.event}" timed out`);
379
+ callback.call(eventObject, error, eventObject);
380
+ }
381
+ }
382
+ transmit(event, data, options) {
383
+ let eventObject = {
384
+ event,
385
+ data
386
+ };
387
+ if (this.state === SocketState.OPEN || options.force) {
388
+ this.transmitObject(eventObject);
389
+ }
390
+ return Promise.resolve();
391
+ }
392
+ invokeRaw(event, data, options, callback) {
393
+ let eventObject = {
394
+ event,
395
+ data,
396
+ callback
397
+ };
398
+ if (!options.noTimeout) {
399
+ eventObject.timeout = setTimeout(() => {
400
+ this._handleEventAckTimeout(eventObject);
401
+ }, this.options.ackTimeout);
402
+ }
403
+ let cid = null;
404
+ if (this.state === SocketState.OPEN || options.force) {
405
+ cid = this.transmitObject(eventObject);
406
+ }
407
+ return cid;
408
+ }
409
+ invoke(event, data, options) {
410
+ return new Promise((resolve, reject) => {
411
+ this.invokeRaw(event, data, options, (err, data) => {
412
+ if (err) {
413
+ reject(err);
414
+ return;
415
+ }
416
+ resolve(data);
417
+ });
418
+ });
419
+ }
420
+ cancelPendingResponse(cid) {
421
+ delete this._callbackMap[cid];
422
+ }
423
+ decode(message) {
424
+ return this.codec.decode(message);
425
+ }
426
+ encode(object) {
427
+ return this.codec.encode(object);
428
+ }
429
+ send(data) {
430
+ if (this.socket.readyState !== this.socket.OPEN) {
431
+ this._destroy(1005);
432
+ }
433
+ else {
434
+ this.socket.send(data);
435
+ }
436
+ }
437
+ serializeObject(object) {
438
+ let str;
439
+ try {
440
+ str = this.encode(object);
441
+ }
442
+ catch (error) {
443
+ this._onError(error);
444
+ return null;
445
+ }
446
+ return str;
447
+ }
448
+ sendObject(object) {
449
+ if (this.isBufferingBatch) {
450
+ this._batchBuffer.push(object);
451
+ return;
452
+ }
453
+ let str = this.serializeObject(object);
454
+ if (str != null) {
455
+ this.send(str);
456
+ }
457
+ }
458
+ }
459
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
package/wait.d.ts ADDED
@@ -0,0 +1 @@
1
+ export declare function wait(duration: number): Promise<void>;
package/wait.js ADDED
@@ -0,0 +1,8 @@
1
+ export function wait(duration) {
2
+ return new Promise(resolve => {
3
+ setTimeout(() => {
4
+ resolve();
5
+ }, duration);
6
+ });
7
+ }
8
+ //# sourceMappingURL=wait.js.map
package/wait.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wait.js","sourceRoot":"","sources":["../src/wait.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,IAAI,CAAC,QAAgB;IACnC,OAAO,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;QACjC,UAAU,CAAC,GAAG,EAAE;YACd,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,QAAQ,CAAC,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * WebSocket constructor.
3
+ *
4
+ * The third `opts` options object gets ignored in web browsers, since it's
5
+ * non-standard, and throws a TypeError if passed to the constructor.
6
+ * See: https://github.com/einaros/ws/issues/227
7
+ *
8
+ * @param {String} uri
9
+ * @param {Array} protocols (optional)
10
+ * @api public
11
+ */
12
+ declare function ws(uri: string | URL, protocols?: string | string[]): WebSocket;
13
+ declare namespace ws {
14
+ var prototype: WebSocket;
15
+ }
package/ws-browser.js ADDED
@@ -0,0 +1,40 @@
1
+ //let global;
2
+ if (typeof global !== 'undefined') {
3
+ // global spec defines a reference to the global object called 'global'
4
+ // https://github.com/tc39/proposal-global
5
+ // `global` is also defined in NodeJS
6
+ }
7
+ else if (typeof window !== 'undefined') {
8
+ // window is defined in browsers
9
+ global = window;
10
+ }
11
+ else if (typeof self !== 'undefined') {
12
+ // self is defined in WebWorkers
13
+ global = self;
14
+ }
15
+ /**
16
+ * WebSocket constructor.
17
+ *
18
+ * The third `opts` options object gets ignored in web browsers, since it's
19
+ * non-standard, and throws a TypeError if passed to the constructor.
20
+ * See: https://github.com/einaros/ws/issues/227
21
+ *
22
+ * @param {String} uri
23
+ * @param {Array} protocols (optional)
24
+ * @api public
25
+ */
26
+ function ws(uri, protocols) {
27
+ let instance;
28
+ if (protocols) {
29
+ instance = new WebSocket(uri, protocols);
30
+ }
31
+ else {
32
+ instance = new WebSocket(uri);
33
+ }
34
+ return instance;
35
+ }
36
+ if (WebSocket) {
37
+ ws.prototype = WebSocket.prototype;
38
+ }
39
+ module.exports = WebSocket ? ws : null;
40
+ //# sourceMappingURL=ws-browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws-browser.js","sourceRoot":"","sources":["../src/ws-browser.ts"],"names":[],"mappings":"AAAA,aAAa;AAEb,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;IAClC,uEAAuE;IACvE,0CAA0C;IAC1C,qCAAqC;CACrC;KACI,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;IACvC,gCAAgC;IAChC,MAAM,GAAG,MAAM,CAAC;CAChB;KACI,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;IACrC,gCAAgC;IAChC,MAAM,GAAG,IAAI,CAAC;CACd;AAED;;;;;;;;;;GAUG;AACH,SAAS,EAAE,CAAC,GAAiB,EAAE,SAA6B;IAC1D,IAAI,QAAQ,CAAC;IACb,IAAI,SAAS,EAAE;QACb,QAAQ,GAAG,IAAI,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;KAC1C;SAAM;QACL,QAAQ,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;KAC/B;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,IAAI,SAAS,EAAE;IACd,EAAE,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;CACnC;AAED,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC"}