securequ 1.0.10 → 1.0.12

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 (46) hide show
  1. package/client/index.d.ts +25 -0
  2. package/client/index.js +107 -173
  3. package/client/index.js.map +1 -1
  4. package/client/index.mjs +107 -173
  5. package/client/index.mjs.map +1 -1
  6. package/client/types.d.ts +17 -0
  7. package/include/lib/base64.js +12 -12
  8. package/include/lib/base64.js.map +1 -1
  9. package/include/lib/base64.mjs +12 -12
  10. package/include/lib/base64.mjs.map +1 -1
  11. package/include/lib/cache.js +20 -22
  12. package/include/lib/cache.js.map +1 -1
  13. package/include/lib/cache.mjs +20 -22
  14. package/include/lib/cache.mjs.map +1 -1
  15. package/include/lib/crypto.js +23 -23
  16. package/include/lib/crypto.js.map +1 -1
  17. package/include/lib/crypto.mjs +23 -23
  18. package/include/lib/crypto.mjs.map +1 -1
  19. package/include/lib/pako.js +5 -5
  20. package/include/lib/pako.js.map +1 -1
  21. package/include/lib/pako.mjs +5 -5
  22. package/include/lib/pako.mjs.map +1 -1
  23. package/include/lib/reverser.js +11 -11
  24. package/include/lib/reverser.js.map +1 -1
  25. package/include/lib/reverser.mjs +11 -11
  26. package/include/lib/reverser.mjs.map +1 -1
  27. package/include/lib/urlpath.js +2 -2
  28. package/include/lib/urlpath.js.map +1 -1
  29. package/include/lib/urlpath.mjs +2 -2
  30. package/include/lib/urlpath.mjs.map +1 -1
  31. package/include/responseValue.js +4 -4
  32. package/include/responseValue.js.map +1 -1
  33. package/include/responseValue.mjs +4 -4
  34. package/include/responseValue.mjs.map +1 -1
  35. package/include/signeture.js +12 -12
  36. package/include/signeture.js.map +1 -1
  37. package/include/signeture.mjs +12 -12
  38. package/include/signeture.mjs.map +1 -1
  39. package/index.d.ts +2 -81
  40. package/package.json +6 -11
  41. package/server/index.d.ts +18 -0
  42. package/server/index.js +105 -176
  43. package/server/index.js.map +1 -1
  44. package/server/index.mjs +105 -176
  45. package/server/index.mjs.map +1 -1
  46. package/server/types.d.ts +28 -0
