securequ 1.0.13 → 1.0.15

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/client/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { SecurequClientConfig, HttpRequestInit, RequestBody } from './types.js';
1
+ import { SecurequClientConfig, HttpRequestInit } from './types.js';
2
2
 
3
3
  declare class SecurequClient {
4
4
  private config;
@@ -16,10 +16,10 @@ declare class SecurequClient {
16
16
  private path;
17
17
  private handshake;
18
18
  send(path: string, init?: HttpRequestInit): Promise<Response>;
19
- get(path: string, init?: HttpRequestInit): Promise<Response>;
20
- post(path: string, body: RequestBody, init?: HttpRequestInit): Promise<Response>;
21
- put(path: string, body: RequestBody, init?: HttpRequestInit): Promise<Response>;
22
- delete(path: string, init?: HttpRequestInit): Promise<Response>;
19
+ get(path: string, init?: Omit<HttpRequestInit, 'body' | 'method'>): Promise<string>;
20
+ post(path: string, init?: Omit<HttpRequestInit, 'method'>): Promise<string>;
21
+ put(path: string, init?: Omit<HttpRequestInit, 'method'>): Promise<string>;
22
+ delete(path: string, init?: Omit<HttpRequestInit, 'method'>): Promise<string>;
23
23
  }
24
24
 
25
- export { SecurequClient, SecurequClient as default };
25
+ export { SecurequClient as default };
package/client/index.js CHANGED
@@ -38,7 +38,7 @@
38
38
  const params = new URLSearchParams(search);
39
39
  const paramsObject = Object.fromEntries(params.entries());
40
40
  let split = pathname.split("/").map((s) => urlpath.default.encrypt(s)).filter((s) => s.length > 0);
41
- path = `${this.config.path}/${split.join("/")}`;
41
+ path = `${this.config.basepath}/${split.join("/")}`;
42
42
  if (Object.keys(paramsObject).length) {
43
43
  for (let key in paramsObject) {
44
44
  paramsObject[urlpath.default.encrypt(key)] = paramsObject[key];
@@ -56,19 +56,33 @@
56
56
  return path;
57
57
  }
58
58
  async handshake() {
59
+ var _a, _b, _c;
59
60
  this.tokenLoading = true;
60
- const res = await xanFetch(this.path(`/handshake`), {
61
- method: "GET",
62
- headers: Object.assign(Object.assign({}, this.config.headers), { [signeture.default.key]: this.signerure }),
63
- });
64
- const value = responseValue.default.decrypt(await res.text(), this.signerure);
65
- const token = crypto.default.decrypt(value, this.secret);
66
- this.token = token;
67
- this.reqkey = token.substring(0, token.length / 2);
61
+ const res = await xanFetch(this.path(`/handshake`), Object.assign(Object.assign({}, (_a = this.config) === null || _a === void 0 ? void 0 : _a.defaultOptions), { method: "GET", headers: Object.assign(Object.assign({}, (_c = (_b = this.config) === null || _b === void 0 ? void 0 : _b.defaultOptions) === null || _c === void 0 ? void 0 : _c.headers), { [signeture.default.key]: this.signerure }) }));
68
62
  this.tokenLoading = false;
63
+ if (res.ok) {
64
+ const txt = await res.text();
65
+ const value = responseValue.default.decrypt(txt, this.signerure);
66
+ const token = crypto.default.decrypt(value, this.secret);
67
+ this.token = token;
68
+ this.reqkey = token.substring(0, token.length / 2);
69
+ }
70
+ else {
71
+ throw new Error("Handshake failed");
72
+ }
69
73
  }
70
74
  async send(path, init) {
71
- if (path === '/handshake') {
75
+ var _a, _b, _c;
76
+ if (init === null || init === void 0 ? void 0 : init.params) {
77
+ let url = new URL(path, window.location.origin);
78
+ for (let key in init.params) {
79
+ url.searchParams.set(key, init.params[key]);
80
+ }
81
+ path = url.pathname + url.search;
82
+ delete init.params;
83
+ }
84
+ let url = new URL(path, window.location.origin);
85
+ if (url.pathname === '/handshake') {
72
86
  throw new Error("Path is not allowed");
73
87
  }
74
88
  if (this.tokenLoading) {
@@ -84,64 +98,73 @@
84
98
  if (!this.token) {
85
99
  await this.handshake();
86
100
  }
87
- const info = Object.assign(Object.assign({ method: "GET" }, init), { headers: Object.assign(Object.assign(Object.assign({}, this.config.headers), init === null || init === void 0 ? void 0 : init.headers), { [signeture.default.key]: this.signerure }) });
88
- const cache_res = this.getCache(path, info.method);
89
- if (cache_res) {
90
- return cache_res.clone();
101
+ const httpOption = Object.assign(Object.assign(Object.assign({ method: "GET" }, (_a = this.config) === null || _a === void 0 ? void 0 : _a.defaultOptions), init), { headers: Object.assign(Object.assign(Object.assign({}, (_c = (_b = this.config) === null || _b === void 0 ? void 0 : _b.defaultOptions) === null || _c === void 0 ? void 0 : _c.headers), init === null || init === void 0 ? void 0 : init.headers), { [signeture.default.key]: this.signerure }) });
102
+ if (this.config.cache === true || this.config.cache) {
103
+ const cache_res = this.getCache(path, httpOption.method);
104
+ if (cache_res) {
105
+ return cache_res.clone();
106
+ }
91
107
  }
92
- if (info.body) {
108
+ if (httpOption.body) {
93
109
  if (!this.token)
94
110
  throw new Error("Token not loaded");
95
111
  const body = new FormData();
96
112
  let _data = {};
97
113
  let hasFile = false;
98
- for (let key in info.body) {
114
+ for (let key in httpOption.body) {
99
115
  let ukey = urlpath.default.encrypt(key);
100
- if (info.body[key] instanceof File) {
101
- body.append(ukey, info.body[key]);
116
+ if (httpOption.body[key] instanceof File) {
117
+ body.append(ukey, httpOption.body[key]);
102
118
  hasFile = true;
103
119
  }
104
120
  else {
105
- _data[ukey] = info.body[key];
121
+ _data[ukey] = httpOption.body[key];
106
122
  }
107
123
  }
108
124
  body.append(this.reqkey, crypto.default.encrypt(_data, this.token));
109
125
  if (!hasFile) {
110
- info.body = new URLSearchParams(body);
111
- if (!info.headers['Content-Type']) {
112
- info.headers['Content-Type'] = 'application/x-www-form-urlencoded';
126
+ httpOption.body = new URLSearchParams(body);
127
+ if (!httpOption.headers['Content-Type']) {
128
+ httpOption.headers['Content-Type'] = 'application/x-www-form-urlencoded';
113
129
  }
114
130
  }
115
131
  else {
116
- if (info.method === "GET") {
117
- info.method = "POST";
132
+ if (httpOption.method === "GET") {
133
+ httpOption.method = "POST";
118
134
  }
119
- info.body = body;
120
- if (!info.headers['Content-Type']) {
121
- info.headers['Content-Type'] = 'multipart/form-data';
135
+ httpOption.body = body;
136
+ if (!httpOption.headers['Content-Type']) {
137
+ httpOption.headers['Content-Type'] = 'multipart/form-data';
122
138
  }
123
139
  }
124
140
  }
125
- const response = await xanFetch(this.path(path), info);
141
+ const response = await xanFetch(this.path(path), httpOption);
126
142
  const res = response.clone();
127
143
  const text = await response.text();
128
144
  const value = responseValue.default.decrypt(text, this.signerure);
145
+ if (!response.ok) {
146
+ throw new Error(value);
147
+ }
129
148
  res.text = async () => value;
130
- if (this.config.cache === true && res.ok) {
131
- this.setCache(path, info.method, res.clone());
149
+ if ((this.config.cache === true || this.config.cache) && res.ok) {
150
+ this.setCache(path, httpOption.method, res.clone());
132
151
  }
133
152
  return res;
134
153
  }
135
154
  async get(path, init) {
136
- return await this.send(path, init);
155
+ const res = await this.send(path, init);
156
+ return await res.text();
137
157
  }
138
- async post(path, body, init) {
139
- return await this.send(path, Object.assign(Object.assign({}, init), { method: "POST", body: body }));
158
+ async post(path, init) {
159
+ const res = await this.send(path, Object.assign(Object.assign({}, init), { method: "POST" }));
160
+ return await res.text();
140
161
  }
141
- async put(path, body, init) {
142
- return await this.send(path, Object.assign(Object.assign({}, init), { method: "PUT", body: body }));
162
+ async put(path, init) {
163
+ const res = await this.send(path, Object.assign(Object.assign({}, init), { method: "PUT" }));
164
+ return await res.text();
143
165
  }
144
166
  async delete(path, init) {
145
- return await this.send(path, Object.assign(Object.assign({}, init), { method: "DELETE" }));
167
+ const res = await this.send(path, Object.assign(Object.assign({}, init), { method: "DELETE" }));
168
+ return await res.text();
146
169
  }
147
- }exports.SecurequClient=SecurequClient;exports.default=SecurequClient;//# sourceMappingURL=index.js.map
170
+ }exports.default=SecurequClient;//# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/client/index.ts"],"sourcesContent":["import crypto from \"../include/lib/crypto\";\r\nimport signeture from \"../include/signeture\";\r\nimport urlpath from \"../include/lib/urlpath\";\r\nimport { HttpRequestInit, RequestBody, SecurequClientConfig } from \"./types\";\r\nimport xanFetch from 'xanfetch'\r\nimport responseValue from \"../include/responseValue\";\r\nimport SecurequCache from \"../include/lib/cache\";\r\n\r\nexport class SecurequClient {\r\n private config: SecurequClientConfig;\r\n private token: string = '';\r\n private tokenLoading: boolean = false;\r\n private Cache = new SecurequCache<Response>({ ttl: 1000 * 60 * 60, limit: 100 });\r\n\r\n private secret: string;\r\n private secret_length: number;\r\n private signerure: string;\r\n private reqkey: string = '';\r\n\r\n constructor(config: SecurequClientConfig) {\r\n this.config = { ...config }\r\n const secret = crypto.makeSecret(config.secret)\r\n this.config.secret = secret;\r\n this.secret_length = secret.length - (Math.floor(Math.random() * 11) + 5);\r\n this.secret = crypto.makeSecret(secret.substring(0, this.secret_length))\r\n this.signerure = signeture.make(this.secret, this.secret);\r\n }\r\n\r\n private setCache(path: string, method: string, response: any) {\r\n const cacheKey = `${method}:${path}`;\r\n if (this.config.cache === true) {\r\n this.Cache.set(cacheKey, response);\r\n } else if (this.config.cache) {\r\n this.config.cache.set(cacheKey, response);\r\n }\r\n }\r\n\r\n private getCache(path: string, method: string,) {\r\n const cacheKey = `${method}:${path}`;\r\n if (this.config.cache === true) {\r\n return this.Cache.get(cacheKey);\r\n } else if (this.config.cache) {\r\n return this.config.cache.get(cacheKey);\r\n }\r\n }\r\n\r\n private PATH_CACHE = new SecurequCache<string>({ ttl: 1000 * 60 * 60, limit: 100 });\r\n private path(path: string) {\r\n let pathKey = path\r\n let has = this.PATH_CACHE.get(pathKey)\r\n if (!has) {\r\n const { search, pathname } = new URL(path, window.location.origin);\r\n const params = new URLSearchParams(search);\r\n const paramsObject = Object.fromEntries(params.entries());\r\n let split = pathname.split(\"/\").map((s) => urlpath.encrypt(s)).filter((s) => s.length > 0);\r\n path = `${this.config.path}/${split.join(\"/\")}`;\r\n if (Object.keys(paramsObject).length) {\r\n for (let key in paramsObject) {\r\n paramsObject[urlpath.encrypt(key)] = paramsObject[key]\r\n delete paramsObject[key]\r\n }\r\n const string = JSON.stringify(paramsObject)\r\n const text = encodeURIComponent(crypto.encrypt(string, this.token));\r\n path += `?${this.reqkey}=${text}`;\r\n }\r\n this.PATH_CACHE.set(pathKey, path);\r\n } else {\r\n path = has\r\n }\r\n return path\r\n }\r\n\r\n private async handshake() {\r\n this.tokenLoading = true;\r\n const res = await xanFetch(this.path(`/handshake`), {\r\n method: \"GET\",\r\n headers: {\r\n ...this.config.headers,\r\n [signeture.key]: this.signerure\r\n },\r\n })\r\n\r\n const value: any = responseValue.decrypt(await res.text(), this.signerure)\r\n const token = crypto.decrypt(value, this.secret)\r\n this.token = token;\r\n this.reqkey = token.substring(0, token.length / 2);\r\n this.tokenLoading = false;\r\n }\r\n\r\n async send(path: string, init?: HttpRequestInit): Promise<Response> {\r\n if (path === '/handshake') {\r\n throw new Error(\"Path is not allowed\")\r\n }\r\n if (this.tokenLoading) {\r\n await new Promise((resolve) => {\r\n const interval = setInterval(() => {\r\n if (!this.tokenLoading) {\r\n clearInterval(interval);\r\n resolve(null);\r\n }\r\n }, 100);\r\n })\r\n }\r\n\r\n if (!this.token) {\r\n await this.handshake();\r\n }\r\n\r\n const info: any = {\r\n method: \"GET\",\r\n ...init,\r\n headers: {\r\n ...this.config.headers,\r\n ...init?.headers,\r\n [signeture.key]: this.signerure\r\n },\r\n }\r\n\r\n const cache_res = this.getCache(path, info.method);\r\n if (cache_res) {\r\n return cache_res.clone();\r\n }\r\n\r\n if (info.body) {\r\n if (!this.token) throw new Error(\"Token not loaded\")\r\n const body = new FormData();\r\n let _data: any = {}\r\n let hasFile = false;\r\n for (let key in info.body) {\r\n let ukey = urlpath.encrypt(key);\r\n if (info.body[key] instanceof File) {\r\n body.append(ukey, info.body[key]);\r\n hasFile = true;\r\n } else {\r\n _data[ukey] = info.body[key];\r\n }\r\n }\r\n\r\n body.append(this.reqkey, crypto.encrypt(_data, this.token));\r\n\r\n if (!hasFile) {\r\n info.body = new URLSearchParams(body as any);\r\n if (!info.headers['Content-Type']) {\r\n info.headers['Content-Type'] = 'application/x-www-form-urlencoded';\r\n }\r\n } else {\r\n if (info.method === \"GET\") {\r\n info.method = \"POST\"\r\n }\r\n info.body = body\r\n if (!info.headers['Content-Type']) {\r\n info.headers['Content-Type'] = 'multipart/form-data';\r\n }\r\n }\r\n }\r\n\r\n const response = await xanFetch(this.path(path), info);\r\n const res = response.clone();\r\n const text = await response.text();\r\n const value: any = responseValue.decrypt(text, this.signerure)\r\n res.text = async () => value;\r\n if (this.config.cache === true && res.ok) {\r\n this.setCache(path, info.method, res.clone());\r\n }\r\n return res\r\n }\r\n\r\n async get(path: string, init?: HttpRequestInit) {\r\n return await this.send(path, init);\r\n }\r\n\r\n async post(path: string, body: RequestBody, init?: HttpRequestInit) {\r\n return await this.send(path, {\r\n ...init,\r\n method: \"POST\",\r\n body: body\r\n });\r\n }\r\n\r\n async put(path: string, body: RequestBody, init?: HttpRequestInit) {\r\n return await this.send(path, {\r\n ...init,\r\n method: \"PUT\",\r\n body: body\r\n });\r\n }\r\n\r\n async delete(path: string, init?: HttpRequestInit) {\r\n return await this.send(path, {\r\n ...init,\r\n method: \"DELETE\",\r\n });\r\n }\r\n}\r\n\r\nexport default SecurequClient;"],"names":["SecurequCache","crypto","signeture","urlpath","responseValue"],"mappings":"gVAQa,cAAc,CAAA;AAWxB,IAAA,WAAA,CAAY,MAA4B,EAAA;QAThC,IAAA,CAAA,KAAK,GAAW,EAAE,CAAC;QACnB,IAAA,CAAA,YAAY,GAAY,KAAK,CAAC;AAC9B,QAAA,IAAA,CAAA,KAAK,GAAG,IAAIA,aAAa,CAAW,EAAE,GAAG,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAKzE,IAAA,CAAA,MAAM,GAAW,EAAE,CAAC;AA6BpB,QAAA,IAAA,CAAA,UAAU,GAAG,IAAIA,aAAa,CAAS,EAAE,GAAG,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AA1BjF,QAAA,IAAI,CAAC,MAAM,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,MAAM,CAAE,CAAA;QAC3B,MAAM,MAAM,GAAGC,cAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AAC/C,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1E,QAAA,IAAI,CAAC,MAAM,GAAGA,cAAM,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAA;AACxE,QAAA,IAAI,CAAC,SAAS,GAAGC,iBAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7D,CAAC;AAEO,IAAA,QAAQ,CAAC,IAAY,EAAE,MAAc,EAAE,QAAa,EAAA;AACzD,QAAA,MAAM,QAAQ,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAI,EAAE,CAAC;AACrC,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE;YAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACrC,QAAA,CAAA;AAAM,aAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC5C,QAAA,CAAA;IACJ,CAAC;IAEO,QAAQ,CAAC,IAAY,EAAE,MAAc,EAAA;AAC1C,QAAA,MAAM,QAAQ,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,IAAI,EAAE,CAAC;AACrC,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE;YAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAClC,QAAA,CAAA;AAAM,aAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACzC,QAAA,CAAA;IACJ,CAAC;AAGO,IAAA,IAAI,CAAC,IAAY,EAAA;QACtB,IAAI,OAAO,GAAG,IAAI,CAAA;QAClB,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACtC,IAAI,CAAC,GAAG,EAAE;AACP,YAAA,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACnE,YAAA,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;YAC3C,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;AAC1D,YAAA,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAKC,eAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC3F,YAAA,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE;AACnC,gBAAA,KAAK,IAAI,GAAG,IAAI,YAAY,EAAE;AAC3B,oBAAA,YAAY,CAACA,eAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;AACtD,oBAAA,OAAO,YAAY,CAAC,GAAG,CAAC,CAAA;AAC1B,gBAAA,CAAA;gBACD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;AAC3C,gBAAA,MAAM,IAAI,GAAG,kBAAkB,CAACF,cAAM,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACpE,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAA,CAAA,EAAI,IAAI,EAAE,CAAC;AACpC,YAAA,CAAA;YACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACrC,QAAA,CAAA;AAAM,aAAA;YACJ,IAAI,GAAG,GAAG,CAAA;AACZ,QAAA,CAAA;AACD,QAAA,OAAO,IAAI,CAAA;IACd,CAAC;AAEO,IAAA,MAAM,SAAS,GAAA;AACpB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,UAAA,CAAY,CAAC,EAAE;AACjD,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,OAAO,kCACD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAA,EAAA,EACtB,CAACC,iBAAS,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,EAAA,CACjC;AACH,SAAA,CAAC,CAAA;AAEF,QAAA,MAAM,KAAK,GAAQE,qBAAa,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;AAC1E,QAAA,MAAM,KAAK,GAAGH,cAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;AAChD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC7B,CAAC;AAED,IAAA,MAAM,IAAI,CAAC,IAAY,EAAE,IAAsB,EAAA;QAC5C,IAAI,IAAI,KAAK,YAAY,EAAE;AACxB,YAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;AACxC,QAAA,CAAA;QACD,IAAI,IAAI,CAAC,YAAY,EAAE;AACpB,YAAA,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAC3B,gBAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAK;AAC/B,oBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;wBACrB,aAAa,CAAC,QAAQ,CAAC,CAAC;wBACxB,OAAO,CAAC,IAAI,CAAC,CAAC;AAChB,oBAAA,CAAA;gBACJ,CAAC,EAAE,GAAG,CAAC,CAAC;AACX,YAAA,CAAC,CAAC,CAAA;AACJ,QAAA,CAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;AACzB,QAAA,CAAA;AAED,QAAA,MAAM,IAAI,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EACP,MAAM,EAAE,KAAK,EAAA,EACV,IAAI,CAAA,EAAA,EACP,OAAO,gDACD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAA,EACnB,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,MAAA,GAAA,MAAA,GAAJ,IAAI,CAAE,OAAO,KAChB,CAACC,iBAAS,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,MAEpC,CAAA;AAED,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACnD,QAAA,IAAI,SAAS,EAAE;AACZ,YAAA,OAAO,SAAS,CAAC,KAAK,EAAE,CAAC;AAC3B,QAAA,CAAA;QAED,IAAI,IAAI,CAAC,IAAI,EAAE;YACZ,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;AACpD,YAAA,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,KAAK,GAAQ,EAAE,CAAA;YACnB,IAAI,OAAO,GAAG,KAAK,CAAC;AACpB,YAAA,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE;gBACxB,IAAI,IAAI,GAAGC,eAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAChC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE;AACjC,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oBAClC,OAAO,GAAG,IAAI,CAAC;AACjB,gBAAA,CAAA;AAAM,qBAAA;oBACJ,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/B,gBAAA,CAAA;AACH,YAAA,CAAA;AAED,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAEF,cAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAE5D,IAAI,CAAC,OAAO,EAAE;gBACX,IAAI,CAAC,IAAI,GAAG,IAAI,eAAe,CAAC,IAAW,CAAC,CAAC;AAC7C,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;AAChC,oBAAA,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,mCAAmC,CAAC;AACrE,gBAAA,CAAA;AACH,YAAA,CAAA;AAAM,iBAAA;AACJ,gBAAA,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE;AACxB,oBAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;AACtB,gBAAA,CAAA;AACD,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;AAChB,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;AAChC,oBAAA,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,qBAAqB,CAAC;AACvD,gBAAA,CAAA;AACH,YAAA,CAAA;AACH,QAAA,CAAA;AAED,QAAA,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AACvD,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;AAC7B,QAAA,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;AACnC,QAAA,MAAM,KAAK,GAAQG,qBAAa,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;QAC9D,GAAG,CAAC,IAAI,GAAG,YAAY,KAAK,CAAC;QAC7B,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,EAAE;AACvC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;AAChD,QAAA,CAAA;AACD,QAAA,OAAO,GAAG,CAAA;IACb,CAAC;AAED,IAAA,MAAM,GAAG,CAAC,IAAY,EAAE,IAAsB,EAAA;QAC3C,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;AAED,IAAA,MAAM,IAAI,CAAC,IAAY,EAAE,IAAiB,EAAE,IAAsB,EAAA;AAC/D,QAAA,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACrB,IAAI,CAAA,EAAA,EACP,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,IACX,CAAC;IACN,CAAC;AAED,IAAA,MAAM,GAAG,CAAC,IAAY,EAAE,IAAiB,EAAE,IAAsB,EAAA;AAC9D,QAAA,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACrB,IAAI,CAAA,EAAA,EACP,MAAM,EAAE,KAAK,EACb,IAAI,EAAE,IAAI,IACX,CAAC;IACN,CAAC;AAED,IAAA,MAAM,MAAM,CAAC,IAAY,EAAE,IAAsB,EAAA;AAC9C,QAAA,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACrB,IAAI,CAAA,EAAA,EACP,MAAM,EAAE,QAAQ,IACjB,CAAC;IACN,CAAC;AACH"}
1
+ {"version":3,"file":"index.js","sources":["../../src/client/index.ts"],"sourcesContent":["import crypto from \"../include/lib/crypto\";\r\nimport signeture from \"../include/signeture\";\r\nimport urlpath from \"../include/lib/urlpath\";\r\nimport { HttpRequestInit, RequestBody, SecurequClientConfig } from \"./types\";\r\nimport xanFetch from 'xanfetch'\r\nimport responseValue from \"../include/responseValue\";\r\nimport SecurequCache from \"../include/lib/cache\";\r\n\r\nclass SecurequClient {\r\n private config: SecurequClientConfig;\r\n private token: string = '';\r\n private tokenLoading: boolean = false;\r\n private Cache = new SecurequCache<Response>({ ttl: 1000 * 60 * 60, limit: 100 });\r\n\r\n private secret: string;\r\n private secret_length: number;\r\n private signerure: string;\r\n private reqkey: string = '';\r\n\r\n constructor(config: SecurequClientConfig) {\r\n this.config = { ...config }\r\n const secret = crypto.makeSecret(config.secret)\r\n this.config.secret = secret;\r\n this.secret_length = secret.length - (Math.floor(Math.random() * 11) + 5);\r\n this.secret = crypto.makeSecret(secret.substring(0, this.secret_length))\r\n this.signerure = signeture.make(this.secret, this.secret);\r\n }\r\n\r\n private setCache(path: string, method: string, response: any) {\r\n const cacheKey = `${method}:${path}`;\r\n if (this.config.cache === true) {\r\n this.Cache.set(cacheKey, response);\r\n } else if (this.config.cache) {\r\n this.config.cache.set(cacheKey, response);\r\n }\r\n }\r\n\r\n private getCache(path: string, method: string,) {\r\n const cacheKey = `${method}:${path}`;\r\n if (this.config.cache === true) {\r\n return this.Cache.get(cacheKey);\r\n } else if (this.config.cache) {\r\n return this.config.cache.get(cacheKey);\r\n }\r\n }\r\n\r\n private PATH_CACHE = new SecurequCache<string>({ ttl: 1000 * 60 * 60, limit: 100 });\r\n private path(path: string) {\r\n let pathKey = path\r\n let has = this.PATH_CACHE.get(pathKey)\r\n if (!has) {\r\n const { search, pathname } = new URL(path, window.location.origin);\r\n const params = new URLSearchParams(search);\r\n const paramsObject = Object.fromEntries(params.entries());\r\n let split = pathname.split(\"/\").map((s) => urlpath.encrypt(s)).filter((s) => s.length > 0);\r\n path = `${this.config.basepath}/${split.join(\"/\")}`;\r\n if (Object.keys(paramsObject).length) {\r\n for (let key in paramsObject) {\r\n paramsObject[urlpath.encrypt(key)] = paramsObject[key]\r\n delete paramsObject[key]\r\n }\r\n const string = JSON.stringify(paramsObject)\r\n const text = encodeURIComponent(crypto.encrypt(string, this.token));\r\n path += `?${this.reqkey}=${text}`;\r\n }\r\n this.PATH_CACHE.set(pathKey, path);\r\n } else {\r\n path = has\r\n }\r\n return path\r\n }\r\n\r\n private async handshake() {\r\n this.tokenLoading = true;\r\n const res = await xanFetch(this.path(`/handshake`), {\r\n ...this.config?.defaultOptions,\r\n method: \"GET\",\r\n headers: {\r\n ...this.config?.defaultOptions?.headers,\r\n [signeture.key]: this.signerure\r\n },\r\n })\r\n this.tokenLoading = false;\r\n\r\n if (res.ok) {\r\n const txt = await res.text();\r\n const value: any = responseValue.decrypt(txt, this.signerure)\r\n const token = crypto.decrypt(value, this.secret)\r\n this.token = token;\r\n this.reqkey = token.substring(0, token.length / 2);\r\n } else {\r\n throw new Error(\"Handshake failed\");\r\n }\r\n }\r\n\r\n async send(path: string, init?: HttpRequestInit): Promise<Response> {\r\n if (init?.params) {\r\n let url = new URL(path, window.location.origin);\r\n for (let key in init.params) {\r\n url.searchParams.set(key, (init.params as any)[key]);\r\n }\r\n path = url.pathname + url.search;\r\n delete init.params;\r\n }\r\n let url = new URL(path, window.location.origin);\r\n if (url.pathname === '/handshake') {\r\n throw new Error(\"Path is not allowed\")\r\n }\r\n if (this.tokenLoading) {\r\n await new Promise((resolve) => {\r\n const interval = setInterval(() => {\r\n if (!this.tokenLoading) {\r\n clearInterval(interval);\r\n resolve(null);\r\n }\r\n }, 100);\r\n })\r\n }\r\n\r\n if (!this.token) {\r\n await this.handshake();\r\n }\r\n\r\n const httpOption: any = {\r\n method: \"GET\",\r\n ...this.config?.defaultOptions,\r\n ...init,\r\n headers: {\r\n ...this.config?.defaultOptions?.headers,\r\n ...init?.headers,\r\n [signeture.key]: this.signerure\r\n },\r\n }\r\n\r\n if (this.config.cache === true || this.config.cache) {\r\n const cache_res = this.getCache(path, httpOption.method);\r\n if (cache_res) {\r\n return cache_res.clone();\r\n }\r\n }\r\n\r\n if (httpOption.body) {\r\n if (!this.token) throw new Error(\"Token not loaded\")\r\n const body = new FormData();\r\n let _data: any = {}\r\n let hasFile = false;\r\n for (let key in httpOption.body) {\r\n let ukey = urlpath.encrypt(key);\r\n if (httpOption.body[key] instanceof File) {\r\n body.append(ukey, httpOption.body[key]);\r\n hasFile = true;\r\n } else {\r\n _data[ukey] = httpOption.body[key];\r\n }\r\n }\r\n\r\n body.append(this.reqkey, crypto.encrypt(_data, this.token));\r\n\r\n if (!hasFile) {\r\n httpOption.body = new URLSearchParams(body as any);\r\n if (!httpOption.headers['Content-Type']) {\r\n httpOption.headers['Content-Type'] = 'application/x-www-form-urlencoded';\r\n }\r\n } else {\r\n if (httpOption.method === \"GET\") {\r\n httpOption.method = \"POST\"\r\n }\r\n httpOption.body = body\r\n if (!httpOption.headers['Content-Type']) {\r\n httpOption.headers['Content-Type'] = 'multipart/form-data';\r\n }\r\n }\r\n }\r\n\r\n const response = await xanFetch(this.path(path), httpOption);\r\n const res = response.clone();\r\n const text = await response.text();\r\n const value: any = responseValue.decrypt(text, this.signerure)\r\n if (!response.ok) {\r\n throw new Error(value);\r\n }\r\n res.text = async () => value;\r\n if ((this.config.cache === true || this.config.cache) && res.ok) {\r\n this.setCache(path, httpOption.method, res.clone());\r\n }\r\n return res\r\n }\r\n\r\n async get(path: string, init?: Omit<HttpRequestInit, 'body' | 'method'>) {\r\n const res = await this.send(path, init);\r\n return await res.text()\r\n }\r\n\r\n async post(path: string, init?: Omit<HttpRequestInit, 'method'>) {\r\n const res = await this.send(path, {\r\n ...init,\r\n method: \"POST\",\r\n });\r\n return await res.text();\r\n }\r\n\r\n async put(path: string, init?: Omit<HttpRequestInit, 'method'>) {\r\n const res = await this.send(path, {\r\n ...init,\r\n method: \"PUT\",\r\n });\r\n return await res.text();\r\n }\r\n\r\n async delete(path: string, init?: Omit<HttpRequestInit, 'method'>) {\r\n const res = await this.send(path, {\r\n ...init,\r\n method: \"DELETE\",\r\n });\r\n return await res.text();\r\n }\r\n}\r\n\r\nexport default SecurequClient;"],"names":["SecurequCache","crypto","signeture","urlpath","responseValue"],"mappings":"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"}
package/client/index.mjs CHANGED
@@ -38,7 +38,7 @@ import crypto from'../include/lib/crypto.mjs';import signeture from'../include/s
38
38
  const params = new URLSearchParams(search);
39
39
  const paramsObject = Object.fromEntries(params.entries());
40
40
  let split = pathname.split("/").map((s) => urlpath.encrypt(s)).filter((s) => s.length > 0);
41
- path = `${this.config.path}/${split.join("/")}`;
41
+ path = `${this.config.basepath}/${split.join("/")}`;
42
42
  if (Object.keys(paramsObject).length) {
43
43
  for (let key in paramsObject) {
44
44
  paramsObject[urlpath.encrypt(key)] = paramsObject[key];
@@ -56,19 +56,33 @@ import crypto from'../include/lib/crypto.mjs';import signeture from'../include/s
56
56
  return path;
57
57
  }
58
58
  async handshake() {
59
+ var _a, _b, _c;
59
60
  this.tokenLoading = true;
60
- const res = await xanFetch(this.path(`/handshake`), {
61
- method: "GET",
62
- headers: Object.assign(Object.assign({}, this.config.headers), { [signeture.key]: this.signerure }),
63
- });
64
- const value = responseValue.decrypt(await res.text(), this.signerure);
65
- const token = crypto.decrypt(value, this.secret);
66
- this.token = token;
67
- this.reqkey = token.substring(0, token.length / 2);
61
+ const res = await xanFetch(this.path(`/handshake`), Object.assign(Object.assign({}, (_a = this.config) === null || _a === void 0 ? void 0 : _a.defaultOptions), { method: "GET", headers: Object.assign(Object.assign({}, (_c = (_b = this.config) === null || _b === void 0 ? void 0 : _b.defaultOptions) === null || _c === void 0 ? void 0 : _c.headers), { [signeture.key]: this.signerure }) }));
68
62
  this.tokenLoading = false;
63
+ if (res.ok) {
64
+ const txt = await res.text();
65
+ const value = responseValue.decrypt(txt, this.signerure);
66
+ const token = crypto.decrypt(value, this.secret);
67
+ this.token = token;
68
+ this.reqkey = token.substring(0, token.length / 2);
69
+ }
70
+ else {
71
+ throw new Error("Handshake failed");
72
+ }
69
73
  }
70
74
  async send(path, init) {
71
- if (path === '/handshake') {
75
+ var _a, _b, _c;
76
+ if (init === null || init === void 0 ? void 0 : init.params) {
77
+ let url = new URL(path, window.location.origin);
78
+ for (let key in init.params) {
79
+ url.searchParams.set(key, init.params[key]);
80
+ }
81
+ path = url.pathname + url.search;
82
+ delete init.params;
83
+ }
84
+ let url = new URL(path, window.location.origin);
85
+ if (url.pathname === '/handshake') {
72
86
  throw new Error("Path is not allowed");
73
87
  }
74
88
  if (this.tokenLoading) {
@@ -84,64 +98,73 @@ import crypto from'../include/lib/crypto.mjs';import signeture from'../include/s
84
98
  if (!this.token) {
85
99
  await this.handshake();
86
100
  }
87
- const info = Object.assign(Object.assign({ method: "GET" }, init), { headers: Object.assign(Object.assign(Object.assign({}, this.config.headers), init === null || init === void 0 ? void 0 : init.headers), { [signeture.key]: this.signerure }) });
88
- const cache_res = this.getCache(path, info.method);
89
- if (cache_res) {
90
- return cache_res.clone();
101
+ const httpOption = Object.assign(Object.assign(Object.assign({ method: "GET" }, (_a = this.config) === null || _a === void 0 ? void 0 : _a.defaultOptions), init), { headers: Object.assign(Object.assign(Object.assign({}, (_c = (_b = this.config) === null || _b === void 0 ? void 0 : _b.defaultOptions) === null || _c === void 0 ? void 0 : _c.headers), init === null || init === void 0 ? void 0 : init.headers), { [signeture.key]: this.signerure }) });
102
+ if (this.config.cache === true || this.config.cache) {
103
+ const cache_res = this.getCache(path, httpOption.method);
104
+ if (cache_res) {
105
+ return cache_res.clone();
106
+ }
91
107
  }
92
- if (info.body) {
108
+ if (httpOption.body) {
93
109
  if (!this.token)
94
110
  throw new Error("Token not loaded");
95
111
  const body = new FormData();
96
112
  let _data = {};
97
113
  let hasFile = false;
98
- for (let key in info.body) {
114
+ for (let key in httpOption.body) {
99
115
  let ukey = urlpath.encrypt(key);
100
- if (info.body[key] instanceof File) {
101
- body.append(ukey, info.body[key]);
116
+ if (httpOption.body[key] instanceof File) {
117
+ body.append(ukey, httpOption.body[key]);
102
118
  hasFile = true;
103
119
  }
104
120
  else {
105
- _data[ukey] = info.body[key];
121
+ _data[ukey] = httpOption.body[key];
106
122
  }
107
123
  }
108
124
  body.append(this.reqkey, crypto.encrypt(_data, this.token));
109
125
  if (!hasFile) {
110
- info.body = new URLSearchParams(body);
111
- if (!info.headers['Content-Type']) {
112
- info.headers['Content-Type'] = 'application/x-www-form-urlencoded';
126
+ httpOption.body = new URLSearchParams(body);
127
+ if (!httpOption.headers['Content-Type']) {
128
+ httpOption.headers['Content-Type'] = 'application/x-www-form-urlencoded';
113
129
  }
114
130
  }
115
131
  else {
116
- if (info.method === "GET") {
117
- info.method = "POST";
132
+ if (httpOption.method === "GET") {
133
+ httpOption.method = "POST";
118
134
  }
119
- info.body = body;
120
- if (!info.headers['Content-Type']) {
121
- info.headers['Content-Type'] = 'multipart/form-data';
135
+ httpOption.body = body;
136
+ if (!httpOption.headers['Content-Type']) {
137
+ httpOption.headers['Content-Type'] = 'multipart/form-data';
122
138
  }
123
139
  }
124
140
  }
125
- const response = await xanFetch(this.path(path), info);
141
+ const response = await xanFetch(this.path(path), httpOption);
126
142
  const res = response.clone();
127
143
  const text = await response.text();
128
144
  const value = responseValue.decrypt(text, this.signerure);
145
+ if (!response.ok) {
146
+ throw new Error(value);
147
+ }
129
148
  res.text = async () => value;
130
- if (this.config.cache === true && res.ok) {
131
- this.setCache(path, info.method, res.clone());
149
+ if ((this.config.cache === true || this.config.cache) && res.ok) {
150
+ this.setCache(path, httpOption.method, res.clone());
132
151
  }
133
152
  return res;
134
153
  }
135
154
  async get(path, init) {
136
- return await this.send(path, init);
155
+ const res = await this.send(path, init);
156
+ return await res.text();
137
157
  }
138
- async post(path, body, init) {
139
- return await this.send(path, Object.assign(Object.assign({}, init), { method: "POST", body: body }));
158
+ async post(path, init) {
159
+ const res = await this.send(path, Object.assign(Object.assign({}, init), { method: "POST" }));
160
+ return await res.text();
140
161
  }
141
- async put(path, body, init) {
142
- return await this.send(path, Object.assign(Object.assign({}, init), { method: "PUT", body: body }));
162
+ async put(path, init) {
163
+ const res = await this.send(path, Object.assign(Object.assign({}, init), { method: "PUT" }));
164
+ return await res.text();
143
165
  }
144
166
  async delete(path, init) {
145
- return await this.send(path, Object.assign(Object.assign({}, init), { method: "DELETE" }));
167
+ const res = await this.send(path, Object.assign(Object.assign({}, init), { method: "DELETE" }));
168
+ return await res.text();
146
169
  }
147
- }export{SecurequClient,SecurequClient as default};//# sourceMappingURL=index.mjs.map
170
+ }export{SecurequClient as default};//# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/client/index.ts"],"sourcesContent":["import crypto from \"../include/lib/crypto\";\r\nimport signeture from \"../include/signeture\";\r\nimport urlpath from \"../include/lib/urlpath\";\r\nimport { HttpRequestInit, RequestBody, SecurequClientConfig } from \"./types\";\r\nimport xanFetch from 'xanfetch'\r\nimport responseValue from \"../include/responseValue\";\r\nimport SecurequCache from \"../include/lib/cache\";\r\n\r\nexport class SecurequClient {\r\n private config: SecurequClientConfig;\r\n private token: string = '';\r\n private tokenLoading: boolean = false;\r\n private Cache = new SecurequCache<Response>({ ttl: 1000 * 60 * 60, limit: 100 });\r\n\r\n private secret: string;\r\n private secret_length: number;\r\n private signerure: string;\r\n private reqkey: string = '';\r\n\r\n constructor(config: SecurequClientConfig) {\r\n this.config = { ...config }\r\n const secret = crypto.makeSecret(config.secret)\r\n this.config.secret = secret;\r\n this.secret_length = secret.length - (Math.floor(Math.random() * 11) + 5);\r\n this.secret = crypto.makeSecret(secret.substring(0, this.secret_length))\r\n this.signerure = signeture.make(this.secret, this.secret);\r\n }\r\n\r\n private setCache(path: string, method: string, response: any) {\r\n const cacheKey = `${method}:${path}`;\r\n if (this.config.cache === true) {\r\n this.Cache.set(cacheKey, response);\r\n } else if (this.config.cache) {\r\n this.config.cache.set(cacheKey, response);\r\n }\r\n }\r\n\r\n private getCache(path: string, method: string,) {\r\n const cacheKey = `${method}:${path}`;\r\n if (this.config.cache === true) {\r\n return this.Cache.get(cacheKey);\r\n } else if (this.config.cache) {\r\n return this.config.cache.get(cacheKey);\r\n }\r\n }\r\n\r\n private PATH_CACHE = new SecurequCache<string>({ ttl: 1000 * 60 * 60, limit: 100 });\r\n private path(path: string) {\r\n let pathKey = path\r\n let has = this.PATH_CACHE.get(pathKey)\r\n if (!has) {\r\n const { search, pathname } = new URL(path, window.location.origin);\r\n const params = new URLSearchParams(search);\r\n const paramsObject = Object.fromEntries(params.entries());\r\n let split = pathname.split(\"/\").map((s) => urlpath.encrypt(s)).filter((s) => s.length > 0);\r\n path = `${this.config.path}/${split.join(\"/\")}`;\r\n if (Object.keys(paramsObject).length) {\r\n for (let key in paramsObject) {\r\n paramsObject[urlpath.encrypt(key)] = paramsObject[key]\r\n delete paramsObject[key]\r\n }\r\n const string = JSON.stringify(paramsObject)\r\n const text = encodeURIComponent(crypto.encrypt(string, this.token));\r\n path += `?${this.reqkey}=${text}`;\r\n }\r\n this.PATH_CACHE.set(pathKey, path);\r\n } else {\r\n path = has\r\n }\r\n return path\r\n }\r\n\r\n private async handshake() {\r\n this.tokenLoading = true;\r\n const res = await xanFetch(this.path(`/handshake`), {\r\n method: \"GET\",\r\n headers: {\r\n ...this.config.headers,\r\n [signeture.key]: this.signerure\r\n },\r\n })\r\n\r\n const value: any = responseValue.decrypt(await res.text(), this.signerure)\r\n const token = crypto.decrypt(value, this.secret)\r\n this.token = token;\r\n this.reqkey = token.substring(0, token.length / 2);\r\n this.tokenLoading = false;\r\n }\r\n\r\n async send(path: string, init?: HttpRequestInit): Promise<Response> {\r\n if (path === '/handshake') {\r\n throw new Error(\"Path is not allowed\")\r\n }\r\n if (this.tokenLoading) {\r\n await new Promise((resolve) => {\r\n const interval = setInterval(() => {\r\n if (!this.tokenLoading) {\r\n clearInterval(interval);\r\n resolve(null);\r\n }\r\n }, 100);\r\n })\r\n }\r\n\r\n if (!this.token) {\r\n await this.handshake();\r\n }\r\n\r\n const info: any = {\r\n method: \"GET\",\r\n ...init,\r\n headers: {\r\n ...this.config.headers,\r\n ...init?.headers,\r\n [signeture.key]: this.signerure\r\n },\r\n }\r\n\r\n const cache_res = this.getCache(path, info.method);\r\n if (cache_res) {\r\n return cache_res.clone();\r\n }\r\n\r\n if (info.body) {\r\n if (!this.token) throw new Error(\"Token not loaded\")\r\n const body = new FormData();\r\n let _data: any = {}\r\n let hasFile = false;\r\n for (let key in info.body) {\r\n let ukey = urlpath.encrypt(key);\r\n if (info.body[key] instanceof File) {\r\n body.append(ukey, info.body[key]);\r\n hasFile = true;\r\n } else {\r\n _data[ukey] = info.body[key];\r\n }\r\n }\r\n\r\n body.append(this.reqkey, crypto.encrypt(_data, this.token));\r\n\r\n if (!hasFile) {\r\n info.body = new URLSearchParams(body as any);\r\n if (!info.headers['Content-Type']) {\r\n info.headers['Content-Type'] = 'application/x-www-form-urlencoded';\r\n }\r\n } else {\r\n if (info.method === \"GET\") {\r\n info.method = \"POST\"\r\n }\r\n info.body = body\r\n if (!info.headers['Content-Type']) {\r\n info.headers['Content-Type'] = 'multipart/form-data';\r\n }\r\n }\r\n }\r\n\r\n const response = await xanFetch(this.path(path), info);\r\n const res = response.clone();\r\n const text = await response.text();\r\n const value: any = responseValue.decrypt(text, this.signerure)\r\n res.text = async () => value;\r\n if (this.config.cache === true && res.ok) {\r\n this.setCache(path, info.method, res.clone());\r\n }\r\n return res\r\n }\r\n\r\n async get(path: string, init?: HttpRequestInit) {\r\n return await this.send(path, init);\r\n }\r\n\r\n async post(path: string, body: RequestBody, init?: HttpRequestInit) {\r\n return await this.send(path, {\r\n ...init,\r\n method: \"POST\",\r\n body: body\r\n });\r\n }\r\n\r\n async put(path: string, body: RequestBody, init?: HttpRequestInit) {\r\n return await this.send(path, {\r\n ...init,\r\n method: \"PUT\",\r\n body: body\r\n });\r\n }\r\n\r\n async delete(path: string, init?: HttpRequestInit) {\r\n return await this.send(path, {\r\n ...init,\r\n method: \"DELETE\",\r\n });\r\n }\r\n}\r\n\r\nexport default SecurequClient;"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../src/client/index.ts"],"sourcesContent":["import crypto from \"../include/lib/crypto\";\r\nimport signeture from \"../include/signeture\";\r\nimport urlpath from \"../include/lib/urlpath\";\r\nimport { HttpRequestInit, RequestBody, SecurequClientConfig } from \"./types\";\r\nimport xanFetch from 'xanfetch'\r\nimport responseValue from \"../include/responseValue\";\r\nimport SecurequCache from \"../include/lib/cache\";\r\n\r\nclass SecurequClient {\r\n private config: SecurequClientConfig;\r\n private token: string = '';\r\n private tokenLoading: boolean = false;\r\n private Cache = new SecurequCache<Response>({ ttl: 1000 * 60 * 60, limit: 100 });\r\n\r\n private secret: string;\r\n private secret_length: number;\r\n private signerure: string;\r\n private reqkey: string = '';\r\n\r\n constructor(config: SecurequClientConfig) {\r\n this.config = { ...config }\r\n const secret = crypto.makeSecret(config.secret)\r\n this.config.secret = secret;\r\n this.secret_length = secret.length - (Math.floor(Math.random() * 11) + 5);\r\n this.secret = crypto.makeSecret(secret.substring(0, this.secret_length))\r\n this.signerure = signeture.make(this.secret, this.secret);\r\n }\r\n\r\n private setCache(path: string, method: string, response: any) {\r\n const cacheKey = `${method}:${path}`;\r\n if (this.config.cache === true) {\r\n this.Cache.set(cacheKey, response);\r\n } else if (this.config.cache) {\r\n this.config.cache.set(cacheKey, response);\r\n }\r\n }\r\n\r\n private getCache(path: string, method: string,) {\r\n const cacheKey = `${method}:${path}`;\r\n if (this.config.cache === true) {\r\n return this.Cache.get(cacheKey);\r\n } else if (this.config.cache) {\r\n return this.config.cache.get(cacheKey);\r\n }\r\n }\r\n\r\n private PATH_CACHE = new SecurequCache<string>({ ttl: 1000 * 60 * 60, limit: 100 });\r\n private path(path: string) {\r\n let pathKey = path\r\n let has = this.PATH_CACHE.get(pathKey)\r\n if (!has) {\r\n const { search, pathname } = new URL(path, window.location.origin);\r\n const params = new URLSearchParams(search);\r\n const paramsObject = Object.fromEntries(params.entries());\r\n let split = pathname.split(\"/\").map((s) => urlpath.encrypt(s)).filter((s) => s.length > 0);\r\n path = `${this.config.basepath}/${split.join(\"/\")}`;\r\n if (Object.keys(paramsObject).length) {\r\n for (let key in paramsObject) {\r\n paramsObject[urlpath.encrypt(key)] = paramsObject[key]\r\n delete paramsObject[key]\r\n }\r\n const string = JSON.stringify(paramsObject)\r\n const text = encodeURIComponent(crypto.encrypt(string, this.token));\r\n path += `?${this.reqkey}=${text}`;\r\n }\r\n this.PATH_CACHE.set(pathKey, path);\r\n } else {\r\n path = has\r\n }\r\n return path\r\n }\r\n\r\n private async handshake() {\r\n this.tokenLoading = true;\r\n const res = await xanFetch(this.path(`/handshake`), {\r\n ...this.config?.defaultOptions,\r\n method: \"GET\",\r\n headers: {\r\n ...this.config?.defaultOptions?.headers,\r\n [signeture.key]: this.signerure\r\n },\r\n })\r\n this.tokenLoading = false;\r\n\r\n if (res.ok) {\r\n const txt = await res.text();\r\n const value: any = responseValue.decrypt(txt, this.signerure)\r\n const token = crypto.decrypt(value, this.secret)\r\n this.token = token;\r\n this.reqkey = token.substring(0, token.length / 2);\r\n } else {\r\n throw new Error(\"Handshake failed\");\r\n }\r\n }\r\n\r\n async send(path: string, init?: HttpRequestInit): Promise<Response> {\r\n if (init?.params) {\r\n let url = new URL(path, window.location.origin);\r\n for (let key in init.params) {\r\n url.searchParams.set(key, (init.params as any)[key]);\r\n }\r\n path = url.pathname + url.search;\r\n delete init.params;\r\n }\r\n let url = new URL(path, window.location.origin);\r\n if (url.pathname === '/handshake') {\r\n throw new Error(\"Path is not allowed\")\r\n }\r\n if (this.tokenLoading) {\r\n await new Promise((resolve) => {\r\n const interval = setInterval(() => {\r\n if (!this.tokenLoading) {\r\n clearInterval(interval);\r\n resolve(null);\r\n }\r\n }, 100);\r\n })\r\n }\r\n\r\n if (!this.token) {\r\n await this.handshake();\r\n }\r\n\r\n const httpOption: any = {\r\n method: \"GET\",\r\n ...this.config?.defaultOptions,\r\n ...init,\r\n headers: {\r\n ...this.config?.defaultOptions?.headers,\r\n ...init?.headers,\r\n [signeture.key]: this.signerure\r\n },\r\n }\r\n\r\n if (this.config.cache === true || this.config.cache) {\r\n const cache_res = this.getCache(path, httpOption.method);\r\n if (cache_res) {\r\n return cache_res.clone();\r\n }\r\n }\r\n\r\n if (httpOption.body) {\r\n if (!this.token) throw new Error(\"Token not loaded\")\r\n const body = new FormData();\r\n let _data: any = {}\r\n let hasFile = false;\r\n for (let key in httpOption.body) {\r\n let ukey = urlpath.encrypt(key);\r\n if (httpOption.body[key] instanceof File) {\r\n body.append(ukey, httpOption.body[key]);\r\n hasFile = true;\r\n } else {\r\n _data[ukey] = httpOption.body[key];\r\n }\r\n }\r\n\r\n body.append(this.reqkey, crypto.encrypt(_data, this.token));\r\n\r\n if (!hasFile) {\r\n httpOption.body = new URLSearchParams(body as any);\r\n if (!httpOption.headers['Content-Type']) {\r\n httpOption.headers['Content-Type'] = 'application/x-www-form-urlencoded';\r\n }\r\n } else {\r\n if (httpOption.method === \"GET\") {\r\n httpOption.method = \"POST\"\r\n }\r\n httpOption.body = body\r\n if (!httpOption.headers['Content-Type']) {\r\n httpOption.headers['Content-Type'] = 'multipart/form-data';\r\n }\r\n }\r\n }\r\n\r\n const response = await xanFetch(this.path(path), httpOption);\r\n const res = response.clone();\r\n const text = await response.text();\r\n const value: any = responseValue.decrypt(text, this.signerure)\r\n if (!response.ok) {\r\n throw new Error(value);\r\n }\r\n res.text = async () => value;\r\n if ((this.config.cache === true || this.config.cache) && res.ok) {\r\n this.setCache(path, httpOption.method, res.clone());\r\n }\r\n return res\r\n }\r\n\r\n async get(path: string, init?: Omit<HttpRequestInit, 'body' | 'method'>) {\r\n const res = await this.send(path, init);\r\n return await res.text()\r\n }\r\n\r\n async post(path: string, init?: Omit<HttpRequestInit, 'method'>) {\r\n const res = await this.send(path, {\r\n ...init,\r\n method: \"POST\",\r\n });\r\n return await res.text();\r\n }\r\n\r\n async put(path: string, init?: Omit<HttpRequestInit, 'method'>) {\r\n const res = await this.send(path, {\r\n ...init,\r\n method: \"PUT\",\r\n });\r\n return await res.text();\r\n }\r\n\r\n async delete(path: string, init?: Omit<HttpRequestInit, 'method'>) {\r\n const res = await this.send(path, {\r\n ...init,\r\n method: \"DELETE\",\r\n });\r\n return await res.text();\r\n }\r\n}\r\n\r\nexport default SecurequClient;"],"names":[],"mappings":"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"}
package/client/types.d.ts CHANGED
@@ -1,7 +1,9 @@
1
+ import { XanFetchOptions } from 'xanfetch/types';
2
+
1
3
  type SecurequClientConfig = {
2
4
  secret: string;
3
- path?: string;
4
- headers?: Record<string, string>;
5
+ basepath?: string;
6
+ defaultOptions?: XanFetchOptions;
5
7
  cache?: boolean | {
6
8
  get: (key: string) => any;
7
9
  set: (key: string, response: Response) => void;
@@ -10,7 +12,7 @@ type SecurequClientConfig = {
10
12
  type RequestBody = {
11
13
  [key: string]: any;
12
14
  };
13
- type HttpRequestInit = Omit<RequestInit, 'body'> & {
15
+ type HttpRequestInit = Omit<XanFetchOptions, 'body'> & {
14
16
  body?: RequestBody;
15
17
  };
16
18
 
@@ -25,4 +25,4 @@ function decompress(data) {
25
25
  var pako = {
26
26
  compress,
27
27
  decompress
28
- };exports.compress=compress;exports.decompress=decompress;exports.default=pako;//# sourceMappingURL=pako.js.map
28
+ };exports.default=pako;//# sourceMappingURL=pako.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pako.js","sources":["../../../src/include/lib/pako.ts"],"sourcesContent":["import pako from \"pako\";\r\nimport base64 from \"./base64\";\r\n\r\n/**\r\n * Compresses a string message using Pako (Gzip).\r\n * @param message - The plaintext string message to compress.\r\n * @returns A Base64 encoded string of the compressed data.\r\n */\r\nexport function compress(data: string, returnUnit8?: boolean): string | Uint8Array {\r\n const encoded = new TextEncoder().encode(data);\r\n const compressed = pako.gzip(encoded);\r\n if (returnUnit8) return compressed;\r\n return base64.encode(compressed);\r\n}\r\n\r\n/**\r\n * Decompresses a Base64 encoded compressed message using Pako (Gzip).\r\n * @param data - The Base64 encoded compressed data.\r\n * @returns The decompressed plaintext string.\r\n */\r\nexport function decompress(data: string | Uint8Array): string {\r\n if (typeof data === 'string') {\r\n data = base64.decode(data);\r\n }\r\n const decompressed = pako.ungzip(data);\r\n return new TextDecoder().decode(decompressed);\r\n}\r\n\r\nexport default {\r\n compress,\r\n decompress\r\n}"],"names":["pako","base64"],"mappings":"+HAGA;;;;AAIG;AACG,SAAU,QAAQ,CAAC,IAAY,EAAE,WAAqB,EAAA;IACzD,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAGA,MAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtC,IAAA,IAAI,WAAW;AAAE,QAAA,OAAO,UAAU,CAAC;AACnC,IAAA,OAAOC,cAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACpC,CAAC;AAED;;;;AAIG;AACG,SAAU,UAAU,CAAC,IAAyB,EAAA;AACjD,IAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC3B,QAAA,IAAI,GAAGA,cAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,IAAA,CAAA;IACD,MAAM,YAAY,GAAGD,MAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AACjD,CAAC;AAED,WAAe;IACZ,QAAQ;IACR,UAAU;CACZ"}
1
+ {"version":3,"file":"pako.js","sources":["../../../src/include/lib/pako.ts"],"sourcesContent":["import pako from \"pako\";\r\nimport base64 from \"./base64\";\r\n\r\n/**\r\n * Compresses a string message using Pako (Gzip).\r\n * @param message - The plaintext string message to compress.\r\n * @returns A Base64 encoded string of the compressed data.\r\n */\r\nfunction compress(data: string, returnUnit8?: boolean): string | Uint8Array {\r\n const encoded = new TextEncoder().encode(data);\r\n const compressed = pako.gzip(encoded);\r\n if (returnUnit8) return compressed;\r\n return base64.encode(compressed);\r\n}\r\n\r\n/**\r\n * Decompresses a Base64 encoded compressed message using Pako (Gzip).\r\n * @param data - The Base64 encoded compressed data.\r\n * @returns The decompressed plaintext string.\r\n */\r\nfunction decompress(data: string | Uint8Array): string {\r\n if (typeof data === 'string') {\r\n data = base64.decode(data);\r\n }\r\n const decompressed = pako.ungzip(data);\r\n return new TextDecoder().decode(decompressed);\r\n}\r\n\r\nexport default {\r\n compress,\r\n decompress\r\n}"],"names":["pako","base64"],"mappings":"+HAGA;;;;AAIG;AACH,SAAS,QAAQ,CAAC,IAAY,EAAE,WAAqB,EAAA;IAClD,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAGA,MAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtC,IAAA,IAAI,WAAW;AAAE,QAAA,OAAO,UAAU,CAAC;AACnC,IAAA,OAAOC,cAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACpC,CAAC;AAED;;;;AAIG;AACH,SAAS,UAAU,CAAC,IAAyB,EAAA;AAC1C,IAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC3B,QAAA,IAAI,GAAGA,cAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,IAAA,CAAA;IACD,MAAM,YAAY,GAAGD,MAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AACjD,CAAC;AAED,WAAe;IACZ,QAAQ;IACR,UAAU;CACZ"}
@@ -25,4 +25,4 @@ function decompress(data) {
25
25
  var pako = {
26
26
  compress,
27
27
  decompress
28
- };export{compress,decompress,pako as default};//# sourceMappingURL=pako.mjs.map
28
+ };export{pako as default};//# sourceMappingURL=pako.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"pako.mjs","sources":["../../../src/include/lib/pako.ts"],"sourcesContent":["import pako from \"pako\";\r\nimport base64 from \"./base64\";\r\n\r\n/**\r\n * Compresses a string message using Pako (Gzip).\r\n * @param message - The plaintext string message to compress.\r\n * @returns A Base64 encoded string of the compressed data.\r\n */\r\nexport function compress(data: string, returnUnit8?: boolean): string | Uint8Array {\r\n const encoded = new TextEncoder().encode(data);\r\n const compressed = pako.gzip(encoded);\r\n if (returnUnit8) return compressed;\r\n return base64.encode(compressed);\r\n}\r\n\r\n/**\r\n * Decompresses a Base64 encoded compressed message using Pako (Gzip).\r\n * @param data - The Base64 encoded compressed data.\r\n * @returns The decompressed plaintext string.\r\n */\r\nexport function decompress(data: string | Uint8Array): string {\r\n if (typeof data === 'string') {\r\n data = base64.decode(data);\r\n }\r\n const decompressed = pako.ungzip(data);\r\n return new TextDecoder().decode(decompressed);\r\n}\r\n\r\nexport default {\r\n compress,\r\n decompress\r\n}"],"names":["pako"],"mappings":"0DAGA;;;;AAIG;AACG,SAAU,QAAQ,CAAC,IAAY,EAAE,WAAqB,EAAA;IACzD,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAGA,MAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtC,IAAA,IAAI,WAAW;AAAE,QAAA,OAAO,UAAU,CAAC;AACnC,IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACpC,CAAC;AAED;;;;AAIG;AACG,SAAU,UAAU,CAAC,IAAyB,EAAA;AACjD,IAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC3B,QAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,IAAA,CAAA;IACD,MAAM,YAAY,GAAGA,MAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AACjD,CAAC;AAED,WAAe;IACZ,QAAQ;IACR,UAAU;CACZ"}
1
+ {"version":3,"file":"pako.mjs","sources":["../../../src/include/lib/pako.ts"],"sourcesContent":["import pako from \"pako\";\r\nimport base64 from \"./base64\";\r\n\r\n/**\r\n * Compresses a string message using Pako (Gzip).\r\n * @param message - The plaintext string message to compress.\r\n * @returns A Base64 encoded string of the compressed data.\r\n */\r\nfunction compress(data: string, returnUnit8?: boolean): string | Uint8Array {\r\n const encoded = new TextEncoder().encode(data);\r\n const compressed = pako.gzip(encoded);\r\n if (returnUnit8) return compressed;\r\n return base64.encode(compressed);\r\n}\r\n\r\n/**\r\n * Decompresses a Base64 encoded compressed message using Pako (Gzip).\r\n * @param data - The Base64 encoded compressed data.\r\n * @returns The decompressed plaintext string.\r\n */\r\nfunction decompress(data: string | Uint8Array): string {\r\n if (typeof data === 'string') {\r\n data = base64.decode(data);\r\n }\r\n const decompressed = pako.ungzip(data);\r\n return new TextDecoder().decode(decompressed);\r\n}\r\n\r\nexport default {\r\n compress,\r\n decompress\r\n}"],"names":["pako"],"mappings":"0DAGA;;;;AAIG;AACH,SAAS,QAAQ,CAAC,IAAY,EAAE,WAAqB,EAAA;IAClD,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAGA,MAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtC,IAAA,IAAI,WAAW;AAAE,QAAA,OAAO,UAAU,CAAC;AACnC,IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACpC,CAAC;AAED;;;;AAIG;AACH,SAAS,UAAU,CAAC,IAAyB,EAAA;AAC1C,IAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC3B,QAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,IAAA,CAAA;IACD,MAAM,YAAY,GAAGA,MAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AACjD,CAAC;AAED,WAAe;IACZ,QAAQ;IACR,UAAU;CACZ"}
package/index.js CHANGED
@@ -1 +1 @@
1
- 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var index=require('./server/index.js'),index$1=require('./client/index.js');exports.SecurequServer=index.SecurequServer;exports.SecurequClient=index$1.SecurequClient;//# sourceMappingURL=index.js.map
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var index=require('./server/index.js'),index$1=require('./client/index.js');exports.SecurequServer=index.default;exports.SecurequClient=index$1.default;//# sourceMappingURL=index.js.map
package/index.mjs CHANGED
@@ -1 +1 @@
1
- export{SecurequServer}from'./server/index.mjs';export{SecurequClient}from'./client/index.mjs';//# sourceMappingURL=index.mjs.map
1
+ export{default as SecurequServer}from'./server/index.mjs';export{default as SecurequClient}from'./client/index.mjs';//# sourceMappingURL=index.mjs.map
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "securequ",
3
- "version": "1.0.13",
3
+ "version": "1.0.15",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "dependencies": {
7
7
  "pako": "^2.1.0",
8
8
  "path-to-regexp": "^8.2.0",
9
9
  "tweetnacl": "^1.0.3",
10
- "xanfetch": "^1.0.7"
10
+ "xanfetch": "^1.0.8"
11
11
  },
12
12
  "devDependencies": {
13
13
  "@types/node": "^22.15.24",
package/server/index.d.ts CHANGED
@@ -15,4 +15,4 @@ declare class SecurequServer {
15
15
  listen(listenerInfo: ListenerInfo, args?: any): Promise<ServerResponse>;
16
16
  }
17
17
 
18
- export { SecurequServer, SecurequServer as default };
18
+ export { SecurequServer as default };
package/server/index.js CHANGED
@@ -55,7 +55,6 @@
55
55
  const clientSecret = signeture.default.verify(listenerInfo.signeture);
56
56
  const { path, body, method } = listenerInfo;
57
57
  const url = new URL(path, "http://localhost");
58
- // format the path
59
58
  url.pathname = url.pathname.replace(this.config.basepath, "/");
60
59
  let split = url.pathname.split("/").map((s) => reverser.default.decrypt(s)).filter((s) => s.length > 0);
61
60
  url.pathname = `/${split.join("/")}`;
@@ -113,4 +112,4 @@
113
112
  value: 'Not Found'
114
113
  };
115
114
  }
116
- }exports.SecurequServer=SecurequServer;exports.default=SecurequServer;//# sourceMappingURL=index.js.map
115
+ }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\";\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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"}
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\nclass 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 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
@@ -55,7 +55,6 @@ import {match}from'path-to-regexp';import crypto from'../include/lib/crypto.mjs'
55
55
  const clientSecret = signeture.verify(listenerInfo.signeture);
56
56
  const { path, body, method } = listenerInfo;
57
57
  const url = new URL(path, "http://localhost");
58
- // format the path
59
58
  url.pathname = url.pathname.replace(this.config.basepath, "/");
60
59
  let split = url.pathname.split("/").map((s) => reverser.decrypt(s)).filter((s) => s.length > 0);
61
60
  url.pathname = `/${split.join("/")}`;
@@ -113,4 +112,4 @@ import {match}from'path-to-regexp';import crypto from'../include/lib/crypto.mjs'
113
112
  value: 'Not Found'
114
113
  };
115
114
  }
116
- }export{SecurequServer,SecurequServer as default};//# sourceMappingURL=index.mjs.map
115
+ }export{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\";\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":[],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","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\nclass 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 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":[],"mappings":"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"}