@geekmidas/constructs 10.0.0-alpha.101 → 10.0.0-alpha.103

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.
Files changed (100) hide show
  1. package/dist/{Endpoint-BG4UJ9oA.mjs → Endpoint-BW-nFdL_.mjs} +67 -3
  2. package/dist/Endpoint-BW-nFdL_.mjs.map +1 -0
  3. package/dist/{Endpoint-aCvBMPoH.d.cts → Endpoint-BWyKCa2x.d.cts} +47 -9
  4. package/dist/Endpoint-BWyKCa2x.d.cts.map +1 -0
  5. package/dist/{Endpoint-BoUg8ocM.cjs → Endpoint-B_UHlLxv.cjs} +78 -2
  6. package/dist/Endpoint-B_UHlLxv.cjs.map +1 -0
  7. package/dist/{Endpoint-Du-NwPX2.d.mts → Endpoint-C3r2OzOD.d.mts} +47 -9
  8. package/dist/Endpoint-C3r2OzOD.d.mts.map +1 -0
  9. package/dist/{EndpointFactory-BDtsrEvJ.mjs → EndpointFactory-Bbmx4vXc.mjs} +7 -2
  10. package/dist/EndpointFactory-Bbmx4vXc.mjs.map +1 -0
  11. package/dist/{EndpointFactory-I7s1co3Y.d.cts → EndpointFactory-C1-IBwm4.d.cts} +9 -4
  12. package/dist/EndpointFactory-C1-IBwm4.d.cts.map +1 -0
  13. package/dist/{EndpointFactory-DMYdJCOj.d.mts → EndpointFactory-C9eVhDKF.d.mts} +9 -4
  14. package/dist/EndpointFactory-C9eVhDKF.d.mts.map +1 -0
  15. package/dist/{EndpointFactory-DJ7gXLpR.cjs → EndpointFactory-DeZTvDjU.cjs} +7 -2
  16. package/dist/{EndpointFactory-BDtsrEvJ.mjs.map → EndpointFactory-DeZTvDjU.cjs.map} +1 -1
  17. package/dist/{HonoEndpointAdaptor-PtPlbeKY.mjs → HonoEndpointAdaptor-RSvRnXSl.mjs} +38 -14
  18. package/dist/HonoEndpointAdaptor-RSvRnXSl.mjs.map +1 -0
  19. package/dist/{HonoEndpointAdaptor-zVzVLJEO.cjs → HonoEndpointAdaptor-eCKyEOl_.cjs} +41 -17
  20. package/dist/HonoEndpointAdaptor-eCKyEOl_.cjs.map +1 -0
  21. package/dist/adaptors/aws.cjs +66 -27
  22. package/dist/adaptors/aws.cjs.map +1 -1
  23. package/dist/adaptors/aws.d.cts +23 -10
  24. package/dist/adaptors/aws.d.cts.map +1 -1
  25. package/dist/adaptors/aws.d.mts +23 -10
  26. package/dist/adaptors/aws.d.mts.map +1 -1
  27. package/dist/adaptors/aws.mjs +63 -24
  28. package/dist/adaptors/aws.mjs.map +1 -1
  29. package/dist/adaptors/hono.cjs +1 -1
  30. package/dist/adaptors/hono.d.cts +1 -1
  31. package/dist/adaptors/hono.d.cts.map +1 -1
  32. package/dist/adaptors/hono.d.mts +1 -1
  33. package/dist/adaptors/hono.d.mts.map +1 -1
  34. package/dist/adaptors/hono.mjs +1 -1
  35. package/dist/adaptors/testing.cjs +26 -13
  36. package/dist/adaptors/testing.cjs.map +1 -1
  37. package/dist/adaptors/testing.d.cts +2 -2
  38. package/dist/adaptors/testing.d.cts.map +1 -1
  39. package/dist/adaptors/testing.d.mts +2 -2
  40. package/dist/adaptors/testing.d.mts.map +1 -1
  41. package/dist/adaptors/testing.mjs +24 -11
  42. package/dist/adaptors/testing.mjs.map +1 -1
  43. package/dist/credential-DYymbp_7.cjs +257 -0
  44. package/dist/credential-DYymbp_7.cjs.map +1 -0
  45. package/dist/credential-DfSAOOdY.mjs +222 -0
  46. package/dist/credential-DfSAOOdY.mjs.map +1 -0
  47. package/dist/credential.cjs +7 -155
  48. package/dist/credential.d.cts +2 -86
  49. package/dist/credential.d.mts +2 -86
  50. package/dist/credential.mjs +2 -152
  51. package/dist/endpoints/index.cjs +15 -9
  52. package/dist/endpoints/index.d.cts +57 -3
  53. package/dist/endpoints/index.d.cts.map +1 -1
  54. package/dist/endpoints/index.d.mts +57 -3
  55. package/dist/endpoints/index.d.mts.map +1 -1
  56. package/dist/endpoints/index.mjs +4 -4
  57. package/dist/external-api.cjs +3 -39
  58. package/dist/external-api.cjs.map +1 -1
  59. package/dist/external-api.d.cts +2 -2
  60. package/dist/external-api.d.mts +2 -2
  61. package/dist/external-api.mjs +1 -37
  62. package/dist/external-api.mjs.map +1 -1
  63. package/dist/fake-BcHTPz7N.d.mts +201 -0
  64. package/dist/fake-BcHTPz7N.d.mts.map +1 -0
  65. package/dist/fake-Dvion_Fh.d.cts +201 -0
  66. package/dist/fake-Dvion_Fh.d.cts.map +1 -0
  67. package/dist/{processAudits-DasOZjPl.cjs → rateLimit-BwHcMECR.cjs} +26 -5
  68. package/dist/rateLimit-BwHcMECR.cjs.map +1 -0
  69. package/dist/{processAudits-BRRVVHUB.mjs → rateLimit-DbOTsP01.mjs} +23 -2
  70. package/dist/rateLimit-DbOTsP01.mjs.map +1 -0
  71. package/dist/{lazyAccessors-CFanua0O.mjs → readRequestBody-BTIl3k-D.mjs} +99 -2
  72. package/dist/readRequestBody-BTIl3k-D.mjs.map +1 -0
  73. package/dist/{lazyAccessors-hJKGv8Ay.cjs → readRequestBody-Dej_L3c4.cjs} +122 -1
  74. package/dist/readRequestBody-Dej_L3c4.cjs.map +1 -0
  75. package/dist/rest-api.cjs +1 -1
  76. package/dist/rest-api.d.cts +2 -2
  77. package/dist/rest-api.d.mts +2 -2
  78. package/dist/rest-api.mjs +1 -1
  79. package/package.json +31 -31
  80. package/dist/Endpoint-BG4UJ9oA.mjs.map +0 -1
  81. package/dist/Endpoint-BoUg8ocM.cjs.map +0 -1
  82. package/dist/Endpoint-Du-NwPX2.d.mts.map +0 -1
  83. package/dist/Endpoint-aCvBMPoH.d.cts.map +0 -1
  84. package/dist/EndpointFactory-DJ7gXLpR.cjs.map +0 -1
  85. package/dist/EndpointFactory-DMYdJCOj.d.mts.map +0 -1
  86. package/dist/EndpointFactory-I7s1co3Y.d.cts.map +0 -1
  87. package/dist/HonoEndpointAdaptor-PtPlbeKY.mjs.map +0 -1
  88. package/dist/HonoEndpointAdaptor-zVzVLJEO.cjs.map +0 -1
  89. package/dist/credential.cjs.map +0 -1
  90. package/dist/credential.d.cts.map +0 -1
  91. package/dist/credential.d.mts.map +0 -1
  92. package/dist/credential.mjs.map +0 -1
  93. package/dist/external-api-MJ8id87V.d.mts +0 -105
  94. package/dist/external-api-MJ8id87V.d.mts.map +0 -1
  95. package/dist/external-api-O107yzZJ.d.cts +0 -105
  96. package/dist/external-api-O107yzZJ.d.cts.map +0 -1
  97. package/dist/lazyAccessors-CFanua0O.mjs.map +0 -1
  98. package/dist/lazyAccessors-hJKGv8Ay.cjs.map +0 -1
  99. package/dist/processAudits-BRRVVHUB.mjs.map +0 -1
  100. package/dist/processAudits-DasOZjPl.cjs.map +0 -1
