@geekmidas/constructs 0.0.15 → 0.0.17
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/{Cron-Bi3QOge_.cjs → Cron-3bP5rwXs.cjs} +1 -1
- package/dist/{Cron-Bi3QOge_.cjs.map → Cron-3bP5rwXs.cjs.map} +1 -1
- package/dist/{Cron-Dy_HW2Vv.mjs → Cron-gISh3p1m.mjs} +1 -1
- package/dist/{Cron-Dy_HW2Vv.mjs.map → Cron-gISh3p1m.mjs.map} +1 -1
- package/dist/{CronBuilder-Dv_w7Yri.cjs → CronBuilder-2zUMc0WT.cjs} +2 -2
- package/dist/{CronBuilder-Dv_w7Yri.cjs.map → CronBuilder-2zUMc0WT.cjs.map} +1 -1
- package/dist/{CronBuilder-Bl3A2Zp4.mjs → CronBuilder-BCYftl8v.mjs} +2 -2
- package/dist/{CronBuilder-Bl3A2Zp4.mjs.map → CronBuilder-BCYftl8v.mjs.map} +1 -1
- package/dist/{EndpointBuilder-DLoHiV83.d.mts → EndpointBuilder-D02Qo4Ha.d.mts} +9 -8
- package/dist/{EndpointBuilder-C3cdFvpS.d.cts → EndpointBuilder-DHPOWw0B.d.cts} +9 -8
- package/dist/{EndpointBuilder-I--56szz.mjs → EndpointBuilder-DN0NQp1W.mjs} +2 -1
- package/dist/EndpointBuilder-DN0NQp1W.mjs.map +1 -0
- package/dist/{EndpointBuilder-B8vyK_Fy.cjs → EndpointBuilder-bMiowRHY.cjs} +2 -1
- package/dist/EndpointBuilder-bMiowRHY.cjs.map +1 -0
- package/dist/{EndpointFactory-D_FfajK9.mjs → EndpointFactory-B0ldqkHz.mjs} +42 -11
- package/dist/EndpointFactory-B0ldqkHz.mjs.map +1 -0
- package/dist/{EndpointFactory-D6wQfk6Q.d.cts → EndpointFactory-DFFXRU-l.d.cts} +31 -22
- package/dist/{EndpointFactory-BJ71jEqM.cjs → EndpointFactory-DqvIVjOy.cjs} +42 -11
- package/dist/EndpointFactory-DqvIVjOy.cjs.map +1 -0
- package/dist/{EndpointFactory-2wSubmux.d.mts → EndpointFactory-g84YJjGf.d.mts} +31 -22
- package/dist/{HonoEndpointAdaptor-7hIKI32d.d.mts → HonoEndpointAdaptor-Br1vuQ3A.d.mts} +3 -3
- package/dist/{HonoEndpointAdaptor-C9wC10-w.d.cts → HonoEndpointAdaptor-Dc8XsOxw.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 +2 -2
- package/dist/adaptors/testing.d.cts +1 -1
- package/dist/adaptors/testing.d.mts +1 -1
- package/dist/crons/Cron.cjs +1 -1
- package/dist/crons/Cron.d.cts +1 -1
- package/dist/crons/Cron.d.mts +1 -1
- package/dist/crons/Cron.mjs +1 -1
- package/dist/crons/CronBuilder.cjs +2 -2
- package/dist/crons/CronBuilder.d.cts +1 -1
- package/dist/crons/CronBuilder.d.mts +1 -1
- package/dist/crons/CronBuilder.mjs +2 -2
- package/dist/crons/index.cjs +2 -2
- package/dist/crons/index.d.cts +5 -5
- package/dist/crons/index.d.mts +1 -1
- package/dist/crons/index.mjs +2 -2
- 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.cjs +1 -1
- package/dist/endpoints/EndpointBuilder.d.cts +2 -2
- package/dist/endpoints/EndpointBuilder.d.mts +2 -2
- package/dist/endpoints/EndpointBuilder.mjs +1 -1
- package/dist/endpoints/EndpointFactory.cjs +2 -2
- package/dist/endpoints/EndpointFactory.d.cts +3 -3
- package/dist/endpoints/EndpointFactory.d.mts +3 -3
- package/dist/endpoints/EndpointFactory.mjs +2 -2
- package/dist/endpoints/HonoEndpointAdaptor.d.cts +2 -2
- package/dist/endpoints/HonoEndpointAdaptor.d.mts +2 -2
- 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 +2 -2
- package/dist/endpoints/index.d.cts +5 -5
- package/dist/endpoints/index.d.mts +5 -5
- package/dist/endpoints/index.mjs +2 -2
- 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-C1dy81Sw.d.cts +10 -0
- package/dist/{index-Doa8YPmH.d.cts → index-TxufD5Xp.d.mts} +2 -2
- package/dist/subscribers/index.d.cts +2 -2
- package/dist/subscribers/index.d.mts +2 -2
- package/package.json +7 -7
- package/src/endpoints/EndpointBuilder.ts +28 -45
- package/src/endpoints/EndpointFactory.ts +103 -5
- package/src/endpoints/__tests__/EndpointFactory.database-auditor.spec.ts +96 -0
- package/dist/EndpointBuilder-B8vyK_Fy.cjs.map +0 -1
- package/dist/EndpointBuilder-I--56szz.mjs.map +0 -1
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cron-
|
|
1
|
+
{"version":3,"file":"Cron-3bP5rwXs.cjs","names":["Function","obj: any","ConstructType","fn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>","timeout?: number","_schedule?: ScheduleExpression","input?: TInput","outputSchema?: OutSchema","services: TServices","logger?: TLogger","publisherService?: Service<TEventPublisherServiceName, TEventPublisher>","events: any[]","memorySize?: number","databaseService?: Service<TDatabaseServiceName, TDatabase>"],"sources":["../src/crons/Cron.ts"],"sourcesContent":["import type { Logger } from '@geekmidas/logger';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\n\nimport { ConstructType } from '../Construct';\nimport { Function, type FunctionHandler } from '../functions';\n\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { ComposableStandardSchema } from '@geekmidas/schema';\nimport type { Service } from '@geekmidas/services';\n\nexport class Cron<\n TInput extends ComposableStandardSchema | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n> extends Function<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>,\n TEventPublisher,\n TEventPublisherServiceName,\n undefined,\n string,\n TDatabase,\n TDatabaseServiceName\n> {\n static isCron(obj: any): obj is Cron<any, any, any, any> {\n return Boolean(\n obj &&\n (obj as Function).__IS_FUNCTION__ === true &&\n obj.type === ConstructType.Cron,\n );\n }\n\n constructor(\n fn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>,\n timeout?: number,\n protected _schedule?: ScheduleExpression,\n input?: TInput,\n outputSchema?: OutSchema,\n services: TServices = [] as unknown as TServices,\n logger?: TLogger,\n publisherService?: Service<TEventPublisherServiceName, TEventPublisher>,\n events: any[] = [],\n memorySize?: number,\n databaseService?: Service<TDatabaseServiceName, TDatabase>,\n ) {\n super(\n fn,\n timeout,\n ConstructType.Cron,\n input,\n outputSchema,\n services,\n logger,\n publisherService,\n events,\n memorySize,\n undefined, // auditorStorageService\n databaseService,\n );\n }\n\n get schedule(): ScheduleExpression | undefined {\n return this._schedule;\n }\n}\n\nexport type RateExpression = `rate(${string})`;\n\ntype CronMinute =\n | '*'\n | number\n | `${number}`\n | `${number}-${number}`\n | `${number}/${number}`\n | `*/${number}`\n | `${number},${number}`\n | string; // Allow more complex patterns\n\ntype CronHour =\n | '*'\n | number\n | `${number}`\n | `${number}-${number}`\n | `${number}/${number}`\n | `*/${number}`\n | `${number},${number}`\n | string; // Allow more complex patterns\n\ntype CronDay =\n | '*'\n | number\n | `${number}`\n | `${number}-${number}`\n | `${number}/${number}`\n | `*/${number}`\n | `${number},${number}`\n | string; // Allow more complex patterns\n\ntype CronMonth =\n | '*'\n | number\n | `${number}`\n | `${number}-${number}`\n | `${number}/${number}`\n | `*/${number}`\n | 'JAN'\n | 'FEB'\n | 'MAR'\n | 'APR'\n | 'MAY'\n | 'JUN'\n | 'JUL'\n | 'AUG'\n | 'SEP'\n | 'OCT'\n | 'NOV'\n | 'DEC'\n | string; // Allow more complex patterns\n\ntype CronWeekday =\n | '*'\n | number\n | `${number}`\n | `${number}-${number}`\n | `${number}/${number}`\n | `*/${number}`\n | 'SUN'\n | 'MON'\n | 'TUE'\n | 'WED'\n | 'THU'\n | 'FRI'\n | 'SAT'\n | `${string}-${string}` // Allow patterns like MON-FRI\n | string; // Allow more complex patterns\n\nexport type CronExpression =\n `cron(${CronMinute} ${CronHour} ${CronDay} ${CronMonth} ${CronWeekday})`;\n\nexport type ScheduleExpression = RateExpression | CronExpression;\n"],"mappings":";;;;AAUA,IAAa,OAAb,cASUA,0BAYR;CACA,OAAO,OAAOC,KAA2C;AACvD,SAAO,QACL,OACG,IAAiB,oBAAoB,QACtC,IAAI,SAASC,gCAAc,KAC9B;CACF;CAED,YACEC,IACAC,SACUC,WACVC,OACAC,cACAC,WAAsB,CAAE,GACxBC,QACAC,kBACAC,SAAgB,CAAE,GAClBC,YACAC,iBACA;AACA,QACE,IACA,SACAX,gCAAc,MACd,OACA,cACA,UACA,QACA,kBACA,QACA,oBAEA,gBACD;EAvBS;CAwBX;CAED,IAAI,WAA2C;AAC7C,SAAO,KAAK;CACb;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cron-
|
|
1
|
+
{"version":3,"file":"Cron-gISh3p1m.mjs","names":["obj: any","fn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>","timeout?: number","_schedule?: ScheduleExpression","input?: TInput","outputSchema?: OutSchema","services: TServices","logger?: TLogger","publisherService?: Service<TEventPublisherServiceName, TEventPublisher>","events: any[]","memorySize?: number","databaseService?: Service<TDatabaseServiceName, TDatabase>"],"sources":["../src/crons/Cron.ts"],"sourcesContent":["import type { Logger } from '@geekmidas/logger';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\n\nimport { ConstructType } from '../Construct';\nimport { Function, type FunctionHandler } from '../functions';\n\nimport type { EventPublisher } from '@geekmidas/events';\nimport type { ComposableStandardSchema } from '@geekmidas/schema';\nimport type { Service } from '@geekmidas/services';\n\nexport class Cron<\n TInput extends ComposableStandardSchema | undefined = undefined,\n TServices extends Service[] = [],\n TLogger extends Logger = Logger,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n> extends Function<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>,\n TEventPublisher,\n TEventPublisherServiceName,\n undefined,\n string,\n TDatabase,\n TDatabaseServiceName\n> {\n static isCron(obj: any): obj is Cron<any, any, any, any> {\n return Boolean(\n obj &&\n (obj as Function).__IS_FUNCTION__ === true &&\n obj.type === ConstructType.Cron,\n );\n }\n\n constructor(\n fn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>,\n timeout?: number,\n protected _schedule?: ScheduleExpression,\n input?: TInput,\n outputSchema?: OutSchema,\n services: TServices = [] as unknown as TServices,\n logger?: TLogger,\n publisherService?: Service<TEventPublisherServiceName, TEventPublisher>,\n events: any[] = [],\n memorySize?: number,\n databaseService?: Service<TDatabaseServiceName, TDatabase>,\n ) {\n super(\n fn,\n timeout,\n ConstructType.Cron,\n input,\n outputSchema,\n services,\n logger,\n publisherService,\n events,\n memorySize,\n undefined, // auditorStorageService\n databaseService,\n );\n }\n\n get schedule(): ScheduleExpression | undefined {\n return this._schedule;\n }\n}\n\nexport type RateExpression = `rate(${string})`;\n\ntype CronMinute =\n | '*'\n | number\n | `${number}`\n | `${number}-${number}`\n | `${number}/${number}`\n | `*/${number}`\n | `${number},${number}`\n | string; // Allow more complex patterns\n\ntype CronHour =\n | '*'\n | number\n | `${number}`\n | `${number}-${number}`\n | `${number}/${number}`\n | `*/${number}`\n | `${number},${number}`\n | string; // Allow more complex patterns\n\ntype CronDay =\n | '*'\n | number\n | `${number}`\n | `${number}-${number}`\n | `${number}/${number}`\n | `*/${number}`\n | `${number},${number}`\n | string; // Allow more complex patterns\n\ntype CronMonth =\n | '*'\n | number\n | `${number}`\n | `${number}-${number}`\n | `${number}/${number}`\n | `*/${number}`\n | 'JAN'\n | 'FEB'\n | 'MAR'\n | 'APR'\n | 'MAY'\n | 'JUN'\n | 'JUL'\n | 'AUG'\n | 'SEP'\n | 'OCT'\n | 'NOV'\n | 'DEC'\n | string; // Allow more complex patterns\n\ntype CronWeekday =\n | '*'\n | number\n | `${number}`\n | `${number}-${number}`\n | `${number}/${number}`\n | `*/${number}`\n | 'SUN'\n | 'MON'\n | 'TUE'\n | 'WED'\n | 'THU'\n | 'FRI'\n | 'SAT'\n | `${string}-${string}` // Allow patterns like MON-FRI\n | string; // Allow more complex patterns\n\nexport type CronExpression =\n `cron(${CronMinute} ${CronHour} ${CronDay} ${CronMonth} ${CronWeekday})`;\n\nexport type ScheduleExpression = RateExpression | CronExpression;\n"],"mappings":";;;;AAUA,IAAa,OAAb,cASU,SAYR;CACA,OAAO,OAAOA,KAA2C;AACvD,SAAO,QACL,OACG,IAAiB,oBAAoB,QACtC,IAAI,SAAS,cAAc,KAC9B;CACF;CAED,YACEC,IACAC,SACUC,WACVC,OACAC,cACAC,WAAsB,CAAE,GACxBC,QACAC,kBACAC,SAAgB,CAAE,GAClBC,YACAC,iBACA;AACA,QACE,IACA,SACA,cAAc,MACd,OACA,cACA,UACA,QACA,kBACA,QACA,oBAEA,gBACD;EAvBS;CAwBX;CAED,IAAI,WAA2C;AAC7C,SAAO,KAAK;CACb;AACF"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const require_chunk = require('./chunk-CUT6urMc.cjs');
|
|
2
2
|
const require_Construct = require('./Construct-BYSPikVm.cjs');
|
|
3
3
|
const require_FunctionBuilder = require('./FunctionBuilder-DXvG_XD-.cjs');
|
|
4
|
-
const require_Cron = require('./Cron-
|
|
4
|
+
const require_Cron = require('./Cron-3bP5rwXs.cjs');
|
|
5
5
|
const __geekmidas_logger_console = require_chunk.__toESM(require("@geekmidas/logger/console"));
|
|
6
6
|
const lodash_uniqby = require_chunk.__toESM(require("lodash.uniqby"));
|
|
7
7
|
|
|
@@ -71,4 +71,4 @@ Object.defineProperty(exports, 'CronBuilder', {
|
|
|
71
71
|
return CronBuilder;
|
|
72
72
|
}
|
|
73
73
|
});
|
|
74
|
-
//# sourceMappingURL=CronBuilder-
|
|
74
|
+
//# sourceMappingURL=CronBuilder-2zUMc0WT.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CronBuilder-
|
|
1
|
+
{"version":3,"file":"CronBuilder-2zUMc0WT.cjs","names":["ConsoleLogger","FunctionBuilder","ConstructType","memorySize: number","_expression: ScheduleExpression","schema: T","services: T","logger: T","publisher: Service<TName, T>","service: Service<TName, T>","fn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>","Cron"],"sources":["../src/crons/CronBuilder.ts"],"sourcesContent":["import type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type { ComposableStandardSchema } from '@geekmidas/schema';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { ConstructType } from '../Construct';\nimport { FunctionBuilder, type FunctionHandler } from '../functions';\nimport { Cron, type ScheduleExpression } from './Cron';\n\nimport type { EventPublisher } from '@geekmidas/events';\n\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\nexport class CronBuilder<\n TInput extends ComposableStandardSchema,\n TServices extends Service[],\n TLogger extends Logger = Logger,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n> extends FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n undefined,\n string,\n TDatabase,\n TDatabaseServiceName\n> {\n private _schedule?: ScheduleExpression;\n\n constructor() {\n super(ConstructType.Cron);\n }\n\n memorySize(memorySize: number): this {\n this._memorySize = memorySize;\n return this;\n }\n\n schedule(\n _expression: ScheduleExpression,\n ): CronBuilder<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TDatabase,\n TDatabaseServiceName\n > {\n this._schedule = _expression;\n return this;\n }\n\n input<T extends ComposableStandardSchema>(\n schema: T,\n ): CronBuilder<\n T,\n TServices,\n TLogger,\n OutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TDatabase,\n TDatabaseServiceName\n > {\n this.inputSchema = schema as unknown as TInput;\n\n return this as unknown as CronBuilder<\n T,\n TServices,\n TLogger,\n OutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TDatabase,\n TDatabaseServiceName\n >;\n }\n\n output<T extends StandardSchemaV1>(\n schema: T,\n ): CronBuilder<\n TInput,\n TServices,\n TLogger,\n T,\n TEventPublisher,\n TEventPublisherServiceName,\n TDatabase,\n TDatabaseServiceName\n > {\n this.outputSchema = schema as unknown as OutSchema;\n\n return this as unknown as CronBuilder<\n TInput,\n TServices,\n TLogger,\n T,\n TEventPublisher,\n TEventPublisherServiceName,\n TDatabase,\n TDatabaseServiceName\n >;\n }\n\n services<T extends Service[]>(\n services: T,\n ): CronBuilder<\n TInput,\n [...TServices, ...T],\n TLogger,\n OutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\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 CronBuilder<\n TInput,\n [...TServices, ...T],\n TLogger,\n OutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TDatabase,\n TDatabaseServiceName\n >;\n }\n\n logger<T extends Logger>(\n logger: T,\n ): CronBuilder<\n TInput,\n TServices,\n T,\n OutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TDatabase,\n TDatabaseServiceName\n > {\n this._logger = logger as unknown as TLogger;\n\n return this as unknown as CronBuilder<\n TInput,\n TServices,\n T,\n OutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TDatabase,\n TDatabaseServiceName\n >;\n }\n\n publisher<T extends EventPublisher<any>, TName extends string>(\n publisher: Service<TName, T>,\n ): CronBuilder<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n T,\n TName,\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 CronBuilder<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n T,\n TName,\n TDatabase,\n TDatabaseServiceName\n >;\n }\n\n /**\n * Set the database service for this cron job.\n * The database will be available in the handler context as `db`.\n */\n database<T, TName extends string>(\n service: Service<TName, T>,\n ): CronBuilder<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\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 CronBuilder<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n T,\n TName\n >;\n }\n\n handle(\n fn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>,\n ): Cron<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TDatabase,\n TDatabaseServiceName\n > {\n const cron = new Cron(\n fn,\n this._timeout,\n this._schedule,\n this.inputSchema,\n this.outputSchema,\n this._services,\n this._logger,\n this._publisher,\n this._events,\n this._memorySize,\n this._databaseService,\n );\n\n // Reset builder state after creating the cron to prevent pollution\n this._services = [] as Service[] as TServices;\n this._logger = DEFAULT_LOGGER;\n this._events = [];\n this._publisher = undefined;\n this._databaseService = undefined;\n this._schedule = undefined;\n this.inputSchema = undefined;\n this.outputSchema = undefined;\n this._timeout = undefined;\n this._memorySize = undefined;\n\n return cron;\n }\n}\n"],"mappings":";;;;;;;;AAYA,MAAM,iBAAiB,IAAIA;AAE3B,IAAa,cAAb,cASUC,wCAWR;CACA,AAAQ;CAER,cAAc;AACZ,QAAMC,gCAAc,KAAK;CAC1B;CAED,WAAWC,YAA0B;AACnC,OAAK,cAAc;AACnB,SAAO;CACR;CAED,SACEC,aAUA;AACA,OAAK,YAAY;AACjB,SAAO;CACR;CAED,MACEC,QAUA;AACA,OAAK,cAAc;AAEnB,SAAO;CAUR;CAED,OACEA,QAUA;AACA,OAAK,eAAe;AAEpB,SAAO;CAUR;CAED,SACEC,UAUA;AACA,OAAK,YAAY,2BACf,CAAC,GAAG,KAAK,WAAW,GAAG,QAAS,GAChC,CAAC,MAAM,EAAE,YACV;AAED,SAAO;CAUR;CAED,OACEC,QAUA;AACA,OAAK,UAAU;AAEf,SAAO;CAUR;CAED,UACEC,WAUA;AACA,OAAK,aAAa;AAKlB,SAAO;CAUR;;;;;CAMD,SACEC,SAUA;AACA,OAAK,mBAAmB;AAKxB,SAAO;CAUR;CAED,OACEC,IAUA;EACA,MAAM,OAAO,IAAIC,kBACf,IACA,KAAK,UACL,KAAK,WACL,KAAK,aACL,KAAK,cACL,KAAK,WACL,KAAK,SACL,KAAK,YACL,KAAK,SACL,KAAK,aACL,KAAK;AAIP,OAAK,YAAY,CAAE;AACnB,OAAK,UAAU;AACf,OAAK,UAAU,CAAE;AACjB,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AAEL,SAAO;CACR;AACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ConstructType } from "./Construct-LWeB1rSQ.mjs";
|
|
2
2
|
import { FunctionBuilder } from "./FunctionBuilder-CVT7bG2o.mjs";
|
|
3
|
-
import { Cron } from "./Cron-
|
|
3
|
+
import { Cron } from "./Cron-gISh3p1m.mjs";
|
|
4
4
|
import { ConsoleLogger } from "@geekmidas/logger/console";
|
|
5
5
|
import uniqBy from "lodash.uniqby";
|
|
6
6
|
|
|
@@ -65,4 +65,4 @@ var CronBuilder = class extends FunctionBuilder {
|
|
|
65
65
|
|
|
66
66
|
//#endregion
|
|
67
67
|
export { CronBuilder };
|
|
68
|
-
//# sourceMappingURL=CronBuilder-
|
|
68
|
+
//# sourceMappingURL=CronBuilder-BCYftl8v.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CronBuilder-
|
|
1
|
+
{"version":3,"file":"CronBuilder-BCYftl8v.mjs","names":["DEFAULT_LOGGER","memorySize: number","_expression: ScheduleExpression","schema: T","services: T","logger: T","publisher: Service<TName, T>","service: Service<TName, T>","fn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>"],"sources":["../src/crons/CronBuilder.ts"],"sourcesContent":["import type { Logger } from '@geekmidas/logger';\nimport { ConsoleLogger } from '@geekmidas/logger/console';\nimport type { ComposableStandardSchema } from '@geekmidas/schema';\nimport type { Service } from '@geekmidas/services';\nimport type { StandardSchemaV1 } from '@standard-schema/spec';\nimport uniqBy from 'lodash.uniqby';\nimport { ConstructType } from '../Construct';\nimport { FunctionBuilder, type FunctionHandler } from '../functions';\nimport { Cron, type ScheduleExpression } from './Cron';\n\nimport type { EventPublisher } from '@geekmidas/events';\n\nconst DEFAULT_LOGGER = new ConsoleLogger() as any;\n\nexport class CronBuilder<\n TInput extends ComposableStandardSchema,\n TServices extends Service[],\n TLogger extends Logger = Logger,\n OutSchema extends StandardSchemaV1 | undefined = undefined,\n TEventPublisher extends EventPublisher<any> | undefined = undefined,\n TEventPublisherServiceName extends string = string,\n TDatabase = undefined,\n TDatabaseServiceName extends string = string,\n> extends FunctionBuilder<\n TInput,\n OutSchema,\n TServices,\n TLogger,\n TEventPublisher,\n TEventPublisherServiceName,\n undefined,\n string,\n TDatabase,\n TDatabaseServiceName\n> {\n private _schedule?: ScheduleExpression;\n\n constructor() {\n super(ConstructType.Cron);\n }\n\n memorySize(memorySize: number): this {\n this._memorySize = memorySize;\n return this;\n }\n\n schedule(\n _expression: ScheduleExpression,\n ): CronBuilder<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TDatabase,\n TDatabaseServiceName\n > {\n this._schedule = _expression;\n return this;\n }\n\n input<T extends ComposableStandardSchema>(\n schema: T,\n ): CronBuilder<\n T,\n TServices,\n TLogger,\n OutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TDatabase,\n TDatabaseServiceName\n > {\n this.inputSchema = schema as unknown as TInput;\n\n return this as unknown as CronBuilder<\n T,\n TServices,\n TLogger,\n OutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TDatabase,\n TDatabaseServiceName\n >;\n }\n\n output<T extends StandardSchemaV1>(\n schema: T,\n ): CronBuilder<\n TInput,\n TServices,\n TLogger,\n T,\n TEventPublisher,\n TEventPublisherServiceName,\n TDatabase,\n TDatabaseServiceName\n > {\n this.outputSchema = schema as unknown as OutSchema;\n\n return this as unknown as CronBuilder<\n TInput,\n TServices,\n TLogger,\n T,\n TEventPublisher,\n TEventPublisherServiceName,\n TDatabase,\n TDatabaseServiceName\n >;\n }\n\n services<T extends Service[]>(\n services: T,\n ): CronBuilder<\n TInput,\n [...TServices, ...T],\n TLogger,\n OutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\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 CronBuilder<\n TInput,\n [...TServices, ...T],\n TLogger,\n OutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TDatabase,\n TDatabaseServiceName\n >;\n }\n\n logger<T extends Logger>(\n logger: T,\n ): CronBuilder<\n TInput,\n TServices,\n T,\n OutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TDatabase,\n TDatabaseServiceName\n > {\n this._logger = logger as unknown as TLogger;\n\n return this as unknown as CronBuilder<\n TInput,\n TServices,\n T,\n OutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TDatabase,\n TDatabaseServiceName\n >;\n }\n\n publisher<T extends EventPublisher<any>, TName extends string>(\n publisher: Service<TName, T>,\n ): CronBuilder<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n T,\n TName,\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 CronBuilder<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n T,\n TName,\n TDatabase,\n TDatabaseServiceName\n >;\n }\n\n /**\n * Set the database service for this cron job.\n * The database will be available in the handler context as `db`.\n */\n database<T, TName extends string>(\n service: Service<TName, T>,\n ): CronBuilder<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\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 CronBuilder<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n T,\n TName\n >;\n }\n\n handle(\n fn: FunctionHandler<TInput, TServices, TLogger, OutSchema, TDatabase>,\n ): Cron<\n TInput,\n TServices,\n TLogger,\n OutSchema,\n TEventPublisher,\n TEventPublisherServiceName,\n TDatabase,\n TDatabaseServiceName\n > {\n const cron = new Cron(\n fn,\n this._timeout,\n this._schedule,\n this.inputSchema,\n this.outputSchema,\n this._services,\n this._logger,\n this._publisher,\n this._events,\n this._memorySize,\n this._databaseService,\n );\n\n // Reset builder state after creating the cron to prevent pollution\n this._services = [] as Service[] as TServices;\n this._logger = DEFAULT_LOGGER;\n this._events = [];\n this._publisher = undefined;\n this._databaseService = undefined;\n this._schedule = undefined;\n this.inputSchema = undefined;\n this.outputSchema = undefined;\n this._timeout = undefined;\n this._memorySize = undefined;\n\n return cron;\n }\n}\n"],"mappings":";;;;;;;AAYA,MAAMA,mBAAiB,IAAI;AAE3B,IAAa,cAAb,cASU,gBAWR;CACA,AAAQ;CAER,cAAc;AACZ,QAAM,cAAc,KAAK;CAC1B;CAED,WAAWC,YAA0B;AACnC,OAAK,cAAc;AACnB,SAAO;CACR;CAED,SACEC,aAUA;AACA,OAAK,YAAY;AACjB,SAAO;CACR;CAED,MACEC,QAUA;AACA,OAAK,cAAc;AAEnB,SAAO;CAUR;CAED,OACEA,QAUA;AACA,OAAK,eAAe;AAEpB,SAAO;CAUR;CAED,SACEC,UAUA;AACA,OAAK,YAAY,OACf,CAAC,GAAG,KAAK,WAAW,GAAG,QAAS,GAChC,CAAC,MAAM,EAAE,YACV;AAED,SAAO;CAUR;CAED,OACEC,QAUA;AACA,OAAK,UAAU;AAEf,SAAO;CAUR;CAED,UACEC,WAUA;AACA,OAAK,aAAa;AAKlB,SAAO;CAUR;;;;;CAMD,SACEC,SAUA;AACA,OAAK,mBAAmB;AAKxB,SAAO;CAUR;CAED,OACEC,IAUA;EACA,MAAM,OAAO,IAAI,KACf,IACA,KAAK,UACL,KAAK,WACL,KAAK,aACL,KAAK,cACL,KAAK,WACL,KAAK,SACL,KAAK,YACL,KAAK,SACL,KAAK,aACL,KAAK;AAIP,OAAK,YAAY,CAAE;AACnB,OAAK,UAAUR;AACf,OAAK,UAAU,CAAE;AACjB,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AACL,OAAK;AAEL,SAAO;CACR;AACF"}
|
|
@@ -3,7 +3,7 @@ import { BaseFunctionBuilder } from "./BaseFunctionBuilder-CbDnPZpD.mjs";
|
|
|
3
3
|
import { Authorizer } from "./Authorizer-pmPvIVgv.mjs";
|
|
4
4
|
import { ActorExtractor, AuthorizeFn, Endpoint, EndpointHandler, EndpointSchemas, MappedAudit, SessionFn, SuccessStatus } from "./Endpoint-Bbs_sFvg.mjs";
|
|
5
5
|
import { Service } from "@geekmidas/services";
|
|
6
|
-
import { AuditStorage, AuditableAction } from "@geekmidas/audit";
|
|
6
|
+
import { AuditStorage, AuditableAction, ExtractStorageAuditAction } from "@geekmidas/audit";
|
|
7
7
|
import { RateLimitConfig } from "@geekmidas/rate-limit";
|
|
8
8
|
import { EventPublisher, MappedEvent } from "@geekmidas/events";
|
|
9
9
|
import { Logger } from "@geekmidas/logger";
|
|
@@ -37,16 +37,16 @@ declare class EndpointBuilder<TRoute extends string, TMethod extends HttpMethod,
|
|
|
37
37
|
publisher<T extends EventPublisher<any>, TName extends string>(publisher: Service<TName, T>): EndpointBuilder<TRoute, TMethod, TInput, TServices, TLogger, OutSchema, TSession, T, TName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
|
|
38
38
|
body<T extends StandardSchemaV1>(schema: T): EndpointBuilder<TRoute, TMethod, Omit<TInput, 'body'> & {
|
|
39
39
|
body: T;
|
|
40
|
-
}, TServices, TLogger, OutSchema, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName>;
|
|
40
|
+
}, TServices, TLogger, OutSchema, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
|
|
41
41
|
search<T extends StandardSchemaV1>(schema: T): EndpointBuilder<TRoute, TMethod, Omit<TInput, 'query'> & {
|
|
42
42
|
query: T;
|
|
43
|
-
}, TServices, TLogger, OutSchema, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName>;
|
|
43
|
+
}, TServices, TLogger, OutSchema, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
|
|
44
44
|
query<T extends StandardSchemaV1>(schema: T): EndpointBuilder<TRoute, TMethod, Omit<TInput, 'query'> & {
|
|
45
45
|
query: T;
|
|
46
|
-
}, TServices, TLogger, OutSchema, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName>;
|
|
46
|
+
}, TServices, TLogger, OutSchema, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
|
|
47
47
|
params<T extends StandardSchemaV1>(schema: T): EndpointBuilder<TRoute, TMethod, Omit<TInput, 'params'> & {
|
|
48
48
|
params: T;
|
|
49
|
-
}, TServices, TLogger, OutSchema, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName>;
|
|
49
|
+
}, TServices, TLogger, OutSchema, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
|
|
50
50
|
rateLimit(config: RateLimitConfig): this;
|
|
51
51
|
authorizer(name: TAuthorizers[number] | 'none'): EndpointBuilder<TRoute, TMethod, TInput, TServices, TLogger, OutSchema, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
|
|
52
52
|
services<T extends Service[]>(services: T): EndpointBuilder<TRoute, TMethod, TInput, [...TServices, ...T], TLogger, OutSchema, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
|
|
@@ -55,8 +55,9 @@ declare class EndpointBuilder<TRoute extends string, TMethod extends HttpMethod,
|
|
|
55
55
|
/**
|
|
56
56
|
* Set the auditor storage service for this endpoint.
|
|
57
57
|
* This enables audit functionality and makes `auditor` available in the handler context.
|
|
58
|
+
* The audit action type is automatically inferred from the storage's generic parameter.
|
|
58
59
|
*/
|
|
59
|
-
auditor<T extends AuditStorage
|
|
60
|
+
auditor<T extends AuditStorage<any>, TName extends string>(storage: Service<TName, T>): EndpointBuilder<TRoute, TMethod, TInput, TServices, TLogger, OutSchema, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, T, TName, ExtractStorageAuditAction<T>, TDatabase, TDatabaseServiceName>;
|
|
60
61
|
/**
|
|
61
62
|
* Set the actor extractor function for audit records.
|
|
62
63
|
* The actor is extracted from the request context and attached to all audits.
|
|
@@ -79,7 +80,7 @@ declare class EndpointBuilder<TRoute extends string, TMethod extends HttpMethod,
|
|
|
79
80
|
* ])
|
|
80
81
|
* ```
|
|
81
82
|
*/
|
|
82
|
-
audit
|
|
83
|
+
audit(audits: MappedAudit<TAuditAction, OutSchema>[]): this;
|
|
83
84
|
/**
|
|
84
85
|
* Set the database service for this endpoint.
|
|
85
86
|
* The database will be available in the handler context as `db`.
|
|
@@ -101,4 +102,4 @@ declare class EndpointBuilder<TRoute extends string, TMethod extends HttpMethod,
|
|
|
101
102
|
}
|
|
102
103
|
//#endregion
|
|
103
104
|
export { EndpointBuilder };
|
|
104
|
-
//# sourceMappingURL=EndpointBuilder-
|
|
105
|
+
//# sourceMappingURL=EndpointBuilder-D02Qo4Ha.d.mts.map
|
|
@@ -2,7 +2,7 @@ import { HttpMethod } from "./types-Bp9ysFXd.cjs";
|
|
|
2
2
|
import { BaseFunctionBuilder } from "./BaseFunctionBuilder-DUZMbEr3.cjs";
|
|
3
3
|
import { Authorizer } from "./Authorizer-BTmly8ps.cjs";
|
|
4
4
|
import { ActorExtractor, AuthorizeFn, Endpoint, EndpointHandler, EndpointSchemas, MappedAudit, SessionFn, SuccessStatus } from "./Endpoint-Bu8Phz6y.cjs";
|
|
5
|
-
import { AuditStorage, AuditableAction } from "@geekmidas/audit";
|
|
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
|
import { Service } from "@geekmidas/services";
|
|
@@ -37,16 +37,16 @@ declare class EndpointBuilder<TRoute extends string, TMethod extends HttpMethod,
|
|
|
37
37
|
publisher<T extends EventPublisher<any>, TName extends string>(publisher: Service<TName, T>): EndpointBuilder<TRoute, TMethod, TInput, TServices, TLogger, OutSchema, TSession, T, TName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
|
|
38
38
|
body<T extends StandardSchemaV1>(schema: T): EndpointBuilder<TRoute, TMethod, Omit<TInput, 'body'> & {
|
|
39
39
|
body: T;
|
|
40
|
-
}, TServices, TLogger, OutSchema, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName>;
|
|
40
|
+
}, TServices, TLogger, OutSchema, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
|
|
41
41
|
search<T extends StandardSchemaV1>(schema: T): EndpointBuilder<TRoute, TMethod, Omit<TInput, 'query'> & {
|
|
42
42
|
query: T;
|
|
43
|
-
}, TServices, TLogger, OutSchema, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName>;
|
|
43
|
+
}, TServices, TLogger, OutSchema, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
|
|
44
44
|
query<T extends StandardSchemaV1>(schema: T): EndpointBuilder<TRoute, TMethod, Omit<TInput, 'query'> & {
|
|
45
45
|
query: T;
|
|
46
|
-
}, TServices, TLogger, OutSchema, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName>;
|
|
46
|
+
}, TServices, TLogger, OutSchema, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
|
|
47
47
|
params<T extends StandardSchemaV1>(schema: T): EndpointBuilder<TRoute, TMethod, Omit<TInput, 'params'> & {
|
|
48
48
|
params: T;
|
|
49
|
-
}, TServices, TLogger, OutSchema, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName>;
|
|
49
|
+
}, TServices, TLogger, OutSchema, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
|
|
50
50
|
rateLimit(config: RateLimitConfig): this;
|
|
51
51
|
authorizer(name: TAuthorizers[number] | 'none'): EndpointBuilder<TRoute, TMethod, TInput, TServices, TLogger, OutSchema, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
|
|
52
52
|
services<T extends Service[]>(services: T): EndpointBuilder<TRoute, TMethod, TInput, [...TServices, ...T], TLogger, OutSchema, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, TAuditStorage, TAuditStorageServiceName, TAuditAction, TDatabase, TDatabaseServiceName>;
|
|
@@ -55,8 +55,9 @@ declare class EndpointBuilder<TRoute extends string, TMethod extends HttpMethod,
|
|
|
55
55
|
/**
|
|
56
56
|
* Set the auditor storage service for this endpoint.
|
|
57
57
|
* This enables audit functionality and makes `auditor` available in the handler context.
|
|
58
|
+
* The audit action type is automatically inferred from the storage's generic parameter.
|
|
58
59
|
*/
|
|
59
|
-
auditor<T extends AuditStorage
|
|
60
|
+
auditor<T extends AuditStorage<any>, TName extends string>(storage: Service<TName, T>): EndpointBuilder<TRoute, TMethod, TInput, TServices, TLogger, OutSchema, TSession, TEventPublisher, TEventPublisherServiceName, TAuthorizers, T, TName, ExtractStorageAuditAction<T>, TDatabase, TDatabaseServiceName>;
|
|
60
61
|
/**
|
|
61
62
|
* Set the actor extractor function for audit records.
|
|
62
63
|
* The actor is extracted from the request context and attached to all audits.
|
|
@@ -79,7 +80,7 @@ declare class EndpointBuilder<TRoute extends string, TMethod extends HttpMethod,
|
|
|
79
80
|
* ])
|
|
80
81
|
* ```
|
|
81
82
|
*/
|
|
82
|
-
audit
|
|
83
|
+
audit(audits: MappedAudit<TAuditAction, OutSchema>[]): this;
|
|
83
84
|
/**
|
|
84
85
|
* Set the database service for this endpoint.
|
|
85
86
|
* The database will be available in the handler context as `db`.
|
|
@@ -101,4 +102,4 @@ declare class EndpointBuilder<TRoute extends string, TMethod extends HttpMethod,
|
|
|
101
102
|
}
|
|
102
103
|
//#endregion
|
|
103
104
|
export { EndpointBuilder };
|
|
104
|
-
//# sourceMappingURL=EndpointBuilder-
|
|
105
|
+
//# sourceMappingURL=EndpointBuilder-DHPOWw0B.d.cts.map
|
|
@@ -102,6 +102,7 @@ var EndpointBuilder = class extends BaseFunctionBuilder {
|
|
|
102
102
|
/**
|
|
103
103
|
* Set the auditor storage service for this endpoint.
|
|
104
104
|
* This enables audit functionality and makes `auditor` available in the handler context.
|
|
105
|
+
* The audit action type is automatically inferred from the storage's generic parameter.
|
|
105
106
|
*/
|
|
106
107
|
auditor(storage) {
|
|
107
108
|
this._auditorStorage = storage;
|
|
@@ -189,4 +190,4 @@ var EndpointBuilder = class extends BaseFunctionBuilder {
|
|
|
189
190
|
|
|
190
191
|
//#endregion
|
|
191
192
|
export { EndpointBuilder };
|
|
192
|
-
//# sourceMappingURL=EndpointBuilder-
|
|
193
|
+
//# sourceMappingURL=EndpointBuilder-DN0NQp1W.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EndpointBuilder-DN0NQp1W.mjs","names":["route: TRoute","method: TMethod","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 >"],"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 } 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> = () => ({}) 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\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 const authorizer = this._authorizerName\n ? this._availableAuthorizers.find((a) => a.name === this._authorizerName)\n : undefined;\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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"}
|
|
@@ -103,6 +103,7 @@ var EndpointBuilder = class extends require_BaseFunctionBuilder.BaseFunctionBuil
|
|
|
103
103
|
/**
|
|
104
104
|
* Set the auditor storage service for this endpoint.
|
|
105
105
|
* This enables audit functionality and makes `auditor` available in the handler context.
|
|
106
|
+
* The audit action type is automatically inferred from the storage's generic parameter.
|
|
106
107
|
*/
|
|
107
108
|
auditor(storage) {
|
|
108
109
|
this._auditorStorage = storage;
|
|
@@ -195,4 +196,4 @@ Object.defineProperty(exports, 'EndpointBuilder', {
|
|
|
195
196
|
return EndpointBuilder;
|
|
196
197
|
}
|
|
197
198
|
});
|
|
198
|
-
//# sourceMappingURL=EndpointBuilder-
|
|
199
|
+
//# sourceMappingURL=EndpointBuilder-bMiowRHY.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EndpointBuilder-bMiowRHY.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 >","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 } 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> = () => ({}) 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\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 const authorizer = this._authorizerName\n ? this._availableAuthorizers.find((a) => a.name === this._authorizerName)\n : undefined;\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,4 +1,4 @@
|
|
|
1
|
-
import { EndpointBuilder } from "./EndpointBuilder-
|
|
1
|
+
import { EndpointBuilder } from "./EndpointBuilder-DN0NQp1W.mjs";
|
|
2
2
|
import { ConsoleLogger } from "@geekmidas/logger/console";
|
|
3
3
|
import uniqBy from "lodash.uniqby";
|
|
4
4
|
|
|
@@ -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
|
/**
|
|
@@ -160,6 +169,7 @@ var EndpointFactory = class EndpointFactory {
|
|
|
160
169
|
/**
|
|
161
170
|
* Set the auditor storage service for endpoints created from this factory.
|
|
162
171
|
* This enables audit functionality and makes `auditor` available in handler context.
|
|
172
|
+
* The audit action type is automatically inferred from the storage's generic parameter.
|
|
163
173
|
*/
|
|
164
174
|
auditor(storage) {
|
|
165
175
|
return new EndpointFactory({
|
|
@@ -172,7 +182,27 @@ var EndpointFactory = class EndpointFactory {
|
|
|
172
182
|
availableAuthorizers: this.availableAuthorizers,
|
|
173
183
|
defaultAuthorizerName: this.defaultAuthorizerName,
|
|
174
184
|
defaultAuditorStorage: storage,
|
|
175
|
-
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
|
|
176
206
|
});
|
|
177
207
|
}
|
|
178
208
|
createBuilder(method, path) {
|
|
@@ -187,6 +217,7 @@ var EndpointFactory = class EndpointFactory {
|
|
|
187
217
|
if (this.defaultAuthorizerName) builder._authorizerName = this.defaultAuthorizerName;
|
|
188
218
|
if (this.defaultAuditorStorage) builder._setAuditorStorage(this.defaultAuditorStorage);
|
|
189
219
|
if (this.defaultDatabaseService) builder._setDatabaseService(this.defaultDatabaseService);
|
|
220
|
+
if (this.defaultActorExtractor) builder._actorExtractor = this.defaultActorExtractor;
|
|
190
221
|
return builder;
|
|
191
222
|
}
|
|
192
223
|
post(path) {
|
|
@@ -212,4 +243,4 @@ const e = new EndpointFactory();
|
|
|
212
243
|
|
|
213
244
|
//#endregion
|
|
214
245
|
export { EndpointFactory, e };
|
|
215
|
-
//# sourceMappingURL=EndpointFactory-
|
|
246
|
+
//# sourceMappingURL=EndpointFactory-B0ldqkHz.mjs.map
|