@forklaunch/core 0.17.1 → 0.17.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.
@@ -3,9 +3,9 @@ export { ParsedQs } from 'qs';
3
3
  import { Prettify, SanitizePathSlashes, PrettyCamelCase, TypeSafeFunction, UnionToIntersection, EmptyObject } from '@forklaunch/common';
4
4
  import { AnySchemaValidator } from '@forklaunch/validator';
5
5
  import { ServerOptions, IncomingMessage, ServerResponse } from 'node:http';
6
- import { M as Method, P as PathParamHttpContractDetails, H as HttpContractDetails, E as ExpressLikeRouterOptions, a as SessionObject, b as ParamsObject, R as ResponsesObject, B as Body, Q as QueryObject, c as HeadersObject, V as VersionSchema, d as SchemaAuthMethods, C as ContractDetails, e as ExpressLikeSchemaHandler, f as ResolvedSessionObject, g as PathMatch, L as LiveTypeFunction, h as LiveSdkFunction, A as AuthMethodsBase, O as OpenTelemetryCollector, i as MetricsDefinition, j as ExpressLikeApplicationOptions, k as ParamsDictionary, l as VersionedRequests, m as AuthMethods, D as DecodeResource, n as BasicAuthMethods, F as ForklaunchRequest, o as MiddlewareContractDetails, p as ExpressLikeSchemaAuthMapper, q as ForklaunchNextFunction, r as ForklaunchResponse, s as ForklaunchResHeaders, t as ForklaunchStatusResponse, u as ForklaunchSendableData, T as TelemetryOptions, v as LoggerMeta, w as LogFn } from '../apiDefinition.types-XZ0lrfFc.mjs';
7
- export { ac as BodyObject, ax as DocsConfiguration, a9 as ErrorContainer, a6 as ExpressLikeAuthMapper, ay as ExpressLikeGlobalAuthOptions, U as ExpressLikeHandler, az as ExpressLikeSchemaGlobalAuthOptions, _ as ExtractBody, X as ExtractContentType, Y as ExtractResponseBody, at as ExtractedParamsObject, ai as FileBody, G as ForklaunchBaseRequest, a8 as ForklaunchResErrors, ar as HmacMethods, av as HttpMethod, ag as JsonBody, aq as JwtAuthMethods, a7 as LiveTypeFunctionRequestInit, W as MapParamsSchema, $ as MapReqBodySchema, a1 as MapReqHeadersSchema, a0 as MapReqQuerySchema, Z as MapResBodyMapSchema, a2 as MapResHeadersSchema, as as MapSchema, a5 as MapSessionSchema, a3 as MapVersionedReqsSchema, a4 as MapVersionedRespsSchema, aA as MetricType, aj as MultipartForm, ab as NumberOnlyObject, au as PathParamMethod, ad as RawTypedResponseBody, z as RequestContext, J as ResolvedForklaunchAuthRequest, I as ResolvedForklaunchRequest, N as ResolvedForklaunchResponse, af as ResponseBody, aw as ResponseCompiledSchema, aa as ResponseShape, al as ServerSentEventBody, S as StringOnlyObject, ah as TextBody, ap as TypedBody, ao as TypedRequestBody, ae as TypedResponseBody, am as UnknownBody, an as UnknownResponseBody, ak as UrlEncodedForm, K as VersionedResponses, x as httpRequestsTotalCounter, y as httpServerDurationHistogram } from '../apiDefinition.types-XZ0lrfFc.mjs';
8
- import { JWK, JWTPayload } from 'jose';
6
+ import { M as Method, P as PathParamHttpContractDetails, H as HttpContractDetails, E as ExpressLikeRouterOptions, a as SessionObject, b as ParamsObject, R as ResponsesObject, B as Body, Q as QueryObject, c as HeadersObject, V as VersionSchema, d as SchemaAuthMethods, e as ExpressLikeSchemaHandler, f as ResolvedSessionObject, C as ContractDetails, g as PathMatch, L as LiveTypeFunction, h as LiveSdkFunction, A as AuthMethodsBase, O as OpenTelemetryCollector, i as MetricsDefinition, j as ExpressLikeApplicationOptions, k as ParamsDictionary, l as VersionedRequests, m as AuthMethods, D as DecodeResource, n as BasicAuthMethods, F as ForklaunchRequest, o as MiddlewareContractDetails, p as ExpressLikeSchemaAuthMapper, q as ForklaunchNextFunction, r as ForklaunchResponse, s as ForklaunchResHeaders, t as ForklaunchStatusResponse, u as ForklaunchSendableData, T as TelemetryOptions, v as LoggerMeta, w as LogFn } from '../contractDetails.types-BKkaBgAN.mjs';
7
+ export { x as BodyObject, y as DocsConfiguration, z as ErrorContainer, G as ExpressLikeAuthMapper, I as ExpressLikeGlobalAuthOptions, J as ExpressLikeHandler, K as ExpressLikeSchemaGlobalAuthOptions, N as ExtractBody, U as ExtractContentType, W as ExtractResponseBody, X as ExtractedParamsObject, Y as FileBody, Z as ForklaunchBaseRequest, _ as ForklaunchResErrors, $ as HmacMethods, a0 as HttpMethod, a1 as JsonBody, a2 as JwtAuthMethods, a3 as LiveTypeFunctionRequestInit, a4 as MapParamsSchema, a5 as MapReqBodySchema, a6 as MapReqHeadersSchema, a7 as MapReqQuerySchema, a8 as MapResBodyMapSchema, a9 as MapResHeadersSchema, aa as MapSchema, ab as MapSessionSchema, ac as MapVersionedReqsSchema, ad as MapVersionedRespsSchema, ae as MetricType, af as MultipartForm, ag as NumberOnlyObject, ah as PathParamMethod, ai as RawTypedResponseBody, aj as RequestContext, ak as ResolvedForklaunchAuthRequest, al as ResolvedForklaunchRequest, am as ResolvedForklaunchResponse, an as ResponseBody, ao as ResponseCompiledSchema, ap as ResponseShape, aq as ServerSentEventBody, S as StringOnlyObject, ar as TextBody, as as TypedBody, at as TypedRequestBody, au as TypedResponseBody, av as UnknownBody, aw as UnknownResponseBody, ax as UrlEncodedForm, ay as VersionedResponses, az as httpRequestsTotalCounter, aA as httpServerDurationHistogram } from '../contractDetails.types-BKkaBgAN.mjs';
8
+ import { JWTPayload, JWK } from 'jose';
9
9
  import { ZodSchemaValidator } from '@forklaunch/validator/zod';
