@geekmidas/constructs 10.0.0-alpha.1 → 10.0.0-alpha.2
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/{Construct-CdhThxDI.mjs → Construct-BD5neF7w.mjs} +14 -1
- package/dist/Construct-BD5neF7w.mjs.map +1 -0
- package/dist/{Construct-WhCXIOPV.d.cts → Construct-C0ijr2qp.d.cts} +14 -1
- package/dist/Construct-C0ijr2qp.d.cts.map +1 -0
- package/dist/{Construct-B-xc0SE9.d.mts → Construct-Ct8nalEi.d.mts} +14 -1
- package/dist/Construct-Ct8nalEi.d.mts.map +1 -0
- package/dist/{Construct-roId57cU.cjs → Construct-CyS3RpTL.cjs} +14 -1
- package/dist/Construct-CyS3RpTL.cjs.map +1 -0
- package/dist/Cron-ByxdOfpE.d.mts +31 -0
- package/dist/Cron-ByxdOfpE.d.mts.map +1 -0
- package/dist/Cron-Wqh464aO.d.cts +31 -0
- package/dist/Cron-Wqh464aO.d.cts.map +1 -0
- package/dist/CronBuilder-BL0AP6fs.d.mts +44 -0
- package/dist/CronBuilder-BL0AP6fs.d.mts.map +1 -0
- package/dist/CronBuilder-BmABazzH.mjs +84 -0
- package/dist/CronBuilder-BmABazzH.mjs.map +1 -0
- package/dist/CronBuilder-BqpEzMPQ.d.cts +44 -0
- package/dist/CronBuilder-BqpEzMPQ.d.cts.map +1 -0
- package/dist/CronBuilder-CkXPJiGO.cjs +96 -0
- package/dist/CronBuilder-CkXPJiGO.cjs.map +1 -0
- package/dist/{Endpoint-BKR5QH6O.d.mts → Endpoint-2Wg7T7Cq.d.mts} +2 -2
- package/dist/{Endpoint-BQ9O0P1w.d.cts.map → Endpoint-2Wg7T7Cq.d.mts.map} +1 -1
- package/dist/{Endpoint-BBkV6l0k.cjs → Endpoint-BiaaMEn_.cjs} +3 -3
- package/dist/{Endpoint-BBkV6l0k.cjs.map → Endpoint-BiaaMEn_.cjs.map} +1 -1
- package/dist/{Endpoint-BQ9O0P1w.d.cts → Endpoint-CH9Fn1AD.d.cts} +2 -2
- package/dist/Endpoint-CH9Fn1AD.d.cts.map +1 -0
- package/dist/{Endpoint-BTj58Gob.mjs → Endpoint-VIOpSo0S.mjs} +3 -3
- package/dist/{Endpoint-BTj58Gob.mjs.map → Endpoint-VIOpSo0S.mjs.map} +1 -1
- package/dist/{EndpointFactory-DYoGLaIT.cjs → EndpointFactory-ChxLZllA.cjs} +7 -5
- package/dist/EndpointFactory-ChxLZllA.cjs.map +1 -0
- package/dist/{EndpointFactory-BejSTzbB.mjs → EndpointFactory-DTTCkGEL.mjs} +7 -5
- package/dist/EndpointFactory-DTTCkGEL.mjs.map +1 -0
- package/dist/{HonoEndpointAdaptor-wMsCyMgt.cjs → HonoEndpointAdaptor-D233Jvpk.cjs} +5 -6
- package/dist/{HonoEndpointAdaptor-wMsCyMgt.cjs.map → HonoEndpointAdaptor-D233Jvpk.cjs.map} +1 -1
- package/dist/{HonoEndpointAdaptor-7aYNdqJq.mjs → HonoEndpointAdaptor-NKQQQbBY.mjs} +4 -5
- package/dist/{HonoEndpointAdaptor-7aYNdqJq.mjs.map → HonoEndpointAdaptor-NKQQQbBY.mjs.map} +1 -1
- package/dist/{Queue-D6WeziRD.d.cts → Queue-D7ZuwBhy.d.cts} +2 -2
- package/dist/{Queue-D6WeziRD.d.cts.map → Queue-D7ZuwBhy.d.cts.map} +1 -1
- package/dist/{Queue-DpUeqdC8.d.mts → Queue-gVGfi2Yk.d.mts} +2 -2
- package/dist/{Queue-DpUeqdC8.d.mts.map → Queue-gVGfi2Yk.d.mts.map} +1 -1
- package/dist/{Subscriber-4rBJgDKI.d.mts → Subscriber-2mEi0ImH.d.cts} +3 -3
- package/dist/{Subscriber-4rBJgDKI.d.mts.map → Subscriber-2mEi0ImH.d.cts.map} +1 -1
- package/dist/{Subscriber-DVQowdyj.d.cts → Subscriber-xTJ9ayPN.d.mts} +3 -3
- package/dist/{Subscriber-DVQowdyj.d.cts.map → Subscriber-xTJ9ayPN.d.mts.map} +1 -1
- package/dist/SubscriberBuilder-4OPehf2R.cjs +120 -0
- package/dist/SubscriberBuilder-4OPehf2R.cjs.map +1 -0
- package/dist/SubscriberBuilder-BjkbeT9l.mjs +108 -0
- package/dist/SubscriberBuilder-BjkbeT9l.mjs.map +1 -0
- package/dist/SubscriberBuilder-Dptmo-1A.d.mts +62 -0
- package/dist/SubscriberBuilder-Dptmo-1A.d.mts.map +1 -0
- package/dist/SubscriberBuilder-waNhzjSM.d.cts +62 -0
- package/dist/SubscriberBuilder-waNhzjSM.d.cts.map +1 -0
- package/dist/{Topic-Ohx9dvWr.d.cts → Topic-19QeHBIR.d.cts} +2 -2
- package/dist/{Topic-Ohx9dvWr.d.cts.map → Topic-19QeHBIR.d.cts.map} +1 -1
- package/dist/{Topic-cmy2jOUy.d.mts → Topic-DuFeqkBh.d.mts} +2 -2
- package/dist/{Topic-cmy2jOUy.d.mts.map → Topic-DuFeqkBh.d.mts.map} +1 -1
- package/dist/adaptors/aws.cjs +243 -10
- package/dist/adaptors/aws.cjs.map +1 -1
- package/dist/adaptors/aws.d.cts +99 -10
- package/dist/adaptors/aws.d.cts.map +1 -1
- package/dist/adaptors/aws.d.mts +99 -10
- package/dist/adaptors/aws.d.mts.map +1 -1
- package/dist/adaptors/aws.mjs +240 -7
- package/dist/adaptors/aws.mjs.map +1 -1
- package/dist/adaptors/hono.cjs +6 -7
- package/dist/adaptors/hono.d.cts +6 -6
- package/dist/adaptors/hono.d.mts +6 -6
- package/dist/adaptors/hono.mjs +6 -7
- package/dist/adaptors/testing.cjs +9 -10
- package/dist/adaptors/testing.cjs.map +1 -1
- package/dist/adaptors/testing.d.cts +6 -6
- package/dist/adaptors/testing.d.mts +6 -6
- package/dist/adaptors/testing.mjs +6 -7
- package/dist/adaptors/testing.mjs.map +1 -1
- package/dist/auth.d.cts +1 -1
- package/dist/auth.d.mts +1 -1
- package/dist/{cache-CdQ7OLpR.d.cts → cache-BrRz3fEB.d.mts} +3 -3
- package/dist/{cache-CdQ7OLpR.d.cts.map → cache-BrRz3fEB.d.mts.map} +1 -1
- package/dist/{cache-DYoJFcfd.d.mts → cache-BtZY_tHe.d.cts} +3 -3
- package/dist/{cache-DYoJFcfd.d.mts.map → cache-BtZY_tHe.d.cts.map} +1 -1
- package/dist/cache.d.cts +2 -2
- package/dist/cache.d.mts +2 -2
- package/dist/{construct-interface-BqwRNYA2.d.mts → construct-interface-D9d4Gm4p.d.cts} +2 -2
- package/dist/{construct-interface-BqwRNYA2.d.mts.map → construct-interface-D9d4Gm4p.d.cts.map} +1 -1
- package/dist/{construct-interface-D2nNkHUN.d.cts → construct-interface-g5GM5pwR.d.mts} +2 -2
- package/dist/{construct-interface-D2nNkHUN.d.cts.map → construct-interface-g5GM5pwR.d.mts.map} +1 -1
- package/dist/construct-interface.d.cts +1 -1
- package/dist/construct-interface.d.mts +1 -1
- package/dist/credential.d.cts +1 -1
- package/dist/credential.d.mts +1 -1
- package/dist/crons/index.cjs +8 -87
- package/dist/crons/index.cjs.map +1 -1
- package/dist/crons/index.d.cts +10 -46
- package/dist/crons/index.d.cts.map +1 -1
- package/dist/crons/index.d.mts +10 -46
- package/dist/crons/index.d.mts.map +1 -1
- package/dist/crons/index.mjs +6 -83
- package/dist/crons/index.mjs.map +1 -1
- package/dist/database/kysely.d.cts +2 -2
- package/dist/database/kysely.d.mts +2 -2
- package/dist/email.d.cts +1 -1
- package/dist/email.d.mts +1 -1
- package/dist/endpoints/index.cjs +6 -7
- package/dist/endpoints/index.d.cts +5 -5
- package/dist/endpoints/index.d.mts +5 -5
- package/dist/endpoints/index.mjs +5 -6
- package/dist/file-server.d.cts +1 -1
- package/dist/file-server.d.mts +1 -1
- package/dist/functions/index.cjs +2 -2
- package/dist/functions/index.d.cts +3 -3
- package/dist/functions/index.d.mts +3 -3
- package/dist/functions/index.mjs +2 -2
- package/dist/{functions-DukjG8ov.cjs → functions-Bd3TPxid.cjs} +10 -2
- package/dist/{functions-DukjG8ov.cjs.map → functions-Bd3TPxid.cjs.map} +1 -1
- package/dist/{functions-Cpff1uZH.mjs → functions-Cxbo-pEd.mjs} +10 -2
- package/dist/{functions-Cpff1uZH.mjs.map → functions-Cxbo-pEd.mjs.map} +1 -1
- package/dist/{index-Cvz551AO.d.mts → index-BxHDdy6a.d.mts} +5 -5
- package/dist/{index-Cvz551AO.d.mts.map → index-BxHDdy6a.d.mts.map} +1 -1
- package/dist/{index-BTvozlUD.d.cts → index-CubPzHd9.d.mts} +16 -9
- package/dist/index-CubPzHd9.d.mts.map +1 -0
- package/dist/{index-L7pz0R0T.d.mts → index-JSf9xNIJ.d.cts} +22 -14
- package/dist/index-JSf9xNIJ.d.cts.map +1 -0
- package/dist/{index-D5zqAJ2e.d.cts → index-V2nksZIJ.d.cts} +5 -5
- package/dist/{index-D5zqAJ2e.d.cts.map → index-V2nksZIJ.d.cts.map} +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +1 -1
- package/dist/{lazyAccessors-DM6HcXQk.mjs → lazyAccessors-BoJN3SMd.mjs} +41 -2
- package/dist/lazyAccessors-BoJN3SMd.mjs.map +1 -0
- package/dist/{lazyAccessors-DrJj8NpA.cjs → lazyAccessors-e3j2oE2m.cjs} +52 -1
- package/dist/lazyAccessors-e3j2oE2m.cjs.map +1 -0
- package/dist/object-storage.d.cts +1 -1
- package/dist/object-storage.d.mts +1 -1
- package/dist/{processAudits-Bc8rz6Ev.cjs → processAudits-CGqttuXm.cjs} +1 -1
- package/dist/{processAudits-Bc8rz6Ev.cjs.map → processAudits-CGqttuXm.cjs.map} +1 -1
- package/dist/{processAudits-D89tICM4.mjs → processAudits-Dmts9H_b.mjs} +1 -1
- package/dist/{processAudits-D89tICM4.mjs.map → processAudits-Dmts9H_b.mjs.map} +1 -1
- package/dist/queue/index.cjs +1 -1
- package/dist/queue/index.d.cts +5 -5
- package/dist/queue/index.d.mts +5 -5
- package/dist/queue/index.mjs +1 -1
- package/dist/rest-api.cjs +4 -4
- package/dist/rest-api.d.cts +5 -5
- package/dist/rest-api.d.mts +11 -11
- package/dist/rest-api.d.mts.map +1 -1
- package/dist/rest-api.mjs +4 -4
- package/dist/site.d.cts +1 -1
- package/dist/site.d.mts +1 -1
- package/dist/subscribers/index.cjs +7 -103
- package/dist/subscribers/index.cjs.map +1 -1
- package/dist/subscribers/index.d.cts +7 -56
- package/dist/subscribers/index.d.cts.map +1 -1
- package/dist/subscribers/index.d.mts +7 -56
- package/dist/subscribers/index.d.mts.map +1 -1
- package/dist/subscribers/index.mjs +4 -99
- package/dist/subscribers/index.mjs.map +1 -1
- package/dist/topic/index.cjs +1 -1
- package/dist/topic/index.d.cts +2 -2
- package/dist/topic/index.d.mts +2 -2
- package/dist/topic/index.mjs +1 -1
- package/dist/worker.cjs +91 -0
- package/dist/worker.cjs.map +1 -0
- package/dist/worker.d.cts +95 -0
- package/dist/worker.d.cts.map +1 -0
- package/dist/worker.d.mts +95 -0
- package/dist/worker.d.mts.map +1 -0
- package/dist/worker.mjs +90 -0
- package/dist/worker.mjs.map +1 -0
- package/package.json +44 -52
- package/dist/AWSScheduledFunction-9bJS4WdJ.d.cts +0 -122
- package/dist/AWSScheduledFunction-9bJS4WdJ.d.cts.map +0 -1
- package/dist/AWSScheduledFunction-BJjj8B5V.mjs +0 -243
- package/dist/AWSScheduledFunction-BJjj8B5V.mjs.map +0 -1
- package/dist/AWSScheduledFunction-BO5iEMSh.d.mts +0 -122
- package/dist/AWSScheduledFunction-BO5iEMSh.d.mts.map +0 -1
- package/dist/AWSScheduledFunction-qu4ieRZR.cjs +0 -255
- package/dist/AWSScheduledFunction-qu4ieRZR.cjs.map +0 -1
- package/dist/Construct-B-xc0SE9.d.mts.map +0 -1
- package/dist/Construct-CdhThxDI.mjs.map +0 -1
- package/dist/Construct-WhCXIOPV.d.cts.map +0 -1
- package/dist/Construct-roId57cU.cjs.map +0 -1
- package/dist/Endpoint-BKR5QH6O.d.mts.map +0 -1
- package/dist/EndpointFactory-BejSTzbB.mjs.map +0 -1
- package/dist/EndpointFactory-DYoGLaIT.cjs.map +0 -1
- package/dist/index-BTvozlUD.d.cts.map +0 -1
- package/dist/index-L7pz0R0T.d.mts.map +0 -1
- package/dist/lazyAccessors-DM6HcXQk.mjs.map +0 -1
- package/dist/lazyAccessors-DrJj8NpA.cjs.map +0 -1
- package/dist/publisher-CGEo8UKD.mjs +0 -41
- package/dist/publisher-CGEo8UKD.mjs.map +0 -1
- package/dist/publisher-CqGsXB2X.cjs +0 -53
- package/dist/publisher-CqGsXB2X.cjs.map +0 -1
package/dist/adaptors/aws.d.mts
CHANGED
|
@@ -1,22 +1,111 @@
|
|
|
1
|
-
import "../Construct-
|
|
2
|
-
import "../index-
|
|
3
|
-
import
|
|
4
|
-
import "../
|
|
1
|
+
import "../Construct-Ct8nalEi.mjs";
|
|
2
|
+
import { Function as Function$1, FunctionHandler } from "../index-CubPzHd9.mjs";
|
|
3
|
+
import "../construct-interface-g5GM5pwR.mjs";
|
|
4
|
+
import { Cron } from "../Cron-ByxdOfpE.mjs";
|
|
5
5
|
import { HttpMethod } from "../types-aKksMEWL.mjs";
|
|
6
6
|
import { Telemetry } from "../telemetry-D7bVFLGi.mjs";
|
|
7
|
-
import { CookieFn, Endpoint, EndpointSchemas } from "../Endpoint-
|
|
8
|
-
import { Queue } from "../Queue-
|
|
9
|
-
import { Subscriber } from "../Subscriber-
|
|
7
|
+
import { CookieFn, Endpoint, EndpointSchemas } from "../Endpoint-2Wg7T7Cq.mjs";
|
|
8
|
+
import { Queue } from "../Queue-gVGfi2Yk.mjs";
|
|
9
|
+
import { Subscriber } from "../Subscriber-xTJ9ayPN.mjs";
|
|
10
10
|
import { EnvironmentParser } from "@geekmidas/envkit";
|
|
11
|
-
import { Service, ServiceRecord } from "@geekmidas/services";
|
|
11
|
+
import { Service, ServiceDiscovery, ServiceRecord } from "@geekmidas/services";
|
|
12
12
|
import { MiddlewareObj } from "@middy/core";
|
|
13
|
-
import { AuditStorage, AuditableAction } from "@geekmidas/audit";
|
|
13
|
+
import { AuditStorage, AuditableAction, Auditor } from "@geekmidas/audit";
|
|
14
14
|
import { EventPublisher } from "@geekmidas/events";
|
|
15
15
|
import { Logger } from "@geekmidas/logger";
|
|
16
|
-
import { InferComposableStandardSchema } from "@geekmidas/schema";
|
|
16
|
+
import { ComposableStandardSchema, InferComposableStandardSchema, InferStandardSchema } from "@geekmidas/schema";
|
|
17
17
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
18
18
|
import { APIGatewayProxyEvent, APIGatewayProxyEventV2, Context, Handler, SQSBatchResponse, SQSEvent } from "aws-lambda";
|
|
19
19
|
|
|
20
|
+
//#region src/functions/FunctionExecutionWrapper.d.ts
|
|
21
|
+
declare abstract class FunctionExecutionWrapper<TInput extends ComposableStandardSchema | undefined = undefined, TOutSchema extends StandardSchemaV1 | undefined = undefined, TServices extends Service[] = [], TLogger extends Logger = Logger, TEventPublisher extends EventPublisher<any> | undefined = undefined, TEventPublisherServiceName extends string = string, TAuditStorage extends AuditStorage | undefined = undefined, TAuditStorageServiceName extends string = string, TDatabase = undefined, TDatabaseServiceName extends string = string, TAuditAction extends AuditableAction<string, unknown> = AuditableAction<string, unknown>> {
|
|
22
|
+
protected envParser: EnvironmentParser<{}>;
|
|
23
|
+
protected readonly fn: Function$1<TInput, TServices, TLogger, TOutSchema, TEventPublisher, TEventPublisherServiceName, TAuditStorage, TAuditStorageServiceName, TDatabase, TDatabaseServiceName, TAuditAction, FunctionHandler<TInput, TServices, TLogger, TOutSchema, TDatabase, TAuditStorage, TAuditAction>>;
|
|
24
|
+
constructor(envParser: EnvironmentParser<{}>, fn: Function$1<TInput, TServices, TLogger, TOutSchema, TEventPublisher, TEventPublisherServiceName, TAuditStorage, TAuditStorageServiceName, TDatabase, TDatabaseServiceName, TAuditAction, FunctionHandler<TInput, TServices, TLogger, TOutSchema, TDatabase, TAuditStorage, TAuditAction>>);
|
|
25
|
+
protected _logger?: TLogger;
|
|
26
|
+
get logger(): TLogger;
|
|
27
|
+
get serviceDiscovery(): ServiceDiscovery<ServiceRecord<TServices>>;
|
|
28
|
+
getServices(): Promise<ServiceRecord<TServices>>;
|
|
29
|
+
getDatabase(): Promise<TDatabase | undefined>;
|
|
30
|
+
/**
|
|
31
|
+
* Get the audit storage service if configured.
|
|
32
|
+
* Returns undefined if no auditor storage is configured.
|
|
33
|
+
*/
|
|
34
|
+
getAuditStorage(): Promise<TAuditStorage | undefined>;
|
|
35
|
+
/**
|
|
36
|
+
* Create an auditor instance for the function.
|
|
37
|
+
* Returns undefined if no auditor storage is configured.
|
|
38
|
+
*/
|
|
39
|
+
createAuditor(): Promise<Auditor<TAuditAction> | undefined>;
|
|
40
|
+
/**
|
|
41
|
+
* Execute handler with audit transaction support.
|
|
42
|
+
* If the audit storage has a database (via getDatabase()), wraps execution
|
|
43
|
+
* in a transaction so audits are atomic with handler's database operations.
|
|
44
|
+
*
|
|
45
|
+
* @param handler - The handler function to execute (receives auditor and db)
|
|
46
|
+
* @returns The handler result
|
|
47
|
+
*/
|
|
48
|
+
executeWithAudit<T>(handler: (ctx: {
|
|
49
|
+
auditor?: Auditor<TAuditAction>;
|
|
50
|
+
db?: TDatabase;
|
|
51
|
+
}) => Promise<T>): Promise<T>;
|
|
52
|
+
getFunctionInput<TEvent>(event: TEvent): Promise<InferComposableStandardSchema<TInput>>;
|
|
53
|
+
publishEvents(response: InferStandardSchema<TOutSchema>): Promise<void>;
|
|
54
|
+
parseComposableStandardSchema<T extends ComposableStandardSchema>(data: unknown, schema: T): Promise<InferComposableStandardSchema<T>>;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=FunctionExecutionWrapper.d.ts.map
|
|
57
|
+
//#endregion
|
|
58
|
+
//#region src/functions/AWSLambdaFunction.d.ts
|
|
59
|
+
type AWSLambdaHandler$2<TEvent = any, TResult = any> = Handler<TEvent, TResult>;
|
|
60
|
+
declare class AWSLambdaFunction<TInput extends ComposableStandardSchema | undefined = undefined, TOutSchema extends StandardSchemaV1 | undefined = undefined, TServices extends Service[] = [], TLogger extends Logger = Logger, TEventPublisher extends EventPublisher<any> | undefined = undefined, TEventPublisherServiceName extends string = string, TAuditStorage extends AuditStorage | undefined = undefined, TAuditStorageServiceName extends string = string, TDatabase = undefined, TDatabaseServiceName extends string = string, TAuditAction extends AuditableAction<string, unknown> = AuditableAction<string, unknown>> extends FunctionExecutionWrapper<TInput, TOutSchema, TServices, TLogger, TEventPublisher, TEventPublisherServiceName, TAuditStorage, TAuditStorageServiceName, TDatabase, TDatabaseServiceName, TAuditAction> {
|
|
61
|
+
readonly fn: Function$1<TInput, TServices, TLogger, TOutSchema, TEventPublisher, TEventPublisherServiceName, TAuditStorage, TAuditStorageServiceName, TDatabase, TDatabaseServiceName, TAuditAction, FunctionHandler<TInput, TServices, TLogger, TOutSchema, TDatabase, TAuditStorage, TAuditAction>>;
|
|
62
|
+
constructor(envParser: EnvironmentParser<{}>, fn: Function$1<TInput, TServices, TLogger, TOutSchema, TEventPublisher, TEventPublisherServiceName, TAuditStorage, TAuditStorageServiceName, TDatabase, TDatabaseServiceName, TAuditAction, FunctionHandler<TInput, TServices, TLogger, TOutSchema, TDatabase, TAuditStorage, TAuditAction>>);
|
|
63
|
+
private error;
|
|
64
|
+
private baseInput;
|
|
65
|
+
private input;
|
|
66
|
+
private loggerMiddleware;
|
|
67
|
+
private services;
|
|
68
|
+
private database;
|
|
69
|
+
private auditor;
|
|
70
|
+
private events;
|
|
71
|
+
private _handler;
|
|
72
|
+
get handler(): AWSLambdaHandler$2;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=AWSLambdaFunction.d.ts.map
|
|
75
|
+
|
|
76
|
+
//#endregion
|
|
77
|
+
//#region src/crons/AWSScheduledFunction.d.ts
|
|
78
|
+
/**
|
|
79
|
+
* AWS Lambda adaptor for {@link Cron} constructs.
|
|
80
|
+
*
|
|
81
|
+
* A `Cron` is a {@link import('../functions').Function} that is invoked on a
|
|
82
|
+
* schedule (an EventBridge rule) rather than by an API request. Because of
|
|
83
|
+
* that, the runtime execution pipeline is identical to a regular Lambda
|
|
84
|
+
* function: input parsing, service/database/auditor wiring, event publishing,
|
|
85
|
+
* error handling, and the `runWithRequestContext` wrapper that powers
|
|
86
|
+
* request-scoped logging via `serviceContext.getLogger()`.
|
|
87
|
+
*
|
|
88
|
+
* This adaptor therefore reuses {@link AWSLambdaFunction} wholesale and only
|
|
89
|
+
* narrows the constructor to accept a `Cron`. The schedule expression itself
|
|
90
|
+
* (`cron.schedule`) is **deploy-time** infrastructure consumed by the CLI to
|
|
91
|
+
* provision the EventBridge rule — it is not needed at runtime.
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```typescript
|
|
95
|
+
* import { AWSScheduledFunction } from '@geekmidas/constructs/crons';
|
|
96
|
+
* import { cancelPastBookings } from '../../../src/crons/cancelPastBookings.js';
|
|
97
|
+
* import { envParser } from '../../../src/env';
|
|
98
|
+
*
|
|
99
|
+
* const adapter = new AWSScheduledFunction(envParser, cancelPastBookings);
|
|
100
|
+
*
|
|
101
|
+
* export const handler = adapter.handler;
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
104
|
+
declare class AWSScheduledFunction<TInput extends ComposableStandardSchema | undefined = undefined, TServices extends Service[] = [], TLogger extends Logger = Logger, TOutSchema extends StandardSchemaV1 | undefined = undefined, TEventPublisher extends EventPublisher<any> | undefined = undefined, TEventPublisherServiceName extends string = string, TDatabase = undefined, TDatabaseServiceName extends string = string> extends AWSLambdaFunction<TInput, TOutSchema, TServices, TLogger, TEventPublisher, TEventPublisherServiceName, undefined, string, TDatabase, TDatabaseServiceName> {
|
|
105
|
+
constructor(envParser: EnvironmentParser<{}>, cron: Cron<TInput, TServices, TLogger, TOutSchema, TEventPublisher, TEventPublisherServiceName, TDatabase, TDatabaseServiceName>);
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=AWSScheduledFunction.d.ts.map
|
|
108
|
+
//#endregion
|
|
20
109
|
//#region src/endpoints/AmazonApiGatewayEndpointAdaptor.d.ts
|
|
21
110
|
/**
|
|
22
111
|
* Telescope integration for request recording.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aws.d.mts","names":[],"sources":["../../src/endpoints/AmazonApiGatewayEndpointAdaptor.ts","../../src/endpoints/AmazonApiGatewayV1EndpointAdaptor.ts","../../src/endpoints/AmazonApiGatewayV2EndpointAdaptor.ts","../../src/queue/AWSLambdaQueueAdaptor.ts","../../src/subscribers/AWSLambdaSubscriberAdaptor.ts"],"sourcesContent":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"aws.d.mts","names":[],"sources":["../../src/functions/FunctionExecutionWrapper.ts","../../src/functions/AWSLambdaFunction.ts","../../src/crons/AWSScheduledFunction.ts","../../src/endpoints/AmazonApiGatewayEndpointAdaptor.ts","../../src/endpoints/AmazonApiGatewayV1EndpointAdaptor.ts","../../src/endpoints/AmazonApiGatewayV2EndpointAdaptor.ts","../../src/queue/AWSLambdaQueueAdaptor.ts","../../src/subscribers/AWSLambdaSubscriberAdaptor.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/adaptors/aws.mjs
CHANGED
|
@@ -1,19 +1,252 @@
|
|
|
1
|
-
import { __toESM } from "../Construct-
|
|
1
|
+
import { __toESM } from "../Construct-BD5neF7w.mjs";
|
|
2
2
|
import "../construct-interface-Z4CpS8tK.mjs";
|
|
3
|
-
import "../functions-
|
|
3
|
+
import { FunctionBuilder } from "../functions-Cxbo-pEd.mjs";
|
|
4
4
|
import "../clone-DblgEZZa.mjs";
|
|
5
|
-
import { Endpoint, ResponseBuilder, require_lodash } from "../Endpoint-
|
|
5
|
+
import { Endpoint, ResponseBuilder, require_lodash } from "../Endpoint-VIOpSo0S.mjs";
|
|
6
6
|
import { envParserFor } from "../surfaceEnv-C3Ktahea.mjs";
|
|
7
|
-
import { publishConstructEvents } from "../
|
|
8
|
-
import {
|
|
9
|
-
import { createAuditContext, executeWithAuditTransaction } from "../processAudits-D89tICM4.mjs";
|
|
10
|
-
import { createApiGatewayCookies } from "../lazyAccessors-DM6HcXQk.mjs";
|
|
7
|
+
import { createApiGatewayCookies, publishConstructEvents, publishEvents } from "../lazyAccessors-BoJN3SMd.mjs";
|
|
8
|
+
import { createAuditContext, executeWithAuditTransaction } from "../processAudits-Dmts9H_b.mjs";
|
|
11
9
|
import { ForbiddenError, UnprocessableEntityError, wrapError } from "@geekmidas/errors";
|
|
12
10
|
import { ServiceDiscovery, runWithRequestContext } from "@geekmidas/services";
|
|
13
11
|
import middy from "@middy/core";
|
|
12
|
+
import { DefaultAuditor } from "@geekmidas/audit";
|
|
13
|
+
import { withAuditableTransaction } from "@geekmidas/audit/kysely";
|
|
14
14
|
import { withRlsContext } from "@geekmidas/db/rls";
|
|
15
15
|
import qs from "qs";
|
|
16
16
|
|
|
17
|
+
//#region src/functions/FunctionExecutionWrapper.ts
|
|
18
|
+
var FunctionExecutionWrapper = class {
|
|
19
|
+
constructor(envParser, fn) {
|
|
20
|
+
this.envParser = envParser;
|
|
21
|
+
this.fn = fn;
|
|
22
|
+
}
|
|
23
|
+
_logger;
|
|
24
|
+
get logger() {
|
|
25
|
+
return this._logger || this.fn.logger;
|
|
26
|
+
}
|
|
27
|
+
get serviceDiscovery() {
|
|
28
|
+
const serviceDiscovery = ServiceDiscovery.getInstance(this.envParser);
|
|
29
|
+
return serviceDiscovery;
|
|
30
|
+
}
|
|
31
|
+
getServices() {
|
|
32
|
+
return this.serviceDiscovery.register(this.fn.services);
|
|
33
|
+
}
|
|
34
|
+
async getDatabase() {
|
|
35
|
+
if (!this.fn.databaseService) return void 0;
|
|
36
|
+
const services = await this.serviceDiscovery.register([this.fn.databaseService]);
|
|
37
|
+
return services[this.fn.databaseService.serviceName];
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get the audit storage service if configured.
|
|
41
|
+
* Returns undefined if no auditor storage is configured.
|
|
42
|
+
*/
|
|
43
|
+
async getAuditStorage() {
|
|
44
|
+
if (!this.fn.auditorStorageService) return void 0;
|
|
45
|
+
const services = await this.serviceDiscovery.register([this.fn.auditorStorageService]);
|
|
46
|
+
return services[this.fn.auditorStorageService.serviceName];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Create an auditor instance for the function.
|
|
50
|
+
* Returns undefined if no auditor storage is configured.
|
|
51
|
+
*/
|
|
52
|
+
async createAuditor() {
|
|
53
|
+
const storage = await this.getAuditStorage();
|
|
54
|
+
if (!storage) return void 0;
|
|
55
|
+
return new DefaultAuditor({
|
|
56
|
+
actor: {
|
|
57
|
+
id: "system",
|
|
58
|
+
type: "system"
|
|
59
|
+
},
|
|
60
|
+
storage,
|
|
61
|
+
metadata: { function: this.fn.type }
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Execute handler with audit transaction support.
|
|
66
|
+
* If the audit storage has a database (via getDatabase()), wraps execution
|
|
67
|
+
* in a transaction so audits are atomic with handler's database operations.
|
|
68
|
+
*
|
|
69
|
+
* @param handler - The handler function to execute (receives auditor and db)
|
|
70
|
+
* @returns The handler result
|
|
71
|
+
*/
|
|
72
|
+
async executeWithAudit(handler) {
|
|
73
|
+
const auditor = await this.createAuditor();
|
|
74
|
+
const storage = await this.getAuditStorage();
|
|
75
|
+
if (!auditor || !storage) {
|
|
76
|
+
const db$1 = await this.getDatabase();
|
|
77
|
+
return handler({ db: db$1 });
|
|
78
|
+
}
|
|
79
|
+
const storageDb = storage.getDatabase?.();
|
|
80
|
+
const databaseServiceName = this.fn.databaseService?.serviceName;
|
|
81
|
+
const auditDbServiceName = this.fn.auditorStorageService?.serviceName;
|
|
82
|
+
if (storageDb && databaseServiceName && auditDbServiceName) return withAuditableTransaction(storageDb, auditor, async (trx) => {
|
|
83
|
+
const response$1 = await handler({
|
|
84
|
+
auditor,
|
|
85
|
+
db: trx
|
|
86
|
+
});
|
|
87
|
+
return response$1;
|
|
88
|
+
});
|
|
89
|
+
const db = await this.getDatabase();
|
|
90
|
+
const response = await handler({
|
|
91
|
+
auditor,
|
|
92
|
+
db
|
|
93
|
+
});
|
|
94
|
+
await auditor.flush();
|
|
95
|
+
return response;
|
|
96
|
+
}
|
|
97
|
+
async getFunctionInput(event) {
|
|
98
|
+
const parsedInput = await FunctionBuilder.parseComposableStandardSchema(event, this.fn.input);
|
|
99
|
+
return parsedInput;
|
|
100
|
+
}
|
|
101
|
+
async publishEvents(response) {
|
|
102
|
+
await publishEvents(this.logger, this.serviceDiscovery, this.fn.events, response, this.fn.publisherService);
|
|
103
|
+
}
|
|
104
|
+
async parseComposableStandardSchema(data, schema) {
|
|
105
|
+
return FunctionBuilder.parseComposableStandardSchema(data, schema);
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
//#endregion
|
|
110
|
+
//#region src/functions/AWSLambdaFunction.ts
|
|
111
|
+
var AWSLambdaFunction = class extends FunctionExecutionWrapper {
|
|
112
|
+
constructor(envParser, fn) {
|
|
113
|
+
super(envParser, fn);
|
|
114
|
+
this.fn = fn;
|
|
115
|
+
}
|
|
116
|
+
error() {
|
|
117
|
+
return { onError: (req) => {
|
|
118
|
+
const logger = req.event?.logger || this.fn.logger;
|
|
119
|
+
logger.error(req.error || {}, "Error processing function");
|
|
120
|
+
throw wrapError(req.error);
|
|
121
|
+
} };
|
|
122
|
+
}
|
|
123
|
+
baseInput() {
|
|
124
|
+
return { before: (_req) => {} };
|
|
125
|
+
}
|
|
126
|
+
input() {
|
|
127
|
+
return { before: async (req) => {
|
|
128
|
+
try {
|
|
129
|
+
if (this.fn.input) {
|
|
130
|
+
const parsedInput = await FunctionBuilder.parseComposableStandardSchema(req.event, this.fn.input);
|
|
131
|
+
req.event.parsedInput = parsedInput;
|
|
132
|
+
} else req.event.parsedInput = req.event;
|
|
133
|
+
} catch (error) {
|
|
134
|
+
this.logger.error({
|
|
135
|
+
error,
|
|
136
|
+
event: req.event
|
|
137
|
+
}, "Failed to parse input");
|
|
138
|
+
throw error;
|
|
139
|
+
}
|
|
140
|
+
} };
|
|
141
|
+
}
|
|
142
|
+
loggerMiddleware() {
|
|
143
|
+
return { before: (req) => {
|
|
144
|
+
this._logger = this.fn.logger.child({
|
|
145
|
+
fn: {
|
|
146
|
+
name: req.context.functionName,
|
|
147
|
+
version: req.context.functionVersion,
|
|
148
|
+
memory: req.context.memoryLimitInMB
|
|
149
|
+
},
|
|
150
|
+
req: { id: req.context.awsRequestId }
|
|
151
|
+
});
|
|
152
|
+
req.event.logger = this._logger;
|
|
153
|
+
} };
|
|
154
|
+
}
|
|
155
|
+
services() {
|
|
156
|
+
return { before: async (req) => {
|
|
157
|
+
req.event.services = await this.getServices();
|
|
158
|
+
} };
|
|
159
|
+
}
|
|
160
|
+
database() {
|
|
161
|
+
return { before: async (req) => {
|
|
162
|
+
req.event.db = await this.getDatabase();
|
|
163
|
+
} };
|
|
164
|
+
}
|
|
165
|
+
auditor() {
|
|
166
|
+
return {
|
|
167
|
+
before: async (req) => {
|
|
168
|
+
req.event.auditor = await this.createAuditor();
|
|
169
|
+
},
|
|
170
|
+
after: async (req) => {
|
|
171
|
+
if (req.event.auditor) {
|
|
172
|
+
const records = req.event.auditor.getRecords();
|
|
173
|
+
if (records.length > 0) {
|
|
174
|
+
this.logger.debug({ auditCount: records.length }, "Flushing function audits");
|
|
175
|
+
await req.event.auditor.flush();
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
events() {
|
|
182
|
+
return { after: async (req) => {
|
|
183
|
+
const response = req.response || void 0;
|
|
184
|
+
await this.publishEvents(response);
|
|
185
|
+
} };
|
|
186
|
+
}
|
|
187
|
+
async _handler(event) {
|
|
188
|
+
const result = await this.fn.fn({
|
|
189
|
+
input: event.parsedInput,
|
|
190
|
+
services: event.services,
|
|
191
|
+
logger: event.logger,
|
|
192
|
+
db: event.db,
|
|
193
|
+
auditor: event.auditor
|
|
194
|
+
});
|
|
195
|
+
const output = await this.fn.parseOutput(result);
|
|
196
|
+
return output;
|
|
197
|
+
}
|
|
198
|
+
get handler() {
|
|
199
|
+
const handler = this._handler.bind(this);
|
|
200
|
+
const chain = middy(handler).use(this.loggerMiddleware()).use(this.baseInput()).use(this.error()).use(this.services()).use(this.database()).use(this.auditor()).use(this.input()).use(this.events());
|
|
201
|
+
const wrappedHandler = async (event, context) => {
|
|
202
|
+
const startTime = Date.now();
|
|
203
|
+
const requestId = context.awsRequestId;
|
|
204
|
+
const logger = this.fn.logger.child({ requestId });
|
|
205
|
+
return runWithRequestContext({
|
|
206
|
+
logger,
|
|
207
|
+
requestId,
|
|
208
|
+
startTime
|
|
209
|
+
}, () => chain(event, context));
|
|
210
|
+
};
|
|
211
|
+
return wrappedHandler;
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
//#endregion
|
|
216
|
+
//#region src/crons/AWSScheduledFunction.ts
|
|
217
|
+
/**
|
|
218
|
+
* AWS Lambda adaptor for {@link Cron} constructs.
|
|
219
|
+
*
|
|
220
|
+
* A `Cron` is a {@link import('../functions').Function} that is invoked on a
|
|
221
|
+
* schedule (an EventBridge rule) rather than by an API request. Because of
|
|
222
|
+
* that, the runtime execution pipeline is identical to a regular Lambda
|
|
223
|
+
* function: input parsing, service/database/auditor wiring, event publishing,
|
|
224
|
+
* error handling, and the `runWithRequestContext` wrapper that powers
|
|
225
|
+
* request-scoped logging via `serviceContext.getLogger()`.
|
|
226
|
+
*
|
|
227
|
+
* This adaptor therefore reuses {@link AWSLambdaFunction} wholesale and only
|
|
228
|
+
* narrows the constructor to accept a `Cron`. The schedule expression itself
|
|
229
|
+
* (`cron.schedule`) is **deploy-time** infrastructure consumed by the CLI to
|
|
230
|
+
* provision the EventBridge rule — it is not needed at runtime.
|
|
231
|
+
*
|
|
232
|
+
* @example
|
|
233
|
+
* ```typescript
|
|
234
|
+
* import { AWSScheduledFunction } from '@geekmidas/constructs/crons';
|
|
235
|
+
* import { cancelPastBookings } from '../../../src/crons/cancelPastBookings.js';
|
|
236
|
+
* import { envParser } from '../../../src/env';
|
|
237
|
+
*
|
|
238
|
+
* const adapter = new AWSScheduledFunction(envParser, cancelPastBookings);
|
|
239
|
+
*
|
|
240
|
+
* export const handler = adapter.handler;
|
|
241
|
+
* ```
|
|
242
|
+
*/
|
|
243
|
+
var AWSScheduledFunction = class extends AWSLambdaFunction {
|
|
244
|
+
constructor(envParser, cron) {
|
|
245
|
+
super(envParser, cron);
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
//#endregion
|
|
17
250
|
//#region src/endpoints/AmazonApiGatewayEndpointAdaptor.ts
|
|
18
251
|
var import_lodash = __toESM(require_lodash(), 1);
|
|
19
252
|
var AmazonApiGatewayEndpoint = class {
|