securequ 1.1.19 → 1.1.21

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 (51) hide show
  1. package/client/Base.cjs +146 -146
  2. package/client/Base.cjs.map +1 -1
  3. package/client/Base.d.ts +18 -18
  4. package/client/Base.js +146 -146
  5. package/client/Base.js.map +1 -1
  6. package/client/index.cjs +155 -138
  7. package/client/index.cjs.map +1 -1
  8. package/client/index.d.ts +10 -10
  9. package/client/index.js +156 -139
  10. package/client/index.js.map +1 -1
  11. package/client/types.d.ts +39 -35
  12. package/include/compress.cjs +31 -31
  13. package/include/compress.cjs.map +1 -1
  14. package/include/compress.d.ts +9 -9
  15. package/include/compress.js +33 -33
  16. package/include/compress.js.map +1 -1
  17. package/include/crypto.cjs +132 -132
  18. package/include/crypto.cjs.map +1 -1
  19. package/include/crypto.d.ts +21 -21
  20. package/include/crypto.js +132 -132
  21. package/include/crypto.js.map +1 -1
  22. package/include/file-scaner.cjs +77 -95
  23. package/include/file-scaner.cjs.map +1 -1
  24. package/include/file-scaner.d.ts +11 -11
  25. package/include/file-scaner.js +74 -95
  26. package/include/file-scaner.js.map +1 -1
  27. package/include/file.cjs +78 -60
  28. package/include/file.cjs.map +1 -1
  29. package/include/file.js +78 -61
  30. package/include/file.js.map +1 -1
  31. package/index.cjs +1 -1
  32. package/index.d.ts +1 -1
  33. package/index.js +1 -1
  34. package/package.json +1 -1
  35. package/readme.md +312 -312
  36. package/server/Base.cjs +105 -105
  37. package/server/Base.cjs.map +1 -1
  38. package/server/Base.d.ts +20 -20
  39. package/server/Base.js +105 -105
  40. package/server/Base.js.map +1 -1
  41. package/server/Router.cjs +29 -29
  42. package/server/Router.cjs.map +1 -1
  43. package/server/Router.d.ts +7 -7
  44. package/server/Router.js +29 -29
  45. package/server/Router.js.map +1 -1
  46. package/server/index.cjs +185 -187
  47. package/server/index.cjs.map +1 -1
  48. package/server/index.d.ts +5 -5
  49. package/server/index.js +186 -188
  50. package/server/index.js.map +1 -1
  51. package/server/types.d.ts +72 -72
package/server/index.js CHANGED
@@ -1,196 +1,194 @@
1
1
  import { __asyncValues } from 'tslib';
2
2
  import crypto from '../include/crypto.js';
3
3
  import SecurequServerBase from './Base.js';
4
- import fileScaner from '../include/file-scaner.js';
4
+ import { fileScaner } from '../include/file-scaner.js';
5
5
  import { getFileId, totalChunks, chunkFile } from '../include/file.js';
6
6
 