10
10
  import { FastMCP } from 'fastmcp';
11
11
  import http from 'http';
@@ -3,9 +3,9 @@ export { ParsedQs } from 'qs';
3
3
  import { Prettify, SanitizePathSlashes, PrettyCamelCase, TypeSafeFunction, UnionToIntersection, EmptyObject } from '@forklaunch/common';
4
4
  import { AnySchemaValidator } from '@forklaunch/validator';
5
5
  import { ServerOptions, IncomingMessage, ServerResponse } from 'node:http';
6
- import { M as Method, P as PathParamHttpContractDetails, H as HttpContractDetails, E as ExpressLikeRouterOptions, a as SessionObject, b as ParamsObject, R as ResponsesObject, B as Body, Q as QueryObject, c as HeadersObject, V as VersionSchema, d as SchemaAuthMethods, C as ContractDetails, e as ExpressLikeSchemaHandler, f as ResolvedSessionObject, g as PathMatch, L as LiveTypeFunction, h as LiveSdkFunction, A as AuthMethodsBase, O as OpenTelemetryCollector, i as MetricsDefinition, j as ExpressLikeApplicationOptions, k as ParamsDictionary, l as VersionedRequests, m as AuthMethods, D as DecodeResource, n as BasicAuthMethods, F as ForklaunchRequest, o as MiddlewareContractDetails, p as ExpressLikeSchemaAuthMapper, q as ForklaunchNextFunction, r as ForklaunchResponse, s as ForklaunchResHeaders, t as ForklaunchStatusResponse, u as ForklaunchSendableData, T as TelemetryOptions, v as LoggerMeta, w as LogFn } from '../apiDefinition.types-XZ0lrfFc.js';
7
- export { ac as BodyObject, ax as DocsConfiguration, a9 as ErrorContainer, a6 as ExpressLikeAuthMapper, ay as ExpressLikeGlobalAuthOptions, U as ExpressLikeHandler, az as ExpressLikeSchemaGlobalAuthOptions, _ as ExtractBody, X as ExtractContentType, Y as ExtractResponseBody, at as ExtractedParamsObject, ai as FileBody, G as ForklaunchBaseRequest, a8 as ForklaunchResErrors, ar as HmacMethods, av as HttpMethod, ag as JsonBody, aq as JwtAuthMethods, a7 as LiveTypeFunctionRequestInit, W as MapParamsSchema, $ as MapReqBodySchema, a1 as MapReqHeadersSchema, a0 as MapReqQuerySchema, Z as MapResBodyMapSchema, a2 as MapResHeadersSchema, as as MapSchema, a5 as MapSessionSchema, a3 as MapVersionedReqsSchema, a4 as MapVersionedRespsSchema, aA as MetricType, aj as MultipartForm, ab as NumberOnlyObject, au as PathParamMethod, ad as RawTypedResponseBody, z as RequestContext, J as ResolvedForklaunchAuthRequest, I as ResolvedForklaunchRequest, N as ResolvedForklaunchResponse, af as ResponseBody, aw as ResponseCompiledSchema, aa as ResponseShape, al as ServerSentEventBody, S as StringOnlyObject, ah as TextBody, ap as TypedBody, ao as TypedRequestBody, ae as TypedResponseBody, am as UnknownBody, an as UnknownResponseBody, ak as UrlEncodedForm, K as VersionedResponses, x as httpRequestsTotalCounter, y as httpServerDurationHistogram } from '../apiDefinition.types-XZ0lrfFc.js';
8
- import { JWK, JWTPayload } from 'jose';
6
+ import { M as Method, P as PathParamHttpContractDetails, H as HttpContractDetails, E as ExpressLikeRouterOptions, a as SessionObject, b as ParamsObject, R as ResponsesObject, B as Body, Q as QueryObject, c as HeadersObject, V as VersionSchema, d as SchemaAuthMethods, e as ExpressLikeSchemaHandler, f as ResolvedSessionObject, C as ContractDetails, g as PathMatch, L as LiveTypeFunction, h as LiveSdkFunction, A as AuthMethodsBase, O as OpenTelemetryCollector, i as MetricsDefinition, j as ExpressLikeApplicationOptions, k as ParamsDictionary, l as VersionedRequests, m as AuthMethods, D as DecodeResource, n as BasicAuthMethods, F as ForklaunchRequest, o as MiddlewareContractDetails, p as ExpressLikeSchemaAuthMapper, q as ForklaunchNextFunction, r as ForklaunchResponse, s as ForklaunchResHeaders, t as ForklaunchStatusResponse, u as ForklaunchSendableData, T as TelemetryOptions, v as LoggerMeta, w as LogFn } from '../contractDetails.types-BKkaBgAN.js';
7
+ export { x as BodyObject, y as DocsConfiguration, z as ErrorContainer, G as ExpressLikeAuthMapper, I as ExpressLikeGlobalAuthOptions, J as ExpressLikeHandler, K as ExpressLikeSchemaGlobalAuthOptions, N as ExtractBody, U as ExtractContentType, W as ExtractResponseBody, X as ExtractedParamsObject, Y as FileBody, Z as ForklaunchBaseRequest, _ as ForklaunchResErrors, $ as HmacMethods, a0 as HttpMethod, a1 as JsonBody, a2 as JwtAuthMethods, a3 as LiveTypeFunctionRequestInit, a4 as MapParamsSchema, a5 as MapReqBodySchema, a6 as MapReqHeadersSchema, a7 as MapReqQuerySchema, a8 as MapResBodyMapSchema, a9 as MapResHeadersSchema, aa as MapSchema, ab as MapSessionSchema, ac as MapVersionedReqsSchema, ad as MapVersionedRespsSchema, ae as MetricType, af as MultipartForm, ag as NumberOnlyObject, ah as PathParamMethod, ai as RawTypedResponseBody, aj as RequestContext, ak as ResolvedForklaunchAuthRequest, al as ResolvedForklaunchRequest, am as ResolvedForklaunchResponse, an as ResponseBody, ao as ResponseCompiledSchema, ap as ResponseShape, aq as ServerSentEventBody, S as StringOnlyObject, ar as TextBody, as as TypedBody, at as TypedRequestBody, au as TypedResponseBody, av as UnknownBody, aw as UnknownResponseBody, ax as UrlEncodedForm, ay as VersionedResponses, az as httpRequestsTotalCounter, aA as httpServerDurationHistogram } from '../contractDetails.types-BKkaBgAN.js';
8
+ import { JWTPayload, JWK } from 'jose';
9
9
  import { ZodSchemaValidator } from '@forklaunch/validator/zod';
