@eleven-am/pondsocket 0.1.214 → 0.1.216

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/server/server.js CHANGED
@@ -10,7 +10,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
10
10
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
11
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
12
  };
13
- var _PondSocket_instances, _PondSocket_server, _PondSocket_exclusiveServer, _PondSocket_socketServer, _PondSocket_backend, _PondSocket_middleware, _PondSocket_handleUpgrade, _PondSocket_manageHeartbeat, _PondSocket_init, _PondSocket_getCookies;
13
+ var _PondSocket_instances, _PondSocket_server, _PondSocket_exclusiveServer, _PondSocket_socketServer, _PondSocket_backend, _PondSocket_middleware, _PondSocket_maxMessageSize, _PondSocket_heartbeatMs, _PondSocket_heartbeatTimer, _PondSocket_backendReady, _PondSocket_handleUpgrade, _PondSocket_manageHeartbeat, _PondSocket_init, _PondSocket_getCookies;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.PondSocket = void 0;
16
16
  const http_1 = require("http");
@@ -22,17 +22,23 @@ const endpointEngine_1 = require("../engines/endpointEngine");
22
22
  const matcher_1 = require("../matcher/matcher");
23
23
  const endpoint_1 = require("../wrappers/endpoint");
24
24
  class PondSocket {
25
- constructor({ server, socketServer, exclusiveServer = true, distributedBackend, } = {}) {
25
+ constructor({ server, socketServer, exclusiveServer = true, distributedBackend, maxMessageSize = 1024 * 1024, heartbeatInterval = 30000, } = {}) {
26
26
  _PondSocket_instances.add(this);
27
27
  _PondSocket_server.set(this, void 0);
28
28
  _PondSocket_exclusiveServer.set(this, void 0);
29
29
  _PondSocket_socketServer.set(this, void 0);
30
30
  _PondSocket_backend.set(this, void 0);
31
31
  _PondSocket_middleware.set(this, void 0);
32
+ _PondSocket_maxMessageSize.set(this, void 0);
33
+ _PondSocket_heartbeatMs.set(this, void 0);
34
+ _PondSocket_heartbeatTimer.set(this, null);
35
+ _PondSocket_backendReady.set(this, null);
32
36
  __classPrivateFieldSet(this, _PondSocket_middleware, new middleware_1.Middleware(), "f");
33
37
  __classPrivateFieldSet(this, _PondSocket_exclusiveServer, exclusiveServer, "f");
34
38
  __classPrivateFieldSet(this, _PondSocket_server, server !== null && server !== void 0 ? server : new http_1.Server(), "f");
35
39
  __classPrivateFieldSet(this, _PondSocket_backend, distributedBackend !== null && distributedBackend !== void 0 ? distributedBackend : null, "f");
40
+ __classPrivateFieldSet(this, _PondSocket_maxMessageSize, maxMessageSize, "f");
41
+ __classPrivateFieldSet(this, _PondSocket_heartbeatMs, heartbeatInterval, "f");
36
42
  __classPrivateFieldSet(this, _PondSocket_socketServer, socketServer !== null && socketServer !== void 0 ? socketServer : new ws_1.WebSocketServer({ noServer: true }), "f");
37
43
  __classPrivateFieldGet(this, _PondSocket_instances, "m", _PondSocket_init).call(this);
38
44
  }
@@ -45,14 +51,36 @@ class PondSocket {
45
51
  /**
46
52
  * Close the server
47
53
  */
48
- close(callback) {
54
+ close(callback, timeout = 5000) {
55
+ var _a, _b;
56
+ if (__classPrivateFieldGet(this, _PondSocket_heartbeatTimer, "f")) {
57
+ clearInterval(__classPrivateFieldGet(this, _PondSocket_heartbeatTimer, "f"));
58
+ __classPrivateFieldSet(this, _PondSocket_heartbeatTimer, null, "f");
59
+ }
60
+ __classPrivateFieldGet(this, _PondSocket_socketServer, "f").clients.forEach((socket) => {
61
+ if (socket.readyState === ws_1.WebSocket.OPEN) {
62
+ socket.close(1001, 'Server shutting down');
63
+ }
64
+ });
65
+ const forceClose = setTimeout(() => {
66
+ __classPrivateFieldGet(this, _PondSocket_socketServer, "f").clients.forEach((socket) => {
67
+ if (socket.readyState !== ws_1.WebSocket.CLOSED) {
68
+ socket.terminate();
69
+ }
70
+ });
71
+ __classPrivateFieldGet(this, _PondSocket_socketServer, "f").close();
72
+ }, timeout);
73
+ __classPrivateFieldGet(this, _PondSocket_socketServer, "f").close(() => {
74
+ clearTimeout(forceClose);
75
+ });
76
+ __classPrivateFieldSet(this, _PondSocket_backendReady, (_b = (_a = __classPrivateFieldGet(this, _PondSocket_backendReady, "f")) === null || _a === void 0 ? void 0 : _a.catch(() => { }).then(() => { var _a; return (_a = __classPrivateFieldGet(this, _PondSocket_backend, "f")) === null || _a === void 0 ? void 0 : _a.cleanup(); }).catch(() => { })) !== null && _b !== void 0 ? _b : null, "f");
49
77
  return __classPrivateFieldGet(this, _PondSocket_server, "f").close(callback);
50
78
  }
51
79
  /**
52
80
  * Create a new endpoint
53
81
  */
54
82
  createEndpoint(path, handler) {
55
- const endpoint = new endpointEngine_1.EndpointEngine(String(path), __classPrivateFieldGet(this, _PondSocket_backend, "f"));
83
+ const endpoint = new endpointEngine_1.EndpointEngine(String(path), __classPrivateFieldGet(this, _PondSocket_backend, "f"), __classPrivateFieldGet(this, _PondSocket_maxMessageSize, "f"));
56
84
  __classPrivateFieldGet(this, _PondSocket_middleware, "f").use((req, params, next) => {
57
85
  const event = (0, matcher_1.parseAddress)(path, req.address);
58
86
  if (!event) {
@@ -71,8 +99,8 @@ class PondSocket {
71
99
  }
72
100
  }
73
101
  exports.PondSocket = PondSocket;
74
- _PondSocket_server = new WeakMap(), _PondSocket_exclusiveServer = new WeakMap(), _PondSocket_socketServer = new WeakMap(), _PondSocket_backend = new WeakMap(), _PondSocket_middleware = new WeakMap(), _PondSocket_instances = new WeakSet(), _PondSocket_handleUpgrade = function _PondSocket_handleUpgrade(req, socket, head) {
75
- const clientId = req.headers['sec-websocket-key'];
102
+ _PondSocket_server = new WeakMap(), _PondSocket_exclusiveServer = new WeakMap(), _PondSocket_socketServer = new WeakMap(), _PondSocket_backend = new WeakMap(), _PondSocket_middleware = new WeakMap(), _PondSocket_maxMessageSize = new WeakMap(), _PondSocket_heartbeatMs = new WeakMap(), _PondSocket_heartbeatTimer = new WeakMap(), _PondSocket_backendReady = new WeakMap(), _PondSocket_instances = new WeakSet(), _PondSocket_handleUpgrade = function _PondSocket_handleUpgrade(req, socket, head) {
103
+ const clientId = (0, pondsocket_common_1.uuid)();
76
104
  const request = {
77
105
  id: clientId,
78
106
  headers: req.headers,
@@ -110,15 +138,25 @@ _PondSocket_server = new WeakMap(), _PondSocket_exclusiveServer = new WeakMap(),
110
138
  socket.isAlive = false;
111
139
  socket.ping();
112
140
  });
113
- }, 30000);
141
+ }, __classPrivateFieldGet(this, _PondSocket_heartbeatMs, "f"));
114
142
  }, _PondSocket_init = function _PondSocket_init() {
115
- const timeout = __classPrivateFieldGet(this, _PondSocket_instances, "m", _PondSocket_manageHeartbeat).call(this);
143
+ var _a, _b;
144
+ __classPrivateFieldSet(this, _PondSocket_heartbeatTimer, __classPrivateFieldGet(this, _PondSocket_instances, "m", _PondSocket_manageHeartbeat).call(this), "f");
145
+ __classPrivateFieldSet(this, _PondSocket_backendReady, (_b = (_a = __classPrivateFieldGet(this, _PondSocket_backend, "f")) === null || _a === void 0 ? void 0 : _a.initialize().catch((error) => {
146
+ __classPrivateFieldGet(this, _PondSocket_server, "f").emit('error', error);
147
+ })) !== null && _b !== void 0 ? _b : null, "f");
116
148
  __classPrivateFieldGet(this, _PondSocket_server, "f").on('error', (error) => {
117
- clearInterval(timeout);
149
+ if (__classPrivateFieldGet(this, _PondSocket_heartbeatTimer, "f")) {
150
+ clearInterval(__classPrivateFieldGet(this, _PondSocket_heartbeatTimer, "f"));
151
+ __classPrivateFieldSet(this, _PondSocket_heartbeatTimer, null, "f");
152
+ }
118
153
  throw new Error(error.message);
119
154
  });
120
155
  __classPrivateFieldGet(this, _PondSocket_server, "f").on('close', () => {
121
- clearInterval(timeout);
156
+ if (__classPrivateFieldGet(this, _PondSocket_heartbeatTimer, "f")) {
157
+ clearInterval(__classPrivateFieldGet(this, _PondSocket_heartbeatTimer, "f"));
158
+ __classPrivateFieldSet(this, _PondSocket_heartbeatTimer, null, "f");
159
+ }
122
160
  });
123
161
  __classPrivateFieldGet(this, _PondSocket_server, "f").on('upgrade', __classPrivateFieldGet(this, _PondSocket_instances, "m", _PondSocket_handleUpgrade).bind(this));
124
162
  }, _PondSocket_getCookies = function _PondSocket_getCookies(headers) {
@@ -128,8 +166,13 @@ _PondSocket_server = new WeakMap(), _PondSocket_exclusiveServer = new WeakMap(),
128
166
  }
129
167
  return cookieHeader.split(';')
130
168
  .reduce((cookies, cookie) => {
131
- const [name, value] = cookie.trim()
132
- .split('=');
169
+ const trimmed = cookie.trim();
170
+ const eqIndex = trimmed.indexOf('=');
171
+ if (eqIndex === -1) {
172
+ return cookies;
173
+ }
174
+ const name = trimmed.slice(0, eqIndex);
175
+ const value = trimmed.slice(eqIndex + 1);
133
176
  cookies[name] = decodeURIComponent(value);
134
177
  return cookies;
135
178
  }, {});