package/server/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import {__awaiter,__assign,__generator,__values}from'../node_modules/tslib/tslib.es6.mjs';import {match}from'path-to-regexp';import crypto from'../include/lib/crypto.mjs';import reverser from'../include/lib/reverser.mjs';import responseValue from'../include/responseValue.mjs';import signeture from'../include/signeture.mjs';import SecurequCache from'../include/lib/cache.mjs';var SecurequServer = /** @class */ (function () {
2
- function SecurequServer(config) {
1
+ import {match}from'path-to-regexp';import crypto from'../include/lib/crypto.mjs';import reverser from'../include/lib/reverser.mjs';import responseValue from'../include/responseValue.mjs';import signeture from'../include/signeture.mjs';import SecurequCache from'../include/lib/cache.mjs';class SecurequServer {
2
+ constructor(config) {
3
3
  this.HandlerCache = new SecurequCache({ ttl: 1000 * 60 * 60, limit: 100 });
4
4
  this.routes = {
5
5
  GET: {},
@@ -8,180 +8,109 @@ import {__awaiter,__assign,__generator,__values}from'../node_modules/tslib/tslib
8
8
  DELETE: {}
9
9
  };
10
10
  this.secret = crypto.makeSecret(Math.random().toString(36).substring(7));
11
- this.config = __assign({}, config);
11
+ this.config = Object.assign({}, config);
12
12
  }
13
- SecurequServer.prototype.addRoute = function (path, method, handler) {
14
- return __awaiter(this, void 0, void 0, function () {
15
- return __generator(this, function (_a) {
16
- if (this.routes[method][path])
17
- return [2 /*return*/];
18
- this.routes[method][path] = {
19
- handler: handler,
20
- test: match(path)
21
- };
22
- return [2 /*return*/];
23
- });
24
- });
25
- };
26
- SecurequServer.prototype.get = function (path, handler) {
27
- return __awaiter(this, void 0, void 0, function () {
28
- return __generator(this, function (_a) {
29
- this.addRoute(path, 'GET', handler);
30
- return [2 /*return*/];
31
- });
32
- });
33
- };
34
- SecurequServer.prototype.post = function (path, handler) {
35
- return __awaiter(this, void 0, void 0, function () {
36
- return __generator(this, function (_a) {
37
- this.addRoute(path, 'POST', handler);
38
- return [2 /*return*/];
39
- });
40
- });
41
- };
42
- SecurequServer.prototype.put = function (path, handler) {
43
- return __awaiter(this, void 0, void 0, function () {
44
- return __generator(this, function (_a) {
45
- this.addRoute(path, 'PUT', handler);
46
- return [2 /*return*/];
47
- });
48
- });
49
- };
50
- SecurequServer.prototype.delete = function (path, handler) {
51
- return __awaiter(this, void 0, void 0, function () {
52
- return __generator(this, function (_a) {
53
- this.addRoute(path, 'DELETE', handler);
54
- return [2 /*return*/];
55
- });
56
- });
57
- };
58
- SecurequServer.prototype.handleRequest = function (info, args) {
59
- return __awaiter(this, void 0, void 0, function () {
60
- var path, method, cacheHandler, values, values_1, values_1_1, value, test, handler, match_1, e_1_1;
61
- var e_1, _a;
62
- return __generator(this, function (_b) {
63
- switch (_b.label) {
64
- case 0:
65
- path = info.path, method = info.method;
66
- cacheHandler = this.HandlerCache.get("".concat(method, ":").concat(path));
67
- if (!cacheHandler) return [3 /*break*/, 2];
68
- return [4 /*yield*/, cacheHandler(info, args)];
69
- case 1:
70
- _b.sent();
71
- return [2 /*return*/];
72
- case 2:
73
- values = Object.values(this.routes[method]);
74
- _b.label = 3;
75
- case 3:
76
- _b.trys.push([3, 8, 9, 10]);
77
- values_1 = __values(values), values_1_1 = values_1.next();
78
- _b.label = 4;
79
- case 4:
80
- if (!!values_1_1.done) return [3 /*break*/, 7];
81
- value = values_1_1.value;
82
- test = value.test, handler = value.handler;
83
- match_1 = test(path);
84
- if (!match_1) return [3 /*break*/, 6];
85
- info.params = match_1.params;
86
- return [4 /*yield*/, handler(info, args)];
87
- case 5:
88
- _b.sent();
89
- this.HandlerCache.set("".concat(method, ":").concat(path), handler);
90
- _b.label = 6;
91
- case 6:
92
- values_1_1 = values_1.next();
93
- return [3 /*break*/, 4];
94
- case 7: return [3 /*break*/, 10];
95
- case 8:
96
- e_1_1 = _b.sent();
97
- e_1 = { error: e_1_1 };
98
- return [3 /*break*/, 10];
99
- case 9:
100
- try {
101
- if (values_1_1 && !values_1_1.done && (_a = values_1.return)) _a.call(values_1);
102
- }
103
- finally { if (e_1) throw e_1.error; }
104
- return [7 /*endfinally*/];
105
- case 10: return [2 /*return*/];
13
+ async addRoute(path, method, handler) {
14
+ if (this.routes[method][path])
15
+ return;
16
+ this.routes[method][path] = {
17
+ handler,
18
+ test: match(path)
19
+ };
20
+ }
21
+ async get(path, handler) {
22
+ this.addRoute(path, 'GET', handler);
23
+ }
24
+ async post(path, handler) {
25
+ this.addRoute(path, 'POST', handler);
26
+ }
27
+ async put(path, handler) {
28
+ this.addRoute(path, 'PUT', handler);
29
+ }
30
+ async delete(path, handler) {
31
+ this.addRoute(path, 'DELETE', handler);
32
+ }
33
+ async handleRequest(info, args) {
34
+ const { path, method } = info;
35
+ let cacheHandler = this.HandlerCache.get(`${method}:${path}`);
36
+ if (cacheHandler) {
37
+ await cacheHandler(info, args);
38
+ return;
39
+ }
40
+ let values = Object.values(this.routes[method]);
41
+ for (let value of values) {
42
+ let { test, handler } = value;
43
+ const match = test(path);
44
+ if (match) {
45
+ info.params = match.params;
46
+ await handler(info, args);
47
+ this.HandlerCache.set(`${method}:${path}`, handler);
48
+ }
49
+ }
50
+ }
51
+ async listen(listenerInfo, args) {
52
+ try {
53
+ if (!listenerInfo.signeture || !listenerInfo.path || !listenerInfo.method)
54
+ throw new Error("Invalid Request");
55
+ const clientSecret = signeture.verify(listenerInfo.signeture);
56
+ const { path, body, method } = listenerInfo;
57
+ const url = new URL(path, "http://localhost");
58
+ // format the path
59
+ url.pathname = url.pathname.replace(this.config.basepath, "/");
60
+ let split = url.pathname.split("/").map((s) => reverser.decrypt(s)).filter((s) => s.length > 0);
61
+ url.pathname = `/${split.join("/")}`;
62
+ // handle handshake
63
+ const handshakeSecret = crypto.makeSecret(this.secret + clientSecret);
64
+ const reqkey = handshakeSecret.substring(0, handshakeSecret.length / 2);
65
+ if (method === 'GET' && url.pathname === "/handshake") {
66
+ throw crypto.encrypt(handshakeSecret, clientSecret);
67
+ }
68
+ let data = {}, searchParams = {};
69
+ if (url.searchParams.has(reqkey)) {
70
+ let decripted = crypto.decrypt(url.searchParams.get(reqkey), handshakeSecret);
71
+ for (let key in decripted) {
72
+ let ukey = reverser.decrypt(key);
73
+ searchParams[ukey] = decripted[key];
106
74
  }
107
- });
108
- });
109
- };
110
- SecurequServer.prototype.listen = function (listenerInfo, args) {
111
- return __awaiter(this, void 0, void 0, function () {
112
- var clientSecret, path, body, method, url, split, handshakeSecret, reqkey, data, searchParams, decripted, key, ukey, decripted, key, ukey, info_1, text;
113
- return __generator(this, function (_a) {
114
- switch (_a.label) {
115
- case 0:
116
- _a.trys.push([0, 2, , 6]);
117
- if (!listenerInfo.signeture || !listenerInfo.path || !listenerInfo.method)
118
- throw new Error("Invalid Request");
119
- clientSecret = signeture.verify(listenerInfo.signeture);
120
- path = listenerInfo.path, body = listenerInfo.body, method = listenerInfo.method;
121
- url = new URL(path, "http://localhost");
122
- // format the path
123
- url.pathname = url.pathname.replace(this.config.basepath, "/");
124
- split = url.pathname.split("/").map(function (s) { return reverser.decrypt(s); }).filter(function (s) { return s.length > 0; });
125
- url.pathname = "/".concat(split.join("/"));
126
- handshakeSecret = crypto.makeSecret(this.secret + clientSecret);
127
- reqkey = handshakeSecret.substring(0, handshakeSecret.length / 2);
128
- if (method === 'GET' && url.pathname === "/handshake") {
129
- throw crypto.encrypt(handshakeSecret, clientSecret);
130
- }
131
- data = {}, searchParams = {};
132
- if (url.searchParams.has(reqkey)) {
133
- decripted = crypto.decrypt(url.searchParams.get(reqkey), handshakeSecret);
134
- for (key in decripted) {
135
- ukey = reverser.decrypt(key);
136
- searchParams[ukey] = decripted[key];
137
- }
138
- }
139
- if (body[reqkey]) {
140
- decripted = crypto.decrypt(body[reqkey], handshakeSecret);
141
- for (key in decripted) {
142
- ukey = reverser.decrypt(key);
143
- data[ukey] = decripted[key];
144
- }
145
- }
146
- // handle the request
147
- return [4 /*yield*/, this.handleRequest({
148
- method: method,
149
- path: url.pathname,
150
- body: data,
151
- searchParams: searchParams,
152
- params: {}
153
- }, args)];
154
- case 1:
155
- // handle the request
156
- _a.sent();
157
- return [3 /*break*/, 6];
158
- case 2:
159
- info_1 = _a.sent();
160
- if (!(info_1 instanceof Error)) return [3 /*break*/, 3];
161
- return [2 /*return*/, {
162
- status: 404,
163
- value: responseValue.encrypt(info_1.message, listenerInfo.signeture)
164
- }];
165
- case 3:
166
- if (!(info_1 instanceof Response)) return [3 /*break*/, 5];
167
- return [4 /*yield*/, info_1.text()];
168
- case 4:
169
- text = _a.sent();
170
- return [2 /*return*/, {
171
- status: info_1.status,
172
- value: responseValue.encrypt(text, listenerInfo.signeture)
173
- }];
174
- case 5: return [2 /*return*/, {
175
- status: 200,
176
- value: responseValue.encrypt(info_1, listenerInfo.signeture)
177
- }];
178
- case 6: return [2 /*return*/, {
179
- status: 404,
180
- value: 'Not Found'
181
- }];
75
+ }
76
+ if (body[reqkey]) {
77
+ let decripted = crypto.decrypt(body[reqkey], handshakeSecret);
78
+ for (let key in decripted) {
79
+ let ukey = reverser.decrypt(key);
80
+ data[ukey] = decripted[key];
182
81
  }
183
- });
184
- });
185
- };
186
- return SecurequServer;
187
- }());export{SecurequServer,SecurequServer as default};//# sourceMappingURL=index.mjs.map
82
+ }
83
+ // handle the request
84
+ await this.handleRequest({
85
+ method,
86
+ path: url.pathname,
87
+ body: data,
88
+ searchParams,
89
+ params: {}
90
+ }, args);
91
+ }
92
+ catch (info) {
93
+ if (info instanceof Error) {
94
+ return {
95
+ status: 404,
96
+ value: responseValue.encrypt(info.message, listenerInfo.signeture)
97
+ };
98
+ }
99
+ else if (info instanceof Response) {
100
+ let text = await info.text();
101
+ return {
102
+ status: info.status,
103
+ value: responseValue.encrypt(text, listenerInfo.signeture)
104
+ };
105
+ }
106
+ return {
107
+ status: 200,
108
+ value: responseValue.encrypt(info, listenerInfo.signeture)
109
+ };
110
+ }
111
+ return {
112
+ status: 404,
113
+ value: 'Not Found'
114
+ };
115
+ }
116
+ }export{SecurequServer,SecurequServer as default};//# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/server/index.ts"],"sourcesContent":["import { match } from \"path-to-regexp\";\nimport crypto from \"../include/lib/crypto\";\nimport reverser from \"../include/lib/reverser\";\nimport responseValue from \"../include/responseValue\";\nimport signeture from \"../include/signeture\";\nimport { HandlerFunction, HandlerInfo, HTTPMethods, ListenerInfo, RouteFactory, ServerResponse, SecurequServerConfig } from \"./types\";\nimport SecurequCache from \"../include/lib/cache\";\n\nexport class SecurequServer {\n private HandlerCache = new SecurequCache<HandlerFunction>({ ttl: 1000 * 60 * 60, limit: 100 });\n private routes: RouteFactory = {\n GET: {},\n POST: {},\n PUT: {},\n DELETE: {}\n };\n private config: SecurequServerConfig;\n private secret: string = crypto.makeSecret(Math.random().toString(36).substring(7));\n\n constructor(config: SecurequServerConfig) {\n this.config = { ...config }\n }\n\n async addRoute(path: string, method: HTTPMethods, handler: HandlerFunction) {\n if (this.routes[method][path]) return\n this.routes[method][path] = {\n handler,\n test: match(path)\n }\n }\n\n async get(path: string, handler: HandlerFunction) {\n this.addRoute(path, 'GET', handler)\n }\n\n async post(path: string, handler: HandlerFunction) {\n this.addRoute(path, 'POST', handler)\n }\n\n async put(path: string, handler: HandlerFunction) {\n this.addRoute(path, 'PUT', handler)\n }\n\n async delete(path: string, handler: HandlerFunction) {\n this.addRoute(path, 'DELETE', handler)\n }\n\n async handleRequest(info: HandlerInfo, args?: any) {\n const { path, method } = info;\n let cacheHandler = this.HandlerCache.get(`${method}:${path}`);\n if (cacheHandler) {\n await cacheHandler(info, args)\n return\n }\n let values: any = Object.values(this.routes[method]);\n for (let value of values) {\n let { test, handler } = value\n const match = test(path)\n if (match) {\n info.params = match.params;\n await handler(info, args)\n this.HandlerCache.set(`${method}:${path}`, handler)\n }\n }\n }\n\n async listen(listenerInfo: ListenerInfo, args?: any): Promise<ServerResponse> {\n try {\n if (!listenerInfo.signeture || !listenerInfo.path || !listenerInfo.method) throw new Error(\"Invalid Request\");\n\n const clientSecret = signeture.verify(listenerInfo.signeture);\n const { path, body, method } = listenerInfo;\n const url = new URL(path, \"http://localhost\");\n\n // format the path\n url.pathname = url.pathname.replace(this.config.basepath, \"/\")\n let split = url.pathname.split(\"/\").map((s) => reverser.decrypt(s)).filter((s) => s.length > 0);\n url.pathname = `/${split.join(\"/\")}`;\n\n // handle handshake \n const handshakeSecret = crypto.makeSecret(this.secret + clientSecret);\n const reqkey = handshakeSecret.substring(0, handshakeSecret.length / 2);\n\n if (method === 'GET' && url.pathname === \"/handshake\") {\n throw crypto.encrypt(handshakeSecret, clientSecret)\n }\n\n let data: any = {}, searchParams: any = {}\n\n if (url.searchParams.has(reqkey)) {\n let decripted: any = crypto.decrypt(url.searchParams.get(reqkey) as string, handshakeSecret)\n for (let key in decripted) {\n let ukey = reverser.decrypt(key)\n searchParams[ukey] = decripted[key]\n }\n }\n\n if (body[reqkey]) {\n let decripted: any = crypto.decrypt(body[reqkey], handshakeSecret)\n for (let key in decripted) {\n let ukey = reverser.decrypt(key)\n data[ukey] = decripted[key]\n }\n }\n\n // handle the request\n await this.handleRequest({\n method,\n path: url.pathname,\n body: data,\n searchParams,\n params: {}\n }, args);\n } catch (info: any) {\n if (info instanceof Error) {\n return {\n status: 404,\n value: responseValue.encrypt(info.message, listenerInfo.signeture)\n }\n } else if (info instanceof Response) {\n let text = await info.text();\n return {\n status: info.status,\n value: responseValue.encrypt(text, listenerInfo.signeture)\n }\n }\n return {\n status: 200,\n value: responseValue.encrypt(info, listenerInfo.signeture)\n };\n }\n\n return {\n status: 404,\n value: 'Not Found'\n };\n }\n}\n\nexport default SecurequServer;"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../src/server/index.ts"],"sourcesContent":["import { match } from \"path-to-regexp\";\nimport crypto from \"../include/lib/crypto\";\nimport reverser from \"../include/lib/reverser\";\nimport responseValue from \"../include/responseValue\";\nimport signeture from \"../include/signeture\";\nimport { HandlerFunction, HandlerInfo, HTTPMethods, ListenerInfo, RouteFactory, ServerResponse, SecurequServerConfig } from \"./types\";\nimport SecurequCache from \"../include/lib/cache\";\n\nexport class SecurequServer {\n private HandlerCache = new SecurequCache<HandlerFunction>({ ttl: 1000 * 60 * 60, limit: 100 });\n private routes: RouteFactory = {\n GET: {},\n POST: {},\n PUT: {},\n DELETE: {}\n };\n private config: SecurequServerConfig;\n private secret: string = crypto.makeSecret(Math.random().toString(36).substring(7));\n\n constructor(config: SecurequServerConfig) {\n this.config = { ...config }\n }\n\n async addRoute(path: string, method: HTTPMethods, handler: HandlerFunction) {\n if (this.routes[method][path]) return\n this.routes[method][path] = {\n handler,\n test: match(path)\n }\n }\n\n async get(path: string, handler: HandlerFunction) {\n this.addRoute(path, 'GET', handler)\n }\n\n async post(path: string, handler: HandlerFunction) {\n this.addRoute(path, 'POST', handler)\n }\n\n async put(path: string, handler: HandlerFunction) {\n this.addRoute(path, 'PUT', handler)\n }\n\n async delete(path: string, handler: HandlerFunction) {\n this.addRoute(path, 'DELETE', handler)\n }\n\n async handleRequest(info: HandlerInfo, args?: any) {\n const { path, method } = info;\n let cacheHandler = this.HandlerCache.get(`${method}:${path}`);\n if (cacheHandler) {\n await cacheHandler(info, args)\n return\n }\n let values: any = Object.values(this.routes[method]);\n for (let value of values) {\n let { test, handler } = value\n const match = test(path)\n if (match) {\n info.params = match.params;\n await handler(info, args)\n this.HandlerCache.set(`${method}:${path}`, handler)\n }\n }\n }\n\n async listen(listenerInfo: ListenerInfo, args?: any): Promise<ServerResponse> {\n try {\n if (!listenerInfo.signeture || !listenerInfo.path || !listenerInfo.method) throw new Error(\"Invalid Request\");\n\n const clientSecret = signeture.verify(listenerInfo.signeture);\n const { path, body, method } = listenerInfo;\n const url = new URL(path, \"http://localhost\");\n\n // format the path\n url.pathname = url.pathname.replace(this.config.basepath, \"/\")\n let split = url.pathname.split(\"/\").map((s) => reverser.decrypt(s)).filter((s) => s.length > 0);\n url.pathname = `/${split.join(\"/\")}`;\n\n // handle handshake \n const handshakeSecret = crypto.makeSecret(this.secret + clientSecret);\n const reqkey = handshakeSecret.substring(0, handshakeSecret.length / 2);\n\n if (method === 'GET' && url.pathname === \"/handshake\") {\n throw crypto.encrypt(handshakeSecret, clientSecret)\n }\n\n let data: any = {}, searchParams: any = {}\n\n if (url.searchParams.has(reqkey)) {\n let decripted: any = crypto.decrypt(url.searchParams.get(reqkey) as string, handshakeSecret)\n for (let key in decripted) {\n let ukey = reverser.decrypt(key)\n searchParams[ukey] = decripted[key]\n }\n }\n\n if (body[reqkey]) {\n let decripted: any = crypto.decrypt(body[reqkey], handshakeSecret)\n for (let key in decripted) {\n let ukey = reverser.decrypt(key)\n data[ukey] = decripted[key]\n }\n }\n\n // handle the request\n await this.handleRequest({\n method,\n path: url.pathname,\n body: data,\n searchParams,\n params: {}\n }, args);\n } catch (info: any) {\n if (info instanceof Error) {\n return {\n status: 404,\n value: responseValue.encrypt(info.message, listenerInfo.signeture)\n }\n } else if (info instanceof Response) {\n let text = await info.text();\n return {\n status: info.status,\n value: responseValue.encrypt(text, listenerInfo.signeture)\n }\n }\n return {\n status: 200,\n value: responseValue.encrypt(info, listenerInfo.signeture)\n };\n }\n\n return {\n status: 404,\n value: 'Not Found'\n };\n }\n}\n\nexport default SecurequServer;"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ type SecurequServerConfig = {
2
+ basepath: string;
3
+ cache?: boolean | {
4
+ get: (key: string) => any;
5
+ set: (key: string, response: Response) => void;
6
+ };
7
+ };
8
+ type HTTPMethods = "GET" | "POST" | "PUT" | "DELETE";
9
+ type ListenerInfo = {
10
+ signeture: string;
11
+ path: string;
12
+ body: any;
13
+ method: HTTPMethods;
14
+ };
15
+ type HandlerInfo = {
16
+ path: string;
17
+ body: object;
18
+ searchParams: Object;
19
+ params: Object;
20
+ method: HTTPMethods;
21
+ };
22
+ type ServerResponse = {
23
+ value: string;
24
+ status: number;
25
+ };
26
+ type HandlerFunction = (info: HandlerInfo, args?: any) => (any | void) | Promise<Partial<any> | void>;
27
+
28
+ export type { HTTPMethods, HandlerFunction, HandlerInfo, ListenerInfo, SecurequServerConfig, ServerResponse };