@geekmidas/constructs 0.0.15 → 0.0.16
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/dist/{EndpointFactory-2wSubmux.d.mts → EndpointFactory-6YMPR9pB.d.mts} +11 -3
- package/dist/{EndpointFactory-BJ71jEqM.cjs → EndpointFactory-BR9goiXy.cjs} +40 -10
- package/dist/EndpointFactory-BR9goiXy.cjs.map +1 -0
- package/dist/{EndpointFactory-D6wQfk6Q.d.cts → EndpointFactory-Sho97vyd.d.cts} +11 -3
- package/dist/{EndpointFactory-D_FfajK9.mjs → EndpointFactory-jm5ZKNDj.mjs} +40 -10
- package/dist/EndpointFactory-jm5ZKNDj.mjs.map +1 -0
- package/dist/{HonoEndpointAdaptor-C9wC10-w.d.cts → HonoEndpointAdaptor-Bwp0-Z-K.d.cts} +3 -3
- package/dist/adaptors/aws.d.cts +1 -1
- package/dist/adaptors/aws.d.mts +1 -1
- package/dist/adaptors/hono.d.cts +2 -2
- package/dist/adaptors/hono.d.mts +1 -1
- package/dist/adaptors/testing.d.cts +1 -1
- package/dist/adaptors/testing.d.mts +1 -1
- package/dist/crons/Cron.d.cts +1 -1
- package/dist/crons/Cron.d.mts +1 -1
- package/dist/crons/CronBuilder.d.cts +1 -1
- package/dist/crons/CronBuilder.d.mts +1 -1
- package/dist/crons/index.d.cts +5 -5
- package/dist/crons/index.d.mts +5 -5
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.cts +1 -1
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.mts +1 -1
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.cts +1 -1
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.mts +1 -1
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.cts +1 -1
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.mts +1 -1
- package/dist/endpoints/Endpoint.d.cts +1 -1
- package/dist/endpoints/Endpoint.d.mts +1 -1
- package/dist/endpoints/EndpointBuilder.d.cts +1 -1
- package/dist/endpoints/EndpointBuilder.d.mts +1 -1
- package/dist/endpoints/EndpointFactory.cjs +1 -1
- package/dist/endpoints/EndpointFactory.d.cts +2 -2
- package/dist/endpoints/EndpointFactory.d.mts +2 -2
- package/dist/endpoints/EndpointFactory.mjs +1 -1
- package/dist/endpoints/HonoEndpointAdaptor.d.cts +2 -2
- package/dist/endpoints/HonoEndpointAdaptor.d.mts +1 -1
- package/dist/endpoints/TestEndpointAdaptor.d.cts +1 -1
- package/dist/endpoints/TestEndpointAdaptor.d.mts +1 -1
- package/dist/endpoints/audit.d.cts +1 -1
- package/dist/endpoints/audit.d.mts +1 -1
- package/dist/endpoints/helpers.d.cts +1 -1
- package/dist/endpoints/helpers.d.mts +1 -1
- package/dist/endpoints/index.cjs +1 -1
- package/dist/endpoints/index.d.cts +4 -4
- package/dist/endpoints/index.d.mts +4 -4
- package/dist/endpoints/index.mjs +1 -1
- package/dist/endpoints/processAudits.d.cts +1 -1
- package/dist/endpoints/processAudits.d.mts +1 -1
- package/dist/functions/index.d.cts +1 -1
- package/dist/functions/index.d.mts +1 -1
- package/dist/index-Bu0XAj5A.d.cts +10 -0
- package/dist/index-Chb-374q.d.mts +10 -0
- package/dist/subscribers/index.d.cts +2 -2
- package/dist/subscribers/index.d.mts +2 -2
- package/package.json +6 -6
- package/src/endpoints/EndpointFactory.ts +66 -0
- package/src/endpoints/__tests__/EndpointFactory.database-auditor.spec.ts +96 -0
- package/dist/EndpointFactory-BJ71jEqM.cjs.map +0 -1
- package/dist/EndpointFactory-D_FfajK9.mjs.map +0 -1
- package/dist/index-DRf5AP3P.d.mts +0 -10
- package/dist/index-Doa8YPmH.d.cts +0 -10
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Authorizer } from "./Authorizer-pmPvIVgv.mjs";
|
|
2
|
-
import { AuthorizeFn, SessionFn } from "./Endpoint-Bbs_sFvg.mjs";
|
|
2
|
+
import { ActorExtractor, AuthorizeFn, SessionFn } from "./Endpoint-Bbs_sFvg.mjs";
|
|
3
3
|
import { EndpointBuilder } from "./EndpointBuilder-DLoHiV83.mjs";
|
|
4
4
|
import { Service } from "@geekmidas/services";
|
|
5
5
|
import { AuditStorage } from "@geekmidas/audit";
|
|
@@ -18,6 +18,7 @@ declare class EndpointFactory<TServices extends Service[] = [], TBasePath extend
|
|
|
18
18
|
private defaultAuthorizerName?;
|
|
19
19
|
private defaultAuditorStorage;
|
|
20
20
|
private defaultDatabaseService;
|
|
21
|
+
private defaultActorExtractor?;
|
|
21
22
|
constructor({
|
|
22
23
|
basePath,
|
|
23
24
|
defaultAuthorizeFn,
|
|
@@ -28,7 +29,8 @@ declare class EndpointFactory<TServices extends Service[] = [], TBasePath extend
|
|
|
28
29
|
availableAuthorizers,
|
|
29
30
|
defaultAuthorizerName,
|
|
30
31
|
defaultAuditorStorage,
|
|
31
|
-
defaultDatabaseService
|
|
32
|
+
defaultDatabaseService,
|
|
33
|
+
defaultActorExtractor
|
|
32
34
|
}?: EndpointFactoryOptions<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TDatabase, TDatabaseServiceName>);
|
|
33
35
|
static joinPaths<TBasePath extends string, P extends string>(path: P, basePath?: TBasePath): JoinPaths<TBasePath, P>;
|
|
34
36
|
authorizers<const T extends readonly string[]>(authorizers: T): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, T, TAuditStorage, TAuditStorageServiceName, TDatabase, TDatabaseServiceName>;
|
|
@@ -48,6 +50,11 @@ declare class EndpointFactory<TServices extends Service[] = [], TBasePath extend
|
|
|
48
50
|
* This enables audit functionality and makes `auditor` available in handler context.
|
|
49
51
|
*/
|
|
50
52
|
auditor<T extends AuditStorage, TName extends string>(storage: Service<TName, T>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, T, TName, TDatabase, TDatabaseServiceName>;
|
|
53
|
+
/**
|
|
54
|
+
* Set the actor extractor function for endpoints created from this factory.
|
|
55
|
+
* The actor is extracted from the request context and attached to all audits.
|
|
56
|
+
*/
|
|
57
|
+
actor(extractor: ActorExtractor<TServices, TSession, TLogger>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TDatabase, TDatabaseServiceName>;
|
|
51
58
|
private createBuilder;
|
|
52
59
|
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, any, TDatabase, TDatabaseServiceName>;
|
|
53
60
|
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, any, TDatabase, TDatabaseServiceName>;
|
|
@@ -70,8 +77,9 @@ interface EndpointFactoryOptions<TServices extends Service[] = [], TBasePath ext
|
|
|
70
77
|
defaultAuthorizerName?: TAuthorizers[number];
|
|
71
78
|
defaultAuditorStorage?: Service<TAuditStorageServiceName, TAuditStorage>;
|
|
72
79
|
defaultDatabaseService?: Service<TDatabaseServiceName, TDatabase>;
|
|
80
|
+
defaultActorExtractor?: ActorExtractor<TServices, TSession, TLogger>;
|
|
73
81
|
}
|
|
74
82
|
declare const e: EndpointFactory<[], "", Logger, unknown, undefined, string, readonly string[], undefined, string, undefined, string>;
|
|
75
83
|
//#endregion
|
|
76
84
|
export { EndpointFactory, EndpointFactoryOptions, JoinPaths, RemoveTrailingSlash, e };
|
|
77
|
-
//# sourceMappingURL=EndpointFactory-
|
|
85
|
+
//# sourceMappingURL=EndpointFactory-6YMPR9pB.d.mts.map
|
|
@@ -16,7 +16,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
16
16
|
defaultAuthorizerName;
|
|
17
17
|
defaultAuditorStorage;
|
|
18
18
|
defaultDatabaseService;
|
|
19
|
-
|
|
19
|
+
defaultActorExtractor;
|
|
20
|
+
constructor({ basePath, defaultAuthorizeFn, defaultLogger, defaultSessionExtractor, defaultServices = [], defaultEventPublisher, availableAuthorizers = [], defaultAuthorizerName, defaultAuditorStorage, defaultDatabaseService, defaultActorExtractor } = {}) {
|
|
20
21
|
this.defaultServices = (0, lodash_uniqby.default)(defaultServices, (s) => s.serviceName);
|
|
21
22
|
this.basePath = basePath || "";
|
|
22
23
|
this.defaultAuthorizeFn = defaultAuthorizeFn;
|
|
@@ -27,6 +28,7 @@ var EndpointFactory = class EndpointFactory {
|
|
|
27
28
|
this.defaultAuthorizerName = defaultAuthorizerName;
|
|
28
29
|
this.defaultAuditorStorage = defaultAuditorStorage;
|
|
29
30
|
this.defaultDatabaseService = defaultDatabaseService;
|
|
31
|
+
this.defaultActorExtractor = defaultActorExtractor;
|
|
30
32
|
}
|
|
31
33
|
static joinPaths(path, basePath = "") {
|
|
32
34
|
if (!basePath && !path) return "/";
|
|
@@ -52,7 +54,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
52
54
|
availableAuthorizers: authorizerConfigs,
|
|
53
55
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
54
56
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
55
|
-
defaultDatabaseService: this.defaultDatabaseService
|
|
57
|
+
defaultDatabaseService: this.defaultDatabaseService,
|
|
58
|
+
defaultActorExtractor: this.defaultActorExtractor
|
|
56
59
|
});
|
|
57
60
|
}
|
|
58
61
|
route(path) {
|
|
@@ -67,7 +70,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
67
70
|
availableAuthorizers: this.availableAuthorizers,
|
|
68
71
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
69
72
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
70
|
-
defaultDatabaseService: this.defaultDatabaseService
|
|
73
|
+
defaultDatabaseService: this.defaultDatabaseService,
|
|
74
|
+
defaultActorExtractor: this.defaultActorExtractor
|
|
71
75
|
});
|
|
72
76
|
}
|
|
73
77
|
authorize(fn) {
|
|
@@ -81,7 +85,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
81
85
|
availableAuthorizers: this.availableAuthorizers,
|
|
82
86
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
83
87
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
84
|
-
defaultDatabaseService: this.defaultDatabaseService
|
|
88
|
+
defaultDatabaseService: this.defaultDatabaseService,
|
|
89
|
+
defaultActorExtractor: this.defaultActorExtractor
|
|
85
90
|
});
|
|
86
91
|
}
|
|
87
92
|
services(services) {
|
|
@@ -95,7 +100,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
95
100
|
availableAuthorizers: this.availableAuthorizers,
|
|
96
101
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
97
102
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
98
|
-
defaultDatabaseService: this.defaultDatabaseService
|
|
103
|
+
defaultDatabaseService: this.defaultDatabaseService,
|
|
104
|
+
defaultActorExtractor: this.defaultActorExtractor
|
|
99
105
|
});
|
|
100
106
|
}
|
|
101
107
|
logger(logger) {
|
|
@@ -109,7 +115,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
109
115
|
availableAuthorizers: this.availableAuthorizers,
|
|
110
116
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
111
117
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
112
|
-
defaultDatabaseService: this.defaultDatabaseService
|
|
118
|
+
defaultDatabaseService: this.defaultDatabaseService,
|
|
119
|
+
defaultActorExtractor: this.defaultActorExtractor
|
|
113
120
|
});
|
|
114
121
|
}
|
|
115
122
|
publisher(publisher) {
|
|
@@ -123,7 +130,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
123
130
|
availableAuthorizers: this.availableAuthorizers,
|
|
124
131
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
125
132
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
126
|
-
defaultDatabaseService: this.defaultDatabaseService
|
|
133
|
+
defaultDatabaseService: this.defaultDatabaseService,
|
|
134
|
+
defaultActorExtractor: this.defaultActorExtractor
|
|
127
135
|
});
|
|
128
136
|
}
|
|
129
137
|
session(session) {
|
|
@@ -137,7 +145,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
137
145
|
availableAuthorizers: this.availableAuthorizers,
|
|
138
146
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
139
147
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
140
|
-
defaultDatabaseService: this.defaultDatabaseService
|
|
148
|
+
defaultDatabaseService: this.defaultDatabaseService,
|
|
149
|
+
defaultActorExtractor: this.defaultActorExtractor
|
|
141
150
|
});
|
|
142
151
|
}
|
|
143
152
|
/**
|
|
@@ -173,7 +182,27 @@ var EndpointFactory = class EndpointFactory {
|
|
|
173
182
|
availableAuthorizers: this.availableAuthorizers,
|
|
174
183
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
175
184
|
defaultAuditorStorage: storage,
|
|
176
|
-
defaultDatabaseService: this.defaultDatabaseService
|
|
185
|
+
defaultDatabaseService: this.defaultDatabaseService,
|
|
186
|
+
defaultActorExtractor: this.defaultActorExtractor
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Set the actor extractor function for endpoints created from this factory.
|
|
191
|
+
* The actor is extracted from the request context and attached to all audits.
|
|
192
|
+
*/
|
|
193
|
+
actor(extractor) {
|
|
194
|
+
return new EndpointFactory({
|
|
195
|
+
defaultServices: this.defaultServices,
|
|
196
|
+
basePath: this.basePath,
|
|
197
|
+
defaultAuthorizeFn: this.defaultAuthorizeFn,
|
|
198
|
+
defaultLogger: this.defaultLogger,
|
|
199
|
+
defaultSessionExtractor: this.defaultSessionExtractor,
|
|
200
|
+
defaultEventPublisher: this.defaultEventPublisher,
|
|
201
|
+
availableAuthorizers: this.availableAuthorizers,
|
|
202
|
+
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
203
|
+
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
204
|
+
defaultDatabaseService: this.defaultDatabaseService,
|
|
205
|
+
defaultActorExtractor: extractor
|
|
177
206
|
});
|
|
178
207
|
}
|
|
179
208
|
createBuilder(method, path) {
|
|
@@ -188,6 +217,7 @@ var EndpointFactory = class EndpointFactory {
|
|
|
188
217
|
if (this.defaultAuthorizerName) builder._authorizerName = this.defaultAuthorizerName;
|
|
189
218
|
if (this.defaultAuditorStorage) builder._setAuditorStorage(this.defaultAuditorStorage);
|
|
190
219
|
if (this.defaultDatabaseService) builder._setDatabaseService(this.defaultDatabaseService);
|
|
220
|
+
if (this.defaultActorExtractor) builder._actorExtractor = this.defaultActorExtractor;
|
|
191
221
|
return builder;
|
|
192
222
|
}
|
|
193
223
|
post(path) {
|
|
@@ -224,4 +254,4 @@ Object.defineProperty(exports, 'e', {
|
|
|
224
254
|
return e;
|
|
225
255
|
}
|
|
226
256
|
});
|
|
227
|
-
//# sourceMappingURL=EndpointFactory-
|
|
257
|
+
//# sourceMappingURL=EndpointFactory-BR9goiXy.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EndpointFactory-BR9goiXy.cjs","names":["ConsoleLogger","path: P","basePath: TBasePath","authorizers: T","path: TPath","fn: AuthorizeFn<TServices, TLogger, TSession>","services: S","logger: L","publisher: Service<TServiceName, T>","session: SessionFn<TServices, TLogger, T>","service: Service<TName, T>","storage: Service<TName, T>","extractor: ActorExtractor<TServices, TSession, TLogger>","method: TMethod","EndpointBuilder"],"sources":["../src/endpoints/EndpointFactory.ts"],"sourcesContent":["import type { AuditStorage } 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 { ActorExtractor } from './audit';\nimport type { Authorizer } from './Authorizer';\nimport type { AuthorizeFn, SessionFn } from './Endpoint';\nimport { EndpointBuilder } from './EndpointBuilder';\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 | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\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<TServices, TLogger, TSession>;\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\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 }: EndpointFactoryOptions<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName\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 }\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 TDatabase,\n TDatabaseServiceName\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 TDatabase,\n TDatabaseServiceName\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 });\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 TDatabase,\n TDatabaseServiceName\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 TDatabase,\n TDatabaseServiceName\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 });\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 TDatabase,\n TDatabaseServiceName\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName\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 });\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 TDatabase,\n TDatabaseServiceName\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 TDatabase,\n TDatabaseServiceName\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 });\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 TDatabase,\n TDatabaseServiceName\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n L,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName\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<TServices, TSession, L>,\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 TDatabase,\n TDatabaseServiceName\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n T,\n TServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName\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 });\n }\n\n session<T>(\n session: SessionFn<TServices, TLogger, T>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n T,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n T,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName\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<TServices, T, TLogger>,\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 T,\n TName\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n T,\n TName\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: service,\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 */\n auditor<T extends AuditStorage, 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 TDatabase,\n TDatabaseServiceName\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n T,\n TName,\n TDatabase,\n TDatabaseServiceName\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.defaultActorExtractor,\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 TDatabase,\n TDatabaseServiceName\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName\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 });\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 any,\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 any,\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 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> {\n defaultServices?: TServices;\n basePath?: TBasePath;\n defaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;\n defaultLogger?: TLogger;\n defaultSessionExtractor?: SessionFn<TServices, TLogger, TSession>;\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}\n\nexport const e = new EndpointFactory();\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Authorizer } from "./Authorizer-BTmly8ps.cjs";
|
|
2
|
-
import { AuthorizeFn, SessionFn } from "./Endpoint-Bu8Phz6y.cjs";
|
|
2
|
+
import { ActorExtractor, AuthorizeFn, SessionFn } from "./Endpoint-Bu8Phz6y.cjs";
|
|
3
3
|
import { EndpointBuilder } from "./EndpointBuilder-C3cdFvpS.cjs";
|
|
4
4
|
import { AuditStorage } from "@geekmidas/audit";
|
|
5
5
|
import { EventPublisher, MappedEvent } from "@geekmidas/events";
|
|
@@ -18,6 +18,7 @@ declare class EndpointFactory<TServices extends Service[] = [], TBasePath extend
|
|
|
18
18
|
private defaultAuthorizerName?;
|
|
19
19
|
private defaultAuditorStorage;
|
|
20
20
|
private defaultDatabaseService;
|
|
21
|
+
private defaultActorExtractor?;
|
|
21
22
|
constructor({
|
|
22
23
|
basePath,
|
|
23
24
|
defaultAuthorizeFn,
|
|
@@ -28,7 +29,8 @@ declare class EndpointFactory<TServices extends Service[] = [], TBasePath extend
|
|
|
28
29
|
availableAuthorizers,
|
|
29
30
|
defaultAuthorizerName,
|
|
30
31
|
defaultAuditorStorage,
|
|
31
|
-
defaultDatabaseService
|
|
32
|
+
defaultDatabaseService,
|
|
33
|
+
defaultActorExtractor
|
|
32
34
|
}?: EndpointFactoryOptions<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TDatabase, TDatabaseServiceName>);
|
|
33
35
|
static joinPaths<TBasePath extends string, P extends string>(path: P, basePath?: TBasePath): JoinPaths<TBasePath, P>;
|
|
34
36
|
authorizers<const T extends readonly string[]>(authorizers: T): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, T, TAuditStorage, TAuditStorageServiceName, TDatabase, TDatabaseServiceName>;
|
|
@@ -48,6 +50,11 @@ declare class EndpointFactory<TServices extends Service[] = [], TBasePath extend
|
|
|
48
50
|
* This enables audit functionality and makes `auditor` available in handler context.
|
|
49
51
|
*/
|
|
50
52
|
auditor<T extends AuditStorage, TName extends string>(storage: Service<TName, T>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, T, TName, TDatabase, TDatabaseServiceName>;
|
|
53
|
+
/**
|
|
54
|
+
* Set the actor extractor function for endpoints created from this factory.
|
|
55
|
+
* The actor is extracted from the request context and attached to all audits.
|
|
56
|
+
*/
|
|
57
|
+
actor(extractor: ActorExtractor<TServices, TSession, TLogger>): EndpointFactory<TServices, TBasePath, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TDatabase, TDatabaseServiceName>;
|
|
51
58
|
private createBuilder;
|
|
52
59
|
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, any, TDatabase, TDatabaseServiceName>;
|
|
53
60
|
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, any, TDatabase, TDatabaseServiceName>;
|
|
@@ -70,8 +77,9 @@ interface EndpointFactoryOptions<TServices extends Service[] = [], TBasePath ext
|
|
|
70
77
|
defaultAuthorizerName?: TAuthorizers[number];
|
|
71
78
|
defaultAuditorStorage?: Service<TAuditStorageServiceName, TAuditStorage>;
|
|
72
79
|
defaultDatabaseService?: Service<TDatabaseServiceName, TDatabase>;
|
|
80
|
+
defaultActorExtractor?: ActorExtractor<TServices, TSession, TLogger>;
|
|
73
81
|
}
|
|
74
82
|
declare const e: EndpointFactory<[], "", Logger, unknown, undefined, string, readonly string[], undefined, string, undefined, string>;
|
|
75
83
|
//#endregion
|
|
76
84
|
export { EndpointFactory, EndpointFactoryOptions, JoinPaths, RemoveTrailingSlash, e };
|
|
77
|
-
//# sourceMappingURL=EndpointFactory-
|
|
85
|
+
//# sourceMappingURL=EndpointFactory-Sho97vyd.d.cts.map
|
|
@@ -15,7 +15,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
15
15
|
defaultAuthorizerName;
|
|
16
16
|
defaultAuditorStorage;
|
|
17
17
|
defaultDatabaseService;
|
|
18
|
-
|
|
18
|
+
defaultActorExtractor;
|
|
19
|
+
constructor({ basePath, defaultAuthorizeFn, defaultLogger, defaultSessionExtractor, defaultServices = [], defaultEventPublisher, availableAuthorizers = [], defaultAuthorizerName, defaultAuditorStorage, defaultDatabaseService, defaultActorExtractor } = {}) {
|
|
19
20
|
this.defaultServices = uniqBy(defaultServices, (s) => s.serviceName);
|
|
20
21
|
this.basePath = basePath || "";
|
|
21
22
|
this.defaultAuthorizeFn = defaultAuthorizeFn;
|
|
@@ -26,6 +27,7 @@ var EndpointFactory = class EndpointFactory {
|
|
|
26
27
|
this.defaultAuthorizerName = defaultAuthorizerName;
|
|
27
28
|
this.defaultAuditorStorage = defaultAuditorStorage;
|
|
28
29
|
this.defaultDatabaseService = defaultDatabaseService;
|
|
30
|
+
this.defaultActorExtractor = defaultActorExtractor;
|
|
29
31
|
}
|
|
30
32
|
static joinPaths(path, basePath = "") {
|
|
31
33
|
if (!basePath && !path) return "/";
|
|
@@ -51,7 +53,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
51
53
|
availableAuthorizers: authorizerConfigs,
|
|
52
54
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
53
55
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
54
|
-
defaultDatabaseService: this.defaultDatabaseService
|
|
56
|
+
defaultDatabaseService: this.defaultDatabaseService,
|
|
57
|
+
defaultActorExtractor: this.defaultActorExtractor
|
|
55
58
|
});
|
|
56
59
|
}
|
|
57
60
|
route(path) {
|
|
@@ -66,7 +69,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
66
69
|
availableAuthorizers: this.availableAuthorizers,
|
|
67
70
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
68
71
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
69
|
-
defaultDatabaseService: this.defaultDatabaseService
|
|
72
|
+
defaultDatabaseService: this.defaultDatabaseService,
|
|
73
|
+
defaultActorExtractor: this.defaultActorExtractor
|
|
70
74
|
});
|
|
71
75
|
}
|
|
72
76
|
authorize(fn) {
|
|
@@ -80,7 +84,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
80
84
|
availableAuthorizers: this.availableAuthorizers,
|
|
81
85
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
82
86
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
83
|
-
defaultDatabaseService: this.defaultDatabaseService
|
|
87
|
+
defaultDatabaseService: this.defaultDatabaseService,
|
|
88
|
+
defaultActorExtractor: this.defaultActorExtractor
|
|
84
89
|
});
|
|
85
90
|
}
|
|
86
91
|
services(services) {
|
|
@@ -94,7 +99,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
94
99
|
availableAuthorizers: this.availableAuthorizers,
|
|
95
100
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
96
101
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
97
|
-
defaultDatabaseService: this.defaultDatabaseService
|
|
102
|
+
defaultDatabaseService: this.defaultDatabaseService,
|
|
103
|
+
defaultActorExtractor: this.defaultActorExtractor
|
|
98
104
|
});
|
|
99
105
|
}
|
|
100
106
|
logger(logger) {
|
|
@@ -108,7 +114,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
108
114
|
availableAuthorizers: this.availableAuthorizers,
|
|
109
115
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
110
116
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
111
|
-
defaultDatabaseService: this.defaultDatabaseService
|
|
117
|
+
defaultDatabaseService: this.defaultDatabaseService,
|
|
118
|
+
defaultActorExtractor: this.defaultActorExtractor
|
|
112
119
|
});
|
|
113
120
|
}
|
|
114
121
|
publisher(publisher) {
|
|
@@ -122,7 +129,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
122
129
|
availableAuthorizers: this.availableAuthorizers,
|
|
123
130
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
124
131
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
125
|
-
defaultDatabaseService: this.defaultDatabaseService
|
|
132
|
+
defaultDatabaseService: this.defaultDatabaseService,
|
|
133
|
+
defaultActorExtractor: this.defaultActorExtractor
|
|
126
134
|
});
|
|
127
135
|
}
|
|
128
136
|
session(session) {
|
|
@@ -136,7 +144,8 @@ var EndpointFactory = class EndpointFactory {
|
|
|
136
144
|
availableAuthorizers: this.availableAuthorizers,
|
|
137
145
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
138
146
|
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
139
|
-
defaultDatabaseService: this.defaultDatabaseService
|
|
147
|
+
defaultDatabaseService: this.defaultDatabaseService,
|
|
148
|
+
defaultActorExtractor: this.defaultActorExtractor
|
|
140
149
|
});
|
|
141
150
|
}
|
|
142
151
|
/**
|
|
@@ -172,7 +181,27 @@ var EndpointFactory = class EndpointFactory {
|
|
|
172
181
|
availableAuthorizers: this.availableAuthorizers,
|
|
173
182
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
174
183
|
defaultAuditorStorage: storage,
|
|
175
|
-
defaultDatabaseService: this.defaultDatabaseService
|
|
184
|
+
defaultDatabaseService: this.defaultDatabaseService,
|
|
185
|
+
defaultActorExtractor: this.defaultActorExtractor
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Set the actor extractor function for endpoints created from this factory.
|
|
190
|
+
* The actor is extracted from the request context and attached to all audits.
|
|
191
|
+
*/
|
|
192
|
+
actor(extractor) {
|
|
193
|
+
return new EndpointFactory({
|
|
194
|
+
defaultServices: this.defaultServices,
|
|
195
|
+
basePath: this.basePath,
|
|
196
|
+
defaultAuthorizeFn: this.defaultAuthorizeFn,
|
|
197
|
+
defaultLogger: this.defaultLogger,
|
|
198
|
+
defaultSessionExtractor: this.defaultSessionExtractor,
|
|
199
|
+
defaultEventPublisher: this.defaultEventPublisher,
|
|
200
|
+
availableAuthorizers: this.availableAuthorizers,
|
|
201
|
+
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
202
|
+
defaultAuditorStorage: this.defaultAuditorStorage,
|
|
203
|
+
defaultDatabaseService: this.defaultDatabaseService,
|
|
204
|
+
defaultActorExtractor: extractor
|
|
176
205
|
});
|
|
177
206
|
}
|
|
178
207
|
createBuilder(method, path) {
|
|
@@ -187,6 +216,7 @@ var EndpointFactory = class EndpointFactory {
|
|
|
187
216
|
if (this.defaultAuthorizerName) builder._authorizerName = this.defaultAuthorizerName;
|
|
188
217
|
if (this.defaultAuditorStorage) builder._setAuditorStorage(this.defaultAuditorStorage);
|
|
189
218
|
if (this.defaultDatabaseService) builder._setDatabaseService(this.defaultDatabaseService);
|
|
219
|
+
if (this.defaultActorExtractor) builder._actorExtractor = this.defaultActorExtractor;
|
|
190
220
|
return builder;
|
|
191
221
|
}
|
|
192
222
|
post(path) {
|
|
@@ -212,4 +242,4 @@ const e = new EndpointFactory();
|
|
|
212
242
|
|
|
213
243
|
//#endregion
|
|
214
244
|
export { EndpointFactory, e };
|
|
215
|
-
//# sourceMappingURL=EndpointFactory-
|
|
245
|
+
//# sourceMappingURL=EndpointFactory-jm5ZKNDj.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EndpointFactory-jm5ZKNDj.mjs","names":["DEFAULT_LOGGER","path: P","basePath: TBasePath","authorizers: T","path: TPath","fn: AuthorizeFn<TServices, TLogger, TSession>","services: S","logger: L","publisher: Service<TServiceName, T>","session: SessionFn<TServices, TLogger, T>","service: Service<TName, T>","storage: Service<TName, T>","extractor: ActorExtractor<TServices, TSession, TLogger>","method: TMethod"],"sources":["../src/endpoints/EndpointFactory.ts"],"sourcesContent":["import type { AuditStorage } 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 { ActorExtractor } from './audit';\nimport type { Authorizer } from './Authorizer';\nimport type { AuthorizeFn, SessionFn } from './Endpoint';\nimport { EndpointBuilder } from './EndpointBuilder';\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 | undefined = undefined,\n TAuditStorageServiceName extends string = string,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\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<TServices, TLogger, TSession>;\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\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 }: EndpointFactoryOptions<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName\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 }\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 TDatabase,\n TDatabaseServiceName\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 TDatabase,\n TDatabaseServiceName\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 });\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 TDatabase,\n TDatabaseServiceName\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 TDatabase,\n TDatabaseServiceName\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 });\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 TDatabase,\n TDatabaseServiceName\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName\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 });\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 TDatabase,\n TDatabaseServiceName\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 TDatabase,\n TDatabaseServiceName\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 });\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 TDatabase,\n TDatabaseServiceName\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n L,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName\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<TServices, TSession, L>,\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 TDatabase,\n TDatabaseServiceName\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n T,\n TServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName\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 });\n }\n\n session<T>(\n session: SessionFn<TServices, TLogger, T>,\n ): EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n T,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n T,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName\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<TServices, T, TLogger>,\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 T,\n TName\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n T,\n TName\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: service,\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 */\n auditor<T extends AuditStorage, 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 TDatabase,\n TDatabaseServiceName\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n T,\n TName,\n TDatabase,\n TDatabaseServiceName\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.defaultActorExtractor,\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 TDatabase,\n TDatabaseServiceName\n > {\n return new EndpointFactory<\n TServices,\n TBasePath,\n TLogger,\n TSession,\n TEventPublisher,\n TEventPublisherServiceName,\n TAuthorizers,\n TAuditStorage,\n TAuditStorageServiceName,\n TDatabase,\n TDatabaseServiceName\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 });\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 any,\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 any,\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 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> {\n defaultServices?: TServices;\n basePath?: TBasePath;\n defaultAuthorizeFn?: AuthorizeFn<TServices, TLogger, TSession>;\n defaultLogger?: TLogger;\n defaultSessionExtractor?: SessionFn<TServices, TLogger, TSession>;\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}\n\nexport const e = new EndpointFactory();\n"],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ import { Logger } from "@geekmidas/logger";
|
|
|
6
6
|
import { Service, ServiceDiscovery, ServiceRecord } from "@geekmidas/services";
|
|
7
7
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
8
8
|
import { EnvironmentParser } from "@geekmidas/envkit";
|
|
9
|
-
import * as
|
|
9
|
+
import * as hono_types4 from "hono/types";
|
|
10
10
|
import { Context, Hono } from "hono";
|
|
11
11
|
|
|
12
12
|
//#region src/endpoints/HonoEndpointAdaptor.d.ts
|
|
@@ -33,11 +33,11 @@ declare class HonoEndpoint<TRoute extends string, TMethod extends HttpMethod, TI
|
|
|
33
33
|
static validate<T extends StandardSchemaV1>(c: Context<any, string, {}>, data: unknown, schema?: T): Promise<unknown>;
|
|
34
34
|
addRoute(serviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>, TLogger>, app: Hono): void;
|
|
35
35
|
static applyEventMiddleware(app: Hono, serviceDiscovery: ServiceDiscovery<any, any>): void;
|
|
36
|
-
static fromRoutes<TLogger extends Logger, TServices extends Service[]>(routes: string[], envParser: EnvironmentParser<{}>, app: Hono<
|
|
36
|
+
static fromRoutes<TLogger extends Logger, TServices extends Service[]>(routes: string[], envParser: EnvironmentParser<{}>, app: Hono<hono_types4.BlankEnv, hono_types4.BlankSchema, "/"> | undefined, logger: TLogger, cwd?: string, options?: HonoEndpointOptions): Promise<Hono>;
|
|
37
37
|
static addRoutes<TServices extends Service[] = [], TLogger extends Logger = Logger>(endpoints: Endpoint<string, HttpMethod, any, any, TServices, TLogger>[], serviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>, TLogger>, app: Hono, options?: HonoEndpointOptions): void;
|
|
38
38
|
static addRoute<TRoute extends string, TMethod extends HttpMethod, TInput extends EndpointSchemas = {}, TOutSchema extends StandardSchemaV1 | undefined = undefined, TServices extends Service[] = [], TLogger extends Logger = Logger, TSession = unknown, TEventPublisher extends EventPublisher<any> | undefined = undefined, TEventPublisherServiceName extends string = string, TAuditStorage extends AuditStorage | undefined = undefined, TAuditStorageServiceName extends string = string, TAuditAction extends AuditableAction<string, unknown> = AuditableAction<string, unknown>, TDatabase = undefined, TDatabaseServiceName extends string = string>(endpoint: Endpoint<TRoute, TMethod, TInput, TOutSchema, TServices, TLogger, TSession, TEventPublisher, TEventPublisherServiceName, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>, serviceDiscovery: ServiceDiscovery<ServiceRecord<TServices>, TLogger>, app: Hono): void;
|
|
39
39
|
static addDocsRoute<TServices extends Service[] = [], TLogger extends Logger = Logger>(endpoints: Endpoint<string, HttpMethod, any, any, TServices, TLogger>[], app: Hono, docsPath: string, openApiOptions?: HonoEndpointOptions['openApiOptions']): void;
|
|
40
40
|
}
|
|
41
41
|
//#endregion
|
|
42
42
|
export { HonoEndpoint, HonoEndpointOptions };
|
|
43
|
-
//# sourceMappingURL=HonoEndpointAdaptor-
|
|
43
|
+
//# sourceMappingURL=HonoEndpointAdaptor-Bwp0-Z-K.d.cts.map
|
package/dist/adaptors/aws.d.cts
CHANGED
|
@@ -3,7 +3,7 @@ import "../types-Bp9ysFXd.cjs";
|
|
|
3
3
|
import "../Function-VI1TB3Mh.cjs";
|
|
4
4
|
import "../BaseFunctionBuilder-DUZMbEr3.cjs";
|
|
5
5
|
import "../FunctionBuilder-CjVEFTYC.cjs";
|
|
6
|
-
import "../index-
|
|
6
|
+
import "../index-Bu0XAj5A.cjs";
|
|
7
7
|
import "../Authorizer-BTmly8ps.cjs";
|
|
8
8
|
import "../Endpoint-Bu8Phz6y.cjs";
|
|
9
9
|
import "../AmazonApiGatewayEndpointAdaptor-ro0RMLzr.cjs";
|
package/dist/adaptors/aws.d.mts
CHANGED
|
@@ -3,7 +3,7 @@ import "../types-DKf0juBf.mjs";
|
|
|
3
3
|
import "../Function-V9M9UVHp.mjs";
|
|
4
4
|
import "../BaseFunctionBuilder-CbDnPZpD.mjs";
|
|
5
5
|
import "../FunctionBuilder-D1ofSeMd.mjs";
|
|
6
|
-
import "../index-
|
|
6
|
+
import "../index-Chb-374q.mjs";
|
|
7
7
|
import "../Authorizer-pmPvIVgv.mjs";
|
|
8
8
|
import "../Endpoint-Bbs_sFvg.mjs";
|
|
9
9
|
import "../AmazonApiGatewayEndpointAdaptor-4hPy5vty.mjs";
|
package/dist/adaptors/hono.d.cts
CHANGED
|
@@ -3,8 +3,8 @@ import "../types-Bp9ysFXd.cjs";
|
|
|
3
3
|
import "../Function-VI1TB3Mh.cjs";
|
|
4
4
|
import "../BaseFunctionBuilder-DUZMbEr3.cjs";
|
|
5
5
|
import "../FunctionBuilder-CjVEFTYC.cjs";
|
|
6
|
-
import "../index-
|
|
6
|
+
import "../index-Bu0XAj5A.cjs";
|
|
7
7
|
import "../Authorizer-BTmly8ps.cjs";
|
|
8
8
|
import "../Endpoint-Bu8Phz6y.cjs";
|
|
9
|
-
import { HonoEndpoint } from "../HonoEndpointAdaptor-
|
|
9
|
+
import { HonoEndpoint } from "../HonoEndpointAdaptor-Bwp0-Z-K.cjs";
|
|
10
10
|
export { HonoEndpoint };
|
package/dist/adaptors/hono.d.mts
CHANGED
|
@@ -3,7 +3,7 @@ import "../types-DKf0juBf.mjs";
|
|
|
3
3
|
import "../Function-V9M9UVHp.mjs";
|
|
4
4
|
import "../BaseFunctionBuilder-CbDnPZpD.mjs";
|
|
5
5
|
import "../FunctionBuilder-D1ofSeMd.mjs";
|
|
6
|
-
import "../index-
|
|
6
|
+
import "../index-Chb-374q.mjs";
|
|
7
7
|
import "../Authorizer-pmPvIVgv.mjs";
|
|
8
8
|
import "../Endpoint-Bbs_sFvg.mjs";
|
|
9
9
|
import { HonoEndpoint } from "../HonoEndpointAdaptor-7hIKI32d.mjs";
|
|
@@ -3,7 +3,7 @@ import "../types-Bp9ysFXd.cjs";
|
|
|
3
3
|
import "../Function-VI1TB3Mh.cjs";
|
|
4
4
|
import "../BaseFunctionBuilder-DUZMbEr3.cjs";
|
|
5
5
|
import "../FunctionBuilder-CjVEFTYC.cjs";
|
|
6
|
-
import "../index-
|
|
6
|
+
import "../index-Bu0XAj5A.cjs";
|
|
7
7
|
import "../Authorizer-BTmly8ps.cjs";
|
|
8
8
|
import "../Endpoint-Bu8Phz6y.cjs";
|
|
9
9
|
import { TestEndpointAdaptor } from "../TestEndpointAdaptor-H5To8PH7.cjs";
|
|
@@ -3,7 +3,7 @@ import "../types-DKf0juBf.mjs";
|
|
|
3
3
|
import "../Function-V9M9UVHp.mjs";
|
|
4
4
|
import "../BaseFunctionBuilder-CbDnPZpD.mjs";
|
|
5
5
|
import "../FunctionBuilder-D1ofSeMd.mjs";
|
|
6
|
-
import "../index-
|
|
6
|
+
import "../index-Chb-374q.mjs";
|
|
7
7
|
import "../Authorizer-pmPvIVgv.mjs";
|
|
8
8
|
import "../Endpoint-Bbs_sFvg.mjs";
|
|
9
9
|
import { TestEndpointAdaptor } from "../TestEndpointAdaptor-jxn68ayg.mjs";
|
package/dist/crons/Cron.d.cts
CHANGED
|
@@ -2,6 +2,6 @@ import "../Construct-dI_rgdSp.cjs";
|
|
|
2
2
|
import "../Function-VI1TB3Mh.cjs";
|
|
3
3
|
import "../BaseFunctionBuilder-DUZMbEr3.cjs";
|
|
4
4
|
import "../FunctionBuilder-CjVEFTYC.cjs";
|
|
5
|
-
import "../index-
|
|
5
|
+
import "../index-Bu0XAj5A.cjs";
|
|
6
6
|
import { Cron, CronExpression, RateExpression, ScheduleExpression } from "../Cron-COdfP0Jd.cjs";
|
|
7
7
|
export { Cron, CronExpression, RateExpression, ScheduleExpression };
|
package/dist/crons/Cron.d.mts
CHANGED
|
@@ -2,6 +2,6 @@ import "../Construct-ZPqE0vhn.mjs";
|
|
|
2
2
|
import "../Function-V9M9UVHp.mjs";
|
|
3
3
|
import "../BaseFunctionBuilder-CbDnPZpD.mjs";
|
|
4
4
|
import "../FunctionBuilder-D1ofSeMd.mjs";
|
|
5
|
-
import "../index-
|
|
5
|
+
import "../index-Chb-374q.mjs";
|
|
6
6
|
import { Cron, CronExpression, RateExpression, ScheduleExpression } from "../Cron-D8cn_ahj.mjs";
|
|
7
7
|
export { Cron, CronExpression, RateExpression, ScheduleExpression };
|
|
@@ -2,7 +2,7 @@ import "../Construct-dI_rgdSp.cjs";
|
|
|
2
2
|
import "../Function-VI1TB3Mh.cjs";
|
|
3
3
|
import "../BaseFunctionBuilder-DUZMbEr3.cjs";
|
|
4
4
|
import "../FunctionBuilder-CjVEFTYC.cjs";
|
|
5
|
-
import "../index-
|
|
5
|
+
import "../index-Bu0XAj5A.cjs";
|
|
6
6
|
import "../Cron-COdfP0Jd.cjs";
|
|
7
7
|
import { CronBuilder } from "../CronBuilder-DntF6H3A.cjs";
|
|
8
8
|
export { CronBuilder };
|
|
@@ -2,7 +2,7 @@ import "../Construct-ZPqE0vhn.mjs";
|
|
|
2
2
|
import "../Function-V9M9UVHp.mjs";
|
|
3
3
|
import "../BaseFunctionBuilder-CbDnPZpD.mjs";
|
|
4
4
|
import "../FunctionBuilder-D1ofSeMd.mjs";
|
|
5
|
-
import "../index-
|
|
5
|
+
import "../index-Chb-374q.mjs";
|
|
6
6
|
import "../Cron-D8cn_ahj.mjs";
|
|
7
7
|
import { CronBuilder } from "../CronBuilder-DoMnSs_0.mjs";
|
|
8
8
|
export { CronBuilder };
|