@morojs/moro 1.7.29 → 1.8.0

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 (67) hide show
  1. package/README.md +89 -37
  2. package/dist/core/config/config-sources.js +114 -2
  3. package/dist/core/config/config-sources.js.map +1 -1
  4. package/dist/core/config/config-validator.js +187 -5
  5. package/dist/core/config/config-validator.js.map +1 -1
  6. package/dist/core/config/schema.js +31 -3
  7. package/dist/core/config/schema.js.map +1 -1
  8. package/dist/core/framework.d.ts +41 -2
  9. package/dist/core/framework.js +338 -73
  10. package/dist/core/framework.js.map +1 -1
  11. package/dist/core/http/http-server.d.ts +21 -22
  12. package/dist/core/http/http-server.js +268 -226
  13. package/dist/core/http/http-server.js.map +1 -1
  14. package/dist/core/http/http2-server.d.ts +6 -16
  15. package/dist/core/http/http2-server.js +14 -79
  16. package/dist/core/http/http2-server.js.map +1 -1
  17. package/dist/core/http/index.d.ts +1 -0
  18. package/dist/core/http/index.js +3 -0
  19. package/dist/core/http/index.js.map +1 -1
  20. package/dist/core/http/moro-engine-server.d.ts +263 -0
  21. package/dist/core/http/moro-engine-server.js +1939 -0
  22. package/dist/core/http/moro-engine-server.js.map +1 -0
  23. package/dist/core/http/utils/compression.d.ts +47 -0
  24. package/dist/core/http/utils/compression.js +132 -0
  25. package/dist/core/http/utils/compression.js.map +1 -0
  26. package/dist/core/http/utils/lazy-event-emitter.d.ts +11 -0
  27. package/dist/core/http/utils/lazy-event-emitter.js +69 -0
  28. package/dist/core/http/utils/lazy-event-emitter.js.map +1 -0
  29. package/dist/core/http/utils/multipart-parser.d.ts +32 -0
  30. package/dist/core/http/utils/multipart-parser.js +211 -0
  31. package/dist/core/http/utils/multipart-parser.js.map +1 -0
  32. package/dist/core/http/utils/query-parser.d.ts +1 -0
  33. package/dist/core/http/utils/query-parser.js +44 -0
  34. package/dist/core/http/utils/query-parser.js.map +1 -0
  35. package/dist/core/http/utils/size.d.ts +33 -0
  36. package/dist/core/http/utils/size.js +37 -0
  37. package/dist/core/http/utils/size.js.map +1 -0
  38. package/dist/core/http/utils/ssl-config.d.ts +69 -0
  39. package/dist/core/http/utils/ssl-config.js +116 -0
  40. package/dist/core/http/utils/ssl-config.js.map +1 -0
  41. package/dist/core/http/utils/uws-worker-clustering.js +8 -2
  42. package/dist/core/http/utils/uws-worker-clustering.js.map +1 -1
  43. package/dist/core/http/uws-http-server.d.ts +24 -3
  44. package/dist/core/http/uws-http-server.js +386 -65
  45. package/dist/core/http/uws-http-server.js.map +1 -1
  46. package/dist/core/middleware/built-in/compression/core.d.ts +3 -0
  47. package/dist/core/middleware/built-in/compression/core.js +28 -34
  48. package/dist/core/middleware/built-in/compression/core.js.map +1 -1
  49. package/dist/core/networking/adapters/engine-adapter.d.ts +23 -0
  50. package/dist/core/networking/adapters/engine-adapter.js +365 -0
  51. package/dist/core/networking/adapters/engine-adapter.js.map +1 -0
  52. package/dist/core/networking/adapters/index.d.ts +1 -0
  53. package/dist/core/networking/adapters/index.js +1 -0
  54. package/dist/core/networking/adapters/index.js.map +1 -1
  55. package/dist/core/networking/adapters/uws-adapter.js +26 -15
  56. package/dist/core/networking/adapters/uws-adapter.js.map +1 -1
  57. package/dist/core/utilities/package-utils.d.ts +68 -0
  58. package/dist/core/utilities/package-utils.js +198 -1
  59. package/dist/core/utilities/package-utils.js.map +1 -1
  60. package/dist/index.d.ts +1 -1
  61. package/dist/index.js +1 -1
  62. package/dist/index.js.map +1 -1
  63. package/dist/moro.d.ts +2 -0
  64. package/dist/moro.js +63 -21
  65. package/dist/moro.js.map +1 -1
  66. package/dist/types/config.d.ts +90 -5
  67. package/package.json +4 -1
