securequ 1.1.8 → 1.1.10

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 (47) hide show
  1. package/client/Base.d.ts +18 -18
  2. package/client/Base.js +146 -146
  3. package/client/Base.js.map +1 -1
  4. package/client/Base.mjs +146 -146
  5. package/client/Base.mjs.map +1 -1
  6. package/client/index.d.ts +8 -8
  7. package/client/index.js +138 -138
  8. package/client/index.js.map +1 -1
  9. package/client/index.mjs +138 -138
  10. package/client/index.mjs.map +1 -1
  11. package/client/types.d.ts +34 -34
  12. package/include/File.js +59 -59
  13. package/include/File.js.map +1 -1
  14. package/include/File.mjs +59 -59
  15. package/include/File.mjs.map +1 -1
  16. package/include/FileScaner.js +94 -94
  17. package/include/FileScaner.js.map +1 -1
  18. package/include/FileScaner.mjs +94 -94
  19. package/include/FileScaner.mjs.map +1 -1
  20. package/include/compress.d.ts +9 -9
  21. package/include/compress.js +18 -18
  22. package/include/compress.js.map +1 -1
  23. package/include/compress.mjs +18 -18
  24. package/include/compress.mjs.map +1 -1
  25. package/include/crypto.d.ts +15 -15
  26. package/include/crypto.js +54 -54
  27. package/include/crypto.js.map +1 -1
  28. package/include/crypto.mjs +54 -54
  29. package/include/crypto.mjs.map +1 -1
  30. package/package.json +1 -1
  31. package/readme.md +312 -312
  32. package/server/Base.d.ts +20 -20
  33. package/server/Base.js +105 -105
  34. package/server/Base.js.map +1 -1
  35. package/server/Base.mjs +105 -105
  36. package/server/Base.mjs.map +1 -1
  37. package/server/Router.d.ts +7 -7
  38. package/server/Router.js +29 -29
  39. package/server/Router.js.map +1 -1
  40. package/server/Router.mjs +29 -29
  41. package/server/Router.mjs.map +1 -1
  42. package/server/index.d.ts +5 -5
  43. package/server/index.js +187 -181
  44. package/server/index.js.map +1 -1
  45. package/server/index.mjs +187 -181
  46. package/server/index.mjs.map +1 -1
  47. package/server/types.d.ts +72 -72
