@pristine-ts/http 4.0.1 → 4.0.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 (38) hide show
  1. package/dist/lib/cjs/cors/cors-preflight-response.interface.js +3 -0
  2. package/dist/lib/cjs/cors/cors-preflight-response.interface.js.map +1 -0
  3. package/dist/lib/cjs/cors/cors-request-context.interface.js +3 -0
  4. package/dist/lib/cjs/cors/cors-request-context.interface.js.map +1 -0
  5. package/dist/lib/cjs/cors/cors-request.handler.js +207 -0
  6. package/dist/lib/cjs/cors/cors-request.handler.js.map +1 -0
  7. package/dist/lib/cjs/cors/cors.js +20 -0
  8. package/dist/lib/cjs/cors/cors.js.map +1 -0
  9. package/dist/lib/cjs/http.configuration-keys.js +14 -0
  10. package/dist/lib/cjs/http.configuration-keys.js.map +1 -1
  11. package/dist/lib/cjs/http.module.js +101 -0
  12. package/dist/lib/cjs/http.module.js.map +1 -1
  13. package/dist/lib/cjs/servers/kernel.http-server.js +54 -5
  14. package/dist/lib/cjs/servers/kernel.http-server.js.map +1 -1
  15. package/dist/lib/esm/cors/cors-preflight-response.interface.js +2 -0
  16. package/dist/lib/esm/cors/cors-preflight-response.interface.js.map +1 -0
  17. package/dist/lib/esm/cors/cors-request-context.interface.js +2 -0
  18. package/dist/lib/esm/cors/cors-request-context.interface.js.map +1 -0
  19. package/dist/lib/esm/cors/cors-request.handler.js +204 -0
  20. package/dist/lib/esm/cors/cors-request.handler.js.map +1 -0
  21. package/dist/lib/esm/cors/cors.js +4 -0
  22. package/dist/lib/esm/cors/cors.js.map +1 -0
  23. package/dist/lib/esm/http.configuration-keys.js +14 -0
  24. package/dist/lib/esm/http.configuration-keys.js.map +1 -1
  25. package/dist/lib/esm/http.module.js +101 -0
  26. package/dist/lib/esm/http.module.js.map +1 -1
  27. package/dist/lib/esm/servers/kernel.http-server.js +54 -5
  28. package/dist/lib/esm/servers/kernel.http-server.js.map +1 -1
  29. package/dist/lib/tsconfig.cjs.tsbuildinfo +1 -1
  30. package/dist/lib/tsconfig.tsbuildinfo +1 -1
  31. package/dist/types/cors/cors-preflight-response.interface.d.ts +20 -0
  32. package/dist/types/cors/cors-request-context.interface.d.ts +36 -0
  33. package/dist/types/cors/cors-request.handler.d.ts +94 -0
  34. package/dist/types/cors/cors.d.ts +3 -0
  35. package/dist/types/http.configuration-keys.d.ts +22 -0
  36. package/dist/types/http.module.d.ts +1 -0
  37. package/dist/types/servers/kernel.http-server.d.ts +13 -1
  38. package/package.json +10 -10
