@yopdev/dev-server 1.8.0-alpha.1 → 2.0.0-alpha.2
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/dist/src/assert.js +1 -2
- package/dist/src/cloudformation-event-proxy.d.ts +13 -0
- package/dist/src/cloudformation-event-proxy.js +25 -0
- package/dist/src/cloudformation-lambda-http-proxy.d.ts +16 -0
- package/dist/src/cloudformation-lambda-http-proxy.js +45 -0
- package/dist/src/cloudformation.d.ts +28 -0
- package/dist/src/cloudformation.js +46 -0
- package/dist/src/container.js +23 -70
- package/dist/src/deferred.js +30 -90
- package/dist/src/dev-server.d.ts +1 -0
- package/dist/src/dev-server.js +51 -51
- package/dist/src/dynamodb.js +25 -74
- package/dist/src/event-proxy.d.ts +3 -1
- package/dist/src/event-proxy.js +52 -108
- package/dist/src/factories.js +11 -64
- package/dist/src/http-server.js +23 -25
- package/dist/src/index.d.ts +5 -4
- package/dist/src/index.js +8 -46
- package/dist/src/internal-queue.d.ts +5 -2
- package/dist/src/internal-queue.js +42 -99
- package/dist/src/lambda-http-proxy.d.ts +13 -5
- package/dist/src/lambda-http-proxy.js +33 -78
- package/dist/src/localstack.js +37 -79
- package/dist/src/mappers.d.ts +3 -2
- package/dist/src/mappers.js +29 -26
- package/dist/src/pre-traffic-hooks.d.ts +2 -11
- package/dist/src/pre-traffic-hooks.js +11 -56
- package/dist/src/responses.d.ts +3 -2
- package/dist/src/responses.js +4 -1
- package/dist/src/s3.d.ts +2 -2
- package/dist/src/s3.js +15 -64
- package/dist/src/scheduled-tasks.js +11 -56
- package/dist/src/services.d.ts +5 -2
- package/dist/src/services.js +18 -54
- package/dist/src/sns-http-proxy.js +41 -59
- package/dist/src/sns.js +29 -79
- package/dist/src/sqs.d.ts +3 -1
- package/dist/src/sqs.js +27 -65
- package/dist/src/stoppable.js +11 -50
- package/dist/src/tunnel.js +41 -68
- package/package.json +5 -1
package/dist/src/dynamodb.js
CHANGED
|
@@ -1,84 +1,35 @@
|
|
|
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 __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
-
function step(op) {
|
|
16
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
3
|
exports.DynamoDb = exports.newDynamoDbTable = void 0;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
4
|
+
const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
|
|
5
|
+
const logging_1 = require("@yopdev/logging");
|
|
6
|
+
const services_1 = require("./services");
|
|
7
|
+
const assert_1 = require("./assert");
|
|
8
|
+
const newDynamoDbTable = (name, config, callback) => new services_1.Service(new DynamoDbTableCreator(name, config.command), callback);
|
|
45
9
|
exports.newDynamoDbTable = newDynamoDbTable;
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
var _this = this;
|
|
10
|
+
class DynamoDbTableCreator {
|
|
11
|
+
constructor(name, command) {
|
|
49
12
|
this.name = name;
|
|
50
13
|
this.command = command;
|
|
51
|
-
this.start =
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
.then(function () { return _this.name; })];
|
|
57
|
-
});
|
|
58
|
-
}); };
|
|
59
|
-
this.stop = function () { return Promise.resolve(); };
|
|
60
|
-
this.LOGGER = logging_1.LoggerFactory.create("TABLE[".concat(name, "]"));
|
|
14
|
+
this.start = async (config) => config.dynamo.createTable(this.command)
|
|
15
|
+
.tap((output) => this.LOGGER.debug(output))
|
|
16
|
+
.then(() => this.name);
|
|
17
|
+
this.stop = () => Promise.resolve();
|
|
18
|
+
this.LOGGER = logging_1.LoggerFactory.create(`TABLE[${name}]`);
|
|
61
19
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
LOGGER.error('failed to create table');
|
|
75
|
-
if (reason.name !== 'ResourceInUseException')
|
|
76
|
-
return Promise.reject(reason);
|
|
77
|
-
})];
|
|
78
|
-
});
|
|
79
|
-
}); };
|
|
20
|
+
}
|
|
21
|
+
const LOGGER = logging_1.LoggerFactory.create('DYNAMODB');
|
|
22
|
+
class DynamoDb {
|
|
23
|
+
constructor(config) {
|
|
24
|
+
this.createTable = async (factory) => this.client
|
|
25
|
+
.send(factory) //
|
|
26
|
+
.tap((table) => LOGGER.debug('created %s', (0, assert_1.assertNotUndefined)(table.TableDescription).TableName))
|
|
27
|
+
.catch((reason) => {
|
|
28
|
+
LOGGER.error('failed to create table');
|
|
29
|
+
if (reason.name !== 'ResourceInUseException')
|
|
30
|
+
return Promise.reject(reason);
|
|
31
|
+
});
|
|
80
32
|
this.client = new client_dynamodb_1.DynamoDBClient(config);
|
|
81
33
|
}
|
|
82
|
-
|
|
83
|
-
}());
|
|
34
|
+
}
|
|
84
35
|
exports.DynamoDb = DynamoDb;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { SNSMessageAttributes, SQSEvent } from 'aws-lambda';
|
|
1
|
+
import { SNSMessageAttributes, SQSEvent, SQSRecord } from 'aws-lambda';
|
|
2
|
+
import { Message } from '@aws-sdk/client-sqs';
|
|
2
3
|
import { Service } from './services';
|
|
3
4
|
export declare const newEventsProxy: (name: string, config: {
|
|
4
5
|
handlers: EventHandler[];
|
|
5
6
|
topic?: string;
|
|
7
|
+
mapper?: (message: Message) => SQSRecord;
|
|
6
8
|
}) => Service<void>;
|
|
7
9
|
export type EventHandler = {
|
|
8
10
|
name: string;
|
package/dist/src/event-proxy.js
CHANGED
|
@@ -1,124 +1,68 @@
|
|
|
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 __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
-
function step(op) {
|
|
16
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
3
|
exports.newEventsProxy = void 0;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
4
|
+
const sqs_consumer_1 = require("sqs-consumer");
|
|
5
|
+
const mappers_1 = require("./mappers");
|
|
6
|
+
const logging_1 = require("@yopdev/logging");
|
|
7
|
+
const stoppable_1 = require("./stoppable");
|
|
8
|
+
const assert_1 = require("./assert");
|
|
9
|
+
const services_1 = require("./services");
|
|
10
|
+
const newEventsProxy = (name, config) => new services_1.Service(new EventsProxy(name, config.handlers, config.mapper ?? mappers_1.mapToLambdaSqsRecord, config.topic));
|
|
47
11
|
exports.newEventsProxy = newEventsProxy;
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
var _this = this;
|
|
12
|
+
class EventsProxy {
|
|
13
|
+
constructor(name, handlers, mapper, topic) {
|
|
51
14
|
this.name = name;
|
|
52
15
|
this.handlers = handlers;
|
|
16
|
+
this.mapper = mapper;
|
|
53
17
|
this.topic = topic;
|
|
54
18
|
this.pollingFrequency = 1;
|
|
55
19
|
this.stopped = true;
|
|
56
|
-
this.queueName =
|
|
57
|
-
this.start =
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
.createSubscription({ arn: topic }, { arn: queue.arn })
|
|
72
|
-
.then(function () { return queue.url; }); })];
|
|
20
|
+
this.queueName = () => `EventProxyQueue${Buffer.from(this.name).toString('hex').substring(0, 64)}`;
|
|
21
|
+
this.start = async (config) => this.queueConnectedToTopic(config.sns, this.topic ?? config.eventsProxy.topic.arn, config.sqs, this.queueName())
|
|
22
|
+
.then((url) => this.startEventsConsumer(config.sqs.client, url))
|
|
23
|
+
.tap(() => this.stopped = false)
|
|
24
|
+
.then((consumer) => this.LOGGER.debug(consumer));
|
|
25
|
+
this.queueConnectedToTopic = async (sns, topic, sqs, queue) => sqs.createStandardQueue(queue)
|
|
26
|
+
.then((queue) => sns
|
|
27
|
+
.createSubscription({ arn: topic }, { arn: queue.arn })
|
|
28
|
+
.then(() => queue.url));
|
|
29
|
+
this.startEventsConsumer = async (sqs, url) => {
|
|
30
|
+
this.consumer = sqs_consumer_1.Consumer.create({
|
|
31
|
+
waitTimeSeconds: this.pollingFrequency,
|
|
32
|
+
queueUrl: url,
|
|
33
|
+
sqs: sqs,
|
|
34
|
+
handleMessage: async (message) => this.onEachMessage(message),
|
|
73
35
|
});
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
sqs: sqs,
|
|
82
|
-
handleMessage: function (message) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
83
|
-
return [2 /*return*/, this.onEachMessage(message)];
|
|
84
|
-
}); }); },
|
|
85
|
-
});
|
|
86
|
-
this.consumer.start();
|
|
87
|
-
return [2 /*return*/, url];
|
|
88
|
-
});
|
|
89
|
-
}); };
|
|
90
|
-
this.extractErrorMessage = function (e) { return typeof e === 'string' ? e : e.message !== undefined && typeof e.message === 'string' ? e.message : ''; };
|
|
91
|
-
this.onEachMessage = function (message) {
|
|
92
|
-
if (_this.stopped) {
|
|
93
|
-
_this.LOGGER.warn('stopped events proxy received message %o', message);
|
|
36
|
+
this.consumer.start();
|
|
37
|
+
return url;
|
|
38
|
+
};
|
|
39
|
+
this.extractErrorMessage = (e) => typeof e === 'string' ? e : e.message !== undefined && typeof e.message === 'string' ? e.message : '';
|
|
40
|
+
this.onEachMessage = (message) => {
|
|
41
|
+
if (this.stopped) {
|
|
42
|
+
this.LOGGER.warn('stopped events proxy received message %o', message);
|
|
94
43
|
return;
|
|
95
44
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
45
|
+
const body = (0, assert_1.assertNotUndefined)(message.Body, 'body is not present');
|
|
46
|
+
const json = JSON.parse(body);
|
|
47
|
+
const attributes = json.MessageAttributes;
|
|
48
|
+
const subject = json.Subject;
|
|
49
|
+
const handlers = this.handlers.filter((handler) => handler.matcher(subject, attributes));
|
|
101
50
|
if (handlers.length === 0) {
|
|
102
|
-
|
|
51
|
+
this.LOGGER.warn('no handlers found for message %o', message);
|
|
103
52
|
}
|
|
104
|
-
|
|
105
|
-
handlers.forEach(
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
});
|
|
115
|
-
});
|
|
53
|
+
const record = this.mapper(message);
|
|
54
|
+
handlers.forEach((handler) => handler
|
|
55
|
+
.handler({ Records: [record] })
|
|
56
|
+
.then(() => {
|
|
57
|
+
this.LOGGER.debug('handler %s accepted message', handler.name);
|
|
58
|
+
})
|
|
59
|
+
.catch((e) => {
|
|
60
|
+
const error = this.extractErrorMessage(e);
|
|
61
|
+
this.LOGGER.error(e, 'handler %s failed with %s', handler.name, error);
|
|
62
|
+
}));
|
|
116
63
|
};
|
|
117
|
-
this.stop =
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
this.LOGGER = logging_1.LoggerFactory.create("SNS->SQS[".concat(name, "]"));
|
|
121
|
-
this.LOGGER.debug('handling events from %s', topic !== null && topic !== void 0 ? topic : 'the event bus');
|
|
64
|
+
this.stop = async () => (0, stoppable_1.stopConsumer)(this.pollingFrequency, this.consumer);
|
|
65
|
+
this.LOGGER = logging_1.LoggerFactory.create(`SNS->SQS[${name}]`);
|
|
66
|
+
this.LOGGER.debug('handling events from %s', topic ?? 'the event bus');
|
|
122
67
|
}
|
|
123
|
-
|
|
124
|
-
}());
|
|
68
|
+
}
|
package/dist/src/factories.js
CHANGED
|
@@ -1,69 +1,16 @@
|
|
|
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 __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
-
function step(op) {
|
|
16
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
3
|
exports.oneThenOther = exports.all = void 0;
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
name:
|
|
43
|
-
start:
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
return [2 /*return*/, Promise.all(services.map(function (each) { return each.start(config); })).then(function () { return _this; })];
|
|
47
|
-
});
|
|
48
|
-
}); },
|
|
49
|
-
stop: function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
50
|
-
return [2 /*return*/, Promise.all(services.map(function (each) { return each.stop(); })).then()];
|
|
51
|
-
}); }); }
|
|
52
|
-
}); };
|
|
4
|
+
const services_1 = require("./services");
|
|
5
|
+
const all = (services) => new services_1.Service({
|
|
6
|
+
name: `ALLOF[${services.map((each) => each.name).join(',')}]`,
|
|
7
|
+
start: async (config) => Promise.all(services.map((each) => each.start(config))).then(() => this),
|
|
8
|
+
stop: async () => Promise.all(services.map((each) => each.stop())).then()
|
|
9
|
+
});
|
|
53
10
|
exports.all = all;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
return [2 /*return*/, other.start(config)];
|
|
60
|
-
}); }); })];
|
|
61
|
-
}); }); },
|
|
62
|
-
stop: function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
63
|
-
return [2 /*return*/, other.stop().then(function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
64
|
-
return [2 /*return*/, one.stop()];
|
|
65
|
-
}); }); })];
|
|
66
|
-
}); }); },
|
|
67
|
-
});
|
|
68
|
-
};
|
|
11
|
+
const oneThenOther = (one, other) => new services_1.Service({
|
|
12
|
+
name: `[${one.name}]->[${other.name}]`,
|
|
13
|
+
start: async (config) => one.start(config).then(async () => other.start(config)),
|
|
14
|
+
stop: async () => other.stop().then(async () => one.stop()),
|
|
15
|
+
});
|
|
69
16
|
exports.oneThenOther = oneThenOther;
|
package/dist/src/http-server.js
CHANGED
|
@@ -1,39 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.HttpServer = exports.newHttpServer = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
const http_1 = require("http");
|
|
5
|
+
const events_1 = require("events");
|
|
6
|
+
const logging_1 = require("@yopdev/logging");
|
|
7
|
+
const assert_1 = require("./assert");
|
|
8
|
+
const services_1 = require("./services");
|
|
9
|
+
const newHttpServer = (name, config, callback) => new services_1.Service(new HttpServer(name, config.settings, config.handler), callback);
|
|
10
10
|
exports.newHttpServer = newHttpServer;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
var _this = this;
|
|
11
|
+
class HttpServer {
|
|
12
|
+
constructor(name, settings, handler) {
|
|
14
13
|
this.name = name;
|
|
15
14
|
this.settings = settings;
|
|
16
15
|
this.handler = handler;
|
|
17
|
-
this.start =
|
|
18
|
-
.then(
|
|
19
|
-
.then(
|
|
20
|
-
this.endpointUrl =
|
|
21
|
-
|
|
22
|
-
return
|
|
16
|
+
this.start = () => this.server
|
|
17
|
+
.then(() => this.LOGGER.debug('listening [%s]', (0, assert_1.assertNotUndefined)(this.address).port))
|
|
18
|
+
.then(() => this.endpointUrl());
|
|
19
|
+
this.endpointUrl = () => {
|
|
20
|
+
const address = (0, assert_1.assertNotUndefined)(this.address, 'server not started');
|
|
21
|
+
return `${this.protocol}//${address.address}:${address.port}/`;
|
|
23
22
|
};
|
|
24
|
-
this.stop =
|
|
25
|
-
|
|
23
|
+
this.stop = () => this.server.then((server) => server.close()).then(() => undefined);
|
|
24
|
+
const server = (0, http_1.createServer)((req, res) => {
|
|
26
25
|
req.setEncoding('utf-8');
|
|
27
|
-
|
|
28
|
-
req.on('data',
|
|
29
|
-
req.on('end',
|
|
26
|
+
let body = '';
|
|
27
|
+
req.on('data', (chunks) => body = body.concat(chunks));
|
|
28
|
+
req.on('end', () => handler(req, body, res));
|
|
30
29
|
})
|
|
31
|
-
.listen(settings.port, settings.host,
|
|
30
|
+
.listen(settings.port, settings.host, () => this.address = server.address());
|
|
32
31
|
this.server = (0, events_1.once)(server, 'listening')
|
|
33
|
-
.then(
|
|
32
|
+
.then(() => server);
|
|
34
33
|
this.protocol = settings.protocol;
|
|
35
|
-
this.LOGGER = logging_1.LoggerFactory.create(
|
|
34
|
+
this.LOGGER = logging_1.LoggerFactory.create(`HTTPSERVER[${name}]`);
|
|
36
35
|
}
|
|
37
|
-
|
|
38
|
-
}());
|
|
36
|
+
}
|
|
39
37
|
exports.HttpServer = HttpServer;
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
export { DevServer } from './dev-server';
|
|
2
|
-
export { newHttpServer as httpServer } from './http-server';
|
|
3
|
-
export { newLambdaHttpProxy as lambdaHttpProxy } from './lambda-http-proxy';
|
|
2
|
+
export { newHttpServer as httpServer, HttpSettings } from './http-server';
|
|
3
|
+
export { newLambdaHttpProxy as lambdaHttpProxy, UNAUTHORIZED } from './lambda-http-proxy';
|
|
4
|
+
export { newLambdaProxyFromCloudFormationTemplate as cloudFormationLambdaProxy } from './cloudformation-lambda-http-proxy';
|
|
4
5
|
export { newSnsHttpProxy as snsHttpProxy } from './sns-http-proxy';
|
|
5
6
|
export { newInternalQueue as internalQueue } from './internal-queue';
|
|
6
7
|
export { newEventsProxy as eventsProxy } from './event-proxy';
|
|
8
|
+
export { snsEventsFromCloudFormationTemplate as cloudFormationSnsEventHandlers } from './cloudformation-event-proxy';
|
|
7
9
|
export { newScheduledTasks as scheduledTasks } from './scheduled-tasks';
|
|
8
10
|
export { newPreTrafficHooks as preTrafficHooks } from './pre-traffic-hooks';
|
|
9
11
|
export { newDynamoDbTable as dynamoDbTable } from './dynamodb';
|
|
@@ -11,9 +13,8 @@ export { newContainer as container } from './container';
|
|
|
11
13
|
export { newTunnel as tunnel } from './tunnel';
|
|
12
14
|
export { all as allOf, oneThenOther } from './factories';
|
|
13
15
|
export { lazy, promised } from './deferred';
|
|
14
|
-
export { Lifecycle, Service } from './services';
|
|
16
|
+
export { Lifecycle, Service, Startable } from './services';
|
|
15
17
|
export { DevServerConfig } from './config';
|
|
16
|
-
export { Route } from './lambda-http-proxy';
|
|
17
18
|
declare global {
|
|
18
19
|
interface Promise<T> {
|
|
19
20
|
tap(onfulfilled?: (value: T) => void, onrejected?: (reason: unknown) => void): Promise<T>;
|
package/dist/src/index.js
CHANGED
|
@@ -1,54 +1,23 @@
|
|
|
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 __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
-
function step(op) {
|
|
16
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.Service = exports.promised = exports.lazy = exports.oneThenOther = exports.allOf = exports.tunnel = exports.container = exports.dynamoDbTable = exports.preTrafficHooks = exports.scheduledTasks = exports.eventsProxy = exports.internalQueue = exports.snsHttpProxy = exports.lambdaHttpProxy = exports.httpServer = exports.DevServer = void 0;
|
|
3
|
+
exports.Service = exports.promised = exports.lazy = exports.oneThenOther = exports.allOf = exports.tunnel = exports.container = exports.dynamoDbTable = exports.preTrafficHooks = exports.scheduledTasks = exports.cloudFormationSnsEventHandlers = exports.eventsProxy = exports.internalQueue = exports.snsHttpProxy = exports.cloudFormationLambdaProxy = exports.UNAUTHORIZED = exports.lambdaHttpProxy = exports.httpServer = exports.DevServer = void 0;
|
|
40
4
|
var dev_server_1 = require("./dev-server");
|
|
41
5
|
Object.defineProperty(exports, "DevServer", { enumerable: true, get: function () { return dev_server_1.DevServer; } });
|
|
42
6
|
var http_server_1 = require("./http-server");
|
|
43
7
|
Object.defineProperty(exports, "httpServer", { enumerable: true, get: function () { return http_server_1.newHttpServer; } });
|
|
44
8
|
var lambda_http_proxy_1 = require("./lambda-http-proxy");
|
|
45
9
|
Object.defineProperty(exports, "lambdaHttpProxy", { enumerable: true, get: function () { return lambda_http_proxy_1.newLambdaHttpProxy; } });
|
|
10
|
+
Object.defineProperty(exports, "UNAUTHORIZED", { enumerable: true, get: function () { return lambda_http_proxy_1.UNAUTHORIZED; } });
|
|
11
|
+
var cloudformation_lambda_http_proxy_1 = require("./cloudformation-lambda-http-proxy");
|
|
12
|
+
Object.defineProperty(exports, "cloudFormationLambdaProxy", { enumerable: true, get: function () { return cloudformation_lambda_http_proxy_1.newLambdaProxyFromCloudFormationTemplate; } });
|
|
46
13
|
var sns_http_proxy_1 = require("./sns-http-proxy");
|
|
47
14
|
Object.defineProperty(exports, "snsHttpProxy", { enumerable: true, get: function () { return sns_http_proxy_1.newSnsHttpProxy; } });
|
|
48
15
|
var internal_queue_1 = require("./internal-queue");
|
|
49
16
|
Object.defineProperty(exports, "internalQueue", { enumerable: true, get: function () { return internal_queue_1.newInternalQueue; } });
|
|
50
17
|
var event_proxy_1 = require("./event-proxy");
|
|
51
18
|
Object.defineProperty(exports, "eventsProxy", { enumerable: true, get: function () { return event_proxy_1.newEventsProxy; } });
|
|
19
|
+
var cloudformation_event_proxy_1 = require("./cloudformation-event-proxy");
|
|
20
|
+
Object.defineProperty(exports, "cloudFormationSnsEventHandlers", { enumerable: true, get: function () { return cloudformation_event_proxy_1.snsEventsFromCloudFormationTemplate; } });
|
|
52
21
|
var scheduled_tasks_1 = require("./scheduled-tasks");
|
|
53
22
|
Object.defineProperty(exports, "scheduledTasks", { enumerable: true, get: function () { return scheduled_tasks_1.newScheduledTasks; } });
|
|
54
23
|
var pre_traffic_hooks_1 = require("./pre-traffic-hooks");
|
|
@@ -67,13 +36,6 @@ Object.defineProperty(exports, "lazy", { enumerable: true, get: function () { re
|
|
|
67
36
|
Object.defineProperty(exports, "promised", { enumerable: true, get: function () { return deferred_1.promised; } });
|
|
68
37
|
var services_1 = require("./services");
|
|
69
38
|
Object.defineProperty(exports, "Service", { enumerable: true, get: function () { return services_1.Service; } });
|
|
70
|
-
Promise.prototype.tap = function (onfulfilled, onrejected) {
|
|
71
|
-
return
|
|
72
|
-
var _this = this;
|
|
73
|
-
return __generator(this, function (_a) {
|
|
74
|
-
return [2 /*return*/, this.then(onfulfilled, onrejected).then(function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
75
|
-
return [2 /*return*/, this];
|
|
76
|
-
}); }); })];
|
|
77
|
-
});
|
|
78
|
-
});
|
|
39
|
+
Promise.prototype.tap = async function (onfulfilled, onrejected) {
|
|
40
|
+
return this.then(onfulfilled, onrejected).then(async () => this);
|
|
79
41
|
};
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { Queue } from "./sqs";
|
|
2
|
-
import { SQSEvent } from "aws-lambda";
|
|
2
|
+
import { SQSEvent, SQSRecord } from "aws-lambda";
|
|
3
3
|
import { Service, Callback } from "./services";
|
|
4
|
+
import { Message } from "@aws-sdk/client-sqs";
|
|
4
5
|
export declare const newInternalQueue: (name: string, config: {
|
|
5
|
-
|
|
6
|
+
name: string;
|
|
6
7
|
visibility: number;
|
|
7
8
|
handler: (queue: Queue) => (e: SQSEvent) => Promise<void>;
|
|
9
|
+
fifo: boolean;
|
|
10
|
+
mapper?: (message: Message) => SQSRecord;
|
|
8
11
|
}, callback?: Callback<string>) => Service<string>;
|