openportal 0.1.1 → 0.1.3

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.
Files changed (182) hide show
  1. package/README.md +113 -0
  2. package/package.json +1 -1
  3. package/web/.next/static/{A7pW-dtFIbPCSkvE8uenX → Im7EdK1Q3oOmTznohTOr5}/_buildManifest.js +4 -9
  4. package/web/.next/static/chunks/{2e7bfb90c343ca96.js → 35cc9dbdc670c73c.js} +4 -4
  5. package/web/.next/static/chunks/4147ffc67a7b837c.css +1 -0
  6. package/web/.next/static/chunks/{21ab2574b84ad2d1.js → 52b90bc1740162c2.js} +2 -2
  7. package/web/.next/static/chunks/{9b265e2198b5525f.js → 8644d68bf325ff24.js} +3 -3
  8. package/web/.next/static/chunks/{03e1846335a31354.js → 9865709466b09f79.js} +3 -3
  9. package/web/.next/static/chunks/{c20ae04df8cc28be.js → 9ba9a5774c9421bd.js} +3 -3
  10. package/web/.next/static/chunks/{967a1e0002fe9ae6.js → b5caad256518cb33.js} +3 -3
  11. package/web/.next/static/chunks/{turbopack-27558c851386934e.js → turbopack-26af71e419c11487.js} +1 -1
  12. package/web/.next/static/chunks/{turbopack-f4c0881f9723f5a5.js → turbopack-4ad0df7330c00c8d.js} +1 -1
  13. package/web/.next/static/chunks/{turbopack-26688626142ac58f.js → turbopack-8e653f3ad3a8ed18.js} +1 -1
  14. package/web/.next/static/chunks/{turbopack-c40ec6674624f1d7.js → turbopack-d5098189d63fd7b8.js} +1 -1
  15. package/web/apps/web/.next/BUILD_ID +1 -1
  16. package/web/apps/web/.next/build-manifest.json +14 -24
  17. package/web/apps/web/.next/routes-manifest.json +0 -12
  18. package/web/apps/web/.next/server/chunks/[root-of-the-server]__f366ca98._.js +358 -0
  19. package/web/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__dfeaf8cf._.js → [root-of-the-server]__1a54ba1e._.js} +3 -3
  20. package/web/apps/web/.next/server/middleware-build-manifest.js +12 -22
  21. package/web/apps/web/.next/server/next-font-manifest.js +1 -1
  22. package/web/apps/web/.next/server/next-font-manifest.json +0 -4
  23. package/web/apps/web/.next/server/pages/404.html +1 -1
  24. package/web/apps/web/.next/server/pages/500.html +1 -1
  25. package/web/apps/web/.next/server/pages/_app/build-manifest.json +3 -3
  26. package/web/apps/web/.next/server/pages/_app/client-build-manifest.json +1 -1
  27. package/web/apps/web/.next/server/pages/api/[[...slugs]].js +1 -2
  28. package/web/apps/web/.next/server/pages/api/[[...slugs]].js.nft.json +1 -1
  29. package/web/apps/web/.next/server/pages/index/build-manifest.json +3 -3
  30. package/web/apps/web/.next/server/pages/index/client-build-manifest.json +1 -1
  31. package/web/apps/web/.next/server/pages/index.html +1 -1
  32. package/web/apps/web/.next/server/pages/index.js.nft.json +1 -1
  33. package/web/apps/web/.next/server/pages/session/[id]/build-manifest.json +4 -4
  34. package/web/apps/web/.next/server/pages/session/[id]/client-build-manifest.json +1 -1
  35. package/web/apps/web/.next/server/pages/session/[id].html +1 -1
  36. package/web/apps/web/.next/server/pages/session/[id].js.nft.json +1 -1
  37. package/web/apps/web/.next/server/pages/settings/build-manifest.json +3 -3
  38. package/web/apps/web/.next/server/pages/settings/client-build-manifest.json +1 -1
  39. package/web/apps/web/.next/server/pages/settings.html +1 -1
  40. package/web/apps/web/.next/server/pages/settings.js.nft.json +1 -1
  41. package/web/apps/web/.next/server/pages-manifest.json +0 -2
  42. package/web/apps/web/package.json +1 -9
  43. package/web/.next/static/chunks/04d4692d75696297.css +0 -1
  44. package/web/.next/static/chunks/553710f60e2f2b11.js +0 -1
  45. package/web/.next/static/chunks/58acbbb4090e3362.js +0 -3
  46. package/web/.next/static/chunks/6ce1e2f08f961db5.js +0 -2
  47. package/web/.next/static/chunks/d316d63225992c76.js +0 -10
  48. package/web/.next/static/chunks/e0c97552ba7a9e3d.js +0 -1
  49. package/web/.next/static/chunks/fc9c4f2dabfb4e0e.css +0 -1
  50. package/web/.next/static/chunks/turbopack-1837909a677d116b.js +0 -3
  51. package/web/apps/web/.next/server/chunks/[root-of-the-server]__0f75905d._.js +0 -3
  52. package/web/apps/web/.next/server/chunks/[root-of-the-server]__89e85365._.js +0 -358
  53. package/web/apps/web/.next/server/chunks/[root-of-the-server]__ae1361d0._.js +0 -3
  54. package/web/apps/web/.next/server/pages/api/terminal/ws/pages-manifest.json +0 -3
  55. package/web/apps/web/.next/server/pages/api/terminal/ws.js +0 -5
  56. package/web/apps/web/.next/server/pages/api/terminal/ws.js.map +0 -5
  57. package/web/apps/web/.next/server/pages/api/terminal/ws.js.nft.json +0 -1
  58. package/web/apps/web/.next/server/pages/terminal/build-manifest.json +0 -20
  59. package/web/apps/web/.next/server/pages/terminal/client-build-manifest.json +0 -5
  60. package/web/apps/web/.next/server/pages/terminal/next-font-manifest.json +0 -11
  61. package/web/apps/web/.next/server/pages/terminal/pages-manifest.json +0 -3
  62. package/web/apps/web/.next/server/pages/terminal/react-loadable-manifest.json +0 -1
  63. package/web/apps/web/.next/server/pages/terminal.html +0 -1
  64. package/web/apps/web/.next/server/pages/terminal.js.map +0 -5
  65. package/web/apps/web/.next/server/pages/terminal.js.nft.json +0 -1
  66. package/web/node_modules/.bun/@socket.io+component-emitter@3.1.2/node_modules/@socket.io/component-emitter/lib/cjs/index.js +0 -176
  67. package/web/node_modules/.bun/@socket.io+component-emitter@3.1.2/node_modules/@socket.io/component-emitter/lib/cjs/package.json +0 -4
  68. package/web/node_modules/.bun/@socket.io+component-emitter@3.1.2/node_modules/@socket.io/component-emitter/package.json +0 -28
  69. package/web/node_modules/.bun/accepts@1.3.8/node_modules/accepts/index.js +0 -238
  70. package/web/node_modules/.bun/accepts@1.3.8/node_modules/accepts/package.json +0 -47
  71. package/web/node_modules/.bun/base64id@2.0.0/node_modules/base64id/lib/base64id.js +0 -103
  72. package/web/node_modules/.bun/base64id@2.0.0/node_modules/base64id/package.json +0 -13
  73. package/web/node_modules/.bun/cookie@0.7.2/node_modules/cookie/index.js +0 -335
  74. package/web/node_modules/.bun/cookie@0.7.2/node_modules/cookie/package.json +0 -44
  75. package/web/node_modules/.bun/cookie@1.1.1/node_modules/cookie/package.json +0 -47
  76. package/web/node_modules/.bun/cors@2.8.5/node_modules/cors/lib/index.js +0 -238
  77. package/web/node_modules/.bun/cors@2.8.5/node_modules/cors/package.json +0 -41
  78. package/web/node_modules/.bun/debug@4.3.7/node_modules/debug/package.json +0 -60
  79. package/web/node_modules/.bun/debug@4.3.7/node_modules/debug/src/browser.js +0 -271
  80. package/web/node_modules/.bun/debug@4.3.7/node_modules/debug/src/common.js +0 -274
  81. package/web/node_modules/.bun/debug@4.3.7/node_modules/debug/src/index.js +0 -10
  82. package/web/node_modules/.bun/debug@4.3.7/node_modules/debug/src/node.js +0 -263
  83. package/web/node_modules/.bun/engine.io-parser@5.2.3/node_modules/engine.io-parser/build/cjs/commons.js +0 -19
  84. package/web/node_modules/.bun/engine.io-parser@5.2.3/node_modules/engine.io-parser/build/cjs/decodePacket.js +0 -59
  85. package/web/node_modules/.bun/engine.io-parser@5.2.3/node_modules/engine.io-parser/build/cjs/encodePacket.js +0 -38
  86. package/web/node_modules/.bun/engine.io-parser@5.2.3/node_modules/engine.io-parser/build/cjs/index.js +0 -164
  87. package/web/node_modules/.bun/engine.io-parser@5.2.3/node_modules/engine.io-parser/build/cjs/package.json +0 -8
  88. package/web/node_modules/.bun/engine.io-parser@5.2.3/node_modules/engine.io-parser/package.json +0 -46
  89. package/web/node_modules/.bun/engine.io@6.6.4/node_modules/engine.io/build/engine.io.js +0 -54
  90. package/web/node_modules/.bun/engine.io@6.6.4/node_modules/engine.io/build/parser-v3/index.js +0 -424
  91. package/web/node_modules/.bun/engine.io@6.6.4/node_modules/engine.io/build/parser-v3/utf8.js +0 -187
  92. package/web/node_modules/.bun/engine.io@6.6.4/node_modules/engine.io/build/server.js +0 -786
  93. package/web/node_modules/.bun/engine.io@6.6.4/node_modules/engine.io/build/socket.js +0 -460
  94. package/web/node_modules/.bun/engine.io@6.6.4/node_modules/engine.io/build/transport.js +0 -117
  95. package/web/node_modules/.bun/engine.io@6.6.4/node_modules/engine.io/build/transports/index.js +0 -23
  96. package/web/node_modules/.bun/engine.io@6.6.4/node_modules/engine.io/build/transports/polling-jsonp.js +0 -41
  97. package/web/node_modules/.bun/engine.io@6.6.4/node_modules/engine.io/build/transports/polling.js +0 -332
  98. package/web/node_modules/.bun/engine.io@6.6.4/node_modules/engine.io/build/transports/websocket.js +0 -94
  99. package/web/node_modules/.bun/engine.io@6.6.4/node_modules/engine.io/build/transports/webtransport.js +0 -63
  100. package/web/node_modules/.bun/engine.io@6.6.4/node_modules/engine.io/build/transports-uws/index.js +0 -8
  101. package/web/node_modules/.bun/engine.io@6.6.4/node_modules/engine.io/build/transports-uws/polling.js +0 -364
  102. package/web/node_modules/.bun/engine.io@6.6.4/node_modules/engine.io/build/transports-uws/websocket.js +0 -73
  103. package/web/node_modules/.bun/engine.io@6.6.4/node_modules/engine.io/build/userver.js +0 -279
  104. package/web/node_modules/.bun/engine.io@6.6.4/node_modules/engine.io/package.json +0 -70
  105. package/web/node_modules/.bun/has-flag@4.0.0/node_modules/has-flag/index.js +0 -8
  106. package/web/node_modules/.bun/has-flag@4.0.0/node_modules/has-flag/package.json +0 -46
  107. package/web/node_modules/.bun/mime-db@1.52.0/node_modules/mime-db/db.json +0 -8519
  108. package/web/node_modules/.bun/mime-db@1.52.0/node_modules/mime-db/index.js +0 -12
  109. package/web/node_modules/.bun/mime-db@1.52.0/node_modules/mime-db/package.json +0 -60
  110. package/web/node_modules/.bun/mime-types@2.1.35/node_modules/mime-types/index.js +0 -188
  111. package/web/node_modules/.bun/mime-types@2.1.35/node_modules/mime-types/package.json +0 -44
  112. package/web/node_modules/.bun/ms@2.1.3/node_modules/ms/index.js +0 -162
  113. package/web/node_modules/.bun/ms@2.1.3/node_modules/ms/package.json +0 -38
  114. package/web/node_modules/.bun/negotiator@0.6.3/node_modules/negotiator/index.js +0 -82
  115. package/web/node_modules/.bun/negotiator@0.6.3/node_modules/negotiator/lib/charset.js +0 -169
  116. package/web/node_modules/.bun/negotiator@0.6.3/node_modules/negotiator/lib/encoding.js +0 -184
  117. package/web/node_modules/.bun/negotiator@0.6.3/node_modules/negotiator/lib/language.js +0 -179
  118. package/web/node_modules/.bun/negotiator@0.6.3/node_modules/negotiator/lib/mediaType.js +0 -294
  119. package/web/node_modules/.bun/negotiator@0.6.3/node_modules/negotiator/package.json +0 -42
  120. package/web/node_modules/.bun/object-assign@4.1.1/node_modules/object-assign/index.js +0 -90
  121. package/web/node_modules/.bun/object-assign@4.1.1/node_modules/object-assign/package.json +0 -42
  122. package/web/node_modules/.bun/socket.io-adapter@2.5.5/node_modules/socket.io-adapter/dist/cluster-adapter.js +0 -674
  123. package/web/node_modules/.bun/socket.io-adapter@2.5.5/node_modules/socket.io-adapter/dist/contrib/yeast.js +0 -55
  124. package/web/node_modules/.bun/socket.io-adapter@2.5.5/node_modules/socket.io-adapter/dist/in-memory-adapter.js +0 -394
  125. package/web/node_modules/.bun/socket.io-adapter@2.5.5/node_modules/socket.io-adapter/dist/index.js +0 -10
  126. package/web/node_modules/.bun/socket.io-adapter@2.5.5/node_modules/socket.io-adapter/package.json +0 -39
  127. package/web/node_modules/.bun/socket.io-parser@4.2.4/node_modules/socket.io-parser/build/cjs/binary.js +0 -88
  128. package/web/node_modules/.bun/socket.io-parser@4.2.4/node_modules/socket.io-parser/build/cjs/index.js +0 -321
  129. package/web/node_modules/.bun/socket.io-parser@4.2.4/node_modules/socket.io-parser/build/cjs/is-binary.js +0 -55
  130. package/web/node_modules/.bun/socket.io-parser@4.2.4/node_modules/socket.io-parser/build/cjs/package.json +0 -3
  131. package/web/node_modules/.bun/socket.io-parser@4.2.4/node_modules/socket.io-parser/package.json +0 -58
  132. package/web/node_modules/.bun/socket.io@4.8.1/node_modules/socket.io/client-dist/socket.io.esm.min.js +0 -7
  133. package/web/node_modules/.bun/socket.io@4.8.1/node_modules/socket.io/client-dist/socket.io.js +0 -4908
  134. package/web/node_modules/.bun/socket.io@4.8.1/node_modules/socket.io/client-dist/socket.io.min.js +0 -7
  135. package/web/node_modules/.bun/socket.io@4.8.1/node_modules/socket.io/client-dist/socket.io.msgpack.min.js +0 -7
  136. package/web/node_modules/.bun/socket.io@4.8.1/node_modules/socket.io/dist/broadcast-operator.js +0 -436
  137. package/web/node_modules/.bun/socket.io@4.8.1/node_modules/socket.io/dist/client.js +0 -268
  138. package/web/node_modules/.bun/socket.io@4.8.1/node_modules/socket.io/dist/index.js +0 -804
  139. package/web/node_modules/.bun/socket.io@4.8.1/node_modules/socket.io/dist/namespace.js +0 -581
  140. package/web/node_modules/.bun/socket.io@4.8.1/node_modules/socket.io/dist/parent-namespace.js +0 -88
  141. package/web/node_modules/.bun/socket.io@4.8.1/node_modules/socket.io/dist/socket-types.js +0 -11
  142. package/web/node_modules/.bun/socket.io@4.8.1/node_modules/socket.io/dist/socket.js +0 -977
  143. package/web/node_modules/.bun/socket.io@4.8.1/node_modules/socket.io/dist/typed-events.js +0 -81
  144. package/web/node_modules/.bun/socket.io@4.8.1/node_modules/socket.io/dist/uws.js +0 -136
  145. package/web/node_modules/.bun/socket.io@4.8.1/node_modules/socket.io/package.json +0 -85
  146. package/web/node_modules/.bun/socket.io@4.8.1/node_modules/socket.io/wrapper.mjs +0 -3
  147. package/web/node_modules/.bun/supports-color@7.2.0/node_modules/supports-color/index.js +0 -135
  148. package/web/node_modules/.bun/supports-color@7.2.0/node_modules/supports-color/package.json +0 -53
  149. package/web/node_modules/.bun/vary@1.1.2/node_modules/vary/index.js +0 -149
  150. package/web/node_modules/.bun/vary@1.1.2/node_modules/vary/package.json +0 -43
  151. package/web/node_modules/.bun/ws@8.17.1/node_modules/ws/index.js +0 -13
  152. package/web/node_modules/.bun/ws@8.17.1/node_modules/ws/lib/buffer-util.js +0 -131
  153. package/web/node_modules/.bun/ws@8.17.1/node_modules/ws/lib/constants.js +0 -12
  154. package/web/node_modules/.bun/ws@8.17.1/node_modules/ws/lib/event-target.js +0 -292
  155. package/web/node_modules/.bun/ws@8.17.1/node_modules/ws/lib/extension.js +0 -203
  156. package/web/node_modules/.bun/ws@8.17.1/node_modules/ws/lib/limiter.js +0 -55
  157. package/web/node_modules/.bun/ws@8.17.1/node_modules/ws/lib/permessage-deflate.js +0 -514
  158. package/web/node_modules/.bun/ws@8.17.1/node_modules/ws/lib/receiver.js +0 -704
  159. package/web/node_modules/.bun/ws@8.17.1/node_modules/ws/lib/sender.js +0 -497
  160. package/web/node_modules/.bun/ws@8.17.1/node_modules/ws/lib/stream.js +0 -159
  161. package/web/node_modules/.bun/ws@8.17.1/node_modules/ws/lib/subprotocol.js +0 -62
  162. package/web/node_modules/.bun/ws@8.17.1/node_modules/ws/lib/validation.js +0 -130
  163. package/web/node_modules/.bun/ws@8.17.1/node_modules/ws/lib/websocket-server.js +0 -540
  164. package/web/node_modules/.bun/ws@8.17.1/node_modules/ws/lib/websocket.js +0 -1338
  165. package/web/node_modules/.bun/ws@8.17.1/node_modules/ws/package.json +0 -69
  166. package/web/node_modules/.bun/ws@8.18.3/node_modules/ws/lib/buffer-util.js +0 -131
  167. package/web/node_modules/.bun/ws@8.18.3/node_modules/ws/lib/constants.js +0 -18
  168. package/web/node_modules/.bun/ws@8.18.3/node_modules/ws/lib/event-target.js +0 -292
  169. package/web/node_modules/.bun/ws@8.18.3/node_modules/ws/lib/extension.js +0 -203
  170. package/web/node_modules/.bun/ws@8.18.3/node_modules/ws/lib/limiter.js +0 -55
  171. package/web/node_modules/.bun/ws@8.18.3/node_modules/ws/lib/permessage-deflate.js +0 -528
  172. package/web/node_modules/.bun/ws@8.18.3/node_modules/ws/lib/receiver.js +0 -706
  173. package/web/node_modules/.bun/ws@8.18.3/node_modules/ws/lib/sender.js +0 -602
  174. package/web/node_modules/.bun/ws@8.18.3/node_modules/ws/lib/stream.js +0 -161
  175. package/web/node_modules/.bun/ws@8.18.3/node_modules/ws/lib/subprotocol.js +0 -62
  176. package/web/node_modules/.bun/ws@8.18.3/node_modules/ws/lib/validation.js +0 -152
  177. package/web/node_modules/.bun/ws@8.18.3/node_modules/ws/lib/websocket-server.js +0 -550
  178. package/web/node_modules/.bun/ws@8.18.3/node_modules/ws/lib/websocket.js +0 -1388
  179. package/web/node_modules/.bun/ws@8.18.3/node_modules/ws/package.json +0 -69
  180. package/web/node_modules/.bun/ws@8.18.3/node_modules/ws/wrapper.mjs +0 -8
  181. /package/web/.next/static/{A7pW-dtFIbPCSkvE8uenX → Im7EdK1Q3oOmTznohTOr5}/_clientMiddlewareManifest.json +0 -0
  182. /package/web/.next/static/{A7pW-dtFIbPCSkvE8uenX → Im7EdK1Q3oOmTznohTOr5}/_ssgManifest.js +0 -0