@@ -2,7 +2,7 @@ import { t as StandardSchemaV1 } from "../index-CeEtxDmK.cjs";
2
2
  import { i as FunctionHandler, n as Function$1 } from "../Function-Pu-1kKZz.cjs";
3
3
  import { t as Cron } from "../Cron-DI3nKoic.cjs";
4
4
  import { t as HttpMethod } from "../types-DMuSQeLL.cjs";
5
- import { c as EndpointSchemas, i as Endpoint, r as CookieFn } from "../Endpoint-aCvBMPoH.cjs";
5
+ import { c as EndpointSchemas, i as Endpoint, r as CookieFn } from "../Endpoint-BWyKCa2x.cjs";
6
6
  import { t as Telemetry } from "../lambdaTelemetry-8vnmVZQ5.cjs";
7
7
  import { t as Queue } from "../Queue-HPyi0e1i.cjs";
8
8
  import { t as Subscriber } from "../Subscriber-Bpp02cGr.cjs";
@@ -154,22 +154,35 @@ declare abstract class AmazonApiGatewayEndpoint<THandler extends AmazonApiGatewa
154
154
  protected envParser: EnvironmentParser<{}>;
155
155
  constructor(endpoint: Endpoint<TRoute, TMethod, TInput, TOutSchema, TServices, TLogger, TSession, TAuditStorage, TAuditStorageServiceName, TAuditAction>, options?: AmazonApiGatewayEndpointOptions);
156
156
  private error;
157
- abstract getInput(e: TEvent): GetInputResponse;
157
+ abstract getInput(e: TEvent): Promise<GetInputResponse>;
158
158
  /**
159
- * Decodes the raw body from an API Gateway event.
160
- * Uses Content-Type to decide parsing strategy (like Express/Fastify/Hono):
161
- * - `application/json` (or missing) → JSON.parse the decoded string
162
- * - Anything else → return decoded string as-is, let the schema handle it
159
+ * Decodes the raw body from an API Gateway event — base64 when API
160
+ * Gateway says so — and reads it by its Content-Type, as every adaptor
161
+ * does (see {@link readRequestBody}): JSON, an HTML form's fields, or text.
163
162
  *
164
- * Defaults to JSON when no Content-Type is provided for backwards compatibility.
163
+ * A body with no Content-Type is read as JSON, as it always has been here.
165
164
  */
166
- static decodeBody(body: string | undefined | null, isBase64Encoded: boolean | undefined, contentType: string | undefined): any;
165
+ static decodeBody(body: string | undefined | null, isBase64Encoded: boolean | undefined, contentType: string | undefined): Promise<unknown>;
166
+ /**
167
+ * The event's body, read only for an endpoint with a `.body()` schema —
168
+ * one without is handed no body, and is not refused a content type it
169
+ * never reads.
170
+ */
171
+ protected readBody(body: string | undefined | null, isBase64Encoded: boolean | undefined, contentType: string | undefined): Promise<unknown>;
167
172
  protected getCookies(e: TEvent): CookieFn;
168
173
  private input;
169
174
  abstract getLoggerContext(data: TEvent, context: Context): LoggerContext;
170
175
  private logger;
171
176
  private services;
172
177
  private authorize;
178
+ /**
179
+ * The endpoint's `.rateLimit()`, after authorization as on every adaptor:
180
+ * over the limit it throws a 429, which `error()` answers with its
181
+ * headers; under it, the `X-RateLimit-*` headers go on the response.
182
+ */
183
+ private rateLimit;
184
+ /** The path the request was made to, as the limiter keys a client by. */
185
+ private requestPath;
173
186
  private database;
174
187
  private session;
175
188
  private events;