@@ -0,0 +1,204 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import { injectable } from "tsyringe";
14
+ import { injectConfig, moduleScoped } from "@pristine-ts/common";
15
+ import { HttpModuleKeyname } from "../http.module.keyname";
16
+ import { HttpConfigurationKeys } from "../http.configuration-keys";
17
+ /**
18
+ * The config-driven CORS policy engine that `KernelHttpServer` consults inside its request path,
19
+ * BEFORE `kernel.handle()` — the one place that sees the raw request/response and can answer a
20
+ * preflight or reject an origin without the networking `Router` ever running.
21
+ *
22
+ * All decision methods are pure functions of the injected configuration plus a normalized
23
+ * {@link CorsRequestContextInterface}, so the full behavior matrix is unit-testable by
24
+ * constructing this class directly (no live socket, no Node request object required).
25
+ *
26
+ * ## Activation
27
+ * CORS is **inactive unless configured**. Two independent switches:
28
+ * - `cors.allowed-origins` non-empty → origin/preflight/header-echo logic activates.
29
+ * - `cors.allowed-hosts` non-empty → the Host-header allowlist (DNS-rebinding defense) activates.
30
+ * With neither set, every method is a no-op and the server behaves exactly as it did before CORS
31
+ * existed.
32
+ *
33
+ * ## Guarantees
34
+ * - Never emits `Access-Control-Allow-Origin: *` — only an exact echo of an allow-listed Origin.
35
+ * - Never reflects an arbitrary Origin — an Origin absent from the allowlist gets no ACAO headers.
36
+ */
37
+ let CorsRequestHandler = class CorsRequestHandler {
38
+ constructor(allowedOrigins, allowedMethods, allowedHeaders, exposedHeaders, maxAge, allowCredentials, allowPrivateNetwork, allowedHosts) {
39
+ this.allowedOrigins = this.normalizeList(allowedOrigins);
40
+ this.allowedMethods = this.normalizeList(allowedMethods);
41
+ this.allowedHeaders = this.normalizeList(allowedHeaders);
42
+ this.exposedHeaders = this.normalizeList(exposedHeaders);
43
+ this.maxAge = maxAge;
44
+ this.allowCredentials = allowCredentials === true;
45
+ this.allowPrivateNetwork = allowPrivateNetwork === true;
46
+ this.allowedHosts = this.normalizeList(allowedHosts);
47
+ }
48
+ /**
49
+ * `true` when an origin allowlist is configured — gates the preflight short-circuit and the
50
+ * `Access-Control-Allow-Origin` echo on actual responses.
51
+ */
52
+ get isOriginCheckEnabled() {
53
+ return this.allowedOrigins.length > 0;
54
+ }
55
+ /**
56
+ * `true` when a Host allowlist is configured — gates the DNS-rebinding 403.
57
+ */
58
+ get isHostCheckEnabled() {
59
+ return this.allowedHosts.length > 0;
60
+ }
61
+ /**
62
+ * Whether any CORS feature is active. `KernelHttpServer` can skip all CORS work when this is
63
+ * `false`, keeping the un-configured request path byte-for-byte identical to before.
64
+ */
65
+ get isEnabled() {
66
+ return this.isOriginCheckEnabled || this.isHostCheckEnabled;
67
+ }
68
+ /**
69
+ * Normalizes a raw Node request into the transport-agnostic {@link CorsRequestContextInterface}.
70
+ * Node lower-cases header names on `IncomingMessage`, and multi-valued headers arrive as arrays;
71
+ * we take the method + the CORS-relevant headers and coerce them to the single-string shape the
72
+ * decision methods expect.
73
+ */
74
+ buildContext(method, headers) {
75
+ var _a;
76
+ const readHeader = (name) => {
77
+ const value = headers[name];
78
+ if (Array.isArray(value)) {
79
+ return value[0];
80
+ }
81
+ return value !== null && value !== void 0 ? value : undefined;
82
+ };
83
+ return {
84
+ method: (method !== null && method !== void 0 ? method : "GET").toUpperCase(),
85
+ origin: readHeader("origin"),
86
+ host: readHeader("host"),
87
+ accessControlRequestMethod: readHeader("access-control-request-method"),
88
+ accessControlRequestHeaders: readHeader("access-control-request-headers"),
89
+ accessControlRequestPrivateNetwork: ((_a = readHeader("access-control-request-private-network")) !== null && _a !== void 0 ? _a : "").toLowerCase() === "true",
90
+ };
91
+ }
92
+ /**
93
+ * Host-header allowlist check (loopback DNS-rebinding defense). Returns `true` (allow) when no
94
+ * allowlist is configured; otherwise the request's `Host` must exactly match a configured entry
95
+ * (case-insensitive, since host names are). A missing `Host` against a configured allowlist is
96
+ * rejected. `KernelHttpServer` turns a `false` here into a `403` before any routing.
97
+ */
98
+ isHostAllowed(host) {
99
+ if (this.isHostCheckEnabled === false) {
100
+ return true;
101
+ }
102
+ if (host === undefined) {
103
+ return false;
104
+ }
105
+ const normalizedHost = host.trim().toLowerCase();
106
+ return this.allowedHosts.some(allowedHost => allowedHost.toLowerCase() === normalizedHost);
107
+ }
108
+ /**
109
+ * Exact-match origin allowlist check. An absent Origin is never "allowed" (there is nothing to
110
+ * echo). We never wildcard and never reflect an arbitrary Origin.
111
+ */
112
+ isOriginAllowed(origin) {
113
+ if (origin === undefined) {
114
+ return false;
115
+ }
116
+ const normalizedOrigin = origin.trim();
117
+ return this.allowedOrigins.some(allowedOrigin => allowedOrigin === normalizedOrigin);
118
+ }
119
+ /**
120
+ * Decides whether `context` is a CORS preflight that must be answered before routing, and if so
121
+ * returns the `204` response (status + headers) to write. Returns `undefined` when the request is
122
+ * not a preflight we own — the caller then lets it route normally.
123
+ *
124
+ * A CORS preflight is an `OPTIONS` carrying `Access-Control-Request-Method`. We only take over
125
+ * preflight handling when an origin allowlist is configured (same-origin requests never send
126
+ * `Access-Control-Request-Method`, so app-owned `OPTIONS` routes are never stolen). An allow-listed
127
+ * Origin gets the full `Access-Control-*` set; a disallowed Origin still gets a bare `204` with no
128
+ * ACAO — the browser blocks it, and we never leak an arbitrary Origin.
129
+ */
130
+ buildPreflightResponse(context) {
131
+ if (this.isOriginCheckEnabled === false) {
132
+ return undefined;
133
+ }
134
+ if (context.method !== "OPTIONS" || context.accessControlRequestMethod === undefined) {
135
+ return undefined;
136
+ }
137
+ const headers = {};
138
+ if (this.isOriginAllowed(context.origin)) {
139
+ headers["Access-Control-Allow-Origin"] = context.origin;
140
+ headers["Vary"] = "Origin";
141
+ headers["Access-Control-Allow-Methods"] = this.allowedMethods.join(", ");
142
+ headers["Access-Control-Allow-Headers"] = this.allowedHeaders.join(", ");
143
+ headers["Access-Control-Max-Age"] = String(this.maxAge);
144
+ if (this.allowCredentials) {
145
+ headers["Access-Control-Allow-Credentials"] = "true";
146
+ }
147
+ // Chrome Private Network Access: only answer the grant when the preflight actually asked for
148
+ // it AND the operator opted in. Silence otherwise so we never advertise a capability we
149
+ // weren't configured to allow.
150
+ if (this.allowPrivateNetwork && context.accessControlRequestPrivateNetwork) {
151
+ headers["Access-Control-Allow-Private-Network"] = "true";
152
+ }
153
+ }
154
+ return { statusCode: 204, headers };
155
+ }
156
+ /**
157
+ * The CORS headers to add to an ACTUAL (non-preflight) response — success OR error. Returns an
158
+ * empty object when origin-checking is off or the Origin is not allow-listed. Applied to 4xx/5xx
159
+ * responses too: without `Access-Control-Allow-Origin` the browser cannot read an error body.
160
+ */
161
+ buildResponseHeaders(origin) {
162
+ if (this.isOriginCheckEnabled === false || this.isOriginAllowed(origin) === false) {
163
+ return {};
164
+ }
165
+ const headers = {
166
+ "Access-Control-Allow-Origin": origin,
167
+ "Vary": "Origin",
168
+ };
169
+ if (this.allowCredentials) {
170
+ headers["Access-Control-Allow-Credentials"] = "true";
171
+ }
172
+ if (this.exposedHeaders.length > 0) {
173
+ headers["Access-Control-Expose-Headers"] = this.exposedHeaders.join(", ");
174
+ }
175
+ return headers;
176
+ }
177
+ /**
178
+ * Coerces a list-shaped config value into a trimmed, empty-stripped `string[]`. Accepts both the
179
+ * comma-separated string form (env vars / defaults) and the `string[]` form (programmatic
180
+ * `kernel.start()` config).
181
+ */
182
+ normalizeList(value) {
183
+ if (value === undefined || value === null) {
184
+ return [];
185
+ }
186
+ const parts = Array.isArray(value) ? value : String(value).split(",");
187
+ return parts.map(part => part.trim()).filter(part => part.length > 0);
188
+ }
189
+ };
190
+ CorsRequestHandler = __decorate([
191
+ moduleScoped(HttpModuleKeyname),
192
+ injectable(),
193
+ __param(0, injectConfig(HttpConfigurationKeys.CorsAllowedOrigins)),
194
+ __param(1, injectConfig(HttpConfigurationKeys.CorsAllowedMethods)),
195
+ __param(2, injectConfig(HttpConfigurationKeys.CorsAllowedHeaders)),
196
+ __param(3, injectConfig(HttpConfigurationKeys.CorsExposedHeaders)),
197
+ __param(4, injectConfig(HttpConfigurationKeys.CorsMaxAge)),
198
+ __param(5, injectConfig(HttpConfigurationKeys.CorsAllowCredentials)),
199
+ __param(6, injectConfig(HttpConfigurationKeys.CorsAllowPrivateNetwork)),
200
+ __param(7, injectConfig(HttpConfigurationKeys.CorsAllowedHosts)),
201
+ __metadata("design:paramtypes", [Object, Object, Object, Object, Number, Boolean, Boolean, Object])
202
+ ], CorsRequestHandler);
203
+ export { CorsRequestHandler };
204
+ //# sourceMappingURL=cors-request.handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors-request.handler.js","sourceRoot":"","sources":["../../../../src/cors/cors-request.handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from "./cors-preflight-response.interface";
2
+ export * from "./cors-request-context.interface";
3
+ export * from "./cors-request.handler";
4
+ //# sourceMappingURL=cors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors.js","sourceRoot":"","sources":["../../../../src/cors/cors.ts"],"names":[],"mappings":"AAAA,cAAc,qCAAqC,CAAC;AACpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,wBAAwB,CAAC"}
@@ -17,5 +17,19 @@ export const HttpConfigurationKeys = {
17
17
  KernelServerPort: "pristine.http.kernel-server.port",
18
18
  KernelServerTlsKeyPath: "pristine.http.kernel-server.tls.key-path",
19
19
  KernelServerTlsCertPath: "pristine.http.kernel-server.tls.cert-path",
20
+ /**
21
+ * CORS keys consumed by `CorsRequestHandler` inside `KernelHttpServer`'s request path.
22
+ * CORS is inactive unless `cors.allowed-origins` (and/or `cors.allowed-hosts`) is set —
23
+ * a server with none of these configured behaves exactly as it did before CORS existed.
24
+ * Each list key accepts a comma-separated string or a `string[]`.
25
+ */
26
+ CorsAllowedOrigins: "pristine.http.cors.allowed-origins",
27
+ CorsAllowedMethods: "pristine.http.cors.allowed-methods",
28
+ CorsAllowedHeaders: "pristine.http.cors.allowed-headers",
29
+ CorsExposedHeaders: "pristine.http.cors.exposed-headers",
30
+ CorsMaxAge: "pristine.http.cors.max-age",
31
+ CorsAllowCredentials: "pristine.http.cors.allow-credentials",
32
+ CorsAllowPrivateNetwork: "pristine.http.cors.allow-private-network",
33
+ CorsAllowedHosts: "pristine.http.cors.allowed-hosts",
20
34
  };
