@creator.co/wapi 1.2.2 → 1.2.4

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.
Files changed (135) hide show
  1. package/.eslintrc.cjs +29 -22
  2. package/.github/workflows/npmpublish.yml +2 -5
  3. package/.github/workflows/prs.yml +1 -1
  4. package/README.md +1 -3
  5. package/dist/index.d.ts +11 -0
  6. package/dist/index.js +24 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/jest.config.d.ts +3 -0
  9. package/dist/jest.config.js +34 -0
  10. package/dist/jest.config.js.map +1 -0
  11. package/dist/package.json +64 -0
  12. package/dist/src/API/Request.d.ts +140 -0
  13. package/dist/src/API/Request.js +182 -0
  14. package/dist/src/API/Request.js.map +1 -0
  15. package/dist/src/API/Response.d.ts +256 -0
  16. package/dist/src/API/Response.js +398 -0
  17. package/dist/src/API/Response.js.map +1 -0
  18. package/dist/src/API/Utils.d.ts +63 -0
  19. package/dist/src/API/Utils.js +104 -0
  20. package/dist/src/API/Utils.js.map +1 -0
  21. package/dist/src/BaseEvent/EventProcessor.d.ts +81 -0
  22. package/dist/src/BaseEvent/EventProcessor.js +182 -0
  23. package/dist/src/BaseEvent/EventProcessor.js.map +1 -0
  24. package/dist/src/BaseEvent/Process.d.ts +74 -0
  25. package/dist/src/BaseEvent/Process.js +142 -0
  26. package/dist/src/BaseEvent/Process.js.map +1 -0
  27. package/dist/src/BaseEvent/Transaction.d.ts +29 -0
  28. package/dist/src/BaseEvent/Transaction.js +244 -0
  29. package/dist/src/BaseEvent/Transaction.js.map +1 -0
  30. package/dist/src/Config/Configuration.d.ts +131 -0
  31. package/dist/src/Config/Configuration.js +153 -0
  32. package/dist/src/Config/Configuration.js.map +1 -0
  33. package/dist/src/Config/EnvironmentVar.d.ts +101 -0
  34. package/dist/src/Config/EnvironmentVar.js +213 -0
  35. package/dist/src/Config/EnvironmentVar.js.map +1 -0
  36. package/dist/src/Crypto/Crypto.d.ts +57 -0
  37. package/dist/src/Crypto/Crypto.js +126 -0
  38. package/dist/src/Crypto/Crypto.js.map +1 -0
  39. package/dist/src/Crypto/JWT.d.ts +64 -0
  40. package/dist/src/Crypto/JWT.js +74 -0
  41. package/dist/src/Crypto/JWT.js.map +1 -0
  42. package/dist/src/Globals.d.ts +161 -0
  43. package/dist/src/Globals.js +173 -0
  44. package/dist/src/Globals.js.map +1 -0
  45. package/dist/src/Logger/Logger.d.ts +180 -0
  46. package/dist/src/Logger/Logger.js +412 -0
  47. package/dist/src/Logger/Logger.js.map +1 -0
  48. package/dist/src/Mailer/Mailer.d.ts +107 -0
  49. package/dist/src/Mailer/Mailer.js +313 -0
  50. package/dist/src/Mailer/Mailer.js.map +1 -0
  51. package/dist/src/Publisher/Publisher.d.ts +47 -0
  52. package/dist/src/Publisher/Publisher.js +141 -0
  53. package/dist/src/Publisher/Publisher.js.map +1 -0
  54. package/dist/src/Server/RouteResolver.d.ts +41 -0
  55. package/dist/src/Server/RouteResolver.js +135 -0
  56. package/dist/src/Server/RouteResolver.js.map +1 -0
  57. package/dist/src/Server/Router.d.ts +104 -0
  58. package/dist/src/Server/Router.js +45 -0
  59. package/dist/src/Server/Router.js.map +1 -0
  60. package/dist/src/Server/lib/ContainerServer.d.ts +58 -0
  61. package/dist/src/Server/lib/ContainerServer.js +143 -0
  62. package/dist/src/Server/lib/ContainerServer.js.map +1 -0
  63. package/dist/src/Server/lib/Server.d.ts +60 -0
  64. package/dist/src/Server/lib/Server.js +137 -0
  65. package/dist/src/Server/lib/Server.js.map +1 -0
  66. package/dist/src/Server/lib/container/GenericHandler.d.ts +4 -0
  67. package/dist/src/Server/lib/container/GenericHandler.js +138 -0
  68. package/dist/src/Server/lib/container/GenericHandler.js.map +1 -0
  69. package/dist/src/Server/lib/container/GenericHandlerEvent.d.ts +67 -0
  70. package/dist/src/Server/lib/container/GenericHandlerEvent.js +189 -0
  71. package/dist/src/Server/lib/container/GenericHandlerEvent.js.map +1 -0
  72. package/dist/src/Server/lib/container/HealthHandler.d.ts +3 -0
  73. package/dist/src/Server/lib/container/HealthHandler.js +45 -0
  74. package/dist/src/Server/lib/container/HealthHandler.js.map +1 -0
  75. package/dist/src/Server/lib/container/Proxy.d.ts +95 -0
  76. package/dist/src/Server/lib/container/Proxy.js +201 -0
  77. package/dist/src/Server/lib/container/Proxy.js.map +1 -0
  78. package/dist/src/Server/lib/container/Utils.d.ts +18 -0
  79. package/dist/src/Server/lib/container/Utils.js +84 -0
  80. package/dist/src/Server/lib/container/Utils.js.map +1 -0
  81. package/dist/src/Validation/Validator.d.ts +21 -0
  82. package/dist/src/Validation/Validator.js +48 -0
  83. package/dist/src/Validation/Validator.js.map +1 -0
  84. package/index.ts +12 -10
  85. package/jest.config.ts +14 -21
  86. package/package.json +3 -3
  87. package/src/API/Request.ts +17 -35
  88. package/src/API/Response.ts +24 -42
  89. package/src/API/Utils.ts +5 -7
  90. package/src/BaseEvent/EventProcessor.ts +16 -24
  91. package/src/BaseEvent/Process.ts +7 -12
  92. package/src/BaseEvent/Transaction.ts +25 -43
  93. package/src/Config/Configuration.ts +8 -14
  94. package/src/Config/EnvironmentVar.ts +10 -20
  95. package/src/Crypto/Crypto.ts +10 -10
  96. package/src/Crypto/JWT.ts +4 -10
  97. package/src/Globals.ts +19 -25
  98. package/src/Logger/Logger.ts +36 -51
  99. package/src/Mailer/Mailer.ts +19 -31
  100. package/src/Publisher/Publisher.ts +7 -12
  101. package/src/Server/RouteResolver.ts +5 -6
  102. package/src/Server/Router.ts +7 -12
  103. package/src/Server/lib/ContainerServer.ts +5 -5
  104. package/src/Server/lib/Server.ts +26 -38
  105. package/src/Server/lib/container/GenericHandler.ts +8 -13
  106. package/src/Server/lib/container/GenericHandlerEvent.ts +21 -35
  107. package/src/Server/lib/container/HealthHandler.ts +2 -2
  108. package/src/Server/lib/container/Proxy.ts +26 -38
  109. package/src/Server/lib/container/Utils.ts +2 -2
  110. package/src/Validation/Validator.ts +6 -6
  111. package/tests/API/Request.test.ts +107 -111
  112. package/tests/API/Response.test.ts +86 -91
  113. package/tests/API/Utils.test.ts +64 -64
  114. package/tests/BaseEvent/EventProcessor.test.ts +68 -84
  115. package/tests/BaseEvent/Process.test.ts +11 -11
  116. package/tests/BaseEvent/Transaction.test.ts +44 -53
  117. package/tests/Config/Config.test.ts +50 -50
  118. package/tests/Config/EnvironmentVar.test.ts +50 -59
  119. package/tests/Crypto/Crypto.test.ts +20 -22
  120. package/tests/Crypto/JWT.test.ts +40 -40
  121. package/tests/Logger/Logger.test.ts +24 -36
  122. package/tests/Mailer/Mailer.test.ts +21 -29
  123. package/tests/Publisher/Publisher.test.ts +18 -18
  124. package/tests/Server/RouteResolver.test.ts +56 -59
  125. package/tests/Server/Router.test.ts +16 -16
  126. package/tests/Server/lib/ContainerServer.test.ts +83 -85
  127. package/tests/Server/lib/Server.test.ts +4 -4
  128. package/tests/Server/lib/container/GenericHandler.test.ts +31 -41
  129. package/tests/Server/lib/container/GenericHandlerEvent.test.ts +35 -36
  130. package/tests/Server/lib/container/HealthHandler.test.ts +7 -7
  131. package/tests/Server/lib/container/Proxy.test.ts +66 -79
  132. package/tests/Server/lib/container/Utils.test.ts +16 -17
  133. package/tests/Test.utils.ts +9 -9
  134. package/tests/Validation/Validator.test.ts +28 -40
  135. package/tests/main.test.ts +2 -2