@@ -211,7 +224,7 @@ type HandlerEvent<T extends Function> = T extends ((event: infer E, context: Con
211
224
  //#region src/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.ts
212
225
  export declare class AmazonApiGatewayV1Endpoint<TRoute extends string, TMethod extends HttpMethod, TInput extends EndpointSchemas = {}, TOutSchema extends StandardSchemaV1 | undefined = undefined, TServices extends Service[] = [], TLogger extends Logger = Logger, TSession = unknown> extends AmazonApiGatewayEndpoint<AmazonApiGatewayV1EndpointHandler, APIGatewayProxyEvent, TRoute, TMethod, TInput, TOutSchema, TServices, TLogger, TSession> {
213
226
  protected readonly endpoint: Endpoint<TRoute, TMethod, TInput, TOutSchema, TServices, TLogger, TSession>;
214
- getInput(e: APIGatewayProxyEvent): GetInputResponse;
227
+ getInput(e: APIGatewayProxyEvent): Promise<GetInputResponse>;
215
228
  getLoggerContext(data: APIGatewayProxyEvent, context: Context): LoggerContext;
216
229
  constructor(endpoint: Endpoint<TRoute, TMethod, TInput, TOutSchema, TServices, TLogger, TSession>, options?: AmazonApiGatewayEndpointOptions);
217
230
  }
@@ -220,7 +233,7 @@ export declare class AmazonApiGatewayV1Endpoint<TRoute extends string, TMethod e
220
233
  export declare class AmazonApiGatewayV2Endpoint<TRoute extends string, TMethod extends HttpMethod, TInput extends EndpointSchemas = {}, TOutSchema extends StandardSchemaV1 | undefined = undefined, TServices extends Service[] = [], TLogger extends Logger = Logger, TSession = unknown> extends AmazonApiGatewayEndpoint<AmazonApiGatewayV2EndpointHandler, APIGatewayProxyEventV2, TRoute, TMethod, TInput, TOutSchema, TServices, TLogger, TSession> {
221
234
  protected readonly endpoint: Endpoint<TRoute, TMethod, TInput, TOutSchema, TServices, TLogger, TSession>;
222
235
  getCookies(e: APIGatewayProxyEventV2): CookieFn;
223
- getInput(e: APIGatewayProxyEventV2): GetInputResponse;
236
+ getInput(e: APIGatewayProxyEventV2): Promise<GetInputResponse>;
224
237
  getLoggerContext(event: APIGatewayProxyEventV2, context: Context): LoggerContext;
225
238
  constructor(endpoint: Endpoint<TRoute, TMethod, TInput, TOutSchema, TServices, TLogger, TSession>, options?: AmazonApiGatewayEndpointOptions);
226
239
  }
@@ -1 +1 @@
1
- {"version":3,"file":"aws.d.cts","names":["Function","AWSLambdaHandler","Function","AWSLambdaHandler"],"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"],"mappings":"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C,QACA,SACA,QACA,YACA,WACA,SACA;EA1DO,SAAS,GAAG,uBAAuB;EAgCnC,iBACR,MAAM,sBACN,SAAS,UACP;EAeH,YAC6B,UAAU,SACrC,QACA,SACA,QACA,YACA,WACA,SACA,WAED,UAAS;;;;qBC9EE,2BACZ,uBACA,gBAAgB,YAChB,eAAe,sBACf,mBAAmB,0CACnB,kBAAkB,gBAClB,gBAAgB,SAAS,QACzB,4BACS,yBACT,mCACA,wBACA,QACA,SACA,QACA,YACA,WACA,SACA;qBAyC6B,UAAU,SACrC,QACA,SACA,QACA,YACA,WACA,SACA;EA9CO,WAAW,GAAG,yBAAyB;EAOvC,SAAS,GAAG,yBAAyB;EAarC,iBACR,OAAO,wBACP,SAAS,UACP;EAeH,YAC6B,UAAU,SACrC,QACA,SACA,QACA,YACA,WACA,SACA,WAED,UAAS;;;;KClECE,mBAAiB,cAAc,iBAAiB,QAC3D,QACA;;;;;;;;;;;;qBAcY,eACZ,+BACA,iBAAiB,mBAAmB,kBACpC,kBAAkB,gBAClB,gBAAgB,SAAS,QACzB,uBACA;mBAKkB;WACR,OAAO,MACf,OACA,UACA,WACA,SACA,WACA;UAVM;EAER,YACkB,WAAW,uBACnB,OAAO,MACf,OACA,UACA,WACA,SACA,WACA;MAIE,UAAU;UAIA;;UAkBA;UAaN;;;;;UAYA;UAQM;MAsEV,WAAWA,mBAAiB,UAAU;;;;KCnK/B,iBAAiB,cAAc,iBAAiB,QAC3D,QACA;qBAsBY,oBACZ,kBAAkB,gBAClB,gBAAgB,SAAS,QACzB,kBAAkB,0CAClB,wBAAwB,6CACxB,sCACA,uBACA;UAKS;WACC,YAAY,WACpB,WACA,SACA,WACA,iBACA,mBACA,WACA;UAXM;EAER,YACS,WAAW,uBACV,YAAY,WACpB,WACA,SACA,WACA,iBACA,mBACA,WACA;MAME,UAAU;UAIN;UAYA;UAmBA;UAaA;UAkBM;MAWV,WAAW"}
1
+ {"version":3,"file":"aws.d.cts","names":["Function","AWSLambdaHandler","Function","AWSLambdaHandler"],"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"],"mappings":"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,mCACA,sBACA,QACA,SACA,QACA,YACA,WACA,SACA;qBAqD6B,UAAU,SACrC,QACA,SACA,QACA,YACA,WACA,SACA;EA1Da,SAAS,GAAG,uBAAuB,QAAQ;EAgCjD,iBACR,MAAM,sBACN,SAAS,UACP;EAeH,YAC6B,UAAU,SACrC,QACA,SACA,QACA,YACA,WACA,SACA,WAED,UAAS;;;;qBC9EE,2BACZ,uBACA,gBAAgB,YAChB,eAAe,sBACf,mBAAmB,0CACnB,kBAAkB,gBAClB,gBAAgB,SAAS,QACzB,4BACS,yBACT,mCACA,wBACA,QACA,SACA,QACA,YACA,WACA,SACA;qBA2C6B,UAAU,SACrC,QACA,SACA,QACA,YACA,WACA,SACA;EAhDO,WAAW,GAAG,yBAAyB;EAOjC,SACd,GAAG,yBACD,QAAQ;EAaF,iBACR,OAAO,wBACP,SAAS,UACP;EAeH,YAC6B,UAAU,SACrC,QACA,SACA,QACA,YACA,WACA,SACA,WAED,UAAS;;;;KCpECE,mBAAiB,cAAc,iBAAiB,QAC3D,QACA;;;;;;;;;;;;qBAcY,eACZ,+BACA,iBAAiB,mBAAmB,kBACpC,kBAAkB,gBAClB,gBAAgB,SAAS,QACzB,uBACA;mBAKkB;WACR,OAAO,MACf,OACA,UACA,WACA,SACA,WACA;UAVM;EAER,YACkB,WAAW,uBACnB,OAAO,MACf,OACA,UACA,WACA,SACA,WACA;MAIE,UAAU;UAIA;;UAkBA;UAaN;;;;;UAYA;UAQM;MAsEV,WAAWA,mBAAiB,UAAU;;;;KCnK/B,iBAAiB,cAAc,iBAAiB,QAC3D,QACA;qBAsBY,oBACZ,kBAAkB,gBAClB,gBAAgB,SAAS,QACzB,kBAAkB,0CAClB,wBAAwB,6CACxB,sCACA,uBACA;UAKS;WACC,YAAY,WACpB,WACA,SACA,WACA,iBACA,mBACA,WACA;UAXM;EAER,YACS,WAAW,uBACV,YAAY,WACpB,WACA,SACA,WACA,iBACA,mBACA,WACA;MAME,UAAU;UAIN;UAYA;UAmBA;UAaA;UAkBM;MAWV,WAAW"}
@@ -2,7 +2,7 @@ import { t as StandardSchemaV1 } from "../index-CeEtxDmK.mjs";
2
2
  import { i as FunctionHandler, n as Function$1 } from "../Function-DuqGcbOI.mjs";