21
35
  //# sourceMappingURL=http.configuration-keys.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.configuration-keys.js","sourceRoot":"","sources":["../../../src/http.configuration-keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,cAAc,EAAE,+BAA+B;IAC/C,qBAAqB,EAAE,wCAAwC;IAC/D,kBAAkB,EAAE,qCAAqC;IACzD,mBAAmB,EAAE,qCAAqC;IAC1D,gBAAgB,EAAE,kCAAkC;IACpD,sBAAsB,EAAE,0CAA0C;IAClE,uBAAuB,EAAE,2CAA2C;CAC5D,CAAC"}
1
+ {"version":3,"file":"http.configuration-keys.js","sourceRoot":"","sources":["../../../src/http.configuration-keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,cAAc,EAAE,+BAA+B;IAC/C,qBAAqB,EAAE,wCAAwC;IAC/D,kBAAkB,EAAE,qCAAqC;IACzD,mBAAmB,EAAE,qCAAqC;IAC1D,gBAAgB,EAAE,kCAAkC;IACpD,sBAAsB,EAAE,0CAA0C;IAClE,uBAAuB,EAAE,2CAA2C;IAEpE;;;;;OAKG;IACH,kBAAkB,EAAE,oCAAoC;IACxD,kBAAkB,EAAE,oCAAoC;IACxD,kBAAkB,EAAE,oCAAoC;IACxD,kBAAkB,EAAE,oCAAoC;IACxD,UAAU,EAAE,4BAA4B;IACxC,oBAAoB,EAAE,sCAAsC;IAC5D,uBAAuB,EAAE,0CAA0C;IACnE,gBAAgB,EAAE,kCAAkC;CAC5C,CAAC"}
@@ -18,6 +18,7 @@ import { KernelHttpServer } from "./servers/kernel.http-server";
18
18
  export * from "./http.module.keyname";
19
19
  export * from "./commands/commands";
20
20
  export * from "./clients/clients";
21
+ export * from "./cors/cors";
21
22
  export * from "./enums/enums";
22
23
  export * from "./errors/errors";
23
24
  export * from "./interceptors/interceptors";
@@ -110,6 +111,106 @@ export const HttpModule = {
110
111
  new EnvironmentVariableResolver("PRISTINE_HTTP_KERNEL_SERVER_TLS_CERT_PATH"),
111
112
  ]
112
113
  },