7
- class SecurequServer extends SecurequServerBase {
8
- async handshake(body, clientInfo) {
9
- var _a, _b;
10
- const data = await crypto.decryptBuffer(body, clientInfo.secret);
11
- const serverSecret = await this.getSecret();
12
- if (!data)
13
- throw new Error("Invalid handshake data");
14
- if (data.hash !== clientInfo.hash) {
15
- throw new Error("Invalid handshake");
16
- }
17
- else if (data.secret !== clientInfo.secret) {
18
- throw new Error("Invalid handshake secret");
19
- }
20
- else if (Date.now() - data.clientTime > 30000) { // 30 seconds
21
- throw new Error("Handshake expired");
22
- }
23
- const serverTime = new Date();
24
- const clientDate = new Date(data.clientTime);
25
- const offsetMs = clientDate.getTime() - serverTime.getTime();
26
- let info = {
27
- dev: this.config.mode === 'development',
28
- timeDiffarenc: offsetMs,
29
- maxFileSize: ((_a = this.config.file) === null || _a === void 0 ? void 0 : _a.maxFilesize) || null,
30
- checkFileType: ((_b = this.config.file) === null || _b === void 0 ? void 0 : _b.checkFileType) || false,
31
- signeture: await crypto.encrypt({
32
- expire: Date.now() + 30000,
33
- hash: clientInfo.hash
34
- }, serverSecret)
35
- };
36
- throw info;
37
- }
38
- async uploadFile(file, onProgress) {
39
- var _a, e_1, _b, _c;
40
- var _d;
41
- if (!((_d = this.config.file) === null || _d === void 0 ? void 0 : _d.upload))
42
- throw new Response("Upload not supported", { status: 403 });
43
- const fileId = await getFileId(file);
44
- const chunkSize = this.config.file.chunkSize;
45
- const filemeta = {
46
- fileId: fileId,
47
- name: file.name,
48
- size: file.size,
49
- type: file.type,
50
- totalChunks: totalChunks(file, chunkSize),
51
- chunkIndex: 0,
52
- isFinish: false
53
- };
54
- try {
55
- for (var _e = true, _f = __asyncValues(chunkFile(file, chunkSize)), _g; _g = await _f.next(), _a = _g.done, !_a;) {
56
- _c = _g.value;
57
- _e = false;
58
- try {
59
- let { chunk, chunkIndex } = _c;
60
- if (this.config.file.checkFileType && chunkIndex === 0) {
61
- let fileType = fileScaner(chunk);
62
- if (!fileType)
63
- throw new Error("Unknown or unsupported file type");
64
- }
65
- filemeta.chunkIndex = chunkIndex;
66
- filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;
67
- await this.config.file.upload(chunk, filemeta);
68
- if (onProgress) {
69
- const progress = Math.floor(((chunkIndex + 1) / filemeta.totalChunks) * 100);
70
- onProgress(progress);
71
- }
72
- }
73
- finally {
74
- _e = true;
75
- }
76
- }
77
- }
78
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
79
- finally {
80
- try {
81
- if (!_e && !_a && (_b = _f.return)) await _b.call(_f);
82
- }
83
- finally { if (e_1) throw e_1.error; }
84
- }
85
- return filemeta;
86
- }
87
- async deleteFile(fileId) {
88
- var _a;
89
- if (!((_a = this.config.file) === null || _a === void 0 ? void 0 : _a.delete))
90
- throw new Response("Delete not supported", { status: 403 });
91
- await this.config.file.delete(fileId);
92
- }
93
- async listen(url, { body, headers, metadata }) {
94
- const signeture = headers['x-signeture'] || '';
95
- const origin = headers['x-origin'] || '';
96
- const method = headers['x-method'] || 'POST';
97
- let clientInfo = await this.clientInfo(url, origin);
98
- if (!clientInfo) {
99
- return {
100
- status: 403,
101
- value: "Client not allowed"
102
- };
103
- }
104
- let path = clientInfo.path;
105
- const isDev = path !== '/' && this.config.mode === 'development';
106
- try {
107
- if (path === '/' && method === "POST") {
108
- await this.handshake(body, clientInfo);
109
- }
110
- if (path === '/' && method === 'GET')
111
- throw new Response("Invalid method", { status: 405 });
112
- if (!signeture) {
113
- throw new Response("Signeture is required", { status: 403 });
114
- }
115
- const decryptSigneture = await crypto.decrypt(signeture, clientInfo.secret);
116
- if (!decryptSigneture)
117
- throw new Response("Invalid Signeture", { status: 403 });
118
- if (decryptSigneture.expire < Date.now())
119
- throw new Response("Request expired", { status: 403 });
120
- await this.isValidSigneture(decryptSigneture.signeture, clientInfo.hash);
121
- let data = null;
122
- if (body) {
123
- if (isDev) {
124
- const decoder = new TextDecoder();
125
- const text = decoder.decode(body).trim();
126
- if (text) {
127
- try {
128
- data = JSON.parse(text);
129
- }
130
- catch (error) {
131
- }
132
- }
133
- }
134
- else {
135
- data = await crypto.decryptBuffer(body, clientInfo.secret);
136
- }
137
- }
138
- if (path === '/') {
139
- const fileConfig = this.config.file;
140
- // handle file upload
141
- if (method === "PUT") {
142
- if (!(fileConfig === null || fileConfig === void 0 ? void 0 : fileConfig.upload))
143
- throw new Response("Upload not supported", { status: 403 });
144
- const filemeta = data.filemeta;
145
- const chunk = data.chunk;
146
- if (filemeta.chunkIndex === 0 && fileConfig.checkFileType && !fileScaner(chunk)) {
147
- throw new Error("Unknown or unsupported file type");
148
- }
149
- await fileConfig.upload(chunk, filemeta);
150
- throw { success: true };
151
- }
152
- else if (method === "DELETE") {
153
- await this.deleteFile(data.fileId);
154
- throw { success: true };
155
- }
156
- else {
157
- throw new Response("Invalid method", { status: 405 });
158
- }
159
- }
160
- await this.handleRequest({
161
- method,
162
- path,
163
- body: data,
164
- searchParams: clientInfo.searchParams,
165
- params: {}
166
- }, metadata);
167
- }
168
- catch (info) {
169
- const isError = info instanceof Error;
170
- const isResponse = info instanceof Response;
171
- let value = isError ? info.message : (isResponse ? await info.text() : info);
172
- if (isDev) {
173
- return {
174
- status: isError ? 404 : ((info === null || info === void 0 ? void 0 : info.status) || 200),
175
- value: JSON.stringify(value)
176
- };
177
- }
178
- return {
179
- status: isError ? 404 : ((info === null || info === void 0 ? void 0 : info.status) || 200),
180
- value: await crypto.encryptBuffer(value, clientInfo.secret)
181
- };
182
- }
183
- if (isDev) {
184
- return {
185
- status: 404,
186
- value: "Not found"
187
- };
188
- }
189
- return {
190
- status: 404,
191
- value: await crypto.encryptBuffer("Not found", clientInfo.secret)
192
- };
193
- }
7
+ class SecurequServer extends SecurequServerBase {
8
+ async handshake(body, clientInfo) {
9
+ var _a, _b;
10
+ const data = await crypto.decryptBuffer(body, clientInfo.secret);
11
+ const serverSecret = await this.getSecret();
12
+ if (!data)
13
+ throw new Error("Invalid handshake data");
14
+ if (data.hash !== clientInfo.hash) {
15
+ throw new Error("Invalid handshake");
16
+ }
17
+ else if (data.secret !== clientInfo.secret) {
18
+ throw new Error("Invalid handshake secret");
19
+ }
20
+ else if (Date.now() - data.clientTime > 30000) { // 30 seconds
21
+ throw new Error("Handshake expired");
22
+ }
23
+ const serverTime = new Date();
24
+ const clientDate = new Date(data.clientTime);
25
+ const offsetMs = clientDate.getTime() - serverTime.getTime();
26
+ let info = {
27
+ dev: this.config.mode === 'development',
28
+ timeDiffarenc: offsetMs,
29
+ maxFileSize: ((_a = this.config.file) === null || _a === void 0 ? void 0 : _a.maxFilesize) || null,
30
+ checkFileType: ((_b = this.config.file) === null || _b === void 0 ? void 0 : _b.checkFileType) || false,
31
+ signeture: await crypto.encrypt({
32
+ expire: Date.now() + 30000,
33
+ hash: clientInfo.hash
34
+ }, serverSecret)
35
+ };
36
+ throw info;
37
+ }
38
+ async uploadFile(file, onProgress) {
39
+ var _a, e_1, _b, _c;
40
+ var _d;
41
+ if (!((_d = this.config.file) === null || _d === void 0 ? void 0 : _d.upload))
42
+ throw new Response("Upload not supported", { status: 403 });
43
+ const fileId = await getFileId(file);
44
+ const chunkSize = this.config.file.chunkSize;
45
+ const filemeta = {
46
+ fileId: fileId,
47
+ name: file.name,
48
+ size: file.size,
49
+ type: file.type,
50
+ totalChunks: totalChunks(file, chunkSize),
51
+ chunkIndex: 0,
52
+ isFinish: false
53
+ };
54
+ try {
55
+ for (var _e = true, _f = __asyncValues(chunkFile(file, chunkSize)), _g; _g = await _f.next(), _a = _g.done, !_a;) {
56
+ _c = _g.value;
57
+ _e = false;
58
+ try {
59
+ let { chunk, chunkIndex } = _c;
60
+ if (this.config.file.checkFileType && chunkIndex === 0 && !fileScaner(chunk).valid) {
61
+ throw new Error("Unknown or unsupported file type");
62
+ }
63
+ filemeta.chunkIndex = chunkIndex;
64
+ filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;
65
+ await this.config.file.upload(chunk, filemeta);
66
+ if (onProgress) {
67
+ const progress = Math.floor(((chunkIndex + 1) / filemeta.totalChunks) * 100);
68
+ onProgress(progress);
69
+ }
70
+ }
71
+ finally {
72
+ _e = true;
73
+ }
74
+ }
75
+ }
76
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
77
+ finally {
78
+ try {
79
+ if (!_e && !_a && (_b = _f.return)) await _b.call(_f);
80
+ }
81
+ finally { if (e_1) throw e_1.error; }
82
+ }
83
+ return filemeta;
84
+ }
85
+ async deleteFile(fileId) {
86
+ var _a;
87
+ if (!((_a = this.config.file) === null || _a === void 0 ? void 0 : _a.delete))
88
+ throw new Response("Delete not supported", { status: 403 });
89
+ await this.config.file.delete(fileId);
90
+ }
91
+ async listen(url, { body, headers, metadata }) {
92
+ const signeture = headers['x-signeture'] || '';
93
+ const origin = headers['x-origin'] || '';
94
+ const method = headers['x-method'] || 'POST';
95
+ let clientInfo = await this.clientInfo(url, origin);
96
+ if (!clientInfo) {
97
+ return {
98
+ status: 403,
99
+ value: "Client not allowed"
100
+ };
101
+ }
102
+ let path = clientInfo.path;
103
+ const isDev = path !== '/' && this.config.mode === 'development';
104
+ try {
105
+ if (path === '/' && method === "POST") {
106
+ await this.handshake(body, clientInfo);
107
+ }
108
+ if (path === '/' && method === 'GET')
109
+ throw new Response("Invalid method", { status: 405 });
110
+ if (!signeture) {
111
+ throw new Response("Signeture is required", { status: 403 });
112
+ }
113
+ const decryptSigneture = await crypto.decrypt(signeture, clientInfo.secret);
114
+ if (!decryptSigneture)
115
+ throw new Response("Invalid Signeture", { status: 403 });
116
+ if (decryptSigneture.expire < Date.now())
117
+ throw new Response("Request expired", { status: 403 });
118
+ await this.isValidSigneture(decryptSigneture.signeture, clientInfo.hash);
119
+ let data = null;
120
+ if (body) {
121
+ if (isDev) {
122
+ const decoder = new TextDecoder();
123
+ const text = decoder.decode(body).trim();
124
+ if (text) {
125
+ try {
126
+ data = JSON.parse(text);
127
+ }
128
+ catch (error) {
129
+ }
130
+ }
131
+ }
132
+ else {
133
+ data = await crypto.decryptBuffer(body, clientInfo.secret);
134
+ }
135
+ }
136
+ if (path === '/') {
137
+ const fileConfig = this.config.file;
138
+ // handle file upload
139
+ if (method === "PUT") {
140
+ if (!(fileConfig === null || fileConfig === void 0 ? void 0 : fileConfig.upload))
141
+ throw new Response("Upload not supported", { status: 403 });
142
+ const filemeta = data.filemeta;
143
+ const chunk = data.chunk;
144
+ if (filemeta.chunkIndex === 0 && fileConfig.checkFileType && !fileScaner(chunk)) {
145
+ throw new Error("Unknown or unsupported file type");
146
+ }
147
+ await fileConfig.upload(chunk, filemeta);
148
+ throw { success: true };
149
+ }
150
+ else if (method === "DELETE") {
151
+ await this.deleteFile(data.fileId);
152
+ throw { success: true };
153
+ }
154
+ else {
155
+ throw new Response("Invalid method", { status: 405 });
156
+ }
157
+ }
158
+ await this.handleRequest({
159
+ method,
160
+ path,
161
+ body: data,
162
+ searchParams: clientInfo.searchParams,
163
+ params: {}
164
+ }, metadata);
165
+ }
166
+ catch (info) {
167
+ const isError = info instanceof Error;
168
+ const isResponse = info instanceof Response;
169
+ let value = isError ? info.message : (isResponse ? await info.text() : info);
170
+ if (isDev) {
171
+ return {
172
+ status: isError ? 404 : ((info === null || info === void 0 ? void 0 : info.status) || 200),
173
+ value: JSON.stringify(value)
174
+ };
175
+ }
176
+ return {
177
+ status: isError ? 404 : ((info === null || info === void 0 ? void 0 : info.status) || 200),
178
+ value: await crypto.encryptBuffer(value, clientInfo.secret)
179
+ };
180
+ }
181
+ if (isDev) {
182
+ return {
183
+ status: 404,
184
+ value: "Not found"
185
+ };
186
+ }
187
+ return {
188
+ status: 404,
189
+ value: await crypto.encryptBuffer("Not found", clientInfo.secret)
190
+ };
191
+ }
194
192
  }
195
193
 
196
194
  export { SecurequServer as default };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/server/index.ts"],"sourcesContent":["import crypto from \"../include/crypto\";\r\nimport { ListenerInfo, ServerResponse, UploadFileMeta } from \"./types\";\r\nimport SecurequServerBase from \"./Base\";\r\nimport fileScaner from \"../include/file-scaner\";\r\nimport { HTTPMethods } from \"../client/types\";\r\nimport { chunkFile, getFileId, totalChunks } from \"../include/file\";\r\nexport * from './types'\r\n\r\nclass SecurequServer extends SecurequServerBase {\r\n\r\n async handshake(body: any, clientInfo: any) {\r\n const data: any = await crypto.decryptBuffer(body, clientInfo.secret)\r\n const serverSecret = await this.getSecret()\r\n if (!data) throw new Error(\"Invalid handshake data\");\r\n if (data.hash !== clientInfo.hash) {\r\n throw new Error(\"Invalid handshake\");\r\n } else if (data.secret !== clientInfo.secret) {\r\n throw new Error(\"Invalid handshake secret\");\r\n } else if (Date.now() - data.clientTime > 30000) { // 30 seconds\r\n throw new Error(\"Handshake expired\");\r\n }\r\n\r\n const serverTime = new Date();\r\n const clientDate = new Date(data.clientTime);\r\n const offsetMs = clientDate.getTime() - serverTime.getTime();\r\n\r\n let info = {\r\n dev: this.config.mode === 'development',\r\n timeDiffarenc: offsetMs,\r\n maxFileSize: this.config.file?.maxFilesize || null,\r\n checkFileType: this.config.file?.checkFileType || false,\r\n signeture: await crypto.encrypt({\r\n expire: Date.now() + 30000, // 30 seconds\r\n hash: clientInfo.hash\r\n }, serverSecret)\r\n }\r\n throw info\r\n }\r\n\r\n async uploadFile(file: File, onProgress?: (p: number) => void): Promise<UploadFileMeta> {\r\n if (!this.config.file?.upload) throw new Response(\"Upload not supported\", { status: 403 });\r\n\r\n const fileId = await getFileId(file);\r\n const chunkSize = this.config.file.chunkSize\r\n const filemeta: UploadFileMeta = {\r\n fileId: fileId,\r\n name: file.name,\r\n size: file.size,\r\n type: file.type,\r\n totalChunks: totalChunks(file, chunkSize),\r\n chunkIndex: 0,\r\n isFinish: false\r\n }\r\n\r\n for await (let { chunk, chunkIndex } of chunkFile(file, chunkSize)) {\r\n if (this.config.file.checkFileType && chunkIndex === 0) {\r\n let fileType = fileScaner(chunk);\r\n if (!fileType) throw new Error(\"Unknown or unsupported file type\");\r\n }\r\n filemeta.chunkIndex = chunkIndex;\r\n filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;\r\n await this.config.file.upload(chunk, filemeta);\r\n if (onProgress) {\r\n const progress = Math.floor(((chunkIndex + 1) / filemeta.totalChunks) * 100)\r\n onProgress(progress);\r\n }\r\n }\r\n return filemeta\r\n }\r\n\r\n async deleteFile(fileId: string): Promise<void> {\r\n if (!this.config.file?.delete) throw new Response(\"Delete not supported\", { status: 403 })\r\n await this.config.file.delete(fileId);\r\n }\r\n\r\n async listen(url: string, { body, headers, metadata }: ListenerInfo): Promise<ServerResponse> {\r\n\r\n const signeture = headers['x-signeture'] || '';\r\n const origin = headers['x-origin'] || '';\r\n const method: HTTPMethods = headers['x-method'] || 'POST' as any\r\n let clientInfo = await this.clientInfo(url, origin)\r\n\r\n\r\n if (!clientInfo) {\r\n return {\r\n status: 403,\r\n value: \"Client not allowed\"\r\n }\r\n }\r\n let path = clientInfo.path\r\n const isDev = path !== '/' && this.config.mode === 'development'\r\n try {\r\n if (path === '/' && method === \"POST\") {\r\n await this.handshake(body, clientInfo)\r\n }\r\n\r\n if (path === '/' && method === 'GET') throw new Response(\"Invalid method\", { status: 405 })\r\n\r\n if (!signeture) {\r\n throw new Response(\"Signeture is required\", { status: 403 });\r\n }\r\n const decryptSigneture = await crypto.decrypt(signeture, clientInfo.secret) as any\r\n if (!decryptSigneture) throw new Response(\"Invalid Signeture\", { status: 403 });\r\n if (decryptSigneture.expire < Date.now()) throw new Response(\"Request expired\", { status: 403 });\r\n\r\n await this.isValidSigneture(decryptSigneture.signeture, clientInfo.hash)\r\n\r\n let data: any = null\r\n if (body) {\r\n if (isDev) {\r\n const decoder = new TextDecoder();\r\n const text = decoder.decode(body).trim();\r\n if (text) {\r\n try {\r\n data = JSON.parse(text)\r\n } catch (error) {\r\n\r\n }\r\n }\r\n } else {\r\n data = await crypto.decryptBuffer(body, clientInfo.secret)\r\n }\r\n }\r\n\r\n if (path === '/') {\r\n\r\n const fileConfig = this.config.file\r\n\r\n // handle file upload\r\n if (method === \"PUT\") {\r\n if (!fileConfig?.upload) throw new Response(\"Upload not supported\", { status: 403 })\r\n\r\n const filemeta: UploadFileMeta = data.filemeta\r\n const chunk: Uint8Array = data.chunk\r\n\r\n if (filemeta.chunkIndex === 0 && fileConfig.checkFileType && !fileScaner(chunk)) {\r\n throw new Error(\"Unknown or unsupported file type\");\r\n }\r\n\r\n await fileConfig.upload(chunk, filemeta)\r\n throw { success: true }\r\n } else if (method === \"DELETE\") {\r\n await this.deleteFile(data.fileId)\r\n throw { success: true }\r\n } else {\r\n throw new Response(\"Invalid method\", { status: 405 });\r\n }\r\n }\r\n\r\n await this.handleRequest({\r\n method,\r\n path,\r\n body: data,\r\n searchParams: clientInfo.searchParams,\r\n params: {}\r\n }, metadata);\r\n\r\n } catch (info: any) {\r\n const isError = info instanceof Error\r\n const isResponse = info instanceof Response\r\n let value = isError ? info.message : (isResponse ? await info.text() : info);\r\n if (isDev) {\r\n return {\r\n status: isError ? 404 : (info?.status || 200),\r\n value: JSON.stringify(value)\r\n };\r\n }\r\n return {\r\n status: isError ? 404 : (info?.status || 200),\r\n value: await crypto.encryptBuffer(value, clientInfo.secret)\r\n };\r\n }\r\n\r\n if (isDev) {\r\n return {\r\n status: 404,\r\n value: \"Not found\"\r\n };\r\n }\r\n\r\n return {\r\n status: 404,\r\n value: await crypto.encryptBuffer(\"Not found\", clientInfo.secret)\r\n };\r\n }\r\n\r\n}\r\n\r\nexport default SecurequServer;"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/server/index.ts"],"sourcesContent":["import crypto from \"../include/crypto\";\nimport { ListenerInfo, ServerResponse, UploadFileMeta } from \"./types\";\nimport SecurequServerBase from \"./Base\";\nimport fileScaner from \"../include/file-scaner\";\nimport { HTTPMethods } from \"../client/types\";\nimport { chunkFile, getFileId, totalChunks } from \"../include/file\";\nexport * from './types'\n\nclass SecurequServer extends SecurequServerBase {\n\n async handshake(body: any, clientInfo: any) {\n const data: any = await crypto.decryptBuffer(body, clientInfo.secret)\n const serverSecret = await this.getSecret()\n if (!data) throw new Error(\"Invalid handshake data\");\n if (data.hash !== clientInfo.hash) {\n throw new Error(\"Invalid handshake\");\n } else if (data.secret !== clientInfo.secret) {\n throw new Error(\"Invalid handshake secret\");\n } else if (Date.now() - data.clientTime > 30000) { // 30 seconds\n throw new Error(\"Handshake expired\");\n }\n\n const serverTime = new Date();\n const clientDate = new Date(data.clientTime);\n const offsetMs = clientDate.getTime() - serverTime.getTime();\n\n let info = {\n dev: this.config.mode === 'development',\n timeDiffarenc: offsetMs,\n maxFileSize: this.config.file?.maxFilesize || null,\n checkFileType: this.config.file?.checkFileType || false,\n signeture: await crypto.encrypt({\n expire: Date.now() + 30000, // 30 seconds\n hash: clientInfo.hash\n }, serverSecret)\n }\n throw info\n }\n\n async uploadFile(file: File, onProgress?: (p: number) => void): Promise<UploadFileMeta> {\n if (!this.config.file?.upload) throw new Response(\"Upload not supported\", { status: 403 });\n\n const fileId = await getFileId(file);\n const chunkSize = this.config.file.chunkSize\n const filemeta: UploadFileMeta = {\n fileId: fileId,\n name: file.name,\n size: file.size,\n type: file.type,\n totalChunks: totalChunks(file, chunkSize),\n chunkIndex: 0,\n isFinish: false\n }\n\n for await (let { chunk, chunkIndex } of chunkFile(file, chunkSize)) {\n if (this.config.file.checkFileType && chunkIndex === 0 && !fileScaner(chunk).valid) {\n throw new Error(\"Unknown or unsupported file type\")\n }\n filemeta.chunkIndex = chunkIndex;\n filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;\n await this.config.file.upload(chunk, filemeta);\n if (onProgress) {\n const progress = Math.floor(((chunkIndex + 1) / filemeta.totalChunks) * 100)\n onProgress(progress);\n }\n }\n return filemeta\n }\n\n async deleteFile(fileId: string): Promise<void> {\n if (!this.config.file?.delete) throw new Response(\"Delete not supported\", { status: 403 })\n await this.config.file.delete(fileId);\n }\n\n async listen(url: string, { body, headers, metadata }: ListenerInfo): Promise<ServerResponse> {\n\n const signeture = headers['x-signeture'] || '';\n const origin = headers['x-origin'] || '';\n const method: HTTPMethods = headers['x-method'] || 'POST' as any\n let clientInfo = await this.clientInfo(url, origin)\n\n\n if (!clientInfo) {\n return {\n status: 403,\n value: \"Client not allowed\"\n }\n }\n let path = clientInfo.path\n const isDev = path !== '/' && this.config.mode === 'development'\n try {\n if (path === '/' && method === \"POST\") {\n await this.handshake(body, clientInfo)\n }\n\n if (path === '/' && method === 'GET') throw new Response(\"Invalid method\", { status: 405 })\n\n if (!signeture) {\n throw new Response(\"Signeture is required\", { status: 403 });\n }\n const decryptSigneture = await crypto.decrypt(signeture, clientInfo.secret) as any\n if (!decryptSigneture) throw new Response(\"Invalid Signeture\", { status: 403 });\n if (decryptSigneture.expire < Date.now()) throw new Response(\"Request expired\", { status: 403 });\n\n await this.isValidSigneture(decryptSigneture.signeture, clientInfo.hash)\n\n let data: any = null\n if (body) {\n if (isDev) {\n const decoder = new TextDecoder();\n const text = decoder.decode(body).trim();\n if (text) {\n try {\n data = JSON.parse(text)\n } catch (error) {\n\n }\n }\n } else {\n data = await crypto.decryptBuffer(body, clientInfo.secret)\n }\n }\n\n if (path === '/') {\n\n const fileConfig = this.config.file\n\n // handle file upload\n if (method === \"PUT\") {\n if (!fileConfig?.upload) throw new Response(\"Upload not supported\", { status: 403 })\n\n const filemeta: UploadFileMeta = data.filemeta\n const chunk: Uint8Array = data.chunk\n\n if (filemeta.chunkIndex === 0 && fileConfig.checkFileType && !fileScaner(chunk)) {\n throw new Error(\"Unknown or unsupported file type\");\n }\n\n await fileConfig.upload(chunk, filemeta)\n throw { success: true }\n } else if (method === \"DELETE\") {\n await this.deleteFile(data.fileId)\n throw { success: true }\n } else {\n throw new Response(\"Invalid method\", { status: 405 });\n }\n }\n\n await this.handleRequest({\n method,\n path,\n body: data,\n searchParams: clientInfo.searchParams,\n params: {}\n }, metadata);\n\n } catch (info: any) {\n const isError = info instanceof Error\n const isResponse = info instanceof Response\n let value = isError ? info.message : (isResponse ? await info.text() : info);\n if (isDev) {\n return {\n status: isError ? 404 : (info?.status || 200),\n value: JSON.stringify(value)\n };\n }\n return {\n status: isError ? 404 : (info?.status || 200),\n value: await crypto.encryptBuffer(value, clientInfo.secret)\n };\n }\n\n if (isDev) {\n return {\n status: 404,\n value: \"Not found\"\n };\n }\n\n return {\n status: 404,\n value: await crypto.encryptBuffer(\"Not found\", clientInfo.secret)\n };\n }\n\n}\n\nexport default SecurequServer;"],"names":[],"mappings":"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"}