3
3
  import { t as Cron } from "../Cron-uYAHPnp7.mjs";
4
4
  import { t as HttpMethod } from "../types-DMuSQeLL.mjs";
5
- import { c as EndpointSchemas, i as Endpoint, r as CookieFn } from "../Endpoint-Du-NwPX2.mjs";
5
+ import { c as EndpointSchemas, i as Endpoint, r as CookieFn } from "../Endpoint-C3r2OzOD.mjs";
6
6
  import { t as Telemetry } from "../lambdaTelemetry-8vnmVZQ5.mjs";
7
7
  import { t as Queue } from "../Queue-DlsHRzUp.mjs";
8
8
  import { t as Subscriber } from "../Subscriber-CtN9R48-.mjs";
@@ -154,22 +154,35 @@ declare abstract class AmazonApiGatewayEndpoint<THandler extends AmazonApiGatewa
154
154
  protected envParser: EnvironmentParser<{}>;
155
155
  constructor(endpoint: Endpoint<TRoute, TMethod, TInput, TOutSchema, TServices, TLogger, TSession, TAuditStorage, TAuditStorageServiceName, TAuditAction>, options?: AmazonApiGatewayEndpointOptions);
156
156
  private error;
157
- abstract getInput(e: TEvent): GetInputResponse;
157
+ abstract getInput(e: TEvent): Promise<GetInputResponse>;
158
158
  /**
159
- * Decodes the raw body from an API Gateway event.
160
- * Uses Content-Type to decide parsing strategy (like Express/Fastify/Hono):
161
- * - `application/json` (or missing) → JSON.parse the decoded string
162
- * - Anything else → return decoded string as-is, let the schema handle it
159
+ * Decodes the raw body from an API Gateway event — base64 when API
160
+ * Gateway says so — and reads it by its Content-Type, as every adaptor
161
+ * does (see {@link readRequestBody}): JSON, an HTML form's fields, or text.
163
162
  *
164
- * Defaults to JSON when no Content-Type is provided for backwards compatibility.
163
+ * A body with no Content-Type is read as JSON, as it always has been here.
165
164
  */
166
- static decodeBody(body: string | undefined | null, isBase64Encoded: boolean | undefined, contentType: string | undefined): any;
165
+ static decodeBody(body: string | undefined | null, isBase64Encoded: boolean | undefined, contentType: string | undefined): Promise<unknown>;
166
+ /**
167
+ * The event's body, read only for an endpoint with a `.body()` schema —
168
+ * one without is handed no body, and is not refused a content type it
169
+ * never reads.
170
+ */
171
+ protected readBody(body: string | undefined | null, isBase64Encoded: boolean | undefined, contentType: string | undefined): Promise<unknown>;
167
172
  protected getCookies(e: TEvent): CookieFn;
168
173
  private input;
169
174
  abstract getLoggerContext(data: TEvent, context: Context): LoggerContext;
170
175
  private logger;
171
176
  private services;
172
177
  private authorize;
178
+ /**
179
+ * The endpoint's `.rateLimit()`, after authorization as on every adaptor:
180
+ * over the limit it throws a 429, which `error()` answers with its
181
+ * headers; under it, the `X-RateLimit-*` headers go on the response.
182
+ */
183
+ private rateLimit;
184
+ /** The path the request was made to, as the limiter keys a client by. */
185
+ private requestPath;
173
186
  private database;
174
187
  private session;
175
188
  private events;