10
10
  import { FastMCP } from 'fastmcp';
11
11
  import http from 'http';
package/lib/http/index.js CHANGED
@@ -1391,7 +1391,8 @@ function resolveRouteMiddlewares(params) {
1391
1391
  params.requestSchema,
1392
1392
  params.responseSchemas,
1393
1393
  params.openTelemetryCollector,
1394
- () => params.routerOptions
1394
+ // Use dynamic lookup from router instance instead of captured params
1395
+ () => params.router ? params.router.routerOptions : params.routerOptions
1395
1396
  ),
1396
1397
  ...params.postEnrichMiddleware,
1397
1398
  parse,
@@ -1539,56 +1540,94 @@ var ForklaunchExpressLikeRouter = class _ForklaunchExpressLikeRouter {
1539
1540
  * @param controllerHandler
1540
1541
  * @returns
1541
1542
  */
1542
- #localParamRequest(handlers, controllerHandler, version) {
1543
+ #localParamRequest(middlewares, controllerHandler, contractDetails, requestSchema, responseSchemas, version) {
1543
1544
  return async (route, request) => {
1544
1545
  let statusCode;
1545
1546
  let responseMessage;
1546
1547
  const responseHeaders = {};
1548
+ const resEventHandlers = {};
1547
1549
  const req = {
1548
1550
  params: request?.params ?? {},
1549
1551
  query: request?.query ?? {},
1550
1552
  headers: request?.headers ?? {},
1551
1553
  body: discriminateBody(this.schemaValidator, request?.body)?.schema ?? {},
1552
1554
  path: route,
1553
- version
1555
+ originalPath: route,
1556
+ method: "GET",
1557
+ version,
1558
+ // Properties needed by middlewares
1559
+ schemaValidator: this.schemaValidator,
1560
+ contractDetails,
1561
+ requestSchema,
1562
+ openTelemetryCollector: this.openTelemetryCollector,
1563
+ _globalOptions: () => this.routerOptions,
1564
+ context: {
1565
+ correlationId: "local-fetch-" + Date.now(),
1566
+ span: void 0
1567
+ },
1568
+ _rawBody: void 0,
1569
+ _parsedVersions: void 0
1554
1570
  };
1555
1571
  const res = {
1572
+ statusCode: 200,
1556
1573
  status: (code) => {
1557
1574
  statusCode = code;
1575
+ res.statusCode = code;
1558
1576
  return res;
1559
1577
  },
1560
1578
  send: (message) => {
1561
1579
  responseMessage = message;
1580
+ resEventHandlers["finish"]?.forEach((handler) => handler());
1562
1581
  },
1563
1582
  json: (body) => {
1564
1583
  responseMessage = body;
1584
+ resEventHandlers["finish"]?.forEach((handler) => handler());
1565
1585
  },
1566
1586
  jsonp: (body) => {
1567
1587
  responseMessage = body;
1588
+ resEventHandlers["finish"]?.forEach((handler) => handler());
1568
1589
  },
1569
1590
  setHeader: (key, value) => {
1570
1591
  responseHeaders[key] = value;
1592
+ return res;
1593
+ },
1594
+ getHeader: (key) => responseHeaders[key],
1595
+ type: (contentType) => {
1596
+ responseHeaders["content-type"] = contentType;
1597
+ return res;
1571
1598
  },
1572
1599
  sseEmitter: (generator) => {
1573
1600
  responseMessage = generator();
1574
1601
  },
1602
+ on: (event, handler) => {
1603
+ if (!resEventHandlers[event]) {
1604
+ resEventHandlers[event] = [];
1605
+ }
1606
+ resEventHandlers[event].push(handler);
1607
+ return res;
1608
+ },
1609
+ responseSchemas,
1575
1610
  version
1576
1611
  };
1577
- let cursor = handlers.shift();
1578
- if (cursor) {
1579
- for (const fn of handlers) {
1580
- await cursor(req, res, (err) => {
1612
+ const executeMiddlewares = request?.executeMiddlewares ?? false;
1613
+ if (executeMiddlewares && middlewares.length > 0) {
1614
+ const allHandlers = [...middlewares];
1615
+ let cursor = allHandlers.shift();
1616
+ if (cursor) {
1617
+ for (const fn of allHandlers) {
1618
+ await cursor(req, res, (err) => {
1619
+ if (err) {
1620
+ throw err;
1621
+ }
1622
+ cursor = fn;
1623
+ });
1624
+ }
1625
+ await cursor(req, res, async (err) => {
1581
1626
  if (err) {
1582
1627
  throw err;
1583
1628
  }
1584
- cursor = fn;
1585
1629
  });
1586
1630
  }
1587
- await cursor(req, res, async (err) => {
1588
- if (err) {
1589
- throw err;
1590
- }
1591
- });
1592
1631
  }
1593
1632
  const cHandler = controllerHandler;
1594
1633
  await cHandler(req, res, (err) => {
@@ -1629,7 +1668,8 @@ var ForklaunchExpressLikeRouter = class _ForklaunchExpressLikeRouter {
1629
1668
  routerOptions: this.routerOptions,
1630
1669
  postEnrichMiddleware: this.postEnrichMiddleware,
1631
1670
  includeCreateContext: false,
1632
- handlers
1671
+ handlers,
1672
+ router: this
1633
1673
  });
1634
1674
  registrationMethod.bind(this.internal)(
1635
1675
  path,
@@ -1644,12 +1684,18 @@ var ForklaunchExpressLikeRouter = class _ForklaunchExpressLikeRouter {
1644
1684
  this.#localParamRequest(
1645
1685
  middlewares,
1646
1686
  controllerHandler,
1687
+ contractDetails,
1688
+ requestSchema,
1689
+ responseSchemas,
1647
1690
  version
1648
1691
  )
1649
1692
  ])
1650
1693
  ) : this.#localParamRequest(
1651
1694
  middlewares,
1652
- controllerHandler
1695
+ controllerHandler,
1696
+ contractDetails,
1697
+ requestSchema,
1698
+ responseSchemas
1653
1699
  )
1654
1700
  };
1655
1701
  const contractDetailsName = contractDetails.name;
@@ -1660,12 +1706,18 @@ var ForklaunchExpressLikeRouter = class _ForklaunchExpressLikeRouter {
1660
1706
  (req) => this.#localParamRequest(
1661
1707
  middlewares,
1662
1708
  controllerHandler,
1709
+ contractDetails,
1710
+ requestSchema,
1711
+ responseSchemas,
1663
1712
  version
1664
1713
  )(`${this.basePath}${path}`, req)
1665
1714
  ])
1666
1715
  ) : (req) => this.#localParamRequest(
1667
1716
  middlewares,
1668
- controllerHandler
1717
+ controllerHandler,
1718
+ contractDetails,
1719
+ requestSchema,
1720
+ responseSchemas
1669
1721
  )(`${this.basePath}${path}`, req);
1670
1722
  }
1671
1723
  return this;