@forklaunch/core 0.11.6 → 0.11.7
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.
- package/lib/http/index.d.mts +569 -292
- package/lib/http/index.d.ts +569 -292
- package/lib/http/index.js +737 -266
- package/lib/http/index.js.map +1 -1
- package/lib/http/index.mjs +737 -268
- package/lib/http/index.mjs.map +1 -1
- package/package.json +16 -16
package/lib/http/index.d.mts
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
import { ParsedQs } from 'qs';
|
2
2
|
export { ParsedQs } from 'qs';
|
3
|
-
import { UnionToIntersection, StringWithoutSlash,
|
3
|
+
import { UnionToIntersection, StringWithoutSlash, Prettify, SanitizePathSlashes, MakePropertyOptionalIfChildrenOptional, PrettyCamelCase, TypeSafeFunction, EmptyObject } from '@forklaunch/common';
|
4
4
|
import { AnySchemaValidator, UnboxedObjectSchema, IdiomaticSchema, Schema } from '@forklaunch/validator';
|
5
5
|
import { CorsOptions } from 'cors';
|
6
6
|
import { Counter, Gauge, Histogram, UpDownCounter, ObservableCounter, ObservableGauge, ObservableUpDownCounter, Span } from '@opentelemetry/api';
|
@@ -148,7 +148,7 @@ type TypedResponseBody<SV extends AnySchemaValidator> = {
|
|
148
148
|
} | {
|
149
149
|
[K in keyof (ExclusiveSchemaCatchall<SV> & ExclusiveResponseBodyBase<SV>)]?: K extends keyof UnknownResponseBody<SV> ? UnknownResponseBody<SV>[K] : undefined;
|
150
150
|
};
|
151
|
-
type ResponseBody<SV extends AnySchemaValidator> = TypedResponseBody<SV> | (ExclusiveResponseBodyBase<SV> & SV['_ValidSchemaObject']) | (ExclusiveResponseBodyBase<SV> & UnboxedObjectSchema<SV>) | (ExclusiveResponseBodyBase<SV> & SV['string']) | (ExclusiveResponseBodyBase<SV> & SV['number']) | (ExclusiveResponseBodyBase<SV> & SV['boolean']) | (ExclusiveResponseBodyBase<SV> & SV['array']) | (ExclusiveResponseBodyBase<SV> & SV['file']);
|
151
|
+
type ResponseBody<SV extends AnySchemaValidator> = TypedResponseBody<SV> | (ExclusiveResponseBodyBase<SV> & SV['_ValidSchemaObject']) | (ExclusiveResponseBodyBase<SV> & UnboxedObjectSchema<SV>) | (ExclusiveResponseBodyBase<SV> & SV['string']) | (ExclusiveResponseBodyBase<SV> & SV['number']) | (ExclusiveResponseBodyBase<SV> & SV['boolean']) | (ExclusiveResponseBodyBase<SV> & SV['date']) | (ExclusiveResponseBodyBase<SV> & SV['array']) | (ExclusiveResponseBodyBase<SV> & SV['file']);
|
152
152
|
/**
|
153
153
|
* Type representing the responses object in a request.
|
154
154
|
*
|
@@ -207,8 +207,24 @@ type UnknownResponseBody<SV extends AnySchemaValidator> = {
|
|
207
207
|
contentType?: string;
|
208
208
|
schema: BodyObject<SV> | SV['_ValidSchemaObject'] | SV['_SchemaCatchall'];
|
209
209
|
};
|
210
|
+
type ExclusiveRequestBodyBase<SV extends AnySchemaValidator> = {
|
211
|
+
[K in keyof UnionToIntersection<TypedBody<SV>>]?: undefined;
|
212
|
+
};
|
213
|
+
type TypedRequestBody<SV extends AnySchemaValidator> = {
|
214
|
+
[K in keyof (ExclusiveSchemaCatchall<SV> & ExclusiveRequestBodyBase<SV>)]?: K extends keyof TextBody<SV> ? TextBody<SV>[K] : undefined;
|
215
|
+
} | {
|
216
|
+
[K in keyof (ExclusiveSchemaCatchall<SV> & ExclusiveRequestBodyBase<SV>)]?: K extends keyof JsonBody<SV> ? JsonBody<SV>[K] : undefined;
|
217
|
+
} | {
|
218
|
+
[K in keyof (ExclusiveSchemaCatchall<SV> & ExclusiveRequestBodyBase<SV>)]?: K extends keyof FileBody<SV> ? FileBody<SV>[K] : undefined;
|
219
|
+
} | {
|
220
|
+
[K in keyof (ExclusiveSchemaCatchall<SV> & ExclusiveRequestBodyBase<SV>)]?: K extends keyof MultipartForm<SV> ? MultipartForm<SV>[K] : undefined;
|
221
|
+
} | {
|
222
|
+
[K in keyof (ExclusiveSchemaCatchall<SV> & ExclusiveRequestBodyBase<SV>)]?: K extends keyof UrlEncodedForm<SV> ? UrlEncodedForm<SV>[K] : undefined;
|
223
|
+
} | {
|
224
|
+
[K in keyof (ExclusiveSchemaCatchall<SV> & ExclusiveRequestBodyBase<SV>)]?: K extends keyof UnknownBody<SV> ? UnknownBody<SV>[K] : undefined;
|
225
|
+
};
|
210
226
|
type TypedBody<SV extends AnySchemaValidator> = JsonBody<SV> | TextBody<SV> | FileBody<SV> | MultipartForm<SV> | UrlEncodedForm<SV> | UnknownBody<SV>;
|
211
|
-
type Body<SV extends AnySchemaValidator> =
|
227
|
+
type Body<SV extends AnySchemaValidator> = TypedRequestBody<SV> | (ExclusiveRequestBodyBase<SV> & SV['_ValidSchemaObject']) | (ExclusiveRequestBodyBase<SV> & UnboxedObjectSchema<SV>) | (ExclusiveRequestBodyBase<SV> & SV['string']) | (ExclusiveRequestBodyBase<SV> & SV['number']) | (ExclusiveRequestBodyBase<SV> & SV['boolean']) | (ExclusiveRequestBodyBase<SV> & SV['date']) | (ExclusiveRequestBodyBase<SV> & SV['array']) | (ExclusiveRequestBodyBase<SV> & SV['file']);
|
212
228
|
type BasicAuthMethods = {
|
213
229
|
readonly basic: {
|
214
230
|
readonly login: (username: string, password: string) => boolean;
|
@@ -237,15 +253,15 @@ type RoleSet = {
|
|
237
253
|
/**
|
238
254
|
* Type representing the authentication methods.
|
239
255
|
*/
|
240
|
-
type SchemaAuthMethods<SV extends AnySchemaValidator, ParamsSchema extends ParamsObject<SV>, ReqBody extends Body<SV>, QuerySchema extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, BaseRequest> = AuthMethodsBase & (({
|
241
|
-
readonly mapPermissions: ExpressLikeSchemaAuthMapper<SV, ParamsSchema, ReqBody, QuerySchema, ReqHeaders, BaseRequest>;
|
256
|
+
type SchemaAuthMethods<SV extends AnySchemaValidator, ParamsSchema extends ParamsObject<SV>, ReqBody extends Body<SV>, QuerySchema extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, VersionedApi extends VersionSchema<SV, Method>, BaseRequest> = AuthMethodsBase & (({
|
257
|
+
readonly mapPermissions: ExpressLikeSchemaAuthMapper<SV, ParamsSchema, ReqBody, QuerySchema, ReqHeaders, VersionedApi, BaseRequest>;
|
242
258
|
} & PermissionSet) | ({
|
243
|
-
readonly mapRoles: ExpressLikeSchemaAuthMapper<SV, ParamsSchema, ReqBody, QuerySchema, ReqHeaders, BaseRequest>;
|
259
|
+
readonly mapRoles: ExpressLikeSchemaAuthMapper<SV, ParamsSchema, ReqBody, QuerySchema, ReqHeaders, VersionedApi, BaseRequest>;
|
244
260
|
} & RoleSet));
|
245
|
-
type AuthMethods<SV extends AnySchemaValidator, P extends ParamsDictionary, ReqBody extends Record<string, unknown>, ReqQuery extends
|
246
|
-
readonly mapPermissions: ExpressLikeAuthMapper<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>;
|
261
|
+
type AuthMethods<SV extends AnySchemaValidator, P extends ParamsDictionary, ReqBody extends Record<string, unknown>, ReqQuery extends Record<string, unknown>, ReqHeaders extends Record<string, string>, VersionedReqs extends VersionedRequests, BaseRequest> = AuthMethodsBase & (({
|
262
|
+
readonly mapPermissions: ExpressLikeAuthMapper<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedReqs, BaseRequest>;
|
247
263
|
} & PermissionSet) | ({
|
248
|
-
readonly mapRoles: ExpressLikeAuthMapper<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>;
|
264
|
+
readonly mapRoles: ExpressLikeAuthMapper<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedReqs, BaseRequest>;
|
249
265
|
} & RoleSet));
|
250
266
|
/**
|
251
267
|
* Type representing a mapped schema.
|
@@ -283,11 +299,9 @@ type ResponseCompiledSchema = {
|
|
283
299
|
headers?: unknown;
|
284
300
|
responses: Record<number, unknown>;
|
285
301
|
};
|
286
|
-
type
|
287
|
-
/**
|
288
|
-
readonly
|
289
|
-
/** Summary of the contract */
|
290
|
-
readonly summary: string;
|
302
|
+
type BasePathParamHttpContractDetailsIO<SV extends AnySchemaValidator, BodySchema extends Body<SV> | undefined = Body<SV>, ResponseSchemas extends ResponsesObject<SV> = ResponsesObject<SV>, QuerySchema extends QueryObject<SV> | undefined = QueryObject<SV>, ReqHeaders extends HeadersObject<SV> | undefined = HeadersObject<SV>, ResHeaders extends HeadersObject<SV> | undefined = HeadersObject<SV>> = {
|
303
|
+
/** Optional body for the contract */
|
304
|
+
readonly body?: BodySchema;
|
291
305
|
/** Response schemas for the contract */
|
292
306
|
readonly responses: ResponseSchemas;
|
293
307
|
/** Optional request headers for the contract */
|
@@ -296,6 +310,15 @@ type BasePathParamHttpContractDetails<SV extends AnySchemaValidator, Name extend
|
|
296
310
|
readonly responseHeaders?: ResHeaders;
|
297
311
|
/** Optional query schemas for the contract */
|
298
312
|
readonly query?: QuerySchema;
|
313
|
+
};
|
314
|
+
type VersionedBasePathParamHttpContractDetailsIO<SV extends AnySchemaValidator, VersionedApi extends VersionSchema<SV, PathParamMethod>> = {
|
315
|
+
readonly versions: VersionedApi;
|
316
|
+
};
|
317
|
+
type BasePathParamHttpContractDetails<SV extends AnySchemaValidator, Name extends string = string, Path extends `/${string}` = `/${string}`, ParamsSchema extends ParamsObject<SV> = ParamsObject<SV>> = {
|
318
|
+
/** Name of the contract */
|
319
|
+
readonly name: StringWithoutSlash<Name>;
|
320
|
+
/** Summary of the contract */
|
321
|
+
readonly summary: string;
|
299
322
|
/** Options for the contract */
|
300
323
|
readonly options?: {
|
301
324
|
readonly requestValidation: 'error' | 'warning' | 'none';
|
@@ -318,10 +341,20 @@ type BasePathParamHttpContractDetails<SV extends AnySchemaValidator, Name extend
|
|
318
341
|
* @template ResponseSchemas - A type for response schemas, defaulting to ResponsesObject.
|
319
342
|
* @template QuerySchema - A type for query schemas, defaulting to QueryObject.
|
320
343
|
*/
|
321
|
-
type PathParamHttpContractDetails<SV extends AnySchemaValidator, Name extends string = string, Path extends `/${string}` = `/${string}`, ParamsSchema extends ParamsObject<SV> = ParamsObject<SV>, ResponseSchemas extends ResponsesObject<SV> = ResponsesObject<SV>, BodySchema extends Body<SV> = Body<SV>, QuerySchema extends QueryObject<SV> = QueryObject<SV>, ReqHeaders extends HeadersObject<SV> = HeadersObject<SV>, ResHeaders extends HeadersObject<SV> = HeadersObject<SV>, BaseRequest = unknown, Auth extends SchemaAuthMethods<SV, ParamsSchema, BodySchema, QuerySchema, ReqHeaders, BaseRequest> = SchemaAuthMethods<SV, ParamsSchema, BodySchema, QuerySchema, ReqHeaders, BaseRequest>> = BasePathParamHttpContractDetails<SV, Name, Path, ParamsSchema, ResponseSchemas, QuerySchema, ReqHeaders, ResHeaders> & {
|
344
|
+
type PathParamHttpContractDetails<SV extends AnySchemaValidator, Name extends string = string, Path extends `/${string}` = `/${string}`, ParamsSchema extends ParamsObject<SV> = ParamsObject<SV>, ResponseSchemas extends ResponsesObject<SV> = ResponsesObject<SV>, BodySchema extends Body<SV> = Body<SV>, QuerySchema extends QueryObject<SV> = QueryObject<SV>, ReqHeaders extends HeadersObject<SV> = HeadersObject<SV>, ResHeaders extends HeadersObject<SV> = HeadersObject<SV>, VersionedApi extends VersionSchema<SV, Method> = VersionSchema<SV, PathParamMethod>, BaseRequest = unknown, Auth extends SchemaAuthMethods<SV, ParamsSchema, BodySchema, QuerySchema, ReqHeaders, VersionedApi, BaseRequest> = SchemaAuthMethods<SV, ParamsSchema, BodySchema, QuerySchema, ReqHeaders, VersionedApi, BaseRequest>> = BasePathParamHttpContractDetails<SV, Name, Path, ParamsSchema> & ((BasePathParamHttpContractDetailsIO<SV, never, ResponseSchemas, QuerySchema, ReqHeaders, ResHeaders> & {
|
345
|
+
readonly versions?: never;
|
346
|
+
}) | (VersionedBasePathParamHttpContractDetailsIO<SV, VersionedApi> & {
|
347
|
+
readonly query?: never;
|
348
|
+
readonly requestHeaders?: never;
|
349
|
+
readonly responseHeaders?: never;
|
350
|
+
readonly responses?: never;
|
351
|
+
})) & {
|
322
352
|
/** Optional authentication details for the contract */
|
323
353
|
readonly auth?: Auth;
|
324
354
|
};
|
355
|
+
type VersionedHttpContractDetailsIO<SV extends AnySchemaValidator, VersionedApi extends VersionSchema<SV, HttpMethod>> = {
|
356
|
+
readonly versions: VersionedApi;
|
357
|
+
};
|
325
358
|
/**
|
326
359
|
* Interface representing HTTP contract details.
|
327
360
|
*
|
@@ -331,28 +364,15 @@ type PathParamHttpContractDetails<SV extends AnySchemaValidator, Name extends st
|
|
331
364
|
* @template BodySchema - A type for the body schema, defaulting to Body.
|
332
365
|
* @template QuerySchema - A type for query schemas, defaulting to QueryObject.
|
333
366
|
*/
|
334
|
-
type HttpContractDetails<SV extends AnySchemaValidator, Name extends string = string, Path extends `/${string}` = `/${string}`, ParamsSchema extends ParamsObject<SV> = ParamsObject<SV>, ResponseSchemas extends ResponsesObject<SV> = ResponsesObject<SV>, BodySchema extends Body<SV> = Body<SV>, QuerySchema extends QueryObject<SV> = QueryObject<SV>, ReqHeaders extends HeadersObject<SV> = HeadersObject<SV>, ResHeaders extends HeadersObject<SV> = HeadersObject<SV>, BaseRequest = unknown, Auth extends SchemaAuthMethods<SV, ParamsSchema, BodySchema, QuerySchema, ReqHeaders, BaseRequest> = SchemaAuthMethods<SV, ParamsSchema, BodySchema, QuerySchema, ReqHeaders, BaseRequest>> = BasePathParamHttpContractDetails<SV, Name, Path, ParamsSchema, ResponseSchemas, QuerySchema, ReqHeaders, ResHeaders> &
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
readonly
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
} : BodySchema extends MultipartForm<SV> ? {
|
344
|
-
/** Required body schema for body-based methods for the contract */
|
345
|
-
readonly body: ExclusiveRecord<BodySchema, TypedBody<SV>>;
|
346
|
-
} : BodySchema extends UrlEncodedForm<SV> ? {
|
347
|
-
/** Required body schema for body-based methods for the contract */
|
348
|
-
readonly body: ExclusiveRecord<BodySchema, TypedBody<SV>>;
|
349
|
-
} : BodySchema extends FileBody<SV> ? {
|
350
|
-
/** Required body schema for body-based methods for the contract */
|
351
|
-
readonly body: ExclusiveRecord<BodySchema, TypedBody<SV>>;
|
352
|
-
} : {
|
353
|
-
/** Required body schema for body-based methods for the contract */
|
354
|
-
readonly body: BodySchema;
|
355
|
-
}) & {
|
367
|
+
type HttpContractDetails<SV extends AnySchemaValidator, Name extends string = string, Path extends `/${string}` = `/${string}`, ParamsSchema extends ParamsObject<SV> = ParamsObject<SV>, ResponseSchemas extends ResponsesObject<SV> = ResponsesObject<SV>, BodySchema extends Body<SV> = Body<SV>, QuerySchema extends QueryObject<SV> = QueryObject<SV>, ReqHeaders extends HeadersObject<SV> = HeadersObject<SV>, ResHeaders extends HeadersObject<SV> = HeadersObject<SV>, VersionedApi extends VersionSchema<SV, Method> = VersionSchema<SV, HttpMethod>, BaseRequest = unknown, Auth extends SchemaAuthMethods<SV, ParamsSchema, BodySchema, QuerySchema, ReqHeaders, VersionedApi, BaseRequest> = SchemaAuthMethods<SV, ParamsSchema, BodySchema, QuerySchema, ReqHeaders, VersionedApi, BaseRequest>> = BasePathParamHttpContractDetails<SV, Name, Path, ParamsSchema> & ((BasePathParamHttpContractDetailsIO<SV, BodySchema, ResponseSchemas, QuerySchema, ReqHeaders, ResHeaders> & {
|
368
|
+
readonly versions?: never;
|
369
|
+
}) | (VersionedHttpContractDetailsIO<SV, VersionedApi> & {
|
370
|
+
readonly query?: never;
|
371
|
+
readonly requestHeaders?: never;
|
372
|
+
readonly responseHeaders?: never;
|
373
|
+
readonly body?: never;
|
374
|
+
readonly responses?: never;
|
375
|
+
})) & {
|
356
376
|
readonly auth?: Auth;
|
357
377
|
};
|
358
378
|
/**
|
@@ -365,11 +385,12 @@ type HttpContractDetails<SV extends AnySchemaValidator, Name extends string = st
|
|
365
385
|
* @template ReqHeaders - A type for request headers, defaulting to HeadersObject.
|
366
386
|
* @template ResHeaders - A type for response headers, defaulting to HeadersObject.
|
367
387
|
*/
|
368
|
-
type MiddlewareContractDetails<SV extends AnySchemaValidator, Name extends string = string, Path extends `/${string}` = `/${string}`, ParamsSchema extends ParamsObject<SV> = ParamsObject<SV>, ResponseSchemas extends ResponsesObject<SV> = ResponsesObject<SV>, BodySchema extends Body<SV> = Body<SV>, QuerySchema extends QueryObject<SV> = QueryObject<SV>, ReqHeaders extends HeadersObject<SV> = HeadersObject<SV>, ResHeaders extends HeadersObject<SV> = HeadersObject<SV>, BaseRequest = unknown, Auth extends SchemaAuthMethods<SV, ParamsSchema, BodySchema, QuerySchema, ReqHeaders, BaseRequest> = SchemaAuthMethods<SV, ParamsSchema, BodySchema, QuerySchema, ReqHeaders, BaseRequest>> = Omit<Partial<HttpContractDetails<SV, Name, Path, ParamsSchema, ResponseSchemas, BodySchema, QuerySchema, ReqHeaders, ResHeaders, BaseRequest, Auth>>, 'responses'>;
|
388
|
+
type MiddlewareContractDetails<SV extends AnySchemaValidator, Name extends string = string, Path extends `/${string}` = `/${string}`, ParamsSchema extends ParamsObject<SV> = ParamsObject<SV>, ResponseSchemas extends ResponsesObject<SV> = ResponsesObject<SV>, BodySchema extends Body<SV> = Body<SV>, QuerySchema extends QueryObject<SV> = QueryObject<SV>, ReqHeaders extends HeadersObject<SV> = HeadersObject<SV>, ResHeaders extends HeadersObject<SV> = HeadersObject<SV>, VersionedApi extends VersionSchema<SV, Method> = VersionSchema<SV, 'middleware'>, BaseRequest = unknown, Auth extends SchemaAuthMethods<SV, ParamsSchema, BodySchema, QuerySchema, ReqHeaders, VersionedApi, BaseRequest> = SchemaAuthMethods<SV, ParamsSchema, BodySchema, QuerySchema, ReqHeaders, VersionedApi, BaseRequest>> = Omit<Partial<HttpContractDetails<SV, Name, Path, ParamsSchema, ResponseSchemas, BodySchema, QuerySchema, ReqHeaders, ResHeaders, VersionedApi, BaseRequest, Auth>>, 'responses'>;
|
389
|
+
type VersionSchema<SV extends AnySchemaValidator, ContractMethod extends Method> = Record<string, BasePathParamHttpContractDetailsIO<SV, ContractMethod extends PathParamMethod ? never : Body<SV>, ResponsesObject<SV>, QueryObject<SV>, HeadersObject<SV>, HeadersObject<SV>>>;
|
369
390
|
/**
|
370
391
|
* Utility for different Contract Detail types
|
371
392
|
*/
|
372
|
-
type ContractDetails<SV extends AnySchemaValidator, Name extends string, ContractMethod extends Method, Path extends `/${string}`, ParamsSchema extends ParamsObject<SV>, ResponseSchemas extends ResponsesObject<SV>, BodySchema extends Body<SV>, QuerySchema extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, BaseRequest, Auth extends SchemaAuthMethods<SV, ParamsSchema, BodySchema, QuerySchema, ReqHeaders, BaseRequest>> = ContractMethod extends PathParamMethod ? PathParamHttpContractDetails<SV, Name, Path, ParamsSchema, ResponseSchemas, BodySchema, QuerySchema, ReqHeaders, ResHeaders, BaseRequest, Auth> : ContractMethod extends HttpMethod ? HttpContractDetails<SV, Name, Path, ParamsSchema, ResponseSchemas, BodySchema, QuerySchema, ReqHeaders, ResHeaders, BaseRequest, Auth> : ContractMethod extends 'middleware' ? MiddlewareContractDetails<SV, Name, Path, ParamsSchema, ResponseSchemas, BodySchema, QuerySchema, ReqHeaders, ResHeaders, BaseRequest, Auth> : never;
|
393
|
+
type ContractDetails<SV extends AnySchemaValidator, Name extends string, ContractMethod extends Method, Path extends `/${string}`, ParamsSchema extends ParamsObject<SV>, ResponseSchemas extends ResponsesObject<SV>, BodySchema extends Body<SV>, QuerySchema extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, VersionedApi extends VersionSchema<SV, ContractMethod>, BaseRequest, Auth extends SchemaAuthMethods<SV, ParamsSchema, BodySchema, QuerySchema, ReqHeaders, VersionedApi, BaseRequest>> = ContractMethod extends PathParamMethod ? PathParamHttpContractDetails<SV, Name, Path, ParamsSchema, ResponseSchemas, BodySchema, QuerySchema, ReqHeaders, ResHeaders, VersionedApi, BaseRequest, Auth> : ContractMethod extends HttpMethod ? HttpContractDetails<SV, Name, Path, ParamsSchema, ResponseSchemas, BodySchema, QuerySchema, ReqHeaders, ResHeaders, VersionedApi, BaseRequest, Auth> : ContractMethod extends 'middleware' ? MiddlewareContractDetails<SV, Name, Path, ParamsSchema, ResponseSchemas, BodySchema, QuerySchema, ReqHeaders, ResHeaders, VersionedApi, BaseRequest, Auth> : never;
|
373
394
|
|
374
395
|
/**
|
375
396
|
* Interface representing the context of a request.
|
@@ -409,9 +430,11 @@ interface ForklaunchBaseRequest<P extends ParamsDictionary, ReqBody extends Reco
|
|
409
430
|
* @template ReqQuery - A type for the request query, defaulting to ParsedQs.
|
410
431
|
* @template Headers - A type for the request headers, defaulting to IncomingHttpHeaders.
|
411
432
|
*/
|
412
|
-
interface ForklaunchRequest<SV extends AnySchemaValidator, P extends ParamsDictionary, ReqBody extends Record<string, unknown>, ReqQuery extends
|
433
|
+
interface ForklaunchRequest<SV extends AnySchemaValidator, P extends ParamsDictionary, ReqBody extends Record<string, unknown>, ReqQuery extends Record<string, unknown>, ReqHeaders extends Record<string, unknown>, Version extends string> {
|
413
434
|
/** Context of the request */
|
414
435
|
context: Prettify<RequestContext>;
|
436
|
+
/** API Version of the request */
|
437
|
+
version: Version;
|
415
438
|
/** Request parameters */
|
416
439
|
params: P;
|
417
440
|
/** Request headers */
|
@@ -429,11 +452,15 @@ interface ForklaunchRequest<SV extends AnySchemaValidator, P extends ParamsDicti
|
|
429
452
|
/** Request path */
|
430
453
|
path: string;
|
431
454
|
/** Request schema, compiled */
|
432
|
-
requestSchema: unknown
|
455
|
+
requestSchema: unknown | Record<string, unknown>;
|
433
456
|
/** Original path */
|
434
457
|
originalPath: string;
|
435
458
|
/** OpenTelemetry Collector */
|
436
459
|
openTelemetryCollector: OpenTelemetryCollector<MetricsDefinition>;
|
460
|
+
/** Session */
|
461
|
+
session: JWTPayload;
|
462
|
+
/** Parsed versions */
|
463
|
+
_parsedVersions: string[] | number;
|
437
464
|
}
|
438
465
|
/**
|
439
466
|
* Represents the types of data that can be sent in a response.
|
@@ -486,7 +513,7 @@ type ToNumber<T extends string | number | symbol> = T extends number ? T : T ext
|
|
486
513
|
* @template ResBodyMap - A type for the response body, defaulting to common status code responses.
|
487
514
|
* @template StatusCode - A type for the status code, defaulting to number.
|
488
515
|
*/
|
489
|
-
interface ForklaunchResponse<BaseResponse, ResBodyMap extends Record<number, unknown>, ResHeaders extends Record<string,
|
516
|
+
interface ForklaunchResponse<BaseResponse, ResBodyMap extends Record<number, unknown>, ResHeaders extends Record<string, unknown>, LocalsObj extends Record<string, unknown>, Version extends string> {
|
490
517
|
/** Data of the response body */
|
491
518
|
bodyData: unknown;
|
492
519
|
/** Status code of the response */
|
@@ -556,32 +583,52 @@ interface ForklaunchResponse<BaseResponse, ResBodyMap extends Record<number, unk
|
|
556
583
|
/** Cors */
|
557
584
|
cors: boolean;
|
558
585
|
/** Response schema, compiled */
|
559
|
-
responseSchemas: ResponseCompiledSchema
|
586
|
+
responseSchemas: ResponseCompiledSchema | Record<string, ResponseCompiledSchema>;
|
560
587
|
/** Whether the metric has been recorded */
|
561
588
|
metricRecorded: boolean;
|
562
589
|
/** Whether the response has been sent */
|
563
590
|
sent: boolean;
|
591
|
+
/** Versioned responses */
|
592
|
+
version: Version;
|
564
593
|
}
|
565
594
|
/**
|
566
595
|
* Type representing the next function in a middleware.
|
567
596
|
* @param {unknown} [err] - Optional error parameter.
|
568
597
|
*/
|
569
598
|
type ForklaunchNextFunction = (err?: unknown) => void;
|
599
|
+
type VersionedRequests = Record<string, {
|
600
|
+
requestHeaders?: Record<string, unknown>;
|
601
|
+
body?: Record<string, unknown>;
|
602
|
+
query?: Record<string, unknown>;
|
603
|
+
}>;
|
604
|
+
type ResolvedForklaunchRequestBase<SV extends AnySchemaValidator, P extends ParamsDictionary, ReqBody extends Record<string, unknown>, ReqQuery extends Record<string, unknown>, ReqHeaders extends Record<string, unknown>, Version extends string, BaseRequest> = unknown extends BaseRequest ? ForklaunchRequest<SV, P, ReqBody, ReqQuery, ReqHeaders, Version> : Omit<BaseRequest, keyof ForklaunchRequest<SV, P, ReqBody, ReqQuery, ReqHeaders, Version>> & ForklaunchRequest<SV, P, ReqBody, ReqQuery, ReqHeaders, Version>;
|
570
605
|
/**
|
571
606
|
* Type representing the resolved forklaunch request from a base request type.
|
572
607
|
* @template SV - A type that extends AnySchemaValidator.
|
573
608
|
* @template P - A type for request parameters, defaulting to ParamsDictionary.
|
574
609
|
* @template ReqBody - A type for the request body, defaulting to Record<string, unknown>.
|
575
610
|
* @template ReqQuery - A type for the request query, defaulting to ParsedQs.
|
576
|
-
* @template ReqHeaders - A type for the request headers, defaulting to Record<string,
|
611
|
+
* @template ReqHeaders - A type for the request headers, defaulting to Record<string, unknown>.
|
577
612
|
* @template BaseRequest - A type for the base request.
|
578
613
|
*/
|
579
|
-
type ResolvedForklaunchRequest<SV extends AnySchemaValidator, P extends ParamsDictionary, ReqBody extends Record<string, unknown>, ReqQuery extends
|
580
|
-
[
|
581
|
-
};
|
614
|
+
type ResolvedForklaunchRequest<SV extends AnySchemaValidator, P extends ParamsDictionary, ReqBody extends Record<string, unknown>, ReqQuery extends Record<string, unknown>, ReqHeaders extends Record<string, string>, VersionedReqs extends VersionedRequests, BaseRequest> = VersionedRequests extends VersionedReqs ? ResolvedForklaunchRequestBase<SV, P, ReqBody, ReqQuery, ReqHeaders, never, BaseRequest> : {
|
615
|
+
[K in keyof VersionedReqs]: ResolvedForklaunchRequestBase<SV, P, VersionedReqs[K]['body'] extends Record<string, unknown> ? VersionedReqs[K]['body'] : Record<string, unknown>, VersionedReqs[K]['query'] extends Record<string, unknown> ? VersionedReqs[K]['query'] : ParsedQs, VersionedReqs[K]['requestHeaders'] extends Record<string, unknown> ? VersionedReqs[K]['requestHeaders'] : Record<string, string>, K extends string ? K : never, BaseRequest>;
|
616
|
+
}[keyof VersionedReqs];
|
582
617
|
type ResolvedForklaunchAuthRequest<P extends ParamsDictionary, ReqBody extends Record<string, unknown>, ReqQuery extends ParsedQs, ReqHeaders extends Record<string, string>, BaseRequest> = unknown extends BaseRequest ? ForklaunchBaseRequest<P, ReqBody, ReqQuery, ReqHeaders> : {
|
583
618
|
[key in keyof BaseRequest]: key extends keyof ForklaunchBaseRequest<P, ReqBody, ReqQuery, ReqHeaders> ? ForklaunchBaseRequest<P, ReqBody, ReqQuery, ReqHeaders>[key] : key extends keyof BaseRequest ? BaseRequest[key] : never;
|
584
619
|
};
|
620
|
+
type VersionedResponses = Record<string, {
|
621
|
+
responseHeaders?: Record<string, unknown>;
|
622
|
+
responses: Record<number, unknown>;
|
623
|
+
}>;
|
624
|
+
type ResolvedForklaunchResponseBase<ResBodyMap extends Record<number, unknown>, ResHeaders extends Record<string, unknown>, LocalsObj extends Record<string, unknown>, Version extends string, BaseResponse> = unknown extends BaseResponse ? ForklaunchResponse<BaseResponse, ResBodyMap, ResHeaders, LocalsObj, Version> : (string extends Version ? unknown : {
|
625
|
+
version?: Version;
|
626
|
+
}) & {
|
627
|
+
[K in keyof BaseResponse | keyof ForklaunchResponse<BaseResponse, ResBodyMap, ResHeaders, LocalsObj, Version>]: K extends keyof ForklaunchResponse<BaseResponse, ResBodyMap, ResHeaders, LocalsObj, Version> ? ForklaunchResponse<BaseResponse, ResBodyMap, ResHeaders, LocalsObj, Version>[K] : K extends keyof BaseResponse ? BaseResponse[K] : never;
|
628
|
+
};
|
629
|
+
type ResolvedForklaunchResponse<ResBodyMap extends Record<number, unknown>, ResHeaders extends Record<string, string>, LocalsObj extends Record<string, unknown>, VersionedResps extends VersionedResponses, BaseResponse> = VersionedResponses extends VersionedResps ? ResolvedForklaunchResponseBase<ResBodyMap, ResHeaders, LocalsObj, never, BaseResponse> : {
|
630
|
+
[K in keyof VersionedResps]: ResolvedForklaunchResponseBase<VersionedResps[K]['responses'], VersionedResps[K]['responseHeaders'] extends Record<string, unknown> ? VersionedResps[K]['responseHeaders'] : Record<string, string>, LocalsObj, K extends string ? K : never, BaseResponse>;
|
631
|
+
}[keyof VersionedResps];
|
585
632
|
/**
|
586
633
|
* Represents a middleware handler with schema validation.
|
587
634
|
*
|
@@ -593,10 +640,8 @@ type ResolvedForklaunchAuthRequest<P extends ParamsDictionary, ReqBody extends R
|
|
593
640
|
* @template LocalsObj - A type for local variables, defaulting to an empty object.
|
594
641
|
* @template StatusCode - A type for the status code, defaulting to number.
|
595
642
|
*/
|
596
|
-
interface ExpressLikeHandler<SV extends AnySchemaValidator, P extends ParamsDictionary, ResBodyMap extends Record<number, unknown>, ReqBody extends Record<string, unknown>, ReqQuery extends ParsedQs, ReqHeaders extends Record<string, string>, ResHeaders extends Record<string, string>, LocalsObj extends Record<string, unknown>, BaseRequest, BaseResponse, NextFunction> {
|
597
|
-
(req: ResolvedForklaunchRequest<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>, res:
|
598
|
-
[key in keyof BaseResponse]: key extends keyof ForklaunchResponse<BaseResponse, ResBodyMap, ResHeaders, LocalsObj> ? ForklaunchResponse<BaseResponse, ResBodyMap, ResHeaders, LocalsObj>[key] : key extends keyof BaseResponse ? BaseResponse[key] : never;
|
599
|
-
}, next: NextFunction): unknown;
|
643
|
+
interface ExpressLikeHandler<SV extends AnySchemaValidator, P extends ParamsDictionary, ResBodyMap extends Record<number, unknown>, ReqBody extends Record<string, unknown>, ReqQuery extends ParsedQs, ReqHeaders extends Record<string, string>, ResHeaders extends Record<string, string>, LocalsObj extends Record<string, unknown>, VersionedReqs extends VersionedRequests, VersionedResps extends VersionedResponses, BaseRequest, BaseResponse, NextFunction> {
|
644
|
+
(req: ResolvedForklaunchRequest<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedReqs, BaseRequest>, res: ResolvedForklaunchResponse<ResBodyMap, ResHeaders, LocalsObj, VersionedResps, BaseResponse>, next: NextFunction): unknown;
|
600
645
|
}
|
601
646
|
type MapParamsSchema<SV extends AnySchemaValidator, P extends ParamsObject<SV>> = MapSchema<SV, P> extends infer Params ? unknown extends Params ? ParamsDictionary : Params : ParamsDictionary;
|
602
647
|
type ExtractContentType<SV extends AnySchemaValidator, T extends ResponseBody<SV> | unknown> = T extends {
|
@@ -611,6 +656,22 @@ type MapReqBodySchema<SV extends AnySchemaValidator, ReqBody extends Body<SV>> =
|
|
611
656
|
type MapReqQuerySchema<SV extends AnySchemaValidator, ReqQuery extends QueryObject<SV>> = MapSchema<SV, ReqQuery> extends infer Query ? unknown extends Query ? ParsedQs : Query : ParsedQs;
|
612
657
|
type MapReqHeadersSchema<SV extends AnySchemaValidator, ReqHeaders extends HeadersObject<SV>> = MapSchema<SV, ReqHeaders> extends infer RequestHeaders ? unknown extends RequestHeaders ? Record<string, string> : RequestHeaders : Record<string, string>;
|
613
658
|
type MapResHeadersSchema<SV extends AnySchemaValidator, ResHeaders extends HeadersObject<SV>> = MapSchema<SV, ResHeaders> extends infer ResponseHeaders ? unknown extends ResponseHeaders ? ForklaunchResHeaders : ResponseHeaders : ForklaunchResHeaders;
|
659
|
+
type MapVersionedReqsSchema<SV extends AnySchemaValidator, VersionedReqs extends VersionSchema<SV, Method>> = {
|
660
|
+
[K in keyof VersionedReqs]: (VersionedReqs[K]['requestHeaders'] extends HeadersObject<SV> ? {
|
661
|
+
requestHeaders: MapReqHeadersSchema<SV, VersionedReqs[K]['requestHeaders']>;
|
662
|
+
} : unknown) & (VersionedReqs[K]['body'] extends Body<SV> ? {
|
663
|
+
body: MapReqBodySchema<SV, VersionedReqs[K]['body']>;
|
664
|
+
} : unknown) & (VersionedReqs[K]['query'] extends QueryObject<SV> ? {
|
665
|
+
query: MapReqQuerySchema<SV, VersionedReqs[K]['query']>;
|
666
|
+
} : unknown);
|
667
|
+
} extends infer MappedVersionedReqs ? MappedVersionedReqs extends VersionedRequests ? MappedVersionedReqs : VersionedRequests : VersionedRequests;
|
668
|
+
type MapVersionedRespsSchema<SV extends AnySchemaValidator, VersionedResps extends VersionSchema<SV, Method>> = {
|
669
|
+
[K in keyof VersionedResps]: (VersionedResps[K]['responseHeaders'] extends HeadersObject<SV> ? {
|
670
|
+
responseHeaders: MapResHeadersSchema<SV, VersionedResps[K]['responseHeaders']>;
|
671
|
+
} : unknown) & (VersionedResps[K]['responses'] extends ResponsesObject<SV> ? {
|
672
|
+
responses: MapResBodyMapSchema<SV, VersionedResps[K]['responses']>;
|
673
|
+
} : unknown);
|
674
|
+
} extends infer MappedVersionedResps ? MappedVersionedResps extends VersionedResponses ? MappedVersionedResps : VersionedResponses : VersionedResponses;
|
614
675
|
/**
|
615
676
|
* Represents a schema middleware handler with typed parameters, responses, body, and query.
|
616
677
|
*
|
@@ -621,7 +682,7 @@ type MapResHeadersSchema<SV extends AnySchemaValidator, ResHeaders extends Heade
|
|
621
682
|
* @template ReqQuery - A type for the request query, defaulting to QueryObject.
|
622
683
|
* @template LocalsObj - A type for local variables, defaulting to an empty object.
|
623
684
|
*/
|
624
|
-
type ExpressLikeSchemaHandler<SV extends AnySchemaValidator, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, BaseRequest, BaseResponse, NextFunction> = ExpressLikeHandler<SV, MapParamsSchema<SV, P>, MapResBodyMapSchema<SV, ResBodyMap>, MapReqBodySchema<SV, ReqBody>, MapReqQuerySchema<SV, ReqQuery>, MapReqHeadersSchema<SV, ReqHeaders>, MapResHeadersSchema<SV, ResHeaders>, LocalsObj, BaseRequest, BaseResponse, NextFunction>;
|
685
|
+
type ExpressLikeSchemaHandler<SV extends AnySchemaValidator, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, VersionedApi extends VersionSchema<SV, Method>, BaseRequest, BaseResponse, NextFunction> = ExpressLikeHandler<SV, MapParamsSchema<SV, P>, MapResBodyMapSchema<SV, ResBodyMap>, MapReqBodySchema<SV, ReqBody>, MapReqQuerySchema<SV, ReqQuery>, MapReqHeadersSchema<SV, ReqHeaders>, MapResHeadersSchema<SV, ResHeaders>, LocalsObj, MapVersionedReqsSchema<SV, VersionedApi>, MapVersionedRespsSchema<SV, VersionedApi>, BaseRequest, BaseResponse, NextFunction>;
|
625
686
|
/**
|
626
687
|
* Represents a function that maps an authenticated request with schema validation
|
627
688
|
* to a set of authorization strings, with request properties automatically inferred from the schema.
|
@@ -635,17 +696,15 @@ type ExpressLikeSchemaHandler<SV extends AnySchemaValidator, P extends ParamsObj
|
|
635
696
|
* @param {ForklaunchRequest<SV, P, ReqBody, ReqQuery, ReqHeaders>} req - The request object with schema validation.
|
636
697
|
* @returns {Set<string> | Promise<Set<string>>} - A set of authorization strings or a promise that resolves to it.
|
637
698
|
*/
|
638
|
-
type ExpressLikeSchemaAuthMapper<SV extends AnySchemaValidator, P extends ParamsObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, BaseRequest> = ExpressLikeAuthMapper<SV, P extends infer UnmappedParams ? UnmappedParams extends ParamsObject<SV> ? MapParamsSchema<SV, UnmappedParams> : never : never, ReqBody extends infer UnmappedReqBody ? UnmappedReqBody extends Body<SV> ? MapReqBodySchema<SV, UnmappedReqBody> : never : never, ReqQuery extends infer UnmappedReqQuery ? UnmappedReqQuery extends QueryObject<SV> ? MapReqQuerySchema<SV, UnmappedReqQuery> : never : never, ReqHeaders extends infer UnmappedReqHeaders ? UnmappedReqHeaders extends HeadersObject<SV> ? MapReqHeadersSchema<SV, UnmappedReqHeaders> : never : never, BaseRequest>;
|
639
|
-
type ExpressLikeAuthMapper<SV extends AnySchemaValidator, P extends ParamsDictionary, ReqBody extends Record<string, unknown>, ReqQuery extends
|
699
|
+
type ExpressLikeSchemaAuthMapper<SV extends AnySchemaValidator, P extends ParamsObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, VersionedReqs extends VersionSchema<SV, Method>, BaseRequest> = ExpressLikeAuthMapper<SV, P extends infer UnmappedParams ? UnmappedParams extends ParamsObject<SV> ? MapParamsSchema<SV, UnmappedParams> : never : never, ReqBody extends infer UnmappedReqBody ? UnmappedReqBody extends Body<SV> ? MapReqBodySchema<SV, UnmappedReqBody> : never : never, ReqQuery extends infer UnmappedReqQuery ? UnmappedReqQuery extends QueryObject<SV> ? MapReqQuerySchema<SV, UnmappedReqQuery> : never : never, ReqHeaders extends infer UnmappedReqHeaders ? UnmappedReqHeaders extends HeadersObject<SV> ? MapReqHeadersSchema<SV, UnmappedReqHeaders> : never : never, VersionedReqs extends infer UnmappedVersionedReqs ? UnmappedVersionedReqs extends VersionSchema<SV, Method> ? MapVersionedReqsSchema<SV, UnmappedVersionedReqs> : never : never, BaseRequest>;
|
700
|
+
type ExpressLikeAuthMapper<SV extends AnySchemaValidator, P extends ParamsDictionary, ReqBody extends Record<string, unknown>, ReqQuery extends Record<string, unknown>, ReqHeaders extends Record<string, string>, VersionedReqs extends VersionedRequests, BaseRequest> = (payload: JWTPayload, req?: ResolvedForklaunchRequest<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedReqs, BaseRequest>) => Set<string> | Promise<Set<string>>;
|
640
701
|
type TokenPrefix<Auth extends AuthMethodsBase> = undefined extends Auth['tokenPrefix'] ? Auth extends BasicAuthMethods ? 'Basic ' : 'Bearer ' : `${Auth['tokenPrefix']} `;
|
641
702
|
type AuthHeaders<Auth extends AuthMethodsBase> = undefined extends Auth['headerName'] ? {
|
642
703
|
authorization: `${TokenPrefix<Auth>}${string}`;
|
643
704
|
} : {
|
644
705
|
[K in NonNullable<Auth['headerName']>]: `${TokenPrefix<Auth>}${string}`;
|
645
706
|
};
|
646
|
-
type LiveTypeFunctionRequestInit<SV extends AnySchemaValidator, P extends ParamsObject<SV>, ReqBody extends Body<SV
|
647
|
-
params: MapSchema<SV, P>;
|
648
|
-
}) & (Body<SV> extends ReqBody ? unknown : {
|
707
|
+
type LiveTypeFunctionRequestInit<SV extends AnySchemaValidator, P extends ParamsObject<SV>, ReqBody extends Body<SV> | undefined, ReqQuery extends QueryObject<SV> | undefined, ReqHeaders extends HeadersObject<SV> | undefined, Auth extends AuthMethodsBase> = MakePropertyOptionalIfChildrenOptional<(Body<SV> extends ReqBody ? unknown : {
|
649
708
|
body: MapSchema<SV, ReqBody>;
|
650
709
|
}) & (QueryObject<SV> extends ReqQuery ? unknown : {
|
651
710
|
query: MapSchema<SV, ReqQuery>;
|
@@ -655,6 +714,8 @@ type LiveTypeFunctionRequestInit<SV extends AnySchemaValidator, P extends Params
|
|
655
714
|
headers: MapSchema<SV, ReqHeaders>;
|
656
715
|
} : {
|
657
716
|
headers: MapSchema<SV, ReqHeaders> & AuthHeaders<Auth>;
|
717
|
+
}) & (ParamsObject<SV> extends P ? unknown : {
|
718
|
+
params: MapSchema<SV, P>;
|
658
719
|
})>;
|
659
720
|
/**
|
660
721
|
* Represents a live type function for the SDK.
|
@@ -669,7 +730,7 @@ type LiveTypeFunctionRequestInit<SV extends AnySchemaValidator, P extends Params
|
|
669
730
|
* @template ResHeaders - A type for the response headers.
|
670
731
|
*
|
671
732
|
*/
|
672
|
-
type LiveTypeFunction<SV extends AnySchemaValidator, Route extends string, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, ContractMethod extends Method, Auth extends AuthMethodsBase> = (route: SanitizePathSlashes<Route>, ...reqInit: Prettify<Omit<RequestInit, 'method' | 'body' | 'query' | 'headers' | 'params'> & {
|
733
|
+
type LiveTypeFunction<SV extends AnySchemaValidator, Route extends string, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, ContractMethod extends Method, VersionedApi extends VersionSchema<SV, ContractMethod>, Auth extends AuthMethodsBase> = string extends keyof VersionedApi ? (route: SanitizePathSlashes<Route>, ...reqInit: Prettify<Omit<RequestInit, 'method' | 'body' | 'query' | 'headers' | 'params'> & {
|
673
734
|
method: Uppercase<ContractMethod>;
|
674
735
|
} & LiveTypeFunctionRequestInit<SV, P, ReqBody, ReqQuery, ReqHeaders, Auth>> extends infer ReqInit ? ReqInit extends {
|
675
736
|
body: unknown;
|
@@ -679,7 +740,19 @@ type LiveTypeFunction<SV extends AnySchemaValidator, Route extends string, P ext
|
|
679
740
|
query: unknown;
|
680
741
|
} | {
|
681
742
|
headers: unknown;
|
682
|
-
} ? [reqInit: ReqInit] : [reqInit?: ReqInit] : never) => Promise<Prettify<SdkResponse<SV, ResponsesObject<SV> extends ResBodyMap ? Record<number, unknown> : ResBodyMap, ForklaunchResHeaders extends ResHeaders ? unknown : MapSchema<SV, ResHeaders
|
743
|
+
} ? [reqInit: ReqInit] : [reqInit?: ReqInit] : never) => Promise<Prettify<SdkResponse<SV, ResponsesObject<SV> extends ResBodyMap ? Record<number, unknown> : ResBodyMap, ForklaunchResHeaders extends ResHeaders ? unknown : MapSchema<SV, ResHeaders>>>> : {
|
744
|
+
[K in keyof VersionedApi]: (...reqInit: Prettify<Omit<RequestInit, 'method' | 'body' | 'query' | 'headers' | 'params'> & LiveTypeFunctionRequestInit<SV, P, VersionedApi[K]['body'] extends Body<SV> ? VersionedApi[K]['body'] : Body<SV>, VersionedApi[K]['query'] extends QueryObject<SV> ? VersionedApi[K]['query'] : QueryObject<SV>, VersionedApi[K]['requestHeaders'] extends HeadersObject<SV> ? VersionedApi[K]['requestHeaders'] : HeadersObject<SV>, Auth>> & {
|
745
|
+
version: K;
|
746
|
+
} extends infer ReqInit ? ReqInit extends {
|
747
|
+
body: unknown;
|
748
|
+
} | {
|
749
|
+
params: unknown;
|
750
|
+
} | {
|
751
|
+
query: unknown;
|
752
|
+
} | {
|
753
|
+
headers: unknown;
|
754
|
+
} ? [reqInit: ReqInit] : [reqInit?: ReqInit] : never) => Promise<Prettify<SdkResponse<SV, ResponsesObject<SV> extends VersionedApi[K]['responses'] ? Record<number, unknown> : VersionedApi[K]['responses'], ForklaunchResHeaders extends VersionedApi[K]['responseHeaders'] ? unknown : MapSchema<SV, VersionedApi[K]['responseHeaders']>>>>;
|
755
|
+
};
|
683
756
|
/**
|
684
757
|
* Represents a live type function for the SDK.
|
685
758
|
*
|
@@ -692,7 +765,7 @@ type LiveTypeFunction<SV extends AnySchemaValidator, Route extends string, P ext
|
|
692
765
|
* @template ResHeaders - A type for the response headers.
|
693
766
|
*
|
694
767
|
*/
|
695
|
-
type LiveSdkFunction<SV extends AnySchemaValidator, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, Auth extends AuthMethodsBase> = (...reqInit: Prettify<Omit<RequestInit, 'method' | 'body' | 'query' | 'headers' | 'params'> & LiveTypeFunctionRequestInit<SV, P, ReqBody, ReqQuery, ReqHeaders, Auth>> extends infer ReqInit ? ReqInit extends {
|
768
|
+
type LiveSdkFunction<SV extends AnySchemaValidator, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, VersionedApi extends VersionSchema<SV, Method>, Auth extends AuthMethodsBase> = string extends keyof VersionedApi ? (...reqInit: Prettify<Omit<RequestInit, 'method' | 'body' | 'query' | 'headers' | 'params'> & LiveTypeFunctionRequestInit<SV, P, ReqBody, ReqQuery, ReqHeaders, Auth>> extends infer ReqInit ? ReqInit extends {
|
696
769
|
body: unknown;
|
697
770
|
} | {
|
698
771
|
params: unknown;
|
@@ -700,14 +773,24 @@ type LiveSdkFunction<SV extends AnySchemaValidator, P extends ParamsObject<SV>,
|
|
700
773
|
query: unknown;
|
701
774
|
} | {
|
702
775
|
headers: unknown;
|
703
|
-
} ? [reqInit: ReqInit] : [reqInit?: ReqInit] : never) => Promise<Prettify<SdkResponse<SV, ResponsesObject<SV> extends ResBodyMap ? Record<number, unknown> : ResBodyMap, ForklaunchResHeaders extends ResHeaders ? unknown : MapSchema<SV, ResHeaders
|
776
|
+
} ? [reqInit: ReqInit] : [reqInit?: ReqInit] : never) => Promise<Prettify<SdkResponse<SV, ResponsesObject<SV> extends ResBodyMap ? Record<number, unknown> : ResBodyMap, ForklaunchResHeaders extends ResHeaders ? unknown : MapSchema<SV, ResHeaders>>>> : {
|
777
|
+
[K in keyof VersionedApi]: (...reqInit: Prettify<Omit<RequestInit, 'method' | 'body' | 'query' | 'headers' | 'params'> & LiveTypeFunctionRequestInit<SV, P, VersionedApi[K]['body'] extends Body<SV> ? VersionedApi[K]['body'] : Body<SV>, VersionedApi[K]['query'] extends QueryObject<SV> ? VersionedApi[K]['query'] : QueryObject<SV>, VersionedApi[K]['requestHeaders'] extends HeadersObject<SV> ? VersionedApi[K]['requestHeaders'] : HeadersObject<SV>, Auth>> extends infer ReqInit ? ReqInit extends {
|
778
|
+
body: unknown;
|
779
|
+
} | {
|
780
|
+
params: unknown;
|
781
|
+
} | {
|
782
|
+
query: unknown;
|
783
|
+
} | {
|
784
|
+
headers: unknown;
|
785
|
+
} ? [reqInit: ReqInit] : [reqInit?: ReqInit] : never) => Promise<Prettify<SdkResponse<SV, ResponsesObject<SV> extends VersionedApi[K]['responses'] ? Record<number, unknown> : VersionedApi[K]['responses'], ForklaunchResHeaders extends VersionedApi[K]['responseHeaders'] ? unknown : MapSchema<SV, VersionedApi[K]['responseHeaders']>>>>;
|
786
|
+
};
|
704
787
|
/**
|
705
788
|
* Represents a basic SDK Response object.
|
706
789
|
*
|
707
790
|
* @template ResBodyMap - A type for the response body.
|
708
791
|
* @template ResHeaders - A type for the response headers.
|
709
792
|
*/
|
710
|
-
type SdkResponse<SV extends AnySchemaValidator, ResBodyMap extends Record<number, unknown>, ResHeaders extends Record<string,
|
793
|
+
type SdkResponse<SV extends AnySchemaValidator, ResBodyMap extends Record<number, unknown>, ResHeaders extends Record<string, unknown> | unknown> = ({
|
711
794
|
[K in keyof ForklaunchResErrors]: {
|
712
795
|
code: K;
|
713
796
|
contentType: 'text/plain';
|
@@ -721,7 +804,7 @@ type SdkResponse<SV extends AnySchemaValidator, ResBodyMap extends Record<number
|
|
721
804
|
} & (unknown extends ResHeaders ? unknown : {
|
722
805
|
headers: ResHeaders;
|
723
806
|
});
|
724
|
-
})[keyof (ForklaunchResErrors & ResBodyMap)]
|
807
|
+
})[keyof (ForklaunchResErrors & ResBodyMap)];
|
725
808
|
/**
|
726
809
|
* Represents the default error types for responses.
|
727
810
|
*/
|
@@ -777,11 +860,13 @@ interface ForklaunchRouter<SV extends AnySchemaValidator> {
|
|
777
860
|
/** Nested routers */
|
778
861
|
routers: ForklaunchRouter<SV>[];
|
779
862
|
/** Nested route map */
|
780
|
-
|
863
|
+
_fetchMap: Record<string, unknown>;
|
781
864
|
/** The SDK for the router */
|
782
865
|
sdk: Record<string, unknown>;
|
783
866
|
/** The name of the SDK for the router */
|
784
867
|
sdkName?: string;
|
868
|
+
/** The SDK paths for the router */
|
869
|
+
sdkPaths: Record<string, string>;
|
785
870
|
}
|
786
871
|
/**
|
787
872
|
* Interface representing a Forklaunch route.
|
@@ -792,133 +877,134 @@ interface ForklaunchRoute<SV extends AnySchemaValidator> {
|
|
792
877
|
/** The base path for the route */
|
793
878
|
basePath: string;
|
794
879
|
/** The path for the route, which can be a string, RegExp, or an array of strings or RegExps */
|
795
|
-
path: string
|
880
|
+
path: `/${string}`;
|
796
881
|
/** The HTTP method for the route */
|
797
882
|
method: Method;
|
798
883
|
/** The contract details for the route */
|
799
884
|
contractDetails: PathParamHttpContractDetails<SV> | HttpContractDetails<SV>;
|
800
885
|
}
|
801
886
|
|
802
|
-
type ContractDetailsExpressLikeSchemaHandler<SV extends AnySchemaValidator, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, BaseRequest, BaseResponse, NextFunction> = ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction>;
|
803
|
-
type TypedHandler<SV extends AnySchemaValidator, Name extends string, ContractMethod extends Method, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, BaseRequest, BaseResponse, NextFunction, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>> = {
|
887
|
+
type ContractDetailsExpressLikeSchemaHandler<SV extends AnySchemaValidator, ContractMethod extends Method, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, VersionedApi extends VersionSchema<SV, ContractMethod>, BaseRequest, BaseResponse, NextFunction> = ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction>;
|
888
|
+
type TypedHandler<SV extends AnySchemaValidator, Name extends string, ContractMethod extends Method, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, VersionedApi extends VersionSchema<SV, ContractMethod>, BaseRequest, BaseResponse, NextFunction, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>> = {
|
804
889
|
_typedHandler: true;
|
805
890
|
_path: Path | undefined;
|
806
|
-
contractDetails: ContractDetails<SV, Name, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, BaseRequest, Auth>;
|
807
|
-
handlers: ContractDetailsExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction>[];
|
891
|
+
contractDetails: ContractDetails<SV, Name, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, BaseRequest, Auth>;
|
892
|
+
handlers: ContractDetailsExpressLikeSchemaHandler<SV, ContractMethod, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction>[];
|
808
893
|
};
|
809
|
-
type ExpressLikeTypedHandler<SV extends AnySchemaValidator, Name extends string, ContractMethod extends Method, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, BaseRequest, BaseResponse, NextFunction, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>> = {
|
894
|
+
type ExpressLikeTypedHandler<SV extends AnySchemaValidator, Name extends string, ContractMethod extends Method, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, VersionedApi extends VersionSchema<SV, ContractMethod>, BaseRequest, BaseResponse, NextFunction, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>> = {
|
810
895
|
_typedHandler: true;
|
811
896
|
_path: Path | undefined;
|
812
|
-
|
813
|
-
|
897
|
+
_method: ContractMethod;
|
898
|
+
contractDetails: ContractDetails<SV, Name, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, BaseRequest, Auth>;
|
899
|
+
handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction>[];
|
814
900
|
};
|
815
901
|
|
816
902
|
interface LiveTypeRouteDefinition<SV extends AnySchemaValidator, BasePath extends `/${string}`, ContractMethod extends Method, RouterHandler, Internal extends ExpressLikeRouter<RouterHandler, Internal>, BaseRequest, BaseResponse, NextFunction, ChainableRouter extends {
|
817
|
-
|
903
|
+
_fetchMap: object;
|
818
904
|
sdk: object;
|
819
905
|
}> {
|
820
|
-
<Name extends string, Path extends `/${string}`, SuppliedPath extends Path, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>(path: PathMatch<SuppliedPath, Path>, typedHandler: TypedHandler<SV, Name, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth>): ChainableRouter & {
|
821
|
-
|
822
|
-
sdk: Prettify<ChainableRouter['sdk'] & Record<PrettyCamelCase<Name>, LiveSdkFunction<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Auth>>>;
|
906
|
+
<Name extends string, Path extends `/${string}`, SuppliedPath extends Path, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, VersionedApi extends VersionSchema<SV, ContractMethod>, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>(path: PathMatch<SuppliedPath, Path>, typedHandler: TypedHandler<SV, Name, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth>): ChainableRouter & {
|
907
|
+
_fetchMap: Prettify<ChainableRouter['_fetchMap'] extends Record<SanitizePathSlashes<`${BasePath}${Path}`>, unknown> ? ChainableRouter['_fetchMap'] & Record<SanitizePathSlashes<`${BasePath}${Path}`>, ChainableRouter['_fetchMap'][SanitizePathSlashes<`${BasePath}${Path}`>] & Record<Uppercase<ContractMethod>, LiveTypeFunction<SV, SanitizePathSlashes<`${BasePath}${Path}`>, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, ContractMethod, VersionedApi, Auth>>> : ChainableRouter['_fetchMap'] & Record<SanitizePathSlashes<`${BasePath}${Path}`>, Record<Uppercase<ContractMethod>, LiveTypeFunction<SV, SanitizePathSlashes<`${BasePath}${Path}`>, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, ContractMethod, VersionedApi, Auth>>>>;
|
908
|
+
sdk: Prettify<ChainableRouter['sdk'] & Record<PrettyCamelCase<Name>, LiveSdkFunction<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Auth>>>;
|
823
909
|
};
|
824
|
-
<Name extends string, Path extends `/${string}`, SuppliedPath extends Path, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>(path: PathMatch<SuppliedPath, Path>, middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction>, ...middlewareAndTypedHandler: [
|
825
|
-
...ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction>[],
|
826
|
-
TypedHandler<SV, Name, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth>
|
910
|
+
<Name extends string, Path extends `/${string}`, SuppliedPath extends Path, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, VersionedApi extends VersionSchema<SV, ContractMethod>, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>(path: PathMatch<SuppliedPath, Path>, middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction>, ...middlewareAndTypedHandler: [
|
911
|
+
...ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction>[],
|
912
|
+
TypedHandler<SV, Name, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth>
|
827
913
|
]): ChainableRouter & {
|
828
|
-
|
829
|
-
sdk: Prettify<ChainableRouter['sdk'] & Record<PrettyCamelCase<Name>, LiveSdkFunction<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Auth>>>;
|
914
|
+
_fetchMap: Prettify<ChainableRouter['_fetchMap'] extends Record<SanitizePathSlashes<`${BasePath}${Path}`>, unknown> ? ChainableRouter['_fetchMap'] & Record<SanitizePathSlashes<`${BasePath}${Path}`>, ChainableRouter['_fetchMap'][SanitizePathSlashes<`${BasePath}${Path}`>] & Record<Uppercase<ContractMethod>, LiveTypeFunction<SV, SanitizePathSlashes<`${BasePath}${Path}`>, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, ContractMethod, VersionedApi, Auth>>> : ChainableRouter['_fetchMap'] & Record<SanitizePathSlashes<`${BasePath}${Path}`>, Record<Uppercase<ContractMethod>, LiveTypeFunction<SV, SanitizePathSlashes<`${BasePath}${Path}`>, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, ContractMethod, VersionedApi, Auth>>>>;
|
915
|
+
sdk: Prettify<ChainableRouter['sdk'] & Record<PrettyCamelCase<Name>, LiveSdkFunction<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Auth>>>;
|
830
916
|
};
|
831
|
-
<Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>(path: Path, contractDetails: ContractDetails<SV, Name, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, BaseRequest, Auth>, ...middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction>[]): ChainableRouter & {
|
832
|
-
|
833
|
-
sdk: Prettify<ChainableRouter['sdk'] & Record<PrettyCamelCase<Name>, LiveSdkFunction<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Auth>>>;
|
917
|
+
<Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, VersionedApi extends VersionSchema<SV, ContractMethod>, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>(path: Path, contractDetails: ContractDetails<SV, Name, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, BaseRequest, Auth>, ...middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction>[]): ChainableRouter & {
|
918
|
+
_fetchMap: Prettify<ChainableRouter['_fetchMap'] extends Record<SanitizePathSlashes<`${BasePath}${Path}`>, unknown> ? ChainableRouter['_fetchMap'] & Record<SanitizePathSlashes<`${BasePath}${Path}`>, ChainableRouter['_fetchMap'][SanitizePathSlashes<`${BasePath}${Path}`>] & Record<Uppercase<ContractMethod>, LiveTypeFunction<SV, SanitizePathSlashes<`${BasePath}${Path}`>, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, ContractMethod, VersionedApi, Auth>>> : ChainableRouter['_fetchMap'] & Record<SanitizePathSlashes<`${BasePath}${Path}`>, Record<Uppercase<ContractMethod>, LiveTypeFunction<SV, SanitizePathSlashes<`${BasePath}${Path}`>, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, ContractMethod, VersionedApi, Auth>>>>;
|
919
|
+
sdk: Prettify<ChainableRouter['sdk'] & Record<PrettyCamelCase<Name>, LiveSdkFunction<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Auth>>>;
|
834
920
|
};
|
835
921
|
}
|
836
922
|
interface TypedMiddlewareDefinition<ChainableRouter, SV extends AnySchemaValidator, BaseRequest, BaseResponse, NextFunction, RouterHandler> {
|
837
923
|
(middleware: RouterHandler, ...otherMiddleware: RouterHandler[]): ChainableRouter;
|
838
|
-
<Name extends string, Path extends `/${string}`, SuppliedPath extends Path, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>(path: PathMatch<SuppliedPath, Path>, typedHandler: TypedHandler<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth>): ChainableRouter;
|
839
|
-
<Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>(typedHandler: TypedHandler<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth>): ChainableRouter;
|
840
|
-
<Name extends string, Path extends `/${string}`, SuppliedPath extends Path, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>(path: PathMatch<SuppliedPath, Path>, middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction>, ...middlewareAndTypedHandler: [
|
841
|
-
...ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction>[],
|
842
|
-
TypedHandler<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth>
|
924
|
+
<Name extends string, Path extends `/${string}`, SuppliedPath extends Path, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, VersionedApi extends VersionSchema<SV, 'middleware'>, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>(path: PathMatch<SuppliedPath, Path>, typedHandler: TypedHandler<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth>): ChainableRouter;
|
925
|
+
<Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, VersionedApi extends VersionSchema<SV, 'middleware'>, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>(typedHandler: TypedHandler<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth>): ChainableRouter;
|
926
|
+
<Name extends string, Path extends `/${string}`, SuppliedPath extends Path, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, VersionedApi extends VersionSchema<SV, 'middleware'>, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>(path: PathMatch<SuppliedPath, Path>, middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction>, ...middlewareAndTypedHandler: [
|
927
|
+
...ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction>[],
|
928
|
+
TypedHandler<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth>
|
843
929
|
]): ChainableRouter;
|
844
|
-
<Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>(middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction>, ...middlewareAndTypedHandler: [
|
845
|
-
...ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction>[],
|
846
|
-
TypedHandler<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth>
|
930
|
+
<Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, VersionedApi extends VersionSchema<SV, 'middleware'>, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>(middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction>, ...middlewareAndTypedHandler: [
|
931
|
+
...ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction>[],
|
932
|
+
TypedHandler<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth>
|
847
933
|
]): ChainableRouter;
|
848
|
-
<Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>(path: Path, contractDetails: ContractDetails<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, BaseRequest, Auth>, middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction>, ...middlewares: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction>[]): ChainableRouter;
|
849
|
-
<Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>(contractDetails: ContractDetails<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, BaseRequest, Auth>, middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction>, ...middlewares: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction>[]): ChainableRouter;
|
934
|
+
<Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, VersionedApi extends VersionSchema<SV, 'middleware'>, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>(path: Path, contractDetails: ContractDetails<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, BaseRequest, Auth>, middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction>, ...middlewares: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction>[]): ChainableRouter;
|
935
|
+
<Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, VersionedApi extends VersionSchema<SV, 'middleware'>, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>(contractDetails: ContractDetails<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, BaseRequest, Auth>, middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction>, ...middlewares: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction>[]): ChainableRouter;
|
850
936
|
}
|
851
937
|
interface TypedNestableMiddlewareDefinition<ChainableRouter extends {
|
852
|
-
|
938
|
+
_fetchMap: object;
|
853
939
|
basePath: `/${string}`;
|
854
940
|
sdk: Record<string, unknown>;
|
855
941
|
}, RouterHandler, Internal extends ExpressLikeRouter<RouterHandler, Internal>, SV extends AnySchemaValidator, BaseRequest, BaseResponse, NextFunction> extends TypedMiddlewareDefinition<ChainableRouter, SV, BaseRequest, BaseResponse, NextFunction, RouterHandler> {
|
856
942
|
(middleware: RouterHandler, ...otherMiddleware: RouterHandler[]): ChainableRouter;
|
857
943
|
<Router extends ConstrainedForklaunchRouter<SV, RouterHandler>>(router: Router): ChainableRouter & {
|
858
|
-
|
859
|
-
[Key in keyof Router['
|
944
|
+
_fetchMap: Prettify<ChainableRouter['_fetchMap'] & {
|
945
|
+
[Key in keyof Router['_fetchMap'] as Key extends string ? SanitizePathSlashes<`${ChainableRouter['basePath']}${Key}`> : never]: Router['_fetchMap'][Key];
|
860
946
|
}>;
|
861
947
|
sdk: Prettify<ChainableRouter['sdk'] & {
|
862
948
|
[K in PrettyCamelCase<Router['sdkName'] extends string ? Router['sdkName'] : Router['basePath']>]: Prettify<Router['sdk']>;
|
863
949
|
}>;
|
864
950
|
};
|
865
951
|
<Router extends ConstrainedForklaunchRouter<SV, RouterHandler>>(middlewareOrRouter: RouterHandler | Router, ...otherMiddlewareOrRouters: [...(RouterHandler | Router)[]]): ChainableRouter & {
|
866
|
-
|
867
|
-
[Key in keyof Router['
|
952
|
+
_fetchMap: Prettify<ChainableRouter['_fetchMap'] & {
|
953
|
+
[Key in keyof Router['_fetchMap'] as Key extends string ? SanitizePathSlashes<`${ChainableRouter['basePath']}${Key}`> : never]: Router['_fetchMap'][Key];
|
868
954
|
}>;
|
869
955
|
sdk: Prettify<ChainableRouter['sdk'] & {
|
870
956
|
[K in PrettyCamelCase<Router['sdkName'] extends string ? Router['sdkName'] : Router['basePath']>]: Prettify<Router['sdk']>;
|
871
957
|
}>;
|
872
958
|
};
|
873
959
|
<Router extends ConstrainedForklaunchRouter<SV, RouterHandler>>(path: Router['basePath'], router: Router): ChainableRouter & {
|
874
|
-
|
875
|
-
[Key in keyof Router['
|
960
|
+
_fetchMap: Prettify<ChainableRouter['_fetchMap'] & {
|
961
|
+
[Key in keyof Router['_fetchMap'] as Key extends string ? SanitizePathSlashes<`${ChainableRouter['basePath']}${Key}`> : never]: Router['_fetchMap'][Key];
|
876
962
|
}>;
|
877
963
|
sdk: Prettify<ChainableRouter['sdk'] & {
|
878
964
|
[K in PrettyCamelCase<Router['sdkName'] extends string ? Router['sdkName'] : Router['basePath']>]: Prettify<Router['sdk']>;
|
879
965
|
}>;
|
880
966
|
};
|
881
|
-
<Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, Router extends ConstrainedForklaunchRouter<SV, RouterHandler>, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>(path: `/${string}` extends Router['basePath'] ? Path : PathMatch<Path, Router['basePath']>, middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction> | Router, ...middlewareAndTypedHandler: [
|
882
|
-
...(ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction> | Router)[],
|
883
|
-
TypedHandler<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth>
|
967
|
+
<Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, VersionedApi extends VersionSchema<SV, 'middleware'>, Router extends ConstrainedForklaunchRouter<SV, RouterHandler>, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>(path: `/${string}` extends Router['basePath'] ? Path : PathMatch<Path, Router['basePath']>, middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction> | Router, ...middlewareAndTypedHandler: [
|
968
|
+
...(ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction> | Router)[],
|
969
|
+
TypedHandler<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth>
|
884
970
|
]): ChainableRouter & {
|
885
|
-
|
886
|
-
[Key in keyof Router['
|
971
|
+
_fetchMap: Prettify<ChainableRouter['_fetchMap'] & {
|
972
|
+
[Key in keyof Router['_fetchMap'] as Key extends string ? SanitizePathSlashes<`${ChainableRouter['basePath']}${Key}`> : never]: Router['_fetchMap'][Key];
|
887
973
|
}>;
|
888
974
|
sdk: Prettify<ChainableRouter['sdk'] & {
|
889
975
|
[K in PrettyCamelCase<Router['sdkName'] extends string ? Router['sdkName'] : Router['basePath']>]: Prettify<Router['sdk']>;
|
890
976
|
}>;
|
891
977
|
};
|
892
|
-
<Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, Router extends ConstrainedForklaunchRouter<SV, RouterHandler>, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>(middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction> | Router, ...middlewareAndTypedHandler: [
|
893
|
-
...(ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction> | Router)[],
|
894
|
-
TypedHandler<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth>
|
978
|
+
<Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, VersionedApi extends VersionSchema<SV, 'middleware'>, Router extends ConstrainedForklaunchRouter<SV, RouterHandler>, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>(middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction> | Router, ...middlewareAndTypedHandler: [
|
979
|
+
...(ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction> | Router)[],
|
980
|
+
TypedHandler<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth>
|
895
981
|
]): ChainableRouter & {
|
896
|
-
|
897
|
-
[Key in keyof Router['
|
982
|
+
_fetchMap: Prettify<ChainableRouter['_fetchMap'] & {
|
983
|
+
[Key in keyof Router['_fetchMap'] as Key extends string ? SanitizePathSlashes<`${ChainableRouter['basePath']}${Key}`> : never]: Router['_fetchMap'][Key];
|
898
984
|
}>;
|
899
985
|
sdk: Prettify<ChainableRouter['sdk'] & {
|
900
986
|
[K in PrettyCamelCase<Router['sdkName'] extends string ? Router['sdkName'] : Router['basePath']>]: Prettify<Router['sdk']>;
|
901
987
|
}>;
|
902
988
|
};
|
903
|
-
<Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, Router extends ConstrainedForklaunchRouter<SV, RouterHandler>, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>(path: `/${string}` extends Router['basePath'] ? Path : PathMatch<Path, Router['basePath']>, contractDetails: ContractDetails<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, BaseRequest, Auth>, middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction> | Router, ...middlewares: (ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction> | Router)[]): ChainableRouter & {
|
904
|
-
|
905
|
-
[Key in keyof Router['
|
989
|
+
<Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, Router extends ConstrainedForklaunchRouter<SV, RouterHandler>, VersionedApi extends VersionSchema<SV, 'middleware'>, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>(path: `/${string}` extends Router['basePath'] ? Path : PathMatch<Path, Router['basePath']>, contractDetails: ContractDetails<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, BaseRequest, Auth>, middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction> | Router, ...middlewares: (ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction> | Router)[]): ChainableRouter & {
|
990
|
+
_fetchMap: Prettify<ChainableRouter['_fetchMap'] & {
|
991
|
+
[Key in keyof Router['_fetchMap'] as Key extends string ? SanitizePathSlashes<`${ChainableRouter['basePath']}${Key}`> : never]: Router['_fetchMap'][Key];
|
906
992
|
}>;
|
907
993
|
sdk: Prettify<ChainableRouter['sdk'] & {
|
908
994
|
[K in PrettyCamelCase<Router['sdkName'] extends string ? Router['sdkName'] : Router['basePath']>]: Prettify<Router['sdk']>;
|
909
995
|
}>;
|
910
996
|
};
|
911
|
-
<Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, Router extends ConstrainedForklaunchRouter<SV, RouterHandler>, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>(contractDetails: ContractDetails<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, BaseRequest, Auth>, middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction> | Router, ...middlewares: (ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction> | Router)[]): ChainableRouter & {
|
912
|
-
|
913
|
-
[Key in keyof Router['
|
997
|
+
<Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, Router extends ConstrainedForklaunchRouter<SV, RouterHandler>, VersionedApi extends VersionSchema<SV, 'middleware'>, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>(contractDetails: ContractDetails<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, BaseRequest, Auth>, middleware: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction> | Router, ...middlewares: (ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction> | Router)[]): ChainableRouter & {
|
998
|
+
_fetchMap: Prettify<ChainableRouter['_fetchMap'] & {
|
999
|
+
[Key in keyof Router['_fetchMap'] as Key extends string ? SanitizePathSlashes<`${ChainableRouter['basePath']}${Key}`> : never]: Router['_fetchMap'][Key];
|
914
1000
|
}>;
|
915
1001
|
sdk: Prettify<ChainableRouter['sdk'] & {
|
916
1002
|
[K in PrettyCamelCase<Router['sdkName'] extends string ? Router['sdkName'] : Router['basePath']>]: Prettify<Router['sdk']>;
|
917
1003
|
}>;
|
918
1004
|
};
|
919
1005
|
}
|
920
|
-
type ContractDetailsOrMiddlewareOrTypedHandler<SV extends AnySchemaValidator, Name extends string, ContractMethod extends Method, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, BaseRequest, BaseResponse, NextFunction, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>> = ContractDetails<SV, Name, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, BaseRequest, Auth> | ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction> | TypedHandler<SV, Name, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth>;
|
921
|
-
type MiddlewareOrMiddlewareWithTypedHandler<SV extends AnySchemaValidator, Name extends string, ContractMethod extends Method, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, BaseRequest, BaseResponse, NextFunction, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>> = ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction> | TypedHandler<SV, Name, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth>;
|
1006
|
+
type ContractDetailsOrMiddlewareOrTypedHandler<SV extends AnySchemaValidator, Name extends string, ContractMethod extends Method, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, VersionedApi extends VersionSchema<SV, ContractMethod>, BaseRequest, BaseResponse, NextFunction, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>> = ContractDetails<SV, Name, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, BaseRequest, Auth> | ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction> | TypedHandler<SV, Name, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth>;
|
1007
|
+
type MiddlewareOrMiddlewareWithTypedHandler<SV extends AnySchemaValidator, Name extends string, ContractMethod extends Method, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, VersionedApi extends VersionSchema<SV, ContractMethod>, BaseRequest, BaseResponse, NextFunction, Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>> = ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction> | TypedHandler<SV, Name, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth>;
|
922
1008
|
|
923
1009
|
/**
|
924
1010
|
* Creates a type-safe fetch function based on a provided fetch map.
|
@@ -982,7 +1068,7 @@ type MiddlewareOrMiddlewareWithTypedHandler<SV extends AnySchemaValidator, Name
|
|
982
1068
|
* });
|
983
1069
|
* ```
|
984
1070
|
**/
|
985
|
-
type FetchFunction<FetchMap> = <const Path extends keyof FetchMap, const Method extends keyof FetchMap[Path]>(path: Path, ...reqInit: FetchMap[Path][Method] extends TypeSafeFunction ? '
|
1071
|
+
type FetchFunction<FetchMap> = <const Path extends keyof FetchMap, const Method extends keyof FetchMap[Path], const Version extends keyof FetchMap[Path][Method]>(path: Path, ...reqInit: FetchMap[Path][Method] extends TypeSafeFunction ? 'GET' extends keyof FetchMap[Path] ? FetchMap[Path]['GET'] extends TypeSafeFunction ? Parameters<FetchMap[Path]['GET']>[1] extends {
|
986
1072
|
body: unknown;
|
987
1073
|
} | {
|
988
1074
|
query: unknown;
|
@@ -990,6 +1076,8 @@ type FetchFunction<FetchMap> = <const Path extends keyof FetchMap, const Method
|
|
990
1076
|
params: unknown;
|
991
1077
|
} | {
|
992
1078
|
headers: unknown;
|
1079
|
+
} | {
|
1080
|
+
version: unknown;
|
993
1081
|
} ? [
|
994
1082
|
reqInit: Omit<Parameters<FetchMap[Path][Method]>[1], 'method'> & {
|
995
1083
|
method: Method;
|
@@ -1006,210 +1094,270 @@ type FetchFunction<FetchMap> = <const Path extends keyof FetchMap, const Method
|
|
1006
1094
|
reqInit: Omit<Parameters<FetchMap[Path][Method]>[1], 'method'> & {
|
1007
1095
|
method: Method;
|
1008
1096
|
}
|
1009
|
-
] :
|
1097
|
+
] : FetchMap[Path][Method] extends Record<string, TypeSafeFunction> ? [
|
1098
|
+
reqInit: Omit<Parameters<FetchMap[Path][Method][Version]>[0], 'method' | 'version'> & {
|
1099
|
+
method: Method;
|
1100
|
+
version: Version;
|
1101
|
+
}
|
1102
|
+
] : [{
|
1103
|
+
method: Method;
|
1104
|
+
}]) => Promise<FetchMap[Path][Method] extends TypeSafeFunction ? Awaited<ReturnType<FetchMap[Path][Method]>> : FetchMap[Path][Method] extends Record<string, TypeSafeFunction> ? Awaited<ReturnType<FetchMap[Path][Method][Version]>> : never>;
|
1010
1105
|
/**
|
1011
|
-
*
|
1012
|
-
* This type merges the router's SDK interface with its fetch methods to create
|
1013
|
-
* a complete router client.
|
1106
|
+
* Represents the structure of a SDK router.
|
1014
1107
|
*
|
1015
|
-
* @
|
1016
|
-
* @
|
1017
|
-
* @
|
1108
|
+
* @property sdk - The SDK object containing all the SDK functions.
|
1109
|
+
* @property _fetchMap - The fetch map object containing all the fetch functions.
|
1110
|
+
* @property sdkPaths - The SDK paths object containing all the SDK paths.
|
1111
|
+
*/
|
1112
|
+
type SdkRouter = {
|
1113
|
+
sdk: Record<string, unknown>;
|
1114
|
+
_fetchMap: Record<string, unknown>;
|
1115
|
+
sdkPaths: Record<string, string>;
|
1116
|
+
};
|
1117
|
+
/**
|
1118
|
+
* Recursive interface representing a hierarchical map of router configurations.
|
1119
|
+
* Each entry can either be a leaf node with SDK and fetch map configurations,
|
1120
|
+
* or a nested RouterMap for deeper routing structures.
|
1018
1121
|
*
|
1019
|
-
* @
|
1122
|
+
* @template SV - The schema validator type that constrains the router structure
|
1123
|
+
* @param SV - Must extend AnySchemaValidator to ensure type safety
|
1020
1124
|
*
|
1021
1125
|
* @example
|
1022
1126
|
* ```typescript
|
1023
|
-
*
|
1024
|
-
*
|
1025
|
-
*
|
1127
|
+
* const routerMap: RouterMap<ZodValidator> = {
|
1128
|
+
* api: {
|
1129
|
+
* users: {
|
1130
|
+
* sdk: { getUser: () => Promise.resolve({}) },
|
1131
|
+
* _fetchMap: { getUser: { get: () => fetch('/api/users') } }
|
1132
|
+
* },
|
1133
|
+
* posts: {
|
1134
|
+
* sdk: { getPosts: () => Promise.resolve([]) },
|
1135
|
+
* _fetchMap: { getPosts: { get: () => fetch('/api/posts') } }
|
1136
|
+
* }
|
1137
|
+
* }
|
1026
1138
|
* };
|
1027
|
-
*
|
1028
|
-
* type UserRouter = SdkRouter<UserRoute>;
|
1029
|
-
* // Result: {
|
1030
|
-
* // getUser: () => Promise<User>;
|
1031
|
-
* // createUser: (data: UserData) => Promise<User>;
|
1032
|
-
* // fetch: { get: (path: string) => Promise<Response> };
|
1033
|
-
* // }
|
1034
1139
|
* ```
|
1035
1140
|
*/
|
1036
|
-
type
|
1037
|
-
|
1038
|
-
|
1039
|
-
}> = Prettify<TRoute['sdk'] & {
|
1040
|
-
fetch: TRoute['fetch'];
|
1041
|
-
}>;
|
1141
|
+
type RouterMap<SV extends AnySchemaValidator> = {
|
1142
|
+
[K: string]: SdkRouter | RouterMap<SV>;
|
1143
|
+
};
|
1042
1144
|
/**
|
1043
|
-
*
|
1044
|
-
*
|
1045
|
-
*
|
1145
|
+
* Tail-recursive type that extracts SDK interfaces from a RouterMap structure.
|
1146
|
+
* This version uses an accumulator pattern to avoid deep recursion and improve performance.
|
1147
|
+
* Traverses the nested router map and collects all SDK interfaces into a flat structure.
|
1046
1148
|
*
|
1047
|
-
* @template
|
1048
|
-
*
|
1049
|
-
* @
|
1050
|
-
* @param
|
1051
|
-
* @param
|
1052
|
-
* @param
|
1149
|
+
* @template SV - The schema validator type
|
1150
|
+
* @template T - The RouterMap to extract SDKs from
|
1151
|
+
* @template Acc - The accumulator type for collecting SDK interfaces (defaults to empty object)
|
1152
|
+
* @param SV - Must extend AnySchemaValidator
|
1153
|
+
* @param T - Must extend RouterMap<SV>
|
1154
|
+
* @param Acc - The accumulated SDK interfaces so far
|
1053
1155
|
*
|
1054
|
-
* @returns A
|
1156
|
+
* @returns A mapped type where each key corresponds to the original router structure,
|
1157
|
+
* but values are the extracted SDK interfaces instead of the full router configuration
|
1055
1158
|
*
|
1056
1159
|
* @example
|
1057
1160
|
* ```typescript
|
1058
|
-
*
|
1059
|
-
*
|
1060
|
-
*
|
1061
|
-
* fetch: { get: (path: string) => Promise<Response> };
|
1062
|
-
* basePath: '/api/users';
|
1063
|
-
* };
|
1064
|
-
* posts: {
|
1065
|
-
* sdk: { getPost: () => Promise<Post> };
|
1066
|
-
* fetch: { get: (path: string) => Promise<Response> };
|
1067
|
-
* basePath: '/api/posts';
|
1068
|
-
* sdkName: 'articles';
|
1069
|
-
* };
|
1070
|
-
* };
|
1071
|
-
*
|
1072
|
-
* type Client = SdkClient<Routes>;
|
1073
|
-
* // Result: {
|
1074
|
-
* // users: { getUser: () => Promise<User>; fetch: {...} };
|
1075
|
-
* // posts: { getPost: () => Promise<Post>; fetch: {...} };
|
1076
|
-
* // }
|
1161
|
+
* // Given a RouterMap with nested structure
|
1162
|
+
* type ExtractedSdk = MapToSdk<ZodValidator, typeof routerMap>;
|
1163
|
+
* // Results in: { api: { users: { getUser: () => Promise<{}> }, posts: { getPosts: () => Promise<[]> } } }
|
1077
1164
|
* ```
|
1078
1165
|
*/
|
1079
|
-
type
|
1080
|
-
|
1081
|
-
|
1082
|
-
|
1083
|
-
|
1084
|
-
}>> = Prettify<{
|
1085
|
-
[K in keyof Input]: Prettify<SdkRouter<Input[K]>>;
|
1086
|
-
}>;
|
1166
|
+
type MapToSdk<SV extends AnySchemaValidator, T extends RouterMap<SV>, Acc extends Record<string, unknown> = Record<string, never>> = {
|
1167
|
+
[K in keyof T]: T[K] extends {
|
1168
|
+
sdk: infer S;
|
1169
|
+
} ? S : T[K] extends RouterMap<SV> ? MapToSdk<SV, T[K], Acc> : never;
|
1170
|
+
};
|
1087
1171
|
/**
|
1088
|
-
*
|
1089
|
-
*
|
1090
|
-
*
|
1172
|
+
* Tail-recursive type that extracts and flattens fetch map interfaces from a RouterMap structure.
|
1173
|
+
* This version uses an accumulator pattern to avoid deep recursion and improve performance.
|
1174
|
+
* Similar to MapToSdk but focuses on _fetchMap properties and merges all fetch maps into a single intersection type.
|
1091
1175
|
*
|
1092
|
-
* @template
|
1093
|
-
* @
|
1094
|
-
* @
|
1095
|
-
* @param
|
1096
|
-
* @param
|
1176
|
+
* @template SV - The schema validator type
|
1177
|
+
* @template T - The RouterMap to extract fetch maps from
|
1178
|
+
* @template Acc - The accumulator type for collecting fetch maps (defaults to empty object)
|
1179
|
+
* @param SV - Must extend AnySchemaValidator
|
1180
|
+
* @param T - Must extend RouterMap<SV>
|
1181
|
+
* @param Acc - The accumulated fetch maps so far
|
1097
1182
|
*
|
1098
|
-
* @returns
|
1183
|
+
* @returns An intersection type containing all fetch map interfaces from the router structure,
|
1184
|
+
* flattened into a single type for unified fetch functionality
|
1099
1185
|
*
|
1100
1186
|
* @example
|
1101
1187
|
* ```typescript
|
1102
|
-
* //
|
1103
|
-
* type
|
1104
|
-
*
|
1105
|
-
*
|
1106
|
-
|
1107
|
-
|
1108
|
-
|
1109
|
-
|
1110
|
-
|
1111
|
-
|
1112
|
-
|
1113
|
-
*
|
1114
|
-
*
|
1115
|
-
*
|
1116
|
-
*
|
1117
|
-
*
|
1118
|
-
*
|
1119
|
-
*
|
1120
|
-
*
|
1121
|
-
*
|
1122
|
-
*
|
1123
|
-
*
|
1124
|
-
*
|
1125
|
-
*
|
1126
|
-
*
|
1127
|
-
*
|
1128
|
-
*
|
1129
|
-
*
|
1188
|
+
* // Given a RouterMap with nested fetch maps
|
1189
|
+
* type ExtractedFetch = MapToFetch<ZodValidator, typeof routerMap>;
|
1190
|
+
* // Results in: { getUser: { get: () => Promise<Response> } } & { getPosts: { get: () => Promise<Response> } }
|
1191
|
+
* ```
|
1192
|
+
*/
|
1193
|
+
type MapToFetch<SV extends AnySchemaValidator, T extends RouterMap<SV>> = UnionToIntersection<Prettify<{
|
1194
|
+
[K in keyof T]: T[K] extends RouterMap<SV> ? MapToFetch<SV, T[K]> : T[K] extends {
|
1195
|
+
_fetchMap: infer F;
|
1196
|
+
} ? F extends Record<string, unknown> ? F : never : never;
|
1197
|
+
}[keyof T]>>;
|
1198
|
+
/**
|
1199
|
+
* Base interface for controller entries that defines the structure
|
1200
|
+
* of each controller method with its path, HTTP method, and contract details.
|
1201
|
+
* This type serves as the foundation for type-safe SDK generation by ensuring
|
1202
|
+
* all controller entries follow a consistent structure.
|
1203
|
+
*
|
1204
|
+
* @template SV - The schema validator type that constrains the contract details
|
1205
|
+
*
|
1206
|
+
* @example
|
1207
|
+
* ```typescript
|
1208
|
+
* const controller: Record<string, SdkHandler> = {
|
1209
|
+
* createUser: {
|
1210
|
+
* _path: '/users',
|
1211
|
+
* _method: 'post',
|
1212
|
+
* contractDetails: {
|
1213
|
+
* name: 'createUser',
|
1214
|
+
* body: { name: string, email: string },
|
1215
|
+
* responses: { 201: { id: string, name: string } }
|
1216
|
+
* }
|
1217
|
+
* },
|
1218
|
+
* getUser: {
|
1219
|
+
* _path: '/users/:id',
|
1220
|
+
* _method: 'get',
|
1221
|
+
* contractDetails: {
|
1222
|
+
* name: 'getUser',
|
1223
|
+
* params: { id: string },
|
1224
|
+
* responses: { 200: { id: string, name: string } }
|
1225
|
+
* }
|
1226
|
+
* }
|
1130
1227
|
* };
|
1131
|
-
* type Result3 = UnpackSdkClientInput<InvalidInput>; // Returns 'Invalid SDK Client Input'
|
1132
1228
|
* ```
|
1133
1229
|
*/
|
1134
|
-
type
|
1135
|
-
|
1136
|
-
|
1137
|
-
|
1138
|
-
|
1139
|
-
|
1140
|
-
|
1141
|
-
|
1230
|
+
type SdkHandler = {
|
1231
|
+
/** The HTTP path for this endpoint, must start with '/' */
|
1232
|
+
_path?: `/${string}`;
|
1233
|
+
/** The HTTP method for this endpoint (get, post, put, etc.) */
|
1234
|
+
_method?: Method;
|
1235
|
+
/** Contract details defining the request/response schema for this endpoint */
|
1236
|
+
contractDetails: {
|
1237
|
+
/** The name of this endpoint/method */
|
1238
|
+
name: string;
|
1239
|
+
/** URL parameters schema */
|
1240
|
+
params?: unknown;
|
1241
|
+
/** Response schemas for different status codes */
|
1242
|
+
responses?: unknown;
|
1243
|
+
/** Query parameters schema */
|
1244
|
+
query?: unknown;
|
1245
|
+
/** Request body schema */
|
1246
|
+
body?: unknown;
|
1247
|
+
/** Request headers schema */
|
1248
|
+
requestHeaders?: unknown;
|
1249
|
+
/** Response headers schema */
|
1250
|
+
responseHeaders?: unknown;
|
1251
|
+
/** Authentication requirements */
|
1252
|
+
auth?: unknown;
|
1253
|
+
/** API versioning information */
|
1254
|
+
versions?: unknown;
|
1255
|
+
};
|
1256
|
+
};
|
1257
|
+
type MapControllerToSdk<SV extends AnySchemaValidator, T extends Record<string, SdkHandler>> = {
|
1258
|
+
[K in keyof T]: LiveSdkFunction<SV, T[K]['contractDetails']['params'] extends infer Params | undefined ? Params extends ParamsObject<SV> ? Params : ParamsObject<SV> : ParamsObject<SV>, T[K]['contractDetails']['responses'] extends infer Responses | undefined ? Responses extends ResponsesObject<SV> ? Responses : ResponsesObject<SV> : ResponsesObject<SV>, T[K]['contractDetails']['body'] extends infer B | undefined ? B extends Body<SV> ? B : Body<SV> : Body<SV>, T[K]['contractDetails']['query'] extends infer Q | undefined ? Q extends QueryObject<SV> ? Q : QueryObject<SV> : QueryObject<SV>, T[K]['contractDetails']['requestHeaders'] extends infer RequestHeaders | undefined ? RequestHeaders extends HeadersObject<SV> ? RequestHeaders : HeadersObject<SV> : HeadersObject<SV>, T[K]['contractDetails']['responseHeaders'] extends infer ResponseHeaders | undefined ? ResponseHeaders extends HeadersObject<SV> ? ResponseHeaders : HeadersObject<SV> : HeadersObject<SV>, T[K]['contractDetails']['versions'] extends infer Versions | undefined ? Versions extends VersionSchema<SV, Method> ? Versions : VersionSchema<SV, Method> : VersionSchema<SV, Method>, T[K]['contractDetails']['auth'] extends infer Auth | undefined ? Auth extends AuthMethodsBase ? Auth : AuthMethodsBase : AuthMethodsBase>;
|
1259
|
+
};
|
1142
1260
|
/**
|
1143
|
-
*
|
1144
|
-
* This type
|
1145
|
-
*
|
1146
|
-
* plus an optional sdkName property.
|
1261
|
+
* Extracts and constructs a LiveTypeFunction from an SdkHandler object.
|
1262
|
+
* This type utility takes a controller entry and transforms it into a type-safe
|
1263
|
+
* function that can be used for making HTTP requests with full type safety.
|
1147
1264
|
*
|
1148
|
-
* @template
|
1149
|
-
* @
|
1150
|
-
* @
|
1151
|
-
* @param Input[K].sdkName - Optional custom name for the SDK (if not provided, uses camelCase basePath)
|
1152
|
-
* @param Input[K].basePath - Required base URL path for the route
|
1265
|
+
* @template Entry - The controller entry containing path, method, and contract details
|
1266
|
+
* @template SV - The schema validator type that constrains the contract details
|
1267
|
+
* @template BasePath - The base path prefix to prepend to the entry's path
|
1153
1268
|
*
|
1154
|
-
* @returns
|
1269
|
+
* @returns A LiveTypeFunction with properly typed parameters and return values
|
1270
|
+
* based on the entry's contract details
|
1155
1271
|
*
|
1156
1272
|
* @example
|
1157
1273
|
* ```typescript
|
1158
|
-
*
|
1159
|
-
*
|
1160
|
-
*
|
1161
|
-
*
|
1274
|
+
* type UserCreateFunction = ExtractLiveTypeFn<
|
1275
|
+
* { _path: '/users', _method: 'post', contractDetails: { body: { name: string } } },
|
1276
|
+
* SchemaValidator,
|
1277
|
+
* '/api/v1'
|
1278
|
+
* >;
|
1279
|
+
* // Results in: (path: '/api/v1/users', options: { body: { name: string } }) => Promise<...>
|
1280
|
+
* ```
|
1281
|
+
*/
|
1282
|
+
type ExtractLiveTypeFn<Entry extends SdkHandler, SV extends AnySchemaValidator, BasePath extends `/${string}`> = LiveTypeFunction<SV, Entry['_path'] extends infer Path | undefined ? Path extends `/${string}` ? `${BasePath}${Path}` : never : never, Entry['contractDetails']['params'] extends infer Params | undefined ? Params extends ParamsObject<SV> ? Params : ParamsObject<SV> : ParamsObject<SV>, Entry['contractDetails']['responses'] extends infer Responses | undefined ? Responses extends ResponsesObject<SV> ? Responses : ResponsesObject<SV> : ResponsesObject<SV>, Entry['contractDetails']['body'] extends infer B | undefined ? B extends Body<SV> ? B : Body<SV> : Body<SV>, Entry['contractDetails']['query'] extends infer Q | undefined ? Q extends QueryObject<SV> ? Q : QueryObject<SV> : QueryObject<SV>, Entry['contractDetails']['requestHeaders'] extends infer RequestHeaders | undefined ? RequestHeaders extends HeadersObject<SV> ? RequestHeaders : HeadersObject<SV> : HeadersObject<SV>, Entry['contractDetails']['responseHeaders'] extends infer ResponseHeaders | undefined ? ResponseHeaders extends HeadersObject<SV> ? ResponseHeaders : HeadersObject<SV> : HeadersObject<SV>, Entry['_method'] extends Method ? Entry['_method'] : never, Entry['contractDetails']['versions'] extends infer Versions | undefined ? Versions extends VersionSchema<SV, Method> ? Versions : VersionSchema<SV, Method> : VersionSchema<SV, Method>, Entry['contractDetails']['auth'] extends infer Auth | undefined ? Auth extends AuthMethodsBase ? Auth : AuthMethodsBase : AuthMethodsBase>;
|
1283
|
+
/**
|
1284
|
+
* Transforms a controller object into a fetch map structure that provides
|
1285
|
+
* type-safe access to HTTP endpoints. This type creates a discriminated union
|
1286
|
+
* where each path maps to its specific HTTP methods, ensuring that different
|
1287
|
+
* methods for the same path are properly discriminated rather than unioned.
|
1162
1288
|
*
|
1163
|
-
*
|
1164
|
-
*
|
1165
|
-
*
|
1166
|
-
*
|
1167
|
-
*
|
1168
|
-
*
|
1169
|
-
*
|
1170
|
-
*
|
1289
|
+
* @template T - The controller object type containing all endpoint definitions
|
1290
|
+
* @template SV - The schema validator type that constrains the contract details
|
1291
|
+
* @template RouterBasePath - The base path prefix for the router
|
1292
|
+
*
|
1293
|
+
* @returns A fetch map structure where:
|
1294
|
+
* - Keys are full paths (basePath + entry path)
|
1295
|
+
* - Values are records mapping HTTP methods to their corresponding LiveTypeFunctions
|
1296
|
+
* - Each method is properly discriminated with its own contract details
|
1297
|
+
*
|
1298
|
+
* @example
|
1299
|
+
* ```typescript
|
1300
|
+
* const controller = {
|
1301
|
+
* createUser: { _path: '/users', _method: 'post', contractDetails: { body: { name: string } } },
|
1302
|
+
* getUser: { _path: '/users/:id', _method: 'get', contractDetails: { params: { id: string } } },
|
1303
|
+
* updateUser: { _path: '/users/:id', _method: 'put', contractDetails: { body: { name: string } } }
|
1304
|
+
* } as const;
|
1305
|
+
*
|
1306
|
+
* type FetchMap = ToFetchMap<typeof controller, SchemaValidator, '/api/v1'>;
|
1307
|
+
* // Results in:
|
1308
|
+
* // {
|
1309
|
+
* // '/api/v1/users': {
|
1310
|
+
* // POST: LiveTypeFunction<...>, // from createUser
|
1311
|
+
* // },
|
1312
|
+
* // '/api/v1/users/:id': {
|
1313
|
+
* // GET: LiveTypeFunction<...>, // from getUser
|
1314
|
+
* // PUT: LiveTypeFunction<...> // from updateUser
|
1315
|
+
* // }
|
1316
|
+
* // }
|
1171
1317
|
* ```
|
1172
1318
|
*/
|
1173
|
-
type
|
1174
|
-
|
1175
|
-
|
1176
|
-
|
1177
|
-
|
1178
|
-
}
|
1319
|
+
type ToFetchMap<T extends Record<string, SdkHandler>, SV extends AnySchemaValidator, RouterBasePath extends `/${string}`> = {
|
1320
|
+
[K in keyof T as T[K]['_path'] extends infer P | undefined ? P extends `/${string}` ? `${RouterBasePath}${P}` : never : never]: {
|
1321
|
+
[M in T[K]['_method'] as M extends Method ? Uppercase<M> : never]: ExtractLiveTypeFn<Extract<T[K], {
|
1322
|
+
_path: T[K]['_path'];
|
1323
|
+
_method: M;
|
1324
|
+
}>, SV, RouterBasePath>;
|
1325
|
+
};
|
1326
|
+
};
|
1179
1327
|
|
1180
1328
|
/**
|
1181
1329
|
* A class that represents an Express-like router.
|
1182
1330
|
*/
|
1183
|
-
declare class ForklaunchExpressLikeRouter<SV extends AnySchemaValidator, BasePath extends `/${string}`, RouterHandler, Internal extends ExpressLikeRouter<RouterHandler, Internal>, BaseRequest, BaseResponse, NextFunction, FetchMap extends Record<string, unknown> = EmptyObject, Sdk extends Record<string, unknown> = EmptyObject
|
1331
|
+
declare class ForklaunchExpressLikeRouter<SV extends AnySchemaValidator, BasePath extends `/${string}`, RouterHandler, Internal extends ExpressLikeRouter<RouterHandler, Internal>, BaseRequest, BaseResponse, NextFunction, FetchMap extends Record<string, unknown> = EmptyObject, Sdk extends Record<string, unknown> = EmptyObject> implements ConstrainedForklaunchRouter<SV, RouterHandler> {
|
1184
1332
|
#private;
|
1185
1333
|
readonly basePath: BasePath;
|
1186
1334
|
readonly schemaValidator: SV;
|
1187
1335
|
readonly internal: Internal;
|
1188
1336
|
readonly postEnrichMiddleware: RouterHandler[];
|
1189
1337
|
readonly openTelemetryCollector: OpenTelemetryCollector<MetricsDefinition>;
|
1190
|
-
readonly sdkName?: SdkName | undefined;
|
1191
1338
|
requestHandler: RouterHandler;
|
1192
1339
|
routers: ForklaunchRouter<SV>[];
|
1193
1340
|
routes: ForklaunchRoute<SV>[];
|
1194
|
-
|
1341
|
+
_fetchMap: FetchMap;
|
1195
1342
|
sdk: Sdk;
|
1196
|
-
|
1343
|
+
sdkPaths: Record<string, string>;
|
1344
|
+
constructor(basePath: BasePath, schemaValidator: SV, internal: Internal, postEnrichMiddleware: RouterHandler[], openTelemetryCollector: OpenTelemetryCollector<MetricsDefinition>);
|
1197
1345
|
/**
|
1198
1346
|
* Fetches a route from the route map and executes it with the given parameters.
|
1199
1347
|
*
|
1200
|
-
* @template Path - The path type that extends keyof
|
1348
|
+
* @template Path - The path type that extends keyof _fetchMap and string.
|
1201
1349
|
* @param {Path} path - The route path
|
1202
|
-
* @param {Parameters<
|
1203
|
-
* @returns {Promise<ReturnType<
|
1350
|
+
* @param {Parameters<_fetchMap[Path]>[1]} [requestInit] - Optional request initialization parameters.
|
1351
|
+
* @returns {Promise<ReturnType<_fetchMap[Path]>>} - The result of executing the route handler.
|
1204
1352
|
*/
|
1205
|
-
fetch: FetchFunction<this['
|
1206
|
-
registerRoute<Name extends string, ContractMethod extends Method, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>(method: ContractMethod, path: Path, registrationMethod: PathBasedHandler<RouterHandler>, contractDetailsOrMiddlewareOrTypedHandler: ContractDetailsOrMiddlewareOrTypedHandler<SV, Name, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth>, ...middlewareOrMiddlewareAndTypedHandler: MiddlewareOrMiddlewareWithTypedHandler<SV, Name, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth>[]): this & {
|
1207
|
-
|
1208
|
-
sdk: Prettify<Sdk & Record<PrettyCamelCase<Name extends string ? Name : SanitizePathSlashes<`${BasePath}${Path}`>>, LiveSdkFunction<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, Auth>>>;
|
1353
|
+
fetch: FetchFunction<this['_fetchMap']>;
|
1354
|
+
registerRoute<Name extends string, ContractMethod extends Method, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const VersionedApi extends VersionSchema<SV, ContractMethod>, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>(method: ContractMethod, path: Path, registrationMethod: PathBasedHandler<RouterHandler>, contractDetailsOrMiddlewareOrTypedHandler: ContractDetailsOrMiddlewareOrTypedHandler<SV, Name, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth>, ...middlewareOrMiddlewareAndTypedHandler: MiddlewareOrMiddlewareWithTypedHandler<SV, Name, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth>[]): this & {
|
1355
|
+
_fetchMap: Prettify<FetchMap extends Record<SanitizePathSlashes<`${BasePath}${Path}`>, unknown> ? FetchMap & Record<SanitizePathSlashes<`${BasePath}${Path}`>, FetchMap[SanitizePathSlashes<`${BasePath}${Path}`>] & Record<Uppercase<ContractMethod>, LiveTypeFunction<SV, SanitizePathSlashes<`${BasePath}${Path}`>, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, ContractMethod, VersionedApi, Auth>>> : FetchMap & Record<SanitizePathSlashes<`${BasePath}${Path}`>, Record<Uppercase<ContractMethod>, LiveTypeFunction<SV, SanitizePathSlashes<`${BasePath}${Path}`>, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, ContractMethod, VersionedApi, Auth>>>>;
|
1356
|
+
sdk: Prettify<Sdk & Record<PrettyCamelCase<Name extends string ? Name : SanitizePathSlashes<`${BasePath}${Path}`>>, LiveSdkFunction<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, Auth>>>;
|
1209
1357
|
};
|
1210
|
-
registerMiddlewareHandler<Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>(registrationMethod: PathOrMiddlewareBasedHandler<RouterHandler>, pathOrContractDetailsOrMiddlewareOrTypedHandler: Path | ContractDetailsOrMiddlewareOrTypedHandler<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth> | RouterHandler, contractDetailsOrMiddlewareOrTypedHandler?: ContractDetailsOrMiddlewareOrTypedHandler<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth> | RouterHandler, ...middlewareOrMiddlewareWithTypedHandler: (MiddlewareOrMiddlewareWithTypedHandler<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth> | RouterHandler)[]): this;
|
1358
|
+
registerMiddlewareHandler<Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const VersionedApi extends VersionSchema<SV, 'middleware'>, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>(registrationMethod: PathOrMiddlewareBasedHandler<RouterHandler>, pathOrContractDetailsOrMiddlewareOrTypedHandler: Path | ContractDetailsOrMiddlewareOrTypedHandler<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth> | RouterHandler, contractDetailsOrMiddlewareOrTypedHandler?: ContractDetailsOrMiddlewareOrTypedHandler<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth> | RouterHandler, ...middlewareOrMiddlewareWithTypedHandler: (MiddlewareOrMiddlewareWithTypedHandler<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth> | RouterHandler)[]): this;
|
1211
1359
|
private addRouterToSdk;
|
1212
|
-
registerNestableMiddlewareHandler<Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>(registrationMethod: NestableRouterBasedHandler<RouterHandler, Internal>, pathOrContractDetailsOrMiddlewareOrTypedHandler: Path | ContractDetailsOrMiddlewareOrTypedHandler<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth> | ConstrainedForklaunchRouter<SV, RouterHandler>, contractDetailsOrMiddlewareOrTypedHandler?: ContractDetailsOrMiddlewareOrTypedHandler<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth> | ConstrainedForklaunchRouter<SV, RouterHandler>, ...middlewareOrMiddlewareWithTypedHandler: (MiddlewareOrMiddlewareWithTypedHandler<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth> | ConstrainedForklaunchRouter<SV, RouterHandler>)[]): this;
|
1360
|
+
registerNestableMiddlewareHandler<Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const VersionedApi extends VersionSchema<SV, 'middleware'>, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>(registrationMethod: NestableRouterBasedHandler<RouterHandler, Internal>, pathOrContractDetailsOrMiddlewareOrTypedHandler: Path | ContractDetailsOrMiddlewareOrTypedHandler<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth> | ConstrainedForklaunchRouter<SV, RouterHandler>, contractDetailsOrMiddlewareOrTypedHandler?: ContractDetailsOrMiddlewareOrTypedHandler<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth> | ConstrainedForklaunchRouter<SV, RouterHandler>, ...middlewareOrMiddlewareWithTypedHandler: (MiddlewareOrMiddlewareWithTypedHandler<SV, Name, 'middleware', Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth> | ConstrainedForklaunchRouter<SV, RouterHandler>)[]): this;
|
1213
1361
|
use: TypedNestableMiddlewareDefinition<this, RouterHandler, Internal, SV, BaseRequest, BaseResponse, NextFunction>;
|
1214
1362
|
all: TypedMiddlewareDefinition<this, SV, BaseRequest, BaseResponse, NextFunction, RouterHandler>;
|
1215
1363
|
connect: TypedMiddlewareDefinition<this, SV, BaseRequest, BaseResponse, NextFunction, RouterHandler>;
|
@@ -1335,14 +1483,13 @@ declare class ForklaunchExpressLikeRouter<SV extends AnySchemaValidator, BasePat
|
|
1335
1483
|
* @template SV - A type that extends AnySchemaValidator.
|
1336
1484
|
* @template Server - The server type.
|
1337
1485
|
*/
|
1338
|
-
declare abstract class ForklaunchExpressLikeApplication<SV extends AnySchemaValidator, Server extends ExpressLikeRouter<RouterHandler, Server>, RouterHandler, BaseRequest, BaseResponse, NextFunction, FetchMap extends Record<string, unknown> = EmptyObject, Sdk extends Record<string, unknown> = EmptyObject
|
1486
|
+
declare abstract class ForklaunchExpressLikeApplication<SV extends AnySchemaValidator, Server extends ExpressLikeRouter<RouterHandler, Server>, RouterHandler, BaseRequest, BaseResponse, NextFunction, FetchMap extends Record<string, unknown> = EmptyObject, Sdk extends Record<string, unknown> = EmptyObject> extends ForklaunchExpressLikeRouter<SV, '/', RouterHandler, Server, BaseRequest, BaseResponse, NextFunction, FetchMap, Sdk> {
|
1339
1487
|
readonly schemaValidator: SV;
|
1340
1488
|
readonly internal: Server;
|
1341
1489
|
readonly postEnrichMiddleware: RouterHandler[];
|
1342
1490
|
readonly openTelemetryCollector: OpenTelemetryCollector<MetricsDefinition>;
|
1343
1491
|
readonly appOptions?: {
|
1344
1492
|
cors?: CorsOptions;
|
1345
|
-
sdkName?: SdkName;
|
1346
1493
|
} | undefined;
|
1347
1494
|
/**
|
1348
1495
|
* Creates an instance of the Application class.
|
@@ -1351,7 +1498,6 @@ declare abstract class ForklaunchExpressLikeApplication<SV extends AnySchemaVali
|
|
1351
1498
|
*/
|
1352
1499
|
constructor(schemaValidator: SV, internal: Server, postEnrichMiddleware: RouterHandler[], openTelemetryCollector: OpenTelemetryCollector<MetricsDefinition>, appOptions?: {
|
1353
1500
|
cors?: CorsOptions;
|
1354
|
-
sdkName?: SdkName;
|
1355
1501
|
} | undefined);
|
1356
1502
|
abstract listen(...args: unknown[]): void;
|
1357
1503
|
}
|
@@ -1364,7 +1510,7 @@ declare abstract class ForklaunchExpressLikeApplication<SV extends AnySchemaVali
|
|
1364
1510
|
* @template P - The type of route parameters that extends ParamsDictionary
|
1365
1511
|
* @template ReqBody - The type of request body that extends Record<string, unknown>
|
1366
1512
|
* @template ReqQuery - The type of request query parameters that extends ParsedQs
|
1367
|
-
* @template ReqHeaders - The type of request headers that extends Record<string,
|
1513
|
+
* @template ReqHeaders - The type of request headers that extends Record<string, unknown>
|
1368
1514
|
* @param {unknown} request - The object to check
|
1369
1515
|
* @returns {boolean} A type predicate indicating whether the object is a ForklaunchRequest
|
1370
1516
|
*
|
@@ -1376,7 +1522,7 @@ declare abstract class ForklaunchExpressLikeApplication<SV extends AnySchemaVali
|
|
1376
1522
|
* }
|
1377
1523
|
* ```
|
1378
1524
|
*/
|
1379
|
-
declare function isForklaunchRequest<SV extends AnySchemaValidator, P extends ParamsDictionary, ReqBody extends Record<string, unknown>, ReqQuery extends ParsedQs, ReqHeaders extends Record<string, string
|
1525
|
+
declare function isForklaunchRequest<SV extends AnySchemaValidator, P extends ParamsDictionary, ReqBody extends Record<string, unknown>, ReqQuery extends ParsedQs, ReqHeaders extends Record<string, string>, VersionedReqs extends VersionedRequests>(request: unknown): request is ForklaunchRequest<SV, P, ReqBody, ReqQuery, ReqHeaders, Extract<keyof VersionedReqs, string>>;
|
1380
1526
|
|
1381
1527
|
/**
|
1382
1528
|
* Type guard that checks if an object is a Forklaunch router.
|
@@ -1397,30 +1543,30 @@ declare function isForklaunchRequest<SV extends AnySchemaValidator, P extends Pa
|
|
1397
1543
|
*/
|
1398
1544
|
declare function isForklaunchRouter<SV extends AnySchemaValidator>(maybeForklaunchRouter: unknown): maybeForklaunchRouter is ForklaunchRouter<SV>;
|
1399
1545
|
|
1400
|
-
declare const delete_: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, BaseRequest, BaseResponse, NextFunction, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>(_schemaValidator: SV, path: Path, contractDetails: PathParamHttpContractDetails<SV, Name, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, BaseRequest, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction>[]) => ExpressLikeTypedHandler<SV, Name, "delete", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth>;
|
1546
|
+
declare const delete_: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, VersionedApi extends VersionSchema<SV, "delete">, BaseRequest, BaseResponse, NextFunction, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>(_schemaValidator: SV, path: Path, contractDetails: PathParamHttpContractDetails<SV, Name, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, BaseRequest, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction>[]) => ExpressLikeTypedHandler<SV, Name, "delete", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth>;
|
1401
1547
|
|
1402
|
-
declare const get: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, BaseRequest, BaseResponse, NextFunction, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>(_schemaValidator: SV, path: Path, contractDetails: PathParamHttpContractDetails<SV, Name, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, BaseRequest, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction>[]) => ExpressLikeTypedHandler<SV, Name, "get", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth>;
|
1548
|
+
declare const get: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, VersionedApi extends VersionSchema<SV, "get">, BaseRequest, BaseResponse, NextFunction, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>(_schemaValidator: SV, path: Path, contractDetails: PathParamHttpContractDetails<SV, Name, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, BaseRequest, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction>[]) => ExpressLikeTypedHandler<SV, Name, "get", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth>;
|
1403
1549
|
|
1404
|
-
declare const head: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, BaseRequest, BaseResponse, NextFunction, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>(_schemaValidator: SV, path: Path, contractDetails: PathParamHttpContractDetails<SV, Name, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, BaseRequest, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction>[]) => ExpressLikeTypedHandler<SV, Name, "head", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth>;
|
1550
|
+
declare const head: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, VersionedApi extends VersionSchema<SV, "head">, BaseRequest, BaseResponse, NextFunction, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>(_schemaValidator: SV, path: Path, contractDetails: PathParamHttpContractDetails<SV, Name, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, BaseRequest, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction>[]) => ExpressLikeTypedHandler<SV, Name, "head", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth>;
|
1405
1551
|
|
1406
|
-
declare const middleware: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, BaseRequest, BaseResponse, NextFunction, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>(_schemaValidator: SV, path: Path, contractDetails: MiddlewareContractDetails<SV, Name, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, BaseRequest, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction>[]) => {
|
1552
|
+
declare const middleware: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, VersionedApi extends VersionSchema<SV, "middleware">, BaseRequest, BaseResponse, NextFunction, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>(_schemaValidator: SV, path: Path, contractDetails: MiddlewareContractDetails<SV, Name, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, BaseRequest, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction>[]) => {
|
1407
1553
|
_typedHandler: true;
|
1408
1554
|
_path: Path;
|
1409
|
-
contractDetails: ContractDetails<SV, Name, "middleware", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, BaseRequest, Auth>;
|
1410
|
-
handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction>[];
|
1555
|
+
contractDetails: ContractDetails<SV, Name, "middleware", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, BaseRequest, Auth>;
|
1556
|
+
handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction>[];
|
1411
1557
|
};
|
1412
1558
|
|
1413
|
-
declare const options: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, BaseRequest, BaseResponse, NextFunction, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>(_schemaValidator: SV, path: Path, contractDetails: PathParamHttpContractDetails<SV, Name, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, BaseRequest, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction>[]) => ExpressLikeTypedHandler<SV, Name, "options", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth>;
|
1559
|
+
declare const options: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, VersionedApi extends VersionSchema<SV, "options">, BaseRequest, BaseResponse, NextFunction, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>(_schemaValidator: SV, path: Path, contractDetails: PathParamHttpContractDetails<SV, Name, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, BaseRequest, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction>[]) => ExpressLikeTypedHandler<SV, Name, "options", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth>;
|
1414
1560
|
|
1415
|
-
declare const patch: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, BaseRequest, BaseResponse, NextFunction, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>(_schemaValidator: SV, path: Path, contractDetails: HttpContractDetails<SV, Name, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, BaseRequest, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction>[]) => ExpressLikeTypedHandler<SV, Name, "patch", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth>;
|
1561
|
+
declare const patch: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, VersionedApi extends VersionSchema<SV, "patch">, BaseRequest, BaseResponse, NextFunction, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>(_schemaValidator: SV, path: Path, contractDetails: HttpContractDetails<SV, Name, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, BaseRequest, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction>[]) => ExpressLikeTypedHandler<SV, Name, "patch", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth>;
|
1416
1562
|
|
1417
|
-
declare const post: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, BaseRequest, BaseResponse, NextFunction, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>(_schemaValidator: SV, path: Path, contractDetails: HttpContractDetails<SV, Name, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, BaseRequest, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction>[]) => ExpressLikeTypedHandler<SV, Name, "post", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth>;
|
1563
|
+
declare const post: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, VersionedApi extends VersionSchema<SV, "post">, BaseRequest, BaseResponse, NextFunction, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>(_schemaValidator: SV, path: Path, contractDetails: HttpContractDetails<SV, Name, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, BaseRequest, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction>[]) => ExpressLikeTypedHandler<SV, Name, "post", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth>;
|
1418
1564
|
|
1419
|
-
declare const put: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, BaseRequest, BaseResponse, NextFunction, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>(_schemaValidator: SV, path: Path, contractDetails: HttpContractDetails<SV, Name, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, BaseRequest, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction>[]) => ExpressLikeTypedHandler<SV, Name, "put", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth>;
|
1565
|
+
declare const put: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, VersionedApi extends VersionSchema<SV, "put">, BaseRequest, BaseResponse, NextFunction, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>(_schemaValidator: SV, path: Path, contractDetails: HttpContractDetails<SV, Name, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, BaseRequest, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction>[]) => ExpressLikeTypedHandler<SV, Name, "put", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth>;
|
1420
1566
|
|
1421
|
-
declare const trace: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, BaseRequest, BaseResponse, NextFunction, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>(_schemaValidator: SV, path: Path, contractDetails: PathParamHttpContractDetails<SV, Name, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, BaseRequest, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction>[]) => ExpressLikeTypedHandler<SV, Name, "trace", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth>;
|
1567
|
+
declare const trace: <SV extends AnySchemaValidator, Name extends string, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, VersionedApi extends VersionSchema<SV, "trace">, BaseRequest, BaseResponse, NextFunction, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>(_schemaValidator: SV, path: Path, contractDetails: PathParamHttpContractDetails<SV, Name, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, BaseRequest, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction>[]) => ExpressLikeTypedHandler<SV, Name, "trace", Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth>;
|
1422
1568
|
|
1423
|
-
declare function typedAuthHandler<SV extends AnySchemaValidator, Name extends string, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, BaseRequest>(_schemaValidator: SV, _contractDetails: ContractDetails<SV, Name, Method, `/${string}`, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, BaseRequest, SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>, authHandler: ExpressLikeSchemaAuthMapper<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>): ExpressLikeSchemaAuthMapper<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>;
|
1569
|
+
declare function typedAuthHandler<SV extends AnySchemaValidator, Name extends string, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, VersionedApi extends VersionSchema<SV, Method>, BaseRequest>(_schemaValidator: SV, _contractDetails: ContractDetails<SV, Name, Method, `/${string}`, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, BaseRequest, SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>, authHandler: ExpressLikeSchemaAuthMapper<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>): ExpressLikeSchemaAuthMapper<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>;
|
1424
1570
|
|
1425
1571
|
/**
|
1426
1572
|
* Router class that sets up routes and middleware for an Express router, for use with controller/routes pattern.
|
@@ -1429,8 +1575,8 @@ declare function typedAuthHandler<SV extends AnySchemaValidator, Name extends st
|
|
1429
1575
|
* @template contractDetails - The contract details.
|
1430
1576
|
* @template handlers - The handler middlware and handler.
|
1431
1577
|
*/
|
1432
|
-
declare function typedHandler<SV extends AnySchemaValidator, Name extends string, ContractMethod extends Method, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, BaseRequest, BaseResponse, NextFunction, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>(_schemaValidator: SV, _path: Path | undefined, _contractMethod: ContractMethod, contractDetails: ContractDetails<SV, Name, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, BaseRequest, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction>[]): ExpressLikeTypedHandler<SV, Name, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth>;
|
1433
|
-
declare function typedHandler<SV extends AnySchemaValidator, Name extends string, ContractMethod extends Method, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, BaseRequest, BaseResponse, NextFunction, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, BaseRequest>>(_schemaValidator: SV, _contractMethod: ContractMethod, contractDetails: ContractDetails<SV, Name, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, BaseRequest, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction>[]): ExpressLikeTypedHandler<SV, Name, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, BaseRequest, BaseResponse, NextFunction, Auth>;
|
1578
|
+
declare function typedHandler<SV extends AnySchemaValidator, Name extends string, ContractMethod extends Method, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const VersionedApi extends VersionSchema<SV, ContractMethod>, BaseRequest, BaseResponse, NextFunction, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>(_schemaValidator: SV, _path: Path | undefined, _contractMethod: ContractMethod, contractDetails: ContractDetails<SV, Name, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, BaseRequest, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction>[]): ExpressLikeTypedHandler<SV, Name, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth>;
|
1579
|
+
declare function typedHandler<SV extends AnySchemaValidator, Name extends string, ContractMethod extends Method, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>, const VersionedApi extends VersionSchema<SV, ContractMethod>, BaseRequest, BaseResponse, NextFunction, const Auth extends SchemaAuthMethods<SV, P, ReqBody, ReqQuery, ReqHeaders, VersionedApi, BaseRequest>>(_schemaValidator: SV, _contractMethod: ContractMethod, contractDetails: ContractDetails<SV, Name, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, VersionedApi, BaseRequest, Auth>, ...handlers: ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction>[]): ExpressLikeTypedHandler<SV, Name, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj, VersionedApi, BaseRequest, BaseResponse, NextFunction, Auth>;
|
1434
1580
|
|
1435
1581
|
/**
|
1436
1582
|
* Object-map of the HTTP Status Codes. Maps from the status code, to the
|
@@ -1543,8 +1689,9 @@ declare function generateMcpServer<T extends Record<string, unknown> | undefined
|
|
1543
1689
|
*
|
1544
1690
|
* @returns {unknown} The return value of the original `send` method, typically the response itself.
|
1545
1691
|
*/
|
1546
|
-
declare function enrichExpressLikeSend<SV extends AnySchemaValidator, P extends ParamsDictionary, ResBodyMap extends Record<number, unknown>, ReqBody extends Record<string, unknown>, ReqQuery extends ParsedQs, ReqHeaders extends Record<string, string>, ResHeaders extends Record<string,
|
1692
|
+
declare function enrichExpressLikeSend<SV extends AnySchemaValidator, P extends ParamsDictionary, ResBodyMap extends Record<number, unknown>, ReqBody extends Record<string, unknown>, ReqQuery extends ParsedQs, ReqHeaders extends Record<string, string>, ResHeaders extends Record<string, unknown>, LocalsObj extends Record<string, unknown>, VersionedReqs extends VersionedRequests>(instance: unknown, req: ForklaunchRequest<SV, P, ReqBody, ReqQuery, ReqHeaders, Extract<keyof VersionedReqs, string>>, res: ForklaunchResponse<unknown, ResBodyMap, ForklaunchResHeaders & ResHeaders, LocalsObj, Extract<keyof VersionedReqs, string>>, originalOperation: ForklaunchStatusResponse<ForklaunchSendableData>['json'] | ForklaunchStatusResponse<ForklaunchSendableData>['jsonp'], originalSend: ForklaunchStatusResponse<ForklaunchSendableData>['send'], data: ForklaunchSendableData | File | Blob | AsyncGenerator<Record<string, unknown>> | null | undefined, shouldEnrich: boolean): void;
|
1547
1693
|
|
1694
|
+
declare const OPENAPI_DEFAULT_VERSION: unique symbol;
|
1548
1695
|
/**
|
1549
1696
|
* Generates a Swagger document from given routers.
|
1550
1697
|
*
|
@@ -1554,10 +1701,10 @@ declare function enrichExpressLikeSend<SV extends AnySchemaValidator, P extends
|
|
1554
1701
|
* @param {ForklaunchRouter<SV>[]} routers - The routers to include in the Swagger document.
|
1555
1702
|
* @returns {OpenAPIObject} - The generated Swagger document.
|
1556
1703
|
*/
|
1557
|
-
declare function
|
1704
|
+
declare function generateOpenApiSpecs<SV extends AnySchemaValidator>(schemaValidator: SV, protocol: 'http' | 'https', host: string, port: string | number, routers: ForklaunchRouter<SV>[], otherServers?: {
|
1558
1705
|
url: string;
|
1559
1706
|
description: string;
|
1560
|
-
}[]): OpenAPIObject
|
1707
|
+
}[]): Record<string | symbol, OpenAPIObject>;
|
1561
1708
|
|
1562
1709
|
/**
|
1563
1710
|
* Discriminates the body type from the given contract details and returns information
|
@@ -1600,6 +1747,136 @@ declare function discriminateResponseBodies<SV extends AnySchemaValidator>(schem
|
|
1600
1747
|
schema: SV["_ValidSchemaObject"];
|
1601
1748
|
}>;
|
1602
1749
|
|
1750
|
+
/**
|
1751
|
+
* Creates a complete SDK client from a RouterMap configuration.
|
1752
|
+
* This is the main entry point for creating type-safe SDK clients that combine
|
1753
|
+
* both SDK interfaces and fetch functionality from router configurations.
|
1754
|
+
*
|
1755
|
+
* @template SV - The schema validator type that constrains the router structure
|
1756
|
+
* @template T - The RouterMap type to create the SDK client from
|
1757
|
+
* @param schemaValidator - The schema validator instance used for validation and type constraints
|
1758
|
+
* @param routerMap - The router map containing the complete API configuration
|
1759
|
+
*
|
1760
|
+
* @returns An object containing both the SDK interface and fetch function:
|
1761
|
+
* - `sdk`: The extracted SDK interfaces for direct method calls
|
1762
|
+
* - `fetch`: The unified fetch function for making HTTP requests
|
1763
|
+
*
|
1764
|
+
* @example
|
1765
|
+
* ```typescript
|
1766
|
+
* const routerMap = {
|
1767
|
+
* api: {
|
1768
|
+
* users: {
|
1769
|
+
* sdk: { getUser: (id: string) => Promise.resolve({ id, name: 'John' }) },
|
1770
|
+
* _fetchMap: { getUser: { get: (id: string) => fetch(`/api/users/${id}`) } }
|
1771
|
+
* },
|
1772
|
+
* posts: {
|
1773
|
+
* sdk: { getPosts: () => Promise.resolve([]) },
|
1774
|
+
* _fetchMap: { getPosts: { get: () => fetch('/api/posts') } }
|
1775
|
+
* }
|
1776
|
+
* }
|
1777
|
+
* };
|
1778
|
+
*
|
1779
|
+
* const client = sdkClient(zodValidator, routerMap);
|
1780
|
+
*
|
1781
|
+
* // Use SDK methods directly
|
1782
|
+
* const user = await client.sdk.api.users.getUser('123');
|
1783
|
+
*
|
1784
|
+
* // Use fetch function for custom requests
|
1785
|
+
* const response = await client.fetch('getUser', { params: { id: '123' } });
|
1786
|
+
* ```
|
1787
|
+
*/
|
1788
|
+
declare function sdkClient<SV extends AnySchemaValidator, T extends RouterMap<SV>>(schemaValidator: SV, routerMap: T): {
|
1789
|
+
_finalizedSdk: true;
|
1790
|
+
sdk: MapToSdk<SV, T>;
|
1791
|
+
fetch: FetchFunction<MapToFetch<SV, T>>;
|
1792
|
+
};
|
1793
|
+
|
1794
|
+
/**
|
1795
|
+
* Creates a type-safe SDK router by mapping controller definitions to router SDK functions.
|
1796
|
+
* This function takes a controller object with contract details and maps each controller method
|
1797
|
+
* to the corresponding SDK function from the router, ensuring type safety throughout the process.
|
1798
|
+
* The function now uses `const` template parameters for better type inference and includes
|
1799
|
+
* a comprehensive fetch map for enhanced type safety.
|
1800
|
+
*
|
1801
|
+
* @template SV - The schema validator type that constrains the router and controller structure
|
1802
|
+
* @template T - The controller type containing contract details for each endpoint (const parameter)
|
1803
|
+
* @template Router - The router type that provides SDK functions, fetch, and _fetchMap capabilities (const parameter)
|
1804
|
+
* @param SV - Must extend AnySchemaValidator to ensure type safety
|
1805
|
+
* @param T - Must be a const record where each key maps to a controller method with contract details
|
1806
|
+
* @param Router - Must be a const object with optional sdk, fetch, and _fetchMap properties
|
1807
|
+
*
|
1808
|
+
* @param schemaValidator - The schema validator instance used for validation and type constraints
|
1809
|
+
* @param controller - The controller object containing contract details for each endpoint
|
1810
|
+
* @param router - The router instance that provides SDK functions, fetch, and _fetchMap capabilities
|
1811
|
+
*
|
1812
|
+
* @returns An object containing:
|
1813
|
+
* - `sdk`: Type-safe SDK functions mapped from controller methods using LiveSdkFunction
|
1814
|
+
* - `fetch`: The router's fetch function cast to FetchFunction with proper typing
|
1815
|
+
* - `_fetchMap`: A comprehensive fetch map with LiveTypeFunction for each endpoint and method
|
1816
|
+
*
|
1817
|
+
* @example
|
1818
|
+
* ```typescript
|
1819
|
+
* const controller = {
|
1820
|
+
* createAgent: {
|
1821
|
+
* _path: '/agents',
|
1822
|
+
* _method: 'POST',
|
1823
|
+
* contractDetails: {
|
1824
|
+
* name: 'createAgent',
|
1825
|
+
* body: { name: 'string', organizationId: 'string' },
|
1826
|
+
* responses: { 200: { id: 'string', name: 'string' } }
|
1827
|
+
* }
|
1828
|
+
* },
|
1829
|
+
* getAgent: {
|
1830
|
+
* _path: '/agents/:id',
|
1831
|
+
* _method: 'GET',
|
1832
|
+
* contractDetails: {
|
1833
|
+
* name: 'getAgent',
|
1834
|
+
* params: { id: 'string' },
|
1835
|
+
* responses: { 200: { id: 'string', name: 'string' } }
|
1836
|
+
* }
|
1837
|
+
* }
|
1838
|
+
* } as const;
|
1839
|
+
*
|
1840
|
+
* const router = {
|
1841
|
+
* sdk: { createAgent: () => Promise.resolve({}), getAgent: () => Promise.resolve({}) },
|
1842
|
+
* fetch: (path: string, options: any) => fetch(path, options),
|
1843
|
+
* _fetchMap: { '/agents': { POST: () => fetch('/agents', { method: 'POST' }) } }
|
1844
|
+
* } as const;
|
1845
|
+
*
|
1846
|
+
* const sdkRouter = sdkRouter(zodValidator, controller, router);
|
1847
|
+
*
|
1848
|
+
* // Use SDK functions with full type safety
|
1849
|
+
* const agent = await sdkRouter.sdk.createAgent({
|
1850
|
+
* body: { name: 'My Agent', organizationId: 'org123' }
|
1851
|
+
* });
|
1852
|
+
*
|
1853
|
+
* const agentData = await sdkRouter.sdk.getAgent({
|
1854
|
+
* params: { id: 'agent123' }
|
1855
|
+
* });
|
1856
|
+
*
|
1857
|
+
* // Use fetch function with enhanced type safety
|
1858
|
+
* const response = await sdkRouter.fetch('/agents', {
|
1859
|
+
* method: 'POST',
|
1860
|
+
* body: { name: 'Custom Agent', organizationId: 'org456' }
|
1861
|
+
* });
|
1862
|
+
*
|
1863
|
+
* // Access the fetch map for advanced usage
|
1864
|
+
* const _fetchMap = sdkRouter._fetchMap;
|
1865
|
+
* ```
|
1866
|
+
*/
|
1867
|
+
declare function sdkRouter<SV extends AnySchemaValidator, const T extends Record<string, SdkHandler>, const Router extends {
|
1868
|
+
sdk?: unknown;
|
1869
|
+
fetch?: unknown;
|
1870
|
+
_fetchMap?: unknown;
|
1871
|
+
basePath?: string;
|
1872
|
+
sdkPaths: Record<string, string>;
|
1873
|
+
}>(schemaValidator: SV, controller: T, router: Router): {
|
1874
|
+
sdk: MapControllerToSdk<SV, T>;
|
1875
|
+
fetch: FetchFunction<ToFetchMap<T, SV, Router["basePath"] extends `/${string}` ? Router["basePath"] : "/">>;
|
1876
|
+
_fetchMap: ToFetchMap<T, SV, Router["basePath"] extends `/${string}` ? Router["basePath"] : "/">;
|
1877
|
+
sdkPaths: Router["sdkPaths"];
|
1878
|
+
};
|
1879
|
+
|
1603
1880
|
declare const ATTR_API_NAME = "api.name";
|
1604
1881
|
declare const ATTR_CORRELATION_ID = "correlation.id";
|
1605
1882
|
|
@@ -1631,7 +1908,7 @@ declare class PinoLogger {
|
|
1631
1908
|
}
|
1632
1909
|
declare function logger(level: LevelWithSilentOrString, meta?: AnyValueMap): PinoLogger;
|
1633
1910
|
|
1634
|
-
declare function recordMetric<SV extends AnySchemaValidator, P extends ParamsDictionary, ReqBody extends Record<string, unknown>, ReqQuery extends ParsedQs, ResBodyMap extends Record<string, unknown>, ReqHeaders extends Record<string, string>, ResHeaders extends Record<string,
|
1911
|
+
declare function recordMetric<SV extends AnySchemaValidator, P extends ParamsDictionary, ReqBody extends Record<string, unknown>, ReqQuery extends ParsedQs, ResBodyMap extends Record<string, unknown>, ReqHeaders extends Record<string, string>, ResHeaders extends Record<string, unknown>, LocalsObj extends Record<string, unknown>, VersionedReqs extends VersionedRequests>(req: ForklaunchRequest<SV, P, ReqBody, ReqQuery, ReqHeaders, Extract<keyof VersionedReqs, string>>, res: ForklaunchResponse<unknown, ResBodyMap, ResHeaders, LocalsObj, Extract<keyof VersionedReqs, string>>): void;
|
1635
1912
|
|
1636
1913
|
type DocsConfiguration = ({
|
1637
1914
|
type: 'scalar';
|
@@ -1639,4 +1916,4 @@ type DocsConfiguration = ({
|
|
1639
1916
|
type: 'swagger';
|
1640
1917
|
};
|
1641
1918
|
|
1642
|
-
export { ATTR_API_NAME, ATTR_CORRELATION_ID, type AuthMethods, type AuthMethodsBase, type BasicAuthMethods, type Body, type BodyObject, type ConstrainedForklaunchRouter, type ContractDetails, type ContractDetailsExpressLikeSchemaHandler, type ContractDetailsOrMiddlewareOrTypedHandler, type DocsConfiguration, type ErrorContainer, type ExpressLikeAuthMapper, type ExpressLikeHandler, type ExpressLikeRouter, type ExpressLikeSchemaAuthMapper, type ExpressLikeSchemaHandler, type ExpressLikeTypedHandler, type ExtractBody, type ExtractContentType, type ExtractResponseBody, type ExtractedParamsObject, type FetchFunction, type FileBody, type ForklaunchBaseRequest, ForklaunchExpressLikeApplication, ForklaunchExpressLikeRouter, type ForklaunchNextFunction, type ForklaunchRequest, type ForklaunchResErrors, type ForklaunchResHeaders, type ForklaunchResponse, type ForklaunchRoute, type ForklaunchRouter, type ForklaunchSendableData, type ForklaunchStatusResponse, HTTPStatuses, type HeadersObject, type HttpContractDetails, type HttpMethod, type JsonBody, type JwtAuthMethods, type LiveSdkFunction, type LiveTypeFunction, type LiveTypeFunctionRequestInit, type LiveTypeRouteDefinition, type LogFn, type LoggerMeta, type MapParamsSchema, type MapReqBodySchema, type MapReqHeadersSchema, type MapReqQuerySchema, type MapResBodyMapSchema, type MapResHeadersSchema, type MapSchema, type Method, type MetricType, type MetricsDefinition, type MiddlewareContractDetails, type MiddlewareOrMiddlewareWithTypedHandler, type MultipartForm, type NestableRouterBasedHandler, type NumberOnlyObject, OpenTelemetryCollector, type ParamsDictionary, type ParamsObject, type PathBasedHandler, type PathMatch, type PathOrMiddlewareBasedHandler, type PathParamHttpContractDetails, type PathParamMethod, type QueryObject, type RawTypedResponseBody, type RequestContext, type ResolvedForklaunchAuthRequest, type ResolvedForklaunchRequest, type ResponseBody, type ResponseCompiledSchema, type ResponseShape, type ResponsesObject, type SchemaAuthMethods, type
|
1919
|
+
export { ATTR_API_NAME, ATTR_CORRELATION_ID, type AuthMethods, type AuthMethodsBase, type BasicAuthMethods, type Body, type BodyObject, type ConstrainedForklaunchRouter, type ContractDetails, type ContractDetailsExpressLikeSchemaHandler, type ContractDetailsOrMiddlewareOrTypedHandler, type DocsConfiguration, type ErrorContainer, type ExpressLikeAuthMapper, type ExpressLikeHandler, type ExpressLikeRouter, type ExpressLikeSchemaAuthMapper, type ExpressLikeSchemaHandler, type ExpressLikeTypedHandler, type ExtractBody, type ExtractContentType, type ExtractLiveTypeFn, type ExtractResponseBody, type ExtractedParamsObject, type FetchFunction, type FileBody, type ForklaunchBaseRequest, ForklaunchExpressLikeApplication, ForklaunchExpressLikeRouter, type ForklaunchNextFunction, type ForklaunchRequest, type ForklaunchResErrors, type ForklaunchResHeaders, type ForklaunchResponse, type ForklaunchRoute, type ForklaunchRouter, type ForklaunchSendableData, type ForklaunchStatusResponse, HTTPStatuses, type HeadersObject, type HttpContractDetails, type HttpMethod, type JsonBody, type JwtAuthMethods, type LiveSdkFunction, type LiveTypeFunction, type LiveTypeFunctionRequestInit, type LiveTypeRouteDefinition, type LogFn, type LoggerMeta, type MapControllerToSdk, type MapParamsSchema, type MapReqBodySchema, type MapReqHeadersSchema, type MapReqQuerySchema, type MapResBodyMapSchema, type MapResHeadersSchema, type MapSchema, type MapToFetch, type MapToSdk, type MapVersionedReqsSchema, type MapVersionedRespsSchema, type Method, type MetricType, type MetricsDefinition, type MiddlewareContractDetails, type MiddlewareOrMiddlewareWithTypedHandler, type MultipartForm, type NestableRouterBasedHandler, type NumberOnlyObject, OPENAPI_DEFAULT_VERSION, OpenTelemetryCollector, type ParamsDictionary, type ParamsObject, type PathBasedHandler, type PathMatch, type PathOrMiddlewareBasedHandler, type PathParamHttpContractDetails, type PathParamMethod, type QueryObject, type RawTypedResponseBody, type RequestContext, type ResolvedForklaunchAuthRequest, type ResolvedForklaunchRequest, type ResolvedForklaunchResponse, type ResponseBody, type ResponseCompiledSchema, type ResponseShape, type ResponsesObject, type RouterMap, type SchemaAuthMethods, type SdkHandler, type SdkRouter, type ServerSentEventBody, type StatusCode, type StringOnlyObject, type TelemetryOptions, type TextBody, type ToFetchMap, type TypedBody, type TypedHandler, type TypedMiddlewareDefinition, type TypedNestableMiddlewareDefinition, type TypedRequestBody, type TypedResponseBody, type UnknownBody, type UnknownResponseBody, type UrlEncodedForm, type VersionSchema, type VersionedRequests, type VersionedResponses, delete_, discriminateBody, discriminateResponseBodies, enrichExpressLikeSend, evaluateTelemetryOptions, generateMcpServer, generateOpenApiSpecs, get, getCodeForStatus, head, httpRequestsTotalCounter, httpServerDurationHistogram, isClientError, isForklaunchRequest, isForklaunchRouter, isInformational, isRedirection, isServerError, isSuccessful, isValidStatusCode, logger, meta, metricsDefinitions, middleware, options, patch, post, put, recordMetric, sdkClient, sdkRouter, trace, typedAuthHandler, typedHandler };
|