@@ -211,7 +224,7 @@ type HandlerEvent<T extends Function> = T extends ((event: infer E, context: Con
211
224
  //#region src/endpoints/AmazonApiGatewayV1EndpointAdaptor.d.ts
212
225
  export declare class AmazonApiGatewayV1Endpoint<TRoute extends string, TMethod extends HttpMethod, TInput extends EndpointSchemas = {}, TOutSchema extends StandardSchemaV1 | undefined = undefined, TServices extends Service[] = [], TLogger extends Logger = Logger, TSession = unknown> extends AmazonApiGatewayEndpoint<AmazonApiGatewayV1EndpointHandler, APIGatewayProxyEvent, TRoute, TMethod, TInput, TOutSchema, TServices, TLogger, TSession> {
213
226
  protected readonly endpoint: Endpoint<TRoute, TMethod, TInput, TOutSchema, TServices, TLogger, TSession>;
214
- getInput(e: APIGatewayProxyEvent): GetInputResponse;
227
+ getInput(e: APIGatewayProxyEvent): Promise<GetInputResponse>;
215
228
  getLoggerContext(data: APIGatewayProxyEvent, context: Context): LoggerContext;
216
229
  constructor(endpoint: Endpoint<TRoute, TMethod, TInput, TOutSchema, TServices, TLogger, TSession>, options?: AmazonApiGatewayEndpointOptions);
217
230
  }
@@ -220,7 +233,7 @@ export declare class AmazonApiGatewayV1Endpoint<TRoute extends string, TMethod e
220
233
  export declare class AmazonApiGatewayV2Endpoint<TRoute extends string, TMethod extends HttpMethod, TInput extends EndpointSchemas = {}, TOutSchema extends StandardSchemaV1 | undefined = undefined, TServices extends Service[] = [], TLogger extends Logger = Logger, TSession = unknown> extends AmazonApiGatewayEndpoint<AmazonApiGatewayV2EndpointHandler, APIGatewayProxyEventV2, TRoute, TMethod, TInput, TOutSchema, TServices, TLogger, TSession> {
221
234
  protected readonly endpoint: Endpoint<TRoute, TMethod, TInput, TOutSchema, TServices, TLogger, TSession>;
222
235
  getCookies(e: APIGatewayProxyEventV2): CookieFn;
223
- getInput(e: APIGatewayProxyEventV2): GetInputResponse;
236
+ getInput(e: APIGatewayProxyEventV2): Promise<GetInputResponse>;
224
237
  getLoggerContext(event: APIGatewayProxyEventV2, context: Context): LoggerContext;
225
238
  constructor(endpoint: Endpoint<TRoute, TMethod, TInput, TOutSchema, TServices, TLogger, TSession>, options?: AmazonApiGatewayEndpointOptions);
226
239
  }
@@ -1 +1 @@
1
- {"version":3,"file":"aws.d.mts","names":["Function","AWSLambdaHandler","Function","AWSLambdaHandler"],"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"],"mappings":"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C,QACA,SACA,QACA,YACA,WACA,SACA;EA1DO,SAAS,GAAG,uBAAuB;EAgCnC,iBACR,MAAM,sBACN,SAAS,UACP;EAeH,YAC6B,UAAU,SACrC,QACA,SACA,QACA,YACA,WACA,SACA,WAED,UAAS;;;;qBC9EE,2BACZ,uBACA,gBAAgB,YAChB,eAAe,sBACf,mBAAmB,0CACnB,kBAAkB,gBAClB,gBAAgB,SAAS,QACzB,4BACS,yBACT,mCACA,wBACA,QACA,SACA,QACA,YACA,WACA,SACA;qBAyC6B,UAAU,SACrC,QACA,SACA,QACA,YACA,WACA,SACA;EA9CO,WAAW,GAAG,yBAAyB;EAOvC,SAAS,GAAG,yBAAyB;EAarC,iBACR,OAAO,wBACP,SAAS,UACP;EAeH,YAC6B,UAAU,SACrC,QACA,SACA,QACA,YACA,WACA,SACA,WAED,UAAS;;;;KClECE,mBAAiB,cAAc,iBAAiB,QAC3D,QACA;;;;;;;;;;;;qBAcY,eACZ,+BACA,iBAAiB,mBAAmB,kBACpC,kBAAkB,gBAClB,gBAAgB,SAAS,QACzB,uBACA;mBAKkB;WACR,OAAO,MACf,OACA,UACA,WACA,SACA,WACA;UAVM;EAER,YACkB,WAAW,uBACnB,OAAO,MACf,OACA,UACA,WACA,SACA,WACA;MAIE,UAAU;UAIA;;UAkBA;UAaN;;;;;UAYA;UAQM;MAsEV,WAAWA,mBAAiB,UAAU;;;;KCnK/B,iBAAiB,cAAc,iBAAiB,QAC3D,QACA;qBAsBY,oBACZ,kBAAkB,gBAClB,gBAAgB,SAAS,QACzB,kBAAkB,0CAClB,wBAAwB,6CACxB,sCACA,uBACA;UAKS;WACC,YAAY,WACpB,WACA,SACA,WACA,iBACA,mBACA,WACA;UAXM;EAER,YACS,WAAW,uBACV,YAAY,WACpB,WACA,SACA,WACA,iBACA,mBACA,WACA;MAME,UAAU;UAIN;UAYA;UAmBA;UAaA;UAkBM;MAWV,WAAW"}
1
+ {"version":3,"file":"aws.d.mts","names":["Function","AWSLambdaHandler","Function","AWSLambdaHandler"],"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"],"mappings":";;;;;;;;;;;;;;;;;uBAqBsB,yBACrB,eAAe,kDACf,mBAAmB,0CACnB,kBAAkB,gBAClB,gBAAgB,SAAS,QACzB,sBAAsB,sCACtB,kDACA,uBACA,8CACA,qBAAqB,mCAAmC;YAM7C,WAAW;qBACF,IAAIA,WACtB,QACA,WACA,SACA,YACA,eACA,0BACA,WACA,sBACA,cACA,gBACC,QACA,WACA,SACA,YACA,WACA,eACA;EAnBH,YACW,WAAW,uBACF,IAAIA,WACtB,QACA,WACA,SACA,YACA,eACA,0BACA,WACA,sBACA,cACA,gBACC,QACA,WACA,SACA,YACA,WACA,eACA;YAKO,UAAU;MAEhB,UAAU;MAIV,oBAAoB,iBAAiB,cAAc;EAQvD,eAAe,QAAQ,cAAc;EAI/B,eAAe,QAAQ;;;;;EAkBvB,mBAAmB,QAAQ;;;;;EAkB3B,iBAAiB,QAAQ,QAAQ;;;;;;;;;EAuBjC,iBAAiB,GACtB,UAAU;IACT,UAAU,QAAQ;IAClB,KAAK;QACA,QAAQ,KACZ,QAAQ;EA2CL,iBAAiB,QACtB,OAAO,SACL,QAAQ,8BAA8B;EASnC,cAAc,UAAU,oBAAoB,cAAW;EASvD,8BAA8B,UAAU,0BAC7C,eACA,QAAQ,IACN,QAAQ,8BAA8B;;;;KC5L9BC,mBAAiB,cAAc,iBAAiB,QAC3D,QACA;qBAuCY,kBACZ,eAAe,kDACf,mBAAmB,0CACnB,kBAAkB,gBAClB,gBAAgB,SAAS,QACzB,sBAAsB,sCACtB,kDACA,uBACA,8CACA,qBAAqB,mCAAmC,0CAI/C,yBACT,QACA,YACA,WACA,SACA,eACA,0BACA,WACA,sBACA;WAImB,IAAIC,WACrB,QACA,WACA,SACA,YACA,eACA,0BACA,WACA,sBACA,cACA,gBACC,QACA,WACA,SACA,YACA,WACA,eACA;EAnBH,YACC,WAAW,uBACO,IAAIA,WACrB,QACA,WACA,SACA,YACA,eACA,0BACA,WACA,sBACA,cACA,gBACC,QACA,WACA,SACA,YACA,WACA,eACA;UAOK;UAoBA;UAcA;UAuCA;UA2BA;UAgBA;UAgBA;UA6BA;UAkBM;MAyBV,WAAWD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBCvRH,qBACZ,eAAe,kDACf,kBAAkB,gBAClB,gBAAgB,SAAS,QACzB,mBAAmB,0CACnB,uBACA,sDACS,kBACT,QACA,YACA,WACA,4BAGA,WACA;EAGA,YACC,WAAW,uBACX,MAAM,KACL,QACA,WACA,SACA,YACA,WACA;;;;;;;;UCtCc;EAChB,YAAY,wBAAwB,OAAO;;;;;UAgC3B;;;;;;;;;;;;;EAahB,YAAY;;;;;;;;;;;;;;EAeZ,YAAY;;uBAGS,yBACrB,iBACG,oCACA,mCACH,eAAe,aAAa,WAC5B,uBACA,gBAAgB,YAChB,eAAe,sBACf,mBAAmB,0CACnB,kBAAkB,gBAClB,gBAAgB,SAAS,QACzB,oBACA,sBAAsB,sCACtB,kDACA,qBAAqB,mCAAmC;qBAmBpC,UAAU,SAC5B,QACA,SACA,QACA,YACA,WACA,SACA,UACA,eACA,0BACA;YAxBQ,SAAS;;;;;;;;;;YAWT,WAAW;EAErB,YACoB,UAAU,SAC5B,QACA,SACA,QACA,YACA,WACA,SACA,UACA,eACA,0BACA,eAED,UAAS;UAMF;WAsBC,SAAS,GAAG,SAAS,QAAQ;;;;;;;;SASzB,WACZ,iCACA,sCACA,kCACE;;;;;;YAmBO,SACT,iCACA,sCACA,kCACE;YASO,WAAW,GAAG,SAAS;UAKzB;WAkCC,iBAAiB,MAAM,QAAQ,SAAS,UAAU;UAEnD;UAYA;UAiBA;;;;;;UAuCA;;UAqBA;UAQA;UAwBA;UAiBA;UA4BM;;;;UAmMN;MAqCJ,WAuCiC;;KA2B1B;EACX;EACA;EACA,UAAU;EACV,oBAAoB;;KAGT;EACX;IACC;IACA;;EAED;IACC;IACA;IACA;IACA;IACA;;;KAIU;EACX;EACA;EACA;;KAGW,qCACX,OAAO,sBACP,SAAS,YACL,QAAQ;KAED,qCACX,OAAO,wBACP,SAAS,YACL,QAAQ;KAED,aAAa,UAAU,YAAY,YAC9C,aAAa,GACb,SAAS,mBAEP;;;qBC/tBU,2BACZ,uBACA,gBAAgB,YAChB,eAAe,sBACf,mBAAmB,0CACnB,kBAAkB,gBAClB,gBAAgB,SAAS,QACzB,4BACS,yBACT,mCACA,sBACA,QACA,SACA,QACA,YACA,WACA,SACA;qBAqD6B,UAAU,SACrC,QACA,SACA,QACA,YACA,WACA,SACA;EA1Da,SAAS,GAAG,uBAAuB,QAAQ;EAgCjD,iBACR,MAAM,sBACN,SAAS,UACP;EAeH,YAC6B,UAAU,SACrC,QACA,SACA,QACA,YACA,WACA,SACA,WAED,UAAS;;;;qBC9EE,2BACZ,uBACA,gBAAgB,YAChB,eAAe,sBACf,mBAAmB,0CACnB,kBAAkB,gBAClB,gBAAgB,SAAS,QACzB,4BACS,yBACT,mCACA,wBACA,QACA,SACA,QACA,YACA,WACA,SACA;qBA2C6B,UAAU,SACrC,QACA,SACA,QACA,YACA,WACA,SACA;EAhDO,WAAW,GAAG,yBAAyB;EAOjC,SACd,GAAG,yBACD,QAAQ;EAaF,iBACR,OAAO,wBACP,SAAS,UACP;EAeH,YAC6B,UAAU,SACrC,QACA,SACA,QACA,YACA,WACA,SACA,WAED,UAAS;;;;KCpECE,mBAAiB,cAAc,iBAAiB,QAC3D,QACA;;;;;;;;;;;;qBAcY,eACZ,+BACA,iBAAiB,mBAAmB,kBACpC,kBAAkB,gBAClB,gBAAgB,SAAS,QACzB,uBACA;mBAKkB;WACR,OAAO,MACf,OACA,UACA,WACA,SACA,WACA;UAVM;EAER,YACkB,WAAW,uBACnB,OAAO,MACf,OACA,UACA,WACA,SACA,WACA;MAIE,UAAU;UAIA;;UAkBA;UAaN;;;;;UAYA;UAQM;MAsEV,WAAWA,mBAAiB,UAAU;;;;KCnK/B,iBAAiB,cAAc,iBAAiB,QAC3D,QACA;qBAsBY,oBACZ,kBAAkB,gBAClB,gBAAgB,SAAS,QACzB,kBAAkB,0CAClB,wBAAwB,6CACxB,sCACA,uBACA;UAKS;WACC,YAAY,WACpB,WACA,SACA,WACA,iBACA,mBACA,WACA;UAXM;EAER,YACS,WAAW,uBACV,YAAY,WACpB,WACA,SACA,WACA,iBACA,mBACA,WACA;MAME,UAAU;UAIN;UAYA;UAmBA;UAaA;UAkBM;MAWV,WAAW"}
@@ -1,11 +1,11 @@
1
1
  import { o as __toESM } from "../Construct-B1vGBPme.mjs";
