@koeroesi86/node-lambda-invoke 1.0.21-d1fa702 → 26.10.36903641712-master
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 +4 -4
- package/dist/classes/FileStorage.d.ts +18 -0
- package/dist/classes/FileStorage.js +62 -0
- package/dist/classes/FileStorage.js.map +1 -0
- package/dist/classes/IPCStorage.d.ts +26 -0
- package/dist/classes/IPCStorage.js +208 -0
- package/dist/classes/IPCStorage.js.map +1 -0
- package/dist/classes/Lambda.d.ts +30 -0
- package/dist/classes/Lambda.js +100 -0
- package/dist/classes/Lambda.js.map +1 -0
- package/dist/classes/LambdaPool.d.ts +19 -0
- package/dist/classes/LambdaPool.js +74 -0
- package/dist/classes/LambdaPool.js.map +1 -0
- package/dist/classes/RequestEvent.d.ts +13 -0
- package/dist/classes/RequestEvent.js +6 -0
- package/dist/classes/RequestEvent.js.map +1 -0
- package/dist/classes/ResponseEvent.d.ts +8 -0
- package/dist/classes/ResponseEvent.js +6 -0
- package/dist/classes/ResponseEvent.js.map +1 -0
- package/dist/classes/Worker.d.ts +20 -0
- package/dist/classes/Worker.js +77 -0
- package/dist/classes/Worker.js.map +1 -0
- package/dist/constants/index.d.ts +5 -0
- package/dist/constants/index.js +10 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/middlewares/http.d.ts +5 -0
- package/dist/middlewares/http.js +75 -0
- package/dist/middlewares/http.js.map +1 -0
- package/dist/middlewares/invoke.d.ts +1 -0
- package/dist/middlewares/invoke.js +48 -0
- package/dist/middlewares/invoke.js.map +1 -0
- package/dist/middlewares/stdoutListener.d.ts +4 -0
- package/dist/middlewares/stdoutListener.js +27 -0
- package/dist/middlewares/stdoutListener.js.map +1 -0
- package/dist/registry/communication.json +12 -0
- package/dist/registry/index.d.ts +2 -0
- package/dist/registry/index.js +19 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/types.d.ts +36 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/sendToParent.d.ts +3 -0
- package/dist/utils/sendToParent.js +10 -0
- package/dist/utils/sendToParent.js.map +1 -0
- package/example/example.js +1 -1
- package/package.json +28 -11
- package/.travis.yml +0 -16
- package/classes/FileStorage.js +0 -114
- package/classes/IPCStorage.js +0 -216
- package/classes/Lambda.js +0 -124
- package/classes/LambdaPool.js +0 -78
- package/classes/RequestEvent.js +0 -15
- package/classes/ResponseEvent.js +0 -12
- package/classes/Worker.js +0 -93
- package/constants/index.js +0 -8
- package/index.js +0 -9
- package/middlewares/http.js +0 -111
- package/middlewares/invoke.js +0 -50
- package/middlewares/stdoutListener.js +0 -27
- package/registry/communication.json +0 -12
- package/scripts/version.js +0 -10
package/README.md
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
# Node Lambda invoke
|
|
1
|
+
# Node Lambda invoke
|
|
2
2
|
|
|
3
3
|
A library that can be easily used for AWS lambda functions locally
|
|
4
4
|
|
|
5
5
|
## Dependencies
|
|
6
6
|
|
|
7
7
|
* [Node](https://nodejs.org/en/)
|
|
8
|
-
* [
|
|
8
|
+
* [pnpm](https://pnpm.io/) (for development in this workspace)
|
|
9
9
|
|
|
10
10
|
## Usage
|
|
11
11
|
|
|
12
12
|
```bash
|
|
13
|
-
|
|
13
|
+
pnpm add @koeroesi86/node-lambda-invoke
|
|
14
14
|
```
|
|
15
15
|
|
|
16
16
|
Or with npm
|
|
@@ -53,7 +53,7 @@ http
|
|
|
53
53
|
## Running locally
|
|
54
54
|
|
|
55
55
|
```bash
|
|
56
|
-
|
|
56
|
+
pnpm start
|
|
57
57
|
```
|
|
58
58
|
|
|
59
59
|
## Configuration
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type RequestEvent from './RequestEvent';
|
|
2
|
+
import type ResponseEvent from './ResponseEvent';
|
|
3
|
+
/** loaded by file path, so it has to stay a CommonJS `module.exports` */
|
|
4
|
+
declare class FileStorage {
|
|
5
|
+
readonly id: string;
|
|
6
|
+
static requestBase: string;
|
|
7
|
+
static responseBase: string;
|
|
8
|
+
static start(): void;
|
|
9
|
+
constructor(id: string);
|
|
10
|
+
get requestPath(): string;
|
|
11
|
+
get responsePath(): string;
|
|
12
|
+
setResponse(response: ResponseEvent): Promise<void>;
|
|
13
|
+
getResponse(): Promise<ResponseEvent>;
|
|
14
|
+
setRequest(request: RequestEvent): Promise<void>;
|
|
15
|
+
getRequest(): Promise<RequestEvent>;
|
|
16
|
+
destroy(): Promise<[void, void]>;
|
|
17
|
+
}
|
|
18
|
+
export = FileStorage;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const fs_1 = require("fs");
|
|
7
|
+
const rimraf_1 = __importDefault(require("rimraf"));
|
|
8
|
+
const constants_1 = require("../constants");
|
|
9
|
+
const serializer = {
|
|
10
|
+
serialize: (data) => JSON.stringify(data),
|
|
11
|
+
deserialize: (data) => JSON.parse(data),
|
|
12
|
+
};
|
|
13
|
+
const Driver = {
|
|
14
|
+
save: (path, data) => new Promise((res, rej) => (0, fs_1.writeFile)(path, data, 'utf8', (err) => (err ? rej(err) : res()))),
|
|
15
|
+
restore: (path) => new Promise((res, rej) => (0, fs_1.readFile)(path, 'utf8', (err, data) => (err ? rej(err) : res(data)))),
|
|
16
|
+
destroy: (path) => new Promise((res, rej) => ((0, fs_1.existsSync)(path) ? (0, fs_1.unlink)(path, (err) => (err ? rej(err) : res())) : setTimeout(res, 0))),
|
|
17
|
+
};
|
|
18
|
+
/** loaded by file path, so it has to stay a CommonJS `module.exports` */
|
|
19
|
+
class FileStorage {
|
|
20
|
+
id;
|
|
21
|
+
static requestBase = (0, path_1.resolve)(constants_1.PACKAGE_ROOT, 'requests/');
|
|
22
|
+
static responseBase = (0, path_1.resolve)(constants_1.PACKAGE_ROOT, 'responses/');
|
|
23
|
+
static start() {
|
|
24
|
+
rimraf_1.default.sync((0, path_1.resolve)(FileStorage.requestBase, './*'));
|
|
25
|
+
rimraf_1.default.sync((0, path_1.resolve)(FileStorage.responseBase, './*'));
|
|
26
|
+
if (!(0, fs_1.existsSync)(FileStorage.requestBase))
|
|
27
|
+
(0, fs_1.mkdirSync)(FileStorage.requestBase, { recursive: true });
|
|
28
|
+
if (!(0, fs_1.existsSync)(FileStorage.responseBase))
|
|
29
|
+
(0, fs_1.mkdirSync)(FileStorage.responseBase, { recursive: true });
|
|
30
|
+
}
|
|
31
|
+
constructor(id) {
|
|
32
|
+
this.id = id;
|
|
33
|
+
this.setResponse = this.setResponse.bind(this);
|
|
34
|
+
this.getResponse = this.getResponse.bind(this);
|
|
35
|
+
this.setRequest = this.setRequest.bind(this);
|
|
36
|
+
this.getRequest = this.getRequest.bind(this);
|
|
37
|
+
this.destroy = this.destroy.bind(this);
|
|
38
|
+
}
|
|
39
|
+
get requestPath() {
|
|
40
|
+
return (0, path_1.resolve)(FileStorage.requestBase, `./${this.id}`);
|
|
41
|
+
}
|
|
42
|
+
get responsePath() {
|
|
43
|
+
return (0, path_1.resolve)(FileStorage.responseBase, `./${this.id}`);
|
|
44
|
+
}
|
|
45
|
+
setResponse(response) {
|
|
46
|
+
return Driver.save(this.responsePath, serializer.serialize(response));
|
|
47
|
+
}
|
|
48
|
+
getResponse() {
|
|
49
|
+
return Driver.restore(this.responsePath).then((data) => serializer.deserialize(data));
|
|
50
|
+
}
|
|
51
|
+
setRequest(request) {
|
|
52
|
+
return Driver.save(this.requestPath, serializer.serialize(request));
|
|
53
|
+
}
|
|
54
|
+
getRequest() {
|
|
55
|
+
return Driver.restore(this.requestPath).then((data) => serializer.deserialize(data));
|
|
56
|
+
}
|
|
57
|
+
destroy() {
|
|
58
|
+
return Promise.all([Driver.destroy(this.responsePath), Driver.destroy(this.requestPath)]);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
module.exports = FileStorage;
|
|
62
|
+
//# sourceMappingURL=FileStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileStorage.js","sourceRoot":"","sources":["../../src/classes/FileStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import Lambda from './Lambda';
|
|
2
|
+
import Worker from './Worker';
|
|
3
|
+
import type RequestEvent from './RequestEvent';
|
|
4
|
+
import type ResponseEvent from './ResponseEvent';
|
|
5
|
+
import type { StorageInstance } from '../types';
|
|
6
|
+
/** loaded by file path, so it has to stay a CommonJS `module.exports` */
|
|
7
|
+
declare class IPCStorage {
|
|
8
|
+
readonly id: string;
|
|
9
|
+
readonly instance: StorageInstance;
|
|
10
|
+
static start(): void;
|
|
11
|
+
constructor(id: string, instance: StorageInstance);
|
|
12
|
+
/** the message endpoint of a worker or process, a lambda is not able to exchange messages this way */
|
|
13
|
+
private get endpoint();
|
|
14
|
+
invoker(lambda: Lambda): void;
|
|
15
|
+
invokerMessageListener(message: unknown): void;
|
|
16
|
+
executor(instance: Worker | NodeJS.Process): void;
|
|
17
|
+
executorMessageListener(message: unknown): void;
|
|
18
|
+
get requestKey(): string;
|
|
19
|
+
get responseKey(): string;
|
|
20
|
+
setResponse(response: ResponseEvent): Promise<void>;
|
|
21
|
+
getResponse(): Promise<ResponseEvent>;
|
|
22
|
+
setRequest(request: RequestEvent): Promise<void>;
|
|
23
|
+
getRequest(): Promise<RequestEvent>;
|
|
24
|
+
destroy(): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
export = IPCStorage;
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
const Lambda_1 = __importDefault(require("./Lambda"));
|
|
6
|
+
const Worker_1 = __importDefault(require("./Worker"));
|
|
7
|
+
const sendToParent_1 = __importDefault(require("../utils/sendToParent"));
|
|
8
|
+
const MESSAGES = {
|
|
9
|
+
GET_RESONSE: 'GW_GET_RESONSE',
|
|
10
|
+
SET_RESONSE: 'GW_SET_RESONSE',
|
|
11
|
+
SET_RESONSE_FINISHED: 'GW_SET_RESONSE_FINISHED',
|
|
12
|
+
GET_REQUEST: 'GW_GET_REQUEST',
|
|
13
|
+
SET_REQUEST: 'GW_SET_REQUEST',
|
|
14
|
+
SET_REQUEST_FINISHED: 'GW_SET_REQUEST_FINISHED',
|
|
15
|
+
DESTROY: 'GW_DESTROY',
|
|
16
|
+
};
|
|
17
|
+
let requests = {};
|
|
18
|
+
let responses = {};
|
|
19
|
+
const getRequestKey = (id) => `request-${id}`;
|
|
20
|
+
const getResponseKey = (id) => `response-${id}`;
|
|
21
|
+
const isIpcMessage = (message) => typeof message === 'object' && message !== null && 'type' in message && 'id' in message;
|
|
22
|
+
const toEndpoint = (instance) => {
|
|
23
|
+
if (instance instanceof Worker_1.default) {
|
|
24
|
+
return {
|
|
25
|
+
on: (listener) => instance.on('message', listener),
|
|
26
|
+
off: (listener) => instance.off('message', listener),
|
|
27
|
+
send: (message) => instance.send(message),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
on: (listener) => instance.on('message', listener),
|
|
32
|
+
off: (listener) => instance.off('message', listener),
|
|
33
|
+
send: (message) => {
|
|
34
|
+
if (!instance.send)
|
|
35
|
+
throw new Error('There is no IPC channel to the parent process.');
|
|
36
|
+
instance.send(message);
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
process.on('message', (message) => {
|
|
41
|
+
if (!isIpcMessage(message))
|
|
42
|
+
return;
|
|
43
|
+
if (message.type === MESSAGES.SET_REQUEST) {
|
|
44
|
+
requests[getRequestKey(message.id)] = message.payload;
|
|
45
|
+
(0, sendToParent_1.default)({ type: MESSAGES.SET_REQUEST_FINISHED, id: message.id });
|
|
46
|
+
}
|
|
47
|
+
if (message.type === MESSAGES.SET_RESONSE) {
|
|
48
|
+
responses[getResponseKey(message.id)] = message.payload;
|
|
49
|
+
(0, sendToParent_1.default)({ type: MESSAGES.SET_RESONSE_FINISHED, id: message.id });
|
|
50
|
+
}
|
|
51
|
+
// if (message.type === MESSAGES.DESTROY) {
|
|
52
|
+
// const requestId = getResponseKey(message.id);
|
|
53
|
+
// delete storage[requestId];
|
|
54
|
+
// const responseId = getResponseKey(message.id);
|
|
55
|
+
// delete storage[responseId];
|
|
56
|
+
// }
|
|
57
|
+
});
|
|
58
|
+
/** loaded by file path, so it has to stay a CommonJS `module.exports` */
|
|
59
|
+
class IPCStorage {
|
|
60
|
+
id;
|
|
61
|
+
instance;
|
|
62
|
+
static start() {
|
|
63
|
+
requests = {};
|
|
64
|
+
responses = {};
|
|
65
|
+
}
|
|
66
|
+
constructor(id, instance) {
|
|
67
|
+
this.id = id;
|
|
68
|
+
this.instance = instance;
|
|
69
|
+
this.setResponse = this.setResponse.bind(this);
|
|
70
|
+
this.getResponse = this.getResponse.bind(this);
|
|
71
|
+
this.setRequest = this.setRequest.bind(this);
|
|
72
|
+
this.getRequest = this.getRequest.bind(this);
|
|
73
|
+
this.destroy = this.destroy.bind(this);
|
|
74
|
+
this.invoker = this.invoker.bind(this);
|
|
75
|
+
this.executor = this.executor.bind(this);
|
|
76
|
+
this.invokerMessageListener = this.invokerMessageListener.bind(this);
|
|
77
|
+
this.executorMessageListener = this.executorMessageListener.bind(this);
|
|
78
|
+
if (this.instance instanceof Lambda_1.default) {
|
|
79
|
+
this.invoker(this.instance);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
this.executor(this.instance);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/** the message endpoint of a worker or process, a lambda is not able to exchange messages this way */
|
|
86
|
+
get endpoint() {
|
|
87
|
+
if (this.instance instanceof Lambda_1.default) {
|
|
88
|
+
throw new Error('A storage attached to a lambda can only be destroyed.');
|
|
89
|
+
}
|
|
90
|
+
return toEndpoint(this.instance);
|
|
91
|
+
}
|
|
92
|
+
invoker(lambda) {
|
|
93
|
+
lambda.addEventListener('message', this.invokerMessageListener);
|
|
94
|
+
}
|
|
95
|
+
invokerMessageListener(message) {
|
|
96
|
+
if (!isIpcMessage(message) || !(this.instance instanceof Lambda_1.default))
|
|
97
|
+
return;
|
|
98
|
+
if (message.type === MESSAGES.GET_REQUEST) {
|
|
99
|
+
const item = requests[getRequestKey(message.id)];
|
|
100
|
+
if (item) {
|
|
101
|
+
this.instance.postMessage({ type: MESSAGES.SET_REQUEST, id: message.id, payload: item });
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (message.type === MESSAGES.SET_RESONSE) {
|
|
105
|
+
responses[getResponseKey(message.id)] = message.payload;
|
|
106
|
+
this.instance.postMessage({ type: MESSAGES.SET_RESONSE_FINISHED, id: message.id });
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
executor(instance) {
|
|
110
|
+
toEndpoint(instance).on(this.executorMessageListener);
|
|
111
|
+
}
|
|
112
|
+
executorMessageListener(message) {
|
|
113
|
+
if (!isIpcMessage(message))
|
|
114
|
+
return;
|
|
115
|
+
if (message.type === MESSAGES.SET_REQUEST) {
|
|
116
|
+
requests[getRequestKey(message.id)] = message.payload;
|
|
117
|
+
(0, sendToParent_1.default)({ type: MESSAGES.SET_REQUEST_FINISHED, id: message.id });
|
|
118
|
+
}
|
|
119
|
+
if (message.type === MESSAGES.GET_RESONSE) {
|
|
120
|
+
const item = responses[getResponseKey(message.id)];
|
|
121
|
+
if (item) {
|
|
122
|
+
(0, sendToParent_1.default)({ type: MESSAGES.SET_RESONSE, id: message.id, payload: item });
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
get requestKey() {
|
|
127
|
+
return getRequestKey(this.id);
|
|
128
|
+
}
|
|
129
|
+
get responseKey() {
|
|
130
|
+
return getResponseKey(this.id);
|
|
131
|
+
}
|
|
132
|
+
setResponse(response) {
|
|
133
|
+
responses[this.responseKey] = response;
|
|
134
|
+
return new Promise((resolve) => {
|
|
135
|
+
const { endpoint } = this;
|
|
136
|
+
const finishListener = (message) => {
|
|
137
|
+
if (isIpcMessage(message) && message.type === MESSAGES.SET_RESONSE_FINISHED && message.id === this.id) {
|
|
138
|
+
resolve();
|
|
139
|
+
endpoint.off(finishListener);
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
endpoint.on(finishListener);
|
|
143
|
+
endpoint.send({ type: MESSAGES.SET_RESONSE, id: this.id, payload: response });
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
getResponse() {
|
|
147
|
+
return new Promise((resolve) => {
|
|
148
|
+
const stored = responses[this.responseKey];
|
|
149
|
+
if (stored)
|
|
150
|
+
return resolve(stored);
|
|
151
|
+
const { endpoint } = this;
|
|
152
|
+
const finishListener = (message) => {
|
|
153
|
+
if (isIpcMessage(message) && message.type === MESSAGES.SET_RESONSE && message.id === this.id) {
|
|
154
|
+
responses[this.responseKey] = message.payload;
|
|
155
|
+
resolve(message.payload);
|
|
156
|
+
endpoint.off(finishListener);
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
endpoint.on(finishListener);
|
|
160
|
+
endpoint.send({ type: MESSAGES.GET_RESONSE, id: this.id });
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
setRequest(request) {
|
|
164
|
+
requests[this.requestKey] = request;
|
|
165
|
+
return new Promise((resolve) => {
|
|
166
|
+
const { endpoint } = this;
|
|
167
|
+
const finishListener = (message) => {
|
|
168
|
+
if (isIpcMessage(message) && message.type === MESSAGES.SET_REQUEST_FINISHED && message.id === this.id) {
|
|
169
|
+
resolve();
|
|
170
|
+
endpoint.off(finishListener);
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
endpoint.on(finishListener);
|
|
174
|
+
endpoint.send({ type: MESSAGES.SET_REQUEST, id: this.id, payload: request });
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
getRequest() {
|
|
178
|
+
return new Promise((resolve) => {
|
|
179
|
+
const stored = requests[this.requestKey];
|
|
180
|
+
if (stored)
|
|
181
|
+
return resolve(stored);
|
|
182
|
+
const { endpoint } = this;
|
|
183
|
+
const finishListener = (message) => {
|
|
184
|
+
if (isIpcMessage(message) && message.type === MESSAGES.SET_REQUEST && message.id === this.id) {
|
|
185
|
+
requests[this.requestKey] = message.payload;
|
|
186
|
+
resolve(message.payload);
|
|
187
|
+
endpoint.off(finishListener);
|
|
188
|
+
// this.instance.send({ type: MESSAGES.SET_REQUEST_FINISHED, id: message.id })
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
endpoint.on(finishListener);
|
|
192
|
+
endpoint.send({ type: MESSAGES.GET_REQUEST, id: this.id });
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
destroy() {
|
|
196
|
+
delete requests[this.requestKey];
|
|
197
|
+
delete responses[this.responseKey];
|
|
198
|
+
if (this.instance instanceof Lambda_1.default) {
|
|
199
|
+
this.instance.removeEventListener('message', this.invokerMessageListener);
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
toEndpoint(this.instance).off(this.executorMessageListener);
|
|
203
|
+
}
|
|
204
|
+
return Promise.resolve();
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
module.exports = IPCStorage;
|
|
208
|
+
//# sourceMappingURL=IPCStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IPCStorage.js","sourceRoot":"","sources":["../../src/classes/IPCStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import Worker from './Worker';
|
|
2
|
+
import type RequestEvent from './RequestEvent';
|
|
3
|
+
import type ResponseEvent from './ResponseEvent';
|
|
4
|
+
import type { Communication, LambdaEvent, Listener, Logger, StorageDriverConstructor } from '../types';
|
|
5
|
+
declare class Lambda {
|
|
6
|
+
private readonly _path;
|
|
7
|
+
private readonly _handler;
|
|
8
|
+
private readonly _logger;
|
|
9
|
+
private readonly _storagePath;
|
|
10
|
+
private readonly _communication;
|
|
11
|
+
private _storage?;
|
|
12
|
+
private _requestId?;
|
|
13
|
+
private _callback;
|
|
14
|
+
readonly StorageDriver: StorageDriverConstructor;
|
|
15
|
+
instance: Worker | null;
|
|
16
|
+
busy: boolean;
|
|
17
|
+
createdAt?: number;
|
|
18
|
+
constructor(path: string, handler: string, logger: Logger | undefined, communication: Communication);
|
|
19
|
+
get stdout(): import("stream").Readable | null | undefined;
|
|
20
|
+
get stderr(): import("stream").Readable | null | undefined;
|
|
21
|
+
createInstance(): Worker;
|
|
22
|
+
invoke(requestId: string, requestEvent: RequestEvent, callback?: (response: ResponseEvent) => void): void;
|
|
23
|
+
/** @private */
|
|
24
|
+
_onFinished(event: LambdaEvent): void;
|
|
25
|
+
addEventListener(event: string, listener: Listener): void;
|
|
26
|
+
addEventListenerOnce(event: string, listener: Listener): void;
|
|
27
|
+
removeEventListener(event: string, listener: Listener): void;
|
|
28
|
+
postMessage(message: Parameters<Worker['postMessage']>[0], cb?: Parameters<Worker['postMessage']>[1]): void;
|
|
29
|
+
}
|
|
30
|
+
export default Lambda;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
const Worker_1 = __importDefault(require("./Worker"));
|
|
8
|
+
const constants_1 = require("../constants");
|
|
9
|
+
const registry_1 = require("../registry");
|
|
10
|
+
class Lambda {
|
|
11
|
+
_path;
|
|
12
|
+
_handler;
|
|
13
|
+
_logger;
|
|
14
|
+
_storagePath;
|
|
15
|
+
_communication;
|
|
16
|
+
_storage;
|
|
17
|
+
_requestId;
|
|
18
|
+
_callback = () => { };
|
|
19
|
+
StorageDriver;
|
|
20
|
+
instance;
|
|
21
|
+
busy;
|
|
22
|
+
createdAt;
|
|
23
|
+
constructor(path, handler, logger = () => { }, communication) {
|
|
24
|
+
this._path = path;
|
|
25
|
+
this._handler = handler;
|
|
26
|
+
this._logger = logger;
|
|
27
|
+
this._storagePath = (0, registry_1.getRegisteredPath)(communication.type);
|
|
28
|
+
this._communication = communication;
|
|
29
|
+
this.StorageDriver = require(this._storagePath);
|
|
30
|
+
const instance = this.createInstance();
|
|
31
|
+
this.instance = instance;
|
|
32
|
+
this.busy = false;
|
|
33
|
+
const killTimer = setTimeout(() => {
|
|
34
|
+
this._logger('Shutting down lambda.');
|
|
35
|
+
if (this.instance) {
|
|
36
|
+
this.instance.terminate();
|
|
37
|
+
this.instance = null;
|
|
38
|
+
}
|
|
39
|
+
}, 15 * 60 * 1000);
|
|
40
|
+
instance.addEventListenerOnce('close', () => {
|
|
41
|
+
this.instance = null;
|
|
42
|
+
clearTimeout(killTimer);
|
|
43
|
+
});
|
|
44
|
+
this._onFinished = this._onFinished.bind(this);
|
|
45
|
+
}
|
|
46
|
+
get stdout() {
|
|
47
|
+
return this.instance?.stdout;
|
|
48
|
+
}
|
|
49
|
+
get stderr() {
|
|
50
|
+
return this.instance?.stderr;
|
|
51
|
+
}
|
|
52
|
+
createInstance() {
|
|
53
|
+
return new Worker_1.default((0, path_1.resolve)(__dirname, '../middlewares/invoke.js'), {
|
|
54
|
+
stdio: ['pipe', 'pipe', 'pipe', 'ipc'],
|
|
55
|
+
env: {
|
|
56
|
+
LAMBDA: this._path,
|
|
57
|
+
HANDLER: this._handler,
|
|
58
|
+
COMMUNICATION: JSON.stringify(this._communication),
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
invoke(requestId, requestEvent, callback = () => { }) {
|
|
63
|
+
if (!this.instance)
|
|
64
|
+
this.instance = this.createInstance();
|
|
65
|
+
const { instance } = this;
|
|
66
|
+
const storage = new this.StorageDriver(requestId, instance);
|
|
67
|
+
this._storage = storage;
|
|
68
|
+
Promise.resolve()
|
|
69
|
+
.then(() => storage.setRequest(requestEvent))
|
|
70
|
+
.then(() => {
|
|
71
|
+
this.busy = true;
|
|
72
|
+
this._requestId = requestId;
|
|
73
|
+
this._callback = callback;
|
|
74
|
+
instance.addEventListener('message', this._onFinished);
|
|
75
|
+
instance.postMessage({ type: constants_1.EVENT_REQUEST, id: requestId });
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/** @private */
|
|
79
|
+
_onFinished(event) {
|
|
80
|
+
if (event.type === constants_1.EVENT_RESPONSE && event.id === this._requestId) {
|
|
81
|
+
this.busy = false;
|
|
82
|
+
this.instance?.removeEventListener('message', this._onFinished);
|
|
83
|
+
this._storage?.getResponse().then((responseEvent) => this._callback(responseEvent));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
addEventListener(event, listener) {
|
|
87
|
+
this.instance?.addEventListener(event, listener);
|
|
88
|
+
}
|
|
89
|
+
addEventListenerOnce(event, listener) {
|
|
90
|
+
this.instance?.addEventListenerOnce(event, listener);
|
|
91
|
+
}
|
|
92
|
+
removeEventListener(event, listener) {
|
|
93
|
+
this.instance?.removeEventListener(event, listener);
|
|
94
|
+
}
|
|
95
|
+
postMessage(message, cb = () => { }) {
|
|
96
|
+
this.instance?.postMessage(message, cb);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
exports.default = Lambda;
|
|
100
|
+
//# sourceMappingURL=Lambda.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Lambda.js","sourceRoot":"","sources":["../../src/classes/Lambda.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import Lambda from './Lambda';
|
|
2
|
+
import type { Communication, Logger } from '../types';
|
|
3
|
+
interface LambdaPoolOptions {
|
|
4
|
+
overallLimit?: number;
|
|
5
|
+
logger?: Logger;
|
|
6
|
+
communication: Communication;
|
|
7
|
+
}
|
|
8
|
+
declare class LambdaPool {
|
|
9
|
+
readonly communication: Communication;
|
|
10
|
+
readonly overallLimit?: number;
|
|
11
|
+
readonly logger: Logger;
|
|
12
|
+
constructor({ overallLimit, logger, communication }: LambdaPoolOptions);
|
|
13
|
+
createLambda(lambdaToInvoke: string, handlerKey: string): Promise<{
|
|
14
|
+
id: string;
|
|
15
|
+
instance: Lambda;
|
|
16
|
+
}>;
|
|
17
|
+
getLambda(lambdaToInvoke: string, handlerKey: string): Promise<Lambda>;
|
|
18
|
+
}
|
|
19
|
+
export default LambdaPool;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const uuid_1 = __importDefault(require("uuid"));
|
|
7
|
+
const Lambda_1 = __importDefault(require("./Lambda"));
|
|
8
|
+
const stdoutListener_1 = __importDefault(require("../middlewares/stdoutListener"));
|
|
9
|
+
const constants_1 = require("../constants");
|
|
10
|
+
const lambdaInstances = {};
|
|
11
|
+
function getOverallCount() {
|
|
12
|
+
return Object.keys(lambdaInstances).reduce((result, current) => Object.keys(lambdaInstances[current]).length + result, 0);
|
|
13
|
+
}
|
|
14
|
+
function getNonBusyId(lambdaToInvoke) {
|
|
15
|
+
const timeLimit = Date.now() - 15 * 60 * 1000 + 5000; // lifespan of lambda, to give enough time to respond before killed
|
|
16
|
+
return Object.keys(lambdaInstances[lambdaToInvoke] || {}).find((id) => {
|
|
17
|
+
const instance = lambdaInstances[lambdaToInvoke][id];
|
|
18
|
+
return !instance.busy && instance.createdAt !== undefined && instance.createdAt >= timeLimit;
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
class LambdaPool {
|
|
22
|
+
communication;
|
|
23
|
+
overallLimit;
|
|
24
|
+
logger;
|
|
25
|
+
constructor({ overallLimit, logger = () => { }, communication }) {
|
|
26
|
+
this.communication = communication;
|
|
27
|
+
this.overallLimit = overallLimit;
|
|
28
|
+
this.logger = logger;
|
|
29
|
+
this.getLambda = this.getLambda.bind(this);
|
|
30
|
+
this.createLambda = this.createLambda.bind(this);
|
|
31
|
+
}
|
|
32
|
+
createLambda(lambdaToInvoke, handlerKey) {
|
|
33
|
+
return new Promise((resolve) => {
|
|
34
|
+
const currentId = uuid_1.default.v4();
|
|
35
|
+
const currentLambdaInstance = new Lambda_1.default(lambdaToInvoke, handlerKey, this.logger, this.communication);
|
|
36
|
+
const lambdaStartListener = (message) => {
|
|
37
|
+
if (message.type === constants_1.EVENT_STARTED) {
|
|
38
|
+
this.logger(`[${currentId}] started`);
|
|
39
|
+
currentLambdaInstance.removeEventListener('message', lambdaStartListener);
|
|
40
|
+
resolve({ id: currentId, instance: currentLambdaInstance });
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
currentLambdaInstance.addEventListener('message', lambdaStartListener);
|
|
44
|
+
currentLambdaInstance.addEventListenerOnce('close', (code) => {
|
|
45
|
+
if (code)
|
|
46
|
+
this.logger(`[${currentId}] Lambda exited with code ${code}`);
|
|
47
|
+
});
|
|
48
|
+
(0, stdoutListener_1.default)(currentLambdaInstance, this.logger);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
getLambda(lambdaToInvoke, handlerKey) {
|
|
52
|
+
const nonBusyId = getNonBusyId(lambdaToInvoke);
|
|
53
|
+
if (this.overallLimit !== undefined && getOverallCount() >= this.overallLimit) {
|
|
54
|
+
return Promise.resolve()
|
|
55
|
+
.then(() => new Promise((r) => setTimeout(r, 100)))
|
|
56
|
+
.then(() => this.getLambda(lambdaToInvoke, handlerKey));
|
|
57
|
+
}
|
|
58
|
+
if (!lambdaInstances[lambdaToInvoke] || !nonBusyId) {
|
|
59
|
+
return Promise.resolve()
|
|
60
|
+
.then(() => this.createLambda(lambdaToInvoke, handlerKey))
|
|
61
|
+
.then(({ id, instance }) => {
|
|
62
|
+
instance.createdAt = Date.now();
|
|
63
|
+
lambdaInstances[lambdaToInvoke] = {
|
|
64
|
+
...lambdaInstances[lambdaToInvoke],
|
|
65
|
+
[id]: instance,
|
|
66
|
+
};
|
|
67
|
+
return instance;
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
return Promise.resolve(lambdaInstances[lambdaToInvoke][nonBusyId]);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.default = LambdaPool;
|
|
74
|
+
//# sourceMappingURL=LambdaPool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LambdaPool.js","sourceRoot":"","sources":["../../src/classes/LambdaPool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { IncomingHttpHeaders } from 'http';
|
|
2
|
+
import type { ParsedUrlQuery } from 'querystring';
|
|
3
|
+
declare class RequestEvent {
|
|
4
|
+
path: string;
|
|
5
|
+
headers: IncomingHttpHeaders;
|
|
6
|
+
pathParameters?: Record<string, string>;
|
|
7
|
+
requestContext?: object;
|
|
8
|
+
resource?: string;
|
|
9
|
+
httpMethod: string;
|
|
10
|
+
queryStringParameters: ParsedUrlQuery;
|
|
11
|
+
stageVariables?: Record<string, string>;
|
|
12
|
+
}
|
|
13
|
+
export default RequestEvent;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RequestEvent.js","sourceRoot":"","sources":["../../src/classes/RequestEvent.ts"],"names":[],"mappings":";;AAGA,MAAM,YAAY;CASjB;AAED,kBAAe,YAAY,CAAC"}
|