@forklaunch/core 0.17.3 → 0.18.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.
@@ -3,8 +3,8 @@ 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, 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';
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 '../apiDefinition.types-DnUkFmfT.mjs';
7
+ export { x as BodyObject, y as DefaultSubscriptionData, z as DocsConfiguration, G as ErrorContainer, I as ExpressLikeAuthMapper, J as ExpressLikeGlobalAuthOptions, K as ExpressLikeHandler, N as ExpressLikeSchemaGlobalAuthOptions, U as ExtractBody, W as ExtractContentType, X as ExtractResponseBody, Y as ExtractedParamsObject, Z as FileBody, _ as ForklaunchBaseRequest, $ as ForklaunchResErrors, a0 as HmacMethods, a1 as HttpMethod, a2 as JsonBody, a3 as JwtAuthMethods, a4 as LiveTypeFunctionRequestInit, a5 as MapParamsSchema, a6 as MapReqBodySchema, a7 as MapReqHeadersSchema, a8 as MapReqQuerySchema, a9 as MapResBodyMapSchema, aa as MapResHeadersSchema, ab as MapSchema, ac as MapSessionSchema, ad as MapVersionedReqsSchema, ae as MapVersionedRespsSchema, af as MetricType, ag as MultipartForm, ah as NumberOnlyObject, ai as PathParamMethod, aj as RawTypedResponseBody, ak as RequestContext, al as ResolvedForklaunchAuthRequest, am as ResolvedForklaunchRequest, an as ResolvedForklaunchResponse, ao as ResponseBody, ap as ResponseCompiledSchema, aq as ResponseShape, ar as ServerSentEventBody, S as StringOnlyObject, as as TextBody, at as TypedBody, au as TypedRequestBody, av as TypedResponseBody, aw as UnknownBody, ax as UnknownResponseBody, ay as UrlEncodedForm, az as VersionedResponses, aA as httpRequestsTotalCounter, aB as httpServerDurationHistogram } from '../apiDefinition.types-DnUkFmfT.mjs';
8
8
  import { JWTPayload, JWK } from 'jose';
9
9
  import { ZodSchemaValidator } from '@forklaunch/validator/zod';
10
10
  import { FastMCP } from 'fastmcp';
@@ -3,8 +3,8 @@ 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, 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';
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 '../apiDefinition.types-DnUkFmfT.js';
7
+ export { x as BodyObject, y as DefaultSubscriptionData, z as DocsConfiguration, G as ErrorContainer, I as ExpressLikeAuthMapper, J as ExpressLikeGlobalAuthOptions, K as ExpressLikeHandler, N as ExpressLikeSchemaGlobalAuthOptions, U as ExtractBody, W as ExtractContentType, X as ExtractResponseBody, Y as ExtractedParamsObject, Z as FileBody, _ as ForklaunchBaseRequest, $ as ForklaunchResErrors, a0 as HmacMethods, a1 as HttpMethod, a2 as JsonBody, a3 as JwtAuthMethods, a4 as LiveTypeFunctionRequestInit, a5 as MapParamsSchema, a6 as MapReqBodySchema, a7 as MapReqHeadersSchema, a8 as MapReqQuerySchema, a9 as MapResBodyMapSchema, aa as MapResHeadersSchema, ab as MapSchema, ac as MapSessionSchema, ad as MapVersionedReqsSchema, ae as MapVersionedRespsSchema, af as MetricType, ag as MultipartForm, ah as NumberOnlyObject, ai as PathParamMethod, aj as RawTypedResponseBody, ak as RequestContext, al as ResolvedForklaunchAuthRequest, am as ResolvedForklaunchRequest, an as ResolvedForklaunchResponse, ao as ResponseBody, ap as ResponseCompiledSchema, aq as ResponseShape, ar as ServerSentEventBody, S as StringOnlyObject, as as TextBody, at as TypedBody, au as TypedRequestBody, av as TypedResponseBody, aw as UnknownBody, ax as UnknownResponseBody, ay as UrlEncodedForm, az as VersionedResponses, aA as httpRequestsTotalCounter, aB as httpServerDurationHistogram } from '../apiDefinition.types-DnUkFmfT.js';
8
8
  import { JWTPayload, JWK } from 'jose';