package/client/index.js CHANGED
@@ -1,139 +1,139 @@
1
- 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var tslib=require('tslib'),File$1=require('../include/File.js'),Base=require('./Base.js'),FileScaner=require('../include/FileScaner.js');class SecurequClient extends Base.default {
2
- async send(path, init) {
3
- await this.awaitForHandshake();
4
- init = await this.hooksCall('beforeRequest', path, init) || init;
5
- const url = await this.url(path);
6
- if (url.pathname === '/')
7
- throw new Error("Path is not allowed");
8
- for (let key in init === null || init === void 0 ? void 0 : init.body) {
9
- if ((init === null || init === void 0 ? void 0 : init.body[key]) instanceof File) {
10
- init.body[key] = await this.uploadFile(init.body[key], init === null || init === void 0 ? void 0 : init.onProgress);
11
- }
12
- }
13
- const res = await this.fetch(path, init);
14
- if (["Signeture expired", "Request expired"].includes(res.message)) {
15
- await this.handshake();
16
- return await this.send(path, init);
17
- }
18
- await this.hooksCall('afterResponse', res);
19
- return res;
20
- }
21
- async uploadFile(file, onProgress) {
22
- var _a, e_1, _b, _c;
23
- var _d, _e, _f;
24
- await this.awaitForHandshake();
25
- const fileId = await File$1.getFileId(file);
26
- const controller = new AbortController();
27
- let _file = await this.hooksCall('beforeUpload', file, fileId) || file;
28
- const maxFileSize = (_d = this.handshakeInfo) === null || _d === void 0 ? void 0 : _d.maxFileSize;
29
- if (maxFileSize && _file.size > maxFileSize * 1024) {
30
- throw new Error(`File size exceeds the limit of ${maxFileSize / 1024} MB`);
31
- }
32
- const chunkSize = (_e = this.handshakeInfo) === null || _e === void 0 ? void 0 : _e.chunkSize;
33
- // send metadata
34
- const filemeta = {
35
- fileId: fileId,
36
- name: _file.name,
37
- size: _file.size,
38
- type: _file.type,
39
- totalChunks: File$1.totalChunks(_file, chunkSize),
40
- chunkIndex: 0,
41
- isFinish: false
42
- };
43
- const abort = async () => {
44
- await this.deleteFile(fileId);
45
- controller.abort();
46
- window.removeEventListener("pagehide", abort);
47
- };
48
- window.addEventListener("pagehide", abort);
49
- try {
50
- for (var _g = true, _h = tslib.__asyncValues(File$1.chunkFile(_file, chunkSize)), _j; _j = await _h.next(), _a = _j.done, !_a;) {
51
- _c = _j.value;
52
- _g = false;
53
- try {
54
- let { chunk, chunkIndex } = _c;
55
- if (chunkIndex === 0 && ((_f = this.handshakeInfo) === null || _f === void 0 ? void 0 : _f.checkFileType) && !FileScaner.fileScaner(chunk)) {
56
- await abort();
57
- return {
58
- success: false,
59
- message: "Unknown or unsupported file type",
60
- data: null,
61
- code: 0
62
- };
63
- }
64
- filemeta.chunkIndex = chunkIndex;
65
- filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;
66
- const info = {
67
- method: 'PUT',
68
- signal: controller.signal,
69
- body: {
70
- chunk,
71
- filemeta
72
- },
73
- onProgress: (p) => {
74
- if (onProgress) {
75
- const totalProgress = Math.floor(((chunkIndex + 1) / filemeta.totalChunks) * 100);
76
- const currentProgress = Math.floor((p / 100) / filemeta.totalChunks * 100);
77
- onProgress(Math.min(totalProgress + currentProgress, 100));
78
- }
79
- }
80
- };
81
- await this.hooksCall('beforeUploadChunk', chunk, filemeta);
82
- let res = await this.fetch('/', info);
83
- if (!res.success) {
84
- if (["Signeture expired", "Request expired"].includes(res.message)) {
85
- await this.handshake();
86
- window.removeEventListener("pagehide", abort);
87
- res = await this.uploadFile(file, onProgress);
88
- }
89
- else {
90
- await abort();
91
- return res;
92
- }
93
- }
94
- await this.hooksCall('afterUploadChunk', res, filemeta);
95
- }
96
- finally {
97
- _g = true;
98
- }
99
- }
100
- }
101
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
102
- finally {
103
- try {
104
- if (!_g && !_a && (_b = _h.return)) await _b.call(_h);
105
- }
106
- finally { if (e_1) throw e_1.error; }
107
- }
108
- window.removeEventListener("pagehide", abort);
109
- const info = {
110
- success: true,
111
- message: 'File uploaded successfully',
112
- data: filemeta,
113
- code: 200
114
- };
115
- await this.hooksCall('afterUpload', info, _file);
116
- return info;
117
- }
118
- async deleteFile(fileId, init) {
119
- await this.awaitForHandshake();
120
- const res = await this.fetch('/', Object.assign(Object.assign({}, init), { method: 'DELETE', body: { fileId } }));
121
- if (["Signeture expired", "Request expired"].includes(res.message)) {
122
- await this.handshake();
123
- return await this.deleteFile(fileId, init);
124
- }
125
- return res;
126
- }
127
- async get(path, init) {
128
- return await this.send(path, init);
129
- }
130
- async post(path, init) {
131
- return await this.send(path, Object.assign(Object.assign({}, init), { method: "POST" }));
132
- }
133
- async put(path, init) {
134
- return await this.send(path, Object.assign(Object.assign({}, init), { method: "PUT" }));
135
- }
136
- async delete(path, init) {
137
- return await this.send(path, Object.assign(Object.assign({}, init), { method: "DELETE" }));
138
- }
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var tslib=require('tslib'),File$1=require('../include/File.js'),Base=require('./Base.js'),FileScaner=require('../include/FileScaner.js');class SecurequClient extends Base.default {
2
+ async send(path, init) {
3
+ await this.awaitForHandshake();
4
+ init = await this.hooksCall('beforeRequest', path, init) || init;
5
+ const url = await this.url(path);
6
+ if (url.pathname === '/')
7
+ throw new Error("Path is not allowed");
8
+ for (let key in init === null || init === void 0 ? void 0 : init.body) {
9
+ if ((init === null || init === void 0 ? void 0 : init.body[key]) instanceof File) {
10
+ init.body[key] = await this.uploadFile(init.body[key], init === null || init === void 0 ? void 0 : init.onProgress);
11
+ }
12
+ }
13
+ const res = await this.fetch(path, init);
14
+ if (["Signeture expired", "Request expired"].includes(res.message)) {
15
+ await this.handshake();
16
+ return await this.send(path, init);
17
+ }
18
+ await this.hooksCall('afterResponse', res);
19
+ return res;
20
+ }
21
+ async uploadFile(file, onProgress) {
22
+ var _a, e_1, _b, _c;
23
+ var _d, _e, _f;
24
+ await this.awaitForHandshake();
25
+ const fileId = await File$1.getFileId(file);
26
+ const controller = new AbortController();
27
+ let _file = await this.hooksCall('beforeUpload', file, fileId) || file;
28
+ const maxFileSize = (_d = this.handshakeInfo) === null || _d === void 0 ? void 0 : _d.maxFileSize;
29
+ if (maxFileSize && _file.size > maxFileSize * 1024) {
30
+ throw new Error(`File size exceeds the limit of ${maxFileSize / 1024} MB`);
31
+ }
32
+ const chunkSize = (_e = this.handshakeInfo) === null || _e === void 0 ? void 0 : _e.chunkSize;
33
+ // send metadata
34
+ const filemeta = {
35
+ fileId: fileId,
36
+ name: _file.name,
37
+ size: _file.size,
38
+ type: _file.type,
39
+ totalChunks: File$1.totalChunks(_file, chunkSize),
40
+ chunkIndex: 0,
41
+ isFinish: false
42
+ };
43
+ const abort = async () => {
44
+ await this.deleteFile(fileId);
45
+ controller.abort();
46
+ window.removeEventListener("pagehide", abort);
47
+ };
48
+ window.addEventListener("pagehide", abort);
49
+ try {
50
+ for (var _g = true, _h = tslib.__asyncValues(File$1.chunkFile(_file, chunkSize)), _j; _j = await _h.next(), _a = _j.done, !_a;) {
51
+ _c = _j.value;
52
+ _g = false;
53
+ try {
54
+ let { chunk, chunkIndex } = _c;
55
+ if (chunkIndex === 0 && ((_f = this.handshakeInfo) === null || _f === void 0 ? void 0 : _f.checkFileType) && !FileScaner.fileScaner(chunk)) {
56
+ await abort();
57
+ return {
58
+ success: false,
59
+ message: "Unknown or unsupported file type",
60
+ data: null,
61
+ code: 0
62
+ };
63
+ }
64
+ filemeta.chunkIndex = chunkIndex;
65
+ filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;
66
+ const info = {
67
+ method: 'PUT',
68
+ signal: controller.signal,
69
+ body: {
70
+ chunk,
71
+ filemeta
72
+ },
73
+ onProgress: (p) => {
74
+ if (onProgress) {
75
+ const totalProgress = Math.floor(((chunkIndex + 1) / filemeta.totalChunks) * 100);
76
+ const currentProgress = Math.floor((p / 100) / filemeta.totalChunks * 100);
77
+ onProgress(Math.min(totalProgress + currentProgress, 100));
78
+ }
79
+ }
80
+ };
81
+ await this.hooksCall('beforeUploadChunk', chunk, filemeta);
82
+ let res = await this.fetch('/', info);
83
+ if (!res.success) {
84
+ if (["Signeture expired", "Request expired"].includes(res.message)) {
85
+ await this.handshake();
86
+ window.removeEventListener("pagehide", abort);
87
+ res = await this.uploadFile(file, onProgress);
88
+ }
89
+ else {
90
+ await abort();
91
+ return res;
92
+ }
93
+ }
94
+ await this.hooksCall('afterUploadChunk', res, filemeta);
95
+ }
96
+ finally {
97
+ _g = true;
98
+ }
99
+ }
100
+ }
101
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
102
+ finally {
103
+ try {
104
+ if (!_g && !_a && (_b = _h.return)) await _b.call(_h);
105
+ }
106
+ finally { if (e_1) throw e_1.error; }
107
+ }
108
+ window.removeEventListener("pagehide", abort);
109
+ const info = {
110
+ success: true,
111
+ message: 'File uploaded successfully',
112
+ data: filemeta,
113
+ code: 200
114
+ };
115
+ await this.hooksCall('afterUpload', info, _file);
116
+ return info;
117
+ }
118
+ async deleteFile(fileId, init) {
119
+ await this.awaitForHandshake();
120
+ const res = await this.fetch('/', Object.assign(Object.assign({}, init), { method: 'DELETE', body: { fileId } }));
121
+ if (["Signeture expired", "Request expired"].includes(res.message)) {
122
+ await this.handshake();
123
+ return await this.deleteFile(fileId, init);
124
+ }
125
+ return res;
126
+ }
127
+ async get(path, init) {
128
+ return await this.send(path, init);
129
+ }
130
+ async post(path, init) {
131
+ return await this.send(path, Object.assign(Object.assign({}, init), { method: "POST" }));
132
+ }
133
+ async put(path, init) {
134
+ return await this.send(path, Object.assign(Object.assign({}, init), { method: "PUT" }));
135
+ }
136
+ async delete(path, init) {
137
+ return await this.send(path, Object.assign(Object.assign({}, init), { method: "DELETE" }));
138
+ }
139
139
  }exports.default=SecurequClient;//# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/client/index.ts"],"sourcesContent":["import { HttpRequestInit, SecurequClientResponse } from \"./types\";\nimport { chunkFile, getFileId, totalChunks } from \"../include/File\";\nimport Base from \"./Base\";\nimport fileScaner from '../include/FileScaner';\nimport { UploadFileMeta } from \"../server/types\";\n\nclass SecurequClient extends Base {\n\n async send(path: string, init?: HttpRequestInit): Promise<SecurequClientResponse> {\n await this.awaitForHandshake();\n init = await this.hooksCall('beforeRequest', path, init) || init;\n const url = await this.url(path)\n if (url.pathname === '/') throw new Error(\"Path is not allowed\")\n\n for (let key in init?.body) {\n if (init?.body[key] instanceof File) {\n init.body[key] = await this.uploadFile(init.body[key], init?.onProgress)\n }\n }\n\n const res = await this.fetch(path, init);\n if ([\"Signeture expired\", \"Request expired\"].includes(res.message)) {\n await this.handshake();\n return await this.send(path, init);\n }\n await this.hooksCall('afterResponse', res);\n return res;\n }\n\n async uploadFile(file: File, onProgress?: (p: number) => void): Promise<SecurequClientResponse> {\n await this.awaitForHandshake();\n const fileId = await getFileId(file);\n const controller = new AbortController();\n\n let _file = await this.hooksCall('beforeUpload', file, fileId) || file;\n const maxFileSize = this.handshakeInfo?.maxFileSize\n if (maxFileSize && _file.size > maxFileSize * 1024) {\n throw new Error(`File size exceeds the limit of ${maxFileSize / 1024} MB`)\n }\n\n const chunkSize = this.handshakeInfo?.chunkSize\n\n // send metadata\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 const abort = async () => {\n await this.deleteFile(fileId);\n controller.abort();\n window.removeEventListener(\"pagehide\", abort);\n }\n\n window.addEventListener(\"pagehide\", abort);\n\n for await (let { chunk, chunkIndex } of chunkFile(_file, chunkSize)) {\n if (chunkIndex === 0 && this.handshakeInfo?.checkFileType && !fileScaner(chunk)) {\n await abort()\n return {\n success: false,\n message: \"Unknown or unsupported file type\",\n data: null,\n code: 0\n }\n }\n\n filemeta.chunkIndex = chunkIndex;\n filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;\n\n const info: any = {\n method: 'PUT',\n signal: controller.signal,\n body: {\n chunk,\n filemeta\n },\n onProgress: (p: number) => {\n if (onProgress) {\n const totalProgress = Math.floor(((chunkIndex + 1) / filemeta.totalChunks) * 100)\n const currentProgress = Math.floor((p / 100) / filemeta.totalChunks * 100)\n onProgress(Math.min(totalProgress + currentProgress, 100))\n }\n }\n }\n await this.hooksCall('beforeUploadChunk', chunk, filemeta);\n\n let res = await this.fetch('/', info)\n\n if (!res.success) {\n if ([\"Signeture expired\", \"Request expired\"].includes(res.message)) {\n await this.handshake();\n window.removeEventListener(\"pagehide\", abort);\n res = await this.uploadFile(file, onProgress);\n } else {\n await abort()\n return res\n }\n }\n await this.hooksCall('afterUploadChunk', res, filemeta);\n }\n\n window.removeEventListener(\"pagehide\", abort);\n\n const info = {\n success: true,\n message: 'File uploaded successfully',\n data: filemeta,\n code: 200\n }\n await this.hooksCall('afterUpload', info, _file);\n return info\n }\n\n async deleteFile(fileId: string, init?: Omit<HttpRequestInit, 'body' | 'method'>): Promise<SecurequClientResponse> {\n await this.awaitForHandshake();\n const res = await this.fetch('/', {\n ...init,\n method: 'DELETE',\n body: { fileId }\n });\n if ([\"Signeture expired\", \"Request expired\"].includes(res.message)) {\n await this.handshake();\n return await this.deleteFile(fileId, init);\n }\n return res;\n }\n\n async get(path: string, init?: Omit<HttpRequestInit, 'body' | 'method'>) {\n return await this.send(path, init);\n }\n\n async post(path: string, init?: Omit<HttpRequestInit, 'method'>) {\n return await this.send(path, { ...init, method: \"POST\" });\n }\n\n async put(path: string, init?: Omit<HttpRequestInit, 'method'>) {\n return await this.send(path, { ...init, method: \"PUT\" });\n }\n\n async delete(path: string, init?: Omit<HttpRequestInit, 'method'>) {\n return await this.send(path, { ...init, method: \"DELETE\" });\n }\n\n}\n\nexport default SecurequClient;\n"],"names":["Base","getFileId","totalChunks","__asyncValues","chunkFile","fileScaner"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/client/index.ts"],"sourcesContent":["import { HttpRequestInit, SecurequClientResponse } from \"./types\";\r\nimport { chunkFile, getFileId, totalChunks } from \"../include/File\";\r\nimport Base from \"./Base\";\r\nimport fileScaner from '../include/FileScaner';\r\nimport { UploadFileMeta } from \"../server/types\";\r\n\r\nclass SecurequClient extends Base {\r\n\r\n async send(path: string, init?: HttpRequestInit): Promise<SecurequClientResponse> {\r\n await this.awaitForHandshake();\r\n init = await this.hooksCall('beforeRequest', path, init) || init;\r\n const url = await this.url(path)\r\n if (url.pathname === '/') throw new Error(\"Path is not allowed\")\r\n\r\n for (let key in init?.body) {\r\n if (init?.body[key] instanceof File) {\r\n init.body[key] = await this.uploadFile(init.body[key], init?.onProgress)\r\n }\r\n }\r\n\r\n const res = await this.fetch(path, init);\r\n if ([\"Signeture expired\", \"Request expired\"].includes(res.message)) {\r\n await this.handshake();\r\n return await this.send(path, init);\r\n }\r\n await this.hooksCall('afterResponse', res);\r\n return res;\r\n }\r\n\r\n async uploadFile(file: File, onProgress?: (p: number) => void): Promise<SecurequClientResponse> {\r\n await this.awaitForHandshake();\r\n const fileId = await getFileId(file);\r\n const controller = new AbortController();\r\n\r\n let _file = await this.hooksCall('beforeUpload', file, fileId) || file;\r\n const maxFileSize = this.handshakeInfo?.maxFileSize\r\n if (maxFileSize && _file.size > maxFileSize * 1024) {\r\n throw new Error(`File size exceeds the limit of ${maxFileSize / 1024} MB`)\r\n }\r\n\r\n const chunkSize = this.handshakeInfo?.chunkSize\r\n\r\n // send metadata\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 const abort = async () => {\r\n await this.deleteFile(fileId);\r\n controller.abort();\r\n window.removeEventListener(\"pagehide\", abort);\r\n }\r\n\r\n window.addEventListener(\"pagehide\", abort);\r\n\r\n for await (let { chunk, chunkIndex } of chunkFile(_file, chunkSize)) {\r\n if (chunkIndex === 0 && this.handshakeInfo?.checkFileType && !fileScaner(chunk)) {\r\n await abort()\r\n return {\r\n success: false,\r\n message: \"Unknown or unsupported file type\",\r\n data: null,\r\n code: 0\r\n }\r\n }\r\n\r\n filemeta.chunkIndex = chunkIndex;\r\n filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;\r\n\r\n const info: any = {\r\n method: 'PUT',\r\n signal: controller.signal,\r\n body: {\r\n chunk,\r\n filemeta\r\n },\r\n onProgress: (p: number) => {\r\n if (onProgress) {\r\n const totalProgress = Math.floor(((chunkIndex + 1) / filemeta.totalChunks) * 100)\r\n const currentProgress = Math.floor((p / 100) / filemeta.totalChunks * 100)\r\n onProgress(Math.min(totalProgress + currentProgress, 100))\r\n }\r\n }\r\n }\r\n await this.hooksCall('beforeUploadChunk', chunk, filemeta);\r\n\r\n let res = await this.fetch('/', info)\r\n\r\n if (!res.success) {\r\n if ([\"Signeture expired\", \"Request expired\"].includes(res.message)) {\r\n await this.handshake();\r\n window.removeEventListener(\"pagehide\", abort);\r\n res = await this.uploadFile(file, onProgress);\r\n } else {\r\n await abort()\r\n return res\r\n }\r\n }\r\n await this.hooksCall('afterUploadChunk', res, filemeta);\r\n }\r\n\r\n window.removeEventListener(\"pagehide\", abort);\r\n\r\n const info = {\r\n success: true,\r\n message: 'File uploaded successfully',\r\n data: filemeta,\r\n code: 200\r\n }\r\n await this.hooksCall('afterUpload', info, _file);\r\n return info\r\n }\r\n\r\n async deleteFile(fileId: string, init?: Omit<HttpRequestInit, 'body' | 'method'>): Promise<SecurequClientResponse> {\r\n await this.awaitForHandshake();\r\n const res = await this.fetch('/', {\r\n ...init,\r\n method: 'DELETE',\r\n body: { fileId }\r\n });\r\n if ([\"Signeture expired\", \"Request expired\"].includes(res.message)) {\r\n await this.handshake();\r\n return await this.deleteFile(fileId, init);\r\n }\r\n return res;\r\n }\r\n\r\n async get(path: string, init?: Omit<HttpRequestInit, 'body' | 'method'>) {\r\n return await this.send(path, init);\r\n }\r\n\r\n async post(path: string, init?: Omit<HttpRequestInit, 'method'>) {\r\n return await this.send(path, { ...init, method: \"POST\" });\r\n }\r\n\r\n async put(path: string, init?: Omit<HttpRequestInit, 'method'>) {\r\n return await this.send(path, { ...init, method: \"PUT\" });\r\n }\r\n\r\n async delete(path: string, init?: Omit<HttpRequestInit, 'method'>) {\r\n return await this.send(path, { ...init, method: \"DELETE\" });\r\n }\r\n\r\n}\r\n\r\nexport default SecurequClient;\r\n"],"names":["Base","getFileId","totalChunks","__asyncValues","chunkFile","fileScaner"],"mappings":"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"}
package/client/index.mjs CHANGED
@@ -1,139 +1,139 @@
1
- import {__asyncValues}from'tslib';import {getFileId,totalChunks,chunkFile}from'../include/File.mjs';import Base from'./Base.mjs';import {fileScaner}from'../include/FileScaner.mjs';class SecurequClient extends Base {
2
- async send(path, init) {
3
- await this.awaitForHandshake();
4
- init = await this.hooksCall('beforeRequest', path, init) || init;
5
- const url = await this.url(path);
6
- if (url.pathname === '/')
7
- throw new Error("Path is not allowed");
8
- for (let key in init === null || init === void 0 ? void 0 : init.body) {
9
- if ((init === null || init === void 0 ? void 0 : init.body[key]) instanceof File) {
10
- init.body[key] = await this.uploadFile(init.body[key], init === null || init === void 0 ? void 0 : init.onProgress);
11
- }
12
- }
13
- const res = await this.fetch(path, init);
14
- if (["Signeture expired", "Request expired"].includes(res.message)) {
15
- await this.handshake();
16
- return await this.send(path, init);
17
- }
18
- await this.hooksCall('afterResponse', res);
19
- return res;
20
- }
21
- async uploadFile(file, onProgress) {
22
- var _a, e_1, _b, _c;
23
- var _d, _e, _f;
24
- await this.awaitForHandshake();
25
- const fileId = await getFileId(file);
26
- const controller = new AbortController();
27
- let _file = await this.hooksCall('beforeUpload', file, fileId) || file;
28
- const maxFileSize = (_d = this.handshakeInfo) === null || _d === void 0 ? void 0 : _d.maxFileSize;
29
- if (maxFileSize && _file.size > maxFileSize * 1024) {
30
- throw new Error(`File size exceeds the limit of ${maxFileSize / 1024} MB`);
31
- }
32
- const chunkSize = (_e = this.handshakeInfo) === null || _e === void 0 ? void 0 : _e.chunkSize;
33
- // send metadata
34
- const filemeta = {
35
- fileId: fileId,
36
- name: _file.name,
37
- size: _file.size,
38
- type: _file.type,
39
- totalChunks: totalChunks(_file, chunkSize),
40
- chunkIndex: 0,
41
- isFinish: false
42
- };
43
- const abort = async () => {
44
- await this.deleteFile(fileId);
45
- controller.abort();
46
- window.removeEventListener("pagehide", abort);
47
- };
48
- window.addEventListener("pagehide", abort);
49
- try {
50
- for (var _g = true, _h = __asyncValues(chunkFile(_file, chunkSize)), _j; _j = await _h.next(), _a = _j.done, !_a;) {
51
- _c = _j.value;
52
- _g = false;
53
- try {
54
- let { chunk, chunkIndex } = _c;
55
- if (chunkIndex === 0 && ((_f = this.handshakeInfo) === null || _f === void 0 ? void 0 : _f.checkFileType) && !fileScaner(chunk)) {
56
- await abort();
57
- return {
58
- success: false,
59
- message: "Unknown or unsupported file type",
60
- data: null,
61
- code: 0
62
- };
63
- }
64
- filemeta.chunkIndex = chunkIndex;
65
- filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;
66
- const info = {
67
- method: 'PUT',
68
- signal: controller.signal,
69
- body: {
70
- chunk,
71
- filemeta
72
- },
73
- onProgress: (p) => {
74
- if (onProgress) {
75
- const totalProgress = Math.floor(((chunkIndex + 1) / filemeta.totalChunks) * 100);
76
- const currentProgress = Math.floor((p / 100) / filemeta.totalChunks * 100);
77
- onProgress(Math.min(totalProgress + currentProgress, 100));
78
- }
79
- }
80
- };
81
- await this.hooksCall('beforeUploadChunk', chunk, filemeta);
82
- let res = await this.fetch('/', info);
83
- if (!res.success) {
84
- if (["Signeture expired", "Request expired"].includes(res.message)) {
85
- await this.handshake();
86
- window.removeEventListener("pagehide", abort);
87
- res = await this.uploadFile(file, onProgress);
88
- }
89
- else {
90
- await abort();
91
- return res;
92
- }
93
- }
94
- await this.hooksCall('afterUploadChunk', res, filemeta);
95
- }
96
- finally {
97
- _g = true;
98
- }
99
- }
100
- }
101
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
102
- finally {
103
- try {
104
- if (!_g && !_a && (_b = _h.return)) await _b.call(_h);
105
- }
106
- finally { if (e_1) throw e_1.error; }
107
- }
108
- window.removeEventListener("pagehide", abort);
109
- const info = {
110
- success: true,
111
- message: 'File uploaded successfully',
112
- data: filemeta,
113
- code: 200
114
- };
115
- await this.hooksCall('afterUpload', info, _file);
116
- return info;
117
- }
118
- async deleteFile(fileId, init) {
119
- await this.awaitForHandshake();
120
- const res = await this.fetch('/', Object.assign(Object.assign({}, init), { method: 'DELETE', body: { fileId } }));
121
- if (["Signeture expired", "Request expired"].includes(res.message)) {
122
- await this.handshake();
123
- return await this.deleteFile(fileId, init);
124
- }
125
- return res;
126
- }
127
- async get(path, init) {
128
- return await this.send(path, init);
129
- }
130
- async post(path, init) {
131
- return await this.send(path, Object.assign(Object.assign({}, init), { method: "POST" }));
132
- }
133
- async put(path, init) {
134
- return await this.send(path, Object.assign(Object.assign({}, init), { method: "PUT" }));
135
- }
136
- async delete(path, init) {
137
- return await this.send(path, Object.assign(Object.assign({}, init), { method: "DELETE" }));
138
- }
1
+ import {__asyncValues}from'tslib';import {getFileId,totalChunks,chunkFile}from'../include/File.mjs';import Base from'./Base.mjs';import {fileScaner}from'../include/FileScaner.mjs';class SecurequClient extends Base {
2
+ async send(path, init) {
3
+ await this.awaitForHandshake();
4
+ init = await this.hooksCall('beforeRequest', path, init) || init;
5
+ const url = await this.url(path);
6
+ if (url.pathname === '/')
7
+ throw new Error("Path is not allowed");
8
+ for (let key in init === null || init === void 0 ? void 0 : init.body) {
9
+ if ((init === null || init === void 0 ? void 0 : init.body[key]) instanceof File) {
10
+ init.body[key] = await this.uploadFile(init.body[key], init === null || init === void 0 ? void 0 : init.onProgress);
11
+ }
12
+ }
13
+ const res = await this.fetch(path, init);
14
+ if (["Signeture expired", "Request expired"].includes(res.message)) {
15
+ await this.handshake();
16
+ return await this.send(path, init);
17
+ }
18
+ await this.hooksCall('afterResponse', res);
19
+ return res;
20
+ }
21
+ async uploadFile(file, onProgress) {
22
+ var _a, e_1, _b, _c;
23
+ var _d, _e, _f;
24
+ await this.awaitForHandshake();
25
+ const fileId = await getFileId(file);
26
+ const controller = new AbortController();
27
+ let _file = await this.hooksCall('beforeUpload', file, fileId) || file;
28
+ const maxFileSize = (_d = this.handshakeInfo) === null || _d === void 0 ? void 0 : _d.maxFileSize;
29
+ if (maxFileSize && _file.size > maxFileSize * 1024) {
30
+ throw new Error(`File size exceeds the limit of ${maxFileSize / 1024} MB`);
31
+ }
32
+ const chunkSize = (_e = this.handshakeInfo) === null || _e === void 0 ? void 0 : _e.chunkSize;
33
+ // send metadata
34
+ const filemeta = {
35
+ fileId: fileId,
36
+ name: _file.name,
37
+ size: _file.size,
38
+ type: _file.type,
39
+ totalChunks: totalChunks(_file, chunkSize),
40
+ chunkIndex: 0,
41
+ isFinish: false
42
+ };
43
+ const abort = async () => {
44
+ await this.deleteFile(fileId);
45
+ controller.abort();
46
+ window.removeEventListener("pagehide", abort);
47
+ };
48
+ window.addEventListener("pagehide", abort);
49
+ try {
50
+ for (var _g = true, _h = __asyncValues(chunkFile(_file, chunkSize)), _j; _j = await _h.next(), _a = _j.done, !_a;) {
51
+ _c = _j.value;
52
+ _g = false;
53
+ try {
54
+ let { chunk, chunkIndex } = _c;
55
+ if (chunkIndex === 0 && ((_f = this.handshakeInfo) === null || _f === void 0 ? void 0 : _f.checkFileType) && !fileScaner(chunk)) {
56
+ await abort();
57
+ return {
58
+ success: false,
59
+ message: "Unknown or unsupported file type",
60
+ data: null,
61
+ code: 0
62
+ };
63
+ }
64
+ filemeta.chunkIndex = chunkIndex;
65
+ filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;
66
+ const info = {
67
+ method: 'PUT',
68
+ signal: controller.signal,
69
+ body: {
70
+ chunk,
71
+ filemeta
72
+ },
73
+ onProgress: (p) => {
74
+ if (onProgress) {
75
+ const totalProgress = Math.floor(((chunkIndex + 1) / filemeta.totalChunks) * 100);
76
+ const currentProgress = Math.floor((p / 100) / filemeta.totalChunks * 100);
77
+ onProgress(Math.min(totalProgress + currentProgress, 100));
78
+ }
79
+ }
80
+ };
81
+ await this.hooksCall('beforeUploadChunk', chunk, filemeta);
82
+ let res = await this.fetch('/', info);
83
+ if (!res.success) {
84
+ if (["Signeture expired", "Request expired"].includes(res.message)) {
85
+ await this.handshake();
86
+ window.removeEventListener("pagehide", abort);
87
+ res = await this.uploadFile(file, onProgress);
88
+ }
89
+ else {
90
+ await abort();
91
+ return res;
92
+ }
93
+ }
94
+ await this.hooksCall('afterUploadChunk', res, filemeta);
95
+ }
96
+ finally {
97
+ _g = true;
98
+ }
99
+ }
100
+ }
101
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
102
+ finally {
103
+ try {
104
+ if (!_g && !_a && (_b = _h.return)) await _b.call(_h);
105
+ }
106
+ finally { if (e_1) throw e_1.error; }
107
+ }
108
+ window.removeEventListener("pagehide", abort);
109
+ const info = {
110
+ success: true,
111
+ message: 'File uploaded successfully',
112
+ data: filemeta,
113
+ code: 200
114
+ };
115
+ await this.hooksCall('afterUpload', info, _file);
116
+ return info;
117
+ }
118
+ async deleteFile(fileId, init) {
119
+ await this.awaitForHandshake();
120
+ const res = await this.fetch('/', Object.assign(Object.assign({}, init), { method: 'DELETE', body: { fileId } }));
121
+ if (["Signeture expired", "Request expired"].includes(res.message)) {
122
+ await this.handshake();
123
+ return await this.deleteFile(fileId, init);
124
+ }
125
+ return res;
126
+ }
127
+ async get(path, init) {
128
+ return await this.send(path, init);
129
+ }
130
+ async post(path, init) {
131
+ return await this.send(path, Object.assign(Object.assign({}, init), { method: "POST" }));
132
+ }
133
+ async put(path, init) {
134
+ return await this.send(path, Object.assign(Object.assign({}, init), { method: "PUT" }));
135
+ }
136
+ async delete(path, init) {
137
+ return await this.send(path, Object.assign(Object.assign({}, init), { method: "DELETE" }));
138
+ }
139
139
  }export{SecurequClient as default};//# sourceMappingURL=index.mjs.map