@@ -0,0 +1,95 @@
1
+ import Server from './../Server';
2
+ import { RouterConfig } from '../../Router';
3
+ /**
4
+ * ${1:Description placeholder}
5
+ *
6
+ * @export
7
+ * @class Proxy
8
+ * @typedef {Proxy}
9
+ */
10
+ export default class Proxy {
11
+ /**
12
+ * ${1:Description placeholder}
13
+ *
14
+ * @private
15
+ * @type {boolean}
16
+ */
17
+ private stopping;
18
+ /**
19
+ * ${1:Description placeholder}
20
+ *
21
+ * @private
22
+ * @readonly
23
+ * @type {RouterConfig}
24
+ */
25
+ private readonly config;
26
+ /**
27
+ * ${1:Description placeholder}
28
+ *
29
+ * @private
30
+ * @readonly
31
+ * @type {express.Express}
32
+ */
33
+ private readonly app;
34
+ /**
35
+ * ${1:Description placeholder}
36
+ *
37
+ * @private
38
+ * @readonly
39
+ * @type {Server["handleServerlessEvent"]}
40
+ */
41
+ private readonly serverlessHandler;
42
+ /**
43
+ * ${1:Description placeholder}
44
+ *
45
+ * @private
46
+ * @type {HTTPServer}
47
+ */
48
+ private listener;
49
+ /**
50
+ * Creates an instance of Proxy.
51
+ *
52
+ * @constructor
53
+ * @param {RouterConfig} config
54
+ * @param {Server["handleServerlessEvent"]} serverlessHandler
55
+ */
56
+ constructor(config: RouterConfig, serverlessHandler: Server['handleServerlessEvent']);
57
+ /**
58
+ * ${1:Description placeholder}
59
+ *
60
+ * @async
61
+ * @returns {*}
62
+ */
63
+ load(): Promise<void>;
64
+ /**
65
+ * ${1:Description placeholder}
66
+ *
67
+ * @async
68
+ * @param {?*} [err]
69
+ * @returns {*}
70
+ */
71
+ unload(err?: any): Promise<void>;
72
+ /**
73
+ * ${1:Description placeholder}
74
+ *
75
+ * @private
76
+ * @async
77
+ * @returns {Promise<void>}
78
+ */
79
+ private startListeners;
80
+ /**
81
+ * ${1:Description placeholder}
82
+ *
83
+ * @private
84
+ * @async
85
+ * @param {?*} [err]
86
+ * @returns {unknown}
87
+ */
88
+ private stopListeners;
89
+ /**
90
+ * ${1:Description placeholder}
91
+ *
92
+ * @private
93
+ */
94
+ private installRoutes;
95
+ }
@@ -0,0 +1,201 @@
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 = 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 Utils_1 = require("../../../API/Utils");
46
+ var Globals_1 = require("../../../Globals");
47
+ /**
48
+ * ${1:Description placeholder}
49
+ *
50
+ * @export
51
+ * @class Proxy
52
+ * @typedef {Proxy}
53
+ */
54
+ var Proxy = /** @class */ (function () {
55
+ /**
56
+ * Creates an instance of Proxy.
57
+ *
58
+ * @constructor
59
+ * @param {RouterConfig} config
60
+ * @param {Server["handleServerlessEvent"]} serverlessHandler
61
+ */
62
+ function Proxy(config, serverlessHandler) {
63
+ this.stopping = false;
64
+ this.config = config;
65
+ this.serverlessHandler = serverlessHandler;
66
+ this.app = express();
67
+ /* Opinionated Express configs */
68
+ this.app.use(express.json());
69
+ // apply cors config
70
+ var corsConfig = this.config.cors || Utils_1.default.parseObjectNullIfEmpty(process.env.CORS);
71
+ this.app.use(cors(corsConfig
72
+ ? {
73
+ origin: corsConfig.origin,
74
+ allowedHeaders: corsConfig.headers,
75
+ credentials: !!corsConfig.allowCredentials,
76
+ }
77
+ : {}));
78
+ // //This supposedly fix some 502 codes where nodejs socket would hang during
79
+ // //a request and if behind ALB, it would cause 502 codes. Had experiencied this
80
+ // //and 502 codes reduced dramastically, but still some appearances. Maybe this
81
+ // //is just a palliative work-around for the real issue; TODO: need to investigate
82
+ // //in the future.
83
+ // this.listener.listener.keepAliveTimeout = 120e3
84
+ // this.listener.listener.headersTimeout = 120e3
85
+ }
86
+ /**
87
+ * ${1:Description placeholder}
88
+ *
89
+ * @async
90
+ * @returns {*}
91
+ */
92
+ Proxy.prototype.load = function () {
93
+ return __awaiter(this, void 0, void 0, function () {
94
+ return __generator(this, function (_a) {
95
+ switch (_a.label) {
96
+ case 0: return [4 /*yield*/, this.startListeners()];
97
+ case 1:
98
+ _a.sent();
99
+ this.installRoutes();
100
+ return [2 /*return*/];
101
+ }
102
+ });
103
+ });
104
+ };
105
+ /**
106
+ * ${1:Description placeholder}
107
+ *
108
+ * @async
109
+ * @param {?*} [err]
110
+ * @returns {*}
111
+ */
112
+ Proxy.prototype.unload = function (err) {
113
+ return __awaiter(this, void 0, void 0, function () {
114
+ return __generator(this, function (_a) {
115
+ switch (_a.label) {
116
+ case 0: return [4 /*yield*/, this.stopListeners(err)];
117
+ case 1:
118
+ _a.sent();
119
+ return [2 /*return*/];
120
+ }
121
+ });
122
+ });
123
+ };
124
+ /* lifecycle */
125
+ /**
126
+ * ${1:Description placeholder}
127
+ *
128
+ * @private
129
+ * @async
130
+ * @returns {Promise<void>}
131
+ */
132
+ Proxy.prototype.startListeners = function () {
133
+ return __awaiter(this, void 0, void 0, function () {
134
+ var _this = this;
135
+ return __generator(this, function (_a) {
136
+ return [2 /*return*/, new Promise(function (resolve) {
137
+ var port = _this.config.port || Globals_1.default.Listener_HTTP_DefaultPort;
138
+ console.log("[Proxy] - [STARTING] - v.".concat(package_json_1.version, " - :").concat(port));
139
+ // Create Server
140
+ _this.listener = (0, http_1.createServer)(_this.app);
141
+ // Set defaults
142
+ _this.listener.setTimeout(_this.config.timeout || Globals_1.default.Listener_HTTP_DefaultTimeout);
143
+ // Start Server
144
+ _this.listener.listen(port, function () {
145
+ console.log("[Proxy] - [STARTED]");
146
+ resolve();
147
+ });
148
+ })];
149
+ });
150
+ });
151
+ };
152
+ /**
153
+ * ${1:Description placeholder}
154
+ *
155
+ * @private
156
+ * @async
157
+ * @param {?*} [err]
158
+ * @returns {unknown}
159
+ */
160
+ Proxy.prototype.stopListeners = function (err) {
161
+ return __awaiter(this, void 0, void 0, function () {
162
+ var _this = this;
163
+ return __generator(this, function (_a) {
164
+ if (this.stopping)
165
+ return [2 /*return*/];
166
+ this.stopping = true;
167
+ console.debug('[Proxy] - [STOPPING]');
168
+ return [2 /*return*/, new Promise(function (resolve) {
169
+ _this.listener.close(function (_err) {
170
+ if (err || _err)
171
+ console.log('[Proxy] - exit output:', err || _err);
172
+ console.log('[Proxy] - [STOPPED]');
173
+ process.exit(err || _err ? 1 : 0);
174
+ resolve(null);
175
+ });
176
+ })];
177
+ });
178
+ });
179
+ };
180
+ /* routing */
181
+ /**
182
+ * ${1:Description placeholder}
183
+ *
184
+ * @private
185
+ */
186
+ Proxy.prototype.installRoutes = function () {
187
+ //Health check route -- This is a bypass route to only check if
188
+ //runtime proxy is working and responding to calls.
189
+ console.log("[Proxy] - [HEALTH-ROUTE] - ".concat(this.config.healthCheckRoute || Globals_1.default.Listener_HTTP_DefaultHealthCheckRoute));
190
+ this.app
191
+ .route(this.config.healthCheckRoute || Globals_1.default.Listener_HTTP_DefaultHealthCheckRoute)
192
+ .get(HealthHandler_1.default);
193
+ //Main route -- We use a wildcard route because is not the job of the runtime and neither
194
+ //the task to deny/constrain routes that invoked this task; all the job is done by the
195
+ //load balancer and we just foward everything we have to the function.
196
+ this.app.route(Globals_1.default.Listener_HTTP_ProxyRoute).all((0, GenericHandler_1.default)(this.serverlessHandler));
197
+ };
198
+ return Proxy;
199
+ }());
200
+ exports.default = Proxy;
201
+ //# sourceMappingURL=Proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Proxy.js","sourceRoot":"","sources":["../../../../../src/Server/lib/container/Proxy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * ${1:Description placeholder}
3
+ *
4
+ * @export
5
+ * @param {string} url
6
+ * @returns {*}
7
+ */
8
+ export declare function parseMultiValueQueryStringParameters(url: string): any;
9
+ /**
10
+ * ${1:Description placeholder}
11
+ *
12
+ * @export
13
+ * @param {*} url
14
+ * @returns {*}
15
+ */
16
+ export declare function parseQueryStringParameters(url: any): {
17
+ [k: string]: string;
18
+ };
@@ -0,0 +1,84 @@
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.parseQueryStringParameters = exports.parseMultiValueQueryStringParameters = void 0;
31
+ /**
32
+ * ${1:Description placeholder}
33
+ *
34
+ * @export
35
+ * @param {string} url
36
+ * @returns {*}
37
+ */
38
+ function parseMultiValueQueryStringParameters(url) {
39
+ var e_1, _a;
40
+ // dummy placeholder url for the WHATWG URL constructor
41
+ // https://github.com/nodejs/node/issues/12682
42
+ var searchParams = new URL(url, 'http://example').searchParams;
43
+ //
44
+ if (Array.from(searchParams).length === 0)
45
+ return {};
46
+ var map = new Map();
47
+ try {
48
+ // eslint-disable-next-line no-restricted-syntax
49
+ for (var searchParams_1 = __values(searchParams), searchParams_1_1 = searchParams_1.next(); !searchParams_1_1.done; searchParams_1_1 = searchParams_1.next()) {
50
+ var _b = __read(searchParams_1_1.value, 2), key = _b[0], value = _b[1];
51
+ var item = map.get(key);
52
+ if (item)
53
+ item.push(value);
54
+ else
55
+ map.set(key, [value]);
56
+ }
57
+ }
58
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
59
+ finally {
60
+ try {
61
+ if (searchParams_1_1 && !searchParams_1_1.done && (_a = searchParams_1.return)) _a.call(searchParams_1);
62
+ }
63
+ finally { if (e_1) throw e_1.error; }
64
+ }
65
+ return Object.fromEntries(map);
66
+ }
67
+ exports.parseMultiValueQueryStringParameters = parseMultiValueQueryStringParameters;
68
+ /**
69
+ * ${1:Description placeholder}
70
+ *
71
+ * @export
72
+ * @param {*} url
73
+ * @returns {*}
74
+ */
75
+ function parseQueryStringParameters(url) {
76
+ // dummy placeholder url for the WHATWG URL constructor
77
+ // https://github.com/nodejs/node/issues/12682
78
+ var searchParams = new URL(url, 'http://example').searchParams;
79
+ if (Array.from(searchParams).length === 0)
80
+ return null;
81
+ return Object.fromEntries(searchParams);
82
+ }
83
+ exports.parseQueryStringParameters = parseQueryStringParameters;
84
+ //# sourceMappingURL=Utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../../../src/Server/lib/container/Utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;GAMG;AACH,SAAgB,oCAAoC,CAAC,GAAW;;IAC9D,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,EAAE,CAAA;IACpD,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;;;;;;GAMG;AACH,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"}
@@ -0,0 +1,21 @@
1
+ import { z } from 'zod';
2
+ import Response, { ResponseErrorType } from '../API/Response';
3
+ /**
4
+ * Description placeholder
5
+ *
6
+ * @export
7
+ * @class Validator
8
+ * @typedef {Validator}
9
+ */
10
+ export default class Validator {
11
+ /**
12
+ * Description placeholder
13
+ *
14
+ * @public
15
+ * @static
16
+ * @param {*} data
17
+ * @param {z.ZodObject<any>} schema
18
+ * @returns {(boolean | Response<ResponseErrorType>)}
19
+ */
20
+ static validateSchema(data: any, schema: z.ZodObject<any>): boolean | Response<ResponseErrorType>;
21
+ }
@@ -0,0 +1,48 @@
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
+ /**
7
+ * Description placeholder
8
+ *
9
+ * @export
10
+ * @class Validator
11
+ * @typedef {Validator}
12
+ */
13
+ var Validator = /** @class */ (function () {
14
+ function Validator() {
15
+ }
16
+ /**
17
+ * Description placeholder
18
+ *
19
+ * @public
20
+ * @static
21
+ * @param {*} data
22
+ * @param {z.ZodObject<any>} schema
23
+ * @returns {(boolean | Response<ResponseErrorType>)}
24
+ */
25
+ Validator.validateSchema = function (data, schema) {
26
+ var error, validatedInput;
27
+ // Validate body against known zod schema
28
+ try {
29
+ validatedInput = schema.parse(data);
30
+ }
31
+ catch (err) {
32
+ if (err instanceof zod_1.z.ZodError)
33
+ error = JSON.parse(err.message);
34
+ else
35
+ error = 'Unknown validation error!'; //unhandled case, hard to test
36
+ }
37
+ // Error validation
38
+ if (!validatedInput || error) {
39
+ return Response_1.default.BadRequestResponse(Globals_1.default.ErrorResponseValidationFail, Globals_1.default.ErrorCode_InvalidInput, { validationFailure: error });
40
+ }
41
+ else {
42
+ return true;
43
+ }
44
+ };
45
+ return Validator;
46
+ }());
47
+ exports.default = Validator;
48
+ //# sourceMappingURL=Validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Validator.js","sourceRoot":"","sources":["../../../src/Validation/Validator.ts"],"names":[],"mappings":";;AAAA,2BAAuB;AAEvB,4CAA6D;AAC7D,sCAAgC;AAEhC;;;;;;GAMG;AACH;IAAA;IAiCA,CAAC;IAhCC;;;;;;;;OAQG;IACW,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;gBAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;;gBACzD,KAAK,GAAG,2BAA2B,CAAA,CAAC,8BAA8B;SACxE;QACD,mBAAmB;QACnB,IAAI,CAAC,cAAc,IAAI,KAAK,EAAE;YAC5B,OAAO,kBAAQ,CAAC,kBAAkB,CAChC,iBAAO,CAAC,2BAA2B,EACnC,iBAAO,CAAC,sBAAsB,EAC9B,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAC7B,CAAA;SACF;aAAM;YACL,OAAO,IAAI,CAAA;SACZ;IACH,CAAC;IACH,gBAAC;AAAD,CAAC,AAjCD,IAiCC"}
package/index.ts CHANGED
@@ -1,13 +1,13 @@
1
- import Response from "./src/API/Response"
2
- import Utils from "./src/API/Utils"
3
- import EventProcessor from "./src/BaseEvent/EventProcessor"
4
- import Process from "./src/BaseEvent/Process"
5
- import Transaction from "./src/BaseEvent/Transaction"
6
- import Configuration from "./src/Config/Configuration"
7
- import Crypto from "./src/Crypto/Crypto"
8
- import JWT from "./src/Crypto/JWT"
9
- import Mailer from "./src/Mailer/Mailer"
10
- import Router, { Route } from "./src/Server/Router"
1
+ import Response, { ResponseErrorType } from './src/API/Response'
2
+ import Utils from './src/API/Utils'
3
+ import EventProcessor from './src/BaseEvent/EventProcessor'
4
+ import Process from './src/BaseEvent/Process'
5
+ import Transaction from './src/BaseEvent/Transaction'
6
+ import Configuration from './src/Config/Configuration'
7
+ import Crypto from './src/Crypto/Crypto'
8
+ import JWT from './src/Crypto/JWT'
9
+ import Mailer from './src/Mailer/Mailer'
10
+ import Router, { Route } from './src/Server/Router'
11
11
 