9
9
  import { ZodSchemaValidator } from '@forklaunch/validator/zod';
10
10
  import { FastMCP } from 'fastmcp';
package/lib/http/index.js CHANGED
@@ -502,6 +502,11 @@ async function discriminateAuthMethod(auth, openTelemetryCollector) {
502
502
  return authMethod;
503
503
  }
504
504
 
505
+ // src/http/guards/hasFeatureChecks.ts
506
+ function hasFeatureChecks(maybeFeatureAuth) {
507
+ return typeof maybeFeatureAuth === "object" && maybeFeatureAuth !== null && "requiredFeatures" in maybeFeatureAuth && Array.isArray(maybeFeatureAuth.requiredFeatures) && maybeFeatureAuth.requiredFeatures.length > 0;
508
+ }
509
+
505
510
  // src/http/guards/hasPermissionChecks.ts
506
511
  function hasPermissionChecks(maybePermissionedAuth) {
507
512
  return typeof maybePermissionedAuth === "object" && maybePermissionedAuth !== null && ("allowedPermissions" in maybePermissionedAuth || "forbiddenPermissions" in maybePermissionedAuth);
@@ -517,6 +522,11 @@ function hasScopeChecks(maybePermissionedAuth) {
517
522
  return typeof maybePermissionedAuth === "object" && maybePermissionedAuth !== null && "requiredScope" in maybePermissionedAuth && maybePermissionedAuth.requiredScope != null;
518
523
  }
519
524
 
525
+ // src/http/guards/hasSubscriptionChecks.ts
526
+ function hasSubscriptionChecks(maybeSubscriptionAuth) {
527
+ return typeof maybeSubscriptionAuth === "object" && maybeSubscriptionAuth !== null && "requireActiveSubscription" in maybeSubscriptionAuth && maybeSubscriptionAuth.requireActiveSubscription === true;
528
+ }
529
+
520
530
  // src/http/telemetry/pinoLogger.ts
521
531
  var import_common5 = require("@forklaunch/common");
522
532
  var import_api2 = require("@opentelemetry/api");
@@ -699,6 +709,14 @@ var invalidAuthorizationTokenRoles = [
699
709
  403,
700
710
  "Invalid Authorization roles."
701
711
  ];
712
+ var invalidAuthorizationTokenFeatures = [
713
+ 403,
714
+ "Required features not available."
715
+ ];
716
+ var invalidAuthorizationSubscription = [
717
+ 403,
718
+ "Active subscription required."
719
+ ];
702
720
  var invalidAuthorizationToken = [
703
721
  403,
704
722
  "Invalid Authorization token."
@@ -906,6 +924,34 @@ async function checkAuthorizationToken(req, authorizationMethod, authorizationTo
906
924
  } else {
907
925
  return invalidAuthorizationMethod;
908
926
  }
927
+ if (hasSubscriptionChecks(collapsedAuthorizationMethod)) {
928
+ if (!collapsedAuthorizationMethod.surfaceSubscription) {
929
+ return [500, "No subscription surfacing function provided."];
930
+ }
931
+ const subscription = await collapsedAuthorizationMethod.surfaceSubscription(
932
+ sessionPayload,
933
+ req
934
+ );
935
+ if (!subscription) {
936
+ return invalidAuthorizationSubscription;
937
+ }
938
+ }
939
+ if (hasFeatureChecks(collapsedAuthorizationMethod)) {
940
+ if (!collapsedAuthorizationMethod.surfaceFeatures) {
941
+ return [500, "No features surfacing function provided."];
942
+ }
943
+ const availableFeatures = await collapsedAuthorizationMethod.surfaceFeatures(
944
+ sessionPayload,
945
+ req
946
+ );
947
+ const requiredFeatures = collapsedAuthorizationMethod.requiredFeatures ?? [];
948
+ const missingFeatures = requiredFeatures.filter(
949
+ (feature) => !availableFeatures.has(feature)
950
+ );
951
+ if (missingFeatures.length > 0) {
952
+ return invalidAuthorizationTokenFeatures;
953
+ }
954
+ }
909
955
  }
910
956
  async function parseRequestAuth(req, res, next) {
911
957
  const auth = req.contractDetails.auth;