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/client/index.js CHANGED
@@ -1,146 +1,163 @@
1
1
  import { __asyncValues } from 'tslib';
2
2
  import { getFileId, totalChunks, chunkFile } from '../include/file.js';
3
3
  import Base from './Base.js';
4
- import fileScaner from '../include/file-scaner.js';
4
+ import { fileScaner } from '../include/file-scaner.js';
5
5
 
6
- class SecurequClient extends Base {
7
- async send(path, init) {
8
- await this.awaitForHandshake();
9
- init = await this.hooksCall('beforeRequest', path, init) || init;
10
- const url = await this.url(path);
11
- if (url.pathname === '/')
12
- throw new Error("Path is not allowed");
13
- for (let key in init === null || init === void 0 ? void 0 : init.body) {
14
- if ((init === null || init === void 0 ? void 0 : init.body[key]) instanceof File) {
15
- init.body[key] = await this.uploadFile(init.body[key], init === null || init === void 0 ? void 0 : init.onProgress);
16
- }
17
- }
18
- const res = await this.fetch(path, init);
19
- if (["Signeture expired", "Request expired"].includes(res.message)) {
20
- await this.handshake();
21
- return await this.send(path, init);
22
- }
23
- await this.hooksCall('afterResponse', res);
24
- return res;
25
- }
26
- async uploadFile(file, onProgress) {
27
- var _a, e_1, _b, _c;
28
- var _d, _e, _f;
29
- await this.awaitForHandshake();
30
- const fileId = await getFileId(file);
31
- const controller = new AbortController();
32
- let _file = await this.hooksCall('beforeUpload', file, fileId) || file;
33
- const maxFileSize = (_d = this.handshakeInfo) === null || _d === void 0 ? void 0 : _d.maxFileSize;
34
- if (maxFileSize && _file.size > maxFileSize * 1024) {
35
- throw new Error(`File size exceeds the limit of ${maxFileSize / 1024} MB`);
36
- }
37
- const chunkSize = (_e = this.handshakeInfo) === null || _e === void 0 ? void 0 : _e.chunkSize;
38
- // send metadata
39
- const filemeta = {
40
- fileId: fileId,
41
- name: _file.name,
42
- size: _file.size,
43
- type: _file.type,
44
- totalChunks: totalChunks(_file, chunkSize),
45
- chunkIndex: 0,
46
- isFinish: false
47
- };
48
- const abort = async () => {
49
- await this.deleteFile(fileId);
50
- controller.abort();
51
- window.removeEventListener("pagehide", abort);
52
- };
53
- window.addEventListener("pagehide", abort);
54
- try {
55
- for (var _g = true, _h = __asyncValues(chunkFile(_file, chunkSize)), _j; _j = await _h.next(), _a = _j.done, !_a;) {
56
- _c = _j.value;
57
- _g = false;
58
- try {
59
- let { chunk, chunkIndex } = _c;
60
- if (chunkIndex === 0 && ((_f = this.handshakeInfo) === null || _f === void 0 ? void 0 : _f.checkFileType) && !fileScaner(chunk)) {
61
- await abort();
62
- return {
63
- success: false,
64
- message: "Unknown or unsupported file type",
65
- data: null,
66
- code: 0
67
- };
68
- }
69
- filemeta.chunkIndex = chunkIndex;
70
- filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;
71
- const info = {
72
- method: 'PUT',
73
- signal: controller.signal,
74
- body: {
75
- chunk,
76
- filemeta
77
- },
78
- onProgress: (p) => {
79
- if (onProgress) {
80
- const totalProgress = Math.floor(((chunkIndex + 1) / filemeta.totalChunks) * 100);
81
- const currentProgress = Math.floor((p / 100) / filemeta.totalChunks * 100);
82
- onProgress(Math.min(totalProgress + currentProgress, 100));
83
- }
84
- }
85
- };
86
- await this.hooksCall('beforeUploadChunk', chunk, filemeta);
87
- let res = await this.fetch('/', info);
88
- if (!res.success) {
89
- if (["Signeture expired", "Request expired"].includes(res.message)) {
90
- await this.handshake();
91
- window.removeEventListener("pagehide", abort);
92
- res = await this.uploadFile(file, onProgress);
93
- }
94
- else {
95
- await abort();
96
- return res;
97
- }
98
- }
99
- await this.hooksCall('afterUploadChunk', res, filemeta);
100
- }
101
- finally {
102
- _g = true;
103
- }
104
- }
105
- }
106
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
107
- finally {
108
- try {
109
- if (!_g && !_a && (_b = _h.return)) await _b.call(_h);
110
- }
111
- finally { if (e_1) throw e_1.error; }
112
- }
113
- window.removeEventListener("pagehide", abort);
114
- const info = {
115
- success: true,
116
- message: 'File uploaded successfully',
117
- data: filemeta,
118
- code: 200
119
- };
120
- await this.hooksCall('afterUpload', info, _file);
121
- return info;
122
- }
123
- async deleteFile(fileId, init) {
124
- await this.awaitForHandshake();
125
- const res = await this.fetch('/', Object.assign(Object.assign({}, init), { method: 'DELETE', body: { fileId } }));
126
- if (["Signeture expired", "Request expired"].includes(res.message)) {
127
- await this.handshake();
128
- return await this.deleteFile(fileId, init);
129
- }
130
- return res;
131
- }
132
- async get(path, init) {
133
- return await this.send(path, init);
134
- }
135
- async post(path, init) {
136
- return await this.send(path, Object.assign(Object.assign({}, init), { method: "POST" }));
137
- }
138
- async put(path, init) {
139
- return await this.send(path, Object.assign(Object.assign({}, init), { method: "PUT" }));
140
- }
141
- async delete(path, init) {
142
- return await this.send(path, Object.assign(Object.assign({}, init), { method: "DELETE" }));
143
- }
6
+ class SecurequClient extends Base {
7
+ async send(path, init) {
8
+ await this.awaitForHandshake();
9
+ init = await this.hooksCall('beforeRequest', path, init) || init;
10
+ const url = await this.url(path);
11
+ if (url.pathname === '/')
12
+ throw new Error("Path is not allowed");
13
+ for (let key in init === null || init === void 0 ? void 0 : init.body) {
14
+ if ((init === null || init === void 0 ? void 0 : init.body[key]) instanceof File) {
15
+ init.body[key] = await this.uploadFile(init.body[key], init === null || init === void 0 ? void 0 : init.onProgress);
16
+ }
17
+ }
18
+ const res = await this.fetch(path, init);
19
+ if (["Signeture expired", "Request expired"].includes(res.message)) {
20
+ await this.handshake();
21
+ return await this.send(path, init);
22
+ }
23
+ await this.hooksCall('afterResponse', res);
24
+ return res;
25
+ }
26
+ async uploadFile(file, onProgress) {
27
+ var _a, e_1, _b, _c;
28
+ var _d, _e, _f;
29
+ await this.awaitForHandshake();
30
+ if (!(file instanceof File)) {
31
+ const controller = new AbortController();
32
+ const chunk = file.chunk;
33
+ const filemeta = file.meta;
34
+ const chunkIndex = filemeta.chunkIndex;
35
+ filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;
36
+ const fileId = filemeta.fileId;
37
+ const maxFileSize = (_d = this.handshakeInfo) === null || _d === void 0 ? void 0 : _d.maxFileSize;
38
+ if (maxFileSize && filemeta.size > maxFileSize * 1024) {
39
+ throw new Error(`File size exceeds the limit of ${maxFileSize / 1024} MB`);
40
+ }
41
+ const abort = async () => {
42
+ await this.deleteFile(fileId);
43
+ controller.abort();
44
+ window.removeEventListener("pagehide", abort);
45
+ };
46
+ if (chunkIndex === 0 && ((_e = this.handshakeInfo) === null || _e === void 0 ? void 0 : _e.checkFileType) && !fileScaner(chunk)) {
47
+ await abort();
48
+ return {
49
+ success: false,
50
+ message: "Unknown or unsupported file type",
51
+ data: null,
52
+ code: 0
53
+ };
54
+ }
55
+ const info = {
56
+ method: 'PUT',
57
+ signal: controller.signal,
58
+ body: {
59
+ chunk,
60
+ filemeta
61
+ },
62
+ onProgress: (p) => {
63
+ if (onProgress) {
64
+ const totalProgress = Math.floor(((chunkIndex + 1) / filemeta.totalChunks) * 100);
65
+ const currentProgress = Math.floor((p / 100) / filemeta.totalChunks * 100);
66
+ onProgress(Math.min(totalProgress + currentProgress, 100));
67
+ }
68
+ }
69
+ };
70
+ await this.hooksCall('beforeUploadChunk', chunk, filemeta);
71
+ let res = await this.fetch('/', info);
72
+ if (!res.success) {
73
+ if (["Signeture expired", "Request expired"].includes(res.message)) {
74
+ await this.handshake();
75
+ window.removeEventListener("pagehide", abort);
76
+ res = await this.uploadFile(file, onProgress);
77
+ }
78
+ else {
79
+ await abort();
80
+ return res;
81
+ }
82
+ }
83
+ await this.hooksCall('afterUploadChunk', res, filemeta);
84
+ window.removeEventListener("pagehide", abort);
85
+ return {
86
+ success: true,
87
+ message: 'File uploaded successfully',
88
+ data: filemeta,
89
+ code: 200
90
+ };
91
+ }
92
+ else {
93
+ const fileId = await getFileId(file);
94
+ const _file = await this.hooksCall('beforeUpload', file, fileId) || file;
95
+ const chunkSize = (_f = this.handshakeInfo) === null || _f === void 0 ? void 0 : _f.chunkSize;
96
+ // send metadata
97
+ const filemeta = {
98
+ fileId: fileId,
99
+ name: _file.name,
100
+ size: _file.size,
101
+ type: _file.type,
102
+ totalChunks: totalChunks(_file, chunkSize),
103
+ chunkIndex: 0,
104
+ isFinish: false
105
+ };
106
+ try {
107
+ for (var _g = true, _h = __asyncValues(chunkFile(_file, chunkSize)), _j; _j = await _h.next(), _a = _j.done, !_a;) {
108
+ _c = _j.value;
109
+ _g = false;
110
+ try {
111
+ let { chunk, chunkIndex } = _c;
112
+ filemeta.chunkIndex = chunkIndex;
113
+ await this.uploadFile({
114
+ chunk,
115
+ meta: filemeta
116
+ });
117
+ }
118
+ finally {
119
+ _g = true;
120
+ }
121
+ }
122
+ }
123
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
124
+ finally {
125
+ try {
126
+ if (!_g && !_a && (_b = _h.return)) await _b.call(_h);
127
+ }
128
+ finally { if (e_1) throw e_1.error; }
129
+ }
130
+ const info = {
131
+ success: true,
132
+ message: 'File uploaded successfully',
133
+ data: filemeta,
134
+ code: 200
135
+ };
136
+ await this.hooksCall('afterUpload', info, _file);
137
+ return info;
138
+ }
139
+ }
140
+ async deleteFile(fileId, init) {
141
+ await this.awaitForHandshake();
142
+ const res = await this.fetch('/', Object.assign(Object.assign({}, init), { method: 'DELETE', body: { fileId } }));
143
+ if (["Signeture expired", "Request expired"].includes(res.message)) {
144
+ await this.handshake();
145
+ return await this.deleteFile(fileId, init);
146
+ }
147
+ return res;
148
+ }
149
+ async get(path, init) {
150
+ return await this.send(path, init);
151
+ }
152
+ async post(path, init) {
153
+ return await this.send(path, Object.assign(Object.assign({}, init), { method: "POST" }));
154
+ }
155
+ async put(path, init) {
156
+ return await this.send(path, Object.assign(Object.assign({}, init), { method: "PUT" }));
157
+ }
158
+ async delete(path, init) {
159
+ return await this.send(path, Object.assign(Object.assign({}, init), { method: "DELETE" }));
160
+ }
144
161
  }
145
162
 
146
163
  export { SecurequClient as default };
@@ -1 +1 @@
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/file-scaner';\r\nimport { UploadFileMeta } from \"../server/types\";\r\n\r\nexport * from \"./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":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/client/index.ts"],"sourcesContent":["import { FileUploadArgs, HttpRequestInit, SecurequClientResponse } from \"./types\";\nimport { chunkFile, getFileId, totalChunks } from \"../include/file\";\nimport Base from \"./Base\";\nimport fileScaner from '../include/file-scaner';\nimport { UploadFileMeta } from \"../server/types\";\n\nexport * from \"./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: FileUploadArgs, onProgress?: (p: number) => void): Promise<SecurequClientResponse> {\n await this.awaitForHandshake();\n\n if (!(file instanceof File)) {\n const controller = new AbortController();\n const chunk = file.chunk\n const filemeta = file.meta\n const chunkIndex = filemeta.chunkIndex;\n filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;\n const fileId = filemeta.fileId\n const maxFileSize = this.handshakeInfo?.maxFileSize\n if (maxFileSize && filemeta.size > maxFileSize * 1024) {\n throw new Error(`File size exceeds the limit of ${maxFileSize / 1024} MB`)\n }\n\n const abort = async () => {\n await this.deleteFile(fileId);\n controller.abort();\n window.removeEventListener(\"pagehide\", abort);\n }\n\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 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\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 window.removeEventListener(\"pagehide\", abort);\n return {\n success: true,\n message: 'File uploaded successfully',\n data: filemeta,\n code: 200\n }\n } else {\n const fileId = await getFileId(file);\n const _file = await this.hooksCall('beforeUpload', file, fileId) || file;\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 for await (let { chunk, chunkIndex } of chunkFile(_file, chunkSize)) {\n filemeta.chunkIndex = chunkIndex;\n await this.uploadFile({\n chunk,\n meta: filemeta\n })\n }\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\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":[],"mappings":"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"}
package/client/types.d.ts CHANGED
@@ -1,40 +1,44 @@
1
1
  import { XanFetchOptions } from 'xanfetch/types';
2
2
  import { UploadFileMeta } from '../server/types.js';
3
3
 
4
- type HandshakeInfo = {
5
- dev: boolean;
6
- timeDiffarenc: number;
7
- signeture: string;
8
- maxFileSize: number | null;
9
- checkFileType: boolean;
10
- chunkSize?: number;
11
- };
12
- type SecurequClientConfig = {
13
- url: string;
14
- secret: string;
15
- defaultOptions?: XanFetchOptions;
16
- hooks?: {
17
- beforeHandshake?: () => Promise<void> | void;
18
- afterHandshake?: (info: HandshakeInfo) => Promise<void> | void;
19
- beforeRequest?: (url: string, init?: HttpRequestInit) => Promise<HttpRequestInit> | void;
20
- afterResponse?: (response: Response) => Promise<void> | void;
21
- beforeUpload?: (file: File, fileId: string) => Promise<File> | void;
22
- afterUpload?: (response: SecurequClientResponse, file: File) => Promise<void> | void;
23
- beforeUploadChunk?: (chunk: Blob, filemeta: UploadFileMeta) => Promise<void> | void;
24
- afterUploadChunk?: (response: SecurequClientResponse, filemeta: UploadFileMeta) => Promise<void> | void;
25
- };
26
- };
27
- type SecurequClientResponse = {
28
- success: boolean;
29
- message: string;
30
- data: any;
31
- code: number;
32
- };
33
- type HTTPMethods = "GET" | "POST" | "PUT" | "DELETE";
34
- type HttpRequestInit = Omit<XanFetchOptions, 'body'> & {
35
- body?: {
36
- [key: string]: any;
37
- };
4
+ type HandshakeInfo = {
5
+ dev: boolean;
6
+ timeDiffarenc: number;
7
+ signeture: string;
8
+ maxFileSize: number | null;
9
+ checkFileType: boolean;
10
+ chunkSize?: number;
11
+ };
12
+ type SecurequClientConfig = {
13
+ url: string;
14
+ secret: string;
15
+ defaultOptions?: XanFetchOptions;
16
+ hooks?: {
17
+ beforeHandshake?: () => Promise<void> | void;
18
+ afterHandshake?: (info: HandshakeInfo) => Promise<void> | void;
19
+ beforeRequest?: (url: string, init?: HttpRequestInit) => Promise<HttpRequestInit> | void;
20
+ afterResponse?: (response: Response) => Promise<void> | void;
21
+ beforeUpload?: (file: File, fileId: string) => Promise<File> | void;
22
+ afterUpload?: (response: SecurequClientResponse, file: File) => Promise<void> | void;
23
+ beforeUploadChunk?: (chunk: Blob, filemeta: UploadFileMeta) => Promise<void> | void;
24
+ afterUploadChunk?: (response: SecurequClientResponse, filemeta: UploadFileMeta) => Promise<void> | void;
25
+ };
26
+ };
27
+ type SecurequClientResponse = {
28
+ success: boolean;
29
+ message: string;
30
+ data: any;
31
+ code: number;
32
+ };
33
+ type HTTPMethods = "GET" | "POST" | "PUT" | "DELETE";
34
+ type HttpRequestInit = Omit<XanFetchOptions, 'body'> & {
35
+ body?: {
36
+ [key: string]: any;
37
+ };
38
+ };
39
+ type FileUploadArgs = File | {
40
+ chunk: Uint8Array;
41
+ meta: UploadFileMeta;
38
42
  };
39
43
 
40
- export type { HTTPMethods, HandshakeInfo, HttpRequestInit, SecurequClientConfig, SecurequClientResponse };
44
+ export type { FileUploadArgs, HTTPMethods, HandshakeInfo, HttpRequestInit, SecurequClientConfig, SecurequClientResponse };
@@ -5,37 +5,37 @@ var fflate = require('fflate');
5
5
  var msgpackr = require('msgpackr');
6
6
  var crypto = require('./crypto.cjs');
7
7
 
8
- /* ================================
9
- Buffer-level
10
- ================================ */
11
- async function compressBuffer(input) {
12
- await crypto.init();
13
- const encoded = msgpackr.pack(input);
14
- return fflate.compressSync(encoded);
15
- }
16
- async function decompressBuffer(input) {
17
- await crypto.init();
18
- const decompressed = fflate.decompressSync(input);
19
- return msgpackr.unpack(decompressed);
20
- }
21
- /* ================================
22
- String-level
23
- ================================ */
24
- async function compress(input) {
25
- await crypto.init();
26
- const compressed = await compressBuffer(input);
27
- return sodium.to_base64(compressed, sodium.base64_variants.ORIGINAL);
28
- }
29
- async function decompress(base64Str) {
30
- await crypto.init();
31
- const compressed = sodium.from_base64(base64Str, sodium.base64_variants.ORIGINAL);
32
- return decompressBuffer(compressed);
33
- }
34
- const compresor = {
35
- compressBuffer,
36
- decompressBuffer,
37
- compress,
38
- decompress
8
+ /* ================================
9
+ Buffer-level
10
+ ================================ */
11
+ async function compressBuffer(input) {
12
+ await crypto.init();
13
+ const encoded = msgpackr.pack(input);
14
+ return fflate.compressSync(encoded);
15
+ }
16
+ async function decompressBuffer(input) {
17
+ await crypto.init();
18
+ const decompressed = fflate.decompressSync(input);
19
+ return msgpackr.unpack(decompressed);
20
+ }
21
+ /* ================================
22
+ String-level
23
+ ================================ */
24
+ async function compress(input) {
25
+ await crypto.init();
26
+ const compressed = await compressBuffer(input);
27
+ return sodium.to_base64(compressed, sodium.base64_variants.ORIGINAL);
28
+ }
29
+ async function decompress(base64Str) {
30
+ await crypto.init();
31
+ const compressed = sodium.from_base64(base64Str, sodium.base64_variants.ORIGINAL);
32
+ return decompressBuffer(compressed);
33
+ }
34
+ const compresor = {
35
+ compressBuffer,
36
+ decompressBuffer,
37
+ compress,
38
+ decompress
39
39
  };
40
40
 
41
41
  module.exports = compresor;
@@ -1 +1 @@
1
- {"version":3,"file":"compress.cjs","sources":["../../src/include/compress.ts"],"sourcesContent":["import sodium from \"libsodium-wrappers\";\r\nimport { compressSync, decompressSync } from \"fflate\";\r\nimport { unpack, pack } from \"msgpackr\";\r\nimport crypto from \"./crypto\";\r\n\r\n/* ================================\r\n Buffer-level\r\n================================ */\r\nasync function compressBuffer(input: any): Promise<Uint8Array> {\r\n await crypto.init();\r\n const encoded = pack(input);\r\n return compressSync(encoded);\r\n}\r\n\r\nasync function decompressBuffer(input: Uint8Array): Promise<any> {\r\n await crypto.init();\r\n const decompressed = decompressSync(input);\r\n return unpack(decompressed);\r\n}\r\n\r\n/* ================================\r\n String-level\r\n================================ */\r\nasync function compress(input: any): Promise<string> {\r\n await crypto.init();\r\n const compressed = await compressBuffer(input);\r\n return sodium.to_base64(\r\n compressed,\r\n sodium.base64_variants.ORIGINAL\r\n );\r\n}\r\n\r\nasync function decompress(base64Str: string): Promise<any> {\r\n await crypto.init();\r\n const compressed = sodium.from_base64(\r\n base64Str,\r\n sodium.base64_variants.ORIGINAL\r\n );\r\n return decompressBuffer(compressed);\r\n}\r\n\r\nconst compresor = {\r\n compressBuffer,\r\n decompressBuffer,\r\n compress,\r\n decompress\r\n}\r\n\r\nexport default compresor"],"names":["pack","compressSync","decompressSync","unpack"],"mappings":";;;;;;;AAKA;;AAEmC;AACnC,eAAe,cAAc,CAAC,KAAU,EAAA;AACrC,IAAA,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;AACpB,IAAA,MAAM,OAAO,GAAGA,aAAI,CAAC,KAAK,CAAC,CAAC;AAC5B,IAAA,OAAOC,mBAAY,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,eAAe,gBAAgB,CAAC,KAAiB,EAAA;AAC9C,IAAA,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;AACpB,IAAA,MAAM,YAAY,GAAGC,qBAAc,CAAC,KAAK,CAAC,CAAC;AAC3C,IAAA,OAAOC,eAAM,CAAC,YAAY,CAAC,CAAC;AAC/B,CAAC;AAED;;AAEmC;AACnC,eAAe,QAAQ,CAAC,KAAU,EAAA;AAC/B,IAAA,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;AACpB,IAAA,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;AAC/C,IAAA,OAAO,MAAM,CAAC,SAAS,CACpB,UAAU,EACV,MAAM,CAAC,eAAe,CAAC,QAAQ,CACjC,CAAC;AACL,CAAC;AAED,eAAe,UAAU,CAAC,SAAiB,EAAA;AACxC,IAAA,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;AACpB,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAClC,SAAS,EACT,MAAM,CAAC,eAAe,CAAC,QAAQ,CACjC,CAAC;AACF,IAAA,OAAO,gBAAgB,CAAC,UAAU,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,SAAS,GAAG;IACf,cAAc;IACd,gBAAgB;IAChB,QAAQ;IACR,UAAU;;;;;"}
1
+ {"version":3,"file":"compress.cjs","sources":["../../src/include/compress.ts"],"sourcesContent":["import sodium from \"libsodium-wrappers\";\nimport { compressSync, decompressSync } from \"fflate\";\nimport { unpack, pack } from \"msgpackr\";\nimport crypto from \"./crypto\";\n\n/* ================================\n Buffer-level\n================================ */\nasync function compressBuffer(input: any): Promise<Uint8Array> {\n await crypto.init();\n const encoded = pack(input);\n return compressSync(encoded);\n}\n\nasync function decompressBuffer(input: Uint8Array): Promise<any> {\n await crypto.init();\n const decompressed = decompressSync(input);\n return unpack(decompressed);\n}\n\n/* ================================\n String-level\n================================ */\nasync function compress(input: any): Promise<string> {\n await crypto.init();\n const compressed = await compressBuffer(input);\n return sodium.to_base64(\n compressed,\n sodium.base64_variants.ORIGINAL\n );\n}\n\nasync function decompress(base64Str: string): Promise<any> {\n await crypto.init();\n const compressed = sodium.from_base64(\n base64Str,\n sodium.base64_variants.ORIGINAL\n );\n return decompressBuffer(compressed);\n}\n\nconst compresor = {\n compressBuffer,\n decompressBuffer,\n compress,\n decompress\n}\n\nexport default compresor"],"names":["pack","compressSync","decompressSync","unpack"],"mappings":";;;;;;;AAKA;;AAEmC;AACnC,eAAe,cAAc,CAAC,KAAU,EAAA;AACrC,IAAA,MAAM,MAAM,CAAC,IAAI,EAAE;AACnB,IAAA,MAAM,OAAO,GAAGA,aAAI,CAAC,KAAK,CAAC;AAC3B,IAAA,OAAOC,mBAAY,CAAC,OAAO,CAAC;AAC/B;AAEA,eAAe,gBAAgB,CAAC,KAAiB,EAAA;AAC9C,IAAA,MAAM,MAAM,CAAC,IAAI,EAAE;AACnB,IAAA,MAAM,YAAY,GAAGC,qBAAc,CAAC,KAAK,CAAC;AAC1C,IAAA,OAAOC,eAAM,CAAC,YAAY,CAAC;AAC9B;AAEA;;AAEmC;AACnC,eAAe,QAAQ,CAAC,KAAU,EAAA;AAC/B,IAAA,MAAM,MAAM,CAAC,IAAI,EAAE;AACnB,IAAA,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC;AAC9C,IAAA,OAAO,MAAM,CAAC,SAAS,CACpB,UAAU,EACV,MAAM,CAAC,eAAe,CAAC,QAAQ,CACjC;AACJ;AAEA,eAAe,UAAU,CAAC,SAAiB,EAAA;AACxC,IAAA,MAAM,MAAM,CAAC,IAAI,EAAE;AACnB,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAClC,SAAS,EACT,MAAM,CAAC,eAAe,CAAC,QAAQ,CACjC;AACD,IAAA,OAAO,gBAAgB,CAAC,UAAU,CAAC;AACtC;AAEA,MAAM,SAAS,GAAG;IACf,cAAc;IACd,gBAAgB;IAChB,QAAQ;IACR;;;;;"}
@@ -1,12 +1,12 @@
1
- declare function compressBuffer(input: any): Promise<Uint8Array>;
2
- declare function decompressBuffer(input: Uint8Array): Promise<any>;
3
- declare function compress(input: any): Promise<string>;
4
- declare function decompress(base64Str: string): Promise<any>;
5
- declare const compresor: {
6
- compressBuffer: typeof compressBuffer;
7
- decompressBuffer: typeof decompressBuffer;
8
- compress: typeof compress;
9
- decompress: typeof decompress;
1
+ declare function compressBuffer(input: any): Promise<Uint8Array>;
2
+ declare function decompressBuffer(input: Uint8Array): Promise<any>;
3
+ declare function compress(input: any): Promise<string>;
4
+ declare function decompress(base64Str: string): Promise<any>;
5
+ declare const compresor: {
6
+ compressBuffer: typeof compressBuffer;
7
+ decompressBuffer: typeof decompressBuffer;
8
+ compress: typeof compress;
9
+ decompress: typeof decompress;
10
10
  };
11
11
 
12
12
  export { compresor as default };
@@ -1,39 +1,39 @@
1
1
  import sodium from 'libsodium-wrappers';
2
- import { compressSync, decompressSync } from 'fflate';
3
- import { pack, unpack } from 'msgpackr';
2
+ import { decompressSync, compressSync } from 'fflate';
3
+ import { unpack, pack } from 'msgpackr';
4
4
  import crypto from './crypto.js';
5
5
 
6
- /* ================================
7
- Buffer-level
8
- ================================ */
9
- async function compressBuffer(input) {
10
- await crypto.init();
11
- const encoded = pack(input);
12
- return compressSync(encoded);
13
- }
14
- async function decompressBuffer(input) {
15
- await crypto.init();
16
- const decompressed = decompressSync(input);
17
- return unpack(decompressed);
18
- }
19
- /* ================================
20
- String-level
21
- ================================ */
22
- async function compress(input) {
23
- await crypto.init();
24
- const compressed = await compressBuffer(input);
25
- return sodium.to_base64(compressed, sodium.base64_variants.ORIGINAL);
26
- }
27
- async function decompress(base64Str) {
28
- await crypto.init();
29
- const compressed = sodium.from_base64(base64Str, sodium.base64_variants.ORIGINAL);
30
- return decompressBuffer(compressed);
31
- }
32
- const compresor = {
33
- compressBuffer,
34
- decompressBuffer,
35
- compress,
36
- decompress
6
+ /* ================================
7
+ Buffer-level
8
+ ================================ */
9
+ async function compressBuffer(input) {
10
+ await crypto.init();
11
+ const encoded = pack(input);
12
+ return compressSync(encoded);
13
+ }
14
+ async function decompressBuffer(input) {
15
+ await crypto.init();
16
+ const decompressed = decompressSync(input);
17
+ return unpack(decompressed);
18
+ }
19
+ /* ================================
20
+ String-level
21
+ ================================ */
22
+ async function compress(input) {
23
+ await crypto.init();
24
+ const compressed = await compressBuffer(input);
25
+ return sodium.to_base64(compressed, sodium.base64_variants.ORIGINAL);
26
+ }
27
+ async function decompress(base64Str) {
28
+ await crypto.init();
29
+ const compressed = sodium.from_base64(base64Str, sodium.base64_variants.ORIGINAL);
30
+ return decompressBuffer(compressed);
31
+ }
32
+ const compresor = {
33
+ compressBuffer,
34
+ decompressBuffer,
35
+ compress,
36
+ decompress
37
37
  };
38
38
 
39
39
  export { compresor as default };