package/server/types.d.ts CHANGED
@@ -1,78 +1,78 @@
1
1
  import { MatchFunction } from 'path-to-regexp';
2
2
  import { HTTPMethods } from '../client/types.js';
3
3
 
4
- type ServerClientSecret = string;
5
- type ServerClientOrigin = string;
6
- type ServerClientInfo = {
7
- path: string;
8
- secret: string;
9
- hash: string;
10
- searchParams: {
11
- [key: string]: any;
12
- };
13
- };
14
- type ServerClient = {
15
- origin: string;
16
- secret: ServerClientSecret;
17
- };
18
- type UploadFileMeta = {
19
- fileId: string;
20
- name: string;
21
- size: number;
22
- type: string;
23
- chunkIndex: number;
24
- totalChunks: number;
25
- isFinish: boolean;
26
- };
27
- type UploadFilePath = string;
28
- type Metadata = {
29
- [key: string]: any;
30
- };
31
- type SecurequServerConfig = {
32
- mode?: "production" | "development";
33
- basepath: string;
34
- clients: ServerClient[];
35
- file?: {
36
- maxFilesize?: number;
37
- checkFileType?: boolean;
38
- chunkSize?: number;
39
- upload: (chunk: Uint8Array, filemeta: UploadFileMeta) => Promise<void>;
40
- delete: (filename: string) => Promise<void>;
41
- };
42
- accept?: (info: HandlerInfo, metadata?: Metadata) => boolean | Promise<boolean>;
43
- };
44
- type ListenerInfo = {
45
- body: any;
46
- headers: {
47
- [key: string]: string;
48
- };
49
- metadata?: Metadata;
50
- };
51
- type HandlerInfo = {
52
- path: string;
53
- body: object;
54
- method: HTTPMethods;
55
- searchParams: {
56
- [key: string]: any;
57
- };
58
- params: {
59
- [key: string]: any;
60
- };
61
- };
62
- type ServerResponse = {
63
- value: Uint8Array | string;
64
- status: number;
65
- };
66
- type HandlerFunction = (info: HandlerInfo, metadata?: Metadata) => (any | void) | Promise<Partial<any> | void>;
67
- type RouteFactory = {
68
- [key in HTTPMethods]: {
69
- [path: string]: {
70
- handler: HandlerFunction;
71
- test: MatchFunction<{
72
- [key: string]: string;
73
- }>;
74
- };
75
- };
4
+ type ServerClientSecret = string;
5
+ type ServerClientOrigin = string;
6
+ type ServerClientInfo = {
7
+ path: string;
8
+ secret: string;
9
+ hash: string;
10
+ searchParams: {
11
+ [key: string]: any;
12
+ };
13
+ };
14
+ type ServerClient = {
15
+ origin: string;
16
+ secret: ServerClientSecret;
17
+ };
18
+ type UploadFileMeta = {
19
+ fileId: string;
20
+ name: string;
21
+ size: number;
22
+ type: string;
23
+ chunkIndex: number;
24
+ totalChunks: number;
25
+ isFinish: boolean;
26
+ };
27
+ type UploadFilePath = string;
28
+ type Metadata = {
29
+ [key: string]: any;
30
+ };
31
+ type SecurequServerConfig = {
32
+ mode?: "production" | "development";
33
+ basepath: string;
34
+ clients: ServerClient[];
35
+ file?: {
36
+ maxFilesize?: number;
37
+ checkFileType?: boolean;
38
+ chunkSize?: number;
39
+ upload: (chunk: Uint8Array, filemeta: UploadFileMeta) => Promise<void>;
40
+ delete: (filename: string) => Promise<void>;
41
+ };
42
+ accept?: (info: HandlerInfo, metadata?: Metadata) => boolean | Promise<boolean>;
43
+ };
44
+ type ListenerInfo = {
45
+ body: any;
46
+ headers: {
47
+ [key: string]: string;
48
+ };
49
+ metadata?: Metadata;
50
+ };
51
+ type HandlerInfo = {
52
+ path: string;
53
+ body: object;
54
+ method: HTTPMethods;
55
+ searchParams: {
56
+ [key: string]: any;
57
+ };
58
+ params: {
59
+ [key: string]: any;
60
+ };
61
+ };
62
+ type ServerResponse = {
63
+ value: Uint8Array | string;
64
+ status: number;
65
+ };
66
+ type HandlerFunction = (info: HandlerInfo, metadata?: Metadata) => (any | void) | Promise<Partial<any> | void>;
67
+ type RouteFactory = {
68
+ [key in HTTPMethods]: {
69
+ [path: string]: {
70
+ handler: HandlerFunction;
71
+ test: MatchFunction<{
72
+ [key: string]: string;
73
+ }>;
74
+ };
75
+ };
76
76
  };
77
77
 
78
78
  export type { HandlerFunction, HandlerInfo, ListenerInfo, Metadata, RouteFactory, SecurequServerConfig, ServerClient, ServerClientInfo, ServerClientOrigin, ServerClientSecret, ServerResponse, UploadFileMeta, UploadFilePath };