12
12
  export {
13
13
  // Base Events
@@ -25,4 +25,6 @@ export {
25
25
  // Helpers
26
26
  Utils,
27
27
  Route,
28
+ // Misc types
29
+ ResponseErrorType,
28
30
  }
package/jest.config.ts CHANGED
@@ -1,32 +1,25 @@
1
- import type { Config } from "@jest/types"
1
+ import type { Config } from '@jest/types'
2
2
  /* eslint-env node */
3
3
  const config: Config.InitialOptions = {
4
- preset: "ts-jest",
5
- testEnvironment: "node",
4
+ preset: 'ts-jest',
5
+ testEnvironment: 'node',
6
6
  reporters: [
7
- "default",
7
+ 'default',
8
8
  [
9
- "jest-junit",
9
+ 'jest-junit',
10
10
  {
11
- outputDirectory: "coverage",
12
- outputName: "jest-junit.xml",
13
- ancestorSeparator: "",
14
- uniqueOutputName: "false",
15
- suiteNameTemplate: "{filepath}",
16
- classNameTemplate: "{classname}",
17
- titleTemplate: "{title}",
11
+ outputDirectory: 'coverage',
12
+ outputName: 'jest-junit.xml',
13
+ ancestorSeparator: '',
14
+ uniqueOutputName: 'false',
15
+ suiteNameTemplate: '{filepath}',
16
+ classNameTemplate: '{classname}',
17
+ titleTemplate: '{title}',
18
18
  },
19
19
  ],
20
20
  ],
21
- coverageReporters: [
22
- "clover",
23
- "json",
24
- "lcov",
25
- "text",
26
- ["text", { file: "coverage.txt" }],
27
- "json-summary",
28
- ],
29
- collectCoverageFrom: ["src/**/*.(t|j)s"],
21
+ coverageReporters: ['clover', 'json', 'lcov', ['text', { file: 'coverage.txt' }], 'json-summary'],
22
+ collectCoverageFrom: ['src/**/*.(t|j)s'],
30
23
  coverageThreshold: {
31
24
  global: {
32
25
  branches: 80,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@creator.co/wapi",
3
- "version": "1.2.2",
3
+ "version": "1.2.4",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -10,8 +10,8 @@
10
10
  "clean": "tsc --build --clean",
11
11
  "lint-fix": "eslint . --ext .ts --fix",
12
12
  "lint": "eslint . --ext .ts",
13
- "test": "jest --coverage --silent --runInBand",
14
- "test-dev": "jest --coverage --runInBand"
13
+ "test": "jest --coverage --silent --runInBand && cat coverage/coverage.txt",
14
+ "test-dev": "jest --coverage --runInBand && cat coverage/coverage.txt"
15
15
  },
16
16
  "author": "",
17
17
  "license": "ISC",