extra-native-websocket 0.3.0 → 0.3.2

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 CHANGED
@@ -32,10 +32,10 @@ enum State {
32
32
  }
33
33
 
34
34
  class ExtraNativeWebSocket extends Emitter<{
35
+ open: [event: Event]
35
36
  message: [event: MessageEvent]
36
- close: [event: CloseEvent]
37
37
  error: [event: Event]
38
- open: [event: Event]
38
+ close: [event: CloseEvent]
39
39
  }> {
40
40
  constructor(createWebSocket: () => WebSocket)
41
41
 
@@ -10,10 +10,10 @@ export declare enum State {
10
10
  Closing = 3
11
11
  }
12
12
  export declare class ExtraNativeWebSocket extends Emitter<{
13
+ open: [event: Event];
13
14
  message: [event: MessageEvent];
14
- close: [event: CloseEvent];
15
15
  error: [event: Event];
16
- open: [event: Event];
16
+ close: [event: CloseEvent];
17
17
  }> {
18
18
  private createWebSocket;
19
19
  private instance?;
@@ -68,9 +68,9 @@ class ExtraNativeWebSocket extends structures_1.Emitter {
68
68
  const ws = this.instance = this.createWebSocket();
69
69
  ws.addEventListener('error', errorListener, { once: true });
70
70
  ws.addEventListener('open', event => this.emit('open', event));
71
- ws.addEventListener('close', event => this.emit('close', event));
72
71
  ws.addEventListener('message', event => this.emit('message', event));
73
72
  ws.addEventListener('error', event => this.emit('error', event));
73
+ ws.addEventListener('close', event => this.emit('close', event));
74
74
  this.setBinaryType(this.binaryType);
75
75
  ws.addEventListener('open', openListener, { once: true });
76
76
  function errorListener(event) {
@@ -1 +1 @@
1
- {"version":3,"file":"extra-native-websocket.js","sourceRoot":"","sources":["../../src/extra-native-websocket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extra-native-websocket.js","sourceRoot":"","sources":["../../src/extra-native-websocket.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,7 @@ const wait_for_1 = require("@blackglory/wait-for");
18
18
  function autoReconnectWithExponentialBackOff(ws, { baseTimeout, maxTimeout = Infinity, factor = 2, jitter = true }) {
19
19
  const controller = new AbortController();
20
20
  const removeErrorListener = ws.on('error', prelude_1.pass);
21
- let removeCloseListener = ws.on('close', closeListener);
21
+ let removeCloseListener = ws.once('close', closeListener);
22
22
  return () => {
23
23
  controller.abort();
24
24
  removeCloseListener();
@@ -26,7 +26,6 @@ function autoReconnectWithExponentialBackOff(ws, { baseTimeout, maxTimeout = Inf
26
26
  };
27
27
  function closeListener() {
28
28
  return __awaiter(this, void 0, void 0, function* () {
29
- removeCloseListener();
30
29
  let retries = 0;
31
30
  while (true) {
32
31
  if (controller.signal.aborted)
@@ -45,7 +44,7 @@ function autoReconnectWithExponentialBackOff(ws, { baseTimeout, maxTimeout = Inf
45
44
  yield ws.connect();
46
45
  if (controller.signal.aborted)
47
46
  return;
48
- removeCloseListener = ws.on('close', closeListener);
47
+ removeCloseListener = ws.once('close', closeListener);
49
48
  break;
50
49
  }
51
50
  catch (_a) {
@@ -1 +1 @@
1
- {"version":3,"file":"auto-reconnect-with-exponential-back-off.js","sourceRoot":"","sources":["../../../src/utils/auto-reconnect-with-exponential-back-off.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sEAAyE;AACzE,+CAAiE;AACjE,iDAA0C;AAC1C,iDAAqC;AACrC,mDAAsD;AAEtD,SAAgB,mCAAmC,CACjD,EAAwB,EACxB,EACE,WAAW,EACX,UAAU,GAAG,QAAQ,EACrB,MAAM,GAAG,CAAC,EACV,MAAM,GAAG,IAAI,EAMd;IAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IAGxC,MAAM,mBAAmB,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,cAAI,CAAC,CAAA;IAChD,IAAI,mBAAmB,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;IAEvD,OAAO,GAAG,EAAE;QACV,UAAU,CAAC,KAAK,EAAE,CAAA;QAClB,mBAAmB,EAAE,CAAA;QACrB,mBAAmB,EAAE,CAAA;IACvB,CAAC,CAAA;IAED,SAAe,aAAa;;YAC1B,mBAAmB,EAAE,CAAA;YAErB,IAAI,OAAO,GAAG,CAAC,CAAA;YACf,OAAO,IAAI,EAAE;gBACX,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAM;gBAErC,MAAM,IAAA,qBAAK,EAAC,IAAA,iDAAkC,EAAC;oBAC7C,OAAO;oBACP,WAAW;oBACX,UAAU;oBACV,MAAM;oBACN,MAAM;iBACP,CAAC,CAAC,CAAA;gBACH,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAM;gBAErC,IAAI;oBACF,MAAM,IAAA,0BAAe,EAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,8BAAK,CAAC,MAAM,CAAC,CAAA;oBAC3D,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;oBAClB,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;wBAAE,OAAM;oBAErC,mBAAmB,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;oBACnD,MAAK;iBACN;gBAAC,WAAM;oBACN,OAAO,EAAE,CAAA;oBACT,IAAA,cAAI,GAAE,CAAA;iBACP;aACF;QACH,CAAC;KAAA;AACH,CAAC;AAvDD,kFAuDC"}
1
+ {"version":3,"file":"auto-reconnect-with-exponential-back-off.js","sourceRoot":"","sources":["../../../src/utils/auto-reconnect-with-exponential-back-off.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sEAAyE;AACzE,+CAAiE;AACjE,iDAA0C;AAC1C,iDAAqC;AACrC,mDAAsD;AAEtD,SAAgB,mCAAmC,CACjD,EAAwB,EACxB,EACE,WAAW,EACX,UAAU,GAAG,QAAQ,EACrB,MAAM,GAAG,CAAC,EACV,MAAM,GAAG,IAAI,EAMd;IAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IAGxC,MAAM,mBAAmB,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,cAAI,CAAC,CAAA;IAChD,IAAI,mBAAmB,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;IAEzD,OAAO,GAAG,EAAE;QACV,UAAU,CAAC,KAAK,EAAE,CAAA;QAClB,mBAAmB,EAAE,CAAA;QACrB,mBAAmB,EAAE,CAAA;IACvB,CAAC,CAAA;IAED,SAAe,aAAa;;YAC1B,IAAI,OAAO,GAAG,CAAC,CAAA;YACf,OAAO,IAAI,EAAE;gBACX,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAM;gBAErC,MAAM,IAAA,qBAAK,EAAC,IAAA,iDAAkC,EAAC;oBAC7C,OAAO;oBACP,WAAW;oBACX,UAAU;oBACV,MAAM;oBACN,MAAM;iBACP,CAAC,CAAC,CAAA;gBACH,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAM;gBAErC,IAAI;oBACF,MAAM,IAAA,0BAAe,EAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,8BAAK,CAAC,MAAM,CAAC,CAAA;oBAC3D,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;oBAClB,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;wBAAE,OAAM;oBAErC,mBAAmB,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;oBACrD,MAAK;iBACN;gBAAC,WAAM;oBACN,OAAO,EAAE,CAAA;oBACT,IAAA,cAAI,GAAE,CAAA;iBACP;aACF;QACH,CAAC;KAAA;AACH,CAAC;AArDD,kFAqDC"}
@@ -17,14 +17,13 @@ const prelude_1 = require("@blackglory/prelude");
17
17
  const wait_for_1 = require("@blackglory/wait-for");
18
18
  function autoReconnect(ws, timeout = 0) {
19
19
  const controller = new extra_abort_1.AbortController();
20
- let removeCloseListener = ws.on('close', closeListener);
20
+ let removeCloseListener = ws.once('close', closeListener);
21
21
  return () => {
22
22
  controller.abort();
23
23
  removeCloseListener();
24
24
  };
25
25
  function closeListener() {
26
26
  return __awaiter(this, void 0, void 0, function* () {
27
- removeCloseListener();
28
27
  while (true) {
29
28
  if (controller.signal.aborted)
30
29
  return;
@@ -36,7 +35,7 @@ function autoReconnect(ws, timeout = 0) {
36
35
  yield ws.connect();
37
36
  if (controller.signal.aborted)
38
37
  return;
39
- removeCloseListener = ws.on('close', closeListener);
38
+ removeCloseListener = ws.once('close', closeListener);
40
39
  break;
41
40
  }
42
41
  catch (_a) {
@@ -1 +1 @@
1
- {"version":3,"file":"auto-reconnect.js","sourceRoot":"","sources":["../../../src/utils/auto-reconnect.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sEAAyE;AACzE,iDAAqC;AACrC,6CAA6C;AAC7C,iDAA0C;AAC1C,mDAAsD;AAEtD,SAAgB,aAAa,CAAC,EAAwB,EAAE,UAAkB,CAAC;IACzE,MAAM,UAAU,GAAG,IAAI,6BAAe,EAAE,CAAA;IAExC,IAAI,mBAAmB,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;IAEvD,OAAO,GAAG,EAAE;QACV,UAAU,CAAC,KAAK,EAAE,CAAA;QAClB,mBAAmB,EAAE,CAAA;IACvB,CAAC,CAAA;IAED,SAAe,aAAa;;YAC1B,mBAAmB,EAAE,CAAA;YAErB,OAAO,IAAI,EAAE;gBACX,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAM;gBAErC,MAAM,IAAA,qBAAK,EAAC,OAAO,CAAC,CAAA;gBACpB,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAM;gBAErC,IAAI;oBACF,MAAM,IAAA,0BAAe,EAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,8BAAK,CAAC,MAAM,CAAC,CAAA;oBAC3D,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;oBAClB,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;wBAAE,OAAM;oBAErC,mBAAmB,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;oBACnD,MAAK;iBACN;gBAAC,WAAM;oBACN,IAAA,cAAI,GAAE,CAAA;iBACP;aACF;QACH,CAAC;KAAA;AACH,CAAC;AA/BD,sCA+BC"}
1
+ {"version":3,"file":"auto-reconnect.js","sourceRoot":"","sources":["../../../src/utils/auto-reconnect.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sEAAyE;AACzE,iDAAqC;AACrC,6CAA6C;AAC7C,iDAA0C;AAC1C,mDAAsD;AAEtD,SAAgB,aAAa,CAAC,EAAwB,EAAE,UAAkB,CAAC;IACzE,MAAM,UAAU,GAAG,IAAI,6BAAe,EAAE,CAAA;IAExC,IAAI,mBAAmB,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;IAEzD,OAAO,GAAG,EAAE;QACV,UAAU,CAAC,KAAK,EAAE,CAAA;QAClB,mBAAmB,EAAE,CAAA;IACvB,CAAC,CAAA;IAED,SAAe,aAAa;;YAC1B,OAAO,IAAI,EAAE;gBACX,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAM;gBAErC,MAAM,IAAA,qBAAK,EAAC,OAAO,CAAC,CAAA;gBACpB,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAM;gBAErC,IAAI;oBACF,MAAM,IAAA,0BAAe,EAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,8BAAK,CAAC,MAAM,CAAC,CAAA;oBAC3D,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;oBAClB,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;wBAAE,OAAM;oBAErC,mBAAmB,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;oBACrD,MAAK;iBACN;gBAAC,WAAM;oBACN,IAAA,cAAI,GAAE,CAAA;iBACP;aACF;QACH,CAAC;KAAA;AACH,CAAC;AA7BD,sCA6BC"}
@@ -10,10 +10,10 @@ export declare enum State {
10
10
  Closing = 3
11
11
  }
12
12
  export declare class ExtraNativeWebSocket extends Emitter<{
13
+ open: [event: Event];
13
14
  message: [event: MessageEvent];
14
- close: [event: CloseEvent];
15
15
  error: [event: Event];
16
- open: [event: Event];
16
+ close: [event: CloseEvent];
17
17
  }> {
18
18
  private createWebSocket;
19
19
  private instance?;
@@ -68,9 +68,9 @@ class ExtraNativeWebSocket extends structures_1.Emitter {
68
68
  const ws = this.instance = this.createWebSocket();
69
69
  ws.addEventListener('error', errorListener, { once: true });
70
70
  ws.addEventListener('open', event => this.emit('open', event));
71
- ws.addEventListener('close', event => this.emit('close', event));
72
71
  ws.addEventListener('message', event => this.emit('message', event));
73
72
  ws.addEventListener('error', event => this.emit('error', event));
73
+ ws.addEventListener('close', event => this.emit('close', event));
74
74
  this.setBinaryType(this.binaryType);
75
75
  ws.addEventListener('open', openListener, { once: true });
76
76
  function errorListener(event) {
@@ -1 +1 @@
1
- {"version":3,"file":"extra-native-websocket.js","sourceRoot":"","sources":["../../src/extra-native-websocket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extra-native-websocket.js","sourceRoot":"","sources":["../../src/extra-native-websocket.ts"],"names":[],"mappings":"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"}
@@ -9,14 +9,13 @@ const wait_for_1 = require("@blackglory/wait-for");
9
9
  function autoReconnectWithExponentialBackOff(ws, { baseTimeout, maxTimeout = Infinity, factor = 2, jitter = true }) {
10
10
  const controller = new AbortController();
11
11
  const removeErrorListener = ws.on('error', prelude_1.pass);
12
- let removeCloseListener = ws.on('close', closeListener);
12
+ let removeCloseListener = ws.once('close', closeListener);
13
13
  return () => {
14
14
  controller.abort();
15
15
  removeCloseListener();
16
16
  removeErrorListener();
17
17
  };
18
18
  async function closeListener() {
19
- removeCloseListener();
20
19
  let retries = 0;
21
20
  while (true) {
22
21
  if (controller.signal.aborted)
@@ -35,7 +34,7 @@ function autoReconnectWithExponentialBackOff(ws, { baseTimeout, maxTimeout = Inf
35
34
  await ws.connect();
36
35
  if (controller.signal.aborted)
37
36
  return;
38
- removeCloseListener = ws.on('close', closeListener);
37
+ removeCloseListener = ws.once('close', closeListener);
39
38
  break;
40
39
  }
41
40
  catch (_a) {
@@ -1 +1 @@
1
- {"version":3,"file":"auto-reconnect-with-exponential-back-off.js","sourceRoot":"","sources":["../../../src/utils/auto-reconnect-with-exponential-back-off.ts"],"names":[],"mappings":";;;AAAA,sEAAyE;AACzE,+CAAiE;AACjE,iDAA0C;AAC1C,iDAAqC;AACrC,mDAAsD;AAEtD,SAAgB,mCAAmC,CACjD,EAAwB,EACxB,EACE,WAAW,EACX,UAAU,GAAG,QAAQ,EACrB,MAAM,GAAG,CAAC,EACV,MAAM,GAAG,IAAI,EAMd;IAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IAGxC,MAAM,mBAAmB,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,cAAI,CAAC,CAAA;IAChD,IAAI,mBAAmB,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;IAEvD,OAAO,GAAG,EAAE;QACV,UAAU,CAAC,KAAK,EAAE,CAAA;QAClB,mBAAmB,EAAE,CAAA;QACrB,mBAAmB,EAAE,CAAA;IACvB,CAAC,CAAA;IAED,KAAK,UAAU,aAAa;QAC1B,mBAAmB,EAAE,CAAA;QAErB,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,OAAO,IAAI,EAAE;YACX,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAM;YAErC,MAAM,IAAA,qBAAK,EAAC,IAAA,iDAAkC,EAAC;gBAC7C,OAAO;gBACP,WAAW;gBACX,UAAU;gBACV,MAAM;gBACN,MAAM;aACP,CAAC,CAAC,CAAA;YACH,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAM;YAErC,IAAI;gBACF,MAAM,IAAA,0BAAe,EAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,8BAAK,CAAC,MAAM,CAAC,CAAA;gBAC3D,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;gBAClB,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAM;gBAErC,mBAAmB,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;gBACnD,MAAK;aACN;YAAC,WAAM;gBACN,OAAO,EAAE,CAAA;gBACT,IAAA,cAAI,GAAE,CAAA;aACP;SACF;IACH,CAAC;AACH,CAAC;AAvDD,kFAuDC"}
1
+ {"version":3,"file":"auto-reconnect-with-exponential-back-off.js","sourceRoot":"","sources":["../../../src/utils/auto-reconnect-with-exponential-back-off.ts"],"names":[],"mappings":";;;AAAA,sEAAyE;AACzE,+CAAiE;AACjE,iDAA0C;AAC1C,iDAAqC;AACrC,mDAAsD;AAEtD,SAAgB,mCAAmC,CACjD,EAAwB,EACxB,EACE,WAAW,EACX,UAAU,GAAG,QAAQ,EACrB,MAAM,GAAG,CAAC,EACV,MAAM,GAAG,IAAI,EAMd;IAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IAGxC,MAAM,mBAAmB,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,cAAI,CAAC,CAAA;IAChD,IAAI,mBAAmB,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;IAEzD,OAAO,GAAG,EAAE;QACV,UAAU,CAAC,KAAK,EAAE,CAAA;QAClB,mBAAmB,EAAE,CAAA;QACrB,mBAAmB,EAAE,CAAA;IACvB,CAAC,CAAA;IAED,KAAK,UAAU,aAAa;QAC1B,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,OAAO,IAAI,EAAE;YACX,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAM;YAErC,MAAM,IAAA,qBAAK,EAAC,IAAA,iDAAkC,EAAC;gBAC7C,OAAO;gBACP,WAAW;gBACX,UAAU;gBACV,MAAM;gBACN,MAAM;aACP,CAAC,CAAC,CAAA;YACH,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAM;YAErC,IAAI;gBACF,MAAM,IAAA,0BAAe,EAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,8BAAK,CAAC,MAAM,CAAC,CAAA;gBAC3D,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;gBAClB,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAM;gBAErC,mBAAmB,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;gBACrD,MAAK;aACN;YAAC,WAAM;gBACN,OAAO,EAAE,CAAA;gBACT,IAAA,cAAI,GAAE,CAAA;aACP;SACF;IACH,CAAC;AACH,CAAC;AArDD,kFAqDC"}
@@ -8,13 +8,12 @@ const prelude_1 = require("@blackglory/prelude");
8
8
  const wait_for_1 = require("@blackglory/wait-for");
9
9
  function autoReconnect(ws, timeout = 0) {
10
10
  const controller = new extra_abort_1.AbortController();
11
- let removeCloseListener = ws.on('close', closeListener);
11
+ let removeCloseListener = ws.once('close', closeListener);
12
12
  return () => {
13
13
  controller.abort();
14
14
  removeCloseListener();
15
15
  };
16
16
  async function closeListener() {
17
- removeCloseListener();
18
17
  while (true) {
19
18
  if (controller.signal.aborted)
20
19
  return;
@@ -26,7 +25,7 @@ function autoReconnect(ws, timeout = 0) {
26
25
  await ws.connect();
27
26
  if (controller.signal.aborted)
28
27
  return;
29
- removeCloseListener = ws.on('close', closeListener);
28
+ removeCloseListener = ws.once('close', closeListener);
30
29
  break;
31
30
  }
32
31
  catch (_a) {
@@ -1 +1 @@
1
- {"version":3,"file":"auto-reconnect.js","sourceRoot":"","sources":["../../../src/utils/auto-reconnect.ts"],"names":[],"mappings":";;;AAAA,sEAAyE;AACzE,iDAAqC;AACrC,6CAA6C;AAC7C,iDAA0C;AAC1C,mDAAsD;AAEtD,SAAgB,aAAa,CAAC,EAAwB,EAAE,UAAkB,CAAC;IACzE,MAAM,UAAU,GAAG,IAAI,6BAAe,EAAE,CAAA;IAExC,IAAI,mBAAmB,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;IAEvD,OAAO,GAAG,EAAE;QACV,UAAU,CAAC,KAAK,EAAE,CAAA;QAClB,mBAAmB,EAAE,CAAA;IACvB,CAAC,CAAA;IAED,KAAK,UAAU,aAAa;QAC1B,mBAAmB,EAAE,CAAA;QAErB,OAAO,IAAI,EAAE;YACX,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAM;YAErC,MAAM,IAAA,qBAAK,EAAC,OAAO,CAAC,CAAA;YACpB,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAM;YAErC,IAAI;gBACF,MAAM,IAAA,0BAAe,EAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,8BAAK,CAAC,MAAM,CAAC,CAAA;gBAC3D,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;gBAClB,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAM;gBAErC,mBAAmB,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;gBACnD,MAAK;aACN;YAAC,WAAM;gBACN,IAAA,cAAI,GAAE,CAAA;aACP;SACF;IACH,CAAC;AACH,CAAC;AA/BD,sCA+BC"}
1
+ {"version":3,"file":"auto-reconnect.js","sourceRoot":"","sources":["../../../src/utils/auto-reconnect.ts"],"names":[],"mappings":";;;AAAA,sEAAyE;AACzE,iDAAqC;AACrC,6CAA6C;AAC7C,iDAA0C;AAC1C,mDAAsD;AAEtD,SAAgB,aAAa,CAAC,EAAwB,EAAE,UAAkB,CAAC;IACzE,MAAM,UAAU,GAAG,IAAI,6BAAe,EAAE,CAAA;IAExC,IAAI,mBAAmB,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;IAEzD,OAAO,GAAG,EAAE;QACV,UAAU,CAAC,KAAK,EAAE,CAAA;QAClB,mBAAmB,EAAE,CAAA;IACvB,CAAC,CAAA;IAED,KAAK,UAAU,aAAa;QAC1B,OAAO,IAAI,EAAE;YACX,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAM;YAErC,MAAM,IAAA,qBAAK,EAAC,OAAO,CAAC,CAAA;YACpB,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAM;YAErC,IAAI;gBACF,MAAM,IAAA,0BAAe,EAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,8BAAK,CAAC,MAAM,CAAC,CAAA;gBAC3D,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;gBAClB,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAM;gBAErC,mBAAmB,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;gBACrD,MAAK;aACN;YAAC,WAAM;gBACN,IAAA,cAAI,GAAE,CAAA;aACP;SACF;IACH,CAAC;AACH,CAAC;AA7BD,sCA6BC"}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "extra-native-websocket",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "files": [
7
7
  "lib",
8
- "dist"
8
+ "src"
9
9
  ],
10
10
  "main": "lib/es2018/index.js",
11
11
  "types": "lib/es2018/index.d.ts",
@@ -0,0 +1,137 @@
1
+ import { assert } from '@blackglory/prelude'
2
+ import { WebSocketError } from './websocket-error'
3
+ import { Queue, Emitter } from '@blackglory/structures'
4
+
5
+ export enum BinaryType {
6
+ Blob
7
+ , ArrayBuffer
8
+ }
9
+
10
+ export enum State {
11
+ Closed
12
+ , Connecting
13
+ , Connected
14
+ , Closing
15
+ }
16
+
17
+ enum ReadyState {
18
+ CONNECTING = 0
19
+ , OPEN = 1
20
+ , CLOSING = 2
21
+ , CLOSED = 3
22
+ }
23
+
24
+ export class ExtraNativeWebSocket extends Emitter<{
25
+ open: [event: Event]
26
+ message: [event: MessageEvent]
27
+ error: [event: Event]
28
+ close: [event: CloseEvent]
29
+ }> {
30
+ private instance?: WebSocket
31
+ private binaryType: BinaryType = BinaryType.Blob
32
+ protected unsentMessages = new Queue<string | ArrayBufferLike | Blob | ArrayBufferView>()
33
+
34
+ constructor(private createWebSocket: () => WebSocket) {
35
+ super()
36
+ }
37
+
38
+ getState(): State {
39
+ if (this.instance) {
40
+ switch (this.instance.readyState) {
41
+ case ReadyState.CONNECTING: return State.Connecting
42
+ case ReadyState.OPEN: return State.Connected
43
+ case ReadyState.CLOSING: return State.Closing
44
+ case ReadyState.CLOSED: return State.Closed
45
+ default: throw new Error('Unknown state')
46
+ }
47
+ } else {
48
+ return State.Closed
49
+ }
50
+ }
51
+
52
+ getBinaryType(): BinaryType {
53
+ return this.binaryType
54
+ }
55
+
56
+ setBinaryType(val: BinaryType): void {
57
+ this.binaryType = val
58
+
59
+ if (this.instance) {
60
+ switch (val) {
61
+ case BinaryType.Blob:
62
+ this.instance.binaryType = 'blob'
63
+ break
64
+ case BinaryType.ArrayBuffer:
65
+ this.instance.binaryType = 'arraybuffer'
66
+ break
67
+ default: throw new Error('Unknown binary type')
68
+ }
69
+ }
70
+ }
71
+
72
+ /**
73
+ * @throws {WebSocketError}
74
+ */
75
+ connect(): Promise<void> {
76
+ return new Promise((resolve, reject) => {
77
+ assert(this.getState() === State.Closed, 'WebSocket is not closed')
78
+
79
+ const self = this
80
+ const ws = this.instance = this.createWebSocket()
81
+
82
+ ws.addEventListener('error', errorListener, { once: true })
83
+
84
+ ws.addEventListener('open', event => this.emit('open', event))
85
+ ws.addEventListener('message', event => this.emit('message', event))
86
+ ws.addEventListener('error', event => this.emit('error', event))
87
+ ws.addEventListener('close', event => this.emit('close', event))
88
+
89
+ this.setBinaryType(this.binaryType)
90
+
91
+ ws.addEventListener('open', openListener, { once: true })
92
+
93
+ function errorListener(event: Event): void {
94
+ ws.addEventListener('close', closeListener, { once: true })
95
+ }
96
+
97
+ function closeListener(event: CloseEvent): void {
98
+ reject(new WebSocketError(event.code, event.reason))
99
+ }
100
+
101
+ function openListener(event: Event): void {
102
+ ws.removeEventListener('error', errorListener)
103
+ ws.removeEventListener('close', closeListener)
104
+ for (let size = self.unsentMessages.size; size--;) {
105
+ self.send(self.unsentMessages.dequeue()!)
106
+ }
107
+ resolve()
108
+ }
109
+ })
110
+ }
111
+
112
+ close(code?: number, reason?: string): Promise<void> {
113
+ return new Promise<void>(resolve => {
114
+ assert(this.instance, 'WebSocket is not created')
115
+
116
+ switch (this.getState()) {
117
+ case State.Closed:
118
+ resolve()
119
+ break
120
+ case State.Closing:
121
+ this.instance.addEventListener('close', () => resolve(), { once: true })
122
+ break
123
+ default:
124
+ this.instance.addEventListener('close', () => resolve(), { once: true })
125
+ this.instance.close(code, reason)
126
+ }
127
+ })
128
+ }
129
+
130
+ send(data: string | ArrayBufferLike | Blob | ArrayBufferView): void {
131
+ if (this.getState() === State.Connected) {
132
+ this.instance!.send(data)
133
+ } else {
134
+ this.unsentMessages.enqueue(data)
135
+ }
136
+ }
137
+ }
package/src/index.ts ADDED
@@ -0,0 +1,3 @@
1
+ export * from './extra-native-websocket'
2
+ export * from './websocket-error'
3
+ export * from './utils'
@@ -0,0 +1,60 @@
1
+ import { ExtraNativeWebSocket, State } from '@src/extra-native-websocket'
2
+ import { calculateExponentialBackoffTimeout } from 'extra-timers'
3
+ import { pass } from '@blackglory/prelude'
4
+ import { delay } from 'extra-promise'
5
+ import { waitForFunction } from '@blackglory/wait-for'
6
+
7
+ export function autoReconnectWithExponentialBackOff(
8
+ ws: ExtraNativeWebSocket
9
+ , {
10
+ baseTimeout
11
+ , maxTimeout = Infinity
12
+ , factor = 2
13
+ , jitter = true
14
+ }: {
15
+ baseTimeout: number
16
+ maxTimeout?: number
17
+ factor?: number
18
+ jitter?: boolean
19
+ }
20
+ ): () => void {
21
+ const controller = new AbortController()
22
+
23
+ // Make sure the error listener is added, prevent crashes due to uncaught errors.
24
+ const removeErrorListener = ws.on('error', pass)
25
+ let removeCloseListener = ws.once('close', closeListener)
26
+
27
+ return () => {
28
+ controller.abort()
29
+ removeCloseListener()
30
+ removeErrorListener()
31
+ }
32
+
33
+ async function closeListener(): Promise<void> {
34
+ let retries = 0
35
+ while (true) {
36
+ if (controller.signal.aborted) return
37
+
38
+ await delay(calculateExponentialBackoffTimeout({
39
+ retries
40
+ , baseTimeout
41
+ , maxTimeout
42
+ , factor
43
+ , jitter
44
+ }))
45
+ if (controller.signal.aborted) return
46
+
47
+ try {
48
+ await waitForFunction(() => ws.getState() === State.Closed)
49
+ await ws.connect()
50
+ if (controller.signal.aborted) return
51
+
52
+ removeCloseListener = ws.once('close', closeListener)
53
+ break
54
+ } catch {
55
+ retries++
56
+ pass()
57
+ }
58
+ }
59
+ }
60
+ }
@@ -0,0 +1,36 @@
1
+ import { ExtraNativeWebSocket, State } from '@src/extra-native-websocket'
2
+ import { delay } from 'extra-promise'
3
+ import { AbortController } from 'extra-abort'
4
+ import { pass } from '@blackglory/prelude'
5
+ import { waitForFunction } from '@blackglory/wait-for'
6
+
7
+ export function autoReconnect(ws: ExtraNativeWebSocket, timeout: number = 0): () => void {
8
+ const controller = new AbortController()
9
+
10
+ let removeCloseListener = ws.once('close', closeListener)
11
+
12
+ return () => {
13
+ controller.abort()
14
+ removeCloseListener()
15
+ }
16
+
17
+ async function closeListener(): Promise<void> {
18
+ while (true) {
19
+ if (controller.signal.aborted) return
20
+
21
+ await delay(timeout)
22
+ if (controller.signal.aborted) return
23
+
24
+ try {
25
+ await waitForFunction(() => ws.getState() === State.Closed)
26
+ await ws.connect()
27
+ if (controller.signal.aborted) return
28
+
29
+ removeCloseListener = ws.once('close', closeListener)
30
+ break
31
+ } catch {
32
+ pass()
33
+ }
34
+ }
35
+ }
36
+ }
@@ -0,0 +1,2 @@
1
+ export * from './auto-reconnect'
2
+ export * from './auto-reconnect-with-exponential-back-off'
@@ -0,0 +1,17 @@
1
+ import { CustomError } from '@blackglory/errors'
2
+
3
+ export class WebSocketError extends CustomError {
4
+ readonly code: number
5
+ readonly reason: string
6
+
7
+ constructor(code: number, reason: string) {
8
+ if (reason) {
9
+ super(`${code}: ${reason}`)
10
+ } else {
11
+ super(`${code}`)
12
+ }
13
+
14
+ this.code = code
15
+ this.reason = reason
16
+ }
17
+ }