@@ -1,786 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Server = exports.BaseServer = void 0;
4
- const qs = require("querystring");
5
- const url_1 = require("url");
6
- const base64id = require("base64id");
7
- const transports_1 = require("./transports");
8
- const events_1 = require("events");
9
- const socket_1 = require("./socket");
10
- const debug_1 = require("debug");
11
- const cookie_1 = require("cookie");
12
- const ws_1 = require("ws");
13
- const webtransport_1 = require("./transports/webtransport");
14
- const engine_io_parser_1 = require("engine.io-parser");
15
- const debug = (0, debug_1.default)("engine");
16
- const kResponseHeaders = Symbol("responseHeaders");
17
- function parseSessionId(data) {
18
- try {
19
- const parsed = JSON.parse(data);
20
- if (typeof parsed.sid === "string") {
21
- return parsed.sid;
22
- }
23
- }
24
- catch (e) { }
25
- }
26
- class BaseServer extends events_1.EventEmitter {
27
- /**
28
- * Server constructor.
29
- *
30
- * @param {Object} opts - options
31
- */
32
- constructor(opts = {}) {
33
- super();
34
- this.middlewares = [];
35
- this.clients = {};
36
- this.clientsCount = 0;
37
- this.opts = Object.assign({
38
- wsEngine: ws_1.Server,
39
- pingTimeout: 20000,
40
- pingInterval: 25000,
41
- upgradeTimeout: 10000,
42
- maxHttpBufferSize: 1e6,
43
- transports: ["polling", "websocket"], // WebTransport is disabled by default
44
- allowUpgrades: true,
45
- httpCompression: {
46
- threshold: 1024,
47
- },
48
- cors: false,
49
- allowEIO3: false,
50
- }, opts);
51
- if (opts.cookie) {
52
- this.opts.cookie = Object.assign({
53
- name: "io",
54
- path: "/",
55
- // @ts-ignore
56
- httpOnly: opts.cookie.path !== false,
57
- sameSite: "lax",
58
- }, opts.cookie);
59
- }
60
- if (this.opts.cors) {
61
- this.use(require("cors")(this.opts.cors));
62
- }
63
- if (opts.perMessageDeflate) {
64
- this.opts.perMessageDeflate = Object.assign({
65
- threshold: 1024,
66
- }, opts.perMessageDeflate);
67
- }
68
- this.init();
69
- }
70
- /**
71
- * Compute the pathname of the requests that are handled by the server
72
- * @param options
73
- * @protected
74
- */
75
- _computePath(options) {
76
- let path = (options.path || "/engine.io").replace(/\/$/, "");
77
- if (options.addTrailingSlash !== false) {
78
- // normalize path
79
- path += "/";
80
- }
81
- return path;
82
- }
83
- /**
84
- * Returns a list of available transports for upgrade given a certain transport.
85
- *
86
- * @return {Array}
87
- */
88
- upgrades(transport) {
89
- if (!this.opts.allowUpgrades)
90
- return [];
91
- return transports_1.default[transport].upgradesTo || [];
92
- }
93
- /**
94
- * Verifies a request.
95
- *
96
- * @param {EngineRequest} req
97
- * @param upgrade - whether it's an upgrade request
98
- * @param fn
99
- * @protected
100
- */
101
- verify(req, upgrade, fn) {
102
- // transport check
103
- const transport = req._query.transport;
104
- // WebTransport does not go through the verify() method, see the onWebTransportSession() method
105
- if (!~this.opts.transports.indexOf(transport) ||
106
- transport === "webtransport") {
107
- debug('unknown transport "%s"', transport);
108
- return fn(Server.errors.UNKNOWN_TRANSPORT, { transport });
109
- }
110
- // 'Origin' header check
111
- const isOriginInvalid = checkInvalidHeaderChar(req.headers.origin);
112
- if (isOriginInvalid) {
113
- const origin = req.headers.origin;
114
- req.headers.origin = null;
115
- debug("origin header invalid");
116
- return fn(Server.errors.BAD_REQUEST, {
117
- name: "INVALID_ORIGIN",
118
- origin,
119
- });
120
- }
121
- // sid check
122
- const sid = req._query.sid;
123
- if (sid) {
124
- if (!this.clients.hasOwnProperty(sid)) {
125
- debug('unknown sid "%s"', sid);
126
- return fn(Server.errors.UNKNOWN_SID, {
127
- sid,
128
- });
129
- }
130
- const previousTransport = this.clients[sid].transport.name;
131
- if (!upgrade && previousTransport !== transport) {
132
- debug("bad request: unexpected transport without upgrade");
133
- return fn(Server.errors.BAD_REQUEST, {
134
- name: "TRANSPORT_MISMATCH",
135
- transport,
136
- previousTransport,
137
- });
138
- }
139
- }
140
- else {
141
- // handshake is GET only
142
- if ("GET" !== req.method) {
143
- return fn(Server.errors.BAD_HANDSHAKE_METHOD, {
144
- method: req.method,
145
- });
146
- }
147
- if (transport === "websocket" && !upgrade) {
148
- debug("invalid transport upgrade");
149
- return fn(Server.errors.BAD_REQUEST, {
150
- name: "TRANSPORT_HANDSHAKE_ERROR",
151
- });
152
- }
153
- if (!this.opts.allowRequest)
154
- return fn();
155
- return this.opts.allowRequest(req, (message, success) => {
156
- if (!success) {
157
- return fn(Server.errors.FORBIDDEN, {
158
- message,
159
- });
160
- }
161
- fn();
162
- });
163
- }
164
- fn();
165
- }
166
- /**
167
- * Adds a new middleware.
168
- *
169
- * @example
170
- * import helmet from "helmet";
171
- *
172
- * engine.use(helmet());
173
- *
174
- * @param fn
175
- */
176
- use(fn) {
177
- this.middlewares.push(fn);
178
- }
179
- /**
180
- * Apply the middlewares to the request.
181
- *
182
- * @param req
183
- * @param res
184
- * @param callback
185
- * @protected
186
- */
187
- _applyMiddlewares(req, res, callback) {
188
- if (this.middlewares.length === 0) {
189
- debug("no middleware to apply, skipping");
190
- return callback();
191
- }
192
- const apply = (i) => {
193
- debug("applying middleware n°%d", i + 1);
194
- this.middlewares[i](req, res, (err) => {
195
- if (err) {
196
- return callback(err);
197
- }
198
- if (i + 1 < this.middlewares.length) {
199
- apply(i + 1);
200
- }
201
- else {
202
- callback();
203
- }
204
- });
205
- };
206
- apply(0);
207
- }
208
- /**
209
- * Closes all clients.
210
- */
211
- close() {
212
- debug("closing all open clients");
213
- for (let i in this.clients) {
214
- if (this.clients.hasOwnProperty(i)) {
215
- this.clients[i].close(true);
216
- }
217
- }
218
- this.cleanup();
219
- return this;
220
- }
221
- /**
222
- * generate a socket id.
223
- * Overwrite this method to generate your custom socket id
224
- *
225
- * @param {IncomingMessage} req - the request object
226
- */
227
- generateId(req) {
228
- return base64id.generateId();
229
- }
230
- /**
231
- * Handshakes a new client.
232
- *
233
- * @param {String} transportName
234
- * @param {Object} req - the request object
235
- * @param {Function} closeConnection
236
- *
237
- * @protected
238
- */
239
- async handshake(transportName, req, closeConnection) {
240
- const protocol = req._query.EIO === "4" ? 4 : 3; // 3rd revision by default
241
- if (protocol === 3 && !this.opts.allowEIO3) {
242
- debug("unsupported protocol version");
243
- this.emit("connection_error", {
244
- req,
245
- code: Server.errors.UNSUPPORTED_PROTOCOL_VERSION,
246
- message: Server.errorMessages[Server.errors.UNSUPPORTED_PROTOCOL_VERSION],
247
- context: {
248
- protocol,
249
- },
250
- });
251
- closeConnection(Server.errors.UNSUPPORTED_PROTOCOL_VERSION);
252
- return;
253
- }
254
- let id;
255
- try {
256
- id = await this.generateId(req);
257
- }
258
- catch (e) {
259
- debug("error while generating an id");
260
- this.emit("connection_error", {
261
- req,
262
- code: Server.errors.BAD_REQUEST,
263
- message: Server.errorMessages[Server.errors.BAD_REQUEST],
264
- context: {
265
- name: "ID_GENERATION_ERROR",
266
- error: e,
267
- },
268
- });
269
- closeConnection(Server.errors.BAD_REQUEST);
270
- return;
271
- }
272
- debug('handshaking client "%s"', id);
273
- try {
274
- var transport = this.createTransport(transportName, req);
275
- if ("polling" === transportName) {
276
- transport.maxHttpBufferSize = this.opts.maxHttpBufferSize;
277
- transport.httpCompression = this.opts.httpCompression;
278
- }
279
- else if ("websocket" === transportName) {
280
- transport.perMessageDeflate = this.opts.perMessageDeflate;
281
- }
282
- }
283
- catch (e) {
284
- debug('error handshaking to transport "%s"', transportName);
285
- this.emit("connection_error", {
286
- req,
287
- code: Server.errors.BAD_REQUEST,
288
- message: Server.errorMessages[Server.errors.BAD_REQUEST],
289
- context: {
290
- name: "TRANSPORT_HANDSHAKE_ERROR",
291
- error: e,
292
- },
293
- });
294
- closeConnection(Server.errors.BAD_REQUEST);
295
- return;
296
- }
297
- const socket = new socket_1.Socket(id, this, transport, req, protocol);
298
- transport.on("headers", (headers, req) => {
299
- const isInitialRequest = !req._query.sid;
300
- if (isInitialRequest) {
301
- if (this.opts.cookie) {
302
- headers["Set-Cookie"] = [
303
- // @ts-ignore
304
- (0, cookie_1.serialize)(this.opts.cookie.name, id, this.opts.cookie),
305
- ];
306
- }
307
- this.emit("initial_headers", headers, req);
308
- }
309
- this.emit("headers", headers, req);
310
- });
311
- transport.onRequest(req);
312
- this.clients[id] = socket;
313
- this.clientsCount++;
314
- socket.once("close", () => {
315
- delete this.clients[id];
316
- this.clientsCount--;
317
- });
318
- this.emit("connection", socket);
319
- return transport;
320
- }
321
- async onWebTransportSession(session) {
322
- const timeout = setTimeout(() => {
323
- debug("the client failed to establish a bidirectional stream in the given period");
324
- session.close();
325
- }, this.opts.upgradeTimeout);
326
- const streamReader = session.incomingBidirectionalStreams.getReader();
327
- const result = await streamReader.read();
328
- if (result.done) {
329
- debug("session is closed");
330
- return;
331
- }
332
- const stream = result.value;
333
- const transformStream = (0, engine_io_parser_1.createPacketDecoderStream)(this.opts.maxHttpBufferSize, "nodebuffer");
334
- const reader = stream.readable.pipeThrough(transformStream).getReader();
335
- // reading the first packet of the stream
336
- const { value, done } = await reader.read();
337
- if (done) {
338
- debug("stream is closed");
339
- return;
340
- }
341
- clearTimeout(timeout);
342
- if (value.type !== "open") {
343
- debug("invalid WebTransport handshake");
344
- return session.close();
345
- }
346
- if (value.data === undefined) {
347
- const transport = new webtransport_1.WebTransport(session, stream, reader);
348
- // note: we cannot use "this.generateId()", because there is no "req" argument
349
- const id = base64id.generateId();
350
- debug('handshaking client "%s" (WebTransport)', id);
351
- const socket = new socket_1.Socket(id, this, transport, null, 4);
352
- this.clients[id] = socket;
353
- this.clientsCount++;
354
- socket.once("close", () => {
355
- delete this.clients[id];
356
- this.clientsCount--;
357
- });
358
- this.emit("connection", socket);
359
- return;
360
- }
361
- const sid = parseSessionId(value.data);
362
- if (!sid) {
363
- debug("invalid WebTransport handshake");
364
- return session.close();
365
- }
366
- const client = this.clients[sid];
367
- if (!client) {
368
- debug("upgrade attempt for closed client");
369
- session.close();
370
- }
371
- else if (client.upgrading) {
372
- debug("transport has already been trying to upgrade");
373
- session.close();
374
- }
375
- else if (client.upgraded) {
376
- debug("transport had already been upgraded");
377
- session.close();
378
- }
379
- else {
380
- debug("upgrading existing transport");
381
- const transport = new webtransport_1.WebTransport(session, stream, reader);
382
- client._maybeUpgrade(transport);
383
- }
384
- }
385
- }
386
- exports.BaseServer = BaseServer;
387
- /**
388
- * Protocol errors mappings.
389
- */
390
- BaseServer.errors = {
391
- UNKNOWN_TRANSPORT: 0,
392
- UNKNOWN_SID: 1,
393
- BAD_HANDSHAKE_METHOD: 2,
394
- BAD_REQUEST: 3,
395
- FORBIDDEN: 4,
396
- UNSUPPORTED_PROTOCOL_VERSION: 5,
397
- };
398
- BaseServer.errorMessages = {
399
- 0: "Transport unknown",
400
- 1: "Session ID unknown",
401
- 2: "Bad handshake method",
402
- 3: "Bad request",
403
- 4: "Forbidden",
404
- 5: "Unsupported protocol version",
405
- };
406
- /**
407
- * Exposes a subset of the http.ServerResponse interface, in order to be able to apply the middlewares to an upgrade
408
- * request.
409
- *
410
- * @see https://nodejs.org/api/http.html#class-httpserverresponse
411
- */
412
- class WebSocketResponse {
413
- constructor(req, socket) {
414
- this.req = req;
415
- this.socket = socket;
416
- // temporarily store the response headers on the req object (see the "headers" event)
417
- req[kResponseHeaders] = {};
418
- }
419
- setHeader(name, value) {
420
- this.req[kResponseHeaders][name] = value;
421
- }
422
- getHeader(name) {
423
- return this.req[kResponseHeaders][name];
424
- }
425
- removeHeader(name) {
426
- delete this.req[kResponseHeaders][name];
427
- }
428
- write() { }
429
- writeHead() { }
430
- end() {
431
- // we could return a proper error code, but the WebSocket client will emit an "error" event anyway.
432
- this.socket.destroy();
433
- }
434
- }
435
- /**
436
- * An Engine.IO server based on Node.js built-in HTTP server and the `ws` package for WebSocket connections.
437
- */
438
- class Server extends BaseServer {
439
- /**
440
- * Initialize websocket server
441
- *
442
- * @protected
443
- */
444
- init() {
445
- if (!~this.opts.transports.indexOf("websocket"))
446
- return;
447
- if (this.ws)
448
- this.ws.close();
449
- this.ws = new this.opts.wsEngine({
450
- noServer: true,
451
- clientTracking: false,
452
- perMessageDeflate: this.opts.perMessageDeflate,
453
- maxPayload: this.opts.maxHttpBufferSize,
454
- });
455
- if (typeof this.ws.on === "function") {
456
- this.ws.on("headers", (headersArray, req) => {
457
- // note: 'ws' uses an array of headers, while Engine.IO uses an object (response.writeHead() accepts both formats)
458
- // we could also try to parse the array and then sync the values, but that will be error-prone
459
- const additionalHeaders = req[kResponseHeaders] || {};
460
- delete req[kResponseHeaders];
461
- const isInitialRequest = !req._query.sid;
462
- if (isInitialRequest) {
463
- this.emit("initial_headers", additionalHeaders, req);
464
- }
465
- this.emit("headers", additionalHeaders, req);
466
- debug("writing headers: %j", additionalHeaders);
467
- Object.keys(additionalHeaders).forEach((key) => {
468
- headersArray.push(`${key}: ${additionalHeaders[key]}`);
469
- });
470
- });
471
- }
472
- }
473
- cleanup() {
474
- if (this.ws) {
475
- debug("closing webSocketServer");
476
- this.ws.close();
477
- // don't delete this.ws because it can be used again if the http server starts listening again
478
- }
479
- }
480
- /**
481
- * Prepares a request by processing the query string.
482
- *
483
- * @private
484
- */
485
- prepare(req) {
486
- // try to leverage pre-existing `req._query` (e.g: from connect)
487
- if (!req._query) {
488
- req._query = (~req.url.indexOf("?") ? qs.parse((0, url_1.parse)(req.url).query) : {});
489
- }
490
- }
491
- createTransport(transportName, req) {
492
- return new transports_1.default[transportName](req);
493
- }
494
- /**
495
- * Handles an Engine.IO HTTP request.
496
- *
497
- * @param {EngineRequest} req
498
- * @param {ServerResponse} res
499
- */
500
- handleRequest(req, res) {
501
- debug('handling "%s" http request "%s"', req.method, req.url);
502
- this.prepare(req);
503
- req.res = res;
504
- const callback = (errorCode, errorContext) => {
505
- if (errorCode !== undefined) {
506
- this.emit("connection_error", {
507
- req,
508
- code: errorCode,
509
- message: Server.errorMessages[errorCode],
510
- context: errorContext,
511
- });
512
- abortRequest(res, errorCode, errorContext);
513
- return;
514
- }
515
- if (req._query.sid) {
516
- debug("setting new request for existing client");
517
- this.clients[req._query.sid].transport.onRequest(req);
518
- }
519
- else {
520
- const closeConnection = (errorCode, errorContext) => abortRequest(res, errorCode, errorContext);
521
- this.handshake(req._query.transport, req, closeConnection);
522
- }
523
- };
524
- this._applyMiddlewares(req, res, (err) => {
525
- if (err) {
526
- callback(Server.errors.BAD_REQUEST, { name: "MIDDLEWARE_FAILURE" });
527
- }
528
- else {
529
- this.verify(req, false, callback);
530
- }
531
- });
532
- }
533
- /**
534
- * Handles an Engine.IO HTTP Upgrade.
535
- */
536
- handleUpgrade(req, socket, upgradeHead) {
537
- this.prepare(req);
538
- const res = new WebSocketResponse(req, socket);
539
- const callback = (errorCode, errorContext) => {
540
- if (errorCode !== undefined) {
541
- this.emit("connection_error", {
542
- req,
543
- code: errorCode,
544
- message: Server.errorMessages[errorCode],
545
- context: errorContext,
546
- });
547
- abortUpgrade(socket, errorCode, errorContext);
548
- return;
549
- }
550
- const head = Buffer.from(upgradeHead);
551
- upgradeHead = null;
552
- // some middlewares (like express-session) wait for the writeHead() call to flush their headers
553
- // see https://github.com/expressjs/session/blob/1010fadc2f071ddf2add94235d72224cf65159c6/index.js#L220-L244
554
- res.writeHead();
555
- // delegate to ws
556
- this.ws.handleUpgrade(req, socket, head, (websocket) => {
557
- this.onWebSocket(req, socket, websocket);
558
- });
559
- };
560
- this._applyMiddlewares(req, res, (err) => {
561
- if (err) {
562
- callback(Server.errors.BAD_REQUEST, { name: "MIDDLEWARE_FAILURE" });
563
- }
564
- else {
565
- this.verify(req, true, callback);
566
- }
567
- });
568
- }
569
- /**
570
- * Called upon a ws.io connection.
571
- *
572
- * @param {ws.Socket} websocket
573
- * @private
574
- */
575
- onWebSocket(req, socket, websocket) {
576
- websocket.on("error", onUpgradeError);
577
- if (transports_1.default[req._query.transport] !== undefined &&
578
- !transports_1.default[req._query.transport].prototype.handlesUpgrades) {
579
- debug("transport doesnt handle upgraded requests");
580
- websocket.close();
581
- return;
582
- }
583
- // get client id
584
- const id = req._query.sid;
585
- // keep a reference to the ws.Socket
586
- req.websocket = websocket;
587
- if (id) {
588
- const client = this.clients[id];
589
- if (!client) {
590
- debug("upgrade attempt for closed client");
591
- websocket.close();
592
- }
593
- else if (client.upgrading) {
594
- debug("transport has already been trying to upgrade");
595
- websocket.close();
596
- }
597
- else if (client.upgraded) {
598
- debug("transport had already been upgraded");
599
- websocket.close();
600
- }
601
- else {
602
- debug("upgrading existing transport");
603
- // transport error handling takes over
604
- websocket.removeListener("error", onUpgradeError);
605
- const transport = this.createTransport(req._query.transport, req);
606
- transport.perMessageDeflate = this.opts.perMessageDeflate;
607
- client._maybeUpgrade(transport);
608
- }
609
- }
610
- else {
611
- const closeConnection = (errorCode, errorContext) => abortUpgrade(socket, errorCode, errorContext);
612
- this.handshake(req._query.transport, req, closeConnection);
613
- }
614
- function onUpgradeError() {
615
- debug("websocket error before upgrade");
616
- // websocket.close() not needed
617
- }
618
- }
619
- /**
620
- * Captures upgrade requests for a http.Server.
621
- *
622
- * @param {http.Server} server
623
- * @param {Object} options
624
- */
625
- attach(server, options = {}) {
626
- const path = this._computePath(options);
627
- const destroyUpgradeTimeout = options.destroyUpgradeTimeout || 1000;
628
- function check(req) {
629
- // TODO use `path === new URL(...).pathname` in the next major release (ref: https://nodejs.org/api/url.html)
630
- return path === req.url.slice(0, path.length);
631
- }
632
- // cache and clean up listeners
633
- const listeners = server.listeners("request").slice(0);
634
- server.removeAllListeners("request");
635
- server.on("close", this.close.bind(this));
636
- server.on("listening", this.init.bind(this));
637
- // add request handler
638
- server.on("request", (req, res) => {
639
- if (check(req)) {
640
- debug('intercepting request for path "%s"', path);
641
- this.handleRequest(req, res);
642
- }
643
- else {
644
- let i = 0;
645
- const l = listeners.length;
646
- for (; i < l; i++) {
647
- listeners[i].call(server, req, res);
648
- }
649
- }
650
- });
651
- if (~this.opts.transports.indexOf("websocket")) {
652
- server.on("upgrade", (req, socket, head) => {
653
- if (check(req)) {
654
- this.handleUpgrade(req, socket, head);
655
- }
656
- else if (false !== options.destroyUpgrade) {
657
- // default node behavior is to disconnect when no handlers
658
- // but by adding a handler, we prevent that
659
- // and if no eio thing handles the upgrade
660
- // then the socket needs to die!
661
- setTimeout(function () {
662
- // @ts-ignore
663
- if (socket.writable && socket.bytesWritten <= 0) {
664
- socket.on("error", (e) => {
665
- debug("error while destroying upgrade: %s", e.message);
666
- });
667
- return socket.end();
668
- }
669
- }, destroyUpgradeTimeout);
670
- }
671
- });
672
- }
673
- }
674
- }
675
- exports.Server = Server;
676
- /**
677
- * Close the HTTP long-polling request
678
- *
679
- * @param res - the response object
680
- * @param errorCode - the error code
681
- * @param errorContext - additional error context
682
- *
683
- * @private
684
- */
685
- function abortRequest(res, errorCode, errorContext) {
686
- const statusCode = errorCode === Server.errors.FORBIDDEN ? 403 : 400;
687
- const message = errorContext && errorContext.message
688
- ? errorContext.message
689
- : Server.errorMessages[errorCode];
690
- res.writeHead(statusCode, { "Content-Type": "application/json" });
691
- res.end(JSON.stringify({
692
- code: errorCode,
693
- message,
694
- }));
695
- }
696
- /**
697
- * Close the WebSocket connection
698
- *
699
- * @param {net.Socket} socket
700
- * @param {string} errorCode - the error code
701
- * @param {object} errorContext - additional error context
702
- */
703
- function abortUpgrade(socket, errorCode, errorContext = {}) {
704
- socket.on("error", () => {
705
- debug("ignoring error from closed connection");
706
- });
707
- if (socket.writable) {
708
- const message = errorContext.message || Server.errorMessages[errorCode];
709
- const length = Buffer.byteLength(message);
710
- socket.write("HTTP/1.1 400 Bad Request\r\n" +
711
- "Connection: close\r\n" +
712
- "Content-type: text/html\r\n" +
713
- "Content-Length: " +
714
- length +
715
- "\r\n" +
716
- "\r\n" +
717
- message);
718
- }
719
- socket.destroy();
720
- }
721
- /* eslint-disable */
722
- /**
723
- * From https://github.com/nodejs/node/blob/v8.4.0/lib/_http_common.js#L303-L354
724
- *
725
- * True if val contains an invalid field-vchar
726
- * field-value = *( field-content / obs-fold )
727
- * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]
728
- * field-vchar = VCHAR / obs-text
729
- *
730
- * checkInvalidHeaderChar() is currently designed to be inlinable by v8,
731
- * so take care when making changes to the implementation so that the source
732
- * code size does not exceed v8's default max_inlined_source_size setting.
733
- **/
734
- // prettier-ignore
735
- const validHdrChars = [
736
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, // 0 - 15
737
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31
738
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 32 - 47
739
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 48 - 63
740
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79
741
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 80 - 95
742
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111
743
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, // 112 - 127
744
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 128 ...
745
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
746
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
747
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
748
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
749
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
750
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
751
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // ... 255
752
- ];
753
- function checkInvalidHeaderChar(val) {
754
- val += "";
755
- if (val.length < 1)
756
- return false;
757
- if (!validHdrChars[val.charCodeAt(0)]) {
758
- debug('invalid header, index 0, char "%s"', val.charCodeAt(0));
759
- return true;
760
- }
761
- if (val.length < 2)
762
- return false;
763
- if (!validHdrChars[val.charCodeAt(1)]) {
764
- debug('invalid header, index 1, char "%s"', val.charCodeAt(1));
765
- return true;
766
- }
767
- if (val.length < 3)
768
- return false;
769
- if (!validHdrChars[val.charCodeAt(2)]) {
770
- debug('invalid header, index 2, char "%s"', val.charCodeAt(2));
771
- return true;
772
- }
773
- if (val.length < 4)
774
- return false;
775
- if (!validHdrChars[val.charCodeAt(3)]) {
776
- debug('invalid header, index 3, char "%s"', val.charCodeAt(3));
777
- return true;
778
- }
779
- for (let i = 4; i < val.length; ++i) {
780
- if (!validHdrChars[val.charCodeAt(i)]) {
781
- debug('invalid header, index "%i", char "%s"', i, val.charCodeAt(i));
782
- return true;
783
- }
784
- }
785
- return false;
786
- }