@morojs/moro 1.8.11 → 1.8.13

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 (84) hide show
  1. package/README.md +4 -2
  2. package/dist/core/cluster/thread-cluster.d.ts +25 -0
  3. package/dist/core/cluster/thread-cluster.js +95 -3
  4. package/dist/core/cluster/thread-cluster.js.map +1 -1
  5. package/dist/core/config/config-validator.js +15 -0
  6. package/dist/core/config/config-validator.js.map +1 -1
  7. package/dist/core/config/index.js +19 -2
  8. package/dist/core/config/index.js.map +1 -1
  9. package/dist/core/framework.d.ts +26 -0
  10. package/dist/core/framework.js +195 -6
  11. package/dist/core/framework.js.map +1 -1
  12. package/dist/core/http/http-server.d.ts +17 -0
  13. package/dist/core/http/http-server.js +21 -1
  14. package/dist/core/http/http-server.js.map +1 -1
  15. package/dist/core/http/http2-server.d.ts +13 -0
  16. package/dist/core/http/http2-server.js +11 -0
  17. package/dist/core/http/http2-server.js.map +1 -1
  18. package/dist/core/http/moro-engine-server.d.ts +28 -0
  19. package/dist/core/http/moro-engine-server.js +118 -12
  20. package/dist/core/http/moro-engine-server.js.map +1 -1
  21. package/dist/core/http/utils/body-type.d.ts +12 -0
  22. package/dist/core/http/utils/body-type.js +70 -0
  23. package/dist/core/http/utils/body-type.js.map +1 -0
  24. package/dist/core/http/utils/ssl-config.d.ts +11 -0
  25. package/dist/core/http/utils/ssl-config.js +3 -0
  26. package/dist/core/http/utils/ssl-config.js.map +1 -1
  27. package/dist/core/http/utils/uws-worker-clustering.js +5 -4
  28. package/dist/core/http/utils/uws-worker-clustering.js.map +1 -1
  29. package/dist/core/http/uws-http-server.d.ts +3 -0
  30. package/dist/core/http/uws-http-server.js +22 -1
  31. package/dist/core/http/uws-http-server.js.map +1 -1
  32. package/dist/core/middleware/built-in/body-parsers/index.d.ts +18 -0
  33. package/dist/core/middleware/built-in/body-parsers/index.js +41 -0
  34. package/dist/core/middleware/built-in/body-parsers/index.js.map +1 -1
  35. package/dist/core/middleware/built-in/cache/adapters/cache/redis.d.ts +32 -8
  36. package/dist/core/middleware/built-in/cache/adapters/cache/redis.js +117 -25
  37. package/dist/core/middleware/built-in/cache/adapters/cache/redis.js.map +1 -1
  38. package/dist/core/middleware/built-in/compression/core.js +5 -0
  39. package/dist/core/middleware/built-in/compression/core.js.map +1 -1
  40. package/dist/core/middleware/built-in/session/core.d.ts +1 -0
  41. package/dist/core/middleware/built-in/session/core.js.map +1 -1
  42. package/dist/core/middleware/built-in/static/core.d.ts +18 -0
  43. package/dist/core/middleware/built-in/static/core.js +128 -7
  44. package/dist/core/middleware/built-in/static/core.js.map +1 -1
  45. package/dist/core/networking/adapters/engine-adapter.d.ts +2 -2
  46. package/dist/core/networking/adapters/engine-adapter.js +40 -1
  47. package/dist/core/networking/adapters/engine-adapter.js.map +1 -1
  48. package/dist/core/networking/adapters/socketio-adapter.d.ts +2 -2
  49. package/dist/core/networking/adapters/socketio-adapter.js +10 -1
  50. package/dist/core/networking/adapters/socketio-adapter.js.map +1 -1
  51. package/dist/core/networking/adapters/uws-adapter.d.ts +2 -2
  52. package/dist/core/networking/adapters/uws-adapter.js +54 -3
  53. package/dist/core/networking/adapters/uws-adapter.js.map +1 -1
  54. package/dist/core/networking/adapters/ws-adapter.d.ts +9 -2
  55. package/dist/core/networking/adapters/ws-adapter.js +97 -12
  56. package/dist/core/networking/adapters/ws-adapter.js.map +1 -1
  57. package/dist/core/networking/websocket-adapter.d.ts +19 -1
  58. package/dist/core/networking/websocket-adapter.js.map +1 -1
  59. package/dist/core/routing/index.d.ts +12 -7
  60. package/dist/core/routing/index.js +7 -2
  61. package/dist/core/routing/index.js.map +1 -1
  62. package/dist/core/routing/unified-router.d.ts +48 -9
  63. package/dist/core/routing/unified-router.js +112 -34
  64. package/dist/core/routing/unified-router.js.map +1 -1
  65. package/dist/core/utilities/package-utils.d.ts +11 -0
  66. package/dist/core/utilities/package-utils.js +3 -0
  67. package/dist/core/utilities/package-utils.js.map +1 -1
  68. package/dist/core/workers/worker-manager.js +2 -2
  69. package/dist/core/workers/worker-manager.js.map +1 -1
  70. package/dist/index.d.ts +4 -3
  71. package/dist/index.js +2 -1
  72. package/dist/index.js.map +1 -1
  73. package/dist/moro.d.ts +29 -18
  74. package/dist/moro.js +63 -7
  75. package/dist/moro.js.map +1 -1
  76. package/dist/types/cache.d.ts +2 -0
  77. package/dist/types/cache.js.map +1 -1
  78. package/dist/types/config.d.ts +9 -0
  79. package/dist/types/config.js.map +1 -1
  80. package/dist/types/http.d.ts +6 -0
  81. package/dist/types/http.js.map +1 -1
  82. package/dist/types/session.d.ts +1 -0
  83. package/dist/types/session.js.map +1 -1
  84. package/package.json +1 -1