2
2
  import { n as recordCarrier } from "../tracing-CxaZ98IB.mjs";
3
3
  import { a as publishEvents, i as publishConstructEvents, t as FunctionBuilder } from "../functions-BFizikJU.mjs";
4
- import { i as require_lodash_set, n as ResponseBuilder, t as Endpoint } from "../Endpoint-BG4UJ9oA.mjs";
4
+ import { o as require_lodash_set, r as ResponseBuilder, t as Endpoint } from "../Endpoint-BW-nFdL_.mjs";
5
5
  import { n as envParserFor } from "../surfaceEnv-wMT5QzgZ.mjs";
6
- import { t as createApiGatewayCookies } from "../lazyAccessors-CFanua0O.mjs";
6
+ import { a as createApiGatewayCookies, i as readRequestBody } from "../readRequestBody-BTIl3k-D.mjs";
7
7
  import { n as subscribedEvents, r as subscriberContext, t as runSubscriber } from "../runSubscriber-BHvJ8POr.mjs";
8
- import { n as executeWithAuditTransaction, t as createAuditContext } from "../processAudits-BRRVVHUB.mjs";
8
+ import { n as createAuditContext, r as executeWithAuditTransaction, t as enforceRateLimit } from "../rateLimit-DbOTsP01.mjs";
9
9
  import { consumeBatchTraced } from "@geekmidas/events";
