@creator.co/wapi 1.1.8 → 1.2.0-alpha2
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/.eslintrc.cjs +22 -22
- package/README.md +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/package.json +50 -0
- package/dist/src/API/Request.d.ts +4 -5
- package/dist/src/API/Request.js +3 -4
- package/dist/src/API/Request.js.map +1 -1
- package/dist/src/API/Response.d.ts +1 -1
- package/dist/src/API/Response.js.map +1 -1
- package/dist/src/BaseEvent/EventProcessor.js +0 -1
- package/dist/src/BaseEvent/EventProcessor.js.map +1 -1
- package/dist/src/BaseEvent/Process.d.ts +4 -7
- package/dist/src/BaseEvent/Process.js +1 -2
- package/dist/src/BaseEvent/Process.js.map +1 -1
- package/dist/src/BaseEvent/Transaction.d.ts +6 -6
- package/dist/src/BaseEvent/Transaction.js +2 -4
- package/dist/src/BaseEvent/Transaction.js.map +1 -1
- package/dist/src/Config/Configuration.d.ts +28 -0
- package/dist/src/Config/Configuration.js +93 -0
- package/dist/src/Config/Configuration.js.map +1 -0
- package/dist/src/Config/EnvironmentVar.d.ts +17 -0
- package/dist/src/Config/EnvironmentVar.js +155 -0
- package/dist/src/Config/EnvironmentVar.js.map +1 -0
- package/dist/src/Globals.d.ts +11 -0
- package/dist/src/Globals.js +12 -0
- package/dist/src/Globals.js.map +1 -1
- package/dist/src/Logger/Logger.js +42 -11
- package/dist/src/Logger/Logger.js.map +1 -1
- package/dist/src/Mailer/Mailer.js +50 -24
- package/dist/src/Mailer/Mailer.js.map +1 -1
- package/dist/src/Server/Router.d.ts +30 -0
- package/dist/src/Server/Router.js +21 -0
- package/dist/src/Server/Router.js.map +1 -0
- package/dist/src/Server/lib/ContainerServer.d.ts +11 -0
- package/dist/src/Server/lib/ContainerServer.js +100 -0
- package/dist/src/Server/lib/ContainerServer.js.map +1 -0
- package/dist/src/Server/lib/Server.d.ts +9 -0
- package/dist/src/Server/lib/Server.js +137 -0
- package/dist/src/Server/lib/Server.js.map +1 -0
- package/dist/src/Server/lib/container/GenericHandler.d.ts +4 -0
- package/dist/src/Server/lib/container/GenericHandler.js +138 -0
- package/dist/src/Server/lib/container/GenericHandler.js.map +1 -0
- package/dist/src/Server/lib/container/GenericHandlerEvent.d.ts +14 -0
- package/dist/src/Server/lib/container/GenericHandlerEvent.js +164 -0
- package/dist/src/Server/lib/container/GenericHandlerEvent.js.map +1 -0
- package/dist/src/Server/lib/container/HealthHandler.d.ts +3 -0
- package/dist/src/Server/lib/container/HealthHandler.js +44 -0
- package/dist/src/Server/lib/container/HealthHandler.js.map +1 -0
- package/dist/src/Server/lib/container/Proxy.d.ts +15 -0
- package/dist/src/Server/lib/container/Proxy.js +153 -0
- package/dist/src/Server/lib/container/Proxy.js.map +1 -0
- package/dist/src/Server/lib/container/Utils.d.ts +6 -0
- package/dist/src/Server/lib/container/Utils.js +109 -0
- package/dist/src/Server/lib/container/Utils.js.map +1 -0
- package/dist/src/Validation/Validator.d.ts +5 -0
- package/dist/src/Validation/Validator.js +39 -0
- package/dist/src/Validation/Validator.js.map +1 -0
- package/index.ts +8 -6
- package/package.json +14 -3
- package/src/API/Request.ts +6 -12
- package/src/API/Response.ts +1 -1
- package/src/BaseEvent/EventProcessor.ts +3 -2
- package/src/BaseEvent/Process.ts +11 -10
- package/src/BaseEvent/Transaction.ts +24 -16
- package/src/Config/Configuration.ts +83 -0
- package/src/Config/EnvironmentVar.ts +94 -0
- package/src/Globals.ts +15 -0
- package/src/Server/Router.ts +51 -0
- package/src/Server/lib/ContainerServer.ts +27 -0
- package/src/Server/lib/Server.ts +66 -0
- package/src/Server/lib/container/GenericHandler.ts +63 -0
- package/src/Server/lib/container/GenericHandlerEvent.ts +133 -0
- package/src/Server/lib/container/HealthHandler.ts +5 -0
- package/src/Server/lib/container/Proxy.ts +107 -0
- package/src/Server/lib/container/Utils.ts +45 -0
- package/src/Validation/Validator.ts +35 -0
- package/tsconfig.json +2 -0
|
@@ -0,0 +1,153 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
var http_1 = require("http");
|
|
40
|
+
var cors_1 = require("cors");
|
|
41
|
+
var express = require("express");
|
|
42
|
+
var GenericHandler_1 = require("./GenericHandler");
|
|
43
|
+
var HealthHandler_1 = require("./HealthHandler");
|
|
44
|
+
var package_json_1 = require("../../../../package.json");
|
|
45
|
+
var Globals_1 = require("../../../Globals");
|
|
46
|
+
var Proxy = /** @class */ (function () {
|
|
47
|
+
function Proxy(config, serverlessHandler) {
|
|
48
|
+
var _a, _b, _c, _d, _e, _f;
|
|
49
|
+
this.stopping = false;
|
|
50
|
+
this.config = config;
|
|
51
|
+
this.serverlessHandler = serverlessHandler;
|
|
52
|
+
this.app = express();
|
|
53
|
+
this.app.use((0, cors_1.default)(this.config.cors
|
|
54
|
+
? {
|
|
55
|
+
options: {
|
|
56
|
+
origin: (_b = (_a = this.config) === null || _a === void 0 ? void 0 : _a.cors) === null || _b === void 0 ? void 0 : _b.origin,
|
|
57
|
+
allowedHeaders: (_d = (_c = this.config) === null || _c === void 0 ? void 0 : _c.cors) === null || _d === void 0 ? void 0 : _d.headers,
|
|
58
|
+
credentials: !!((_f = (_e = this.config) === null || _e === void 0 ? void 0 : _e.cors) === null || _f === void 0 ? void 0 : _f.allowCredentials),
|
|
59
|
+
},
|
|
60
|
+
}
|
|
61
|
+
: {}));
|
|
62
|
+
// //This supposedly fix some 502 codes where nodejs socket would hang during
|
|
63
|
+
// //a request and if behind ALB, it would cause 502 codes. Had experiencied this
|
|
64
|
+
// //and 502 codes reduced dramastically, but still some appearances. Maybe this
|
|
65
|
+
// //is just a palliative work-around for the real issue; TODO: need to investigate
|
|
66
|
+
// //in the future.
|
|
67
|
+
// this.listener.listener.keepAliveTimeout = 120e3
|
|
68
|
+
// this.listener.listener.headersTimeout = 120e3
|
|
69
|
+
}
|
|
70
|
+
Proxy.prototype.load = function () {
|
|
71
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
72
|
+
return __generator(this, function (_a) {
|
|
73
|
+
switch (_a.label) {
|
|
74
|
+
case 0: return [4 /*yield*/, this.startListeners()];
|
|
75
|
+
case 1:
|
|
76
|
+
_a.sent();
|
|
77
|
+
this.installRoutes();
|
|
78
|
+
return [2 /*return*/];
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
Proxy.prototype.unload = function (err) {
|
|
84
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
85
|
+
return __generator(this, function (_a) {
|
|
86
|
+
switch (_a.label) {
|
|
87
|
+
case 0: return [4 /*yield*/, this.stopListeners(err)];
|
|
88
|
+
case 1:
|
|
89
|
+
_a.sent();
|
|
90
|
+
return [2 /*return*/];
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
};
|
|
95
|
+
/* lifecycle */
|
|
96
|
+
Proxy.prototype.startListeners = function () {
|
|
97
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
98
|
+
var _this = this;
|
|
99
|
+
return __generator(this, function (_a) {
|
|
100
|
+
return [2 /*return*/, new Promise(function (resolve) {
|
|
101
|
+
var port = _this.config.port || Globals_1.default.Listener_HTTP_DefaultPort;
|
|
102
|
+
console.log("[Proxy] - [STARTING] - v.".concat(package_json_1.version, " - :").concat(port));
|
|
103
|
+
// Create Server
|
|
104
|
+
_this.listener = (0, http_1.createServer)(_this.app);
|
|
105
|
+
// Set defaults
|
|
106
|
+
_this.listener.setTimeout(_this.config.timeout || Globals_1.default.Listener_HTTP_DefaultTimeout);
|
|
107
|
+
// Start Server
|
|
108
|
+
_this.listener.listen(port, function () {
|
|
109
|
+
console.log("[Proxy] - [STARTED]");
|
|
110
|
+
resolve();
|
|
111
|
+
});
|
|
112
|
+
})];
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
};
|
|
116
|
+
Proxy.prototype.stopListeners = function (err) {
|
|
117
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
118
|
+
return __generator(this, function (_a) {
|
|
119
|
+
if (this.stopping)
|
|
120
|
+
return [2 /*return*/];
|
|
121
|
+
this.stopping = true;
|
|
122
|
+
console.debug("[Proxy] - [STOPPING]");
|
|
123
|
+
this.listener.close(function (_err) {
|
|
124
|
+
if (err || _err)
|
|
125
|
+
console.log("[Proxy] - exit output:", err || _err);
|
|
126
|
+
console.log("[Proxy] - [STOPPED]");
|
|
127
|
+
process.exit(err || _err ? 1 : 0);
|
|
128
|
+
});
|
|
129
|
+
return [2 /*return*/];
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
};
|
|
133
|
+
/* routing */
|
|
134
|
+
Proxy.prototype.installRoutes = function () {
|
|
135
|
+
//Health check route -- This is a bypass route to only check if
|
|
136
|
+
//runtime proxy is working and responding to calls.
|
|
137
|
+
console.log("[Proxy] - [HEALTH-ROUTE] - ".concat(this.config.healthCheckRoute ||
|
|
138
|
+
Globals_1.default.Listener_HTTP_DefaultHealthCheckRoute));
|
|
139
|
+
this.app
|
|
140
|
+
.route(this.config.healthCheckRoute ||
|
|
141
|
+
Globals_1.default.Listener_HTTP_DefaultHealthCheckRoute)
|
|
142
|
+
.get(HealthHandler_1.default);
|
|
143
|
+
//Main route -- We use a wildcard route because is not the job of the runtime and neither
|
|
144
|
+
//the task to deny/constrain routes that invoked this task; all the job is done by the
|
|
145
|
+
//load balancer and we just foward everything we have to the function.
|
|
146
|
+
this.app
|
|
147
|
+
.route(Globals_1.default.Listener_HTTP_ProxyRoute)
|
|
148
|
+
.all((0, GenericHandler_1.default)(this.serverlessHandler));
|
|
149
|
+
};
|
|
150
|
+
return Proxy;
|
|
151
|
+
}());
|
|
152
|
+
exports.default = Proxy;
|
|
153
|
+
//# sourceMappingURL=Proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Proxy.js","sourceRoot":"","sources":["../../../../../src/Server/lib/container/Proxy.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6BAAyD;AAEzD,6BAAuB;AACvB,iCAAkC;AAGlC,mDAA6C;AAC7C,iDAA2C;AAC3C,yDAAgE;AAChE,4CAAsC;AAGtC;IAME,eACE,MAAoB,EACpB,iBAAkD;;QAElD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAA;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAA;QAC1C,IAAI,CAAC,GAAG,GAAG,OAAO,EAAE,CAAA;QACpB,IAAI,CAAC,GAAG,CAAC,GAAG,CACV,IAAA,cAAI,EACF,IAAI,CAAC,MAAM,CAAC,IAAI;YACd,CAAC,CAAC;gBACE,OAAO,EAAE;oBACP,MAAM,EAAE,MAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,0CAAE,MAAM;oBACjC,cAAc,EAAE,MAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,0CAAE,OAAO;oBAC1C,WAAW,EAAE,CAAC,CAAC,CAAA,MAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,0CAAE,gBAAgB,CAAA;iBACnD;aACF;YACH,CAAC,CAAC,EAAE,CACP,CACF,CAAA;QAED,6EAA6E;QAC7E,iFAAiF;QACjF,gFAAgF;QAChF,mFAAmF;QACnF,mBAAmB;QACnB,kDAAkD;QAClD,gDAAgD;IAClD,CAAC;IACK,oBAAI,GAAV;;;;4BACE,qBAAM,IAAI,CAAC,cAAc,EAAE,EAAA;;wBAA3B,SAA2B,CAAA;wBAC3B,IAAI,CAAC,aAAa,EAAE,CAAA;;;;;KACrB;IACK,sBAAM,GAAZ,UAAa,GAAG;;;;4BACd,qBAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAA;;wBAA7B,SAA6B,CAAA;;;;;KAC9B;IACD,eAAe;IACD,8BAAc,GAA5B;;;;gBACE,sBAAO,IAAI,OAAO,CAAC,UAAC,OAAO;wBACzB,IAAM,IAAI,GAAG,KAAI,CAAC,MAAM,CAAC,IAAI,IAAI,iBAAO,CAAC,yBAAyB,CAAA;wBAClE,OAAO,CAAC,GAAG,CAAC,mCAA4B,sBAAU,iBAAO,IAAI,CAAE,CAAC,CAAA;wBAChE,gBAAgB;wBAChB,KAAI,CAAC,QAAQ,GAAG,IAAA,mBAAY,EAAC,KAAI,CAAC,GAAG,CAAC,CAAA;wBACtC,eAAe;wBACf,KAAI,CAAC,QAAQ,CAAC,UAAU,CACtB,KAAI,CAAC,MAAM,CAAC,OAAO,IAAI,iBAAO,CAAC,4BAA4B,CAC5D,CAAA;wBACD,eAAe;wBACf,KAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE;4BACzB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;4BAClC,OAAO,EAAE,CAAA;wBACX,CAAC,CAAC,CAAA;oBACJ,CAAC,CAAC,EAAA;;;KACH;IACa,6BAAa,GAA3B,UAA4B,GAAG;;;gBAC7B,IAAI,IAAI,CAAC,QAAQ;oBAAE,sBAAM;gBACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;gBACpB,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;gBACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAC,IAAI;oBACvB,IAAI,GAAG,IAAI,IAAI;wBAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,GAAG,IAAI,IAAI,CAAC,CAAA;oBACnE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;oBAClC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;gBACnC,CAAC,CAAC,CAAA;;;;KACH;IACD,aAAa;IACL,6BAAa,GAArB;QACE,+DAA+D;QAC/D,mDAAmD;QACnD,OAAO,CAAC,GAAG,CACT,qCACE,IAAI,CAAC,MAAM,CAAC,gBAAgB;YAC5B,iBAAO,CAAC,qCAAqC,CAC7C,CACH,CAAA;QACD,IAAI,CAAC,GAAG;aACL,KAAK,CACJ,IAAI,CAAC,MAAM,CAAC,gBAAgB;YAC1B,iBAAO,CAAC,qCAAqC,CAChD;aACA,GAAG,CAAC,uBAAa,CAAC,CAAA;QACrB,yFAAyF;QACzF,sFAAsF;QACtF,sEAAsE;QACtE,IAAI,CAAC,GAAG;aACL,KAAK,CAAC,iBAAO,CAAC,wBAAwB,CAAC;aACvC,GAAG,CAAC,IAAA,wBAAc,EAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAChD,CAAC;IACH,YAAC;AAAD,CAAC,AA9FD,IA8FC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function parseMultiValueHeaders(rawHeaders: any): any;
|
|
2
|
+
export declare function parseMultiValueQueryStringParameters(url: any): any;
|
|
3
|
+
export declare function parseQueryStringParameters(url: any): {
|
|
4
|
+
[k: string]: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function nullIfEmpty(obj: any): any;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __values = (this && this.__values) || function(o) {
|
|
3
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
4
|
+
if (m) return m.call(o);
|
|
5
|
+
if (o && typeof o.length === "number") return {
|
|
6
|
+
next: function () {
|
|
7
|
+
if (o && i >= o.length) o = void 0;
|
|
8
|
+
return { value: o && o[i++], done: !o };
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
12
|
+
};
|
|
13
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
14
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
15
|
+
if (!m) return o;
|
|
16
|
+
var i = m.call(o), r, ar = [], e;
|
|
17
|
+
try {
|
|
18
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
19
|
+
}
|
|
20
|
+
catch (error) { e = { error: error }; }
|
|
21
|
+
finally {
|
|
22
|
+
try {
|
|
23
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
24
|
+
}
|
|
25
|
+
finally { if (e) throw e.error; }
|
|
26
|
+
}
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.nullIfEmpty = exports.parseQueryStringParameters = exports.parseMultiValueQueryStringParameters = exports.parseMultiValueHeaders = void 0;
|
|
31
|
+
var unflatten_1 = require("unflatten");
|
|
32
|
+
// https://aws.amazon.com/blogs/compute/support-for-multi-value-parameters-in-amazon-api-gateway/
|
|
33
|
+
// (rawHeaders: Array<string>): { [string]: Array<string> }
|
|
34
|
+
function parseMultiValueHeaders(rawHeaders) {
|
|
35
|
+
var e_1, _a;
|
|
36
|
+
if (rawHeaders.length === 0)
|
|
37
|
+
return null;
|
|
38
|
+
//
|
|
39
|
+
var map = new Map();
|
|
40
|
+
var unflattened = (0, unflatten_1.default)(rawHeaders, 2);
|
|
41
|
+
try {
|
|
42
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
43
|
+
for (var _b = __values(Object.keys(unflattened)), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
44
|
+
var key = _c.value;
|
|
45
|
+
var item = map.get(key);
|
|
46
|
+
if (item)
|
|
47
|
+
item.push(unflattened[key]);
|
|
48
|
+
else
|
|
49
|
+
map.set(key, [unflattened[key]]);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
53
|
+
finally {
|
|
54
|
+
try {
|
|
55
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
56
|
+
}
|
|
57
|
+
finally { if (e_1) throw e_1.error; }
|
|
58
|
+
}
|
|
59
|
+
return Object.fromEntries(map);
|
|
60
|
+
}
|
|
61
|
+
exports.parseMultiValueHeaders = parseMultiValueHeaders;
|
|
62
|
+
// https://aws.amazon.com/blogs/compute/support-for-multi-value-parameters-in-amazon-api-gateway/
|
|
63
|
+
// [ [ 'petType', 'dog' ], [ 'petType', 'fish' ] ]
|
|
64
|
+
// => { petType: [ 'dog', 'fish' ] },
|
|
65
|
+
function parseMultiValueQueryStringParameters(url) {
|
|
66
|
+
var e_2, _a;
|
|
67
|
+
// dummy placeholder url for the WHATWG URL constructor
|
|
68
|
+
// https://github.com/nodejs/node/issues/12682
|
|
69
|
+
var searchParams = new URL(url, "http://example").searchParams;
|
|
70
|
+
//
|
|
71
|
+
if (Array.from(searchParams).length === 0)
|
|
72
|
+
return null;
|
|
73
|
+
var map = new Map();
|
|
74
|
+
try {
|
|
75
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
76
|
+
for (var searchParams_1 = __values(searchParams), searchParams_1_1 = searchParams_1.next(); !searchParams_1_1.done; searchParams_1_1 = searchParams_1.next()) {
|
|
77
|
+
var _b = __read(searchParams_1_1.value, 2), key = _b[0], value = _b[1];
|
|
78
|
+
var item = map.get(key);
|
|
79
|
+
if (item)
|
|
80
|
+
item.push(value);
|
|
81
|
+
else
|
|
82
|
+
map.set(key, [value]);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
86
|
+
finally {
|
|
87
|
+
try {
|
|
88
|
+
if (searchParams_1_1 && !searchParams_1_1.done && (_a = searchParams_1.return)) _a.call(searchParams_1);
|
|
89
|
+
}
|
|
90
|
+
finally { if (e_2) throw e_2.error; }
|
|
91
|
+
}
|
|
92
|
+
return Object.fromEntries(map);
|
|
93
|
+
}
|
|
94
|
+
exports.parseMultiValueQueryStringParameters = parseMultiValueQueryStringParameters;
|
|
95
|
+
function parseQueryStringParameters(url) {
|
|
96
|
+
// dummy placeholder url for the WHATWG URL constructor
|
|
97
|
+
// https://github.com/nodejs/node/issues/12682
|
|
98
|
+
var searchParams = new URL(url, "http://example").searchParams;
|
|
99
|
+
if (Array.from(searchParams).length === 0)
|
|
100
|
+
return null;
|
|
101
|
+
return Object.fromEntries(searchParams);
|
|
102
|
+
}
|
|
103
|
+
exports.parseQueryStringParameters = parseQueryStringParameters;
|
|
104
|
+
//
|
|
105
|
+
function nullIfEmpty(obj) {
|
|
106
|
+
return obj && (Object.keys(obj).length > 0 ? obj : null);
|
|
107
|
+
}
|
|
108
|
+
exports.nullIfEmpty = nullIfEmpty;
|
|
109
|
+
//# sourceMappingURL=Utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../../../src/Server/lib/container/Utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAiC;AACjC,iGAAiG;AACjG,2DAA2D;AAC3D,SAAgB,sBAAsB,CAAC,UAAU;;IAC/C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACxC,EAAE;IACF,IAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;IACrB,IAAM,WAAW,GAAG,IAAA,mBAAS,EAAC,UAAU,EAAE,CAAC,CAAC,CAAA;;QAC5C,gDAAgD;QAChD,KAAkB,IAAA,KAAA,SAAA,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA,gBAAA,4BAAE;YAAvC,IAAM,GAAG,WAAA;YACZ,IAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACzB,IAAI,IAAI;gBAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAA;;gBAChC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;SACtC;;;;;;;;;IACD,OAAO,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;AAChC,CAAC;AAZD,wDAYC;AACD,iGAAiG;AACjG,kDAAkD;AAClD,qCAAqC;AACrC,SAAgB,oCAAoC,CAAC,GAAG;;IACtD,uDAAuD;IACvD,8CAA8C;IACtC,IAAA,YAAY,GAAK,IAAI,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC,aAAnC,CAAmC;IACvD,EAAE;IACF,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACtD,IAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;;QACrB,gDAAgD;QAChD,KAA2B,IAAA,iBAAA,SAAA,YAAY,CAAA,0CAAA,oEAAE;YAA9B,IAAA,KAAA,iCAAY,EAAX,GAAG,QAAA,EAAE,KAAK,QAAA;YACpB,IAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACzB,IAAI,IAAI;gBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;;gBACrB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;SAC3B;;;;;;;;;IACD,OAAO,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;AAChC,CAAC;AAdD,oFAcC;AACD,SAAgB,0BAA0B,CAAC,GAAG;IAC5C,uDAAuD;IACvD,8CAA8C;IACtC,IAAA,YAAY,GAAK,IAAI,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC,aAAnC,CAAmC;IACvD,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACtD,OAAO,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;AACzC,CAAC;AAND,gEAMC;AACD,EAAE;AACF,SAAgB,WAAW,CAAC,GAAG;IAC7B,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AAC1D,CAAC;AAFD,kCAEC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var zod_1 = require("zod");
|
|
4
|
+
var Response_1 = require("../API/Response");
|
|
5
|
+
var Globals_1 = require("../Globals");
|
|
6
|
+
var Validator = /** @class */ (function () {
|
|
7
|
+
function Validator() {
|
|
8
|
+
}
|
|
9
|
+
Validator.validateSchema = function (data, schema) {
|
|
10
|
+
var error, validatedInput;
|
|
11
|
+
// Validate body against known zod schema
|
|
12
|
+
try {
|
|
13
|
+
validatedInput = schema.parse(data);
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
if (err instanceof zod_1.z.ZodError) {
|
|
17
|
+
error = err.issues
|
|
18
|
+
.map(function (v) {
|
|
19
|
+
return "".concat(v.code, " - ").concat(v.message, " ").concat(v.path);
|
|
20
|
+
})
|
|
21
|
+
.join(", ");
|
|
22
|
+
}
|
|
23
|
+
else if (err.message)
|
|
24
|
+
error = err.message;
|
|
25
|
+
else
|
|
26
|
+
error = "Unknown validation error!";
|
|
27
|
+
}
|
|
28
|
+
// Error validation
|
|
29
|
+
if (!validatedInput || error) {
|
|
30
|
+
return Response_1.default.BadRequestResponse(Globals_1.default.ErrorResponseValidationFail, Globals_1.default.ErrorCode_InvalidInput);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
return Validator;
|
|
37
|
+
}());
|
|
38
|
+
exports.default = Validator;
|
|
39
|
+
//# sourceMappingURL=Validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Validator.js","sourceRoot":"","sources":["../../../src/Validation/Validator.ts"],"names":[],"mappings":";;AAAA,2BAAuB;AAEvB,4CAAsC;AACtC,sCAAgC;AAEhC;IAAA;IA6BA,CAAC;IA5Be,wBAAc,GAA5B,UACE,IAAS,EACT,MAAwB;QAExB,IAAI,KAAK,EAAE,cAAc,CAAA;QACzB,yCAAyC;QACzC,IAAI;YACF,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAkB,CAAA;SACrD;QAAC,OAAO,GAAqB,EAAE;YAC9B,IAAI,GAAG,YAAY,OAAC,CAAC,QAAQ,EAAE;gBAC7B,KAAK,GAAG,GAAG,CAAC,MAAM;qBACf,GAAG,CAAC,UAAC,CAAC;oBACL,OAAO,UAAG,CAAC,CAAC,IAAI,gBAAM,CAAC,CAAC,OAAO,cAAI,CAAC,CAAC,IAAI,CAAE,CAAA;gBAC7C,CAAC,CAAC;qBACD,IAAI,CAAC,IAAI,CAAC,CAAA;aACd;iBAAM,IAAI,GAAG,CAAC,OAAO;gBAAE,KAAK,GAAG,GAAG,CAAC,OAAO,CAAA;;gBACtC,KAAK,GAAG,2BAA2B,CAAA;SACzC;QACD,mBAAmB;QACnB,IAAI,CAAC,cAAc,IAAI,KAAK,EAAE;YAC5B,OAAO,kBAAQ,CAAC,kBAAkB,CAChC,iBAAO,CAAC,2BAA2B,EACnC,iBAAO,CAAC,sBAAsB,CAC/B,CAAA;SACF;aAAM;YACL,OAAO,IAAI,CAAA;SACZ;IACH,CAAC;IACH,gBAAC;AAAD,CAAC,AA7BD,IA6BC"}
|
package/index.ts
CHANGED
|
@@ -3,21 +3,23 @@ import Utils from "./src/API/Utils"
|
|
|
3
3
|
import EventProcessor from "./src/BaseEvent/EventProcessor"
|
|
4
4
|
import Process from "./src/BaseEvent/Process"
|
|
5
5
|
import Transaction from "./src/BaseEvent/Transaction"
|
|
6
|
+
import Configuration from "./src/Config/Configuration"
|
|
6
7
|
import Crypto from "./src/Crypto/Crypto"
|
|
7
8
|
import Mailer from "./src/Mailer/Mailer"
|
|
8
|
-
import
|
|
9
|
+
import Router from "./src/Server/Router"
|
|
9
10
|
|
|
10
11
|
export {
|
|
11
|
-
//Base Events
|
|
12
|
+
// Base Events
|
|
12
13
|
Transaction,
|
|
13
14
|
Process,
|
|
14
15
|
EventProcessor,
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
Router,
|
|
17
|
+
// Externally initialized clients
|
|
17
18
|
Mailer,
|
|
18
19
|
Crypto,
|
|
19
|
-
|
|
20
|
+
Configuration,
|
|
21
|
+
// Responses
|
|
20
22
|
Response,
|
|
21
|
-
//Helpers
|
|
23
|
+
// Helpers
|
|
22
24
|
Utils,
|
|
23
25
|
}
|
package/package.json
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@creator.co/wapi",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0-alpha2",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"type": "commonjs",
|
|
8
8
|
"scripts": {
|
|
9
|
-
"prepare": "npm run build",
|
|
10
9
|
"build": "npm run lint && tsc --build",
|
|
11
10
|
"clean": "tsc --build --clean",
|
|
12
11
|
"lint": "eslint . --ext .ts --fix"
|
|
@@ -14,22 +13,34 @@
|
|
|
14
13
|
"author": "",
|
|
15
14
|
"license": "ISC",
|
|
16
15
|
"dependencies": {
|
|
16
|
+
"@aws-sdk/client-secrets-manager": "^3.427.0",
|
|
17
17
|
"@aws-sdk/client-ses": "^3.414.0",
|
|
18
18
|
"@aws-sdk/client-sns": "^3.398.0",
|
|
19
|
+
"@aws-sdk/client-ssm": "^3.427.0",
|
|
19
20
|
"@aws-sdk/credential-provider-node": "^3.414.0",
|
|
20
21
|
"@types/email-templates": "^10.0.1",
|
|
21
22
|
"@types/nodemailer": "^6.4.10",
|
|
22
23
|
"abind": "^1.0.5",
|
|
24
|
+
"cors": "^2.8.5",
|
|
25
|
+
"cuid": "^3.0.0",
|
|
26
|
+
"dotenv": "^16.3.1",
|
|
23
27
|
"email-templates": "^11.1.1",
|
|
28
|
+
"express": "^4.18.2",
|
|
24
29
|
"json-stringify-safe": "^5.0.1",
|
|
30
|
+
"node-cache": "^5.1.2",
|
|
31
|
+
"parse-duration": "^1.1.0",
|
|
25
32
|
"sha1": "^1.1.1",
|
|
26
|
-
"stack-trace": "0.0.10"
|
|
33
|
+
"stack-trace": "0.0.10",
|
|
34
|
+
"unflatten": "^1.0.4",
|
|
35
|
+
"zod": "^3.22.4"
|
|
27
36
|
},
|
|
28
37
|
"devDependencies": {
|
|
29
38
|
"@types/aws-lambda": "^8.10.119",
|
|
39
|
+
"@types/express": "^4.17.19",
|
|
30
40
|
"@types/node": "^20.5.7",
|
|
31
41
|
"@typescript-eslint/eslint-plugin": "^6.5.0",
|
|
32
42
|
"@typescript-eslint/parser": "^6.5.0",
|
|
43
|
+
"aws-lambda": "^1.0.7",
|
|
33
44
|
"eslint": "^8.48.0",
|
|
34
45
|
"eslint-config-prettier": "^9.0.0",
|
|
35
46
|
"eslint-plugin-import": "^2.28.1",
|
package/src/API/Request.ts
CHANGED
|
@@ -1,22 +1,16 @@
|
|
|
1
1
|
import type { Context, APIGatewayEvent } from "aws-lambda"
|
|
2
2
|
|
|
3
3
|
import Utils from "./Utils"
|
|
4
|
-
import
|
|
4
|
+
import Logger from "../Logger/Logger"
|
|
5
5
|
//
|
|
6
|
-
export default class Request {
|
|
6
|
+
export default class Request<T> {
|
|
7
7
|
private requestEvent: APIGatewayEvent
|
|
8
8
|
private context: Context
|
|
9
|
-
|
|
10
|
-
constructor(
|
|
11
|
-
requestEvent: APIGatewayEvent,
|
|
12
|
-
context: Context,
|
|
13
|
-
transaction: Transaction,
|
|
14
|
-
) {
|
|
9
|
+
constructor(requestEvent: APIGatewayEvent, context: Context, logger: Logger) {
|
|
15
10
|
this.requestEvent = requestEvent
|
|
16
|
-
this.transaction = transaction
|
|
17
11
|
this.context = context
|
|
18
|
-
|
|
19
|
-
|
|
12
|
+
logger.debug("Request info:", JSON.stringify(requestEvent))
|
|
13
|
+
logger.debug("Request context:", JSON.stringify(context))
|
|
20
14
|
}
|
|
21
15
|
//query
|
|
22
16
|
public containsQueryParam(paramName: string): boolean {
|
|
@@ -55,7 +49,7 @@ export default class Request {
|
|
|
55
49
|
)
|
|
56
50
|
}
|
|
57
51
|
//body
|
|
58
|
-
public getBody():
|
|
52
|
+
public getBody(): T | null {
|
|
59
53
|
let b: any = null
|
|
60
54
|
try {
|
|
61
55
|
b = this.requestEvent.body
|
package/src/API/Response.ts
CHANGED
|
@@ -3,12 +3,13 @@ import type { Context, SQSBatchResponse, SQSEvent } from "aws-lambda"
|
|
|
3
3
|
import Transaction, { TransactionConfig } from "./Transaction"
|
|
4
4
|
import Response from "../API/Response"
|
|
5
5
|
import Globals from "../Globals"
|
|
6
|
-
|
|
6
|
+
|
|
7
|
+
// Handler
|
|
7
8
|
export type EventProcessorExecution = (
|
|
8
9
|
transaction: Transaction,
|
|
9
10
|
recordContent: string | object,
|
|
10
11
|
) => Promise<Response | SQSBatchResponse>
|
|
11
|
-
|
|
12
|
+
|
|
12
13
|
export default class EventProcessor {
|
|
13
14
|
private readonly _allowFailure: boolean
|
|
14
15
|
private readonly _apiConfig: TransactionConfig
|
package/src/BaseEvent/Process.ts
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { TransactionConfig } from "./Transaction"
|
|
2
|
+
import Logger from "../Logger/Logger"
|
|
3
|
+
import Publisher from "../Publisher/Publisher"
|
|
4
|
+
|
|
5
|
+
// Config
|
|
6
|
+
export type ProcessConfig = Omit<
|
|
7
|
+
TransactionConfig,
|
|
8
|
+
"throwOnErrors" | "syncReturn"
|
|
9
|
+
>
|
|
10
|
+
|
|
9
11
|
export default class Process {
|
|
10
12
|
private _interval: number
|
|
11
13
|
//
|
|
12
14
|
public readonly logger: Logger
|
|
13
|
-
public readonly request: Request
|
|
14
15
|
public readonly publisher: Publisher
|
|
15
16
|
constructor(config: ProcessConfig, interval: number) {
|
|
16
17
|
this._interval = interval
|
|
@@ -44,7 +45,7 @@ export default class Process {
|
|
|
44
45
|
} catch (e) {
|
|
45
46
|
/*EXECUTION FAIL*/
|
|
46
47
|
this.logger.error(
|
|
47
|
-
"Exception when executing main
|
|
48
|
+
"Exception when executing main process code. Rolling back DB!",
|
|
48
49
|
)
|
|
49
50
|
this.logger.exception(e)
|
|
50
51
|
//Rollback DB
|
|
@@ -1,26 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import type {
|
|
2
|
+
APIGatewayEvent,
|
|
3
|
+
Context,
|
|
4
|
+
SQSBatchResponse,
|
|
5
|
+
SQSEvent,
|
|
6
|
+
} from "aws-lambda"
|
|
3
7
|
|
|
4
8
|
import Request from "../API/Request"
|
|
5
9
|
import Response from "../API/Response"
|
|
6
10
|
import Globals from "../Globals"
|
|
7
|
-
//Comps
|
|
8
11
|
import Logger, { LoggerConfig } from "../Logger/Logger"
|
|
9
12
|
import Publisher, { PublisherConfig } from "../Publisher/Publisher"
|
|
10
|
-
|
|
11
|
-
//
|
|
13
|
+
|
|
14
|
+
// Request
|
|
12
15
|
export type TransactionExecution<T> = (
|
|
13
16
|
transaction: T,
|
|
14
17
|
) => Promise<Response | SQSBatchResponse>
|
|
15
|
-
//
|
|
18
|
+
// Config
|
|
16
19
|
export type TransactionConfig = {
|
|
17
20
|
throwOnErrors?: boolean
|
|
18
21
|
syncReturn?: boolean
|
|
22
|
+
//
|
|
19
23
|
logger?: LoggerConfig
|
|
20
24
|
publisher?: PublisherConfig
|
|
21
25
|
}
|
|
22
|
-
|
|
23
|
-
export default class Transaction {
|
|
26
|
+
|
|
27
|
+
export default class Transaction<T = object> {
|
|
24
28
|
private _event: any
|
|
25
29
|
private _context: Context
|
|
26
30
|
private _response: Response | null | SQSBatchResponse
|
|
@@ -28,34 +32,38 @@ export default class Transaction {
|
|
|
28
32
|
private _retrowErrors: boolean
|
|
29
33
|
//
|
|
30
34
|
public readonly logger: Logger
|
|
31
|
-
public readonly request: Request
|
|
35
|
+
public readonly request: Request<T>
|
|
32
36
|
public readonly publisher: Publisher
|
|
33
37
|
public responseProxy: (response: Response) => Promise<void>
|
|
34
38
|
//
|
|
35
|
-
constructor(
|
|
39
|
+
constructor(
|
|
40
|
+
event: APIGatewayEvent | SQSEvent,
|
|
41
|
+
context: Context,
|
|
42
|
+
config?: TransactionConfig,
|
|
43
|
+
) {
|
|
36
44
|
const transactionId = context.awsRequestId
|
|
37
45
|
? context.awsRequestId
|
|
38
|
-
: event.requestContext
|
|
39
|
-
? event.requestContext.requestId
|
|
46
|
+
: (<APIGatewayEvent>event).requestContext
|
|
47
|
+
? (<APIGatewayEvent>event).requestContext.requestId
|
|
40
48
|
: "unknown"
|
|
41
49
|
// transaction ctx
|
|
42
50
|
this._event = event
|
|
43
51
|
this._context = context
|
|
44
52
|
this._response = null
|
|
45
|
-
//
|
|
53
|
+
// when set, this will be called with the response context right before calling the context suceed/fail - useful for writing the resp for example.
|
|
46
54
|
this.responseProxy = null
|
|
47
55
|
// transaction flags
|
|
48
56
|
this._syncReturn = !!config?.syncReturn
|
|
49
57
|
this._retrowErrors = !!config?.throwOnErrors /* retrow internal errors */
|
|
50
58
|
// components
|
|
51
59
|
this.logger = new Logger(config?.logger, transactionId)
|
|
52
|
-
this.request = new Request(this._event, this._context, this)
|
|
60
|
+
this.request = new Request<T>(this._event, this._context, this.logger)
|
|
53
61
|
this.publisher = new Publisher(config?.publisher)
|
|
54
62
|
}
|
|
55
63
|
|
|
56
64
|
//Main interface
|
|
57
65
|
async execute(
|
|
58
|
-
executionFunc: TransactionExecution<Transaction
|
|
66
|
+
executionFunc: TransactionExecution<Transaction<T>>,
|
|
59
67
|
): Promise<Response | null | SQSBatchResponse> {
|
|
60
68
|
await this._executeLoggerFlush(async () => {
|
|
61
69
|
await this._executeDBTransactions(async () => {
|
|
@@ -69,7 +77,7 @@ export default class Transaction {
|
|
|
69
77
|
}
|
|
70
78
|
//Executions
|
|
71
79
|
async _execute(
|
|
72
|
-
executionFunc: TransactionExecution<Transaction
|
|
80
|
+
executionFunc: TransactionExecution<Transaction<T>>,
|
|
73
81
|
): Promise<boolean> {
|
|
74
82
|
let executionFailed = true //failed til we say no!
|
|
75
83
|
//safe execution handler
|