@@ -1,3 +1,4 @@
1
+ import { bodyIsText } from './utils/body-type.js';
1
2
  import { createRequire } from 'module';
2
3
  import { promisify } from 'util';
3
4
  import { randomUUID } from 'crypto';
@@ -115,6 +116,10 @@ export class MoroIncomingMessage extends http.IncomingMessage {
115
116
  body = null;
116
117
  path = '';
117
118
  _queryString = null;
119
+ /** The request body exactly as received, before any parsing; null when empty. */
120
+ get rawBody() {
121
+ return this._rawBody ?? null;
122
+ }
118
123
  // Single slot for every lazily-computed/assigned helper value (query,
119
124
  // cookies, requestId, hostname, ...). Allocated on first access - a plain
120
125
  // JSON GET that never touches the helpers never allocates it, and the
@@ -1562,6 +1567,8 @@ export class MoroHttpServer {
1562
1567
  const body = chunks.length === 1 && firstChunk !== undefined
1563
1568
  ? firstChunk
1564
1569
  : Buffer.concat(chunks, totalLength);
1570
+ if (totalLength > 0)
1571
+ req._rawBody = body;
1565
1572
  if (contentType.includes('application/json')) {
1566
1573
  // Empty JSON body -> null (parity with the engine/uWS servers, and
1567
1574
  // avoids JSON.parse('') throwing and 500ing an empty POST).
@@ -1574,7 +1581,9 @@ export class MoroHttpServer {
1574
1581
  resolve(this.parseMultipart(body, contentType));
1575
1582
  }
1576
1583
  else {
1577
- resolve(body.toString());
1584
+ // Text decodes to a string; binary (octet-stream, images, protobuf,
1585
+ // ...) stays a Buffer - decoding it would corrupt it irreversibly.
1586
+ resolve(bodyIsText(contentType) ? body.toString() : body);
1578
1587
  }
1579
1588
  }
1580
1589
  catch (error) {
@@ -1788,6 +1797,17 @@ export class MoroHttpServer {
1788
1797
  forceCleanup() {
1789
1798
  this.forceCleanupPools();
1790
1799
  }
1800
+ /**
1801
+ * Replace the TLS certificate/key for new handshakes (node's
1802
+ * tls.Server#setSecureContext). Throws when the server is plain HTTP.
1803
+ */
1804
+ updateSsl(ssl) {
1805
+ const server = this.server;
1806
+ if (typeof server.setSecureContext !== 'function') {
1807
+ throw new Error('updateSsl: this server was not started with TLS (server.ssl)');
1808
+ }
1809
+ server.setSecureContext(ssl);
1810
+ }
1791
1811
  getServer() {
1792
1812
  return this.server;
1793
1813
  }