@geekmidas/constructs 0.0.21 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +90 -0
- package/dist/{AWSLambdaFunction-qWpalqfr.d.mts → AWSLambdaFunction-DCh1tOhB.d.mts} +3 -3
- package/dist/{AWSLambdaSubscriberAdaptor-CWbBNRz3.d.mts → AWSLambdaSubscriberAdaptor-DtNZPMoV.d.mts} +2 -2
- package/dist/{AmazonApiGatewayEndpointAdaptor-BQ0IJdaI.d.mts → AmazonApiGatewayEndpointAdaptor-BaTM2TNu.d.mts} +3 -3
- package/dist/{AmazonApiGatewayEndpointAdaptor-DXssXsJi.cjs → AmazonApiGatewayEndpointAdaptor-CPqlw2Rx.cjs} +3 -3
- package/dist/{AmazonApiGatewayEndpointAdaptor-DXssXsJi.cjs.map → AmazonApiGatewayEndpointAdaptor-CPqlw2Rx.cjs.map} +1 -1
- package/dist/{AmazonApiGatewayEndpointAdaptor-CacGag6F.mjs → AmazonApiGatewayEndpointAdaptor-Cm4iD199.mjs} +3 -3
- package/dist/{AmazonApiGatewayEndpointAdaptor-CacGag6F.mjs.map → AmazonApiGatewayEndpointAdaptor-Cm4iD199.mjs.map} +1 -1
- package/dist/{AmazonApiGatewayEndpointAdaptor-Da9BR5On.d.cts → AmazonApiGatewayEndpointAdaptor-TP_hLNAa.d.cts} +2 -2
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-C4_AZ1ek.d.mts → AmazonApiGatewayV1EndpointAdaptor-B2ZpUFiC.d.mts} +4 -4
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-CSm3NsWz.d.cts → AmazonApiGatewayV1EndpointAdaptor-CConfCqz.d.cts} +3 -3
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-BpnG55R7.mjs → AmazonApiGatewayV1EndpointAdaptor-D38HuQa9.mjs} +2 -2
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-BpnG55R7.mjs.map → AmazonApiGatewayV1EndpointAdaptor-D38HuQa9.mjs.map} +1 -1
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-Df4kszio.cjs → AmazonApiGatewayV1EndpointAdaptor-tjpvLBRb.cjs} +2 -2
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-Df4kszio.cjs.map → AmazonApiGatewayV1EndpointAdaptor-tjpvLBRb.cjs.map} +1 -1
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-DdM8Tr1X.d.mts → AmazonApiGatewayV2EndpointAdaptor-BwMQInBi.d.mts} +4 -4
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-ZORzMEET.mjs → AmazonApiGatewayV2EndpointAdaptor-ByYtiJtN.mjs} +2 -2
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-ZORzMEET.mjs.map → AmazonApiGatewayV2EndpointAdaptor-ByYtiJtN.mjs.map} +1 -1
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-5SIvqPby.cjs → AmazonApiGatewayV2EndpointAdaptor-DcJ_w3ro.cjs} +2 -2
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-5SIvqPby.cjs.map → AmazonApiGatewayV2EndpointAdaptor-DcJ_w3ro.cjs.map} +1 -1
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-6hsBFVLf.d.cts → AmazonApiGatewayV2EndpointAdaptor-DurJvFwa.d.cts} +3 -3
- package/dist/Authorizer-C0ge_tc8.cjs +92 -0
- package/dist/Authorizer-C0ge_tc8.cjs.map +1 -0
- package/dist/Authorizer-CpSUMTIs.d.cts +125 -0
- package/dist/Authorizer-D1w7MpK6.d.mts +125 -0
- package/dist/Authorizer-r9U3y_ms.mjs +68 -0
- package/dist/Authorizer-r9U3y_ms.mjs.map +1 -0
- package/dist/{BaseFunctionBuilder-Ct6zY6Jq.d.mts → BaseFunctionBuilder-Oc2xmxmg.d.mts} +2 -2
- package/dist/{Construct-DDR0295I.d.mts → Construct-DCPATqec.d.mts} +1 -1
- package/dist/Construct.d.mts +1 -1
- package/dist/{Cron-DnMRWPFR.d.mts → Cron-DPEcDCDW.d.mts} +2 -2
- package/dist/{CronBuilder-RLDitFmP.d.mts → CronBuilder-CxKTiepV.d.mts} +4 -4
- package/dist/{Endpoint-D2Imgihs.d.cts → Endpoint-BJPJTGjV.d.cts} +2 -2
- package/dist/{Endpoint-PtQ-wLIS.d.mts → Endpoint-DoY1Owv2.d.mts} +4 -4
- package/dist/{EndpointBuilder-B5QPf5Wd.mjs → EndpointBuilder-69uVrKZL.mjs} +15 -2
- package/dist/EndpointBuilder-69uVrKZL.mjs.map +1 -0
- package/dist/{EndpointBuilder-BPHpUekp.d.mts → EndpointBuilder-BJRkivxQ.d.mts} +6 -5
- package/dist/{EndpointBuilder-DrJbIf3Z.cjs → EndpointBuilder-Bhyft7WY.cjs} +15 -2
- package/dist/EndpointBuilder-Bhyft7WY.cjs.map +1 -0
- package/dist/{EndpointBuilder-TApJQhtG.d.cts → EndpointBuilder-CQ-jOXsD.d.cts} +4 -3
- package/dist/{EndpointFactory-DNwMexc7.mjs → EndpointFactory-ARUlRlyM.mjs} +94 -13
- package/dist/EndpointFactory-ARUlRlyM.mjs.map +1 -0
- package/dist/{EndpointFactory-TJ6gtM0W.d.mts → EndpointFactory-BKEPcQgE.d.mts} +50 -19
- package/dist/{EndpointFactory-CSeDcWYn.cjs → EndpointFactory-BcVbkrxf.cjs} +94 -13
- package/dist/EndpointFactory-BcVbkrxf.cjs.map +1 -0
- package/dist/{EndpointFactory-D94AFjIc.d.cts → EndpointFactory-DgwmAR_8.d.cts} +50 -19
- package/dist/{Function-CD3rXWfa.d.mts → Function-Dthlh2Fb.d.mts} +2 -2
- package/dist/{FunctionBuilder-j2VkwuGf.d.mts → FunctionBuilder-CZFBLfdV.d.mts} +4 -4
- package/dist/{FunctionExecutionWrapper-B0WP-Vec.d.mts → FunctionExecutionWrapper-CfuajSB5.d.mts} +2 -2
- package/dist/{HonoEndpointAdaptor-Bg_vTyA5.mjs → HonoEndpointAdaptor-BmB4Sc7L.mjs} +3 -3
- package/dist/{HonoEndpointAdaptor-Bg_vTyA5.mjs.map → HonoEndpointAdaptor-BmB4Sc7L.mjs.map} +1 -1
- package/dist/{HonoEndpointAdaptor-B_gJPWGD.cjs → HonoEndpointAdaptor-CnqR6PSB.cjs} +3 -3
- package/dist/{HonoEndpointAdaptor-B_gJPWGD.cjs.map → HonoEndpointAdaptor-CnqR6PSB.cjs.map} +1 -1
- package/dist/{HonoEndpointAdaptor-DB_DdiJr.d.cts → HonoEndpointAdaptor-DBjipl6Q.d.mts} +8 -8
- package/dist/{HonoEndpointAdaptor-D99d4b-Z.d.mts → HonoEndpointAdaptor-sSG85VER.d.cts} +6 -6
- package/dist/{Subscriber-itwm7ugy.d.mts → Subscriber-BfxLwZpX.d.mts} +2 -2
- package/dist/{Subscriber-D-FPWts6.cjs → Subscriber-DvOtIyWq.cjs} +1 -1
- package/dist/{Subscriber-D-FPWts6.cjs.map → Subscriber-DvOtIyWq.cjs.map} +1 -1
- package/dist/{Subscriber-CGb8LjZa.mjs → Subscriber-JzcFFi4p.mjs} +1 -1
- package/dist/{Subscriber-CGb8LjZa.mjs.map → Subscriber-JzcFFi4p.mjs.map} +1 -1
- package/dist/{SubscriberBuilder-BfE2cL1q.cjs → SubscriberBuilder-DUuV207i.cjs} +2 -2
- package/dist/{SubscriberBuilder-BfE2cL1q.cjs.map → SubscriberBuilder-DUuV207i.cjs.map} +1 -1
- package/dist/{SubscriberBuilder-9j3JCu8-.d.mts → SubscriberBuilder-lTiTUS1o.d.mts} +2 -2
- package/dist/{SubscriberBuilder-BcAspHv9.mjs → SubscriberBuilder-tm4oVOt3.mjs} +2 -2
- package/dist/{SubscriberBuilder-BcAspHv9.mjs.map → SubscriberBuilder-tm4oVOt3.mjs.map} +1 -1
- package/dist/{TestEndpointAdaptor-Bew9lWsx.cjs → TestEndpointAdaptor-BtLcw4JW.cjs} +3 -3
- package/dist/{TestEndpointAdaptor-Bew9lWsx.cjs.map → TestEndpointAdaptor-BtLcw4JW.cjs.map} +1 -1
- package/dist/{TestEndpointAdaptor-C-c8v7VI.d.mts → TestEndpointAdaptor-CGQVysE0.d.mts} +3 -3
- package/dist/{TestEndpointAdaptor-BYCwwiYk.d.cts → TestEndpointAdaptor-CJO-og9U.d.cts} +2 -2
- package/dist/{TestEndpointAdaptor-JONQJeXc.mjs → TestEndpointAdaptor-o7JbNcL-.mjs} +3 -3
- package/dist/{TestEndpointAdaptor-JONQJeXc.mjs.map → TestEndpointAdaptor-o7JbNcL-.mjs.map} +1 -1
- package/dist/adaptors/aws.cjs +4 -4
- package/dist/adaptors/aws.d.cts +6 -6
- package/dist/adaptors/aws.d.mts +15 -15
- package/dist/adaptors/aws.mjs +4 -4
- package/dist/adaptors/hono.cjs +2 -2
- package/dist/adaptors/hono.d.cts +4 -4
- package/dist/adaptors/hono.d.mts +9 -9
- package/dist/adaptors/hono.mjs +2 -2
- package/dist/adaptors/testing.cjs +2 -2
- package/dist/adaptors/testing.d.cts +4 -4
- package/dist/adaptors/testing.d.mts +9 -9
- package/dist/adaptors/testing.mjs +2 -2
- package/dist/crons/Cron.d.cts +1 -1
- package/dist/crons/Cron.d.mts +6 -6
- package/dist/crons/CronBuilder.d.cts +1 -1
- package/dist/crons/CronBuilder.d.mts +7 -7
- package/dist/crons/index.d.cts +5 -5
- package/dist/crons/index.d.mts +11 -11
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.cjs +2 -2
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.cts +4 -4
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.mts +9 -9
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.mjs +2 -2
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.cjs +3 -3
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.cts +5 -5
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.mts +10 -10
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.mjs +3 -3
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.cjs +3 -3
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.cts +5 -5
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.mts +10 -10
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.mjs +3 -3
- package/dist/endpoints/Authorizer.cjs +5 -14
- package/dist/endpoints/Authorizer.d.cts +2 -2
- package/dist/endpoints/Authorizer.d.mts +2 -2
- package/dist/endpoints/Authorizer.mjs +2 -13
- package/dist/endpoints/Endpoint.d.cts +3 -3
- package/dist/endpoints/Endpoint.d.mts +8 -8
- package/dist/endpoints/EndpointBuilder.cjs +2 -1
- package/dist/endpoints/EndpointBuilder.d.cts +4 -4
- package/dist/endpoints/EndpointBuilder.d.mts +9 -9
- package/dist/endpoints/EndpointBuilder.mjs +2 -1
- package/dist/endpoints/EndpointFactory.cjs +3 -2
- package/dist/endpoints/EndpointFactory.d.cts +5 -5
- package/dist/endpoints/EndpointFactory.d.mts +10 -10
- package/dist/endpoints/EndpointFactory.mjs +3 -2
- package/dist/endpoints/HonoEndpointAdaptor.cjs +2 -2
- package/dist/endpoints/HonoEndpointAdaptor.d.cts +4 -4
- package/dist/endpoints/HonoEndpointAdaptor.d.mts +9 -9
- package/dist/endpoints/HonoEndpointAdaptor.mjs +2 -2
- package/dist/endpoints/TestEndpointAdaptor.cjs +2 -2
- package/dist/endpoints/TestEndpointAdaptor.d.cts +4 -4
- package/dist/endpoints/TestEndpointAdaptor.d.mts +9 -9
- package/dist/endpoints/TestEndpointAdaptor.mjs +2 -2
- package/dist/endpoints/audit.d.cts +3 -3
- package/dist/endpoints/audit.d.mts +8 -8
- package/dist/endpoints/helpers.d.cts +3 -3
- package/dist/endpoints/helpers.d.mts +8 -8
- package/dist/endpoints/index.cjs +3 -2
- package/dist/endpoints/index.cjs.map +1 -1
- package/dist/endpoints/index.d.cts +7 -7
- package/dist/endpoints/index.d.mts +12 -12
- package/dist/endpoints/index.mjs +3 -2
- package/dist/endpoints/index.mjs.map +1 -1
- package/dist/endpoints/processAudits.cjs +1 -1
- package/dist/endpoints/processAudits.d.cts +25 -6
- package/dist/endpoints/processAudits.d.mts +30 -11
- package/dist/endpoints/processAudits.mjs +1 -1
- package/dist/functions/AWSLambdaFunction.d.mts +4 -4
- package/dist/functions/BaseFunctionBuilder.d.mts +2 -2
- package/dist/functions/Function.d.mts +2 -2
- package/dist/functions/FunctionBuilder.d.mts +4 -4
- package/dist/functions/FunctionExecutionWrapper.d.mts +3 -3
- package/dist/functions/TestFunctionAdaptor.d.mts +2 -2
- package/dist/functions/index.d.cts +1 -1
- package/dist/functions/index.d.mts +5 -5
- package/dist/{index-IoTEI3As.d.mts → index-9gJrM7Rw.d.mts} +2 -2
- package/dist/index-Ceo-GuhJ.d.cts +10 -0
- package/dist/index.d.mts +2 -2
- package/dist/{processAudits-BFokHhCO.cjs → processAudits-CzHkPokQ.cjs} +13 -7
- package/dist/processAudits-CzHkPokQ.cjs.map +1 -0
- package/dist/{processAudits-DfcB-X-4.mjs → processAudits-Dj8UGqcW.mjs} +13 -7
- package/dist/processAudits-Dj8UGqcW.mjs.map +1 -0
- package/dist/publisher.d.mts +1 -1
- package/dist/subscribers/AWSLambdaSubscriberAdaptor.d.mts +3 -3
- package/dist/subscribers/Subscriber.cjs +1 -1
- package/dist/subscribers/Subscriber.d.mts +2 -2
- package/dist/subscribers/Subscriber.mjs +1 -1
- package/dist/subscribers/SubscriberBuilder.cjs +2 -2
- package/dist/subscribers/SubscriberBuilder.d.mts +3 -3
- package/dist/subscribers/SubscriberBuilder.mjs +2 -2
- package/dist/subscribers/index.cjs +2 -2
- package/dist/subscribers/index.d.cts +2 -2
- package/dist/subscribers/index.d.mts +5 -5
- package/dist/subscribers/index.mjs +2 -2
- package/dist/{types-DKf0juBf.d.mts → types-Cy1IhmUB.d.mts} +1 -1
- package/dist/types.d.mts +1 -1
- package/package.json +6 -6
- package/src/endpoints/AmazonApiGatewayEndpointAdaptor.ts +2 -0
- package/src/endpoints/Authorizer.ts +119 -1
- package/src/endpoints/EndpointBuilder.ts +24 -4
- package/src/endpoints/EndpointFactory.ts +215 -22
- package/src/endpoints/HonoEndpointAdaptor.ts +2 -0
- package/src/endpoints/TestEndpointAdaptor.ts +2 -0
- package/src/endpoints/__tests__/EndpointFactory.authorizers.spec.ts +141 -0
- package/src/endpoints/processAudits.ts +39 -16
- package/dist/Authorizer-BTmly8ps.d.cts +0 -29
- package/dist/Authorizer-pmPvIVgv.d.mts +0 -29
- package/dist/EndpointBuilder-B5QPf5Wd.mjs.map +0 -1
- package/dist/EndpointBuilder-DrJbIf3Z.cjs.map +0 -1
- package/dist/EndpointFactory-CSeDcWYn.cjs.map +0 -1
- package/dist/EndpointFactory-DNwMexc7.mjs.map +0 -1
- package/dist/endpoints/Authorizer.cjs.map +0 -1
- package/dist/endpoints/Authorizer.mjs.map +0 -1
- package/dist/index-C6vCFivC.d.cts +0 -10
- package/dist/processAudits-BFokHhCO.cjs.map +0 -1
- package/dist/processAudits-DfcB-X-4.mjs.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { HttpMethod } from "./types-
|
|
2
|
-
import { BaseFunctionBuilder } from "./BaseFunctionBuilder-
|
|
3
|
-
import { Authorizer } from "./Authorizer-
|
|
4
|
-
import { ActorExtractor, AuthorizeFn, Endpoint, EndpointHandler, EndpointSchemas, MappedAudit, SessionFn, SuccessStatus } from "./Endpoint-
|
|
1
|
+
import { HttpMethod } from "./types-Cy1IhmUB.mjs";
|
|
2
|
+
import { BaseFunctionBuilder } from "./BaseFunctionBuilder-Oc2xmxmg.mjs";
|
|
3
|
+
import { Authorizer, SecurityScheme } from "./Authorizer-D1w7MpK6.mjs";
|
|
4
|
+
import { ActorExtractor, AuthorizeFn, Endpoint, EndpointHandler, EndpointSchemas, MappedAudit, SessionFn, SuccessStatus } from "./Endpoint-DoY1Owv2.mjs";
|
|
5
5
|
import { Service } from "@geekmidas/services";
|
|
6
6
|
import { AuditStorage, AuditableAction, ExtractStorageAuditAction } from "@geekmidas/audit";
|
|
7
7
|
import { RateLimitConfig } from "@geekmidas/rate-limit";
|
|
@@ -25,6 +25,7 @@ declare class EndpointBuilder<TRoute extends string, TMethod extends HttpMethod,
|
|
|
25
25
|
_authorizerName?: TAuthorizers[number];
|
|
26
26
|
_actorExtractor?: ActorExtractor<TServices, TSession, TLogger>;
|
|
27
27
|
_audits: MappedAudit<TAuditAction, OutSchema>[];
|
|
28
|
+
_customSecuritySchemes: Record<string, SecurityScheme>;
|
|
28
29
|
constructor(route: TRoute, method: TMethod);
|
|
29
30
|
_setPublisher(publisher: Service<TEventPublisherServiceName, TEventPublisher>): void;
|
|
30
31
|
_setAuditorStorage(storage: Service<TAuditStorageServiceName, TAuditStorage>): void;
|
|
@@ -102,4 +103,4 @@ declare class EndpointBuilder<TRoute extends string, TMethod extends HttpMethod,
|
|
|
102
103
|
}
|
|
103
104
|
//#endregion
|
|
104
105
|
export { EndpointBuilder };
|
|
105
|
-
//# sourceMappingURL=EndpointBuilder-
|
|
106
|
+
//# sourceMappingURL=EndpointBuilder-BJRkivxQ.d.mts.map
|
|
@@ -2,6 +2,7 @@ const require_chunk = require('./chunk-CUT6urMc.cjs');
|
|
|
2
2
|
const require_Construct = require('./Construct-BYSPikVm.cjs');
|
|
3
3
|
const require_BaseFunctionBuilder = require('./BaseFunctionBuilder-C5Se7pdL.cjs');
|
|
4
4
|
const require_Endpoint = require('./Endpoint-CA-byrDr.cjs');
|
|
5
|
+
const require_Authorizer = require('./Authorizer-C0ge_tc8.cjs');
|
|
5
6
|
const lodash_uniqby = require_chunk.__toESM(require("lodash.uniqby"));
|
|
6
7
|
|
|
7
8
|
//#region src/endpoints/EndpointBuilder.ts
|
|
@@ -18,6 +19,7 @@ var EndpointBuilder = class extends require_BaseFunctionBuilder.BaseFunctionBuil
|
|
|
18
19
|
_authorizerName;
|
|
19
20
|
_actorExtractor;
|
|
20
21
|
_audits = [];
|
|
22
|
+
_customSecuritySchemes = {};
|
|
21
23
|
constructor(route, method) {
|
|
22
24
|
super(require_Construct.ConstructType.Endpoint);
|
|
23
25
|
this.route = route;
|
|
@@ -161,7 +163,18 @@ var EndpointBuilder = class extends require_BaseFunctionBuilder.BaseFunctionBuil
|
|
|
161
163
|
throw new Error("EndpointBuilder does not support generic input. Use body(), query(), or params() instead.");
|
|
162
164
|
}
|
|
163
165
|
handle(fn) {
|
|
164
|
-
|
|
166
|
+
let authorizer;
|
|
167
|
+
if (this._authorizerName) {
|
|
168
|
+
const existingAuthorizer = this._availableAuthorizers.find((a) => a.name === this._authorizerName);
|
|
169
|
+
if (existingAuthorizer) authorizer = existingAuthorizer;
|
|
170
|
+
else {
|
|
171
|
+
const securityScheme = require_Authorizer.getSecurityScheme(this._authorizerName, this._customSecuritySchemes);
|
|
172
|
+
authorizer = {
|
|
173
|
+
name: this._authorizerName,
|
|
174
|
+
securityScheme
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
}
|
|
165
178
|
return new require_Endpoint.Endpoint({
|
|
166
179
|
fn,
|
|
167
180
|
method: this.method,
|
|
@@ -196,4 +209,4 @@ Object.defineProperty(exports, 'EndpointBuilder', {
|
|
|
196
209
|
return EndpointBuilder;
|
|
197
210
|
}
|
|
198
211
|
});
|
|
199
|
-
//# sourceMappingURL=EndpointBuilder-
|
|
212
|
+
//# sourceMappingURL=EndpointBuilder-Bhyft7WY.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EndpointBuilder-Bhyft7WY.cjs","names":["BaseFunctionBuilder","route: TRoute","method: TMethod","ConstructType","publisher: Service<TEventPublisherServiceName, TEventPublisher>","storage: Service<TAuditStorageServiceName, TAuditStorage>","service: Service<TDatabaseServiceName, TDatabase>","description: string","status: SuccessStatus","event: TEvent","tags: string[]","memorySize: number","publisher: Service<TName, T>","schema: T","config: RateLimitConfig","name: TAuthorizers[number] | 'none'","services: T","logger: T","storage: Service<TName, T>","extractor: ActorExtractor<TServices, TSession, TLogger>","audits: MappedAudit<TAuditAction, OutSchema>[]","service: Service<TName, T>","_schema: any","fn: EndpointHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >","authorizer: Authorizer | undefined","Endpoint"],"sources":["../src/endpoints/EndpointBuilder.ts"],"sourcesContent":["import type {\n AuditStorage,\n AuditableAction,\n ExtractStorageAuditAction,\n} from '@geekmidas/audit';\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport type { RateLimitConfig } from '@geekmidas/rate-limit';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { ConstructType } from '../Construct';\nimport { BaseFunctionBuilder } from '../functions';\nimport type { HttpMethod } from '../types';\nimport type { Authorizer, SecurityScheme } from './Authorizer';\nimport { getSecurityScheme } from './Authorizer';\nimport { Endpoint, type EndpointSchemas } from './Endpoint';\nimport type {\n AuthorizeFn,\n EndpointHandler,\n SessionFn,\n SuccessStatus,\n} from './Endpoint';\nimport type { ActorExtractor, MappedAudit } from './audit';\n\nexport class EndpointBuilder<\n TRoute extends string,\n TMethod extends HttpMethod,\n TInput extends EndpointSchemas = {},\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TAuthorizers extends readonly string[] = readonly string[],\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TAuditAction extends AuditableAction<string, unknown> = AuditableAction<\n string,\n unknown\n >,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n> extends BaseFunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName\n> {\n protected schemas: TInput = {} as TInput;\n protected _description?: string;\n protected _status?: SuccessStatus;\n protected _tags?: string[];\n protected _memorySize?: number;\n _getSession: SessionFn<TServices, TLogger, TSession, TDatabase> = () =>\n ({}) as TSession;\n _authorize: AuthorizeFn<TServices, TLogger, TSession> = () => true;\n _rateLimit?: RateLimitConfig;\n _availableAuthorizers: Authorizer[] = [];\n _authorizerName?: TAuthorizers[number];\n _actorExtractor?: ActorExtractor<TServices, TSession, TLogger>;\n _audits: MappedAudit<TAuditAction, OutSchema>[] = [];\n _customSecuritySchemes: Record<string, SecurityScheme> = {};\n\n constructor(\n readonly route: TRoute,\n readonly method: TMethod,\n ) {\n super(ConstructType.Endpoint);\n }\n\n // Internal setter for EndpointFactory to set default publisher\n _setPublisher(\n publisher: Service<TEventPublisherServiceName, TEventPublisher>,\n ) {\n this._publisher = publisher;\n }\n\n // Internal setter for EndpointFactory to set default auditor storage\n _setAuditorStorage(\n storage: Service<TAuditStorageServiceName, TAuditStorage>,\n ) {\n this._auditorStorage = storage;\n }\n\n // Internal setter for EndpointFactory to set default database service\n _setDatabaseService(service: Service<TDatabaseServiceName, TDatabase>) {\n this._databaseService = service;\n }\n\n description(description: string): this {\n this._description = description;\n return this;\n }\n\n status(status: SuccessStatus): this {\n this._status = status;\n return this;\n }\n\n event<TEvent extends MappedEvent<TEventPublisher, OutSchema>>(\n event: TEvent,\n ): this {\n this._events.push(event);\n return this;\n }\n\n tags(tags: string[]): this {\n this._tags = tags;\n return this;\n }\n\n memorySize(memorySize: number): this {\n this._memorySize = memorySize;\n return this;\n }\n\n publisher<T extends EventPublisher<any>, TName extends string>(\n publisher: Service<TName, T>,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n T,\n TName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n this._publisher = publisher as unknown as Service<\n TEventPublisherServiceName,\n TEventPublisher\n >;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n T,\n TName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n >;\n }\n\n body<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'body'> & { body: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n this.schemas.body = schema as unknown as T;\n // @ts-ignore\n return this;\n }\n\n search<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'query'> & { query: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n this.schemas.query = schema as unknown as T;\n // @ts-ignore\n return this;\n }\n\n query<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'query'> & { query: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n return this.search(schema);\n }\n\n params<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n Omit<TInput, 'params'> & { params: T },\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n this.schemas.params = schema as unknown as T;\n // @ts-ignore\n return this;\n }\n\n rateLimit(config: RateLimitConfig): this {\n this._rateLimit = config;\n return this;\n }\n\n authorizer(\n name: TAuthorizers[number] | 'none',\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n // Special case: 'none' explicitly marks endpoint as having no authorizer\n if (name === 'none') {\n this._authorizerName = undefined;\n return this;\n }\n\n // Validate that the authorizer exists in available authorizers\n const authorizerExists = this._availableAuthorizers.some(\n (a) => a.name === name,\n );\n if (!authorizerExists && this._availableAuthorizers.length > 0) {\n const available = this._availableAuthorizers\n .map((a) => a.name)\n .join(', ');\n throw new Error(\n `Authorizer \"${name as string}\" not found in available authorizers: ${available}`,\n );\n }\n this._authorizerName = name;\n return this;\n }\n\n services<T extends Service[]>(\n services: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n [...TServices, ...T],\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n this._services = uniqBy(\n [...this._services, ...services],\n (s) => s.serviceName,\n ) as TServices;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n [...TServices, ...T],\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n >;\n }\n\n logger<T extends Logger>(\n logger: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n T,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n this._logger = logger as unknown as TLogger;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n T,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n >;\n }\n\n output<T extends StandardSchemaV1>(\n schema: T,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n T,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n this.outputSchema = schema as unknown as OutSchema;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n T,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n >;\n }\n\n /**\n * Set the auditor storage service for this endpoint.\n * This enables audit functionality and makes `auditor` available in the handler context.\n * The audit action type is automatically inferred from the storage's generic parameter.\n */\n auditor<T extends AuditStorage<any>, TName extends string>(\n storage: Service<TName, T>,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n T,\n TName,\n ExtractStorageAuditAction<T>,\n TDatabase,\n TDatabaseServiceName\n > {\n this._auditorStorage = storage as unknown as Service<\n TAuditStorageServiceName,\n TAuditStorage\n >;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n T,\n TName,\n ExtractStorageAuditAction<T>,\n TDatabase,\n TDatabaseServiceName\n >;\n }\n\n /**\n * Set the actor extractor function for audit records.\n * The actor is extracted from the request context and attached to all audits.\n */\n actor(\n extractor: ActorExtractor<TServices, TSession, TLogger>,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n this._actorExtractor = extractor;\n return this;\n }\n\n /**\n * Add declarative audit definitions that are processed after the handler executes.\n * Similar to `.event()` for events, but for audits.\n *\n * @example\n * ```typescript\n * .audit<AppAuditAction>([\n * {\n * type: 'user.created',\n * payload: (response) => ({ userId: response.id, email: response.email }),\n * when: (response) => response.active,\n * entityId: (response) => response.id,\n * table: 'users',\n * },\n * ])\n * ```\n */\n audit(audits: MappedAudit<TAuditAction, OutSchema>[]): this {\n this._audits = audits;\n return this;\n }\n\n /**\n * Set the database service for this endpoint.\n * The database will be available in the handler context as `db`.\n * When audit storage is configured and uses the same database,\n * `db` will automatically be the transaction for ACID compliance.\n *\n * @example\n * ```typescript\n * .database(databaseService)\n * .handle(async ({ db }) => {\n * // db is the raw database or transaction (when auditor uses same db)\n * return await db.selectFrom('users').selectAll().execute();\n * })\n * ```\n */\n database<T, TName extends string>(\n service: Service<TName, T>,\n ): EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n T,\n TName\n > {\n this._databaseService = service as unknown as Service<\n TDatabaseServiceName,\n TDatabase\n >;\n\n return this as unknown as EndpointBuilder<\n TRoute,\n TMethod,\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n T,\n TName\n >;\n }\n\n // EndpointBuilder doesn't have a generic input method - it uses body, query, params instead\n input(_schema: any): any {\n throw new Error(\n 'EndpointBuilder does not support generic input. Use body(), query(), or params() instead.',\n );\n }\n\n handle(\n fn: EndpointHandler<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TSession,\n TDatabase,\n TAuditStorage,\n TAuditAction\n >,\n ): Endpoint<\n TRoute,\n TMethod,\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n // Find authorizer metadata if name is set\n // If the authorizer name is set but not in availableAuthorizers, create a simple authorizer object\n let authorizer: Authorizer | undefined;\n if (this._authorizerName) {\n const existingAuthorizer = this._availableAuthorizers.find(\n (a) => a.name === this._authorizerName,\n );\n\n if (existingAuthorizer) {\n authorizer = existingAuthorizer;\n } else {\n // Create authorizer with security scheme if available (built-in or custom)\n const securityScheme = getSecurityScheme(\n this._authorizerName as string,\n this._customSecuritySchemes,\n );\n authorizer = {\n name: this._authorizerName as string,\n securityScheme,\n };\n }\n }\n\n return new Endpoint({\n fn,\n method: this.method,\n route: this.route,\n description: this._description,\n tags: this._tags,\n input: this.schemas,\n output: this.outputSchema,\n services: this._services,\n logger: this._logger,\n timeout: this._timeout,\n memorySize: this._memorySize,\n authorize: this._authorize,\n status: this._status,\n getSession: this._getSession,\n rateLimit: this._rateLimit,\n publisherService: this._publisher,\n events: this._events,\n authorizer,\n auditorStorageService: this._auditorStorage,\n actorExtractor: this._actorExtractor,\n audits: this._audits,\n databaseService: this._databaseService,\n });\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { HttpMethod } from "./types-Bp9ysFXd.cjs";
|
|
2
2
|
import { BaseFunctionBuilder } from "./BaseFunctionBuilder-DaQA0uKE.cjs";
|
|
3
|
-
import { Authorizer } from "./Authorizer-
|
|
4
|
-
import { ActorExtractor, AuthorizeFn, Endpoint, EndpointHandler, EndpointSchemas, MappedAudit, SessionFn, SuccessStatus } from "./Endpoint-
|
|
3
|
+
import { Authorizer, SecurityScheme } from "./Authorizer-CpSUMTIs.cjs";
|
|
4
|
+
import { ActorExtractor, AuthorizeFn, Endpoint, EndpointHandler, EndpointSchemas, MappedAudit, SessionFn, SuccessStatus } from "./Endpoint-BJPJTGjV.cjs";
|
|
5
5
|
import { AuditStorage, AuditableAction, ExtractStorageAuditAction } from "@geekmidas/audit";
|
|
6
6
|
import { EventPublisher, MappedEvent } from "@geekmidas/events";
|
|
7
7
|
import { Logger } from "@geekmidas/logger";
|
|
@@ -25,6 +25,7 @@ declare class EndpointBuilder<TRoute extends string, TMethod extends HttpMethod,
|
|
|
25
25
|
_authorizerName?: TAuthorizers[number];
|
|
26
26
|
_actorExtractor?: ActorExtractor<TServices, TSession, TLogger>;
|
|
27
27
|
_audits: MappedAudit<TAuditAction, OutSchema>[];
|
|
28
|
+
_customSecuritySchemes: Record<string, SecurityScheme>;
|
|
28
29
|
constructor(route: TRoute, method: TMethod);
|
|
29
30
|
_setPublisher(publisher: Service<TEventPublisherServiceName, TEventPublisher>): void;
|
|
30
31
|
_setAuditorStorage(storage: Service<TAuditStorageServiceName, TAuditStorage>): void;
|
|
@@ -102,4 +103,4 @@ declare class EndpointBuilder<TRoute extends string, TMethod extends HttpMethod,
|
|
|
102
103
|
}
|
|
103
104
|
//#endregion
|
|
104
105
|
export { EndpointBuilder };
|
|
105
|
-
//# sourceMappingURL=EndpointBuilder-
|
|
106
|
+
//# sourceMappingURL=EndpointBuilder-CQ-jOXsD.d.cts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EndpointBuilder } from "./EndpointBuilder-
|
|
1
|
+
import { EndpointBuilder } from "./EndpointBuilder-69uVrKZL.mjs";
|
|
2
2
|
import { ConsoleLogger } from "@geekmidas/logger/console";
|
|
3
3
|
import uniqBy from "lodash.uniqby";
|
|
4
4
|
|
|
@@ -16,7 +16,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
16
16
|
defaultAuditorStorage;
|
|
17
17
|
defaultDatabaseService;
|
|
18
18
|
defaultActorExtractor;
|
|
19
|
-
|
|
19
|
+
customSecuritySchemes = {};
|
|
20
|
+
constructor({ basePath, defaultAuthorizeFn, defaultLogger, defaultSessionExtractor, defaultServices = [], defaultEventPublisher, availableAuthorizers = [], defaultAuthorizerName, defaultAuditorStorage, defaultDatabaseService, defaultActorExtractor, customSecuritySchemes = {} } = {}) {
|
|
20
21
|
this.defaultServices = uniqBy(defaultServices, (s) => s.serviceName);
|
|
21
22
|
this.basePath = basePath || "";
|
|
22
23
|
this.defaultAuthorizeFn = defaultAuthorizeFn;
|
|
@@ -28,6 +29,7 @@ var EndpointFactory = class EndpointFactory {
|
|
|
28
29
|
this.defaultAuditorStorage = defaultAuditorStorage;
|
|
29
30
|
this.defaultDatabaseService = defaultDatabaseService;
|
|
30
31
|
this.defaultActorExtractor = defaultActorExtractor;
|
|
32
|
+
this.customSecuritySchemes = customSecuritySchemes;
|
|
31
33
|
}
|
|
32
34
|
static joinPaths(path, basePath = "") {
|
|
33
35
|
if (!basePath && !path) return "/";
|
|
@@ -54,7 +56,76 @@ var EndpointFactory = class EndpointFactory {
|
|
|
54
56
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
55
57
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
56
58
|
defaultDatabaseService: this.defaultDatabaseService,
|
|
57
|
-
defaultActorExtractor: this.defaultActorExtractor
|
|
59
|
+
defaultActorExtractor: this.defaultActorExtractor,
|
|
60
|
+
customSecuritySchemes: this.customSecuritySchemes
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Define custom security schemes for this factory.
|
|
65
|
+
* These extend the built-in schemes (jwt, bearer, apiKey, oauth2, oidc).
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```typescript
|
|
69
|
+
* const router = e.securitySchemes({
|
|
70
|
+
* awsIamSigV4: {
|
|
71
|
+
* type: 'apiKey',
|
|
72
|
+
* in: 'header',
|
|
73
|
+
* name: 'Authorization',
|
|
74
|
+
* 'x-amazon-apigateway-authtype': 'awsSigv4',
|
|
75
|
+
* },
|
|
76
|
+
* });
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
securitySchemes(schemes) {
|
|
80
|
+
return new EndpointFactory({
|
|
81
|
+
defaultServices: this.defaultServices,
|
|
82
|
+
basePath: this.basePath,
|
|
83
|
+
defaultAuthorizeFn: this.defaultAuthorizeFn,
|
|
84
|
+
defaultLogger: this.defaultLogger,
|
|
85
|
+
defaultSessionExtractor: this.defaultSessionExtractor,
|
|
86
|
+
defaultEventPublisher: this.defaultEventPublisher,
|
|
87
|
+
availableAuthorizers: this.availableAuthorizers,
|
|
88
|
+
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
89
|
+
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
90
|
+
defaultDatabaseService: this.defaultDatabaseService,
|
|
91
|
+
defaultActorExtractor: this.defaultActorExtractor,
|
|
92
|
+
customSecuritySchemes: {
|
|
93
|
+
...this.customSecuritySchemes,
|
|
94
|
+
...schemes
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Set the default authorizer for all endpoints created from this factory.
|
|
100
|
+
* Individual endpoints can override this by calling `.authorizer()` on the builder.
|
|
101
|
+
* Use `'none'` to explicitly disable authorization for all endpoints.
|
|
102
|
+
*
|
|
103
|
+
* Accepts:
|
|
104
|
+
* - Built-in security scheme names: 'jwt', 'bearer', 'apiKey', 'oauth2', 'oidc'
|
|
105
|
+
* - Custom security scheme names defined via `.securitySchemes()`
|
|
106
|
+
* - 'none' to disable authorization
|
|
107
|
+
*/
|
|
108
|
+
authorizer(name) {
|
|
109
|
+
if (name !== "none" && this.availableAuthorizers.length > 0) {
|
|
110
|
+
const authorizerExists = this.availableAuthorizers.some((a) => a.name === name);
|
|
111
|
+
if (!authorizerExists) {
|
|
112
|
+
const available = this.availableAuthorizers.map((a) => a.name).join(", ");
|
|
113
|
+
throw new Error(`Authorizer "${name}" not found in available authorizers: ${available}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return new EndpointFactory({
|
|
117
|
+
defaultServices: this.defaultServices,
|
|
118
|
+
basePath: this.basePath,
|
|
119
|
+
defaultAuthorizeFn: this.defaultAuthorizeFn,
|
|
120
|
+
defaultLogger: this.defaultLogger,
|
|
121
|
+
defaultSessionExtractor: this.defaultSessionExtractor,
|
|
122
|
+
defaultEventPublisher: this.defaultEventPublisher,
|
|
123
|
+
availableAuthorizers: this.availableAuthorizers,
|
|
124
|
+
defaultAuthorizerName: name === "none" ? void 0 : name,
|
|
125
|
+
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
126
|
+
defaultDatabaseService: this.defaultDatabaseService,
|
|
127
|
+
defaultActorExtractor: this.defaultActorExtractor,
|
|
128
|
+
customSecuritySchemes: this.customSecuritySchemes
|
|
58
129
|
});
|
|
59
130
|
}
|
|
60
131
|
route(path) {
|
|
@@ -70,7 +141,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
70
141
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
71
142
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
72
143
|
defaultDatabaseService: this.defaultDatabaseService,
|
|
73
|
-
defaultActorExtractor: this.defaultActorExtractor
|
|
144
|
+
defaultActorExtractor: this.defaultActorExtractor,
|
|
145
|
+
customSecuritySchemes: this.customSecuritySchemes
|
|
74
146
|
});
|
|
75
147
|
}
|
|
76
148
|
authorize(fn) {
|
|
@@ -85,7 +157,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
85
157
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
86
158
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
87
159
|
defaultDatabaseService: this.defaultDatabaseService,
|
|
88
|
-
defaultActorExtractor: this.defaultActorExtractor
|
|
160
|
+
defaultActorExtractor: this.defaultActorExtractor,
|
|
161
|
+
customSecuritySchemes: this.customSecuritySchemes
|
|
89
162
|
});
|
|
90
163
|
}
|
|
91
164
|
services(services) {
|
|
@@ -100,7 +173,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
100
173
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
101
174
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
102
175
|
defaultDatabaseService: this.defaultDatabaseService,
|
|
103
|
-
defaultActorExtractor: this.defaultActorExtractor
|
|
176
|
+
defaultActorExtractor: this.defaultActorExtractor,
|
|
177
|
+
customSecuritySchemes: this.customSecuritySchemes
|
|
104
178
|
});
|
|
105
179
|
}
|
|
106
180
|
logger(logger) {
|
|
@@ -115,7 +189,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
115
189
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
116
190
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
117
191
|
defaultDatabaseService: this.defaultDatabaseService,
|
|
118
|
-
defaultActorExtractor: this.defaultActorExtractor
|
|
192
|
+
defaultActorExtractor: this.defaultActorExtractor,
|
|
193
|
+
customSecuritySchemes: this.customSecuritySchemes
|
|
119
194
|
});
|
|
120
195
|
}
|
|
121
196
|
publisher(publisher) {
|
|
@@ -130,7 +205,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
130
205
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
131
206
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
132
207
|
defaultDatabaseService: this.defaultDatabaseService,
|
|
133
|
-
defaultActorExtractor: this.defaultActorExtractor
|
|
208
|
+
defaultActorExtractor: this.defaultActorExtractor,
|
|
209
|
+
customSecuritySchemes: this.customSecuritySchemes
|
|
134
210
|
});
|
|
135
211
|
}
|
|
136
212
|
session(session) {
|
|
@@ -145,7 +221,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
145
221
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
146
222
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
147
223
|
defaultDatabaseService: this.defaultDatabaseService,
|
|
148
|
-
defaultActorExtractor: this.defaultActorExtractor
|
|
224
|
+
defaultActorExtractor: this.defaultActorExtractor,
|
|
225
|
+
customSecuritySchemes: this.customSecuritySchemes
|
|
149
226
|
});
|
|
150
227
|
}
|
|
151
228
|
/**
|
|
@@ -163,7 +240,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
163
240
|
availableAuthorizers: this.availableAuthorizers,
|
|
164
241
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
165
242
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
166
|
-
defaultDatabaseService: service
|
|
243
|
+
defaultDatabaseService: service,
|
|
244
|
+
customSecuritySchemes: this.customSecuritySchemes
|
|
167
245
|
});
|
|
168
246
|
}
|
|
169
247
|
/**
|
|
@@ -183,7 +261,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
183
261
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
184
262
|
defaultAuditorStorage: storage,
|
|
185
263
|
defaultDatabaseService: this.defaultDatabaseService,
|
|
186
|
-
defaultActorExtractor: this.defaultActorExtractor
|
|
264
|
+
defaultActorExtractor: this.defaultActorExtractor,
|
|
265
|
+
customSecuritySchemes: this.customSecuritySchemes
|
|
187
266
|
});
|
|
188
267
|
}
|
|
189
268
|
/**
|
|
@@ -202,7 +281,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
202
281
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
203
282
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
204
283
|
defaultDatabaseService: this.defaultDatabaseService,
|
|
205
|
-
defaultActorExtractor: extractor
|
|
284
|
+
defaultActorExtractor: extractor,
|
|
285
|
+
customSecuritySchemes: this.customSecuritySchemes
|
|
206
286
|
});
|
|
207
287
|
}
|
|
208
288
|
createBuilder(method, path) {
|
|
@@ -218,6 +298,7 @@ var EndpointFactory = class EndpointFactory {
|
|
|
218
298
|
if (this.defaultAuditorStorage) builder._setAuditorStorage(this.defaultAuditorStorage);
|
|
219
299
|
if (this.defaultDatabaseService) builder._setDatabaseService(this.defaultDatabaseService);
|
|
220
300
|
if (this.defaultActorExtractor) builder._actorExtractor = this.defaultActorExtractor;
|
|
301
|
+
builder._customSecuritySchemes = this.customSecuritySchemes;
|
|
221
302
|
return builder;
|
|
222
303
|
}
|
|
223
304
|
post(path) {
|
|
@@ -243,4 +324,4 @@ const e = new EndpointFactory();
|
|
|
243
324
|
|
|
244
325
|
//#endregion
|
|
245
326
|
export { EndpointFactory, e };
|
|
246
|
-
//# sourceMappingURL=EndpointFactory-
|
|
327
|
+
//# sourceMappingURL=EndpointFactory-ARUlRlyM.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EndpointFactory-ARUlRlyM.mjs","names":["DEFAULT_LOGGER","path: P","basePath: TBasePath","authorizers: T","schemes: T","name:\n | BuiltInSecuritySchemeId\n | keyof TSecuritySchemes\n | TAuthorizers[number]\n | 'none'","path: TPath","fn: AuthorizeFn<TServices, TLogger, TSession>","services: S","logger: L","publisher: Service<TServiceName, T>","session: SessionFn<TServices, TLogger, T, TDatabase>","service: Service<TName, T>","storage: Service<TName, T>","extractor: ActorExtractor<TServices, TSession, TLogger>","method: TMethod"],"sources":["../src/endpoints/EndpointFactory.ts"],"sourcesContent":["import type {\n AuditStorage,\n AuditableAction,\n ExtractStorageAuditAction,\n} from '@geekmidas/audit';\nimport type { EventPublisher, MappedEvent } from '@geekmidas/events';\nimport type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type { Service } from '@geekmidas/services';\nimport uniqBy from 'lodash.uniqby';\nimport type { HttpMethod } from '../types';\nimport type {\n Authorizer,\n BuiltInSecuritySchemeId,\n SecurityScheme,\n} from './Authorizer';\nimport type { AuthorizeFn, SessionFn } from './Endpoint';\nimport { EndpointBuilder } from './EndpointBuilder';\nimport type { ActorExtractor } from './audit';\n\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\nexport class EndpointFactory<\n TServices extends Service[] = [],\n TBasePath extends string = '',\n TLogger extends Logger = Logger,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TAuthorizers extends readonly string[] = readonly string[],\n TAuditStorage extends AuditStorage<any> | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TAuditAction extends AuditableAction<\n string,\n unknown\n > = ExtractStorageAuditAction<NonNullable<TAuditStorage>>,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n TSecuritySchemes extends Record<string, SecurityScheme> = Record<\n string,\n SecurityScheme\n >,\n> {\n // @ts-ignore\n private defaultServices: TServices;\n private basePath: TBasePath = '' as TBasePath;\n private defaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;\n private defaultEventPublisher:\n | Service<TEventPublisherServiceName, TEventPublisher>\n | undefined;\n private defaultSessionExtractor?: SessionFn<\n TServices,\n TLogger,\n TSession,\n TDatabase\n >;\n private defaultLogger: TLogger = DEFAULT_LOGGER;\n private availableAuthorizers: Authorizer[] = [];\n private defaultAuthorizerName?: TAuthorizers[number];\n private defaultAuditorStorage:\n | Service<TAuditStorageServiceName, TAuditStorage>\n | undefined;\n private defaultDatabaseService:\n | Service<TDatabaseServiceName, TDatabase>\n | undefined;\n private defaultActorExtractor?: ActorExtractor<TServices, TSession, TLogger>;\n private customSecuritySchemes: TSecuritySchemes = {} as TSecuritySchemes;\n\n constructor({\n basePath,\n defaultAuthorizeFn,\n defaultLogger,\n defaultSessionExtractor,\n // @ts-ignore\n defaultServices = [] as TServices,\n defaultEventPublisher,\n availableAuthorizers = [],\n defaultAuthorizerName,\n defaultAuditorStorage,\n defaultDatabaseService,\n defaultActorExtractor,\n customSecuritySchemes = {} as TSecuritySchemes,\n }: EndpointFactoryOptions<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n > = {}) {\n // Initialize default services\n this.defaultServices = uniqBy(\n defaultServices,\n (s) => s.serviceName,\n ) as TServices;\n\n this.basePath = basePath || ('' as TBasePath);\n this.defaultAuthorizeFn = defaultAuthorizeFn;\n this.defaultLogger = defaultLogger || (DEFAULT_LOGGER as TLogger);\n this.defaultSessionExtractor = defaultSessionExtractor;\n this.defaultEventPublisher = defaultEventPublisher;\n this.availableAuthorizers = availableAuthorizers;\n this.defaultAuthorizerName = defaultAuthorizerName;\n this.defaultAuditorStorage = defaultAuditorStorage;\n this.defaultDatabaseService = defaultDatabaseService;\n this.defaultActorExtractor = defaultActorExtractor;\n this.customSecuritySchemes = customSecuritySchemes;\n }\n\n static joinPaths<TBasePath extends string, P extends string>(\n path: P,\n basePath: TBasePath = '' as TBasePath,\n ): JoinPaths<TBasePath, P> {\n // Handle empty cases\n if (!basePath && !path) return '/' as JoinPaths<TBasePath, P>;\n if (!basePath)\n return (path.startsWith('/') ? path : '/' + path) as JoinPaths<\n TBasePath,\n P\n >;\n if (!path)\n return (\n basePath.startsWith('/') ? basePath : '/' + basePath\n ) as JoinPaths<TBasePath, P>;\n\n const base = basePath.endsWith('/') ? basePath.slice(0, -1) : basePath;\n const segment = path.startsWith('/') ? path : '/' + path;\n\n let result = base + segment;\n\n // Ensure leading slash\n if (!result.startsWith('/')) {\n result = '/' + result;\n }\n\n // Normalize multiple slashes (except in the middle of the path where they might be intentional)\n result = result.replace(/^\\/+/g, '/');\n\n // Remove trailing slash unless it's the root path \"/\"\n if (result.length > 1 && result.endsWith('/')) {\n result = result.slice(0, -1);\n }\n\n return result as JoinPaths<TBasePath, P>;\n }\n\n // Configure available authorizers\n authorizers<const T extends readonly string[]>(\n authorizers: T,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n T,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n > {\n const authorizerConfigs = authorizers.map((name) => ({\n name,\n }));\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n T,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: authorizerConfigs,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: this.customSecuritySchemes,\n });\n }\n\n /**\n * Define custom security schemes for this factory.\n * These extend the built-in schemes (jwt, bearer, apiKey, oauth2, oidc).\n *\n * @example\n * ```typescript\n * const router = e.securitySchemes({\n * awsIamSigV4: {\n * type: 'apiKey',\n * in: 'header',\n * name: 'Authorization',\n * 'x-amazon-apigateway-authtype': 'awsSigv4',\n * },\n * });\n * ```\n */\n securitySchemes<T extends Record<string, SecurityScheme>>(\n schemes: T,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes & T\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes & T\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: {\n ...this.customSecuritySchemes,\n ...schemes,\n } as TSecuritySchemes & T,\n });\n }\n\n /**\n * Set the default authorizer for all endpoints created from this factory.\n * Individual endpoints can override this by calling `.authorizer()` on the builder.\n * Use `'none'` to explicitly disable authorization for all endpoints.\n *\n * Accepts:\n * - Built-in security scheme names: 'jwt', 'bearer', 'apiKey', 'oauth2', 'oidc'\n * - Custom security scheme names defined via `.securitySchemes()`\n * - 'none' to disable authorization\n */\n authorizer(\n name:\n | BuiltInSecuritySchemeId\n | keyof TSecuritySchemes\n | TAuthorizers[number]\n | 'none',\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n > {\n // Validate that the authorizer exists in available authorizers (if authorizers() was called)\n if (name !== 'none' && this.availableAuthorizers.length > 0) {\n const authorizerExists = this.availableAuthorizers.some(\n (a) => a.name === name,\n );\n if (!authorizerExists) {\n const available = this.availableAuthorizers\n .map((a) => a.name)\n .join(', ');\n throw new Error(\n `Authorizer \"${name as string}\" not found in available authorizers: ${available}`,\n );\n }\n }\n\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName:\n name === 'none' ? undefined : (name as TAuthorizers[number]),\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: this.customSecuritySchemes,\n });\n }\n\n // Create a sub-router with a path prefix\n route<TPath extends string>(\n path: TPath,\n ): EndpointFactory<\n TServices,\n JoinPaths<TBasePath, TPath>,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n > {\n const newBasePath = EndpointFactory.joinPaths(path, this.basePath);\n return new EndpointFactory<\n TServices,\n JoinPaths<TBasePath, TPath>,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n >({\n defaultServices: this.defaultServices,\n basePath: newBasePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: this.customSecuritySchemes,\n });\n }\n\n // Create a new factory with authorization\n authorize(\n fn: AuthorizeFn<TServices, TLogger, TSession>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: fn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: this.customSecuritySchemes,\n });\n }\n\n // Create a new factory with services\n services<S extends Service[]>(\n services: S,\n ): EndpointFactory<\n [...S, ...TServices],\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n > {\n return new EndpointFactory<\n [...S, ...TServices],\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n >({\n defaultServices: [...services, ...this.defaultServices],\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: this.customSecuritySchemes,\n });\n }\n\n logger<L extends Logger>(\n logger: L,\n ): EndpointFactory<\n TServices,\n TBasePath,\n L,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n L,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn as unknown as AuthorizeFn<\n TServices,\n L,\n TSession\n >,\n defaultLogger: logger,\n defaultSessionExtractor: this\n .defaultSessionExtractor as unknown as SessionFn<\n TServices,\n L,\n TSession\n >,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this\n .defaultActorExtractor as unknown as ActorExtractor<\n TServices,\n TSession,\n L\n >,\n customSecuritySchemes: this.customSecuritySchemes,\n });\n }\n\n publisher<\n T extends EventPublisher<any>,\n TServiceName extends string = string,\n >(\n publisher: Service<TServiceName, T>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n T,\n TServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n T,\n TServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: publisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this.defaultActorExtractor,\n customSecuritySchemes: this.customSecuritySchemes,\n });\n }\n\n session<T>(\n session: SessionFn<TServices, TLogger, T, TDatabase>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n T,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n T,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn as unknown as AuthorizeFn<\n TServices,\n TLogger,\n T\n >,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: session,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this\n .defaultActorExtractor as unknown as ActorExtractor<\n TServices,\n T,\n TLogger\n >,\n customSecuritySchemes: this.customSecuritySchemes,\n });\n }\n\n /**\n * Set the database service for endpoints created from this factory.\n * The database will be available in handler context as `db`.\n */\n database<T, TName extends string>(\n service: Service<TName, T>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n T,\n TName,\n TSecuritySchemes\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n T,\n TName,\n TSecuritySchemes\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n // Reset session extractor when database changes - user should call .session() after .database()\n // to get proper type inference for the new database type\n defaultSessionExtractor: this.defaultSessionExtractor as unknown as\n | SessionFn<TServices, TLogger, TSession, T>\n | undefined,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: service,\n customSecuritySchemes: this.customSecuritySchemes,\n });\n }\n\n /**\n * Set the auditor storage service for endpoints created from this factory.\n * This enables audit functionality and makes `auditor` available in handler context.\n * The audit action type is automatically inferred from the storage's generic parameter.\n */\n auditor<T extends AuditStorage<any>, TName extends string>(\n storage: Service<TName, T>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n T,\n TName,\n ExtractStorageAuditAction<T>,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n T,\n TName,\n ExtractStorageAuditAction<T>,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: storage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: this\n .defaultActorExtractor as unknown as ActorExtractor<\n TServices,\n TSession,\n TLogger\n >,\n customSecuritySchemes: this.customSecuritySchemes,\n });\n }\n\n /**\n * Set the actor extractor function for endpoints created from this factory.\n * The actor is extracted from the request context and attached to all audits.\n */\n actor(\n extractor: ActorExtractor<TServices, TSession, TLogger>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName,\n TSecuritySchemes\n >({\n defaultServices: this.defaultServices,\n basePath: this.basePath,\n defaultAuthorizeFn: this.defaultAuthorizeFn,\n defaultLogger: this.defaultLogger,\n defaultSessionExtractor: this.defaultSessionExtractor,\n defaultEventPublisher: this.defaultEventPublisher,\n availableAuthorizers: this.availableAuthorizers,\n defaultAuthorizerName: this.defaultAuthorizerName,\n defaultAuditorStorage: this.defaultAuditorStorage,\n defaultDatabaseService: this.defaultDatabaseService,\n defaultActorExtractor: extractor,\n customSecuritySchemes: this.customSecuritySchemes,\n });\n }\n\n private createBuilder<TMethod extends HttpMethod, TPath extends string>(\n method: TMethod,\n path: TPath,\n ): EndpointBuilder<\n JoinPaths<TBasePath, TPath>,\n TMethod,\n {},\n TServices,\n TLogger,\n undefined,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n > {\n const fullPath = EndpointFactory.joinPaths(path, this.basePath);\n const builder = new EndpointBuilder<\n JoinPaths<TBasePath, TPath>,\n TMethod,\n {},\n TServices,\n TLogger,\n undefined,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TAuditAction,\n TDatabase,\n TDatabaseServiceName\n >(fullPath, method);\n\n if (this.defaultAuthorizeFn) {\n // @ts-ignore\n builder._authorize = this.defaultAuthorizeFn;\n }\n if (this.defaultServices.length) {\n // Create a copy to avoid sharing references between builders\n builder._services = [...this.defaultServices] as TServices;\n }\n\n if (this.defaultLogger) {\n builder._logger = this.defaultLogger as TLogger;\n }\n\n if (this.defaultSessionExtractor) {\n builder._getSession = this.defaultSessionExtractor as SessionFn<\n TServices,\n TLogger,\n TSession\n >;\n }\n\n if (this.defaultEventPublisher) {\n builder._setPublisher(this.defaultEventPublisher);\n }\n\n // Set available authorizers and default\n builder._availableAuthorizers = this.availableAuthorizers;\n if (this.defaultAuthorizerName) {\n builder._authorizerName = this.defaultAuthorizerName;\n }\n\n // Set auditor storage if configured\n if (this.defaultAuditorStorage) {\n builder._setAuditorStorage(this.defaultAuditorStorage as any);\n }\n\n // Set database service if configured\n if (this.defaultDatabaseService) {\n builder._setDatabaseService(this.defaultDatabaseService as any);\n }\n\n // Set actor extractor if configured\n if (this.defaultActorExtractor) {\n builder._actorExtractor = this.defaultActorExtractor;\n }\n\n // Set custom security schemes\n builder._customSecuritySchemes = this.customSecuritySchemes;\n\n return builder;\n }\n\n post<TPath extends string>(path: TPath) {\n return this.createBuilder('POST', path);\n }\n\n get<TPath extends string>(path: TPath) {\n return this.createBuilder('GET', path);\n }\n\n put<TPath extends string>(path: TPath) {\n return this.createBuilder('PUT', path);\n }\n\n delete<TPath extends string>(path: TPath) {\n return this.createBuilder('DELETE', path);\n }\n\n patch<TPath extends string>(path: TPath) {\n return this.createBuilder('PATCH', path);\n }\n\n options<TPath extends string>(path: TPath) {\n return this.createBuilder('OPTIONS', path);\n }\n}\n\nexport type RemoveTrailingSlash<T extends string> = T extends `${infer Rest}/`\n ? Rest extends ''\n ? T // Keep \"/\" as is\n : Rest\n : T;\n\nexport type JoinPaths<\n TBasePath extends string,\n TPath extends string,\n> = RemoveTrailingSlash<\n TBasePath extends ''\n ? TPath\n : TPath extends ''\n ? TBasePath\n : TBasePath extends '/'\n ? TPath extends `/${string}`\n ? TPath\n : `/${TPath}`\n : TBasePath extends `${infer Base}/`\n ? TPath extends `/${infer Rest}`\n ? `${Base}/${Rest}`\n : `${Base}/${TPath}`\n : TPath extends `/${infer Rest}`\n ? `${TBasePath}/${Rest}`\n : `${TBasePath}/${TPath}`\n>;\n\nexport interface EndpointFactoryOptions<\n TServices extends Service[] = [],\n TBasePath extends string = '',\n TLogger extends Logger = Logger,\n TSession = unknown,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TAuthorizers extends readonly string[] = readonly string[],\n TAuditStorage extends AuditStorage | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n TSecuritySchemes extends Record<string, SecurityScheme> = Record<\n string,\n SecurityScheme\n >,\n> {\n defaultServices?: TServices;\n basePath?: TBasePath;\n defaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;\n defaultLogger?: TLogger;\n defaultSessionExtractor?: SessionFn<TServices, TLogger, TSession, TDatabase>;\n defaultEventPublisher?: Service<TEventPublisherServiceName, TEventPublisher>;\n defaultEvents?: MappedEvent<TEventPublisher, undefined>[];\n availableAuthorizers?: Authorizer[];\n defaultAuthorizerName?: TAuthorizers[number];\n defaultAuditorStorage?: Service<TAuditStorageServiceName, TAuditStorage>;\n defaultDatabaseService?: Service<TDatabaseServiceName, TDatabase>;\n defaultActorExtractor?: ActorExtractor<TServices, TSession, TLogger>;\n customSecuritySchemes?: TSecuritySchemes;\n}\n\nexport const e = new EndpointFactory();\n"],"mappings":"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"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { Authorizer } from "./Authorizer-
|
|
2
|
-
import { ActorExtractor, AuthorizeFn, SessionFn } from "./Endpoint-
|
|
3
|
-
import { EndpointBuilder } from "./EndpointBuilder-
|
|
1
|
+
import { Authorizer, BuiltInSecuritySchemeId, SecurityScheme } from "./Authorizer-D1w7MpK6.mjs";
|
|
2
|
+
import { ActorExtractor, AuthorizeFn, SessionFn } from "./Endpoint-DoY1Owv2.mjs";
|
|
3
|
+
import { EndpointBuilder } from "./EndpointBuilder-BJRkivxQ.mjs";
|
|
4
4
|
import { Service } from "@geekmidas/services";
|
|
5
5
|
import { AuditStorage, AuditableAction, ExtractStorageAuditAction } from "@geekmidas/audit";
|
|
6
6
|
import { EventPublisher, MappedEvent } from "@geekmidas/events";
|
|
7
7
|
import { Logger } from "@geekmidas/logger";
|
|
8
8
|
|
|
9
9
|
//#region src/endpoints/EndpointFactory.d.ts
|
|
10
|
-
declare class EndpointFactory<TServices extends Service[] = [], TBasePath extends string = '', TLogger extends Logger = Logger, TSession = unknown, TEventPublisher extends EventPublisher<any> | undefined = undefined, TEventPublisherServiceName extends string = string, TAuthorizers extends readonly string[] = readonly string[], TAuditStorage extends AuditStorage<any> | undefined = undefined, TAuditStorageServiceName extends string = string, TAuditAction extends AuditableAction<string, unknown> = ExtractStorageAuditAction<NonNullable<TAuditStorage>>, TDatabase = undefined, TDatabaseServiceName extends string = string> {
|
|
10
|
+
declare class EndpointFactory<TServices extends Service[] = [], TBasePath extends string = '', TLogger extends Logger = Logger, TSession = unknown, TEventPublisher extends EventPublisher<any> | undefined = undefined, TEventPublisherServiceName extends string = string, TAuthorizers extends readonly string[] = readonly string[], TAuditStorage extends AuditStorage<any> | undefined = undefined, TAuditStorageServiceName extends string = string, TAuditAction extends AuditableAction<string, unknown> = ExtractStorageAuditAction<NonNullable<TAuditStorage>>, TDatabase = undefined, TDatabaseServiceName extends string = string, TSecuritySchemes extends Record<string, SecurityScheme> = Record<string, SecurityScheme>> {
|
|
11
11
|
private defaultServices;
|
|
12
12
|
private basePath;
|
|
13
13
|
private defaultAuthorizeFn?;
|
|
@@ -19,6 +19,7 @@ declare class EndpointFactory<TServices extends Service[] = [], TBasePath extend
|
|
|
19
19
|
private defaultAuditorStorage;
|
|
20
20
|
private defaultDatabaseService;
|
|
21
21
|
private defaultActorExtractor?;
|
|
22
|
+
private customSecuritySchemes;
|
|
22
23
|
constructor({
|
|
23
24
|
basePath,
|
|
24
25
|
defaultAuthorizeFn,
|
|
@@ -30,32 +31,61 @@ declare class EndpointFactory<TServices extends Service[] = [], TBasePath extend
|
|
|
30
31
|
defaultAuthorizerName,
|
|
31
32
|
defaultAuditorStorage,
|
|
32
33
|
defaultDatabaseService,
|
|
33
|
-
defaultActorExtractor
|
|
34
|
-
|
|
34
|
+
defaultActorExtractor,
|
|
35
|
+
customSecuritySchemes
|
|
36
|
+
}?: EndpointFactoryOptions<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TDatabase, TDatabaseServiceName, TSecuritySchemes>);
|
|
35
37
|
static joinPaths<TBasePath extends string, P extends string>(path: P, basePath?: TBasePath): JoinPaths<TBasePath, P>;
|
|
36
|
-
authorizers<const T extends readonly string[]>(authorizers: T): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, T, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
authorizers<const T extends readonly string[]>(authorizers: T): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, T, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
|
|
39
|
+
/**
|
|
40
|
+
* Define custom security schemes for this factory.
|
|
41
|
+
* These extend the built-in schemes (jwt, bearer, apiKey, oauth2, oidc).
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* const router = e.securitySchemes({
|
|
46
|
+
* awsIamSigV4: {
|
|
47
|
+
* type: 'apiKey',
|
|
48
|
+
* in: 'header',
|
|
49
|
+
* name: 'Authorization',
|
|
50
|
+
* 'x-amazon-apigateway-authtype': 'awsSigv4',
|
|
51
|
+
* },
|
|
52
|
+
* });
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
securitySchemes<T extends Record<string, SecurityScheme>>(schemes: T): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes & T>;
|
|
56
|
+
/**
|
|
57
|
+
* Set the default authorizer for all endpoints created from this factory.
|
|
58
|
+
* Individual endpoints can override this by calling `.authorizer()` on the builder.
|
|
59
|
+
* Use `'none'` to explicitly disable authorization for all endpoints.
|
|
60
|
+
*
|
|
61
|
+
* Accepts:
|
|
62
|
+
* - Built-in security scheme names: 'jwt', 'bearer', 'apiKey', 'oauth2', 'oidc'
|
|
63
|
+
* - Custom security scheme names defined via `.securitySchemes()`
|
|
64
|
+
* - 'none' to disable authorization
|
|
65
|
+
*/
|
|
66
|
+
authorizer(name: BuiltInSecuritySchemeId | keyof TSecuritySchemes | TAuthorizers[number] | 'none'): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
|
|
67
|
+
route<TPath extends string>(path: TPath): EndpointFactory<TServices, JoinPaths<TBasePath, TPath>, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
|
|
68
|
+
authorize(fn: AuthorizeFn<TServices, TLogger, TSession>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
|
|
69
|
+
services<S extends Service[]>(services: S): EndpointFactory<[...S, ...TServices], TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
|
|
70
|
+
logger<L extends Logger>(logger: L): EndpointFactory<TServices, TBasePath, L, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
|
|
71
|
+
publisher<T extends EventPublisher<any>, TServiceName extends string = string>(publisher: Service<TServiceName, T>): EndpointFactory<TServices, TBasePath, TLogger, TSession, T, TServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
|
|
72
|
+
session<T>(session: SessionFn<TServices, TLogger, T, TDatabase>): EndpointFactory<TServices, TBasePath, TLogger, T, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
|
|
43
73
|
/**
|
|
44
74
|
* Set the database service for endpoints created from this factory.
|
|
45
75
|
* The database will be available in handler context as `db`.
|
|
46
76
|
*/
|
|
47
|
-
database<T, TName extends string>(service: Service<TName, T>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, T, TName>;
|
|
77
|
+
database<T, TName extends string>(service: Service<TName, T>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, T, TName, TSecuritySchemes>;
|
|
48
78
|
/**
|
|
49
79
|
* Set the auditor storage service for endpoints created from this factory.
|
|
50
80
|
* This enables audit functionality and makes `auditor` available in handler context.
|
|
51
81
|
* The audit action type is automatically inferred from the storage's generic parameter.
|
|
52
82
|
*/
|
|
53
|
-
auditor<T extends AuditStorage<any>, TName extends string>(storage: Service<TName, T>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, T, TName, ExtractStorageAuditAction<T>, TDatabase, TDatabaseServiceName>;
|
|
83
|
+
auditor<T extends AuditStorage<any>, TName extends string>(storage: Service<TName, T>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, T, TName, ExtractStorageAuditAction<T>, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
|
|
54
84
|
/**
|
|
55
85
|
* Set the actor extractor function for endpoints created from this factory.
|
|
56
86
|
* The actor is extracted from the request context and attached to all audits.
|
|
57
87
|
*/
|
|
58
|
-
actor(extractor: ActorExtractor<TServices, TSession, TLogger>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
|
|
88
|
+
actor(extractor: ActorExtractor<TServices, TSession, TLogger>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName, TSecuritySchemes>;
|
|
59
89
|
private createBuilder;
|
|
60
90
|
post<TPath extends string>(path: TPath): EndpointBuilder<RemoveTrailingSlash<TBasePath extends "" ? TPath : TPath extends "" ? TBasePath : TBasePath extends "/" ? TPath extends `/${string}` ? TPath : `/${TPath}` : TBasePath extends `${infer Base}/` ? TPath extends `/${infer Rest}` ? `${Base}/${Rest}` : `${Base}/${TPath}` : TPath extends `/${infer Rest_1}` ? `${TBasePath}/${Rest_1}` : `${TBasePath}/${TPath}`>, "POST", {}, TServices, TLogger, undefined, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
|
|
61
91
|
get<TPath extends string>(path: TPath): EndpointBuilder<RemoveTrailingSlash<TBasePath extends "" ? TPath : TPath extends "" ? TBasePath : TBasePath extends "/" ? TPath extends `/${string}` ? TPath : `/${TPath}` : TBasePath extends `${infer Base}/` ? TPath extends `/${infer Rest}` ? `${Base}/${Rest}` : `${Base}/${TPath}` : TPath extends `/${infer Rest_1}` ? `${TBasePath}/${Rest_1}` : `${TBasePath}/${TPath}`>, "GET", {}, TServices, TLogger, undefined, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
|
|
@@ -66,7 +96,7 @@ declare class EndpointFactory<TServices extends Service[] = [], TBasePath extend
|
|
|
66
96
|
}
|
|
67
97
|
type RemoveTrailingSlash<T extends string> = T extends `${infer Rest}/` ? Rest extends '' ? T : Rest : T;
|
|
68
98
|
type JoinPaths<TBasePath extends string, TPath extends string> = RemoveTrailingSlash<TBasePath extends '' ? TPath : TPath extends '' ? TBasePath : TBasePath extends '/' ? TPath extends `/${string}` ? TPath : `/${TPath}` : TBasePath extends `${infer Base}/` ? TPath extends `/${infer Rest}` ? `${Base}/${Rest}` : `${Base}/${TPath}` : TPath extends `/${infer Rest}` ? `${TBasePath}/${Rest}` : `${TBasePath}/${TPath}`>;
|
|
69
|
-
interface EndpointFactoryOptions<TServices extends Service[] = [], TBasePath extends string = '', TLogger extends Logger = Logger, TSession = unknown, TEventPublisher extends EventPublisher<any> | undefined = undefined, TEventPublisherServiceName extends string = string, TAuthorizers extends readonly string[] = readonly string[], TAuditStorage extends AuditStorage | undefined = undefined, TAuditStorageServiceName extends string = string, TDatabase = undefined, TDatabaseServiceName extends string = string> {
|
|
99
|
+
interface EndpointFactoryOptions<TServices extends Service[] = [], TBasePath extends string = '', TLogger extends Logger = Logger, TSession = unknown, TEventPublisher extends EventPublisher<any> | undefined = undefined, TEventPublisherServiceName extends string = string, TAuthorizers extends readonly string[] = readonly string[], TAuditStorage extends AuditStorage | undefined = undefined, TAuditStorageServiceName extends string = string, TDatabase = undefined, TDatabaseServiceName extends string = string, TSecuritySchemes extends Record<string, SecurityScheme> = Record<string, SecurityScheme>> {
|
|
70
100
|
defaultServices?: TServices;
|
|
71
101
|
basePath?: TBasePath;
|
|
72
102
|
defaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;
|
|
@@ -79,8 +109,9 @@ interface EndpointFactoryOptions<TServices extends Service[] = [], TBasePath ext
|
|
|
79
109
|
defaultAuditorStorage?: Service<TAuditStorageServiceName, TAuditStorage>;
|
|
80
110
|
defaultDatabaseService?: Service<TDatabaseServiceName, TDatabase>;
|
|
81
111
|
defaultActorExtractor?: ActorExtractor<TServices, TSession, TLogger>;
|
|
112
|
+
customSecuritySchemes?: TSecuritySchemes;
|
|
82
113
|
}
|
|
83
|
-
declare const e: EndpointFactory<[], "", Logger, unknown, undefined, string, readonly string[], undefined, string, never, undefined, string
|
|
114
|
+
declare const e: EndpointFactory<[], "", Logger, unknown, undefined, string, readonly string[], undefined, string, never, undefined, string, Record<string, SecurityScheme>>;
|
|
84
115
|
//#endregion
|
|
85
116
|
export { EndpointFactory, EndpointFactoryOptions, JoinPaths, RemoveTrailingSlash, e };
|
|
86
|
-
//# sourceMappingURL=EndpointFactory-
|
|
117
|
+
//# sourceMappingURL=EndpointFactory-BKEPcQgE.d.mts.map
|