@@ -0,0 +1,211 @@
1
+ // Shared multipart/form-data parser used by both the Node http server and the
2
+ // native engine server, so uploads behave identically on either transport.
3
+ // Operates on Buffers throughout - converting the payload to a string would
4
+ // corrupt binary file content.
5
+ //
6
+ // RFC 7578 (multipart/form-data) over RFC 2046 §5.1.1 framing:
7
+ // - boundary parameter may be quoted and may be followed by other
8
+ // Content-Type parameters
9
+ // - parts are delimited by CRLF "--" boundary; the first delimiter may
10
+ // appear without the leading CRLF (no preamble)
11
+ // - Content-Disposition parameters are parsed with real quoted-string
12
+ // handling (a `filename` containing `name=` must not corrupt the field
13
+ // name) and RFC 5987 `filename*` extended values are honored
14
+ // - part/header counts are capped so a crafted body cannot amplify one
15
+ // bounded upload into millions of allocations
16
+ const DEFAULT_MAX_PARTS = 1000;
17
+ const DEFAULT_MAX_PART_HEADER_BYTES = 16 * 1024;
18
+ /** Error thrown when a multipart limit is exceeded; carries a 413 statusCode
19
+ * so every server's existing entity-too-large handling picks it up. */
20
+ export class MultipartLimitError extends Error {
21
+ statusCode = 413;
22
+ constructor(message) {
23
+ super(message);
24
+ this.name = 'MultipartLimitError';
25
+ }
26
+ }
27
+ const HEADER_SEPARATOR = Buffer.from('\r\n\r\n');
28
+ const CRLF_BUF = Buffer.from('\r\n');
29
+ /**
30
+ * Extract the boundary parameter from a Content-Type value, honoring quoted
31
+ * boundaries and ignoring any parameters that follow it.
32
+ */
33
+ function extractBoundary(contentType) {
34
+ const match = /;\s*boundary\s*=\s*(?:"([^"]*)"|([^;]+))/i.exec(contentType);
35
+ if (!match)
36
+ return null;
37
+ const raw = (match[1] ?? match[2] ?? '').trim();
38
+ return raw || null;
39
+ }
40
+ /**
41
+ * Parse the parameters of a Content-Disposition value with quoted-string and
42
+ * quoted-pair handling. Returns a Map (not a plain object) so parameter names
43
+ * like __proto__ cannot interfere with lookups. First occurrence wins.
44
+ */
45
+ function parseDispositionParams(value) {
46
+ const params = new Map();
47
+ let i = value.indexOf(';');
48
+ while (i !== -1 && i < value.length) {
49
+ i++; // past ';'
50
+ while (i < value.length && (value[i] === ' ' || value[i] === '\t'))
51
+ i++;
52
+ const eq = value.indexOf('=', i);
53
+ if (eq === -1)
54
+ break;
55
+ const key = value.slice(i, eq).trim().toLowerCase();
56
+ let val;
57
+ let j = eq + 1;
58
+ while (j < value.length && (value[j] === ' ' || value[j] === '\t'))
59
+ j++;
60
+ if (value[j] === '"') {
61
+ j++;
62
+ const start = j;
63
+ while (j < value.length && value[j] !== '"') {
64
+ if (value[j] === '\\' && j + 1 < value.length)
65
+ j++; // quoted-pair
66
+ j++;
67
+ }
68
+ val = value.slice(start, j).replace(/\\(.)/g, '$1');
69
+ i = value.indexOf(';', j + 1);
70
+ }
71
+ else {
72
+ const end = value.indexOf(';', j);
73
+ val = (end === -1 ? value.slice(j) : value.slice(j, end)).trim();
74
+ i = end;
75
+ }
76
+ if (key && !params.has(key))
77
+ params.set(key, val);
78
+ }
79
+ return params;
80
+ }
81
+ /** Decode an RFC 5987 extended value (charset'lang'percent-encoded). */
82
+ function decodeExtendedValue(value) {
83
+ const match = /^(utf-8|iso-8859-1)'[^']*'(.+)$/i.exec(value);
84
+ if (!match)
85
+ return null;
86
+ try {
87
+ if (match[1].toLowerCase() === 'utf-8') {
88
+ return decodeURIComponent(match[2]);
89
+ }
90
+ return match[2].replace(/%([0-9a-fA-F]{2})/g, (_, hex) => String.fromCharCode(parseInt(hex, 16)));
91
+ }
92
+ catch {
93
+ return null;
94
+ }
95
+ }
96
+ /**
97
+ * Parse a buffered multipart/form-data payload into fields and files.
98
+ * Duplicate part names are last-wins (matching URLSearchParams-style access).
99
+ * @throws Error when the content type carries no boundary or the part count
100
+ * exceeds the limit
101
+ */
102
+ export function parseMultipart(buffer, contentType, limits) {
103
+ const boundary = extractBoundary(contentType);
104
+ if (!boundary) {
105
+ throw new Error('Invalid multipart boundary');
106
+ }
107
+ const maxParts = limits?.maxParts ?? DEFAULT_MAX_PARTS;
108
+ const maxHeaderBytes = limits?.maxPartHeaderBytes ?? DEFAULT_MAX_PART_HEADER_BYTES;
109
+ const maxFiles = limits?.maxFiles ?? 0; // 0 = no limit
110
+ const maxFileSize = limits?.maxFileSize ?? 0; // 0 = no limit
111
+ const fileCount = { n: 0 };
112
+ // Null-prototype objects: a part named "__proto__" is stored as a plain own
113
+ // key instead of silently vanishing into the prototype setter.
114
+ const fields = Object.create(null);
115
+ const files = Object.create(null);
116
+ const dashBoundary = Buffer.from(`--${boundary}`);
117
+ const delimiter = Buffer.from(`\r\n--${boundary}`);
118
+ // Locate the first delimiter: at the very start it appears without the
119
+ // leading CRLF; otherwise a preamble precedes it (RFC 2046 §5.1.1).
120
+ let pos;
121
+ if (buffer.subarray(0, dashBoundary.length).equals(dashBoundary)) {
122
+ pos = dashBoundary.length;
123
+ }
124
+ else {
125
+ const first = buffer.indexOf(delimiter);
126
+ if (first === -1)
127
+ return { fields, files };
128
+ pos = first + delimiter.length;
129
+ }
130
+ let partCount = 0;
131
+ for (;;) {
132
+ // After the boundary token: "--" marks the closing delimiter; otherwise
133
+ // optional padding then CRLF starts the part.
134
+ if (buffer[pos] === 0x2d && buffer[pos + 1] === 0x2d)
135
+ break;
136
+ const lineEnd = buffer.indexOf(CRLF_BUF, pos);
137
+ if (lineEnd === -1)
138
+ break;
139
+ const partStart = lineEnd + 2;
140
+ const next = buffer.indexOf(delimiter, partStart);
141
+ const partEnd = next === -1 ? buffer.length : next;
142
+ if (++partCount > maxParts) {
143
+ throw new MultipartLimitError(`Multipart payload exceeds ${maxParts} parts`);
144
+ }
145
+ // The delimiter includes the part's trailing CRLF, so the slice is the
146
+ // exact content - no trailing-byte trimming needed.
147
+ parsePart(buffer.subarray(partStart, partEnd), fields, files, maxHeaderBytes, {
148
+ maxFiles,
149
+ maxFileSize,
150
+ fileCount,
151
+ });
152
+ if (next === -1)
153
+ break;
154
+ pos = next + delimiter.length;
155
+ }
156
+ return { fields, files };
157
+ }
158
+ function parsePart(part, fields, files, maxHeaderBytes, fileLimits) {
159
+ const headerEndPos = part.indexOf(HEADER_SEPARATOR);
160
+ if (headerEndPos === -1 || headerEndPos > maxHeaderBytes)
161
+ return;
162
+ // Headers are always text - safe to convert to string
163
+ const headerText = part.subarray(0, headerEndPos).toString('utf8');
164
+ // Content stays as Buffer to preserve binary data
165
+ const content = part.subarray(headerEndPos + HEADER_SEPARATOR.length);
166
+ let disposition;
167
+ let partContentType;
168
+ for (const line of headerText.split('\r\n')) {
169
+ const colon = line.indexOf(':');
170
+ if (colon === -1)
171
+ continue;
172
+ const headerName = line.slice(0, colon).trim().toLowerCase();
173
+ if (headerName === 'content-disposition') {
174
+ disposition = line.slice(colon + 1).trim();
175
+ }
176
+ else if (headerName === 'content-type') {
177
+ partContentType = line.slice(colon + 1).trim();
178
+ }
179
+ }
180
+ if (!disposition)
181
+ return;
182
+ const params = parseDispositionParams(disposition);
183
+ const name = params.get('name');
184
+ // A part without a name cannot be keyed - never fall back to the
185
+ // (attacker-controlled) filename as the key.
186
+ if (!name)
187
+ return;
188
+ // filename* (RFC 5987) takes precedence over filename (RFC 6266 §4.3)
189
+ const extendedFilename = params.has('filename*')
190
+ ? decodeExtendedValue(params.get('filename*'))
191
+ : null;
192
+ const filename = extendedFilename ?? params.get('filename');
193
+ if (filename !== undefined && filename !== null) {
194
+ if (fileLimits.maxFileSize && content.length > fileLimits.maxFileSize) {
195
+ throw new MultipartLimitError(`Uploaded file '${filename}' exceeds ${fileLimits.maxFileSize} bytes`);
196
+ }
197
+ if (fileLimits.maxFiles && ++fileLimits.fileCount.n > fileLimits.maxFiles) {
198
+ throw new MultipartLimitError(`Multipart payload exceeds ${fileLimits.maxFiles} files`);
199
+ }
200
+ files[name] = {
201
+ filename,
202
+ mimetype: partContentType || 'application/octet-stream',
203
+ data: content,
204
+ size: content.length,
205
+ };
206
+ }
207
+ else {
208
+ fields[name] = content.toString('utf8');
209
+ }
210
+ }
211
+ //# sourceMappingURL=multipart-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multipart-parser.js","sourceRoot":"","sources":["../../../../src/core/http/utils/multipart-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function parseRawQueryString(queryString: string): Record<string, string>;
@@ -0,0 +1,44 @@
1
+ // Parse a raw query string ("a=1&b=2") into an object. Transport-neutral: the
2
+ // single canonical implementation for the Node http server, the uWS adapter,
3
+ // and the Moro engine adapter, so req.query is identical on every transport.
4
+ //
5
+ // Semantics follow application/x-www-form-urlencoded (WHATWG):
6
+ // - '+' decodes to a space in keys and values
7
+ // - malformed percent-escapes never throw (the raw text is kept)
8
+ // - a key without '=' yields '' ("?flag" -> { flag: '' })
9
+ // - duplicate keys are last-wins
10
+ // The result has a null prototype (like node:querystring), so a key named
11
+ // "__proto__" is stored as an own property instead of vanishing.
12
+ function decodeComponent(component) {
13
+ const plusDecoded = component.indexOf('+') === -1 ? component : component.replace(/\+/g, ' ');
14
+ if (plusDecoded.indexOf('%') === -1)
15
+ return plusDecoded;
16
+ try {
17
+ return decodeURIComponent(plusDecoded);
18
+ }
19
+ catch {
20
+ return plusDecoded;
21
+ }
22
+ }
23
+ export function parseRawQueryString(queryString) {
24
+ const result = Object.create(null);
25
+ if (!queryString)
26
+ return result;
27
+ if (queryString[0] === '?')
28
+ queryString = queryString.substring(1);
29
+ const pairs = queryString.split('&');
30
+ for (let i = 0; i < pairs.length; i++) {
31
+ const pair = pairs[i];
32
+ if (!pair)
33
+ continue;
34
+ const eqIdx = pair.indexOf('=');
35
+ if (eqIdx === -1) {
36
+ result[decodeComponent(pair)] = '';
37
+ }
38
+ else {
39
+ result[decodeComponent(pair.substring(0, eqIdx))] = decodeComponent(pair.substring(eqIdx + 1));
40
+ }
41
+ }
42
+ return result;
43
+ }
44
+ //# sourceMappingURL=query-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-parser.js","sourceRoot":"","sources":["../../../../src/core/http/utils/query-parser.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,6EAA6E;AAC7E,6EAA6E;AAC7E,EAAE;AACF,+DAA+D;AAC/D,gDAAgD;AAChD,mEAAmE;AACnE,4DAA4D;AAC5D,mCAAmC;AACnC,0EAA0E;AAC1E,iEAAiE;AAEjE,SAAS,eAAe,CAAC,SAAiB;IACxC,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC9F,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,WAAW,CAAC;IACxD,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,WAAW,CAAC;IACrB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,MAAM,MAAM,GAA2B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3D,IAAI,CAAC,WAAW;QAAE,OAAO,MAAM,CAAC;IAChC,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,eAAe,CACjE,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAC1B,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,33 @@
1
+ export declare function parseSizeToBytes(size: string | number, fallback?: number): number;
2
+ /**
3
+ * Flattened, size-resolved runtime limits passed from the framework to every
4
+ * HTTP server. undefined = use that server's own documented default. Mirrors
5
+ * the RuntimeLimits built in framework.ts (kept here so the servers can import
6
+ * it without depending on framework.ts).
7
+ */
8
+ export interface HttpRuntimeLimits {
9
+ maxBodySize?: number;
10
+ maxUploadSize?: number;
11
+ maxConnections?: number;
12
+ backlog?: number;
13
+ timeouts?: {
14
+ request?: number;
15
+ idle?: number;
16
+ keepAlive?: number;
17
+ headers?: number;
18
+ };
19
+ maxHeaderSize?: number;
20
+ maxHeaders?: number;
21
+ wsMaxMessageSize?: number;
22
+ wsBackpressureLimit?: number;
23
+ writeHighWaterMark?: number;
24
+ maxPendingBytes?: number;
25
+ multipart?: {
26
+ maxParts?: number;
27
+ maxPartHeaderBytes?: number;
28
+ maxFiles?: number;
29
+ maxFileSize?: number;
30
+ };
31
+ }
32
+ /** True when `size` is a number, or a string parseable by parseSizeToBytes. */
33
+ export declare function isValidSize(size: unknown): boolean;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Parse a human size string ("10mb", "5gb", "16kb") or a raw number of bytes
3
+ * into bytes. Shared by config validation, the runtime-limits builder, and
4
+ * every HTTP server so `bodySizeLimit: '10mb'` means the same thing
5
+ * everywhere.
6
+ *
7
+ * A number passes through unchanged. An unparseable string falls back to
8
+ * `fallback` (10 MB by default) so a typo degrades to a safe default rather
9
+ * than 0/NaN.
10
+ */
11
+ const UNITS = {
12
+ b: 1,
13
+ kb: 1024,
14
+ mb: 1024 * 1024,
15
+ gb: 1024 * 1024 * 1024,
16
+ };
17
+ export function parseSizeToBytes(size, fallback = 10 * 1024 * 1024) {
18
+ if (typeof size === 'number')
19
+ return size;
20
+ if (typeof size !== 'string')
21
+ return fallback;
22
+ const match = size.toLowerCase().match(/^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/);
23
+ if (!match)
24
+ return fallback;
25
+ const value = parseFloat(match[1]);
26
+ const unit = match[2] || 'b';
27
+ return Math.round(value * UNITS[unit]);
28
+ }
29
+ /** True when `size` is a number, or a string parseable by parseSizeToBytes. */
30
+ export function isValidSize(size) {
31
+ if (typeof size === 'number')
32
+ return Number.isFinite(size) && size >= 0;
33
+ if (typeof size !== 'string')
34
+ return false;
35
+ return /^(\d+(?:\.\d+)?)\s*(b|kb|mb|gb)?$/i.test(size.trim());
36
+ }
37
+ //# sourceMappingURL=size.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"size.js","sourceRoot":"","sources":["../../../../src/core/http/utils/size.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,KAAK,GAA8B;IACvC,CAAC,EAAE,CAAC;IACJ,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI,GAAG,IAAI;IACf,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI;CACvB,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAC9B,IAAqB,EACrB,WAAmB,EAAE,GAAG,IAAI,GAAG,IAAI;IAEnC,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAC5E,IAAI,CAAC,KAAK;QAAE,OAAO,QAAQ,CAAC;IAE5B,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;IAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACzC,CAAC;AAiCD,+EAA+E;AAC/E,MAAM,UAAU,WAAW,CAAC,IAAa;IACvC,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;IACxE,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC3C,OAAO,oCAAoC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAChE,CAAC"}
@@ -0,0 +1,69 @@
1
+ import type { MoroLogger } from '../../logger/index.js';
2
+ /** Raw, un-normalized SSL config as a user may supply it (either shape). */
3
+ export interface SSLConfigInput {
4
+ key_file_name?: string;
5
+ cert_file_name?: string;
6
+ ca_file_name?: string | string[];
7
+ keyFile?: string;
8
+ certFile?: string;
9
+ caFile?: string | string[];
10
+ key?: string | Buffer;
11
+ cert?: string | Buffer;
12
+ ca?: string | Buffer | Array<string | Buffer>;
13
+ passphrase?: string;
14
+ minVersion?: 'TLSv1.2' | 'TLSv1.3';
15
+ requestCert?: boolean;
16
+ rejectUnauthorized?: boolean;
17
+ }
18
+ /** Canonical internal SSL config after normalization. */
19
+ export interface NormalizedSSLConfig {
20
+ keyFile?: string;
21
+ certFile?: string;
22
+ caFile?: string[];
23
+ key?: string | Buffer;
24
+ cert?: string | Buffer;
25
+ ca?: Array<string | Buffer>;
26
+ passphrase?: string;
27
+ minVersion?: 'TLSv1.2' | 'TLSv1.3';
28
+ requestCert?: boolean;
29
+ rejectUnauthorized?: boolean;
30
+ }
31
+ /**
32
+ * Normalize the two historical SSL shapes into one. `serverSsl`
33
+ * (config.server.ssl) wins over `optionsHttps` (options.https) when both are
34
+ * present, matching the pre-existing precedence in framework.ts. Returns null
35
+ * when neither carries any key/cert material (TLS simply off).
36
+ */
37
+ export declare function normalizeSSLConfig(serverSsl?: SSLConfigInput | null, optionsHttps?: SSLConfigInput | null, logger?: MoroLogger): NormalizedSSLConfig | null;
38
+ /** True when the config actually carries a key+cert (complete TLS material). */
39
+ export declare function sslIsComplete(ssl: NormalizedSSLConfig): boolean;
40
+ /**
41
+ * Project for the Node http/https and HTTP/2 servers: node's tls API wants
42
+ * key/cert/ca as strings or Buffers, so any file paths are read here.
43
+ */
44
+ export declare function sslForNode(ssl: NormalizedSSLConfig): {
45
+ key: string | Buffer;
46
+ cert: string | Buffer;
47
+ ca?: Array<string | Buffer>;
48
+ passphrase?: string;
49
+ minVersion?: string;
50
+ requestCert?: boolean;
51
+ rejectUnauthorized?: boolean;
52
+ };
53
+ /**
54
+ * Project for uWebSockets.js SSLApp, which requires FILE PATHS (it has no
55
+ * inline-PEM option). Returns null when only inline PEM is available so the
56
+ * caller can log a clear error instead of silently booting plain HTTP.
57
+ */
58
+ export declare function sslForUws(ssl: NormalizedSSLConfig): {
59
+ key_file_name: string;
60
+ cert_file_name: string;
61
+ ca_file_name?: string;
62
+ passphrase?: string;
63
+ } | null;
64
+ /**
65
+ * Project for the native @morojs/engine serve() options.ssl, which accepts
66
+ * BOTH shapes (file paths and inline PEM) and prefers inline. Pass everything
67
+ * through; the engine decides.
68
+ */
69
+ export declare function sslForEngine(ssl: NormalizedSSLConfig): Record<string, unknown>;
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Unified SSL/TLS configuration.
3
+ *
4
+ * MoroJS historically carried TWO incompatible SSL shapes:
5
+ * - `config.server.ssl` = uWS-style file paths { key_file_name, cert_file_name, passphrase }
6
+ * - `options.https` = node-style buffers { key, cert, ca }
7
+ * and each reached only one runtime (uWS / http2 respectively). This module
8
+ * normalizes both into ONE internal shape and projects it back out for each
9
+ * of the four servers (Node https, uWS SSLApp, HTTP/2, the native engine), so
10
+ * a single `server.ssl` config flows everywhere.
11
+ */
12
+ import { readFileSync } from 'fs';
13
+ const toArray = (v) => v === undefined ? undefined : Array.isArray(v) ? v : [v];
14
+ /**
15
+ * Normalize the two historical SSL shapes into one. `serverSsl`
16
+ * (config.server.ssl) wins over `optionsHttps` (options.https) when both are
17
+ * present, matching the pre-existing precedence in framework.ts. Returns null
18
+ * when neither carries any key/cert material (TLS simply off).
19
+ */
20
+ export function normalizeSSLConfig(serverSsl, optionsHttps, logger) {
21
+ if (serverSsl && optionsHttps) {
22
+ logger?.warn('Both server.ssl and options.https are set; server.ssl takes precedence', 'SSL');
23
+ }
24
+ const src = serverSsl ?? optionsHttps;
25
+ if (!src)
26
+ return null;
27
+ const out = {
28
+ keyFile: src.keyFile ?? src.key_file_name,
29
+ certFile: src.certFile ?? src.cert_file_name,
30
+ caFile: toArray(src.caFile ?? src.ca_file_name),
31
+ key: src.key,
32
+ cert: src.cert,
33
+ ca: toArray(src.ca),
34
+ passphrase: src.passphrase,
35
+ minVersion: src.minVersion,
36
+ requestCert: src.requestCert,
37
+ rejectUnauthorized: src.rejectUnauthorized,
38
+ };
39
+ const hasKey = Boolean(out.key || out.keyFile);
40
+ const hasCert = Boolean(out.cert || out.certFile);
41
+ if (!hasKey && !hasCert)
42
+ return null; // nothing usable -> TLS off
43
+ return out;
44
+ }
45
+ /** True when the config actually carries a key+cert (complete TLS material). */
46
+ export function sslIsComplete(ssl) {
47
+ return Boolean((ssl.key || ssl.keyFile) && (ssl.cert || ssl.certFile));
48
+ }
49
+ /**
50
+ * Project for the Node http/https and HTTP/2 servers: node's tls API wants
51
+ * key/cert/ca as strings or Buffers, so any file paths are read here.
52
+ */
53
+ export function sslForNode(ssl) {
54
+ const key = ssl.key ?? (ssl.keyFile ? readFileSync(ssl.keyFile) : undefined);
55
+ const cert = ssl.cert ?? (ssl.certFile ? readFileSync(ssl.certFile) : undefined);
56
+ const ca = ssl.ca ?? (ssl.caFile ? ssl.caFile.map(p => readFileSync(p)) : undefined);
57
+ if (!key || !cert) {
58
+ throw new Error('sslForNode requires both a key and a certificate');
59
+ }
60
+ return {
61
+ key,
62
+ cert,
63
+ ...(ca && { ca }),
64
+ ...(ssl.passphrase && { passphrase: ssl.passphrase }),
65
+ ...(ssl.minVersion && { minVersion: ssl.minVersion }),
66
+ ...(ssl.requestCert !== undefined && { requestCert: ssl.requestCert }),
67
+ ...(ssl.rejectUnauthorized !== undefined && {
68
+ rejectUnauthorized: ssl.rejectUnauthorized,
69
+ }),
70
+ };
71
+ }
72
+ /**
73
+ * Project for uWebSockets.js SSLApp, which requires FILE PATHS (it has no
74
+ * inline-PEM option). Returns null when only inline PEM is available so the
75
+ * caller can log a clear error instead of silently booting plain HTTP.
76
+ */
77
+ export function sslForUws(ssl) {
78
+ if (!ssl.keyFile || !ssl.certFile)
79
+ return null;
80
+ return {
81
+ key_file_name: ssl.keyFile,
82
+ cert_file_name: ssl.certFile,
83
+ ...(ssl.caFile && ssl.caFile[0] && { ca_file_name: ssl.caFile[0] }),
84
+ ...(ssl.passphrase && { passphrase: ssl.passphrase }),
85
+ };
86
+ }
87
+ /**
88
+ * Project for the native @morojs/engine serve() options.ssl, which accepts
89
+ * BOTH shapes (file paths and inline PEM) and prefers inline. Pass everything
90
+ * through; the engine decides.
91
+ */
92
+ export function sslForEngine(ssl) {
93
+ const out = {};
94
+ if (ssl.keyFile)
95
+ out.key_file_name = ssl.keyFile;
96
+ if (ssl.certFile)
97
+ out.cert_file_name = ssl.certFile;
98
+ if (ssl.caFile && ssl.caFile[0])
99
+ out.ca_file_name = ssl.caFile[0];
100
+ if (ssl.key)
101
+ out.key = ssl.key;
102
+ if (ssl.cert)
103
+ out.cert = ssl.cert;
104
+ if (ssl.ca && ssl.ca[0])
105
+ out.ca = ssl.ca[0];
106
+ if (ssl.passphrase)
107
+ out.passphrase = ssl.passphrase;
108
+ if (ssl.minVersion)
109
+ out.minVersion = ssl.minVersion;
110
+ if (ssl.requestCert !== undefined)
111
+ out.requestCert = ssl.requestCert;
112
+ if (ssl.rejectUnauthorized !== undefined)
113
+ out.rejectUnauthorized = ssl.rejectUnauthorized;
114
+ return out;
115
+ }
116
+ //# sourceMappingURL=ssl-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssl-config.js","sourceRoot":"","sources":["../../../../src/core/http/utils/ssl-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAoClC,MAAM,OAAO,GAAG,CAAI,CAAsB,EAAmB,EAAE,CAC7D,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAAiC,EACjC,YAAoC,EACpC,MAAmB;IAEnB,IAAI,SAAS,IAAI,YAAY,EAAE,CAAC;QAC9B,MAAM,EAAE,IAAI,CAAC,wEAAwE,EAAE,KAAK,CAAC,CAAC;IAChG,CAAC;IACD,MAAM,GAAG,GAAG,SAAS,IAAI,YAAY,CAAC;IACtC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAEtB,MAAM,GAAG,GAAwB;QAC/B,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,aAAa;QACzC,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,cAAc;QAC5C,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,YAAY,CAAC;QAC/C,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,kBAAkB,EAAE,GAAG,CAAC,kBAAkB;KAC3C,CAAC;IAEF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC,CAAC,4BAA4B;IAClE,OAAO,GAAG,CAAC;AACb,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,aAAa,CAAC,GAAwB;IACpD,OAAO,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AACzE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,GAAwB;IASjD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC7E,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACjF,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACrF,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,OAAO;QACL,GAAG;QACH,IAAI;QACJ,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QACjB,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;QACrD,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;QACrD,GAAG,CAAC,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC;QACtE,GAAG,CAAC,GAAG,CAAC,kBAAkB,KAAK,SAAS,IAAI;YAC1C,kBAAkB,EAAE,GAAG,CAAC,kBAAkB;SAC3C,CAAC;KACH,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,GAAwB;IAMhD,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC/C,OAAO;QACL,aAAa,EAAE,GAAG,CAAC,OAAO;QAC1B,cAAc,EAAE,GAAG,CAAC,QAAQ;QAC5B,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;KACtD,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,GAAwB;IACnD,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,IAAI,GAAG,CAAC,OAAO;QAAE,GAAG,CAAC,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC;IACjD,IAAI,GAAG,CAAC,QAAQ;QAAE,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC,QAAQ,CAAC;IACpD,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAAE,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAClE,IAAI,GAAG,CAAC,GAAG;QAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IAC/B,IAAI,GAAG,CAAC,IAAI;QAAE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IAClC,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5C,IAAI,GAAG,CAAC,UAAU;QAAE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;IACpD,IAAI,GAAG,CAAC,UAAU;QAAE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;IACpD,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS;QAAE,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;IACrE,IAAI,GAAG,CAAC,kBAAkB,KAAK,SAAS;QAAE,GAAG,CAAC,kBAAkB,GAAG,GAAG,CAAC,kBAAkB,CAAC;IAC1F,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -10,6 +10,7 @@
10
10
  import { Worker, isMainThread, threadId, parentPort } from 'worker_threads';
