@aesop-fables/triginta 0.2.4 → 0.3.0
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/lib/HttpLambda.d.ts +4 -4
- package/lib/HttpLambda.js +10 -1
- package/lib/Middleware.d.ts +1 -10
- package/lib/Middleware.js +53 -70
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/invokeHttpHandler.d.ts +2 -2
- package/lib/invokeHttpHandler.js +7 -7
- package/package.json +4 -4
package/lib/HttpLambda.d.ts
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { IServiceContainer, IServiceModule, Newable } from '@aesop-fables/containr';
|
|
2
|
-
import { APIGatewayProxyEventV2, Handler } from 'aws-lambda';
|
|
2
|
+
import { APIGatewayProxyEventV2, APIGatewayProxyStructuredResultV2, Handler } from 'aws-lambda';
|
|
3
3
|
import { IHttpEndpoint } from './IHttpEndpoint';
|
|
4
4
|
export declare type NonNoisyEvent = Omit<APIGatewayProxyEventV2, 'requestContext'>;
|
|
5
5
|
export interface BootstrappedHttpLambdaContext {
|
|
6
|
-
createHttpLambda<Input, Output>(newable: Newable<IHttpEndpoint<Input, Output>>): Handler<APIGatewayProxyEventV2,
|
|
6
|
+
createHttpLambda<Input, Output>(newable: Newable<IHttpEndpoint<Input, Output>>): Handler<APIGatewayProxyEventV2, APIGatewayProxyStructuredResultV2>;
|
|
7
7
|
}
|
|
8
8
|
export interface IHttpLambdaFactory {
|
|
9
|
-
createHandler<Input, Output>(newable: Newable<IHttpEndpoint<Input, Output>>): Handler<APIGatewayProxyEventV2,
|
|
9
|
+
createHandler<Input, Output>(newable: Newable<IHttpEndpoint<Input, Output>>): Handler<APIGatewayProxyEventV2, APIGatewayProxyStructuredResultV2>;
|
|
10
10
|
}
|
|
11
11
|
export declare class HttpLambdaFactory implements IHttpLambdaFactory {
|
|
12
12
|
private readonly container;
|
|
13
13
|
constructor(container: IServiceContainer);
|
|
14
|
-
createHandler<Input, Output>(newable: Newable<IHttpEndpoint<Input, Output>>): Handler<APIGatewayProxyEventV2,
|
|
14
|
+
createHandler<Input, Output>(newable: Newable<IHttpEndpoint<Input, Output>>): Handler<APIGatewayProxyEventV2, APIGatewayProxyStructuredResultV2>;
|
|
15
15
|
}
|
|
16
16
|
export declare const useTrigintaHttp: IServiceModule;
|
|
17
17
|
export declare class HttpLambda {
|
package/lib/HttpLambda.js
CHANGED
|
@@ -31,7 +31,16 @@ class HttpLambdaFactory {
|
|
|
31
31
|
const endpoint = this.container.resolve(newable);
|
|
32
32
|
const { body: request } = event;
|
|
33
33
|
const response = (yield endpoint.handle(request, event));
|
|
34
|
-
|
|
34
|
+
// TODO -- Break this out into a response writer
|
|
35
|
+
let proxyResponse = response;
|
|
36
|
+
if (typeof (proxyResponse === null || proxyResponse === void 0 ? void 0 : proxyResponse.statusCode) === 'undefined') {
|
|
37
|
+
// TODO -- Is 200 always correct here?
|
|
38
|
+
proxyResponse = {
|
|
39
|
+
statusCode: 200,
|
|
40
|
+
body: response ? JSON.stringify(response) : undefined,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
return proxyResponse;
|
|
35
44
|
}
|
|
36
45
|
finally {
|
|
37
46
|
if (childContainer) {
|
package/lib/Middleware.d.ts
CHANGED
|
@@ -1,10 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const errorWrapper: () => {
|
|
3
|
-
onError: (handler: middy.HandlerLambda, next: middy.NextFunction) => void;
|
|
4
|
-
};
|
|
5
|
-
export declare const convertNullTo200: () => {
|
|
6
|
-
after: (handler: middy.HandlerLambda, next: middy.NextFunction) => void;
|
|
7
|
-
};
|
|
8
|
-
export declare const xssFilter: () => {
|
|
9
|
-
before: (handler: middy.HandlerLambda) => Promise<void>;
|
|
10
|
-
};
|
|
1
|
+
export {};
|
package/lib/Middleware.js
CHANGED
|
@@ -1,72 +1,55 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}),
|
|
71
|
-
});
|
|
72
|
-
exports.xssFilter = xssFilter;
|
|
3
|
+
// export const errorWrapper = () => ({
|
|
4
|
+
// onError: (handler: middy.MiddyfiedHandler, next: middy.MiddlewareFn) => {
|
|
5
|
+
// if (handler.error) {
|
|
6
|
+
// handler.response = {
|
|
7
|
+
// statusCode: 400,
|
|
8
|
+
// headers: {
|
|
9
|
+
// 'Content-Type': 'application/json',
|
|
10
|
+
// 'Access-Control-Allow-Origin': '*',
|
|
11
|
+
// 'Access-Control-Allow-Headers': '*',
|
|
12
|
+
// 'Access-Control-Allow-Methods': '*',
|
|
13
|
+
// },
|
|
14
|
+
// body: JSON.stringify({
|
|
15
|
+
// error: handler.error,
|
|
16
|
+
// }),
|
|
17
|
+
// };
|
|
18
|
+
// return next();
|
|
19
|
+
// }
|
|
20
|
+
// return next(handler.error);
|
|
21
|
+
// },
|
|
22
|
+
// });
|
|
23
|
+
// export const convertNullTo200 = () => ({
|
|
24
|
+
// after: (handler: middy.HandlerLambda, next: middy.NextFunction) => {
|
|
25
|
+
// if (handler.response === null) {
|
|
26
|
+
// handler.response = {
|
|
27
|
+
// statusCode: 200,
|
|
28
|
+
// headers: {
|
|
29
|
+
// 'Content-Type': 'application/json',
|
|
30
|
+
// 'Access-Control-Allow-Origin': '*',
|
|
31
|
+
// 'Access-Control-Allow-Headers': '*',
|
|
32
|
+
// 'Access-Control-Allow-Methods': '*',
|
|
33
|
+
// },
|
|
34
|
+
// body: '',
|
|
35
|
+
// };
|
|
36
|
+
// }
|
|
37
|
+
// return next();
|
|
38
|
+
// },
|
|
39
|
+
// });
|
|
40
|
+
// export const xssFilter = () => ({
|
|
41
|
+
// before: async (handler: middy.HandlerLambda) => {
|
|
42
|
+
// const { event } = handler;
|
|
43
|
+
// const { body } = event;
|
|
44
|
+
// if (body) {
|
|
45
|
+
// const keys = Object.keys(body);
|
|
46
|
+
// for (let i = 0; i < keys.length; i++) {
|
|
47
|
+
// const key = keys[i];
|
|
48
|
+
// const value = body[key];
|
|
49
|
+
// if (value && typeof value === 'string') {
|
|
50
|
+
// body[key] = xss(value);
|
|
51
|
+
// }
|
|
52
|
+
// }
|
|
53
|
+
// }
|
|
54
|
+
// },
|
|
55
|
+
// });
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -25,3 +25,4 @@ __exportStar(require("./HttpLambdaServices"), exports);
|
|
|
25
25
|
var RouteRegistry_1 = require("./RouteRegistry");
|
|
26
26
|
Object.defineProperty(exports, "RouteRegistry", { enumerable: true, get: function () { return __importDefault(RouteRegistry_1).default; } });
|
|
27
27
|
__exportStar(require("./invokeHttpHandler"), exports);
|
|
28
|
+
__exportStar(require("./IConfiguredRoute"), exports);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { APIGatewayProxyEventPathParameters, APIGatewayProxyEventV2 } from 'aws-lambda';
|
|
1
|
+
import { APIGatewayProxyEventPathParameters, APIGatewayProxyEventV2, APIGatewayProxyStructuredResultV2 } from 'aws-lambda';
|
|
2
2
|
import { IServiceContainer } from '@aesop-fables/containr';
|
|
3
3
|
import { IConfiguredRoute } from './IConfiguredRoute';
|
|
4
4
|
export interface InvocationContext {
|
|
@@ -11,4 +11,4 @@ export declare function parseRouteParams(route: string, path: string): APIGatewa
|
|
|
11
11
|
export declare function parsePathParameters(context: EventGenerationContext): Partial<APIGatewayProxyEventV2>;
|
|
12
12
|
export declare type EventGenerationContext = Omit<InvocationContext, 'container'>;
|
|
13
13
|
export declare function createApiGatewayEvent(context: EventGenerationContext): Partial<APIGatewayProxyEventV2>;
|
|
14
|
-
export declare function invokeHttpHandler<Output>(context: InvocationContext): Promise<
|
|
14
|
+
export declare function invokeHttpHandler<Output>(context: InvocationContext): Promise<APIGatewayProxyStructuredResultV2>;
|
package/lib/invokeHttpHandler.js
CHANGED
|
@@ -77,7 +77,7 @@ function createApiGatewayEvent(context) {
|
|
|
77
77
|
accept: '*/*',
|
|
78
78
|
'accept-encoding': 'gzip, deflate, br',
|
|
79
79
|
// 'content-length': '0',
|
|
80
|
-
|
|
80
|
+
'content-type': 'application/json',
|
|
81
81
|
host: '',
|
|
82
82
|
'user-agent': 'triginta/1.0',
|
|
83
83
|
'x-amzn-trace-id': 'Root=1-63e26f79-577a8db87d3b31fa4da65566',
|
|
@@ -114,7 +114,8 @@ function invokeHttpHandler(context) {
|
|
|
114
114
|
const { container } = context;
|
|
115
115
|
const factory = container.get(HttpLambdaServices_1.HttpLambdaServices.HttpLambdaFactory);
|
|
116
116
|
const configuredHandler = factory.createHandler(context.configuredRoute.constructor);
|
|
117
|
-
|
|
117
|
+
const event = createApiGatewayEvent(context);
|
|
118
|
+
const handlerContext = {
|
|
118
119
|
callbackWaitsForEmptyEventLoop: false,
|
|
119
120
|
functionName: 'httpLambda',
|
|
120
121
|
functionVersion: '0.1',
|
|
@@ -124,7 +125,7 @@ function invokeHttpHandler(context) {
|
|
|
124
125
|
logGroupName: 'test-group',
|
|
125
126
|
logStreamName: 'test-stream',
|
|
126
127
|
getRemainingTimeInMillis: function () {
|
|
127
|
-
|
|
128
|
+
return 1000;
|
|
128
129
|
},
|
|
129
130
|
done: function (error, result) {
|
|
130
131
|
throw new Error('Function not implemented.');
|
|
@@ -135,10 +136,9 @@ function invokeHttpHandler(context) {
|
|
|
135
136
|
succeed: function (messageOrObject) {
|
|
136
137
|
throw new Error('Function not implemented.');
|
|
137
138
|
},
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
});
|
|
139
|
+
};
|
|
140
|
+
const response = yield configuredHandler(event, handlerContext);
|
|
141
|
+
return response;
|
|
142
142
|
});
|
|
143
143
|
}
|
|
144
144
|
exports.invokeHttpHandler = invokeHttpHandler;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aesop-fables/triginta",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "A lightweight framework that wraps the basic infrastructure usages of AWS Lambda (SQS, Kinesis, etc.).",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"exports": {
|
|
@@ -45,9 +45,9 @@
|
|
|
45
45
|
"lib/**/*"
|
|
46
46
|
],
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@middy/core": "^
|
|
49
|
-
"@middy/http-error-handler": "^
|
|
50
|
-
"@middy/http-json-body-parser": "^
|
|
48
|
+
"@middy/core": "^4.2.3",
|
|
49
|
+
"@middy/http-error-handler": "^4.2.3",
|
|
50
|
+
"@middy/http-json-body-parser": "^4.2.3",
|
|
51
51
|
"reflect-metadata": "^0.1.13",
|
|
52
52
|
"xss": "^1.0.9"
|
|
53
53
|
},
|