10
10
  import { ForbiddenError, UnprocessableEntityError, wrapError } from "@geekmidas/errors";
11
11
  import { ServiceDiscovery, runWithRequestContext } from "@geekmidas/services";
@@ -239,7 +239,7 @@ var AWSScheduledFunction = class extends AWSLambdaFunction {
239
239
  //#endregion
240
240
  //#region src/endpoints/AmazonApiGatewayEndpointAdaptor.ts
241
241
  var import_lodash_set = /* @__PURE__ */ __toESM(require_lodash_set(), 1);
242
- var AmazonApiGatewayEndpoint = class {
242
+ var AmazonApiGatewayEndpoint = class AmazonApiGatewayEndpoint {
243
243
  endpoint;
244
244
  options;
245
245
  /**
@@ -263,23 +263,36 @@ var AmazonApiGatewayEndpoint = class {
263
263
  const wrappedError = wrapError(req.error);
264
264
  req.response = {
265
265
  statusCode: wrappedError.statusCode,
266
- body: wrappedError.body
266
+ body: wrappedError.body,
267
+ ...wrappedError.headers ? { headers: { ...wrappedError.headers } } : {}
267
268
  };
268
269
  } };
269
270
  }
270
271
  /**
271
- * Decodes the raw body from an API Gateway event.
272
- * Uses Content-Type to decide parsing strategy (like Express/Fastify/Hono):
273
- * - `application/json` (or missing) → JSON.parse the decoded string
274
- * - Anything else → return decoded string as-is, let the schema handle it
272
+ * Decodes the raw body from an API Gateway event — base64 when API
273
+ * Gateway says so — and reads it by its Content-Type, as every adaptor
274
+ * does (see {@link readRequestBody}): JSON, an HTML form's fields, or text.
275
275
  *
276
- * Defaults to JSON when no Content-Type is provided for backwards compatibility.
276
+ * A body with no Content-Type is read as JSON, as it always has been here.
277
277
  */
278
- static decodeBody(body, isBase64Encoded, contentType) {
278
+ static async decodeBody(body, isBase64Encoded, contentType) {
279
279
  if (!body) return void 0;
280
- const raw = isBase64Encoded ? Buffer.from(body, "base64").toString("utf-8") : body;
281
- if (!contentType || contentType.toLowerCase().includes("application/json")) return JSON.parse(raw);
282
- return raw;
280
+ const bytes = Buffer.from(body, isBase64Encoded ? "base64" : "utf-8");
281
+ const request = new Request("http://api-gateway.invalid/", {
282
+ method: "POST",
283
+ headers: contentType ? { "content-type": contentType } : {},
284
+ body: bytes
285
+ });
286
+ return readRequestBody(request, contentType, { untyped: "json" });
287
+ }
288
+ /**
289
+ * The event's body, read only for an endpoint with a `.body()` schema —
290
+ * one without is handed no body, and is not refused a content type it
291
+ * never reads.
292
+ */
293
+ readBody(body, isBase64Encoded, contentType) {
294
+ if (!this.endpoint.input?.body) return Promise.resolve(void 0);
295
+ return AmazonApiGatewayEndpoint.decodeBody(body, isBase64Encoded, contentType);
283
296
  }
284
297
  getCookies(e) {
285
298
  const headers = e.headers;
@@ -288,7 +301,7 @@ var AmazonApiGatewayEndpoint = class {
288
301
  input() {
289
302
  return { before: async (req) => {
290
303
  try {
291
- const { body, query, params } = this.getInput(req.event);
304
+ const { body, query, params } = await this.getInput(req.event);
292
305
  const headers = req.event.headers;
293
306
  const header = Endpoint.createHeaders(headers);
294
307
  const cookie = this.getCookies(req.event);
@@ -343,6 +356,28 @@ var AmazonApiGatewayEndpoint = class {
343
356
  }
344
357
  } };
345
358
  }
359
+ /**
360
+ * The endpoint's `.rateLimit()`, after authorization as on every adaptor:
361
+ * over the limit it throws a 429, which `error()` answers with its
362
+ * headers; under it, the `X-RateLimit-*` headers go on the response.
363
+ */
364
+ rateLimit() {
365
+ return { before: async (req) => {
366
+ if (!this.endpoint.rateLimit) return;
367
+ req.event.rateLimitHeaders = await enforceRateLimit(this.endpoint.rateLimit, {
368
+ header: req.event.header,
369
+ services: req.event.services,
370
+ logger: req.event.logger,
371
+ session: req.event.session,
372
+ path: this.requestPath(req.event),
373
+ method: this.endpoint.method
374
+ });
375
+ } };
376
+ }
377
+ /** The path the request was made to, as the limiter keys a client by. */
378
+ requestPath(event) {
379
+ return event.path ?? event.rawPath ?? this.endpoint.route;
380
+ }
346
381
  database() {
347
382
  return { before: async (req) => {
348
383
  if (!this.endpoint.databaseService) return;
@@ -418,16 +453,18 @@ var AmazonApiGatewayEndpoint = class {
418
453
  data = response.data;
419
454
  metadata = response.metadata;
420
455
  }
456
+ const redirect = Endpoint.isRedirectStatus(metadata.status ?? this.endpoint.status);
421
457
  return {
422
- output: this.endpoint.outputSchema ? await this.endpoint.parseOutput(data) : void 0,
458
+ output: this.endpoint.outputSchema && !redirect ? await this.endpoint.parseOutput(data) : void 0,
423
459
  metadata,
424
- responseBuilder
460
+ responseBuilder,
461
+ redirect
425
462
  };
426
463
  };
427
464
  if (rlsActive && rlsContext && baseDb) return withRlsContext(baseDb, rlsContext, async (trx) => executeHandler(trx), { prefix: this.endpoint.rlsConfig?.prefix });
428
465
  return executeHandler(baseDb);
429
466
  }, async (result, auditor) => {
430
- if (!audits?.length) return;
467
+ if (!audits?.length || result.redirect) return;
431
468
  for (const audit of audits) {
432
469
  if (audit.when && !audit.when(result.output)) continue;
433
470
  const payload = audit.payload(result.output);
@@ -446,8 +483,10 @@ var AmazonApiGatewayEndpoint = class {
446
483
  body
447
484
  };
448
485
  const baseHeaders = isJsonResponse ? void 0 : { "content-type": this.endpoint.responseType };
449
- if (baseHeaders || metadata.headers && Object.keys(metadata.headers).length > 0) lambdaResponse.headers = {
486
+ const rateLimitHeaders = event.rateLimitHeaders;
487
+ if (baseHeaders || rateLimitHeaders || metadata.headers && Object.keys(metadata.headers).length > 0) lambdaResponse.headers = {
450
488
  ...baseHeaders ?? {},
489
+ ...rateLimitHeaders ?? {},
451
490
  ...metadata.headers ?? {}
452
491
  };
453
492
  if (metadata.cookies && metadata.cookies.size > 0) {
@@ -488,7 +527,7 @@ var AmazonApiGatewayEndpoint = class {
488
527
  }
489
528
  get handler() {
490
529
  const handler = this._handler.bind(this);
491
- let chain = middy(handler).use(this.logger()).use(this.error()).use(this.services()).use(this.input()).use(this.database()).use(this.session()).use(this.authorize()).use(this.events());
530
+ let chain = middy(handler).use(this.logger()).use(this.error()).use(this.services()).use(this.input()).use(this.database()).use(this.session()).use(this.authorize()).use(this.rateLimit()).use(this.events());
492
531
  const telemetryMiddleware = this.telemetry();
493
532
  if (telemetryMiddleware) chain = chain.use(telemetryMiddleware);
494
533
  if (this.options.telescope?.middleware) chain = chain.use(this.options.telescope.middleware);
@@ -531,14 +570,14 @@ function parseQueryParams(queryParams) {
531
570
  //#region src/endpoints/AmazonApiGatewayV1EndpointAdaptor.ts
532
571
  var AmazonApiGatewayV1Endpoint = class extends AmazonApiGatewayEndpoint {
533
572
  endpoint;
534
- getInput(e) {
573
+ async getInput(e) {
535
574
  const multiValueParams = e.multiValueQueryStringParameters || {};
536
575
  const singleValueParams = e.queryStringParameters || {};
537
576
  const mergedParams = {};
538
577
  for (const [key, value] of Object.entries(singleValueParams)) if (value !== void 0) mergedParams[key] = value;
539
578
  for (const [key, values] of Object.entries(multiValueParams)) if (values && values.length > 1) mergedParams[key] = values;
540
579
  return {
541
- body: AmazonApiGatewayEndpoint.decodeBody(e.body, e.isBase64Encoded, e.headers?.["Content-Type"] ?? e.headers?.["content-type"]),
580
+ body: await this.readBody(e.body, e.isBase64Encoded, e.headers?.["Content-Type"] ?? e.headers?.["content-type"]),
542
581
  query: parseQueryParams(mergedParams),
543
582
  params: e.pathParameters || {}
544
583
  };
@@ -570,9 +609,9 @@ var AmazonApiGatewayV2Endpoint = class extends AmazonApiGatewayEndpoint {
570
609
  getCookies(e) {
571
610
  return createApiGatewayCookies(e.cookies, e.headers?.cookie);
572
611
  }
573
- getInput(e) {
612
+ async getInput(e) {
574
613
  return {
575
- body: AmazonApiGatewayEndpoint.decodeBody(e.body, e.isBase64Encoded, e.headers?.["content-type"]),
614
+ body: await this.readBody(e.body, e.isBase64Encoded, e.headers?.["content-type"]),
576
615
  query: qs.parse(e.rawQueryString),
577
616
  params: e.pathParameters || {}
578
617
  };