aws-lambda-api-tools 0.1.19 → 0.1.21
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.
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { APIGatewayEvent, APIGatewayProxyEvent, APIGatewayProxyEventV2 } from
|
|
2
|
-
import { RouteConfig, ConfigRouteEntry, RouteArguments, RouteModule } from
|
|
1
|
+
import { APIGatewayEvent, APIGatewayProxyEvent, APIGatewayProxyEventV2 } from "aws-lambda";
|
|
2
|
+
import { RouteConfig, ConfigRouteEntry, RouteArguments, RouteModule } from "./types-and-interfaces";
|
|
3
3
|
export declare const getRouteModule: (config: RouteConfig, method: string, path: string, availableRouteModules: {
|
|
4
4
|
[key: string]: any;
|
|
5
5
|
}) => RouteModule;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lambda-route-proxy-entry-handler.d.ts","sourceRoot":"","sources":["../../src/lib/lambda-route-proxy-entry-handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lambda-route-proxy-entry-handler.d.ts","sourceRoot":"","sources":["../../src/lib/lambda-route-proxy-entry-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,WAAW,EACZ,MAAM,wBAAwB,CAAC;AAsBhC,eAAO,MAAM,cAAc,WACjB,WAAW,UACX,MAAM,QACR,MAAM;;MAEX,WAYF,CAAC;AAUF,eAAO,MAAM,oBAAoB,mBACf,WAAW,YACjB,cAAc,KACvB,QAAQ,GAAG,CAMb,CAAC;AAuCF,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,gBAAgB,EAAE,GAC1B,gBAAgB,GAAG;IAAE,MAAM,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAA;CAAE,CAmB3D;AAED,eAAO,MAAM,4BAA4B,WAC9B,WAAW;;cAEX,sBAAsB,GAAG,oBAAoB,GAAG,eAAe,iBA0HvE,CAAC"}
|
|
@@ -3,10 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.lambdaRouteProxyEntryHandler = exports.getRouteConfigByPath = exports.getRouteModuleResult = exports.getRouteModule = void 0;
|
|
4
4
|
const custom_error_1 = require("./custom-error");
|
|
5
5
|
const authorization_helper_1 = require("./authorization-helper");
|
|
6
|
-
const getRouteConfigEntry = (config, method, path) => config.routes.find(r => r.path.toLowerCase() === path.toLowerCase() &&
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
const getRouteConfigEntry = (config, method, path) => config.routes.find((r) => r.path.toLowerCase() === path.toLowerCase() &&
|
|
7
|
+
r.method.toLowerCase() === method.toLowerCase());
|
|
8
|
+
const shouldAuthorizeRoute = (routesConfig, routeConfigEntry) => (routesConfig.authorizeAllRoutes &&
|
|
9
|
+
routeConfigEntry.authorizeRoute !== false) ||
|
|
10
|
+
routeConfigEntry.authorizeRoute === true;
|
|
10
11
|
const getRouteModule = (config, method, path, availableRouteModules) => {
|
|
11
12
|
const routeEntry = getRouteConfigEntry(config, method, path);
|
|
12
13
|
let routeModule = null;
|
|
@@ -30,13 +31,14 @@ exports.getRouteModuleResult = getRouteModuleResult;
|
|
|
30
31
|
function pathToRegex(path) {
|
|
31
32
|
// Convert route path to regex pattern
|
|
32
33
|
return path
|
|
33
|
-
.replace(/\//g,
|
|
34
|
-
.replace(/{([^}]+)}/g,
|
|
34
|
+
.replace(/\//g, "\\/") // Escape forward slashes
|
|
35
|
+
.replace(/{([^}]+)}/g, "(?<$1>[^/]+)"); // Convert {param} to named capture groups
|
|
35
36
|
}
|
|
36
37
|
const v2ApiGatewayEvent = (event) => {
|
|
37
38
|
return {
|
|
38
39
|
routeKey: event.routeKey,
|
|
39
|
-
queryStringParameters: event.queryStringParameters ??
|
|
40
|
+
queryStringParameters: event.queryStringParameters ??
|
|
41
|
+
{},
|
|
40
42
|
pathParameters: event.pathParameters ?? {},
|
|
41
43
|
body: event.body,
|
|
42
44
|
isBase64Encoded: event.isBase64Encoded,
|
|
@@ -53,8 +55,8 @@ const v1ApiGatewayEvent = (event, config) => {
|
|
|
53
55
|
};
|
|
54
56
|
};
|
|
55
57
|
function getRouteConfigByPath(eventPath, method, configs) {
|
|
56
|
-
eventPath = eventPath.replace(/\?.*$/,
|
|
57
|
-
const normalizedPath = eventPath.replace(/^\//,
|
|
58
|
+
eventPath = eventPath.replace(/\?.*$/, ""); // Remove query string
|
|
59
|
+
const normalizedPath = eventPath.replace(/^\//, ""); // Remove leading slash
|
|
58
60
|
for (const config of configs) {
|
|
59
61
|
const pattern = pathToRegex(config.path);
|
|
60
62
|
const regex = new RegExp(`^${pattern}$`);
|
|
@@ -67,25 +69,29 @@ function getRouteConfigByPath(eventPath, method, configs) {
|
|
|
67
69
|
return config;
|
|
68
70
|
}
|
|
69
71
|
}
|
|
70
|
-
throw new custom_error_1.CustomError(JSON.stringify({ message:
|
|
72
|
+
throw new custom_error_1.CustomError(JSON.stringify({ message: "path no found" }), 400);
|
|
71
73
|
}
|
|
72
74
|
exports.getRouteConfigByPath = getRouteConfigByPath;
|
|
73
75
|
const lambdaRouteProxyEntryHandler = (config, availableRouteModules) => async (event) => {
|
|
74
76
|
console.log(`Event Data: ${JSON.stringify(event)}`);
|
|
75
|
-
const isV2 = event.version ===
|
|
76
|
-
const isProxied = !isV2 && event.hasOwnProperty(
|
|
77
|
-
const newEvent = isV2
|
|
77
|
+
const isV2 = event.version === "2.0";
|
|
78
|
+
const isProxied = !isV2 && event.hasOwnProperty("requestContext");
|
|
79
|
+
const newEvent = isV2
|
|
80
|
+
? v2ApiGatewayEvent(event)
|
|
81
|
+
: v1ApiGatewayEvent(event, config);
|
|
78
82
|
const { routeKey, queryStringParameters, pathParameters, body, isBase64Encoded, } = newEvent;
|
|
79
83
|
let retVal = {};
|
|
80
84
|
try {
|
|
81
|
-
const [method =
|
|
85
|
+
const [method = "", path = ""] = routeKey.split(" ");
|
|
82
86
|
if (shouldAuthorizeRoute(config, getRouteConfigEntry(config, method, path))) {
|
|
83
87
|
await (0, authorization_helper_1.authorizeRoute)(event);
|
|
84
88
|
}
|
|
85
89
|
const routeModule = (0, exports.getRouteModule)(config, method, path, availableRouteModules);
|
|
86
90
|
console.log(`isBase64Encoded: ${isBase64Encoded}`);
|
|
87
91
|
console.log(`body: ${body}`);
|
|
88
|
-
const decodedBody = isBase64Encoded
|
|
92
|
+
const decodedBody = isBase64Encoded
|
|
93
|
+
? Buffer.from(body, "base64").toString("utf-8")
|
|
94
|
+
: undefined;
|
|
89
95
|
console.log(`decodedBody:
|
|
90
96
|
${decodedBody}`);
|
|
91
97
|
retVal = await (0, exports.getRouteModuleResult)(routeModule, {
|
|
@@ -96,42 +102,68 @@ const lambdaRouteProxyEntryHandler = (config, availableRouteModules) => async (e
|
|
|
96
102
|
});
|
|
97
103
|
if (isProxied) {
|
|
98
104
|
if (retVal.statusCode && !retVal.body) {
|
|
99
|
-
console.log(
|
|
100
|
-
throw new custom_error_1.CustomError(
|
|
105
|
+
console.log("body must be included when status code is set", retVal);
|
|
106
|
+
throw new custom_error_1.CustomError("No body found", 500);
|
|
101
107
|
}
|
|
102
108
|
else if (retVal.statusCode && retVal.body) {
|
|
103
109
|
retVal = {
|
|
104
110
|
...retVal,
|
|
105
111
|
isBase64Encoded: false,
|
|
106
112
|
headers: {
|
|
107
|
-
|
|
108
|
-
|
|
113
|
+
"Access-Control-Allow-Origin": "*",
|
|
114
|
+
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS",
|
|
115
|
+
"Access-Control-Allow-Headers": "Content-Type, Authorization, X-Amz-Date, X-Api-Key, X-Amz-Security-Token",
|
|
116
|
+
"Access-Control-Allow-Credentials": "true",
|
|
117
|
+
"Content-Type": "application/json",
|
|
118
|
+
...(retVal.headers ?? {}),
|
|
109
119
|
},
|
|
110
|
-
body: typeof retVal.body ===
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
else {
|
|
114
|
-
retVal = {
|
|
115
|
-
statusCode: 200,
|
|
116
|
-
body: JSON.stringify(retVal),
|
|
117
|
-
'Content-Type': 'application/json',
|
|
120
|
+
body: typeof retVal.body === "object"
|
|
121
|
+
? JSON.stringify(retVal.body)
|
|
122
|
+
: retVal.body,
|
|
118
123
|
};
|
|
119
124
|
}
|
|
120
125
|
}
|
|
126
|
+
else {
|
|
127
|
+
retVal = {
|
|
128
|
+
statusCode: 200,
|
|
129
|
+
body: JSON.stringify(retVal),
|
|
130
|
+
"Content-Type": "application/json",
|
|
131
|
+
};
|
|
132
|
+
}
|
|
121
133
|
}
|
|
122
134
|
catch (error) {
|
|
123
135
|
console.error(JSON.stringify({ error, stack: error.stack }));
|
|
136
|
+
let headers = {
|
|
137
|
+
"Content-Type": "application/json",
|
|
138
|
+
};
|
|
139
|
+
let statusCode = 500;
|
|
140
|
+
if (isProxied) {
|
|
141
|
+
const isOptions = event.requestContext.httpMethod === "OPTIONS";
|
|
142
|
+
if (isOptions) {
|
|
143
|
+
statusCode = 200;
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
statusCode = error.httpStatusCode || 500;
|
|
147
|
+
}
|
|
148
|
+
headers = {
|
|
149
|
+
...headers,
|
|
150
|
+
"Access-Control-Allow-Origin": "*",
|
|
151
|
+
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS",
|
|
152
|
+
"Access-Control-Allow-Headers": "Content-Type, Authorization, X-Amz-Date, X-Api-Key, X-Amz-Security-Token",
|
|
153
|
+
"Access-Control-Allow-Credentials": "true",
|
|
154
|
+
};
|
|
155
|
+
}
|
|
124
156
|
if (error instanceof custom_error_1.CustomError) {
|
|
125
157
|
retVal = {
|
|
126
|
-
statusCode
|
|
127
|
-
headers
|
|
158
|
+
statusCode,
|
|
159
|
+
headers,
|
|
128
160
|
body: error.message,
|
|
129
161
|
};
|
|
130
162
|
}
|
|
131
163
|
else {
|
|
132
164
|
retVal = {
|
|
133
|
-
statusCode
|
|
134
|
-
headers
|
|
165
|
+
statusCode,
|
|
166
|
+
headers,
|
|
135
167
|
body: error.message || JSON.stringify(error),
|
|
136
168
|
};
|
|
137
169
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lambda-route-proxy-entry-handler.js","sourceRoot":"","sources":["../../src/lib/lambda-route-proxy-entry-handler.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"lambda-route-proxy-entry-handler.js","sourceRoot":"","sources":["../../src/lib/lambda-route-proxy-entry-handler.ts"],"names":[],"mappings":"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"}
|