securequ 1.0.12 → 1.0.13

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 (45) hide show
  1. package/client/index.d.ts +20 -20
  2. package/client/index.js +146 -146
  3. package/client/index.js.map +1 -1
  4. package/client/index.mjs +146 -146
  5. package/client/index.mjs.map +1 -1
  6. package/client/types.d.ts +14 -14
  7. package/include/lib/base64.js +47 -47
  8. package/include/lib/base64.js.map +1 -1
  9. package/include/lib/base64.mjs +46 -46
  10. package/include/lib/base64.mjs.map +1 -1
  11. package/include/lib/cache.js +72 -72
  12. package/include/lib/cache.js.map +1 -1
  13. package/include/lib/cache.mjs +71 -71
  14. package/include/lib/cache.mjs.map +1 -1
  15. package/include/lib/crypto.js +69 -69
  16. package/include/lib/crypto.js.map +1 -1
  17. package/include/lib/crypto.mjs +68 -68
  18. package/include/lib/crypto.mjs.map +1 -1
  19. package/include/lib/pako.js +27 -27
  20. package/include/lib/pako.js.map +1 -1
  21. package/include/lib/pako.mjs +27 -27
  22. package/include/lib/pako.mjs.map +1 -1
  23. package/include/lib/reverser.js +25 -25
  24. package/include/lib/reverser.js.map +1 -1
  25. package/include/lib/reverser.mjs +24 -24
  26. package/include/lib/reverser.mjs.map +1 -1
  27. package/include/lib/urlpath.js +10 -10
  28. package/include/lib/urlpath.js.map +1 -1
  29. package/include/lib/urlpath.mjs +9 -9
  30. package/include/lib/urlpath.mjs.map +1 -1
  31. package/include/responseValue.js +10 -10
  32. package/include/responseValue.js.map +1 -1
  33. package/include/responseValue.mjs +9 -9
  34. package/include/responseValue.mjs.map +1 -1
  35. package/include/signeture.js +20 -20
  36. package/include/signeture.js.map +1 -1
  37. package/include/signeture.mjs +19 -19
  38. package/include/signeture.mjs.map +1 -1
  39. package/package.json +1 -1
  40. package/server/index.d.ts +13 -13
  41. package/server/index.js +115 -115
  42. package/server/index.js.map +1 -1
  43. package/server/index.mjs +115 -115
  44. package/server/index.mjs.map +1 -1
  45. package/server/types.d.ts +25 -25
