@forklaunch/core 0.8.7 → 0.8.9

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.
@@ -1,11 +1,18 @@
1
1
  // src/http/middleware/request/cors.middleware.ts
2
2
  import corsMiddleware from "cors";
3
- function cors(req, res, next) {
4
- if (req.method === "OPTIONS") {
5
- res.cors = true;
6
- }
7
- corsMiddleware()(req, res, next ?? (() => {
8
- }));
3
+ function cors(corsOptions) {
4
+ return (req, res, next) => {
5
+ if (req.method === "OPTIONS") {
6
+ res.cors = true;
7
+ }
8
+ if (!res.getHeader) {
9
+ res.getHeader = (key) => {
10
+ return res.getHeaders()[key];
11
+ };
12
+ }
13
+ corsMiddleware(corsOptions)(req, res, next ?? (() => {
14
+ }));
15
+ };
9
16
  }
10
17
 
11
18
  // src/http/middleware/request/createContext.middleware.ts
@@ -218,13 +225,11 @@ async function parseRequestAuth(req, res, next) {
218
225
  next?.();
219
226
  }
220
227
 
221
- // src/services/getEnvVar.ts
222
- function getEnvVar(name) {
223
- const value = process.env[name];
224
- return value;
225
- }
228
+ // src/http/middleware/request/enrichDetails.middleware.ts
229
+ import { getEnvVar as getEnvVar2 } from "@forklaunch/common";
226
230
 
227
231
  // src/http/telemetry/openTelemetryCollector.ts
232
+ import { getEnvVar } from "@forklaunch/common";
228
233
  import { HyperExpressInstrumentation } from "@forklaunch/opentelemetry-instrumentation-hyper-express";
229
234
  import {
230
235
  metrics
@@ -481,7 +486,7 @@ function enrichDetails(path, contractDetails, requestSchema, responseSchemas, op
481
486
  const [seconds, nanoseconds] = process.hrtime(startTime);
482
487
  const durationMs = seconds + nanoseconds / 1e9;
483
488
  httpServerDurationHistogram.record(durationMs, {
484
- [ATTR_SERVICE_NAME]: getEnvVar("OTEL_SERVICE_NAME") || "unknown",
489
+ [ATTR_SERVICE_NAME]: getEnvVar2("OTEL_SERVICE_NAME") || "unknown",
485
490
  [ATTR_API_NAME]: req.contractDetails?.name || "unknown",
486
491
  [ATTR_HTTP_REQUEST_METHOD]: req.method,
487
492
  [ATTR_HTTP_ROUTE]: req.originalPath || "unknown",
@@ -1301,7 +1306,7 @@ var ForklaunchExpressLikeApplication = class extends ForklaunchExpressLikeRouter
1301
1306
  *
1302
1307
  * @param {SV} schemaValidator - The schema validator.
1303
1308
  */
1304
- constructor(schemaValidator, internal, postEnrichMiddleware, openTelemetryCollector) {
1309
+ constructor(schemaValidator, internal, postEnrichMiddleware, openTelemetryCollector, appOptions) {
1305
1310
  super(
1306
1311
  "/",
1307
1312
  schemaValidator,
@@ -1313,8 +1318,26 @@ var ForklaunchExpressLikeApplication = class extends ForklaunchExpressLikeRouter
1313
1318
  this.internal = internal;
1314
1319
  this.postEnrichMiddleware = postEnrichMiddleware;
1315
1320
  this.openTelemetryCollector = openTelemetryCollector;
1321
+ this.appOptions = appOptions;
1322
+ process.on("uncaughtException", (err) => {
1323
+ this.openTelemetryCollector.log("error", "Uncaught exception", { err });
1324
+ process.exit(1);
1325
+ });
1326
+ process.on("unhandledRejection", (reason) => {
1327
+ this.openTelemetryCollector.log("error", "Unhandled rejection", {
1328
+ reason
1329
+ });
1330
+ process.exit(1);
1331
+ });
1332
+ process.on("exit", () => {
1333
+ this.openTelemetryCollector.log("info", "Shutting down application");
1334
+ });
1335
+ process.on("SIGINT", () => {
1336
+ this.openTelemetryCollector.log("info", "Shutting down application");
1337
+ process.exit(0);
1338
+ });
1316
1339
  this.internal.use(createContext(this.schemaValidator));
1317
- this.internal.use(cors);
1340
+ this.internal.use(cors(this.appOptions?.cors ?? {}));
1318
1341
  }
1319
1342
  };
1320
1343
 
@@ -2444,7 +2467,7 @@ ${parseErrors.join("\n\n")}`
2444
2467
  // src/http/middleware/response/enrichExpressLikeSend.middleware.ts
2445
2468
  import {
2446
2469
  isAsyncGenerator,
2447
- isNever as isNever3,
2470
+ isNever as isNever2,
2448
2471
  isNodeJsWriteableStream,
2449
2472
  isRecord,
2450
2473
  readableStreamToAsyncIterable,
@@ -2453,26 +2476,19 @@ import {
2453
2476
  import { Readable, Transform } from "stream";
2454
2477
 
2455
2478
  // src/http/telemetry/recordMetric.ts
2479
+ import { getEnvVar as getEnvVar3 } from "@forklaunch/common";
2456
2480
  import {
2457
2481
  ATTR_HTTP_REQUEST_METHOD as ATTR_HTTP_REQUEST_METHOD3,
2458
2482
  ATTR_HTTP_RESPONSE_STATUS_CODE as ATTR_HTTP_RESPONSE_STATUS_CODE3,
2459
2483
  ATTR_HTTP_ROUTE as ATTR_HTTP_ROUTE3,
2460
2484
  ATTR_SERVICE_NAME as ATTR_SERVICE_NAME3
2461
2485
  } from "@opentelemetry/semantic-conventions";
2462
-
2463
- // src/services/configInjector.ts
2464
- import { extractArgumentNames as extractArgumentNames2, isNever as isNever2 } from "@forklaunch/common";
2465
- import {
2466
- prettyPrintParseErrors as prettyPrintParseErrors3
2467
- } from "@forklaunch/validator";
2468
-
2469
- // src/http/telemetry/recordMetric.ts
2470
2486
  function recordMetric(req, res) {
2471
2487
  if (res.metricRecorded) {
2472
2488
  return;
2473
2489
  }
2474
2490
  httpRequestsTotalCounter.add(1, {
2475
- [ATTR_SERVICE_NAME3]: getEnvVar("OTEL_SERVICE_NAME"),
2491
+ [ATTR_SERVICE_NAME3]: getEnvVar3("OTEL_SERVICE_NAME"),
2476
2492
  [ATTR_API_NAME]: req.contractDetails?.name,
2477
2493
  [ATTR_CORRELATION_ID]: req.context.correlationId,
2478
2494
  [ATTR_HTTP_REQUEST_METHOD3]: req.method,
@@ -2588,7 +2604,7 @@ ${res.locals.errorMessage}`;
2588
2604
  res.bodyData = data;
2589
2605
  break;
2590
2606
  default:
2591
- isNever3(parserType);
2607
+ isNever2(parserType);
2592
2608
  res.bodyData = data;
2593
2609
  break;
2594
2610
  }