114
+ /**
115
+ * CORS — handled by `CorsRequestHandler` inside `KernelHttpServer`'s request path. All keys
116
+ * carry defaults so `@injectConfig` always resolves; CORS stays INACTIVE until
117
+ * `cors.allowed-origins` (and/or `cors.allowed-hosts`) is set. List keys accept a
118
+ * comma-separated string (env/default) or a `string[]` (programmatic config).
119
+ *
120
+ * Exact-match origin allowlist. Empty (the default) = CORS disabled: no preflight
121
+ * short-circuit and no `Access-Control-Allow-Origin` echo. Never wildcarded.
122
+ */
123
+ {
124
+ parameterName: `${HttpModuleKeyname}.cors.allowed-origins`,
125
+ defaultValue: "",
126
+ isRequired: false,
127
+ defaultResolvers: [
128
+ new EnvironmentVariableResolver("PRISTINE_HTTP_CORS_ALLOWED_ORIGINS"),
129
+ ]
130
+ },
131
+ /**
132
+ * Methods advertised in the preflight `Access-Control-Allow-Methods` response.
133
+ */
134
+ {
135
+ parameterName: `${HttpModuleKeyname}.cors.allowed-methods`,
136
+ defaultValue: "GET,POST,PUT,DELETE,PATCH,OPTIONS",
137
+ isRequired: false,
138
+ defaultResolvers: [
139
+ new EnvironmentVariableResolver("PRISTINE_HTTP_CORS_ALLOWED_METHODS"),
140
+ ]
141
+ },
142
+ /**
143
+ * Request headers advertised in the preflight `Access-Control-Allow-Headers` response.
144
+ */
145
+ {
146
+ parameterName: `${HttpModuleKeyname}.cors.allowed-headers`,
147
+ defaultValue: "Content-Type",
148
+ isRequired: false,
149
+ defaultResolvers: [
150
+ new EnvironmentVariableResolver("PRISTINE_HTTP_CORS_ALLOWED_HEADERS"),
151
+ ]
152
+ },
153
+ /**
154
+ * Response headers exposed to the browser via `Access-Control-Expose-Headers` on actual
155
+ * responses. Empty (the default) omits the header entirely.
156
+ */
157
+ {
158
+ parameterName: `${HttpModuleKeyname}.cors.exposed-headers`,
159
+ defaultValue: "",
160
+ isRequired: false,
161
+ defaultResolvers: [
162
+ new EnvironmentVariableResolver("PRISTINE_HTTP_CORS_EXPOSED_HEADERS"),
163
+ ]
164
+ },
165
+ /**
166
+ * Seconds a browser may cache the preflight result (`Access-Control-Max-Age`).
167
+ */
168
+ {
169
+ parameterName: `${HttpModuleKeyname}.cors.max-age`,
170
+ defaultValue: 600,
171
+ isRequired: false,
172
+ defaultResolvers: [
173
+ new NumberResolver(new EnvironmentVariableResolver("PRISTINE_HTTP_CORS_MAX_AGE")),
174
+ ]
175
+ },
176
+ /**
177
+ * When true, emit `Access-Control-Allow-Credentials: true` on preflight and actual responses
178
+ * for allow-listed origins (lets the browser send cookies / `Authorization`).
179
+ */
180
+ {
181
+ parameterName: `${HttpModuleKeyname}.cors.allow-credentials`,
182
+ defaultValue: false,
183
+ isRequired: false,
184
+ defaultResolvers: [
185
+ new BooleanResolver(new EnvironmentVariableResolver("PRISTINE_HTTP_CORS_ALLOW_CREDENTIALS")),
186
+ ]
187
+ },
188
+ /**
189
+ * Chrome Private Network Access. When true, answer `Access-Control-Allow-Private-Network: true`
190
+ * to a preflight that carries `Access-Control-Request-Private-Network: true` — required for a
191
+ * public/secure site to call a loopback/private-network daemon.
192
+ */
193
+ {
194
+ parameterName: `${HttpModuleKeyname}.cors.allow-private-network`,
195
+ defaultValue: false,
196
+ isRequired: false,
197
+ defaultResolvers: [
198
+ new BooleanResolver(new EnvironmentVariableResolver("PRISTINE_HTTP_CORS_ALLOW_PRIVATE_NETWORK")),
199
+ ]
200
+ },
201
+ /**
202
+ * Optional `Host`-header allowlist (loopback DNS-rebinding defense). When set, a request whose
203
+ * `Host` is not listed is rejected with `403` before routing. Empty (the default) disables the
204
+ * check. Independent of `allowed-origins`.
205
+ */
206
+ {
207
+ parameterName: `${HttpModuleKeyname}.cors.allowed-hosts`,
208
+ defaultValue: "",
209
+ isRequired: false,
210
+ defaultResolvers: [
211
+ new EnvironmentVariableResolver("PRISTINE_HTTP_CORS_ALLOWED_HOSTS"),
212
+ ]
213
+ },
113
214
  ],