@@ -1,20 +1,20 @@
1
- import crypto from'./lib/crypto.mjs';const make = (val, secret) => {
2
- const signeture = crypto.encrypt(val, secret);
3
- const signetureHash = crypto.hash(signeture);
4
- const secretEncript = crypto.encrypt(secret, signetureHash);
5
- return `${signeture}.${secretEncript}`;
6
- };
7
- const verify = (signerure) => {
8
- const [signeture, secretEncript] = signerure.split(".");
9
- const signetureHash = crypto.hash(signeture);
10
- const secret = crypto.decrypt(secretEncript, signetureHash);
11
- const secretVal = crypto.decrypt(signeture, secret);
12
- if (secretVal !== secret)
13
- throw new Error("Invalid Signeture");
14
- return secretVal;
15
- };
16
- var signeture = {
17
- make,
18
- verify,
19
- key: "x-signeture"
1
+ import crypto from'./lib/crypto.mjs';const make = (val, secret) => {
2
+ const signeture = crypto.encrypt(val, secret);
3
+ const signetureHash = crypto.hash(signeture);
4
+ const secretEncript = crypto.encrypt(secret, signetureHash);
5
+ return `${signeture}.${secretEncript}`;
6
+ };
7
+ const verify = (signerure) => {
8
+ const [signeture, secretEncript] = signerure.split(".");
9
+ const signetureHash = crypto.hash(signeture);
10
+ const secret = crypto.decrypt(secretEncript, signetureHash);
11
+ const secretVal = crypto.decrypt(signeture, secret);
12
+ if (secretVal !== secret)
13
+ throw new Error("Invalid Signeture");
14
+ return secretVal;
15
+ };
16
+ var signeture = {
17
+ make,
18
+ verify,
19
+ key: "x-signeture"
20
20
  };export{signeture as default};//# sourceMappingURL=signeture.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"signeture.mjs","sources":["../../src/include/signeture.ts"],"sourcesContent":["import crypto from \"./lib/crypto\";\n\nconst make = (val: string, secret: string) => {\n const signeture = crypto.encrypt(val, secret);\n const signetureHash = crypto.hash(signeture)\n const secretEncript = crypto.encrypt(secret, signetureHash);\n return `${signeture}.${secretEncript}`;\n}\n\nconst verify = (signerure: string) => {\n const [signeture, secretEncript] = signerure.split(\".\");\n const signetureHash = crypto.hash(signeture);\n const secret = crypto.decrypt(secretEncript, signetureHash);\n const secretVal = crypto.decrypt(signeture, secret);\n if (secretVal !== secret) throw new Error(\"Invalid Signeture\");\n return secretVal;\n}\n\nexport default {\n make,\n verify,\n key: \"x-signeture\"\n}"],"names":[],"mappings":"qCAEA,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,MAAc,KAAI;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC;IAC7C,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;IAC5C,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC;AAC3D,IAAA,OAAO,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,aAAa,EAAE;AACzC,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,SAAiB,KAAI;AAClC,IAAA,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;IACvD,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,aAAa,CAAC;IAC3D,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;IACnD,IAAI,SAAS,KAAK,MAAM;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC;AAC9D,IAAA,OAAO,SAAS;AACnB,CAAC;AAED,gBAAe;IACZ,IAAI;IACJ,MAAM;AACN,IAAA,GAAG,EAAE;CACP"}
1
+ {"version":3,"file":"signeture.mjs","sources":["../../src/include/signeture.ts"],"sourcesContent":["import crypto from \"./lib/crypto\";\r\n\r\nconst make = (val: string, secret: string) => {\r\n const signeture = crypto.encrypt(val, secret);\r\n const signetureHash = crypto.hash(signeture)\r\n const secretEncript = crypto.encrypt(secret, signetureHash);\r\n return `${signeture}.${secretEncript}`;\r\n}\r\n\r\nconst verify = (signerure: string) => {\r\n const [signeture, secretEncript] = signerure.split(\".\");\r\n const signetureHash = crypto.hash(signeture);\r\n const secret = crypto.decrypt(secretEncript, signetureHash);\r\n const secretVal = crypto.decrypt(signeture, secret);\r\n if (secretVal !== secret) throw new Error(\"Invalid Signeture\");\r\n return secretVal;\r\n}\r\n\r\nexport default {\r\n make,\r\n verify,\r\n key: \"x-signeture\"\r\n}"],"names":[],"mappings":"qCAEA,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,MAAc,KAAI;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC5C,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAC5D,IAAA,OAAO,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,aAAa,EAAE,CAAC;AAC1C,CAAC,CAAA;AAED,MAAM,MAAM,GAAG,CAAC,SAAiB,KAAI;AAClC,IAAA,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACpD,IAAI,SAAS,KAAK,MAAM;AAAE,QAAA,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;AAC/D,IAAA,OAAO,SAAS,CAAC;AACpB,CAAC,CAAA;AAED,gBAAe;IACZ,IAAI;IACJ,MAAM;AACN,IAAA,GAAG,EAAE,aAAa;CACpB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "securequ",
3
- "version": "1.0.12",
3
+ "version": "1.0.13",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "dependencies": {
package/server/index.d.ts CHANGED
@@ -1,18 +1,18 @@
1
1
  import { SecurequServerConfig, HTTPMethods, HandlerFunction, HandlerInfo, ListenerInfo, ServerResponse } from './types.js';
2
2
 
3
- declare class SecurequServer {
4
- private HandlerCache;
5
- private routes;
6
- private config;
7
- private secret;
8
- constructor(config: SecurequServerConfig);
9
- addRoute(path: string, method: HTTPMethods, handler: HandlerFunction): Promise<void>;
10
- get(path: string, handler: HandlerFunction): Promise<void>;
11
- post(path: string, handler: HandlerFunction): Promise<void>;
12
- put(path: string, handler: HandlerFunction): Promise<void>;
13
- delete(path: string, handler: HandlerFunction): Promise<void>;
14
- handleRequest(info: HandlerInfo, args?: any): Promise<void>;
15
- listen(listenerInfo: ListenerInfo, args?: any): Promise<ServerResponse>;
3
+ declare class SecurequServer {
4
+ private HandlerCache;
5
+ private routes;
6
+ private config;
7
+ private secret;
8
+ constructor(config: SecurequServerConfig);
9
+ addRoute(path: string, method: HTTPMethods, handler: HandlerFunction): Promise<void>;
10
+ get(path: string, handler: HandlerFunction): Promise<void>;
11
+ post(path: string, handler: HandlerFunction): Promise<void>;
12
+ put(path: string, handler: HandlerFunction): Promise<void>;
13
+ delete(path: string, handler: HandlerFunction): Promise<void>;
14
+ handleRequest(info: HandlerInfo, args?: any): Promise<void>;
15
+ listen(listenerInfo: ListenerInfo, args?: any): Promise<ServerResponse>;
16
16
  }
17
17
 
18
18
  export { SecurequServer, SecurequServer as default };
package/server/index.js CHANGED
@@ -1,116 +1,116 @@
1
- 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var pathToRegexp=require('path-to-regexp'),crypto=require('../include/lib/crypto.js'),reverser=require('../include/lib/reverser.js'),responseValue=require('../include/responseValue.js'),signeture=require('../include/signeture.js'),cache=require('../include/lib/cache.js');class SecurequServer {
2
- constructor(config) {
3
- this.HandlerCache = new cache({ ttl: 1000 * 60 * 60, limit: 100 });
4
- this.routes = {
5
- GET: {},
6
- POST: {},
7
- PUT: {},
8
- DELETE: {}
9
- };
10
- this.secret = crypto.makeSecret(Math.random().toString(36).substring(7));
11
- this.config = Object.assign({}, config);
12
- }
13
- async addRoute(path, method, handler) {
14
- if (this.routes[method][path])
15
- return;
16
- this.routes[method][path] = {
17
- handler,
18
- test: pathToRegexp.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];
74
- }
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];
81
- }
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
- }
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var pathToRegexp=require('path-to-regexp'),crypto=require('../include/lib/crypto.js'),reverser=require('../include/lib/reverser.js'),responseValue=require('../include/responseValue.js'),signeture=require('../include/signeture.js'),cache=require('../include/lib/cache.js');class SecurequServer {
2
+ constructor(config) {
3
+ this.HandlerCache = new cache.default({ ttl: 1000 * 60 * 60, limit: 100 });
4
+ this.routes = {
5
+ GET: {},
6
+ POST: {},
7
+ PUT: {},
8
+ DELETE: {}
9
+ };
10
+ this.secret = crypto.default.makeSecret(Math.random().toString(36).substring(7));
11
+ this.config = Object.assign({}, config);
12
+ }
13
+ async addRoute(path, method, handler) {
14
+ if (this.routes[method][path])
15
+ return;
16
+ this.routes[method][path] = {
17
+ handler,
18
+ test: pathToRegexp.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.default.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.default.decrypt(s)).filter((s) => s.length > 0);
61
+ url.pathname = `/${split.join("/")}`;
62
+ // handle handshake
63
+ const handshakeSecret = crypto.default.makeSecret(this.secret + clientSecret);
64
+ const reqkey = handshakeSecret.substring(0, handshakeSecret.length / 2);
65
+ if (method === 'GET' && url.pathname === "/handshake") {
66
+ throw crypto.default.encrypt(handshakeSecret, clientSecret);
67
+ }
68
+ let data = {}, searchParams = {};
69
+ if (url.searchParams.has(reqkey)) {
70
+ let decripted = crypto.default.decrypt(url.searchParams.get(reqkey), handshakeSecret);
71
+ for (let key in decripted) {
72
+ let ukey = reverser.default.decrypt(key);
73
+ searchParams[ukey] = decripted[key];
74
+ }
75
+ }
76
+ if (body && body[reqkey]) {
77
+ let decripted = crypto.default.decrypt(body[reqkey], handshakeSecret);
78
+ for (let key in decripted) {
79
+ let ukey = reverser.default.decrypt(key);
80
+ data[ukey] = decripted[key];
81
+ }
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.default.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.default.encrypt(text, listenerInfo.signeture)
104
+ };
105
+ }
106
+ return {
107
+ status: 200,
108
+ value: responseValue.default.encrypt(info, listenerInfo.signeture)
109
+ };
110
+ }
111
+ return {
112
+ status: 404,
113
+ value: 'Not Found'
114
+ };
115
+ }
116
116
  }exports.SecurequServer=SecurequServer;exports.default=SecurequServer;//# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","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":["SecurequCache","match"],"mappings":"4VAQa,cAAc,CAAA;AAWxB,IAAA,WAAA,CAAY,MAA4B,EAAA;AAVhC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAIA,KAAa,CAAkB,EAAE,GAAG,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACtF,QAAA,IAAA,CAAA,MAAM,GAAiB;AAC5B,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,MAAM,EAAE;SACV;QAEO,IAAA,CAAA,MAAM,GAAW,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAGhF,QAAA,IAAI,CAAC,MAAM,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,MAAM,CAAE;IAC9B;AAEA,IAAA,MAAM,QAAQ,CAAC,IAAY,EAAE,MAAmB,EAAE,OAAwB,EAAA;QACvE,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;YAAE;QAC/B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG;YACzB,OAAO;AACP,YAAA,IAAI,EAAEC,kBAAK,CAAC,IAAI;SAClB;IACJ;AAEA,IAAA,MAAM,GAAG,CAAC,IAAY,EAAE,OAAwB,EAAA;QAC7C,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC;IACtC;AAEA,IAAA,MAAM,IAAI,CAAC,IAAY,EAAE,OAAwB,EAAA;QAC9C,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC;IACvC;AAEA,IAAA,MAAM,GAAG,CAAC,IAAY,EAAE,OAAwB,EAAA;QAC7C,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC;IACtC;AAEA,IAAA,MAAM,MAAM,CAAC,IAAY,EAAE,OAAwB,EAAA;QAChD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC;IACzC;AAEA,IAAA,MAAM,aAAa,CAAC,IAAiB,EAAE,IAAU,EAAA;AAC9C,QAAA,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;AAC7B,QAAA,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAC;AAC7D,QAAA,IAAI,YAAY,EAAE;AACf,YAAA,MAAM,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC;YAC9B;AACF,QAAA;AACD,QAAA,IAAI,MAAM,GAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACpD,QAAA,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE;AACvB,YAAA,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK;AAC7B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;AACxB,YAAA,IAAI,KAAK,EAAE;AACR,gBAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;AAC1B,gBAAA,MAAM,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;AACzB,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,EAAE,OAAO,CAAC;AACrD,YAAA;AACH,QAAA;IACJ;AAEA,IAAA,MAAM,MAAM,CAAC,YAA0B,EAAE,IAAU,EAAA;QAChD,IAAI;AACD,YAAA,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC;YAE7G,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC;YAC7D,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY;YAC3C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,kBAAkB,CAAC;;AAG7C,YAAA,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC;AAC9D,YAAA,IAAI,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAC/F,GAAG,CAAC,QAAQ,GAAG,CAAA,CAAA,EAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE;;AAGpC,YAAA,MAAM,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC;AACrE,YAAA,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC,EAAE,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;YAEvE,IAAI,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE;gBACpD,MAAM,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,YAAY,CAAC;AACrD,YAAA;AAED,YAAA,IAAI,IAAI,GAAQ,EAAE,EAAE,YAAY,GAAQ,EAAE;YAE1C,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AAC/B,gBAAA,IAAI,SAAS,GAAQ,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAW,EAAE,eAAe,CAAC;AAC5F,gBAAA,KAAK,IAAI,GAAG,IAAI,SAAS,EAAE;oBACxB,IAAI,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC;oBAChC,YAAY,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC;AACrC,gBAAA;AACH,YAAA;AAED,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE;AACf,gBAAA,IAAI,SAAS,GAAQ,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;AAClE,gBAAA,KAAK,IAAI,GAAG,IAAI,SAAS,EAAE;oBACxB,IAAI,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC;oBAChC,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC;AAC7B,gBAAA;AACH,YAAA;;YAGD,MAAM,IAAI,CAAC,aAAa,CAAC;gBACtB,MAAM;gBACN,IAAI,EAAE,GAAG,CAAC,QAAQ;AAClB,gBAAA,IAAI,EAAE,IAAI;gBACV,YAAY;AACZ,gBAAA,MAAM,EAAE;aACV,EAAE,IAAI,CAAC;AACV,QAAA;AAAC,QAAA,OAAO,IAAS,EAAE;YACjB,IAAI,IAAI,YAAY,KAAK,EAAE;gBACxB,OAAO;AACJ,oBAAA,MAAM,EAAE,GAAG;AACX,oBAAA,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS;iBACnE;AACH,YAAA;iBAAM,IAAI,IAAI,YAAY,QAAQ,EAAE;AAClC,gBAAA,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE;gBAC5B,OAAO;oBACJ,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,SAAS;iBAC3D;AACH,YAAA;YACD,OAAO;AACJ,gBAAA,MAAM,EAAE,GAAG;gBACX,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,SAAS;aAC3D;AACH,QAAA;QAED,OAAO;AACJ,YAAA,MAAM,EAAE,GAAG;AACX,YAAA,KAAK,EAAE;SACT;IACJ;AACF"}