11
11
  import os from 'os';
12
12
  import { createFrameworkLogger } from '../../logger/index.js';
13
+ import { loadNativeEngine } from '../../utilities/package-utils.js';
13
14
  const logger = createFrameworkLogger('UWSClustering');
14
15
  export class UWSWorkerClusterManager {
15
16
  workers = [];
@@ -46,8 +47,13 @@ export class UWSWorkerClusterManager {
46
47
  throw new Error('startAcceptorAndWorkers can only be called from main thread');
47
48
  }
48
49
  try {
49
- // Lazy load uWebSockets.js
50
- const uwsModule = await import('uWebSockets.js');
50
+ // Worker clustering uses the uWS-shaped App/SSLApp + SO_REUSEPORT API,
51
+ // so it needs uWebSockets.js specifically (not @morojs/engine).
52
+ const engine = loadNativeEngine({ candidates: ['uWebSockets.js'] });
53
+ if (!engine) {
54
+ throw new Error('uWebSockets.js is not available for uWS worker clustering');
55
+ }
56
+ const uwsModule = engine.module;
51
57
  this.uws = uwsModule.default || uwsModule;
52
58
  // Create acceptor app - must match SSL config of worker apps
53
59
  const ssl = this.config.ssl;
@@ -1 +1 @@
1
- {"version":3,"file":"uws-worker-clustering.js","sourceRoot":"","sources":["../../../../src/core/http/utils/uws-worker-clustering.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"uws-worker-clustering.js","sourceRoot":"","sources":["../../../../src/core/http/utils/uws-worker-clustering.ts"],"names":[],"mappings":"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"}