114
215
  onShutdown: (container) => __awaiter(void 0, void 0, void 0, function* () {
115
216
  // The KernelHttpServer self-tracks whether `start()` was actually called: if pristine start
@@ -1 +1 @@
1
- {"version":3,"file":"http.module.js","sourceRoot":"","sources":["../../../src/http.module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.module.js","sourceRoot":"","sources":["../../../src/http.module.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAC,iBAAiB,EAAC,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAC,UAAU,EAAC,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAC,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAC,mBAAmB,EAAC,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAC,gBAAgB,EAAC,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAC,eAAe,EAAE,2BAA2B,EAAE,cAAc,EAAC,MAAM,4BAA4B,CAAC;AACxG,OAAO,EAAC,gBAAgB,EAAC,MAAM,8BAA8B,CAAC;AAE9D,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AAEpC,cAAc,2BAA2B,CAAC;AAC1C,MAAM,CAAC,MAAM,UAAU,GAAoB;IACzC,OAAO,EAAE,iBAAiB;IAC1B,iGAAiG;IACjG,4FAA4F;IAC5F,iGAAiG;IACjG,6FAA6F;IAC7F,kGAAkG;IAClG,oFAAoF;IACpF,yFAAyF;IACzF,aAAa,EAAE,CAAC,UAAU,EAAE,iBAAiB,EAAE,aAAa,EAAE,mBAAmB,EAAE,gBAAgB,CAAC;IACpG,wBAAwB,EAAE;QACxB;YACE,aAAa,EAAE,GAAG,iBAAiB,kBAAkB;YACrD,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,KAAK;YACjB,gBAAgB,EAAE;gBAChB,IAAI,eAAe,CAAC,IAAI,2BAA2B,CAAC,uBAAuB,CAAC,CAAC;aAC9E;SACF;QACD;YACE,aAAa,EAAE,GAAG,iBAAiB,2BAA2B;YAC9D,YAAY,EAAE,WAAW;YACzB,UAAU,EAAE,KAAK;YACjB,gBAAgB,EAAE;gBAChB,IAAI,2BAA2B,CAAC,mCAAmC,CAAC;aACrE;SACF;QACD;YACE,aAAa,EAAE,GAAG,iBAAiB,wBAAwB;YAC3D,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,KAAK;YACjB,gBAAgB,EAAE;gBAChB,IAAI,cAAc,CAAC,IAAI,2BAA2B,CAAC,gCAAgC,CAAC,CAAC;aACtF;SACF;QACD;;;;WAIG;QACH;YACE,aAAa,EAAE,GAAG,iBAAiB,wBAAwB;YAC3D,YAAY,EAAE,SAAS;YACvB,UAAU,EAAE,KAAK;YACjB,gBAAgB,EAAE;gBAChB,IAAI,2BAA2B,CAAC,qCAAqC,CAAC;aACvE;SACF;QACD;;;WAGG;QACH;YACE,aAAa,EAAE,GAAG,iBAAiB,qBAAqB;YACxD,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,KAAK;YACjB,gBAAgB,EAAE;gBAChB,IAAI,cAAc,CAAC,IAAI,2BAA2B,CAAC,kCAAkC,CAAC,CAAC;aACxF;SACF;QACD;;;WAGG;QACH;YACE,aAAa,EAAE,GAAG,iBAAiB,6BAA6B;YAChE,YAAY,EAAE,EAAE;YAChB,UAAU,EAAE,KAAK;YACjB,gBAAgB,EAAE;gBAChB,IAAI,2BAA2B,CAAC,0CAA0C,CAAC;aAC5E;SACF;QACD;;WAEG;QACH;YACE,aAAa,EAAE,GAAG,iBAAiB,8BAA8B;YACjE,YAAY,EAAE,EAAE;YAChB,UAAU,EAAE,KAAK;YACjB,gBAAgB,EAAE;gBAChB,IAAI,2BAA2B,CAAC,2CAA2C,CAAC;aAC7E;SACF;QACD;;;;;;;;WAQG;QACH;YACE,aAAa,EAAE,GAAG,iBAAiB,uBAAuB;YAC1D,YAAY,EAAE,EAAE;YAChB,UAAU,EAAE,KAAK;YACjB,gBAAgB,EAAE;gBAChB,IAAI,2BAA2B,CAAC,oCAAoC,CAAC;aACtE;SACF;QACD;;WAEG;QACH;YACE,aAAa,EAAE,GAAG,iBAAiB,uBAAuB;YAC1D,YAAY,EAAE,mCAAmC;YACjD,UAAU,EAAE,KAAK;YACjB,gBAAgB,EAAE;gBAChB,IAAI,2BAA2B,CAAC,oCAAoC,CAAC;aACtE;SACF;QACD;;WAEG;QACH;YACE,aAAa,EAAE,GAAG,iBAAiB,uBAAuB;YAC1D,YAAY,EAAE,cAAc;YAC5B,UAAU,EAAE,KAAK;YACjB,gBAAgB,EAAE;gBAChB,IAAI,2BAA2B,CAAC,oCAAoC,CAAC;aACtE;SACF;QACD;;;WAGG;QACH;YACE,aAAa,EAAE,GAAG,iBAAiB,uBAAuB;YAC1D,YAAY,EAAE,EAAE;YAChB,UAAU,EAAE,KAAK;YACjB,gBAAgB,EAAE;gBAChB,IAAI,2BAA2B,CAAC,oCAAoC,CAAC;aACtE;SACF;QACD;;WAEG;QACH;YACE,aAAa,EAAE,GAAG,iBAAiB,eAAe;YAClD,YAAY,EAAE,GAAG;YACjB,UAAU,EAAE,KAAK;YACjB,gBAAgB,EAAE;gBAChB,IAAI,cAAc,CAAC,IAAI,2BAA2B,CAAC,4BAA4B,CAAC,CAAC;aAClF;SACF;QACD;;;WAGG;QACH;YACE,aAAa,EAAE,GAAG,iBAAiB,yBAAyB;YAC5D,YAAY,EAAE,KAAK;YACnB,UAAU,EAAE,KAAK;YACjB,gBAAgB,EAAE;gBAChB,IAAI,eAAe,CAAC,IAAI,2BAA2B,CAAC,sCAAsC,CAAC,CAAC;aAC7F;SACF;QACD;;;;WAIG;QACH;YACE,aAAa,EAAE,GAAG,iBAAiB,6BAA6B;YAChE,YAAY,EAAE,KAAK;YACnB,UAAU,EAAE,KAAK;YACjB,gBAAgB,EAAE;gBAChB,IAAI,eAAe,CAAC,IAAI,2BAA2B,CAAC,0CAA0C,CAAC,CAAC;aACjG;SACF;QACD;;;;WAIG;QACH;YACE,aAAa,EAAE,GAAG,iBAAiB,qBAAqB;YACxD,YAAY,EAAE,EAAE;YAChB,UAAU,EAAE,KAAK;YACjB,gBAAgB,EAAE;gBAChB,IAAI,2BAA2B,CAAC,kCAAkC,CAAC;aACpE;SACF;KACF;IACD,UAAU,EAAE,CAAO,SAAS,EAAE,EAAE;QAC9B,4FAA4F;QAC5F,wFAAwF;QACxF,2FAA2F;QAC3F,IAAI,CAAC;YACH,2EAA2E;YAC3E,4EAA4E;YAC5E,sEAAsE;YACtE,uEAAuE;YACvE,uDAAuD;YACvD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;YACnD,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;QAAC,WAAM,CAAC;YACP,sFAAsF;YACtF,yFAAyF;YACzF,6DAA6D;QAC/D,CAAC;IACH,CAAC,CAAA;CACF,CAAA"}
@@ -26,6 +26,7 @@ import fs from "fs";
26
26
  import { EventIdManager, ExecutionContextKeynameEnum, Kernel } from "@pristine-ts/core";
27
27
  import { moduleScoped, Request, Response, ServiceDefinitionTagEnum, tag } from "@pristine-ts/common";
28
28
  import { HttpModuleKeyname } from "../http.module.keyname";
29
+ import { CorsRequestHandler } from "../cors/cors-request.handler";
29
30
  /**
30
31
  * Wraps Node's `http.Server` (or `https.Server` when TLS config is present) and routes every
31
32
  * incoming request through `kernel.handle()`. The kernel dispatches to the existing
@@ -43,7 +44,7 @@ import { HttpModuleKeyname } from "../http.module.keyname";
43
44
  * rather than silently leaking the previous server.
44
45
  */
45
46
  let KernelHttpServer = class KernelHttpServer {
46
- constructor(defaultAddress, defaultPort, defaultTlsKeyPath, defaultTlsCertPath, logHandler, kernel, eventIdManager) {
47
+ constructor(defaultAddress, defaultPort, defaultTlsKeyPath, defaultTlsCertPath, logHandler, kernel, eventIdManager, corsRequestHandler) {
47
48
  this.defaultAddress = defaultAddress;
48
49
  this.defaultPort = defaultPort;
49
50
  this.defaultTlsKeyPath = defaultTlsKeyPath;
@@ -51,6 +52,7 @@ let KernelHttpServer = class KernelHttpServer {
51
52
  this.logHandler = logHandler;
52
53
  this.kernel = kernel;
53
54
  this.eventIdManager = eventIdManager;
55
+ this.corsRequestHandler = corsRequestHandler;
54
56
  /**
55
57
  * Identifier reported back via `RuntimeServerInterface.name`. Switches to `"https"` when
56
58
  * TLS config is present, mainly so log lines and `pristine info`-style introspection make
@@ -155,6 +157,15 @@ let KernelHttpServer = class KernelHttpServer {
155
157
  });
156
158
  });
157
159
  }
160
+ /**
161
+ * The address the underlying server is bound to, or `null` when not listening. For a TCP socket
162
+ * this is `{address, family, port}` — useful when binding to port `0` (ephemeral port) and the
163
+ * caller needs to discover the assigned port afterwards.
164
+ */
165
+ getAddress() {
166
+ var _a, _b;
167
+ return (_b = (_a = this.server) === null || _a === void 0 ? void 0 : _a.address()) !== null && _b !== void 0 ? _b : null;
168
+ }
158
169
  /**
159
170
  * Reads the body, builds a Pristine `Request`, dispatches via the kernel, writes the
160
171
  * resulting `Response`. All errors are caught and turned into a 500 response so the
@@ -163,15 +174,43 @@ let KernelHttpServer = class KernelHttpServer {
163
174
  */
164
175
  handleRequest(req, res) {
165
176
  return __awaiter(this, void 0, void 0, function* () {
166
- var _a;
177
+ var _a, _b;
167
178
  const requestId = (_a = req.headers["x-pristine-request-id"]) !== null && _a !== void 0 ? _a : this.eventIdManager.generateEventId();
179
+ // Normalize the raw request into the CORS decision context up-front. When no CORS config is
180
+ // present every method below is a no-op, so this whole block is transparent to un-configured
181
+ // servers. `corsResponseHeaders` (ACAO + Vary + ...) is computed once here and applied to
182
+ // BOTH the success and the error/500 responses below — a browser can only read an error body
183
+ // if the error response also carries Access-Control-Allow-Origin.
184
+ const corsContext = this.corsRequestHandler.buildContext((_b = req.method) !== null && _b !== void 0 ? _b : "GET", req.headers);
185
+ const corsResponseHeaders = this.corsRequestHandler.buildResponseHeaders(corsContext.origin);
168
186
  try {
187
+ // 1. Host-header allowlist (loopback DNS-rebinding defense) — reject before routing and
188
+ // before reading the body, so a rejected caller can't stream a payload at us.
189
+ if (this.corsRequestHandler.isHostAllowed(corsContext.host) === false) {
190
+ this.logHandler.warning("KernelHttpServer: rejecting request with disallowed Host header", {
191
+ extra: { host: corsContext.host, url: req.url, method: req.method, requestId },
192
+ });
193
+ res.statusCode = 403;
194
+ this.applyHeaders(res, corsResponseHeaders);
195
+ res.setHeader("content-type", "application/json");
196
+ res.end(JSON.stringify({ error: "Forbidden", requestId }));
197
+ return;
198
+ }
199
+ // 2. CORS preflight — answered with a 204 and short-circuited BEFORE kernel.handle, since a
200
+ // preflight never matches a real route in the networking Router.
201
+ const preflight = this.corsRequestHandler.buildPreflightResponse(corsContext);
202
+ if (preflight !== undefined) {
203
+ res.statusCode = preflight.statusCode;
204
+ this.applyHeaders(res, preflight.headers);
205
+ res.end();
206
+ return;
207
+ }
169
208
  const request = yield this.mapToPristineRequest(req, requestId);
170
209
  const result = yield this.kernel.handle(request, {
171
210
  keyname: ExecutionContextKeynameEnum.Http,
172
211
  context: null,
173
212
  });
174
- this.writeResponse(res, result);
213
+ this.writeResponse(res, result, corsResponseHeaders);
175
214
  }
176
215
  catch (error) {
177
216
  this.logHandler.error("KernelHttpServer: unhandled error while processing request", {
@@ -181,6 +220,9 @@ let KernelHttpServer = class KernelHttpServer {
181
220
  // can only destroy the socket — but most kernel.handle errors propagate before any write.
182
221
  if (res.headersSent === false) {
183
222
  res.statusCode = 500;
223
+ // Echo CORS headers on the error path too — otherwise the browser blocks the response and
224
+ // the caller never sees the 500 body.
225
+ this.applyHeaders(res, corsResponseHeaders);
184
226
  res.setHeader("content-type", "application/json");
185
227
  res.end(JSON.stringify({ error: "Internal Server Error", requestId }));
186
228
  }
@@ -261,9 +303,13 @@ let KernelHttpServer = class KernelHttpServer {
261
303
  * Writes a Pristine `Response` (or any object — handlers that return raw JSON serialize as-is)
262
304
  * back to the underlying `ServerResponse`. Default status is 200, default content-type is
263
305
  * `application/json` when the body is non-string.
306
+ *
307
+ * `corsHeaders` (empty when CORS is off or the Origin isn't allow-listed) is applied AFTER the
308
+ * response's own headers so the `Access-Control-*` set is authoritative and a handler can't
309
+ * accidentally clobber it.
264
310
  * @private
265
311
  */
266
- writeResponse(res, result) {
312
+ writeResponse(res, result, corsHeaders = {}) {
267
313
  var _a, _b;
268
314
  const isPristineResponse = result instanceof Response || (result !== null && typeof result === "object" && typeof result.status === "number" && "body" in result);
269
315
  const status = isPristineResponse ? ((_a = result.status) !== null && _a !== void 0 ? _a : 200) : 200;
@@ -281,6 +327,7 @@ let KernelHttpServer = class KernelHttpServer {
281
327
  // Buffer body: write directly without re-encoding. Don't auto-set content-type — the
282
328
  // handler that produced a Buffer is presumed to know what it's sending.
283
329
  this.applyHeaders(res, headers);
330
+ this.applyHeaders(res, corsHeaders);
284
331
  res.end(body);
285
332
  return;
286
333
  }
@@ -291,6 +338,7 @@ let KernelHttpServer = class KernelHttpServer {
291
338
  }
292
339
  }
293
340
  this.applyHeaders(res, headers);
341
+ this.applyHeaders(res, corsHeaders);
294
342
  res.end(serializedBody);
295
343
  }
296
344
  applyHeaders(res, headers) {
@@ -318,7 +366,8 @@ KernelHttpServer = __decorate([
318
366
  __param(3, inject(`%${HttpModuleKeyname}.kernel-server.tls.cert-path%`)),
319
367
  __param(4, inject("LogHandlerInterface")),
320
368
  __metadata("design:paramtypes", [String, Number, String, String, Object, Kernel,
321
- EventIdManager])
369
+ EventIdManager,
370
+ CorsRequestHandler])
322
371
  ], KernelHttpServer);
323
372
  export { KernelHttpServer };
324
373
  //# sourceMappingURL=kernel.http-server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kernel.http-server.js","sourceRoot":"","sources":["../../../../src/servers/kernel.http-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kernel.http-server.js","sourceRoot":"","sources":["../../../../src/servers/kernel.http-server.ts"],"names":[],"mappings":"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"}