1
+ {"version":3,"file":"index.js","sources":["../../src/server/index.ts"],"sourcesContent":["import { match } from \"path-to-regexp\";\r\nimport crypto from \"../include/lib/crypto\";\r\nimport reverser from \"../include/lib/reverser\";\r\nimport responseValue from \"../include/responseValue\";\r\nimport signeture from \"../include/signeture\";\r\nimport { HandlerFunction, HandlerInfo, HTTPMethods, ListenerInfo, RouteFactory, ServerResponse, SecurequServerConfig } from \"./types\";\r\nimport SecurequCache from \"../include/lib/cache\";\r\n\r\nexport class SecurequServer {\r\n private HandlerCache = new SecurequCache<HandlerFunction>({ ttl: 1000 * 60 * 60, limit: 100 });\r\n private routes: RouteFactory = {\r\n GET: {},\r\n POST: {},\r\n PUT: {},\r\n DELETE: {}\r\n };\r\n private config: SecurequServerConfig;\r\n private secret: string = crypto.makeSecret(Math.random().toString(36).substring(7));\r\n\r\n constructor(config: SecurequServerConfig) {\r\n this.config = { ...config }\r\n }\r\n\r\n async addRoute(path: string, method: HTTPMethods, handler: HandlerFunction) {\r\n if (this.routes[method][path]) return\r\n this.routes[method][path] = {\r\n handler,\r\n test: match(path)\r\n }\r\n }\r\n\r\n async get(path: string, handler: HandlerFunction) {\r\n this.addRoute(path, 'GET', handler)\r\n }\r\n\r\n async post(path: string, handler: HandlerFunction) {\r\n this.addRoute(path, 'POST', handler)\r\n }\r\n\r\n async put(path: string, handler: HandlerFunction) {\r\n this.addRoute(path, 'PUT', handler)\r\n }\r\n\r\n async delete(path: string, handler: HandlerFunction) {\r\n this.addRoute(path, 'DELETE', handler)\r\n }\r\n\r\n async handleRequest(info: HandlerInfo, args?: any) {\r\n const { path, method } = info;\r\n let cacheHandler = this.HandlerCache.get(`${method}:${path}`);\r\n if (cacheHandler) {\r\n await cacheHandler(info, args)\r\n return\r\n }\r\n let values: any = Object.values(this.routes[method]);\r\n for (let value of values) {\r\n let { test, handler } = value\r\n const match = test(path)\r\n if (match) {\r\n info.params = match.params;\r\n await handler(info, args)\r\n this.HandlerCache.set(`${method}:${path}`, handler)\r\n }\r\n }\r\n }\r\n\r\n async listen(listenerInfo: ListenerInfo, args?: any): Promise<ServerResponse> {\r\n try {\r\n if (!listenerInfo.signeture || !listenerInfo.path || !listenerInfo.method) throw new Error(\"Invalid Request\");\r\n\r\n const clientSecret = signeture.verify(listenerInfo.signeture);\r\n const { path, body, method } = listenerInfo;\r\n const url = new URL(path, \"http://localhost\");\r\n\r\n // format the path\r\n url.pathname = url.pathname.replace(this.config.basepath, \"/\")\r\n let split = url.pathname.split(\"/\").map((s) => reverser.decrypt(s)).filter((s) => s.length > 0);\r\n url.pathname = `/${split.join(\"/\")}`;\r\n\r\n // handle handshake \r\n const handshakeSecret = crypto.makeSecret(this.secret + clientSecret);\r\n const reqkey = handshakeSecret.substring(0, handshakeSecret.length / 2);\r\n\r\n if (method === 'GET' && url.pathname === \"/handshake\") {\r\n throw crypto.encrypt(handshakeSecret, clientSecret)\r\n }\r\n\r\n let data: any = {}, searchParams: any = {}\r\n\r\n if (url.searchParams.has(reqkey)) {\r\n let decripted: any = crypto.decrypt(url.searchParams.get(reqkey) as string, handshakeSecret)\r\n for (let key in decripted) {\r\n let ukey = reverser.decrypt(key)\r\n searchParams[ukey] = decripted[key]\r\n }\r\n }\r\n\r\n if (body && body[reqkey]) {\r\n let decripted: any = crypto.decrypt(body[reqkey], handshakeSecret)\r\n for (let key in decripted) {\r\n let ukey = reverser.decrypt(key)\r\n data[ukey] = decripted[key]\r\n }\r\n }\r\n\r\n // handle the request\r\n await this.handleRequest({\r\n method,\r\n path: url.pathname,\r\n body: data,\r\n searchParams,\r\n params: {}\r\n }, args);\r\n } catch (info: any) {\r\n if (info instanceof Error) {\r\n return {\r\n status: 404,\r\n value: responseValue.encrypt(info.message, listenerInfo.signeture)\r\n }\r\n } else if (info instanceof Response) {\r\n let text = await info.text();\r\n return {\r\n status: info.status,\r\n value: responseValue.encrypt(text, listenerInfo.signeture)\r\n }\r\n }\r\n return {\r\n status: 200,\r\n value: responseValue.encrypt(info, listenerInfo.signeture)\r\n };\r\n }\r\n\r\n return {\r\n status: 404,\r\n value: 'Not Found'\r\n };\r\n }\r\n}\r\n\r\nexport default SecurequServer;"],"names":["SecurequCache","crypto","match","signeture","reverser","responseValue"],"mappings":"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"}
package/server/index.mjs CHANGED
@@ -1,116 +1,116 @@
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
- this.HandlerCache = new SecurequCache({ ttl: 1000 * 60 * 60, limit: 100 });
4
- this.routes = {
5
- GET: {},
6
- POST: {},
7
- PUT: {},
8
- DELETE: {}
9
- };
10
- this.secret = crypto.makeSecret(Math.random().toString(36).substring(7));
11
- this.config = Object.assign({}, config);
12
- }
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];
74
- }
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];
81
- }
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
- }
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
+ this.HandlerCache = new SecurequCache({ ttl: 1000 * 60 * 60, limit: 100 });
4
+ this.routes = {
5
+ GET: {},
6
+ POST: {},
7
+ PUT: {},
8
+ DELETE: {}
9
+ };
10
+ this.secret = crypto.makeSecret(Math.random().toString(36).substring(7));
11
+ this.config = Object.assign({}, config);
12
+ }
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];
74
+ }
75
+ }
76
+ if (body && 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];
81
+ }
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
116
  }export{SecurequServer,SecurequServer as default};//# sourceMappingURL=index.mjs.map