@scloud/lambda-api 1.2.2 → 1.2.4

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/README.md CHANGED
@@ -6,6 +6,7 @@ This is a piece of useful boilerplate to handle the mechanics of routing, header
6
6
 
7
7
  ## Releae notes
8
8
 
9
+ * `1.2.3`: Readme update
9
10
  * '1.2.0': Restructure so we consumers don't need to include '/dist' in the import path
10
11
  * `1.1.8`: Trusted publishing enabled
11
12
  * `1.1.7`: Enable sending headers in ApiError
@@ -40,15 +41,17 @@ const routes: types.Routes = {
40
41
  }
41
42
  ```
42
43
 
43
- Use `@scloud/lambda-api` in your Lambda handler:
44
+ Use `@scloud/lambda-api` in your Lambda handler. `apiHandler` accepts both REST API (v1) and Function URL (v2) events and returns the matching response shape. When the event type is known at compile time, TypeScript infers the result type via overloads; you can also use `ApiGatewayProxyResultFor<E>`:
44
45
 
45
46
  ```
46
- import { APIGatewayProxyEvent, APIGatewayProxyResult, Context } from 'aws-lambda';
47
- import { apiHandler, helpers } from '@scloud/lambda-api';
48
-
49
- export async function handler(event: APIGatewayProxyEvent, context: Context): Promise<APIGatewayProxyResult> {
50
- const result = await apiHandler(event, context, routes);
51
- return result;
47
+ import { APIGatewayProxyEventV2, Context } from 'aws-lambda';
48
+ import { apiHandler, ApiGatewayProxyResultFor } from '@scloud/lambda-api';
49
+
50
+ export async function handler(
51
+ event: APIGatewayProxyEventV2,
52
+ context: Context,
53
+ ): Promise<ApiGatewayProxyResultFor<typeof event>> {
54
+ return apiHandler(event, context, routes);
52
55
  }
53
56
  ```
54
57
 
@@ -0,0 +1,9 @@
1
+ import { APIGatewayProxyEvent, APIGatewayProxyEventV2, APIGatewayProxyResult, APIGatewayProxyStructuredResultV2 } from 'aws-lambda';
2
+ export type ApiGatewayProxyEventAny = APIGatewayProxyEvent | APIGatewayProxyEventV2;
3
+ /** Result type that matches the incoming API Gateway / Function URL event format. */
4
+ export type ApiGatewayProxyResultFor<E extends ApiGatewayProxyEventAny> = E extends APIGatewayProxyEventV2 ? APIGatewayProxyStructuredResultV2 : APIGatewayProxyResult;
5
+ /**
6
+ * Lambda Function URLs and HTTP APIs (payload format 2.0) use `rawPath`.
7
+ * REST API / CloudFront proxy integrations use `path`.
8
+ */
9
+ export declare function isApiGatewayEventV2(event: ApiGatewayProxyEventAny): event is APIGatewayProxyEventV2;
package/dist/event.js ADDED
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isApiGatewayEventV2 = isApiGatewayEventV2;
4
+ /**
5
+ * Lambda Function URLs and HTTP APIs (payload format 2.0) use `rawPath`.
6
+ * REST API / CloudFront proxy integrations use `path`.
7
+ */
8
+ function isApiGatewayEventV2(event) {
9
+ return typeof event.rawPath === 'string';
10
+ }
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZXZlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFpQkEsa0RBRUM7QUFORDs7O0dBR0c7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxLQUE4QjtJQUNoRSxPQUFPLE9BQVEsS0FBZ0MsQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDO0FBQ3ZFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBUElHYXRld2F5UHJveHlFdmVudCxcbiAgQVBJR2F0ZXdheVByb3h5RXZlbnRWMixcbiAgQVBJR2F0ZXdheVByb3h5UmVzdWx0LFxuICBBUElHYXRld2F5UHJveHlTdHJ1Y3R1cmVkUmVzdWx0VjIsXG59IGZyb20gJ2F3cy1sYW1iZGEnO1xuXG5leHBvcnQgdHlwZSBBcGlHYXRld2F5UHJveHlFdmVudEFueSA9IEFQSUdhdGV3YXlQcm94eUV2ZW50IHwgQVBJR2F0ZXdheVByb3h5RXZlbnRWMjtcblxuLyoqIFJlc3VsdCB0eXBlIHRoYXQgbWF0Y2hlcyB0aGUgaW5jb21pbmcgQVBJIEdhdGV3YXkgLyBGdW5jdGlvbiBVUkwgZXZlbnQgZm9ybWF0LiAqL1xuZXhwb3J0IHR5cGUgQXBpR2F0ZXdheVByb3h5UmVzdWx0Rm9yPEUgZXh0ZW5kcyBBcGlHYXRld2F5UHJveHlFdmVudEFueT4gPVxuICBFIGV4dGVuZHMgQVBJR2F0ZXdheVByb3h5RXZlbnRWMiA/IEFQSUdhdGV3YXlQcm94eVN0cnVjdHVyZWRSZXN1bHRWMiA6IEFQSUdhdGV3YXlQcm94eVJlc3VsdDtcblxuLyoqXG4gKiBMYW1iZGEgRnVuY3Rpb24gVVJMcyBhbmQgSFRUUCBBUElzIChwYXlsb2FkIGZvcm1hdCAyLjApIHVzZSBgcmF3UGF0aGAuXG4gKiBSRVNUIEFQSSAvIENsb3VkRnJvbnQgcHJveHkgaW50ZWdyYXRpb25zIHVzZSBgcGF0aGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FwaUdhdGV3YXlFdmVudFYyKGV2ZW50OiBBcGlHYXRld2F5UHJveHlFdmVudEFueSk6IGV2ZW50IGlzIEFQSUdhdGV3YXlQcm94eUV2ZW50VjIge1xuICByZXR1cm4gdHlwZW9mIChldmVudCBhcyBBUElHYXRld2F5UHJveHlFdmVudFYyKS5yYXdQYXRoID09PSAnc3RyaW5nJztcbn1cbiJdfQ==
package/dist/handler.d.ts CHANGED
@@ -1,6 +1,9 @@
1
- import { APIGatewayProxyEvent, APIGatewayProxyResult, Context } from 'aws-lambda';
1
+ import { APIGatewayProxyEvent, APIGatewayProxyEventV2, APIGatewayProxyResult, APIGatewayProxyStructuredResultV2, Context } from 'aws-lambda';
2
2
  import { Request, Response, Handler, Routes } from './types';
3
+ type ErrorHandler = (request: Request, e: Error) => Promise<Response | undefined>;
3
4
  /**
4
5
  * API route handler
5
6
  */
6
- export declare function apiHandler(event: APIGatewayProxyEvent, context: Context, routes: Routes, errorHandler?: ((request: Request, e: Error) => Promise<Response | undefined>) | undefined, catchAll?: Handler | undefined): Promise<APIGatewayProxyResult>;
7
+ export declare function apiHandler(event: APIGatewayProxyEventV2, context: Context, routes: Routes, errorHandler?: ErrorHandler, catchAll?: Handler): Promise<APIGatewayProxyStructuredResultV2>;
8
+ export declare function apiHandler(event: APIGatewayProxyEvent, context: Context, routes: Routes, errorHandler?: ErrorHandler, catchAll?: Handler): Promise<APIGatewayProxyResult>;
9
+ export {};
package/dist/handler.js CHANGED
@@ -5,10 +5,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.apiHandler = apiHandler;
7
7
  const types_1 = require("./types");
8
+ const event_1 = require("./event");
8
9
  const helpers_1 = require("./helpers");
10
+ const result_1 = require("./result");
9
11
  const v4_1 = __importDefault(require("zod/v4"));
10
12
  function apiErrorResponse(e) {
11
- // Intentional API error response
12
13
  if (e instanceof types_1.ApiError) {
13
14
  return {
14
15
  headers: e.headers,
@@ -16,7 +17,6 @@ function apiErrorResponse(e) {
16
17
  body: e.body,
17
18
  };
18
19
  }
19
- // Unhandled error
20
20
  if (e)
21
21
  console.error(e);
22
22
  return {
@@ -24,10 +24,7 @@ function apiErrorResponse(e) {
24
24
  body: 'Internal server error',
25
25
  };
26
26
  }
27
- /**
28
- * API route handler
29
- */
30
- async function apiHandler(event, context, routes, errorHandler = undefined, catchAll = undefined) {
27
+ async function handleRequest(event, routes, errorHandler, catchAll) {
31
28
  const request = (0, helpers_1.parseRequest)(event);
32
29
  let response;
33
30
  try {
@@ -38,7 +35,6 @@ async function apiHandler(event, context, routes, errorHandler = undefined, catc
38
35
  const route = match.methods[request.method];
39
36
  if (!route)
40
37
  throw new types_1.ApiError(405, 'Method not allowed');
41
- // Verify request body
42
38
  if (route.request?.body) {
43
39
  const parsed = route.request.body.safeParse(request.body);
44
40
  if (!parsed.success) {
@@ -47,19 +43,17 @@ async function apiHandler(event, context, routes, errorHandler = undefined, catc
47
43
  request.body = parsed.data;
48
44
  }
49
45
  response = await route.handler(request);
50
- // Verify response body
51
46
  if (route.response?.body) {
52
47
  const parsed = route.response.body.safeParse(response.body);
53
48
  if (!parsed.success) {
54
49
  console.error('Invalid response body:', request.method, request.path, JSON.stringify(v4_1.default.treeifyError(parsed.error), null, 2));
55
- response = undefined; // Remove the response so it can be replaced by the error handler
50
+ response = undefined;
56
51
  throw new types_1.ApiError(500, 'Internal server error');
57
52
  }
58
53
  response.body = parsed.data;
59
54
  }
60
55
  }
61
56
  else if (catchAll) {
62
- // Catch-all / 404
63
57
  response = await catchAll.handler(request);
64
58
  }
65
59
  else {
@@ -69,44 +63,20 @@ async function apiHandler(event, context, routes, errorHandler = undefined, catc
69
63
  catch (e) {
70
64
  if (errorHandler) {
71
65
  try {
72
- // errorHandler can optionally return undefined to request standard error handling:
73
66
  response = await errorHandler(request, e);
74
67
  }
75
68
  catch (ee) {
76
69
  response = apiErrorResponse(ee);
77
70
  }
78
71
  }
79
- // Standard error handling
80
72
  response = response ?? apiErrorResponse(e);
81
73
  }
82
- // Translate the response to an API Gateway Proxy result
83
- let body;
84
- const headers = response.headers || {};
85
- if (typeof response.body === 'string') {
86
- // Use the body as-is
87
- // Add text/plain if no Content-Type header is set:
88
- if (!(0, helpers_1.getHeader)('Content-Type', headers))
89
- (0, helpers_1.setHeader)('Content-Type', 'text/plain', headers);
90
- body = response.body;
91
- }
92
- else if (response.body) {
93
- // Stringify the response object
94
- // API Gateway returns application/json by default
95
- body = JSON.stringify(response.body);
96
- }
97
- // Prepare response
98
- const result = {
99
- statusCode: response.statusCode ?? 200,
100
- headers,
101
- body: body || '',
102
- };
103
- // Add cookie headers
104
- const cookieHeaders = (0, helpers_1.buildCookie)(response);
105
- if (cookieHeaders) {
106
- result.multiValueHeaders = {
107
- 'Set-Cookie': cookieHeaders,
108
- };
109
- }
110
- return result;
74
+ return response;
75
+ }
76
+ async function apiHandler(event, context, routes, errorHandler, catchAll) {
77
+ const response = await handleRequest(event, routes, errorHandler, catchAll);
78
+ return (0, event_1.isApiGatewayEventV2)(event)
79
+ ? (0, result_1.toApiGatewayResultV2)(response)
80
+ : (0, result_1.toApiGatewayResultV1)(response);
111
81
  }
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBaUNBLGdDQXlGQztBQXJIRCxtQ0FHaUI7QUFDakIsdUNBQXdGO0FBQ3hGLGdEQUF1QjtBQUV2QixTQUFTLGdCQUFnQixDQUFDLENBQVc7SUFDbkMsaUNBQWlDO0lBQ2pDLElBQUksQ0FBQyxZQUFZLGdCQUFRLEVBQUUsQ0FBQztRQUMxQixPQUFPO1lBQ0wsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPO1lBQ2xCLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVTtZQUN4QixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7U0FDYixDQUFDO0lBQ0osQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFJLENBQUM7UUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLE9BQU87UUFDTCxVQUFVLEVBQUUsR0FBRztRQUNmLElBQUksRUFBRSx1QkFBdUI7S0FDOUIsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNJLEtBQUssVUFBVSxVQUFVLENBQzlCLEtBQTJCLEVBQzNCLE9BQWdCLEVBQ2hCLE1BQWMsRUFDZCxlQUE0RixTQUFTLEVBQ3JHLFdBQWdDLFNBQVM7SUFFekMsTUFBTSxPQUFPLEdBQUcsSUFBQSxzQkFBWSxFQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXBDLElBQUksUUFBOEIsQ0FBQztJQUNuQyxJQUFJLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxJQUFBLG9CQUFVLEVBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxJQUFJLEtBQUssQ0FBQyxNQUFNO1lBQUUsT0FBTyxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBRXhELElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FB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RSxPQUFPLENBQUMsQ0FBQztRQUMxRixJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztJQUN2QixDQUFDO1NBQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsZ0NBQWdDO1FBQ2hDLGtEQUFrRDtRQUNsRCxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELG1CQUFtQjtJQUNuQixNQUFNLE1BQU0sR0FBMEI7UUFDcEMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVLElBQUksR0FBRztRQUN0QyxPQUFPO1FBQ1AsSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFO0tBQ2pCLENBQUM7SUFFRixxQkFBcUI7SUFDckIsTUFBTSxhQUFhLEdBQUcsSUFBQSxxQkFBVyxFQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEIsTUFBTSxDQUFDLGlCQUFpQixHQUFHO1lBQ3pCLFlBQVksRUFBRSxhQUFhO1NBQzVCLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFQSUdhdGV3YXlQcm94eUV2ZW50LFxuICBBUElHYXRld2F5UHJveHlSZXN1bHQsXG4gIENvbnRleHQsXG59IGZyb20gJ2F3cy1sYW1iZGEnO1xuaW1wb3J0IHtcbiAgUmVxdWVzdCwgUmVzcG9uc2UsIEhhbmRsZXIsIFJvdXRlLCBSb3V0ZXMsXG4gIEFwaUVycm9yLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGJ1aWxkQ29va2llLCBnZXRIZWFkZXIsIG1hdGNoUm91dGUsIHBhcnNlUmVxdWVzdCwgc2V0SGVhZGVyIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB6IGZyb20gJ3pvZC92NCc7XG5cbmZ1bmN0aW9uIGFwaUVycm9yUmVzcG9uc2UoZT86IHVua25vd24pOiBSZXNwb25zZSB7XG4gIC8vIEludGVudGlvbmFsIEFQSSBlcnJvciByZXNwb25zZVxuICBpZiAoZSBpbnN0YW5jZW9mIEFwaUVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlYWRlcnM6IGUuaGVhZGVycyxcbiAgICAgIHN0YXR1c0NvZGU6IGUuc3RhdHVzQ29kZSxcbiAgICAgIGJvZHk6IGUuYm9keSxcbiAgICB9O1xuICB9XG5cbiAgLy8gVW5oYW5kbGVkIGVycm9yXG4gIGlmIChlKSBjb25zb2xlLmVycm9yKGUpO1xuICByZXR1cm4ge1xuICAgIHN0YXR1c0NvZGU6IDUwMCxcbiAgICBib2R5OiAnSW50ZXJuYWwgc2VydmVyIGVycm9yJyxcbiAgfTtcbn1cblxuLyoqXG4gKiBBUEkgcm91dGUgaGFuZGxlclxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBpSGFuZGxlcihcbiAgZXZlbnQ6IEFQSUdhdGV3YXlQcm94eUV2ZW50LFxuICBjb250ZXh0OiBDb250ZXh0LFxuICByb3V0ZXM6IFJvdXRlcyxcbiAgZXJyb3JIYW5kbGVyOiAoKHJlcXVlc3Q6IFJlcXVlc3QsIGU6IEVycm9yKSA9PiBQcm9taXNlPFJlc3BvbnNlIHwgdW5kZWZpbmVkPikgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gIGNhdGNoQWxsOiBIYW5kbGVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuKTogUHJvbWlzZTxBUElHYXRld2F5UHJveHlSZXN1bHQ+IHtcbiAgY29uc3QgcmVxdWVzdCA9IHBhcnNlUmVxdWVzdChldmVudCk7XG5cbiAgbGV0IHJlc3BvbnNlOiBSZXNwb25zZSB8IHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBjb25zdCBtYXRjaCA9IG1hdGNoUm91dGUocm91dGVzLCByZXF1ZXN0LnBhdGgpO1xuICAgIGlmIChtYXRjaC5wYXJhbXMpIHJlcXVlc3QucGF0aFBhcmFtZXRlcnMgPSBtYXRjaC5wYXJhbXM7XG5cbiAgICBpZiAobWF0Y2gubWV0aG9kcykge1xuICAgICAgY29uc3Qgcm91dGUgPSBtYXRjaC5tZXRob2RzW3JlcXVlc3QubWV0aG9kIGFzIGtleW9mIFJvdXRlXTtcbiAgICAgIGlmICghcm91dGUpIHRocm93IG5ldyBBcGlFcnJvcig0MDUsICdNZXRob2Qgbm90IGFsbG93ZWQnKTtcblxuICAgICAgLy8gVmVyaWZ5IHJlcXVlc3QgYm9keVxuICAgICAgaWYgKHJvdXRlLnJlcXVlc3Q/LmJvZHkpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gcm91dGUucmVxdWVzdC5ib2R5LnNhZmVQYXJzZShyZXF1ZXN0LmJvZHkpO1xuICAgICAgICBpZiAoIXBhcnNlZC5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEFwaUVycm9yKDQwMCwgei50cmVlaWZ5RXJyb3IocGFyc2VkLmVycm9yKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdC5ib2R5ID0gcGFyc2VkLmRhdGE7XG4gICAgICB9XG5cbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgcm91dGUuaGFuZGxlcihyZXF1ZXN0KTtcblxuICAgICAgLy8gVmVyaWZ5IHJlc3BvbnNlIGJvZHlcbiAgICAgIGlmIChyb3V0ZS5yZXNwb25zZT8uYm9keSkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSByb3V0ZS5yZXNwb25zZS5ib2R5LnNhZmVQYXJzZShyZXNwb25zZS5ib2R5KTtcbiAgICAgICAgaWYgKCFwYXJzZWQuc3VjY2Vzcykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQgcmVzcG9uc2UgYm9keTonLCByZXF1ZXN0Lm1ldGhvZCwgcmVxdWVzdC5wYXRoLCBKU09OLnN0cmluZ2lmeSh6LnRyZWVpZnlFcnJvcihwYXJzZWQuZXJyb3IpLCBudWxsLCAyKSk7XG4gICAgICAgICAgcmVzcG9uc2UgPSB1bmRlZmluZWQ7IC8vIFJlbW92ZSB0aGUgcmVzcG9uc2Ugc28gaXQgY2FuIGJlIHJlcGxhY2VkIGJ5IHRoZSBlcnJvciBoYW5kbGVyXG4gICAgICAgICAgdGhyb3cgbmV3IEFwaUVycm9yKDUwMCwgJ0ludGVybmFsIHNlcnZlciBlcnJvcicpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3BvbnNlLmJvZHkgPSBwYXJzZWQuZGF0YTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNhdGNoQWxsKSB7XG4gICAgICAvLyBDYXRjaC1hbGwgLyA0MDRcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgY2F0Y2hBbGwuaGFuZGxlcihyZXF1ZXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEFwaUVycm9yKDQwNCwgJ05vdCBmb3VuZCcpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlcnJvckhhbmRsZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIGVycm9ySGFuZGxlciBjYW4gb3B0aW9uYWxseSByZXR1cm4gdW5kZWZpbmVkIHRvIHJlcXVlc3Qgc3RhbmRhcmQgZXJyb3IgaGFuZGxpbmc6XG4gICAgICAgIHJlc3BvbnNlID0gYXdhaXQgZXJyb3JIYW5kbGVyKHJlcXVlc3QsIGUgYXMgRXJyb3IpO1xuICAgICAgfSBjYXRjaCAoZWUpIHtcbiAgICAgICAgcmVzcG9uc2UgPSBhcGlFcnJvclJlc3BvbnNlKGVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTdGFuZGFyZCBlcnJvciBoYW5kbGluZ1xuICAgIHJlc3BvbnNlID0gcmVzcG9uc2UgPz8gYXBpRXJyb3JSZXNwb25zZShlKTtcbiAgfVxuXG4gIC8vIFRyYW5zbGF0ZSB0aGUgcmVzcG9uc2UgdG8gYW4gQVBJIEdhdGV3YXkgUHJveHkgcmVzdWx0XG4gIGxldCBib2R5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGhlYWRlcnMgPSByZXNwb25zZS5oZWFkZXJzIHx8IHt9O1xuICBpZiAodHlwZW9mIHJlc3BvbnNlLmJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gVXNlIHRoZSBib2R5IGFzLWlzXG4gICAgLy8gQWRkIHRleHQvcGxhaW4gaWYgbm8gQ29udGVudC1UeXBlIGhlYWRlciBpcyBzZXQ6XG4gICAgaWYgKCFnZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsIGhlYWRlcnMpKSBzZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJywgaGVhZGVycyk7XG4gICAgYm9keSA9IHJlc3BvbnNlLmJvZHk7XG4gIH0gZWxzZSBpZiAocmVzcG9uc2UuYm9keSkge1xuICAgIC8vIFN0cmluZ2lmeSB0aGUgcmVzcG9uc2Ugb2JqZWN0XG4gICAgLy8gQVBJIEdhdGV3YXkgcmV0dXJucyBhcHBsaWNhdGlvbi9qc29uIGJ5IGRlZmF1bHRcbiAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuYm9keSk7XG4gIH1cblxuICAvLyBQcmVwYXJlIHJlc3BvbnNlXG4gIGNvbnN0IHJlc3VsdDogQVBJR2F0ZXdheVByb3h5UmVzdWx0ID0ge1xuICAgIHN0YXR1c0NvZGU6IHJlc3BvbnNlLnN0YXR1c0NvZGUgPz8gMjAwLFxuICAgIGhlYWRlcnMsXG4gICAgYm9keTogYm9keSB8fCAnJyxcbiAgfTtcblxuICAvLyBBZGQgY29va2llIGhlYWRlcnNcbiAgY29uc3QgY29va2llSGVhZGVycyA9IGJ1aWxkQ29va2llKHJlc3BvbnNlKTtcbiAgaWYgKGNvb2tpZUhlYWRlcnMpIHtcbiAgICByZXN1bHQubXVsdGlWYWx1ZUhlYWRlcnMgPSB7XG4gICAgICAnU2V0LUNvb2tpZSc6IGNvb2tpZUhlYWRlcnMsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iXX0=
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBMkdBLGdDQVdDO0FBL0dELG1DQUdpQjtBQUNqQixtQ0FBdUU7QUFDdkUsdUNBQXFEO0FBQ3JELHFDQUFzRTtBQUN0RSxnREFBdUI7QUFJdkIsU0FBUyxnQkFBZ0IsQ0FBQyxDQUFXO0lBQ25DLElBQUksQ0FBQyxZQUFZLGdCQUFRLEVBQUUsQ0FBQztRQUMxQixPQUFPO1lBQ0wsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPO1lBQ2xCLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVTtZQUN4QixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7U0FDYixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksQ0FBQztRQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsT0FBTztRQUNMLFVBQVUsRUFBRSxHQUFHO1FBQ2YsSUFBSSxFQUFFLHVCQUF1QjtLQUM5QixDQUFDO0FBQ0osQ0FBQztBQUVELEtBQUssVUFBVSxhQUFhLENBQzFCLEtBQThCLEVBQzlCLE1BQWMsRUFDZCxZQUFzQyxFQUN0QyxRQUE2QjtJQUU3QixNQUFNLE9BQU8sR0FBRyxJQUFBLHNCQUFZLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFFcEMsSUFBSSxRQUE4QixDQUFDO0lBQ25DLElBQUksQ0FBQztRQUNILE1BQU0sS0FBSyxHQUFHLElBQUEsb0JBQVUsRUFBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLElBQUksS0FBSyxDQUFDLE1BQU07WUFBRSxPQUFPLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFFeEQsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBcUIsQ0FBQyxD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SUdhdGV3YXlQcm94eUV2ZW50LFxuICBBUElHYXRld2F5UHJveHlFdmVudFYyLFxuICBBUElHYXRld2F5UHJveHlSZXN1bHQsXG4gIEFQSUdhdGV3YXlQcm94eVN0cnVjdHVyZWRSZXN1bHRWMixcbiAgQ29udGV4dCxcbn0gZnJvbSAnYXdzLWxhbWJkYSc7XG5pbXBvcnQge1xuICBSZXF1ZXN0LCBSZXNwb25zZSwgSGFuZGxlciwgUm91dGUsIFJvdXRlcyxcbiAgQXBpRXJyb3IsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQXBpR2F0ZXdheVByb3h5RXZlbnRBbnksIGlzQXBpR2F0ZXdheUV2ZW50VjIgfSBmcm9tICcuL2V2ZW50JztcbmltcG9ydCB7IG1hdGNoUm91dGUsIHBhcnNlUmVxdWVzdCB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyB0b0FwaUdhdGV3YXlSZXN1bHRWMSwgdG9BcGlHYXRld2F5UmVzdWx0VjIgfSBmcm9tICcuL3Jlc3VsdCc7XG5pbXBvcnQgeiBmcm9tICd6b2QvdjQnO1xuXG50eXBlIEVycm9ySGFuZGxlciA9IChyZXF1ZXN0OiBSZXF1ZXN0LCBlOiBFcnJvcikgPT4gUHJvbWlzZTxSZXNwb25zZSB8IHVuZGVmaW5lZD47XG5cbmZ1bmN0aW9uIGFwaUVycm9yUmVzcG9uc2UoZT86IHVua25vd24pOiBSZXNwb25zZSB7XG4gIGlmIChlIGluc3RhbmNlb2YgQXBpRXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGVhZGVyczogZS5oZWFkZXJzLFxuICAgICAgc3RhdHVzQ29kZTogZS5zdGF0dXNDb2RlLFxuICAgICAgYm9keTogZS5ib2R5LFxuICAgIH07XG4gIH1cblxuICBpZiAoZSkgY29uc29sZS5lcnJvcihlKTtcbiAgcmV0dXJuIHtcbiAgICBzdGF0dXNDb2RlOiA1MDAsXG4gICAgYm9keTogJ0ludGVybmFsIHNlcnZlciBlcnJvcicsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVJlcXVlc3QoXG4gIGV2ZW50OiBBcGlHYXRld2F5UHJveHlFdmVudEFueSxcbiAgcm91dGVzOiBSb3V0ZXMsXG4gIGVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVyIHwgdW5kZWZpbmVkLFxuICBjYXRjaEFsbDogSGFuZGxlciB8IHVuZGVmaW5lZCxcbik6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgY29uc3QgcmVxdWVzdCA9IHBhcnNlUmVxdWVzdChldmVudCk7XG5cbiAgbGV0IHJlc3BvbnNlOiBSZXNwb25zZSB8IHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBjb25zdCBtYXRjaCA9IG1hdGNoUm91dGUocm91dGVzLCByZXF1ZXN0LnBhdGgpO1xuICAgIGlmIChtYXRjaC5wYXJhbXMpIHJlcXVlc3QucGF0aFBhcmFtZXRlcnMgPSBtYXRjaC5wYXJhbXM7XG5cbiAgICBpZiAobWF0Y2gubWV0aG9kcykge1xuICAgICAgY29uc3Qgcm91dGUgPSBtYXRjaC5tZXRob2RzW3JlcXVlc3QubWV0aG9kIGFzIGtleW9mIFJvdXRlXTtcbiAgICAgIGlmICghcm91dGUpIHRocm93IG5ldyBBcGlFcnJvcig0MDUsICdNZXRob2Qgbm90IGFsbG93ZWQnKTtcblxuICAgICAgaWYgKHJvdXRlLnJlcXVlc3Q/LmJvZHkpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gcm91dGUucmVxdWVzdC5ib2R5LnNhZmVQYXJzZShyZXF1ZXN0LmJvZHkpO1xuICAgICAgICBpZiAoIXBhcnNlZC5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEFwaUVycm9yKDQwMCwgei50cmVlaWZ5RXJyb3IocGFyc2VkLmVycm9yKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdC5ib2R5ID0gcGFyc2VkLmRhdGE7XG4gICAgICB9XG5cbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgcm91dGUuaGFuZGxlcihyZXF1ZXN0KTtcblxuICAgICAgaWYgKHJvdXRlLnJlc3BvbnNlPy5ib2R5KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHJvdXRlLnJlc3BvbnNlLmJvZHkuc2FmZVBhcnNlKHJlc3BvbnNlLmJvZHkpO1xuICAgICAgICBpZiAoIXBhcnNlZC5zdWNjZXNzKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCByZXNwb25zZSBib2R5OicsIHJlcXVlc3QubWV0aG9kLCByZXF1ZXN0LnBhdGgsIEpTT04uc3RyaW5naWZ5KHoudHJlZWlmeUVycm9yKHBhcnNlZC5lcnJvciksIG51bGwsIDIpKTtcbiAgICAgICAgICByZXNwb25zZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB0aHJvdyBuZXcgQXBpRXJyb3IoNTAwLCAnSW50ZXJuYWwgc2VydmVyIGVycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzcG9uc2UuYm9keSA9IHBhcnNlZC5kYXRhO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2F0Y2hBbGwpIHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgY2F0Y2hBbGwuaGFuZGxlcihyZXF1ZXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEFwaUVycm9yKDQwNCwgJ05vdCBmb3VuZCcpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlcnJvckhhbmRsZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3BvbnNlID0gYXdhaXQgZXJyb3JIYW5kbGVyKHJlcXVlc3QsIGUgYXMgRXJyb3IpO1xuICAgICAgfSBjYXRjaCAoZWUpIHtcbiAgICAgICAgcmVzcG9uc2UgPSBhcGlFcnJvclJlc3BvbnNlKGVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXNwb25zZSA9IHJlc3BvbnNlID8/IGFwaUVycm9yUmVzcG9uc2UoZSk7XG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbi8qKlxuICogQVBJIHJvdXRlIGhhbmRsZXJcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwaUhhbmRsZXIoXG4gIGV2ZW50OiBBUElHYXRld2F5UHJveHlFdmVudFYyLFxuICBjb250ZXh0OiBDb250ZXh0LFxuICByb3V0ZXM6IFJvdXRlcyxcbiAgZXJyb3JIYW5kbGVyPzogRXJyb3JIYW5kbGVyLFxuICBjYXRjaEFsbD86IEhhbmRsZXIsXG4pOiBQcm9taXNlPEFQSUdhdGV3YXlQcm94eVN0cnVjdHVyZWRSZXN1bHRWMj47XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBpSGFuZGxlcihcbiAgZXZlbnQ6IEFQSUdhdGV3YXlQcm94eUV2ZW50LFxuICBjb250ZXh0OiBDb250ZXh0LFxuICByb3V0ZXM6IFJvdXRlcyxcbiAgZXJyb3JIYW5kbGVyPzogRXJyb3JIYW5kbGVyLFxuICBjYXRjaEFsbD86IEhhbmRsZXIsXG4pOiBQcm9taXNlPEFQSUdhdGV3YXlQcm94eVJlc3VsdD47XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBpSGFuZGxlcihcbiAgZXZlbnQ6IEFwaUdhdGV3YXlQcm94eUV2ZW50QW55LFxuICBjb250ZXh0OiBDb250ZXh0LFxuICByb3V0ZXM6IFJvdXRlcyxcbiAgZXJyb3JIYW5kbGVyPzogRXJyb3JIYW5kbGVyLFxuICBjYXRjaEFsbD86IEhhbmRsZXIsXG4pOiBQcm9taXNlPEFQSUdhdGV3YXlQcm94eVJlc3VsdCB8IEFQSUdhdGV3YXlQcm94eVN0cnVjdHVyZWRSZXN1bHRWMj4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGhhbmRsZVJlcXVlc3QoZXZlbnQsIHJvdXRlcywgZXJyb3JIYW5kbGVyLCBjYXRjaEFsbCk7XG4gIHJldHVybiBpc0FwaUdhdGV3YXlFdmVudFYyKGV2ZW50KVxuICAgID8gdG9BcGlHYXRld2F5UmVzdWx0VjIocmVzcG9uc2UpXG4gICAgOiB0b0FwaUdhdGV3YXlSZXN1bHRWMShyZXNwb25zZSk7XG59XG4iXX0=
package/dist/helpers.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- import { APIGatewayProxyEvent } from 'aws-lambda';
1
+ import { ApiGatewayProxyEventAny } from './event';
2
2
  import { Request, Response, Route, Routes } from './types';
3
+ export { ApiGatewayProxyEventAny, ApiGatewayProxyResultFor, isApiGatewayEventV2 } from './event';
3
4
  /**
4
5
  * Ensures the path always has a leading slash and never a trailing slash
5
6
  * @param path APIGatewayProxyEvent.path
@@ -51,7 +52,10 @@ export declare function getHeader(name: string, headers: {
51
52
  export declare function setHeader(name: string, value: string, headers: {
52
53
  [key: string]: string | undefined;
53
54
  } | undefined): void;
54
- export declare function parseRequest(event: APIGatewayProxyEvent): Request;
55
+ /**
56
+ * Parses a REST API (v1) or HTTP API / Function URL (v2) proxy event into a Request.
57
+ */
58
+ export declare function parseRequest(event: ApiGatewayProxyEventAny): Request;
55
59
  export declare function matchRoute(routes: Routes, path: string): {
56
60
  methods: Route | undefined;
57
61
  params?: {
package/dist/helpers.js CHANGED
@@ -1,38 +1,6 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isApiGatewayEventV2 = void 0;
36
4
  exports.standardPath = standardPath;
37
5
  exports.standardQueryParameters = standardQueryParameters;
38
6
  exports.standardHeaders = standardHeaders;
@@ -43,7 +11,10 @@ exports.getHeader = getHeader;
43
11
  exports.setHeader = setHeader;
44
12
  exports.parseRequest = parseRequest;
45
13
  exports.matchRoute = matchRoute;
46
- const cookie = __importStar(require("cookie"));
14
+ const cookie_1 = require("cookie");
15
+ const event_1 = require("./event");
16
+ var event_2 = require("./event");
17
+ Object.defineProperty(exports, "isApiGatewayEventV2", { enumerable: true, get: function () { return event_2.isApiGatewayEventV2; } });
47
18
  /**
48
19
  * Ensures the path always has a leading slash and never a trailing slash
49
20
  * @param path APIGatewayProxyEvent.path
@@ -110,7 +81,7 @@ function parseBody(body, isBase64Encoded, contentType = 'application/json') {
110
81
  */
111
82
  function parseCookie(headers) {
112
83
  const header = getHeader('Cookie', headers);
113
- const values = header ? cookie.parse(header) : {};
84
+ const values = header ? (0, cookie_1.parseCookie)(header) : {};
114
85
  // Ensure we don't return any undefined values
115
86
  const result = {};
116
87
  for (const [name, value] of Object.entries(values)) {
@@ -131,14 +102,14 @@ function buildCookie(response, maxAge = 60 * 60 * 24 * 365, expires = undefined,
131
102
  const value = cookies[key];
132
103
  if (value === '') {
133
104
  // If explicitly unset, expire the cookie value
134
- header.push(cookie.serialize(key, '', {
135
- expires: new Date(), secure, httpOnly, sameSite,
105
+ header.push((0, cookie_1.stringifySetCookie)({
106
+ name: key, value: '', expires: new Date(), secure, httpOnly, sameSite,
136
107
  }));
137
108
  }
138
109
  else if (value) {
139
110
  // Otherwise, set it only if a value was given
140
- header.push(cookie.serialize(key, value, {
141
- maxAge, expires, secure, httpOnly, sameSite,
111
+ header.push((0, cookie_1.stringifySetCookie)({
112
+ name: key, value, maxAge, expires, secure, httpOnly, sameSite,
142
113
  }));
143
114
  }
144
115
  });
@@ -176,7 +147,32 @@ function setHeader(name, value, headers) {
176
147
  if (!set)
177
148
  headers[name] = value;
178
149
  }
179
- function parseRequest(event) {
150
+ function parseCookiesArray(cookies) {
151
+ if (!cookies)
152
+ return {};
153
+ const result = {};
154
+ cookies.forEach((entry) => {
155
+ const separator = entry.indexOf('=');
156
+ if (separator === -1)
157
+ return;
158
+ const name = entry.slice(0, separator);
159
+ const value = entry.slice(separator + 1);
160
+ if (name)
161
+ result[name] = value;
162
+ });
163
+ return result;
164
+ }
165
+ function standardPathParameters(params) {
166
+ if (!params)
167
+ return {};
168
+ const result = {};
169
+ Object.entries(params).forEach(([key, value]) => {
170
+ if (value)
171
+ result[key] = value;
172
+ });
173
+ return result;
174
+ }
175
+ function parseRequestV1(event) {
180
176
  return {
181
177
  method: event.httpMethod,
182
178
  path: standardPath(event.path),
@@ -184,9 +180,36 @@ function parseRequest(event) {
184
180
  headers: standardHeaders(event.headers),
185
181
  body: parseBody(event.body, event.isBase64Encoded, getHeader('Content-Type', event.headers)),
186
182
  cookies: parseCookie(event.headers),
187
- pathParameters: {}, // These need to be parsed as part of route matching
188
- context: { event }, // You can add any custom values you need to the request via this context
183
+ pathParameters: {},
184
+ context: { event },
185
+ };
186
+ }
187
+ function parseRequestV2(event) {
188
+ const headers = standardHeaders(event.headers);
189
+ const cookies = {
190
+ ...parseCookie(event.headers),
191
+ ...parseCookiesArray(event.cookies),
189
192
  };
193
+ const query = event.queryStringParameters
194
+ ?? (event.rawQueryString ? Object.fromEntries(new URLSearchParams(event.rawQueryString)) : null);
195
+ return {
196
+ method: event.requestContext.http.method,
197
+ path: standardPath(event.rawPath),
198
+ query: standardQueryParameters(query),
199
+ headers,
200
+ body: parseBody(event.body ?? null, event.isBase64Encoded, getHeader('content-type', headers)),
201
+ cookies,
202
+ pathParameters: standardPathParameters(event.pathParameters),
203
+ context: { event },
204
+ };
205
+ }
206
+ /**
207
+ * Parses a REST API (v1) or HTTP API / Function URL (v2) proxy event into a Request.
208
+ */
209
+ function parseRequest(event) {
210
+ if ((0, event_1.isApiGatewayEventV2)(event))
211
+ return parseRequestV2(event);
212
+ return parseRequestV1(event);
190
213
  }
191
214
  function matchRoute(routes, path) {
192
215
  // Direct match
@@ -226,4 +249,4 @@ function matchRoute(routes, path) {
226
249
  }
227
250
  return { methods: undefined };
228
251
  }
229
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUUEsb0NBS0M7QUFNRCwwREFRQztBQU1ELDBDQU1DO0FBT0QsOEJBa0JDO0FBTUQsa0NBVUM7QUFFRCxrQ0FpQ0M7QUFLRCw4QkFZQztBQUtELDhCQVVDO0FBRUQsb0NBV0M7QUFFRCxnQ0F5Q0M7QUExTUQsK0NBQWlDO0FBR2pDOzs7R0FHRztBQUNILFNBQWdCLFlBQVksQ0FBQyxJQUFZO0lBQ3ZDLDhDQUE4QztJQUM5QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUQsY0FBYztJQUNkLE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDbEMsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLHVCQUF1QixDQUFDLEtBQXFEO0lBQzNGLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDdEIsTUFBTSxNQUFNLEdBQWdDLEVBQUUsQ0FBQztJQUMvQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQixJQUFJLEtBQUs7WUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxPQUFnRDtJQUM5RSxNQUFNLE1BQU0sR0FBZ0Ms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LEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDO1lBQzdCLENBQUM7aUJBQU0sSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFLEtBQUssZ0JBQWdCLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztnQkFDeEUsTUFBTTtZQUNSLENBQUM7WUFFRCxJQUFJLENBQUMsS0FBSyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNsQyx1QkFBdUI7Z0JBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ2hELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDaEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQSUdhdGV3YXlQcm94eUV2ZW50IH0gZnJvbSAnYXdzLWxhbWJkYSc7XG5pbXBvcnQgKiBhcyBjb29raWUgZnJvbSAnY29va2llJztcbmltcG9ydCB7IFJlcXVlc3QsIFJlc3BvbnNlLCBSb3V0ZSwgUm91dGVzIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogRW5zdXJlcyB0aGUgcGF0aCBhbHdheXMgaGFzIGEgbGVhZGluZyBzbGFzaCBhbmQgbmV2ZXIgYSB0cmFpbGluZyBzbGFzaFxuICogQHBhcmFtIHBhdGggQVBJR2F0ZXdheVByb3h5RXZlbnQucGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhbmRhcmRQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIEdldCBwYXRoIHNlZ21lbnRzLCBmaWx0ZXJpbmcgb3V0IGFueSBibGFua3NcbiAgY29uc3Qgc2VnbWVudHMgPSBwYXRoLnNwbGl0KCcvJykuZmlsdGVyKChzZWdtZW50KSA9PiBzZWdtZW50KTtcbiAgLy8gUmV0dXJuIHBhdGhcbiAgcmV0dXJuIGAvJHtzZWdtZW50cy5qb2luKCcvJyl9YDtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIGEgbm9uLW51bGwgb2JqZWN0IGNvbnRhaW5pbmcgb25seSBxdWVyeS1zdHJpbmcgcGFyYW1ldGVycyB0aGF0IGhhdmUgYSB2YWx1ZS5cbiAqIEBwYXJhbSBxdWVyeSBBUElHYXRld2F5UHJveHlFdmVudC5xdWVyeVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhbmRhcmRRdWVyeVBhcmFtZXRlcnMocXVlcnk6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZDsgfSB8IG51bGwpOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmc7IH0ge1xuICBpZiAoIXF1ZXJ5KSByZXR1cm4ge307XG4gIGNvbnN0IHJlc3VsdDogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nOyB9ID0ge307XG4gIE9iamVjdC5rZXlzKHF1ZXJ5KS5mb3JFYWNoKChwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHF1ZXJ5W3BhcmFtZXRlcl07XG4gICAgaWYgKHZhbHVlKSByZXN1bHRbcGFyYW1ldGVyXSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIGFsbCBoZWFkZXJzIGhhdmUgYSB2YWx1ZS5cbiAqIEBwYXJhbSBoZWFkZXJzIEFQSUdhdGV3YXlQcm94eUV2ZW50LmhlYWRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YW5kYXJkSGVhZGVycyhoZWFkZXJzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQ7IH0pOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmc7IH0ge1xuICBjb25zdCByZXN1bHQ6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZzsgfSA9IHt9O1xuICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaGVhZGVycyB8fCB7fSkpIHtcbiAgICByZXN1bHRbbmFtZV0gPSB2YWx1ZSA/PyAnJztcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgYm9keSAoaWYgcHJlc2VudCkgZnJvbSBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgb3IgSlNPTiBzdHJpbmcuXG4gKiBJZiB0aGUgYm9keSBmYWlscyB0byBwYXJzZSBhcyBKU09uLCB0aGUgcmF3IGJvZHkgaXMgcmV0dXJuZWQuXG4gKiBAcGFyYW0gYm9keSBBUElHYXRld2F5UHJveHlFdmVudC5ib2R5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUJvZHkoYm9keTogc3RyaW5nIHwgbnVsbCwgaXNCYXNlNjRFbmNvZGVkOiBib29sZWFuLCBjb250ZW50VHlwZTogc3RyaW5nID0gJ2FwcGxpY2F0aW9uL2pzb24nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBzdHJpbmcge1xuICBpZiAoIWJvZHkpIHJldHVybiB7fTtcblxuICBjb25zdCBjb250ZW50ID0gaXNCYXNlNjRFbmNvZGVkID8gQnVmZmVyLmZyb20oYm9keSwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCd1dGY4JykgOiBib2R5O1xuXG4gIHRyeSB7XG4gICAgaWYgKChjb250ZW50VHlwZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMobmV3IFVSTFNlYXJjaFBhcmFtcyhjb250ZW50KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZmF1bHQgdG8gcGFyc2luZyBhcyBKU09OOlxuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoY29udGVudCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihgRXJyb3IgcGFyc2luZyByZXF1ZXN0IGJvZHk6ICR7ZX1gKTtcbiAgfVxuXG4gIC8vIEZhbGxiYWNrIHRvIHJldHVybmluZyB0aGUgcmF3IGJvZHlcbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbi8qKlxuICogUGFyc2VzIHRoZSBjb29raWUsIGlmIGFueSwgcmV0dXJuaW5nIGF0IG1pbmltdW0gYW4gZW1wdHkgb2JqZWN0LlxuICogQHBhcmFtIGhlYWRlcnMgQVBJR2F0ZXdheVByb3h5RXZlbnQuaGVhZGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDb29raWUoaGVhZGVyczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkOyB9KTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nOyB9IHtcbiAgY29uc3QgaGVhZGVyID0gZ2V0SGVhZGVyKCdDb29raWUnLCBoZWFkZXJzKTtcbiAgY29uc3QgdmFsdWVzID0gaGVhZGVyID8gY29va2llLnBhcnNlKGhlYWRlcikgOiB7fTtcblxuICAvLyBFbnN1cmUgd2UgZG9uJ3QgcmV0dXJuIGFueSB1bmRlZmluZWQgdmFsdWVzXG4gIGNvbnN0IHJlc3VsdDogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nOyB9ID0ge307XG4gIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZXMpKSB7XG4gICAgaWYgKHZhbHVlKSByZXN1bHRbbmFtZV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRDb29raWUoXG4gIHJlc3BvbnNlOiBSZXNwb25zZSxcbiAgbWF4QWdlOiBudW1iZXIgfCB1bmRlZmluZWQgPSA2MCAqIDYwICogMjQgKiAzNjUsXG4gIGV4cGlyZXM6IERhdGUgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gIHNlY3VyZTogYm9vbGVhbiA9IHRydWUsXG4gIGh0dHBPbmx5OiBib29sZWFuID0gdHJ1ZSxcbiAgc2FtZVNpdGU6ICdzdHJpY3QnIHwgJ2xheCcgfCAnbm9uZScgPSAnbGF4Jyxcbik6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFyZXNwb25zZS5jb29raWVzKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGNvb2tpZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nOyB9ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJlc3BvbnNlLmNvb2tpZXMpKSB7XG4gICAgY29va2llc1trZXldID0gdmFsdWU7XG4gIH1cblxuICBjb25zdCBoZWFkZXI6IHN0cmluZ1tdID0gW107XG5cbiAgT2JqZWN0LmtleXMoY29va2llcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBjb29raWVzW2tleV07XG4gICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgLy8gSWYgZXhwbGljaXRseSB1bnNldCwgZXhwaXJlIHRoZSBjb29raWUgdmFsdWVcbiAgICAgIGhlYWRlci5wdXNoKGNvb2tpZS5zZXJpYWxpemUoa2V5LCAnJywge1xuICAgICAgICBleHBpcmVzOiBuZXcgRGF0ZSgpLCBzZWN1cmUsIGh0dHBPbmx5LCBzYW1lU2l0ZSxcbiAgICAgIH0pKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICAvLyBPdGhlcndpc2UsIHNldCBpdCBvbmx5IGlmIGEgdmFsdWUgd2FzIGdpdmVuXG4gICAgICBoZWFkZXIucHVzaChjb29raWUuc2VyaWFsaXplKGtleSwgdmFsdWUsIHtcbiAgICAgICAgbWF4QWdlLCBleHBpcmVzLCBzZWN1cmUsIGh0dHBPbmx5LCBzYW1lU2l0ZSxcbiAgICAgIH0pKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBoZWFkZXI7XG59XG5cbi8qKlxuICogQ2FzZS1pbnNlbnNpdGl2ZSBoZWFkZXIgbG9va3VwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIZWFkZXIobmFtZTogc3RyaW5nLCBoZWFkZXJzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZDsgfSB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghaGVhZGVycykgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAvLyBFeGFjdCBtYXRjaFxuICBpZiAoaGVhZGVyc1tuYW1lXSkgcmV0dXJuIGhlYWRlcnNbbmFtZV07XG5cbiAgLy8gQ2FzZS1pbnNlbnNpdGl2ZSBtYXRjaFxuICBjb25zdCBsb3dlcmNhc2VkOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZDsgfSA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhoZWFkZXJzKSkge1xuICAgIGxvd2VyY2FzZWRba2V5LnRvTG93ZXJDYXNlKCldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGxvd2VyY2FzZWRbbmFtZS50b0xvd2VyQ2FzZSgpXTtcbn1cblxuLyoqXG4gKiBDYXNlLWluc2Vuc2l0aXZlIGhlYWRlciBzZXR0aW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRIZWFkZXIobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBoZWFkZXJzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZDsgfSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICBpZiAoIWhlYWRlcnMpIHJldHVybjtcbiAgbGV0IHNldCA9IGZhbHNlO1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhoZWFkZXJzKSkge1xuICAgIGlmIChuYW1lLnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBoZWFkZXJzW2tleV0gPSB2YWx1ZTtcbiAgICAgIHNldCA9IHRydWU7XG4gICAgfVxuICB9XG4gIGlmICghc2V0KSBoZWFkZXJzW25hbWVdID0gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVJlcXVlc3QoZXZlbnQ6IEFQSUdhdGV3YXlQcm94eUV2ZW50KTogUmVxdWVzdCB7XG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiBldmVudC5odHRwTWV0aG9kLFxuICAgIHBhdGg6IHN0YW5kYXJkUGF0aChldmVudC5wYXRoKSxcbiAgICBxdWVyeTogc3RhbmRhcmRRdWVyeVBhcmFtZXRlcnMoZXZlbnQucXVlcnlTdHJpbmdQYXJhbWV0ZXJzKSxcbiAgICBoZWFkZXJzOiBzdGFuZGFyZEhlYWRlcnMoZXZlbnQuaGVhZGVycyksXG4gICAgYm9keTogcGFyc2VCb2R5KGV2ZW50LmJvZHksIGV2ZW50LmlzQmFzZTY0RW5jb2RlZCwgZ2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCBldmVudC5oZWFkZXJzKSksXG4gICAgY29va2llczogcGFyc2VDb29raWUoZXZlbnQuaGVhZGVycyksXG4gICAgcGF0aFBhcmFtZXRlcnM6IHt9LCAvLyBUaGVzZSBuZWVkIHRvIGJlIHBhcnNlZCBhcyBwYXJ0IG9mIHJvdXRlIG1hdGNoaW5nXG4gICAgY29udGV4dDogeyBldmVudCB9LCAvLyBZb3UgY2FuIGFkZCBhbnkgY3VzdG9tIHZhbHVlcyB5b3UgbmVlZCB0byB0aGUgcmVxdWVzdCB2aWEgdGhpcyBjb250ZXh0XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFJvdXRlKHJvdXRlczogUm91dGVzLCBwYXRoOiBzdHJpbmcpOiB7IG1ldGhvZHM6IFJvdXRlIHwgdW5kZWZpbmVkLCBwYXJhbXM/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmc7IH07IH0ge1xuICAvLyBEaXJlY3QgbWF0Y2hcbiAgaWYgKHJvdXRlc1twYXRoXSkgcmV0dXJuIHsgbWV0aG9kczogcm91dGVzW3BhdGhdLCBwYXJhbXM6IHt9IH07XG5cbiAgLy8gTGlzdCBwYXRocyB0byBjaGVja1xuICBjb25zdCBwYXRocyA9IE9iamVjdC5rZXlzKHJvdXRlcyk7XG5cbiAgLy8gQ2FzZS1pbnNlbnNpdGl2ZSBtYXRjaFxuICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBwYXRocykge1xuICAgIGlmIChjYW5kaWRhdGUudG9Mb3dlckNhc2UoKSA9PT0gcGF0aC50b0xvd2VyQ2FzZSgpKSByZXR1cm4geyBtZXRob2RzOiByb3V0ZXNbY2FuZGlkYXRlXSwgcGFyYW1zOiB7fSB9O1xuICB9XG5cbiAgLy8gUGF0aC1wYXJhbWV0ZXIgbWF0Y2hpbmdcbiAgY29uc3QgcGF0aFNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLycpO1xuXG4gIGZvciAoY29uc3QgY2FuZGlkYXRlIG9mIHBhdGhzKSB7XG4gICAgY29uc3QgY2FuZGlkYXRlU2VnbWVudHMgPSBjYW5kaWRhdGUuc3BsaXQoJy8nKTtcblxuICAgIC8vIEZpcnN0IGNoZWNrOiBsZW5ndGggbWF0Y2hcbiAgICBpZiAocGF0aFNlZ21lbnRzLmxlbmd0aCAhPT0gY2FuZGlkYXRlU2VnbWVudHMubGVuZ3RoKSBjb250aW51ZTtcblxuICAgIGNvbnN0IHBhcmFtczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nOyB9ID0ge307XG4gICAgZm9yIChsZXQgcyA9IDA7IHMgPCBwYXRoU2VnbWVudHMubGVuZ3RoOyBzKyspIHtcbiAgICAgIGNvbnN0IHBhdGhTZWdtZW50ID0gcGF0aFNlZ21lbnRzW3NdO1xuICAgICAgY29uc3QgY2FuZGlkYXRlU2VnbWVudCA9IGNhbmRpZGF0ZVNlZ21lbnRzW3NdO1xuICAgICAgaWYgKGNhbmRpZGF0ZVNlZ21lbnQuc3RhcnRzV2l0aCgneycpICYmIGNhbmRpZGF0ZVNlZ21lbnQuZW5kc1dpdGgoJ30nKSkge1xuICAgICAgICAvLyBQYXRoIHBhcmFtZXRlclxuICAgICAgICBjb25zdCBuYW1lID0gY2FuZGlkYXRlU2VnbWVudC5zbGljZSgxLCAtMSk7XG4gICAgICAgIHBhcmFtc1tuYW1lXSA9IHBhdGhTZWdtZW50O1xuICAgICAgfSBlbHNlIGlmIChwYXRoU2VnbWVudC50b0xvd2VyQ2FzZSgpICE9PSBjYW5kaWRhdGVTZWdtZW50LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzID09PSBwYXRoU2VnbWVudHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAvLyBNYXRjaGVkIGFsbCBzZWdtZW50c1xuICAgICAgICByZXR1cm4geyBtZXRob2RzOiByb3V0ZXNbY2FuZGlkYXRlXSwgcGFyYW1zIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgbWV0aG9kczogdW5kZWZpbmVkIH07XG59XG4iXX0=
252
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVdBLG9DQUtDO0FBTUQsMERBUUM7QUFNRCwwQ0FNQztBQU9ELDhCQWtCQztBQU1ELGtDQVVDO0FBRUQsa0NBaUNDO0FBS0QsOEJBWUM7QUFLRCw4QkFVQztBQTZERCxvQ0FHQztBQUVELGdDQXlDQztBQWhRRCxtQ0FBOEU7QUFDOUUsbUNBQXVFO0FBR3ZFLGlDQUFpRztBQUFyQyw0R0FBQSxtQkFBbUIsT0FBQTtBQUUvRTs7O0dBR0c7QUFDSCxTQUFnQixZQUFZLENBQUMsSUFBWTtJQUN2Qyw4Q0FBOEM7SUFDOUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlELGNBQWM7SUFDZCxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ2xDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQix1QkFBdUIsQ0FBQyxLQUFxRDtJQUMzRixJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3RCLE1BQU0sTUFBTSxHQUFnQyxFQUFFLENBQUM7SUFDL0MsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtRQUN2QyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0IsSUFBSSxLQUFLO1lBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixlQUFlLENBQUMsT0FBZ0Q7SUFD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QzdCLENBQUM7aUJBQU0sSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFLEtBQUssZ0JBQWdCLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztnQkFDeEUsTUFBTTtZQUNSLENBQUM7WUFFRCxJQUFJLENBQUMsS0FBSyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNsQyx1QkFBdUI7Z0JBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ2hELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDaEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQSUdhdGV3YXlQcm94eUV2ZW50LCBBUElHYXRld2F5UHJveHlFdmVudFYyIH0gZnJvbSAnYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBwYXJzZUNvb2tpZSBhcyBwYXJzZUNvb2tpZUhlYWRlciwgc3RyaW5naWZ5U2V0Q29va2llIH0gZnJvbSAnY29va2llJztcbmltcG9ydCB7IEFwaUdhdGV3YXlQcm94eUV2ZW50QW55LCBpc0FwaUdhdGV3YXlFdmVudFYyIH0gZnJvbSAnLi9ldmVudCc7XG5pbXBvcnQgeyBSZXF1ZXN0LCBSZXNwb25zZSwgUm91dGUsIFJvdXRlcyB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgeyBBcGlHYXRld2F5UHJveHlFdmVudEFueSwgQXBpR2F0ZXdheVByb3h5UmVzdWx0Rm9yLCBpc0FwaUdhdGV3YXlFdmVudFYyIH0gZnJvbSAnLi9ldmVudCc7XG5cbi8qKlxuICogRW5zdXJlcyB0aGUgcGF0aCBhbHdheXMgaGFzIGEgbGVhZGluZyBzbGFzaCBhbmQgbmV2ZXIgYSB0cmFpbGluZyBzbGFzaFxuICogQHBhcmFtIHBhdGggQVBJR2F0ZXdheVByb3h5RXZlbnQucGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhbmRhcmRQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIEdldCBwYXRoIHNlZ21lbnRzLCBmaWx0ZXJpbmcgb3V0IGFueSBibGFua3NcbiAgY29uc3Qgc2VnbWVudHMgPSBwYXRoLnNwbGl0KCcvJykuZmlsdGVyKChzZWdtZW50KSA9PiBzZWdtZW50KTtcbiAgLy8gUmV0dXJuIHBhdGhcbiAgcmV0dXJuIGAvJHtzZWdtZW50cy5qb2luKCcvJyl9YDtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIGEgbm9uLW51bGwgb2JqZWN0IGNvbnRhaW5pbmcgb25seSBxdWVyeS1zdHJpbmcgcGFyYW1ldGVycyB0aGF0IGhhdmUgYSB2YWx1ZS5cbiAqIEBwYXJhbSBxdWVyeSBBUElHYXRld2F5UHJveHlFdmVudC5xdWVyeVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhbmRhcmRRdWVyeVBhcmFtZXRlcnMocXVlcnk6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZDsgfSB8IG51bGwpOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmc7IH0ge1xuICBpZiAoIXF1ZXJ5KSByZXR1cm4ge307XG4gIGNvbnN0IHJlc3VsdDogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nOyB9ID0ge307XG4gIE9iamVjdC5rZXlzKHF1ZXJ5KS5mb3JFYWNoKChwYXJhbWV0ZXIpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHF1ZXJ5W3BhcmFtZXRlcl07XG4gICAgaWYgKHZhbHVlKSByZXN1bHRbcGFyYW1ldGVyXSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIGFsbCBoZWFkZXJzIGhhdmUgYSB2YWx1ZS5cbiAqIEBwYXJhbSBoZWFkZXJzIEFQSUdhdGV3YXlQcm94eUV2ZW50LmhlYWRlcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YW5kYXJkSGVhZGVycyhoZWFkZXJzOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQ7IH0pOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmc7IH0ge1xuICBjb25zdCByZXN1bHQ6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZzsgfSA9IHt9O1xuICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaGVhZGVycyB8fCB7fSkpIHtcbiAgICByZXN1bHRbbmFtZV0gPSB2YWx1ZSA/PyAnJztcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgYm9keSAoaWYgcHJlc2VudCkgZnJvbSBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgb3IgSlNPTiBzdHJpbmcuXG4gKiBJZiB0aGUgYm9keSBmYWlscyB0byBwYXJzZSBhcyBKU09uLCB0aGUgcmF3IGJvZHkgaXMgcmV0dXJuZWQuXG4gKiBAcGFyYW0gYm9keSBBUElHYXRld2F5UHJveHlFdmVudC5ib2R5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUJvZHkoYm9keTogc3RyaW5nIHwgbnVsbCwgaXNCYXNlNjRFbmNvZGVkOiBib29sZWFuLCBjb250ZW50VHlwZTogc3RyaW5nID0gJ2FwcGxpY2F0aW9uL2pzb24nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBzdHJpbmcge1xuICBpZiAoIWJvZHkpIHJldHVybiB7fTtcblxuICBjb25zdCBjb250ZW50ID0gaXNCYXNlNjRFbmNvZGVkID8gQnVmZmVyLmZyb20oYm9keSwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCd1dGY4JykgOiBib2R5O1xuXG4gIHRyeSB7XG4gICAgaWYgKChjb250ZW50VHlwZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMobmV3IFVSTFNlYXJjaFBhcmFtcyhjb250ZW50KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZmF1bHQgdG8gcGFyc2luZyBhcyBKU09OOlxuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoY29udGVudCk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihgRXJyb3IgcGFyc2luZyByZXF1ZXN0IGJvZHk6ICR7ZX1gKTtcbiAgfVxuXG4gIC8vIEZhbGxiYWNrIHRvIHJldHVybmluZyB0aGUgcmF3IGJvZHlcbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbi8qKlxuICogUGFyc2VzIHRoZSBjb29raWUsIGlmIGFueSwgcmV0dXJuaW5nIGF0IG1pbmltdW0gYW4gZW1wdHkgb2JqZWN0LlxuICogQHBhcmFtIGhlYWRlcnMgQVBJR2F0ZXdheVByb3h5RXZlbnQuaGVhZGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDb29raWUoaGVhZGVyczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkOyB9KTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nOyB9IHtcbiAgY29uc3QgaGVhZGVyID0gZ2V0SGVhZGVyKCdDb29raWUnLCBoZWFkZXJzKTtcbiAgY29uc3QgdmFsdWVzID0gaGVhZGVyID8gcGFyc2VDb29raWVIZWFkZXIoaGVhZGVyKSA6IHt9O1xuXG4gIC8vIEVuc3VyZSB3ZSBkb24ndCByZXR1cm4gYW55IHVuZGVmaW5lZCB2YWx1ZXNcbiAgY29uc3QgcmVzdWx0OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmc7IH0gPSB7fTtcbiAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlcykpIHtcbiAgICBpZiAodmFsdWUpIHJlc3VsdFtuYW1lXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZENvb2tpZShcbiAgcmVzcG9uc2U6IFJlc3BvbnNlLFxuICBtYXhBZ2U6IG51bWJlciB8IHVuZGVmaW5lZCA9IDYwICogNjAgKiAyNCAqIDM2NSxcbiAgZXhwaXJlczogRGF0ZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbiAgc2VjdXJlOiBib29sZWFuID0gdHJ1ZSxcbiAgaHR0cE9ubHk6IGJvb2xlYW4gPSB0cnVlLFxuICBzYW1lU2l0ZTogJ3N0cmljdCcgfCAnbGF4JyB8ICdub25lJyA9ICdsYXgnLFxuKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICBpZiAoIXJlc3BvbnNlLmNvb2tpZXMpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgY29va2llczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmc7IH0gPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocmVzcG9uc2UuY29va2llcykpIHtcbiAgICBjb29raWVzW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIGNvbnN0IGhlYWRlcjogc3RyaW5nW10gPSBbXTtcblxuICBPYmplY3Qua2V5cyhjb29raWVzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvb2tpZXNba2V5XTtcbiAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAvLyBJZiBleHBsaWNpdGx5IHVuc2V0LCBleHBpcmUgdGhlIGNvb2tpZSB2YWx1ZVxuICAgICAgaGVhZGVyLnB1c2goc3RyaW5naWZ5U2V0Q29va2llKHtcbiAgICAgICAgbmFtZToga2V5LCB2YWx1ZTogJycsIGV4cGlyZXM6IG5ldyBEYXRlKCksIHNlY3VyZSwgaHR0cE9ubHksIHNhbWVTaXRlLFxuICAgICAgfSkpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgIC8vIE90aGVyd2lzZSwgc2V0IGl0IG9ubHkgaWYgYSB2YWx1ZSB3YXMgZ2l2ZW5cbiAgICAgIGhlYWRlci5wdXNoKHN0cmluZ2lmeVNldENvb2tpZSh7XG4gICAgICAgIG5hbWU6IGtleSwgdmFsdWUsIG1heEFnZSwgZXhwaXJlcywgc2VjdXJlLCBodHRwT25seSwgc2FtZVNpdGUsXG4gICAgICB9KSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gaGVhZGVyO1xufVxuXG4vKipcbiAqIENhc2UtaW5zZW5zaXRpdmUgaGVhZGVyIGxvb2t1cFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVhZGVyKG5hbWU6IHN0cmluZywgaGVhZGVyczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQ7IH0gfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIWhlYWRlcnMpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgLy8gRXhhY3QgbWF0Y2hcbiAgaWYgKGhlYWRlcnNbbmFtZV0pIHJldHVybiBoZWFkZXJzW25hbWVdO1xuXG4gIC8vIENhc2UtaW5zZW5zaXRpdmUgbWF0Y2hcbiAgY29uc3QgbG93ZXJjYXNlZDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQ7IH0gPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaGVhZGVycykpIHtcbiAgICBsb3dlcmNhc2VkW2tleS50b0xvd2VyQ2FzZSgpXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBsb3dlcmNhc2VkW25hbWUudG9Mb3dlckNhc2UoKV07XG59XG5cbi8qKlxuICogQ2FzZS1pbnNlbnNpdGl2ZSBoZWFkZXIgc2V0dGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0SGVhZGVyKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZywgaGVhZGVyczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQ7IH0gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgaWYgKCFoZWFkZXJzKSByZXR1cm47XG4gIGxldCBzZXQgPSBmYWxzZTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoaGVhZGVycykpIHtcbiAgICBpZiAobmFtZS50b0xvd2VyQ2FzZSgpID09PSBrZXkudG9Mb3dlckNhc2UoKSkge1xuICAgICAgaGVhZGVyc1trZXldID0gdmFsdWU7XG4gICAgICBzZXQgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBpZiAoIXNldCkgaGVhZGVyc1tuYW1lXSA9IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNvb2tpZXNBcnJheShjb29raWVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBpZiAoIWNvb2tpZXMpIHJldHVybiB7fTtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGNvb2tpZXMuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICBjb25zdCBzZXBhcmF0b3IgPSBlbnRyeS5pbmRleE9mKCc9Jyk7XG4gICAgaWYgKHNlcGFyYXRvciA9PT0gLTEpIHJldHVybjtcbiAgICBjb25zdCBuYW1lID0gZW50cnkuc2xpY2UoMCwgc2VwYXJhdG9yKTtcbiAgICBjb25zdCB2YWx1ZSA9IGVudHJ5LnNsaWNlKHNlcGFyYXRvciArIDEpO1xuICAgIGlmIChuYW1lKSByZXN1bHRbbmFtZV0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHN0YW5kYXJkUGF0aFBhcmFtZXRlcnMocGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGlmICghcGFyYW1zKSByZXR1cm4ge307XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBPYmplY3QuZW50cmllcyhwYXJhbXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIGlmICh2YWx1ZSkgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUmVxdWVzdFYxKGV2ZW50OiBBUElHYXRld2F5UHJveHlFdmVudCk6IFJlcXVlc3Qge1xuICByZXR1cm4ge1xuICAgIG1ldGhvZDogZXZlbnQuaHR0cE1ldGhvZCxcbiAgICBwYXRoOiBzdGFuZGFyZFBhdGgoZXZlbnQucGF0aCksXG4gICAgcXVlcnk6IHN0YW5kYXJkUXVlcnlQYXJhbWV0ZXJzKGV2ZW50LnF1ZXJ5U3RyaW5nUGFyYW1ldGVycyksXG4gICAgaGVhZGVyczogc3RhbmRhcmRIZWFkZXJzKGV2ZW50LmhlYWRlcnMpLFxuICAgIGJvZHk6IHBhcnNlQm9keShldmVudC5ib2R5LCBldmVudC5pc0Jhc2U2NEVuY29kZWQsIGdldEhlYWRlcignQ29udGVudC1UeXBlJywgZXZlbnQuaGVhZGVycykpLFxuICAgIGNvb2tpZXM6IHBhcnNlQ29va2llKGV2ZW50LmhlYWRlcnMpLFxuICAgIHBhdGhQYXJhbWV0ZXJzOiB7fSxcbiAgICBjb250ZXh0OiB7IGV2ZW50IH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlUmVxdWVzdFYyKGV2ZW50OiBBUElHYXRld2F5UHJveHlFdmVudFYyKTogUmVxdWVzdCB7XG4gIGNvbnN0IGhlYWRlcnMgPSBzdGFuZGFyZEhlYWRlcnMoZXZlbnQuaGVhZGVycyk7XG4gIGNvbnN0IGNvb2tpZXMgPSB7XG4gICAgLi4ucGFyc2VDb29raWUoZXZlbnQuaGVhZGVycyksXG4gICAgLi4ucGFyc2VDb29raWVzQXJyYXkoZXZlbnQuY29va2llcyksXG4gIH07XG4gIGNvbnN0IHF1ZXJ5ID0gZXZlbnQucXVlcnlTdHJpbmdQYXJhbWV0ZXJzXG4gICAgPz8gKGV2ZW50LnJhd1F1ZXJ5U3RyaW5nID8gT2JqZWN0LmZyb21FbnRyaWVzKG5ldyBVUkxTZWFyY2hQYXJhbXMoZXZlbnQucmF3UXVlcnlTdHJpbmcpKSA6IG51bGwpO1xuXG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiBldmVudC5yZXF1ZXN0Q29udGV4dC5odHRwLm1ldGhvZCxcbiAgICBwYXRoOiBzdGFuZGFyZFBhdGgoZXZlbnQucmF3UGF0aCksXG4gICAgcXVlcnk6IHN0YW5kYXJkUXVlcnlQYXJhbWV0ZXJzKHF1ZXJ5KSxcbiAgICBoZWFkZXJzLFxuICAgIGJvZHk6IHBhcnNlQm9keShldmVudC5ib2R5ID8/IG51bGwsIGV2ZW50LmlzQmFzZTY0RW5jb2RlZCwgZ2V0SGVhZGVyKCdjb250ZW50LXR5cGUnLCBoZWFkZXJzKSksXG4gICAgY29va2llcyxcbiAgICBwYXRoUGFyYW1ldGVyczogc3RhbmRhcmRQYXRoUGFyYW1ldGVycyhldmVudC5wYXRoUGFyYW1ldGVycyksXG4gICAgY29udGV4dDogeyBldmVudCB9LFxuICB9O1xufVxuXG4vKipcbiAqIFBhcnNlcyBhIFJFU1QgQVBJICh2MSkgb3IgSFRUUCBBUEkgLyBGdW5jdGlvbiBVUkwgKHYyKSBwcm94eSBldmVudCBpbnRvIGEgUmVxdWVzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmVxdWVzdChldmVudDogQXBpR2F0ZXdheVByb3h5RXZlbnRBbnkpOiBSZXF1ZXN0IHtcbiAgaWYgKGlzQXBpR2F0ZXdheUV2ZW50VjIoZXZlbnQpKSByZXR1cm4gcGFyc2VSZXF1ZXN0VjIoZXZlbnQpO1xuICByZXR1cm4gcGFyc2VSZXF1ZXN0VjEoZXZlbnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hSb3V0ZShyb3V0ZXM6IFJvdXRlcywgcGF0aDogc3RyaW5nKTogeyBtZXRob2RzOiBSb3V0ZSB8IHVuZGVmaW5lZCwgcGFyYW1zPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nOyB9OyB9IHtcbiAgLy8gRGlyZWN0IG1hdGNoXG4gIGlmIChyb3V0ZXNbcGF0aF0pIHJldHVybiB7IG1ldGhvZHM6IHJvdXRlc1twYXRoXSwgcGFyYW1zOiB7fSB9O1xuXG4gIC8vIExpc3QgcGF0aHMgdG8gY2hlY2tcbiAgY29uc3QgcGF0aHMgPSBPYmplY3Qua2V5cyhyb3V0ZXMpO1xuXG4gIC8vIENhc2UtaW5zZW5zaXRpdmUgbWF0Y2hcbiAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2YgcGF0aHMpIHtcbiAgICBpZiAoY2FuZGlkYXRlLnRvTG93ZXJDYXNlKCkgPT09IHBhdGgudG9Mb3dlckNhc2UoKSkgcmV0dXJuIHsgbWV0aG9kczogcm91dGVzW2NhbmRpZGF0ZV0sIHBhcmFtczoge30gfTtcbiAgfVxuXG4gIC8vIFBhdGgtcGFyYW1ldGVyIG1hdGNoaW5nXG4gIGNvbnN0IHBhdGhTZWdtZW50cyA9IHBhdGguc3BsaXQoJy8nKTtcblxuICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBwYXRocykge1xuICAgIGNvbnN0IGNhbmRpZGF0ZVNlZ21lbnRzID0gY2FuZGlkYXRlLnNwbGl0KCcvJyk7XG5cbiAgICAvLyBGaXJzdCBjaGVjazogbGVuZ3RoIG1hdGNoXG4gICAgaWYgKHBhdGhTZWdtZW50cy5sZW5ndGggIT09IGNhbmRpZGF0ZVNlZ21lbnRzLmxlbmd0aCkgY29udGludWU7XG5cbiAgICBjb25zdCBwYXJhbXM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZzsgfSA9IHt9O1xuICAgIGZvciAobGV0IHMgPSAwOyBzIDwgcGF0aFNlZ21lbnRzLmxlbmd0aDsgcysrKSB7XG4gICAgICBjb25zdCBwYXRoU2VnbWVudCA9IHBhdGhTZWdtZW50c1tzXTtcbiAgICAgIGNvbnN0IGNhbmRpZGF0ZVNlZ21lbnQgPSBjYW5kaWRhdGVTZWdtZW50c1tzXTtcbiAgICAgIGlmIChjYW5kaWRhdGVTZWdtZW50LnN0YXJ0c1dpdGgoJ3snKSAmJiBjYW5kaWRhdGVTZWdtZW50LmVuZHNXaXRoKCd9JykpIHtcbiAgICAgICAgLy8gUGF0aCBwYXJhbWV0ZXJcbiAgICAgICAgY29uc3QgbmFtZSA9IGNhbmRpZGF0ZVNlZ21lbnQuc2xpY2UoMSwgLTEpO1xuICAgICAgICBwYXJhbXNbbmFtZV0gPSBwYXRoU2VnbWVudDtcbiAgICAgIH0gZWxzZSBpZiAocGF0aFNlZ21lbnQudG9Mb3dlckNhc2UoKSAhPT0gY2FuZGlkYXRlU2VnbWVudC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAocyA9PT0gcGF0aFNlZ21lbnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgLy8gTWF0Y2hlZCBhbGwgc2VnbWVudHNcbiAgICAgICAgcmV0dXJuIHsgbWV0aG9kczogcm91dGVzW2NhbmRpZGF0ZV0sIHBhcmFtcyB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IG1ldGhvZHM6IHVuZGVmaW5lZCB9O1xufVxuIl19
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from './handler';
2
+ export { ApiGatewayProxyEventAny, ApiGatewayProxyResultFor, isApiGatewayEventV2 } from './event';
2
3
  export * as helpers from './helpers';
3
4
  export * as types from './types';
package/dist/index.js CHANGED
@@ -36,8 +36,10 @@ var __importStar = (this && this.__importStar) || (function () {
36
36
  };
37
37
  })();
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.types = exports.helpers = void 0;
39
+ exports.types = exports.helpers = exports.isApiGatewayEventV2 = void 0;
40
40
  __exportStar(require("./handler"), exports);
41
+ var event_1 = require("./event");
42
+ Object.defineProperty(exports, "isApiGatewayEventV2", { enumerable: true, get: function () { return event_1.isApiGatewayEventV2; } });
41
43
  exports.helpers = __importStar(require("./helpers"));
42
44
  exports.types = __importStar(require("./types"));
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNENBQTBCO0FBQzFCLHFEQUFxQztBQUNyQyxpREFBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2hhbmRsZXInO1xuZXhwb3J0ICogYXMgaGVscGVycyBmcm9tICcuL2hlbHBlcnMnO1xuZXhwb3J0ICogYXMgdHlwZXMgZnJvbSAnLi90eXBlcyc7XG4iXX0=
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNENBQTBCO0FBQzFCLGlDQUFpRztBQUFyQyw0R0FBQSxtQkFBbUIsT0FBQTtBQUMvRSxxREFBcUM7QUFDckMsaURBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9oYW5kbGVyJztcbmV4cG9ydCB7IEFwaUdhdGV3YXlQcm94eUV2ZW50QW55LCBBcGlHYXRld2F5UHJveHlSZXN1bHRGb3IsIGlzQXBpR2F0ZXdheUV2ZW50VjIgfSBmcm9tICcuL2V2ZW50JztcbmV4cG9ydCAqIGFzIGhlbHBlcnMgZnJvbSAnLi9oZWxwZXJzJztcbmV4cG9ydCAqIGFzIHR5cGVzIGZyb20gJy4vdHlwZXMnO1xuIl19
@@ -0,0 +1,4 @@
1
+ import { APIGatewayProxyResult, APIGatewayProxyStructuredResultV2 } from 'aws-lambda';
2
+ import { Response } from './types';
3
+ export declare function toApiGatewayResultV1(response: Response): APIGatewayProxyResult;
4
+ export declare function toApiGatewayResultV2(response: Response): APIGatewayProxyStructuredResultV2;
package/dist/result.js ADDED
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toApiGatewayResultV1 = toApiGatewayResultV1;
4
+ exports.toApiGatewayResultV2 = toApiGatewayResultV2;
5
+ const helpers_1 = require("./helpers");
6
+ function prepareResponseBody(response) {
7
+ const headers = { ...(response.headers || {}) };
8
+ let body = '';
9
+ if (typeof response.body === 'string') {
10
+ if (!(0, helpers_1.getHeader)('Content-Type', headers))
11
+ (0, helpers_1.setHeader)('Content-Type', 'text/plain', headers);
12
+ body = response.body;
13
+ }
14
+ else if (response.body) {
15
+ body = JSON.stringify(response.body);
16
+ }
17
+ return { headers, body };
18
+ }
19
+ function toApiGatewayResultV1(response) {
20
+ const { headers, body } = prepareResponseBody(response);
21
+ const result = {
22
+ statusCode: response.statusCode ?? 200,
23
+ headers,
24
+ body,
25
+ };
26
+ const cookieHeaders = (0, helpers_1.buildCookie)(response);
27
+ if (cookieHeaders) {
28
+ result.multiValueHeaders = { 'Set-Cookie': cookieHeaders };
29
+ }
30
+ return result;
31
+ }
32
+ function toApiGatewayResultV2(response) {
33
+ const { headers, body } = prepareResponseBody(response);
34
+ const result = {
35
+ statusCode: response.statusCode ?? 200,
36
+ headers,
37
+ body,
38
+ };
39
+ const cookieHeaders = (0, helpers_1.buildCookie)(response);
40
+ if (cookieHeaders) {
41
+ result.cookies = cookieHeaders;
42
+ }
43
+ return result;
44
+ }
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdWx0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Jlc3VsdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXFCQSxvREFlQztBQUVELG9EQWVDO0FBakRELHVDQUE4RDtBQUc5RCxTQUFTLG1CQUFtQixDQUFDLFFBQWtCO0lBQzdDLE1BQU0sT0FBTyxHQUFHLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNoRCxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7SUFFZCxJQUFJLE9BQU8sUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBQSxtQkFBUyxFQUFDLGNBQWMsRUFBRSxPQUFPLENBQUM7WUFBRSxJQUFBLG1CQUFTLEVBQUMsY0FBYyxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMxRixJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztJQUN2QixDQUFDO1NBQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzNCLENBQUM7QUFFRCxTQUFnQixvQkFBb0IsQ0FBQyxRQUFrQjtJQUNyRCxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXhELE1BQU0sTUFBTSxHQUEwQjtRQUNwQyxVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVUsSUFBSSxHQUFHO1FBQ3RDLE9BQU87UUFDUCxJQUFJO0tBQ0wsQ0FBQztJQUVGLE1BQU0sYUFBYSxHQUFHLElBQUEscUJBQVcsRUFBQyxRQUFRLENBQUMsQ0FBQztJQUM1QyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsQ0FBQztJQUM3RCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQWdCLG9CQUFvQixDQUFDLFFBQWtCO0lBQ3JELE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFeEQsTUFBTSxNQUFNLEdBQXNDO1FBQ2hELFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVSxJQUFJLEdBQUc7UUFDdEMsT0FBTztRQUNQLElBQUk7S0FDTCxDQUFDO0lBRUYsTUFBTSxhQUFhLEdBQUcsSUFBQSxxQkFBVyxFQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUM7SUFDakMsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBUElHYXRld2F5UHJveHlSZXN1bHQsXG4gIEFQSUdhdGV3YXlQcm94eVN0cnVjdHVyZWRSZXN1bHRWMixcbn0gZnJvbSAnYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBidWlsZENvb2tpZSwgZ2V0SGVhZGVyLCBzZXRIZWFkZXIgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgUmVzcG9uc2UgfSBmcm9tICcuL3R5cGVzJztcblxuZnVuY3Rpb24gcHJlcGFyZVJlc3BvbnNlQm9keShyZXNwb25zZTogUmVzcG9uc2UpOiB7IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47IGJvZHk6IHN0cmluZzsgfSB7XG4gIGNvbnN0IGhlYWRlcnMgPSB7IC4uLihyZXNwb25zZS5oZWFkZXJzIHx8IHt9KSB9O1xuICBsZXQgYm9keSA9ICcnO1xuXG4gIGlmICh0eXBlb2YgcmVzcG9uc2UuYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoIWdldEhlYWRlcignQ29udGVudC1UeXBlJywgaGVhZGVycykpIHNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nLCBoZWFkZXJzKTtcbiAgICBib2R5ID0gcmVzcG9uc2UuYm9keTtcbiAgfSBlbHNlIGlmIChyZXNwb25zZS5ib2R5KSB7XG4gICAgYm9keSA9IEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmJvZHkpO1xuICB9XG5cbiAgcmV0dXJuIHsgaGVhZGVycywgYm9keSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9BcGlHYXRld2F5UmVzdWx0VjEocmVzcG9uc2U6IFJlc3BvbnNlKTogQVBJR2F0ZXdheVByb3h5UmVzdWx0IHtcbiAgY29uc3QgeyBoZWFkZXJzLCBib2R5IH0gPSBwcmVwYXJlUmVzcG9uc2VCb2R5KHJlc3BvbnNlKTtcblxuICBjb25zdCByZXN1bHQ6IEFQSUdhdGV3YXlQcm94eVJlc3VsdCA9IHtcbiAgICBzdGF0dXNDb2RlOiByZXNwb25zZS5zdGF0dXNDb2RlID8/IDIwMCxcbiAgICBoZWFkZXJzLFxuICAgIGJvZHksXG4gIH07XG5cbiAgY29uc3QgY29va2llSGVhZGVycyA9IGJ1aWxkQ29va2llKHJlc3BvbnNlKTtcbiAgaWYgKGNvb2tpZUhlYWRlcnMpIHtcbiAgICByZXN1bHQubXVsdGlWYWx1ZUhlYWRlcnMgPSB7ICdTZXQtQ29va2llJzogY29va2llSGVhZGVycyB9O1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQXBpR2F0ZXdheVJlc3VsdFYyKHJlc3BvbnNlOiBSZXNwb25zZSk6IEFQSUdhdGV3YXlQcm94eVN0cnVjdHVyZWRSZXN1bHRWMiB7XG4gIGNvbnN0IHsgaGVhZGVycywgYm9keSB9ID0gcHJlcGFyZVJlc3BvbnNlQm9keShyZXNwb25zZSk7XG5cbiAgY29uc3QgcmVzdWx0OiBBUElHYXRld2F5UHJveHlTdHJ1Y3R1cmVkUmVzdWx0VjIgPSB7XG4gICAgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzQ29kZSA/PyAyMDAsXG4gICAgaGVhZGVycyxcbiAgICBib2R5LFxuICB9O1xuXG4gIGNvbnN0IGNvb2tpZUhlYWRlcnMgPSBidWlsZENvb2tpZShyZXNwb25zZSk7XG4gIGlmIChjb29raWVIZWFkZXJzKSB7XG4gICAgcmVzdWx0LmNvb2tpZXMgPSBjb29raWVIZWFkZXJzO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdfQ==
package/dist/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { APIGatewayProxyEvent } from "aws-lambda";
2
1
  import z from "zod/v4";
2
+ import { ApiGatewayProxyEventAny } from './event';
3
3
  export interface Request<B = any> {
4
4
  method: string;
5
5
  path: string;
@@ -9,7 +9,7 @@ export interface Request<B = any> {
9
9
  pathParameters: Record<string, string>;
10
10
  body: B;
11
11
  context: {
12
- event: APIGatewayProxyEvent;
12
+ event: ApiGatewayProxyEventAny;
13
13
  [key: string]: any;
14
14
  };
15
15
  }
package/dist/types.js CHANGED
@@ -15,4 +15,4 @@ class ApiError extends Error {
15
15
  }
16
16
  }
17
17
  exports.ApiError = ApiError;
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBd0RBLE1BQWEsUUFBUyxTQUFRLEtBQUs7SUFDakMsVUFBVSxDQUFTO0lBQ25CLElBQUksQ0FBVTtJQUNkLE9BQU8sQ0FBMEI7SUFFakMsWUFBWSxVQUFrQixFQUFFLElBQWEsRUFBRSxPQUFnQztRQUM3RSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBRXZCLDJDQUEyQztRQUMzQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNGO0FBZEQsNEJBY0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBBUElHYXRld2F5UHJveHlFdmVudCB9IGZyb20gXCJhd3MtbGFtYmRhXCI7XG5pbXBvcnQgeiBmcm9tIFwiem9kL3Y0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdDxCID0gYW55PiB7XG4gIG1ldGhvZDogc3RyaW5nLFxuICBwYXRoOiBzdHJpbmcsXG4gIHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBjb29raWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBwYXRoUGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgYm9keTogQjtcbiAgY29udGV4dDoge1xuICAgIGV2ZW50OiBBUElHYXRld2F5UHJveHlFdmVudDtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH0sXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2U8QiA9IGFueT4ge1xuICBzdGF0dXNDb2RlPzogbnVtYmVyO1xuICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgY29va2llcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGJvZHk/OiBCO1xufVxuXG50eXBlIEFueVNjaGVtYSA9IHouWm9kVHlwZTxhbnksIGFueSwgYW55PjtcbmV4cG9ydCBpbnRlcmZhY2UgSGFuZGxlcjxTUmVxIGV4dGVuZHMgQW55U2NoZW1hIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLCBTUmVzIGV4dGVuZHMgQW55U2NoZW1hIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPiB7XG4gIHJlcXVlc3Q/OiB7XG4gICAgYm9keT86IFNSZXE7XG4gICAgaGVhZGVycz86IHouWm9kT2JqZWN0PGFueT47XG4gICAgY29va2llcz86IHouWm9kT2JqZWN0PGFueT47XG4gICAgcGF0aFBhcmFtZXRlcnM/OiB6LlpvZE9iamVjdDxhbnk+O1xuICAgIHF1ZXJ5Pzogei5ab2RPYmplY3Q8YW55PjtcbiAgfTtcbiAgcmVzcG9uc2U/OiB7XG4gICAgYm9keT86IFNSZXM7XG4gICAgaGVhZGVycz86IHouWm9kT2JqZWN0PGFueT47XG4gICAgY29va2llcz86IHouWm9kT2JqZWN0PGFueT47XG4gIH07XG4gIGhhbmRsZXI6IChyZXF1ZXN0OiBSZXF1ZXN0PHouaW5mZXI8U1JlcT4+KSA9PiBQcm9taXNlPFJlc3BvbnNlPHouaW5mZXI8U1Jlcz4+Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZSB7XG4gIEdFVD86IEhhbmRsZXI8dW5kZWZpbmVkLCBBbnlTY2hlbWE+O1xuICBQT1NUPzogSGFuZGxlcjxBbnlTY2hlbWEsIEFueVNjaGVtYT47XG4gIFBVVD86IEhhbmRsZXI8QW55U2NoZW1hLCBBbnlTY2hlbWE+O1xuICBERUxFVEU/OiBIYW5kbGVyPHVuZGVmaW5lZCwgQW55U2NoZW1hPjtcbiAgUEFUQ0g/OiBIYW5kbGVyPHVuZGVmaW5lZCwgQW55U2NoZW1hPjtcbiAgT1BUSU9OUz86IEhhbmRsZXI8dW5kZWZpbmVkLCBBbnlTY2hlbWE+O1xuICBIRUFEPzogSGFuZGxlcjx1bmRlZmluZWQsIEFueVNjaGVtYT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVzIHtcbiAgW3BhdGg6IHN0cmluZ106IFJvdXRlO1xufVxuXG5leHBvcnQgY2xhc3MgQXBpRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgYm9keTogdW5rbm93bjtcbiAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgY29uc3RydWN0b3Ioc3RhdHVzQ29kZTogbnVtYmVyLCBib2R5OiB1bmtub3duLCBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xuICAgIHN1cGVyKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyA/IGJvZHkgOiBKU09OLnN0cmluZ2lmeShib2R5LCBudWxsLCAyKSk7XG4gICAgdGhpcy5zdGF0dXNDb2RlID0gc3RhdHVzQ29kZTtcbiAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XG5cbiAgICAvLyBSZXF1aXJlZCBmb3IgaW5zdGFuY2VvZiB0byB3b3JrIHByb3Blcmx5XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIEFwaUVycm9yLnByb3RvdHlwZSk7XG4gIH1cbn1cbiJdfQ==
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBd0RBLE1BQWEsUUFBUyxTQUFRLEtBQUs7SUFDakMsVUFBVSxDQUFTO0lBQ25CLElBQUksQ0FBVTtJQUNkLE9BQU8sQ0FBMEI7SUFFakMsWUFBWSxVQUFrQixFQUFFLElBQWEsRUFBRSxPQUFnQztRQUM3RSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBRXZCLDJDQUEyQztRQUMzQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNGO0FBZEQsNEJBY0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeiBmcm9tIFwiem9kL3Y0XCI7XG5pbXBvcnQgeyBBcGlHYXRld2F5UHJveHlFdmVudEFueSB9IGZyb20gJy4vZXZlbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3Q8QiA9IGFueT4ge1xuICBtZXRob2Q6IHN0cmluZyxcbiAgcGF0aDogc3RyaW5nLFxuICBxdWVyeTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgY29va2llczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcGF0aFBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGJvZHk6IEI7XG4gIGNvbnRleHQ6IHtcbiAgICBldmVudDogQXBpR2F0ZXdheVByb3h5RXZlbnRBbnk7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9LFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlPEIgPSBhbnk+IHtcbiAgc3RhdHVzQ29kZT86IG51bWJlcjtcbiAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGNvb2tpZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBib2R5PzogQjtcbn1cblxudHlwZSBBbnlTY2hlbWEgPSB6LlpvZFR5cGU8YW55LCBhbnksIGFueT47XG5leHBvcnQgaW50ZXJmYWNlIEhhbmRsZXI8U1JlcSBleHRlbmRzIEFueVNjaGVtYSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCwgU1JlcyBleHRlbmRzIEFueVNjaGVtYSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4ge1xuICByZXF1ZXN0Pzoge1xuICAgIGJvZHk/OiBTUmVxO1xuICAgIGhlYWRlcnM/OiB6LlpvZE9iamVjdDxhbnk+O1xuICAgIGNvb2tpZXM/OiB6LlpvZE9iamVjdDxhbnk+O1xuICAgIHBhdGhQYXJhbWV0ZXJzPzogei5ab2RPYmplY3Q8YW55PjtcbiAgICBxdWVyeT86IHouWm9kT2JqZWN0PGFueT47XG4gIH07XG4gIHJlc3BvbnNlPzoge1xuICAgIGJvZHk/OiBTUmVzO1xuICAgIGhlYWRlcnM/OiB6LlpvZE9iamVjdDxhbnk+O1xuICAgIGNvb2tpZXM/OiB6LlpvZE9iamVjdDxhbnk+O1xuICB9O1xuICBoYW5kbGVyOiAocmVxdWVzdDogUmVxdWVzdDx6LmluZmVyPFNSZXE+PikgPT4gUHJvbWlzZTxSZXNwb25zZTx6LmluZmVyPFNSZXM+Pj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGUge1xuICBHRVQ/OiBIYW5kbGVyPHVuZGVmaW5lZCwgQW55U2NoZW1hPjtcbiAgUE9TVD86IEhhbmRsZXI8QW55U2NoZW1hLCBBbnlTY2hlbWE+O1xuICBQVVQ/OiBIYW5kbGVyPEFueVNjaGVtYSwgQW55U2NoZW1hPjtcbiAgREVMRVRFPzogSGFuZGxlcjx1bmRlZmluZWQsIEFueVNjaGVtYT47XG4gIFBBVENIPzogSGFuZGxlcjx1bmRlZmluZWQsIEFueVNjaGVtYT47XG4gIE9QVElPTlM/OiBIYW5kbGVyPHVuZGVmaW5lZCwgQW55U2NoZW1hPjtcbiAgSEVBRD86IEhhbmRsZXI8dW5kZWZpbmVkLCBBbnlTY2hlbWE+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlcyB7XG4gIFtwYXRoOiBzdHJpbmddOiBSb3V0ZTtcbn1cblxuZXhwb3J0IGNsYXNzIEFwaUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBzdGF0dXNDb2RlOiBudW1iZXI7XG4gIGJvZHk6IHVua25vd247XG4gIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIGNvbnN0cnVjdG9yKHN0YXR1c0NvZGU6IG51bWJlciwgYm9keTogdW5rbm93biwgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcbiAgICBzdXBlcih0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycgPyBib2R5IDogSlNPTi5zdHJpbmdpZnkoYm9keSwgbnVsbCwgMikpO1xuICAgIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xuXG4gICAgLy8gUmVxdWlyZWQgZm9yIGluc3RhbmNlb2YgdG8gd29yayBwcm9wZXJseVxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBBcGlFcnJvci5wcm90b3R5cGUpO1xuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scloud/lambda-api",
3
- "version": "1.2.2",
3
+ "version": "1.2.4",
4
4
  "description": "Lambda handler for API Gateway proxy requests",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -49,9 +49,8 @@
49
49
  "@eslint/js": "*",
50
50
  "@tsconfig/node24": "*",
51
51
  "@types/chai": "*",
52
- "@types/cookie": "*",
53
52
  "@types/mocha": "*",
54
- "@types/node": "*",
53
+ "@types/node": "^24",
55
54
  "@types/nunjucks": "*",
56
55
  "axios": "*",
57
56
  "chai": "*",
@@ -68,4 +67,4 @@
68
67
  "cookie": "*",
69
68
  "zod": "*"
70
69
  }
71
- }
70
+ }