@geekmidas/constructs 3.0.0 → 3.0.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/CHANGELOG.md +12 -0
- package/dist/AWSLambdaFunction-BF1gJJjG.d.mts.map +1 -1
- package/dist/{AWSLambdaFunction-wtE9Lx_-.cjs → AWSLambdaFunction-CPEAl5nZ.cjs} +15 -3
- package/dist/AWSLambdaFunction-CPEAl5nZ.cjs.map +1 -0
- package/dist/{AWSLambdaFunction-BDL7Thi_.mjs → AWSLambdaFunction-DJiCAPAf.mjs} +15 -3
- package/dist/AWSLambdaFunction-DJiCAPAf.mjs.map +1 -0
- package/dist/AWSLambdaFunction-tzqv5XU6.d.cts.map +1 -1
- package/dist/{AWSLambdaSubscriberAdaptor-DsRmmGm1.mjs → AWSLambdaSubscriberAdaptor-RKwKYLl1.mjs} +14 -3
- package/dist/AWSLambdaSubscriberAdaptor-RKwKYLl1.mjs.map +1 -0
- package/dist/{AWSLambdaSubscriberAdaptor-BtBKExsh.cjs → AWSLambdaSubscriberAdaptor-eZ3qoKvK.cjs} +13 -2
- package/dist/AWSLambdaSubscriberAdaptor-eZ3qoKvK.cjs.map +1 -0
- package/dist/{AmazonApiGatewayEndpointAdaptor-CQSZArI6.d.mts → AmazonApiGatewayEndpointAdaptor-B30TqZRX.d.mts} +2 -1
- package/dist/AmazonApiGatewayEndpointAdaptor-B30TqZRX.d.mts.map +1 -0
- package/dist/{AmazonApiGatewayEndpointAdaptor-Bxvs-F0F.d.cts → AmazonApiGatewayEndpointAdaptor-D4lAuXA-.d.cts} +2 -1
- package/dist/AmazonApiGatewayEndpointAdaptor-D4lAuXA-.d.cts.map +1 -0
- package/dist/{AmazonApiGatewayEndpointAdaptor-BPxHm8Tg.mjs → AmazonApiGatewayEndpointAdaptor-ciUHVvPX.mjs} +6 -2
- package/dist/AmazonApiGatewayEndpointAdaptor-ciUHVvPX.mjs.map +1 -0
- package/dist/{AmazonApiGatewayEndpointAdaptor-1XyivLJs.cjs → AmazonApiGatewayEndpointAdaptor-jDYqkgFE.cjs} +6 -2
- package/dist/AmazonApiGatewayEndpointAdaptor-jDYqkgFE.cjs.map +1 -0
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-D9zY3nHe.d.cts → AmazonApiGatewayV1EndpointAdaptor-B5xFYauV.d.cts} +2 -2
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-D9zY3nHe.d.cts.map → AmazonApiGatewayV1EndpointAdaptor-B5xFYauV.d.cts.map} +1 -1
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-xTrFYt48.d.mts → AmazonApiGatewayV1EndpointAdaptor-CG1UJoAK.d.mts} +2 -2
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-xTrFYt48.d.mts.map → AmazonApiGatewayV1EndpointAdaptor-CG1UJoAK.d.mts.map} +1 -1
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-CQ0dtx1M.mjs → AmazonApiGatewayV1EndpointAdaptor-COLHHAsd.mjs} +2 -2
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-CQ0dtx1M.mjs.map → AmazonApiGatewayV1EndpointAdaptor-COLHHAsd.mjs.map} +1 -1
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-Cm2wieNy.cjs → AmazonApiGatewayV1EndpointAdaptor-CW0BCUkm.cjs} +2 -2
- package/dist/{AmazonApiGatewayV1EndpointAdaptor-Cm2wieNy.cjs.map → AmazonApiGatewayV1EndpointAdaptor-CW0BCUkm.cjs.map} +1 -1
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-CjPCxIb1.cjs → AmazonApiGatewayV2EndpointAdaptor-C7ZrwcTX.cjs} +6 -2
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-CjPCxIb1.cjs.map → AmazonApiGatewayV2EndpointAdaptor-C7ZrwcTX.cjs.map} +1 -1
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-DrbEaZ2_.mjs → AmazonApiGatewayV2EndpointAdaptor-Cl9ERGyi.mjs} +6 -2
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-DrbEaZ2_.mjs.map → AmazonApiGatewayV2EndpointAdaptor-Cl9ERGyi.mjs.map} +1 -1
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-CHi3Qe1s.d.cts → AmazonApiGatewayV2EndpointAdaptor-OkwjABOz.d.cts} +4 -3
- package/dist/AmazonApiGatewayV2EndpointAdaptor-OkwjABOz.d.cts.map +1 -0
- package/dist/{AmazonApiGatewayV2EndpointAdaptor-BBayh2_k.d.mts → AmazonApiGatewayV2EndpointAdaptor-ofjuxcPV.d.mts} +4 -3
- package/dist/AmazonApiGatewayV2EndpointAdaptor-ofjuxcPV.d.mts.map +1 -0
- package/dist/{FunctionExecutionWrapper-Ba0Z-iwe.mjs → FunctionExecutionWrapper-B0ZAssiy.mjs} +1 -1
- package/dist/{FunctionExecutionWrapper-Ba0Z-iwe.mjs.map → FunctionExecutionWrapper-B0ZAssiy.mjs.map} +1 -1
- package/dist/{FunctionExecutionWrapper-7B-CufYj.cjs → FunctionExecutionWrapper-KKHP6fDY.cjs} +1 -1
- package/dist/{FunctionExecutionWrapper-7B-CufYj.cjs.map → FunctionExecutionWrapper-KKHP6fDY.cjs.map} +1 -1
- package/dist/{HonoEndpointAdaptor-vI3LPiyu.d.cts → HonoEndpointAdaptor-BCql3gLP.d.cts} +3 -3
- package/dist/{HonoEndpointAdaptor-vI3LPiyu.d.cts.map → HonoEndpointAdaptor-BCql3gLP.d.cts.map} +1 -1
- package/dist/{HonoEndpointAdaptor-B4NMwHkr.cjs → HonoEndpointAdaptor-CavBd6P2.cjs} +4 -4
- package/dist/{HonoEndpointAdaptor-B4NMwHkr.cjs.map → HonoEndpointAdaptor-CavBd6P2.cjs.map} +1 -1
- package/dist/{HonoEndpointAdaptor-CNlb-KGz.mjs → HonoEndpointAdaptor-y9fCIxaz.mjs} +4 -4
- package/dist/{HonoEndpointAdaptor-CNlb-KGz.mjs.map → HonoEndpointAdaptor-y9fCIxaz.mjs.map} +1 -1
- package/dist/{TestEndpointAdaptor-DJdmYxMn.mjs → TestEndpointAdaptor-CDOhCmIk.mjs} +2 -2
- package/dist/{TestEndpointAdaptor-DJdmYxMn.mjs.map → TestEndpointAdaptor-CDOhCmIk.mjs.map} +1 -1
- package/dist/{TestEndpointAdaptor-Bsqn6T0k.cjs → TestEndpointAdaptor-DjQSuxRq.cjs} +2 -2
- package/dist/{TestEndpointAdaptor-Bsqn6T0k.cjs.map → TestEndpointAdaptor-DjQSuxRq.cjs.map} +1 -1
- package/dist/TestFunctionAdaptor-BHk2bDOV.d.cts.map +1 -1
- package/dist/{TestFunctionAdaptor-CK-dbKpO.mjs → TestFunctionAdaptor-C5CLuR-9.mjs} +25 -17
- package/dist/TestFunctionAdaptor-C5CLuR-9.mjs.map +1 -0
- package/dist/{TestFunctionAdaptor-CSMX7myB.cjs → TestFunctionAdaptor-CH6-gO_B.cjs} +24 -16
- package/dist/TestFunctionAdaptor-CH6-gO_B.cjs.map +1 -0
- package/dist/TestFunctionAdaptor-DzT8GRdR.d.mts.map +1 -1
- package/dist/TestSubscriberAdaptor-CPEiqSfE.d.mts.map +1 -1
- package/dist/{TestSubscriberAdaptor-CrqLkyUE.mjs → TestSubscriberAdaptor-CwP3qNJ4.mjs} +22 -14
- package/dist/TestSubscriberAdaptor-CwP3qNJ4.mjs.map +1 -0
- package/dist/TestSubscriberAdaptor-DQk5xzb0.d.cts.map +1 -1
- package/dist/{TestSubscriberAdaptor-1m-2bM_j.cjs → TestSubscriberAdaptor-Dgxr_0vL.cjs} +21 -13
- package/dist/TestSubscriberAdaptor-Dgxr_0vL.cjs.map +1 -0
- package/dist/adaptors/aws.cjs +7 -6
- package/dist/adaptors/aws.d.cts +4 -4
- package/dist/adaptors/aws.d.mts +4 -4
- package/dist/adaptors/aws.mjs +7 -6
- package/dist/adaptors/hono.cjs +3 -3
- package/dist/adaptors/hono.d.cts +2 -2
- package/dist/adaptors/hono.d.mts +1 -1
- package/dist/adaptors/hono.mjs +3 -3
- package/dist/adaptors/testing.cjs +4 -4
- package/dist/adaptors/testing.d.cts +1 -1
- package/dist/adaptors/testing.d.mts +1 -1
- package/dist/adaptors/testing.mjs +4 -4
- package/dist/crons/Cron.d.cts +1 -1
- package/dist/crons/Cron.d.mts +1 -1
- package/dist/crons/CronBuilder.d.cts +1 -1
- package/dist/crons/CronBuilder.d.mts +1 -1
- package/dist/crons/index.d.cts +5 -5
- package/dist/crons/index.d.mts +5 -5
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.cjs +1 -1
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.cts +2 -2
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.d.mts +2 -2
- package/dist/endpoints/AmazonApiGatewayEndpointAdaptor.mjs +1 -1
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.cjs +2 -2
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.cts +3 -3
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.mts +3 -3
- package/dist/endpoints/AmazonApiGatewayV1EndpointAdaptor.mjs +2 -2
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.cjs +3 -2
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.cts +3 -3
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.d.mts +3 -3
- package/dist/endpoints/AmazonApiGatewayV2EndpointAdaptor.mjs +3 -2
- package/dist/endpoints/Endpoint.d.cts +1 -1
- package/dist/endpoints/Endpoint.d.mts +1 -1
- package/dist/endpoints/EndpointBuilder.d.cts +1 -1
- package/dist/endpoints/EndpointBuilder.d.mts +1 -1
- package/dist/endpoints/EndpointFactory.d.cts +1 -1
- package/dist/endpoints/EndpointFactory.d.mts +1 -1
- package/dist/endpoints/HonoEndpointAdaptor.cjs +3 -3
- package/dist/endpoints/HonoEndpointAdaptor.d.cts +2 -2
- package/dist/endpoints/HonoEndpointAdaptor.d.mts +1 -1
- package/dist/endpoints/HonoEndpointAdaptor.mjs +3 -3
- package/dist/endpoints/TestEndpointAdaptor.cjs +2 -2
- package/dist/endpoints/TestEndpointAdaptor.d.cts +1 -1
- package/dist/endpoints/TestEndpointAdaptor.d.mts +1 -1
- package/dist/endpoints/TestEndpointAdaptor.mjs +2 -2
- package/dist/endpoints/audit.d.cts +1 -1
- package/dist/endpoints/audit.d.mts +1 -1
- package/dist/endpoints/helpers.cjs +1 -1
- package/dist/endpoints/helpers.d.cts +1 -1
- package/dist/endpoints/helpers.d.mts +1 -1
- package/dist/endpoints/helpers.mjs +1 -1
- package/dist/endpoints/index.cjs +1 -1
- package/dist/endpoints/index.d.cts +3 -3
- package/dist/endpoints/index.d.mts +3 -3
- package/dist/endpoints/index.mjs +1 -1
- package/dist/endpoints/lazyAccessors.cjs +1 -1
- package/dist/endpoints/lazyAccessors.d.cts +1 -1
- package/dist/endpoints/lazyAccessors.d.mts +1 -1
- package/dist/endpoints/lazyAccessors.mjs +1 -1
- package/dist/endpoints/processAudits.d.cts +1 -1
- package/dist/endpoints/processAudits.d.mts +1 -1
- package/dist/endpoints/rls.d.cts +1 -1
- package/dist/endpoints/rls.d.mts +1 -1
- package/dist/functions/AWSLambdaFunction.cjs +2 -2
- package/dist/functions/AWSLambdaFunction.mjs +2 -2
- package/dist/functions/FunctionExecutionWrapper.cjs +1 -1
- package/dist/functions/FunctionExecutionWrapper.mjs +1 -1
- package/dist/functions/TestFunctionAdaptor.cjs +1 -1
- package/dist/functions/TestFunctionAdaptor.mjs +1 -1
- package/dist/functions/index.d.cts +1 -1
- package/dist/functions/index.d.mts +1 -1
- package/dist/{helpers-Ciyi6Aap.cjs → helpers-BYyX0qTA.cjs} +1 -1
- package/dist/{helpers-Ciyi6Aap.cjs.map → helpers-BYyX0qTA.cjs.map} +1 -1
- package/dist/{helpers-C5j_GRBz.mjs → helpers-BtwC2IW8.mjs} +1 -1
- package/dist/{helpers-C5j_GRBz.mjs.map → helpers-BtwC2IW8.mjs.map} +1 -1
- package/dist/index-BRoc67OX.d.cts +12 -0
- package/dist/{index-BnoOaBQV.d.cts.map → index-BRoc67OX.d.cts.map} +1 -1
- package/dist/index-_5DYCNAt.d.mts +12 -0
- package/dist/{index-DQo_Csy7.d.mts.map → index-_5DYCNAt.d.mts.map} +1 -1
- package/dist/{lazyAccessors-B8Hhras9.cjs → lazyAccessors-BVEtB9lU.cjs} +1 -1
- package/dist/{lazyAccessors-B8Hhras9.cjs.map → lazyAccessors-BVEtB9lU.cjs.map} +1 -1
- package/dist/{lazyAccessors-B-Jgkg2o.mjs → lazyAccessors-DM6HcXQk.mjs} +1 -1
- package/dist/{lazyAccessors-B-Jgkg2o.mjs.map → lazyAccessors-DM6HcXQk.mjs.map} +1 -1
- package/dist/subscribers/AWSLambdaSubscriberAdaptor.cjs +1 -1
- package/dist/subscribers/AWSLambdaSubscriberAdaptor.mjs +1 -1
- package/dist/subscribers/TestSubscriberAdaptor.cjs +1 -1
- package/dist/subscribers/TestSubscriberAdaptor.mjs +1 -1
- package/dist/subscribers/index.d.cts +2 -2
- package/dist/subscribers/index.d.cts.map +1 -1
- package/dist/subscribers/index.d.mts +2 -2
- package/dist/subscribers/index.d.mts.map +1 -1
- package/package.json +7 -7
- package/src/endpoints/AmazonApiGatewayEndpointAdaptor.ts +6 -1
- package/src/endpoints/AmazonApiGatewayV2EndpointAdaptor.ts +9 -1
- package/src/endpoints/__tests__/AmazonApiGatewayV2EndpointAdaptor.spec.ts +83 -11
- package/src/functions/AWSLambdaFunction.ts +16 -2
- package/src/functions/TestFunctionAdaptor.ts +38 -31
- package/src/functions/__tests__/AWSLambdaFunctionAdaptor.spec.ts +55 -0
- package/src/functions/__tests__/TestFunctionAdaptor.spec.ts +82 -0
- package/src/subscribers/AWSLambdaSubscriberAdaptor.ts +17 -2
- package/src/subscribers/TestSubscriberAdaptor.ts +35 -29
- package/src/subscribers/__tests__/AWSLambdaSubscriberAdaptor.spec.ts +64 -0
- package/src/subscribers/__tests__/TestSubscriberAdaptor.spec.ts +94 -0
- package/dist/AWSLambdaFunction-BDL7Thi_.mjs.map +0 -1
- package/dist/AWSLambdaFunction-wtE9Lx_-.cjs.map +0 -1
- package/dist/AWSLambdaSubscriberAdaptor-BtBKExsh.cjs.map +0 -1
- package/dist/AWSLambdaSubscriberAdaptor-DsRmmGm1.mjs.map +0 -1
- package/dist/AmazonApiGatewayEndpointAdaptor-1XyivLJs.cjs.map +0 -1
- package/dist/AmazonApiGatewayEndpointAdaptor-BPxHm8Tg.mjs.map +0 -1
- package/dist/AmazonApiGatewayEndpointAdaptor-Bxvs-F0F.d.cts.map +0 -1
- package/dist/AmazonApiGatewayEndpointAdaptor-CQSZArI6.d.mts.map +0 -1
- package/dist/AmazonApiGatewayV2EndpointAdaptor-BBayh2_k.d.mts.map +0 -1
- package/dist/AmazonApiGatewayV2EndpointAdaptor-CHi3Qe1s.d.cts.map +0 -1
- package/dist/TestFunctionAdaptor-CK-dbKpO.mjs.map +0 -1
- package/dist/TestFunctionAdaptor-CSMX7myB.cjs.map +0 -1
- package/dist/TestSubscriberAdaptor-1m-2bM_j.cjs.map +0 -1
- package/dist/TestSubscriberAdaptor-CrqLkyUE.mjs.map +0 -1
- package/dist/index-BnoOaBQV.d.cts +0 -12
- package/dist/index-DQo_Csy7.d.mts +0 -12
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import "../Construct-CX7HyFfT.cjs";
|
|
2
2
|
import { Subscriber } from "../Subscriber-1rDE7HuM.cjs";
|
|
3
3
|
import { SubscriberBuilder } from "../SubscriberBuilder-B9uva8fZ.cjs";
|
|
4
|
-
import * as
|
|
4
|
+
import * as _geekmidas_logger5 from "@geekmidas/logger";
|
|
5
5
|
|
|
6
6
|
//#region src/subscribers/index.d.ts
|
|
7
|
-
declare const s: SubscriberBuilder<[],
|
|
7
|
+
declare const s: SubscriberBuilder<[], _geekmidas_logger5.Logger, undefined, undefined, string, []>;
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
|
9
9
|
|
|
10
10
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../../src/subscribers/index.ts"],"sourcesContent":[],"mappings":";;;;;;cAKa,GAAC,sBAA0B,
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../src/subscribers/index.ts"],"sourcesContent":[],"mappings":";;;;;;cAKa,GAAC,sBAA0B,kBAAA,CAA1B,MAAA"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import "../Construct-C2SyofdS.mjs";
|
|
2
2
|
import { Subscriber } from "../Subscriber-BgB3RRxb.mjs";
|
|
3
3
|
import { SubscriberBuilder } from "../SubscriberBuilder-DaQkh2Nt.mjs";
|
|
4
|
-
import * as
|
|
4
|
+
import * as _geekmidas_logger8 from "@geekmidas/logger";
|
|
5
5
|
|
|
6
6
|
//#region src/subscribers/index.d.ts
|
|
7
|
-
declare const s: SubscriberBuilder<[],
|
|
7
|
+
declare const s: SubscriberBuilder<[], _geekmidas_logger8.Logger, undefined, undefined, string, []>;
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
|
9
9
|
|
|
10
10
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/subscribers/index.ts"],"sourcesContent":[],"mappings":";;;;;;cAKa,GAAC,sBAA0B,
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/subscribers/index.ts"],"sourcesContent":[],"mappings":";;;;;;cAKa,GAAC,sBAA0B,kBAAA,CAA1B,MAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@geekmidas/constructs",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -78,17 +78,17 @@
|
|
|
78
78
|
"kysely": "~0.28.8",
|
|
79
79
|
"pg": "~8.16.3",
|
|
80
80
|
"zod": "~4.1.13",
|
|
81
|
+
"@geekmidas/envkit": "^1.0.3",
|
|
81
82
|
"@geekmidas/audit": "^2.0.0",
|
|
82
|
-
"@geekmidas/cache": "^1.1.0",
|
|
83
83
|
"@geekmidas/db": "^1.0.0",
|
|
84
|
-
"@geekmidas/
|
|
84
|
+
"@geekmidas/cache": "^1.1.0",
|
|
85
85
|
"@geekmidas/errors": "^1.0.0",
|
|
86
86
|
"@geekmidas/events": "^1.1.0",
|
|
87
87
|
"@geekmidas/logger": "^1.0.0",
|
|
88
|
-
"@geekmidas/rate-limit": "^2.0.0",
|
|
89
88
|
"@geekmidas/schema": "^1.0.0",
|
|
90
|
-
"@geekmidas/
|
|
91
|
-
"@geekmidas/testkit": "^1.0.2"
|
|
89
|
+
"@geekmidas/rate-limit": "^2.0.0",
|
|
90
|
+
"@geekmidas/testkit": "^1.0.2",
|
|
91
|
+
"@geekmidas/services": "^1.0.1"
|
|
92
92
|
},
|
|
93
93
|
"peerDependencies": {
|
|
94
94
|
"@middy/core": ">=6.3.1",
|
|
@@ -97,8 +97,8 @@
|
|
|
97
97
|
"@geekmidas/audit": "^2.0.0",
|
|
98
98
|
"@geekmidas/cache": "^1.1.0",
|
|
99
99
|
"@geekmidas/db": "^1.0.0",
|
|
100
|
-
"@geekmidas/envkit": "^1.0.3",
|
|
101
100
|
"@geekmidas/errors": "^1.0.0",
|
|
101
|
+
"@geekmidas/envkit": "^1.0.3",
|
|
102
102
|
"@geekmidas/events": "^1.1.0",
|
|
103
103
|
"@geekmidas/logger": "^1.0.0",
|
|
104
104
|
"@geekmidas/rate-limit": "^2.0.0",
|
|
@@ -145,6 +145,11 @@ export abstract class AmazonApiGatewayEndpoint<
|
|
|
145
145
|
}
|
|
146
146
|
abstract getInput(e: TEvent): GetInputResponse;
|
|
147
147
|
|
|
148
|
+
protected getCookies(e: TEvent): CookieFn {
|
|
149
|
+
const headers = e.headers as Record<string, string>;
|
|
150
|
+
return Endpoint.createCookies(headers?.cookie);
|
|
151
|
+
}
|
|
152
|
+
|
|
148
153
|
private input(): Middleware<TEvent, TInput, TServices, TLogger> {
|
|
149
154
|
return {
|
|
150
155
|
before: async (req) => {
|
|
@@ -152,7 +157,7 @@ export abstract class AmazonApiGatewayEndpoint<
|
|
|
152
157
|
const { body, query, params } = this.getInput(req.event);
|
|
153
158
|
const headers = req.event.headers as Record<string, string>;
|
|
154
159
|
const header = Endpoint.createHeaders(headers);
|
|
155
|
-
const cookie =
|
|
160
|
+
const cookie = this.getCookies(req.event);
|
|
156
161
|
|
|
157
162
|
set(req.event, 'body', await this.endpoint.parseInput(body, 'body'));
|
|
158
163
|
|
|
@@ -12,7 +12,8 @@ import {
|
|
|
12
12
|
type GetInputResponse,
|
|
13
13
|
type LoggerContext,
|
|
14
14
|
} from './AmazonApiGatewayEndpointAdaptor';
|
|
15
|
-
import type { Endpoint, EndpointSchemas } from './Endpoint';
|
|
15
|
+
import type { CookieFn, Endpoint, EndpointSchemas } from './Endpoint';
|
|
16
|
+
import { createApiGatewayCookies } from './lazyAccessors';
|
|
16
17
|
import { parseQueryParams } from './parseQueryParams';
|
|
17
18
|
|
|
18
19
|
export class AmazonApiGatewayV2Endpoint<
|
|
@@ -36,6 +37,13 @@ export class AmazonApiGatewayV2Endpoint<
|
|
|
36
37
|
TSession,
|
|
37
38
|
TEventPublisher
|
|
38
39
|
> {
|
|
40
|
+
override getCookies(e: APIGatewayProxyEventV2): CookieFn {
|
|
41
|
+
return createApiGatewayCookies(
|
|
42
|
+
e.cookies,
|
|
43
|
+
(e.headers as Record<string, string>)?.cookie,
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
|
|
39
47
|
override getInput(e: APIGatewayProxyEventV2): GetInputResponse {
|
|
40
48
|
// API Gateway V2 handles arrays as comma-separated values
|
|
41
49
|
const queryParams = e.queryStringParameters || {};
|
|
@@ -130,7 +130,7 @@ describe('AmazonApiGatewayV2Endpoint', () => {
|
|
|
130
130
|
headers: { 'content-type': 'application/json' },
|
|
131
131
|
body: JSON.stringify({ name: 'John', age: 30 }),
|
|
132
132
|
});
|
|
133
|
-
|
|
133
|
+
|
|
134
134
|
const response = await adapter.handler(event, mockContext);
|
|
135
135
|
|
|
136
136
|
expect(response).toEqual({
|
|
@@ -170,7 +170,7 @@ describe('AmazonApiGatewayV2Endpoint', () => {
|
|
|
170
170
|
limit: '20',
|
|
171
171
|
},
|
|
172
172
|
});
|
|
173
|
-
|
|
173
|
+
|
|
174
174
|
const response = await adapter.handler(event, mockContext);
|
|
175
175
|
|
|
176
176
|
expect(response).toEqual({
|
|
@@ -216,7 +216,7 @@ describe('AmazonApiGatewayV2Endpoint', () => {
|
|
|
216
216
|
'filter.active': 'true',
|
|
217
217
|
},
|
|
218
218
|
});
|
|
219
|
-
|
|
219
|
+
|
|
220
220
|
const response = await adapter.handler(event, mockContext);
|
|
221
221
|
|
|
222
222
|
expect(response).toEqual({
|
|
@@ -250,7 +250,7 @@ describe('AmazonApiGatewayV2Endpoint', () => {
|
|
|
250
250
|
queryStringParameters: { include: 'profile' },
|
|
251
251
|
pathParameters: { id: '123' },
|
|
252
252
|
});
|
|
253
|
-
|
|
253
|
+
|
|
254
254
|
const response = await adapter.handler(event, mockContext);
|
|
255
255
|
|
|
256
256
|
expect(response).toEqual({
|
|
@@ -274,7 +274,7 @@ describe('AmazonApiGatewayV2Endpoint', () => {
|
|
|
274
274
|
|
|
275
275
|
const adapter = new AmazonApiGatewayV2Endpoint(envParser, endpoint);
|
|
276
276
|
const event = createMockV2Event();
|
|
277
|
-
|
|
277
|
+
|
|
278
278
|
const response = await adapter.handler(event, mockContext);
|
|
279
279
|
|
|
280
280
|
expect(response.multiValueHeaders?.['Set-Cookie']).toEqual([
|
|
@@ -296,7 +296,7 @@ describe('AmazonApiGatewayV2Endpoint', () => {
|
|
|
296
296
|
|
|
297
297
|
const adapter = new AmazonApiGatewayV2Endpoint(envParser, endpoint);
|
|
298
298
|
const event = createMockV2Event();
|
|
299
|
-
|
|
299
|
+
|
|
300
300
|
const response = await adapter.handler(event, mockContext);
|
|
301
301
|
|
|
302
302
|
expect(response.headers).toEqual({
|
|
@@ -316,7 +316,7 @@ describe('AmazonApiGatewayV2Endpoint', () => {
|
|
|
316
316
|
|
|
317
317
|
const adapter = new AmazonApiGatewayV2Endpoint(envParser, endpoint);
|
|
318
318
|
const event = createMockV2Event({ routeKey: 'POST /test' });
|
|
319
|
-
|
|
319
|
+
|
|
320
320
|
const response = await adapter.handler(event, mockContext);
|
|
321
321
|
|
|
322
322
|
expect(response.statusCode).toBe(201);
|
|
@@ -337,7 +337,7 @@ describe('AmazonApiGatewayV2Endpoint', () => {
|
|
|
337
337
|
|
|
338
338
|
const adapter = new AmazonApiGatewayV2Endpoint(envParser, endpoint);
|
|
339
339
|
const event = createMockV2Event({ routeKey: 'POST /test' });
|
|
340
|
-
|
|
340
|
+
|
|
341
341
|
const response = await adapter.handler(event, mockContext);
|
|
342
342
|
|
|
343
343
|
expect(response.statusCode).toBe(201);
|
|
@@ -362,7 +362,7 @@ describe('AmazonApiGatewayV2Endpoint', () => {
|
|
|
362
362
|
|
|
363
363
|
const adapter = new AmazonApiGatewayV2Endpoint(envParser, endpoint);
|
|
364
364
|
const event = createMockV2Event();
|
|
365
|
-
|
|
365
|
+
|
|
366
366
|
const response = await adapter.handler(event, mockContext);
|
|
367
367
|
|
|
368
368
|
expect(response.multiValueHeaders?.['Set-Cookie']).toEqual([
|
|
@@ -384,7 +384,7 @@ describe('AmazonApiGatewayV2Endpoint', () => {
|
|
|
384
384
|
|
|
385
385
|
const adapter = new AmazonApiGatewayV2Endpoint(envParser, endpoint);
|
|
386
386
|
const event = createMockV2Event();
|
|
387
|
-
|
|
387
|
+
|
|
388
388
|
const response = await adapter.handler(event, mockContext);
|
|
389
389
|
|
|
390
390
|
expect(response.statusCode).toBe(201);
|
|
@@ -403,7 +403,7 @@ describe('AmazonApiGatewayV2Endpoint', () => {
|
|
|
403
403
|
|
|
404
404
|
const adapter = new AmazonApiGatewayV2Endpoint(envParser, endpoint);
|
|
405
405
|
const event = createMockV2Event();
|
|
406
|
-
|
|
406
|
+
|
|
407
407
|
const response = await adapter.handler(event, mockContext);
|
|
408
408
|
|
|
409
409
|
expect(response).toEqual({
|
|
@@ -414,5 +414,77 @@ describe('AmazonApiGatewayV2Endpoint', () => {
|
|
|
414
414
|
expect(response.multiValueHeaders).toBeUndefined();
|
|
415
415
|
});
|
|
416
416
|
});
|
|
417
|
+
|
|
418
|
+
describe('request cookies', () => {
|
|
419
|
+
it('should load cookies from V2 cookies array', async () => {
|
|
420
|
+
const endpoint = e
|
|
421
|
+
.get('/test')
|
|
422
|
+
.output(z.object({ session: z.string(), theme: z.string() }))
|
|
423
|
+
.handle(async ({ cookie }) => ({
|
|
424
|
+
session: cookie('session') ?? '',
|
|
425
|
+
theme: cookie('theme') ?? '',
|
|
426
|
+
}));
|
|
427
|
+
|
|
428
|
+
const adapter = new AmazonApiGatewayV2Endpoint(envParser, endpoint);
|
|
429
|
+
const event = createMockV2Event({
|
|
430
|
+
cookies: ['session=abc123', 'theme=dark'],
|
|
431
|
+
});
|
|
432
|
+
|
|
433
|
+
const response = await adapter.handler(event, mockContext);
|
|
434
|
+
|
|
435
|
+
expect(JSON.parse(response.body!)).toEqual({
|
|
436
|
+
session: 'abc123',
|
|
437
|
+
theme: 'dark',
|
|
438
|
+
});
|
|
439
|
+
});
|
|
440
|
+
|
|
441
|
+
it('should fall back to headers.cookie when cookies array is absent', async () => {
|
|
442
|
+
const endpoint = e
|
|
443
|
+
.get('/test')
|
|
444
|
+
.output(z.object({ session: z.string() }))
|
|
445
|
+
.handle(async ({ cookie }) => ({
|
|
446
|
+
session: cookie('session') ?? '',
|
|
447
|
+
}));
|
|
448
|
+
|
|
449
|
+
const adapter = new AmazonApiGatewayV2Endpoint(envParser, endpoint);
|
|
450
|
+
const event = createMockV2Event({
|
|
451
|
+
cookies: undefined,
|
|
452
|
+
headers: {
|
|
453
|
+
'content-type': 'application/json',
|
|
454
|
+
cookie: 'session=from-header',
|
|
455
|
+
},
|
|
456
|
+
});
|
|
457
|
+
|
|
458
|
+
const response = await adapter.handler(event, mockContext);
|
|
459
|
+
|
|
460
|
+
expect(JSON.parse(response.body!)).toEqual({
|
|
461
|
+
session: 'from-header',
|
|
462
|
+
});
|
|
463
|
+
});
|
|
464
|
+
|
|
465
|
+
it('should prefer V2 cookies array over headers.cookie', async () => {
|
|
466
|
+
const endpoint = e
|
|
467
|
+
.get('/test')
|
|
468
|
+
.output(z.object({ session: z.string() }))
|
|
469
|
+
.handle(async ({ cookie }) => ({
|
|
470
|
+
session: cookie('session') ?? '',
|
|
471
|
+
}));
|
|
472
|
+
|
|
473
|
+
const adapter = new AmazonApiGatewayV2Endpoint(envParser, endpoint);
|
|
474
|
+
const event = createMockV2Event({
|
|
475
|
+
cookies: ['session=from-array'],
|
|
476
|
+
headers: {
|
|
477
|
+
'content-type': 'application/json',
|
|
478
|
+
cookie: 'session=from-header',
|
|
479
|
+
},
|
|
480
|
+
});
|
|
481
|
+
|
|
482
|
+
const response = await adapter.handler(event, mockContext);
|
|
483
|
+
|
|
484
|
+
expect(JSON.parse(response.body!)).toEqual({
|
|
485
|
+
session: 'from-array',
|
|
486
|
+
});
|
|
487
|
+
});
|
|
488
|
+
});
|
|
417
489
|
});
|
|
418
490
|
});
|
|
@@ -9,6 +9,7 @@ import type {
|
|
|
9
9
|
InferStandardSchema,
|
|
10
10
|
} from '@geekmidas/schema';
|
|
11
11
|
import type { Service, ServiceRecord } from '@geekmidas/services';
|
|
12
|
+
import { runWithRequestContext } from '@geekmidas/services';
|
|
12
13
|
import middy, { type MiddlewareObj } from '@middy/core';
|
|
13
14
|
import type { StandardSchemaV1 } from '@standard-schema/spec';
|
|
14
15
|
import type { Context, Handler } from 'aws-lambda';
|
|
@@ -321,7 +322,7 @@ export class AWSLambdaFunction<
|
|
|
321
322
|
const handler = this._handler.bind(this);
|
|
322
323
|
|
|
323
324
|
// Apply middleware in order
|
|
324
|
-
|
|
325
|
+
const chain = middy(handler)
|
|
325
326
|
.use(this.loggerMiddleware())
|
|
326
327
|
.use(this.baseInput())
|
|
327
328
|
.use(this.error())
|
|
@@ -329,6 +330,19 @@ export class AWSLambdaFunction<
|
|
|
329
330
|
.use(this.database())
|
|
330
331
|
.use(this.auditor())
|
|
331
332
|
.use(this.input())
|
|
332
|
-
.use(this.events())
|
|
333
|
+
.use(this.events());
|
|
334
|
+
|
|
335
|
+
// Wrap entire Middy chain in request context for service access
|
|
336
|
+
const wrappedHandler = async (event: unknown, context: Context) => {
|
|
337
|
+
const startTime = Date.now();
|
|
338
|
+
const requestId = context.awsRequestId;
|
|
339
|
+
const logger = this.fn.logger.child({ requestId }) as TLogger;
|
|
340
|
+
|
|
341
|
+
return runWithRequestContext({ logger, requestId, startTime }, () =>
|
|
342
|
+
chain(event as Parameters<typeof chain>[0], context),
|
|
343
|
+
);
|
|
344
|
+
};
|
|
345
|
+
|
|
346
|
+
return wrappedHandler as unknown as AWSLambdaHandler;
|
|
333
347
|
}
|
|
334
348
|
}
|
|
@@ -9,6 +9,7 @@ import type {
|
|
|
9
9
|
InferStandardSchema,
|
|
10
10
|
} from '@geekmidas/schema';
|
|
11
11
|
import {
|
|
12
|
+
runWithRequestContext,
|
|
12
13
|
type Service,
|
|
13
14
|
ServiceDiscovery,
|
|
14
15
|
type ServiceRecord,
|
|
@@ -153,41 +154,47 @@ export class TestFunctionAdaptor<
|
|
|
153
154
|
});
|
|
154
155
|
}
|
|
155
156
|
|
|
156
|
-
//
|
|
157
|
-
const
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
);
|
|
176
|
-
|
|
157
|
+
// Wrap execution in request context for service access via context.getLogger()
|
|
158
|
+
const requestId = `test-${Date.now()}`;
|
|
159
|
+
const startTime = Date.now();
|
|
160
|
+
|
|
161
|
+
return runWithRequestContext({ logger, requestId, startTime }, async () => {
|
|
162
|
+
// Execute the function
|
|
163
|
+
const response = await this.fn.fn({
|
|
164
|
+
input: parsedInput,
|
|
165
|
+
services,
|
|
166
|
+
logger,
|
|
167
|
+
db,
|
|
168
|
+
auditor,
|
|
169
|
+
} as any);
|
|
170
|
+
|
|
171
|
+
// Parse output if schema is provided
|
|
172
|
+
const output = await this.fn.parseOutput(response);
|
|
173
|
+
|
|
174
|
+
// Flush audits if any were recorded
|
|
175
|
+
if (auditor) {
|
|
176
|
+
const records = auditor.getRecords();
|
|
177
|
+
if (records.length > 0) {
|
|
178
|
+
logger.debug(
|
|
179
|
+
{ auditCount: records.length },
|
|
180
|
+
'Flushing function audits',
|
|
181
|
+
);
|
|
182
|
+
await auditor.flush();
|
|
183
|
+
}
|
|
177
184
|
}
|
|
178
|
-
}
|
|
179
185
|
|
|
180
|
-
|
|
186
|
+
// Register publisher service if provided in context
|
|
181
187
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
188
|
+
await publishEvents(
|
|
189
|
+
logger,
|
|
190
|
+
this.serviceDiscovery,
|
|
191
|
+
this.fn.events,
|
|
192
|
+
output,
|
|
193
|
+
this.fn.publisherService,
|
|
194
|
+
);
|
|
189
195
|
|
|
190
|
-
|
|
196
|
+
return output;
|
|
197
|
+
}) as Promise<InferStandardSchema<TOutSchema>>;
|
|
191
198
|
}
|
|
192
199
|
}
|
|
193
200
|
|
|
@@ -2,6 +2,7 @@ import { EnvironmentParser } from '@geekmidas/envkit';
|
|
|
2
2
|
import type { EventPublisher, PublishableMessage } from '@geekmidas/events';
|
|
3
3
|
import { ConsoleLogger } from '@geekmidas/logger/console';
|
|
4
4
|
import type { Service } from '@geekmidas/services';
|
|
5
|
+
import { serviceContext } from '@geekmidas/services';
|
|
5
6
|
import type { Context } from 'aws-lambda';
|
|
6
7
|
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
7
8
|
import { z } from 'zod/v4';
|
|
@@ -455,4 +456,58 @@ describe('AWSLambdaFunction', () => {
|
|
|
455
456
|
expect(result).toEqual({ hasDb: false });
|
|
456
457
|
});
|
|
457
458
|
});
|
|
459
|
+
|
|
460
|
+
describe('request context', () => {
|
|
461
|
+
it('should make serviceContext.getLogger() available inside handler', async () => {
|
|
462
|
+
let contextLogger: any;
|
|
463
|
+
let contextRequestId: string | undefined;
|
|
464
|
+
|
|
465
|
+
const fn = new Function(
|
|
466
|
+
async () => {
|
|
467
|
+
contextLogger = serviceContext.getLogger();
|
|
468
|
+
contextRequestId = serviceContext.getRequestId();
|
|
469
|
+
return { success: true };
|
|
470
|
+
},
|
|
471
|
+
undefined,
|
|
472
|
+
undefined,
|
|
473
|
+
undefined,
|
|
474
|
+
undefined,
|
|
475
|
+
[],
|
|
476
|
+
logger,
|
|
477
|
+
);
|
|
478
|
+
|
|
479
|
+
const adaptor = new AWSLambdaFunction(envParser, fn);
|
|
480
|
+
const handler = adaptor.handler;
|
|
481
|
+
|
|
482
|
+
const context = createMockContext();
|
|
483
|
+
await handler({}, context, vi.fn());
|
|
484
|
+
|
|
485
|
+
expect(contextLogger).toBeDefined();
|
|
486
|
+
expect(contextRequestId).toBe('test-request-id');
|
|
487
|
+
});
|
|
488
|
+
|
|
489
|
+
it('should make serviceContext.hasContext() return true inside handler', async () => {
|
|
490
|
+
let hasContext = false;
|
|
491
|
+
|
|
492
|
+
const fn = new Function(
|
|
493
|
+
async () => {
|
|
494
|
+
hasContext = serviceContext.hasContext();
|
|
495
|
+
return { success: true };
|
|
496
|
+
},
|
|
497
|
+
undefined,
|
|
498
|
+
undefined,
|
|
499
|
+
undefined,
|
|
500
|
+
undefined,
|
|
501
|
+
[],
|
|
502
|
+
logger,
|
|
503
|
+
);
|
|
504
|
+
|
|
505
|
+
const adaptor = new AWSLambdaFunction(envParser, fn);
|
|
506
|
+
const handler = adaptor.handler;
|
|
507
|
+
|
|
508
|
+
await handler({}, createMockContext(), vi.fn());
|
|
509
|
+
|
|
510
|
+
expect(hasContext).toBe(true);
|
|
511
|
+
});
|
|
512
|
+
});
|
|
458
513
|
});
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { EventPublisher, PublishableMessage } from '@geekmidas/events';
|
|
2
2
|
import { ConsoleLogger } from '@geekmidas/logger/console';
|
|
3
3
|
import type { Service } from '@geekmidas/services';
|
|
4
|
+
import { serviceContext } from '@geekmidas/services';
|
|
4
5
|
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
5
6
|
import { z } from 'zod/v4';
|
|
6
7
|
|
|
@@ -395,4 +396,85 @@ describe.skip('TestFunctionAdaptor', () => {
|
|
|
395
396
|
).rejects.toThrow('Function failed');
|
|
396
397
|
});
|
|
397
398
|
});
|
|
399
|
+
|
|
400
|
+
describe('request context', () => {
|
|
401
|
+
it('should make serviceContext.getLogger() available inside handler', async () => {
|
|
402
|
+
let contextLogger: any;
|
|
403
|
+
|
|
404
|
+
const fn = new Function(
|
|
405
|
+
async () => {
|
|
406
|
+
contextLogger = serviceContext.getLogger();
|
|
407
|
+
return { success: true };
|
|
408
|
+
},
|
|
409
|
+
undefined,
|
|
410
|
+
undefined,
|
|
411
|
+
undefined,
|
|
412
|
+
undefined,
|
|
413
|
+
[],
|
|
414
|
+
logger,
|
|
415
|
+
);
|
|
416
|
+
|
|
417
|
+
const adaptor = new TestFunctionAdaptor(fn);
|
|
418
|
+
|
|
419
|
+
await adaptor.invoke({
|
|
420
|
+
input: {},
|
|
421
|
+
services: {},
|
|
422
|
+
});
|
|
423
|
+
|
|
424
|
+
expect(contextLogger).toBeDefined();
|
|
425
|
+
});
|
|
426
|
+
|
|
427
|
+
it('should make serviceContext.hasContext() return true inside handler', async () => {
|
|
428
|
+
let hasContext = false;
|
|
429
|
+
|
|
430
|
+
const fn = new Function(
|
|
431
|
+
async () => {
|
|
432
|
+
hasContext = serviceContext.hasContext();
|
|
433
|
+
return { success: true };
|
|
434
|
+
},
|
|
435
|
+
undefined,
|
|
436
|
+
undefined,
|
|
437
|
+
undefined,
|
|
438
|
+
undefined,
|
|
439
|
+
[],
|
|
440
|
+
logger,
|
|
441
|
+
);
|
|
442
|
+
|
|
443
|
+
const adaptor = new TestFunctionAdaptor(fn);
|
|
444
|
+
|
|
445
|
+
await adaptor.invoke({
|
|
446
|
+
input: {},
|
|
447
|
+
services: {},
|
|
448
|
+
});
|
|
449
|
+
|
|
450
|
+
expect(hasContext).toBe(true);
|
|
451
|
+
});
|
|
452
|
+
|
|
453
|
+
it('should provide a request ID starting with test-', async () => {
|
|
454
|
+
let requestId: string | undefined;
|
|
455
|
+
|
|
456
|
+
const fn = new Function(
|
|
457
|
+
async () => {
|
|
458
|
+
requestId = serviceContext.getRequestId();
|
|
459
|
+
return { success: true };
|
|
460
|
+
},
|
|
461
|
+
undefined,
|
|
462
|
+
undefined,
|
|
463
|
+
undefined,
|
|
464
|
+
undefined,
|
|
465
|
+
[],
|
|
466
|
+
logger,
|
|
467
|
+
);
|
|
468
|
+
|
|
469
|
+
const adaptor = new TestFunctionAdaptor(fn);
|
|
470
|
+
|
|
471
|
+
await adaptor.invoke({
|
|
472
|
+
input: {},
|
|
473
|
+
services: {},
|
|
474
|
+
});
|
|
475
|
+
|
|
476
|
+
expect(requestId).toBeDefined();
|
|
477
|
+
expect(requestId).toMatch(/^test-/);
|
|
478
|
+
});
|
|
479
|
+
});
|
|
398
480
|
});
|
|
@@ -4,7 +4,7 @@ import type { EventPublisher } from '@geekmidas/events';
|
|
|
4
4
|
import type { Logger } from '@geekmidas/logger';
|
|
5
5
|
import type { InferStandardSchema } from '@geekmidas/schema';
|
|
6
6
|
import type { Service, ServiceRecord } from '@geekmidas/services';
|
|
7
|
-
import { ServiceDiscovery } from '@geekmidas/services';
|
|
7
|
+
import { runWithRequestContext, ServiceDiscovery } from '@geekmidas/services';
|
|
8
8
|
import middy, { type MiddlewareObj } from '@middy/core';
|
|
9
9
|
import type { StandardSchemaV1 } from '@standard-schema/spec';
|
|
10
10
|
import type {
|
|
@@ -318,10 +318,25 @@ export class AWSLambdaSubscriber<
|
|
|
318
318
|
const handler = this._handler.bind(this);
|
|
319
319
|
|
|
320
320
|
// Apply middleware in order
|
|
321
|
-
|
|
321
|
+
const chain = middy(handler)
|
|
322
322
|
.use(this.loggerMiddleware())
|
|
323
323
|
.use(this.parseEvents())
|
|
324
324
|
.use(this.error())
|
|
325
325
|
.use(this.services());
|
|
326
|
+
|
|
327
|
+
// Wrap entire Middy chain in request context for service access
|
|
328
|
+
const wrappedHandler = async (event: unknown, context: Context) => {
|
|
329
|
+
const startTime = Date.now();
|
|
330
|
+
const requestId = context.awsRequestId;
|
|
331
|
+
const logger = this.subscriber.logger.child({
|
|
332
|
+
requestId,
|
|
333
|
+
}) as TLogger;
|
|
334
|
+
|
|
335
|
+
return runWithRequestContext({ logger, requestId, startTime }, () =>
|
|
336
|
+
chain(event as Parameters<typeof chain>[0], context),
|
|
337
|
+
);
|
|
338
|
+
};
|
|
339
|
+
|
|
340
|
+
return wrappedHandler as unknown as AWSLambdaHandler;
|
|
326
341
|
}
|
|
327
342
|
}
|