securequ 1.1.15 → 1.1.17

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 (49) hide show
  1. package/client/Base.cjs +6 -6
  2. package/client/Base.cjs.map +1 -1
  3. package/client/Base.js +1 -1
  4. package/client/index.cjs +6 -6
  5. package/client/index.cjs.map +1 -1
  6. package/client/index.js +2 -2
  7. package/client/index.js.map +1 -1
  8. package/include/{compress.cjs → compress/index.cjs} +9 -12
  9. package/include/compress/index.cjs.map +1 -0
  10. package/include/{compress.d.ts → compress/index.d.ts} +2 -2
  11. package/include/{compress.js → compress/index.js} +5 -8
  12. package/include/compress/index.js.map +1 -0
  13. package/include/{crypto.cjs → crypto/index.cjs} +7 -10
  14. package/include/crypto/index.cjs.map +1 -0
  15. package/include/{crypto.d.ts → crypto/index.d.ts} +2 -2
  16. package/include/{crypto.js → crypto/index.js} +5 -8
  17. package/include/crypto/index.js.map +1 -0
  18. package/include/{File.cjs → file/index.cjs} +3 -3
  19. package/include/file/index.cjs.map +1 -0
  20. package/include/{File.js → file/index.js} +2 -2
  21. package/include/file/index.js.map +1 -0
  22. package/include/{FileScaner.cjs → file-scaner/index.cjs} +1 -1
  23. package/include/file-scaner/index.cjs.map +1 -0
  24. package/include/file-scaner/index.d.ts +13 -0
  25. package/include/{FileScaner.js → file-scaner/index.js} +1 -1
  26. package/include/file-scaner/index.js.map +1 -0
  27. package/index.cjs +10 -8
  28. package/index.cjs.map +1 -1
  29. package/index.d.ts +6 -3
  30. package/index.js +4 -3
  31. package/index.js.map +1 -1
  32. package/package.json +9 -25
  33. package/server/Base.cjs +4 -4
  34. package/server/Base.cjs.map +1 -1
  35. package/server/Base.js +1 -1
  36. package/server/index.cjs +14 -14
  37. package/server/index.cjs.map +1 -1
  38. package/server/index.d.ts +1 -1
  39. package/server/index.js +3 -3
  40. package/server/index.js.map +1 -1
  41. package/server/types.d.ts +11 -1
  42. package/include/File.cjs.map +0 -1
  43. package/include/File.js.map +0 -1
  44. package/include/FileScaner.cjs.map +0 -1
  45. package/include/FileScaner.js.map +0 -1
  46. package/include/compress.cjs.map +0 -1
  47. package/include/compress.js.map +0 -1
  48. package/include/crypto.cjs.map +0 -1
  49. package/include/crypto.js.map +0 -1
package/client/Base.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var crypto = require('../include/crypto.cjs');
3
+ var index = require('../include/crypto/index.cjs');
4
4
  var xanFetch = require('xanfetch');
5
5
 
6
6
  const Clients = new Map();
@@ -27,7 +27,7 @@ class Base {
27
27
  async getSecret() {
28
28
  let full = this.config.secret;
29
29
  let secret = full.substring(0, this.secret_length);
30
- let hash = (await crypto.hash(secret)).substring(0, this.secret_length);
30
+ let hash = (await index.hash(secret)).substring(0, this.secret_length);
31
31
  return { full, secret, hash };
32
32
  }
33
33
  async url(path) {
@@ -48,7 +48,7 @@ class Base {
48
48
  const secret = await this.getSecret();
49
49
  let headers = {};
50
50
  if (this.handshakeInfo) {
51
- headers["X-SIGNETURE"] = await crypto.encrypt({
51
+ headers["X-SIGNETURE"] = await index.encrypt({
52
52
  signeture: (_a = this.handshakeInfo) === null || _a === void 0 ? void 0 : _a.signeture,
53
53
  expire: Date.now() + this.handshakeInfo.timeDiffarenc + 10000 // 10 seconds
54
54
  }, secret.secret) || '';
@@ -116,7 +116,7 @@ class Base {
116
116
  }
117
117
  else {
118
118
  const key = Math.random().toString(36).substring(2, 8);
119
- const enc = await crypto.encrypt({ params, key }, secret.secret);
119
+ const enc = await index.encrypt({ params, key }, secret.secret);
120
120
  url.href = `${url.href}?${key}=${encodeURIComponent(enc)}`;
121
121
  }
122
122
  }
@@ -126,7 +126,7 @@ class Base {
126
126
  httpOption.body = JSON.stringify(httpOption.body);
127
127
  }
128
128
  else {
129
- httpOption.body = await crypto.encryptBuffer(httpOption.body, secret.secret);
129
+ httpOption.body = await index.encryptBuffer(httpOption.body, secret.secret);
130
130
  }
131
131
  }
132
132
  const res = await xanFetch(url.href, httpOption);
@@ -141,7 +141,7 @@ class Base {
141
141
  };
142
142
  }
143
143
  const value = await res.arrayBuffer();
144
- const val = await crypto.decryptBuffer(new Uint8Array(value), secret.secret);
144
+ const val = await index.decryptBuffer(new Uint8Array(value), secret.secret);
145
145
  return {
146
146
  success: res.ok,
147
147
  message: res.ok ? res.statusText : (val || res.statusText),
@@ -1 +1 @@
1
- {"version":3,"file":"Base.cjs","sources":["../../src/client/Base.ts"],"sourcesContent":["import crypto from \"../include/crypto\";\r\nimport { HandshakeInfo, HttpRequestInit, SecurequClientConfig, SecurequClientResponse } from \"./types\";\r\nimport xanFetch from 'xanfetch'\r\n\r\n\r\nconst Clients = new Map<string, Base>()\r\n\r\nclass Base {\r\n protected config: SecurequClientConfig;\r\n protected loadingHandshake: boolean = false;\r\n protected secret_length: number = 0;\r\n protected handshakeInfo: HandshakeInfo | null = null;\r\n readonly CONTENT_TYPE = \"application/octet-stream\";\r\n\r\n constructor(config: SecurequClientConfig) {\r\n this.config = {\r\n defaultOptions: {},\r\n ...config,\r\n }\r\n const url = new URL(config.url)\r\n if (url.search || url.hash) throw new Error(`Invalid config url ${config.url}. Search params or Hash url is not supported in config.url`)\r\n config.url = `${url.origin}${url.pathname}`\r\n\r\n if (Clients.has(config.url)) {\r\n throw new Error(`Client is Blocked!`);\r\n }\r\n }\r\n\r\n protected hooksCall(hook: keyof NonNullable<SecurequClientConfig['hooks']>, ...args: any[]) {\r\n if (this.config.hooks && this.config.hooks[hook]) {\r\n return (this.config.hooks[hook] as Function)(...args)\r\n }\r\n }\r\n\r\n protected async getSecret() {\r\n let full = this.config.secret\r\n let secret = full.substring(0, this.secret_length)\r\n let hash = (await crypto.hash(secret)).substring(0, this.secret_length)\r\n return { full, secret, hash }\r\n }\r\n\r\n protected async url(path: string) {\r\n const secret = await this.getSecret()\r\n const base = this.config.url;\r\n if (path === '/') path = ''\r\n path = path.trim();\r\n path = path.startsWith('/') ? path.substring(1) : path\r\n path = path.endsWith('/') ? path.substring(0, path.length - 1) : path\r\n if (path) path = `/${path}`\r\n return new URL(`${base}/${secret.hash}${path}`);\r\n }\r\n\r\n protected async getHeaders(path: string, init?: HttpRequestInit) {\r\n const url = await this.url(path)\r\n const secret = await this.getSecret()\r\n let headers: any = {};\r\n if (this.handshakeInfo) {\r\n headers[\"X-SIGNETURE\"] = await crypto.encrypt({\r\n signeture: this.handshakeInfo?.signeture,\r\n expire: Date.now() + this.handshakeInfo!.timeDiffarenc + 10000 // 10 seconds\r\n }, secret.secret) || '';\r\n }\r\n\r\n headers = {\r\n ...this.config?.defaultOptions?.headers,\r\n ...init?.headers,\r\n ...headers,\r\n 'Content-Type': this.CONTENT_TYPE,\r\n \"X-ORIGIN\": url.origin,\r\n \"X-METHOD\": (init?.method || 'GET').toUpperCase()\r\n }\r\n\r\n return headers;\r\n }\r\n\r\n protected async awaitForHandshake() {\r\n if (this.loadingHandshake) {\r\n await new Promise((resolve) => {\r\n const interval = setInterval(() => {\r\n if (!this.loadingHandshake) {\r\n clearInterval(interval);\r\n resolve(null);\r\n }\r\n }, 100);\r\n })\r\n }\r\n if (!this.handshakeInfo) {\r\n await this.handshake();\r\n }\r\n }\r\n\r\n async handshake() {\r\n await this.hooksCall('beforeHandshake');\r\n this.handshakeInfo = null;\r\n this.loadingHandshake = true;\r\n\r\n let max = this.config.secret.length\r\n let min = Math.floor(max / 4) * 3\r\n this.secret_length = Math.floor(Math.random() * (max - min + 1)) + min\r\n\r\n const secret = await this.getSecret()\r\n const res = await this.fetch('/', {\r\n method: 'POST',\r\n body: {\r\n hash: secret.hash,\r\n clientTime: new Date().toISOString(),\r\n secret: secret.secret,\r\n }\r\n })\r\n this.handshakeInfo = res.data\r\n this.loadingHandshake = false;\r\n await this.hooksCall('afterHandshake', this.handshakeInfo);\r\n }\r\n\r\n protected async fetch(path: string, init?: HttpRequestInit): Promise<SecurequClientResponse> {\r\n const isDev = path !== '/' && this.handshakeInfo?.dev\r\n const secret = await this.getSecret()\r\n const url = await this.url(path)\r\n let sparams = Object.fromEntries(url.searchParams.entries())\r\n const _init = { ...init }\r\n let params: any = {\r\n ...sparams,\r\n }\r\n\r\n if (Object.keys(sparams).length > 0) {\r\n for (let key in sparams) {\r\n url.searchParams.delete(key)\r\n }\r\n }\r\n\r\n if (_init?.params) {\r\n for (let key in _init.params) {\r\n params[key] = _init.params[key]\r\n }\r\n delete _init.params\r\n }\r\n\r\n if (Object.keys(params).length > 0) {\r\n if (isDev) {\r\n _init.params = params\r\n } else {\r\n const key = Math.random().toString(36).substring(2, 8);\r\n const enc = await crypto.encrypt({ params, key }, secret.secret)\r\n url.href = `${url.href}?${key}=${encodeURIComponent(enc)}`\r\n }\r\n }\r\n\r\n const httpOption: any = {\r\n method: \"GET\",\r\n ...this.config?.defaultOptions,\r\n ..._init,\r\n headers: await this.getHeaders(path, _init)\r\n }\r\n\r\n if (httpOption?.body) {\r\n if (isDev) {\r\n httpOption.body = JSON.stringify(httpOption.body)\r\n } else {\r\n httpOption.body = await crypto.encryptBuffer(httpOption.body, secret.secret);\r\n }\r\n }\r\n const res = await xanFetch(url.href, httpOption)\r\n if (isDev) {\r\n const value = await res.text()\r\n const val = JSON.parse(value)\r\n return {\r\n success: res.ok,\r\n message: res.ok ? res.statusText : val,\r\n data: res.ok ? val : null,\r\n code: res.status\r\n }\r\n }\r\n const value = await res.arrayBuffer()\r\n const val = await crypto.decryptBuffer(new Uint8Array(value), secret.secret) as any\r\n\r\n return {\r\n success: res.ok,\r\n message: res.ok ? res.statusText : (val || res.statusText),\r\n data: res.ok ? val : null,\r\n code: res.status\r\n }\r\n }\r\n\r\n}\r\n\r\nexport default Base;\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Base.cjs","sources":["../../src/client/Base.ts"],"sourcesContent":["import crypto from \"../include/crypto\";\r\nimport { HandshakeInfo, HttpRequestInit, SecurequClientConfig, SecurequClientResponse } from \"./types\";\r\nimport xanFetch from 'xanfetch'\r\n\r\n\r\nconst Clients = new Map<string, Base>()\r\n\r\nclass Base {\r\n protected config: SecurequClientConfig;\r\n protected loadingHandshake: boolean = false;\r\n protected secret_length: number = 0;\r\n protected handshakeInfo: HandshakeInfo | null = null;\r\n readonly CONTENT_TYPE = \"application/octet-stream\";\r\n\r\n constructor(config: SecurequClientConfig) {\r\n this.config = {\r\n defaultOptions: {},\r\n ...config,\r\n }\r\n const url = new URL(config.url)\r\n if (url.search || url.hash) throw new Error(`Invalid config url ${config.url}. Search params or Hash url is not supported in config.url`)\r\n config.url = `${url.origin}${url.pathname}`\r\n\r\n if (Clients.has(config.url)) {\r\n throw new Error(`Client is Blocked!`);\r\n }\r\n }\r\n\r\n protected hooksCall(hook: keyof NonNullable<SecurequClientConfig['hooks']>, ...args: any[]) {\r\n if (this.config.hooks && this.config.hooks[hook]) {\r\n return (this.config.hooks[hook] as Function)(...args)\r\n }\r\n }\r\n\r\n protected async getSecret() {\r\n let full = this.config.secret\r\n let secret = full.substring(0, this.secret_length)\r\n let hash = (await crypto.hash(secret)).substring(0, this.secret_length)\r\n return { full, secret, hash }\r\n }\r\n\r\n protected async url(path: string) {\r\n const secret = await this.getSecret()\r\n const base = this.config.url;\r\n if (path === '/') path = ''\r\n path = path.trim();\r\n path = path.startsWith('/') ? path.substring(1) : path\r\n path = path.endsWith('/') ? path.substring(0, path.length - 1) : path\r\n if (path) path = `/${path}`\r\n return new URL(`${base}/${secret.hash}${path}`);\r\n }\r\n\r\n protected async getHeaders(path: string, init?: HttpRequestInit) {\r\n const url = await this.url(path)\r\n const secret = await this.getSecret()\r\n let headers: any = {};\r\n if (this.handshakeInfo) {\r\n headers[\"X-SIGNETURE\"] = await crypto.encrypt({\r\n signeture: this.handshakeInfo?.signeture,\r\n expire: Date.now() + this.handshakeInfo!.timeDiffarenc + 10000 // 10 seconds\r\n }, secret.secret) || '';\r\n }\r\n\r\n headers = {\r\n ...this.config?.defaultOptions?.headers,\r\n ...init?.headers,\r\n ...headers,\r\n 'Content-Type': this.CONTENT_TYPE,\r\n \"X-ORIGIN\": url.origin,\r\n \"X-METHOD\": (init?.method || 'GET').toUpperCase()\r\n }\r\n\r\n return headers;\r\n }\r\n\r\n protected async awaitForHandshake() {\r\n if (this.loadingHandshake) {\r\n await new Promise((resolve) => {\r\n const interval = setInterval(() => {\r\n if (!this.loadingHandshake) {\r\n clearInterval(interval);\r\n resolve(null);\r\n }\r\n }, 100);\r\n })\r\n }\r\n if (!this.handshakeInfo) {\r\n await this.handshake();\r\n }\r\n }\r\n\r\n async handshake() {\r\n await this.hooksCall('beforeHandshake');\r\n this.handshakeInfo = null;\r\n this.loadingHandshake = true;\r\n\r\n let max = this.config.secret.length\r\n let min = Math.floor(max / 4) * 3\r\n this.secret_length = Math.floor(Math.random() * (max - min + 1)) + min\r\n\r\n const secret = await this.getSecret()\r\n const res = await this.fetch('/', {\r\n method: 'POST',\r\n body: {\r\n hash: secret.hash,\r\n clientTime: new Date().toISOString(),\r\n secret: secret.secret,\r\n }\r\n })\r\n this.handshakeInfo = res.data\r\n this.loadingHandshake = false;\r\n await this.hooksCall('afterHandshake', this.handshakeInfo);\r\n }\r\n\r\n protected async fetch(path: string, init?: HttpRequestInit): Promise<SecurequClientResponse> {\r\n const isDev = path !== '/' && this.handshakeInfo?.dev\r\n const secret = await this.getSecret()\r\n const url = await this.url(path)\r\n let sparams = Object.fromEntries(url.searchParams.entries())\r\n const _init = { ...init }\r\n let params: any = {\r\n ...sparams,\r\n }\r\n\r\n if (Object.keys(sparams).length > 0) {\r\n for (let key in sparams) {\r\n url.searchParams.delete(key)\r\n }\r\n }\r\n\r\n if (_init?.params) {\r\n for (let key in _init.params) {\r\n params[key] = _init.params[key]\r\n }\r\n delete _init.params\r\n }\r\n\r\n if (Object.keys(params).length > 0) {\r\n if (isDev) {\r\n _init.params = params\r\n } else {\r\n const key = Math.random().toString(36).substring(2, 8);\r\n const enc = await crypto.encrypt({ params, key }, secret.secret)\r\n url.href = `${url.href}?${key}=${encodeURIComponent(enc)}`\r\n }\r\n }\r\n\r\n const httpOption: any = {\r\n method: \"GET\",\r\n ...this.config?.defaultOptions,\r\n ..._init,\r\n headers: await this.getHeaders(path, _init)\r\n }\r\n\r\n if (httpOption?.body) {\r\n if (isDev) {\r\n httpOption.body = JSON.stringify(httpOption.body)\r\n } else {\r\n httpOption.body = await crypto.encryptBuffer(httpOption.body, secret.secret);\r\n }\r\n }\r\n const res = await xanFetch(url.href, httpOption)\r\n if (isDev) {\r\n const value = await res.text()\r\n const val = JSON.parse(value)\r\n return {\r\n success: res.ok,\r\n message: res.ok ? res.statusText : val,\r\n data: res.ok ? val : null,\r\n code: res.status\r\n }\r\n }\r\n const value = await res.arrayBuffer()\r\n const val = await crypto.decryptBuffer(new Uint8Array(value), secret.secret) as any\r\n\r\n return {\r\n success: res.ok,\r\n message: res.ok ? res.statusText : (val || res.statusText),\r\n data: res.ok ? val : null,\r\n code: res.status\r\n }\r\n }\r\n\r\n}\r\n\r\nexport default Base;\r\n"],"names":["crypto"],"mappings":"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"}
package/client/Base.js CHANGED
@@ -1,4 +1,4 @@
1
- import crypto from '../include/crypto.js';
1
+ import crypto from '../include/crypto/index.js';
2
2
  import xanFetch from 'xanfetch';
3
3
 
4
4
  const Clients = new Map();
package/client/index.cjs CHANGED
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
3
  var tslib = require('tslib');
4
- var File$1 = require('../include/File.cjs');
4
+ var index = require('../include/file/index.cjs');
5
5
  var Base = require('./Base.cjs');
6
- var FileScaner = require('../include/FileScaner.cjs');
6
+ var index$1 = require('../include/file-scaner/index.cjs');
7
7
 
8
8
  class SecurequClient extends Base {
9
9
  async send(path, init) {
@@ -29,7 +29,7 @@ class SecurequClient extends Base {
29
29
  var _a, e_1, _b, _c;
30
30
  var _d, _e, _f;
31
31
  await this.awaitForHandshake();
32
- const fileId = await File$1.getFileId(file);
32
+ const fileId = await index.getFileId(file);
33
33
  const controller = new AbortController();
34
34
  let _file = await this.hooksCall('beforeUpload', file, fileId) || file;
35
35
  const maxFileSize = (_d = this.handshakeInfo) === null || _d === void 0 ? void 0 : _d.maxFileSize;
@@ -43,7 +43,7 @@ class SecurequClient extends Base {
43
43
  name: _file.name,
44
44
  size: _file.size,
45
45
  type: _file.type,
46
- totalChunks: File$1.totalChunks(_file, chunkSize),
46
+ totalChunks: index.totalChunks(_file, chunkSize),
47
47
  chunkIndex: 0,
48
48
  isFinish: false
49
49
  };
@@ -54,12 +54,12 @@ class SecurequClient extends Base {
54
54
  };
55
55
  window.addEventListener("pagehide", abort);
56
56
  try {
57
- for (var _g = true, _h = tslib.__asyncValues(File$1.chunkFile(_file, chunkSize)), _j; _j = await _h.next(), _a = _j.done, !_a;) {
57
+ for (var _g = true, _h = tslib.__asyncValues(index.chunkFile(_file, chunkSize)), _j; _j = await _h.next(), _a = _j.done, !_a;) {
58
58
  _c = _j.value;
59
59
  _g = false;
60
60
  try {
61
61
  let { chunk, chunkIndex } = _c;
62
- if (chunkIndex === 0 && ((_f = this.handshakeInfo) === null || _f === void 0 ? void 0 : _f.checkFileType) && !FileScaner(chunk)) {
62
+ if (chunkIndex === 0 && ((_f = this.handshakeInfo) === null || _f === void 0 ? void 0 : _f.checkFileType) && !index$1(chunk)) {
63
63
  await abort();
64
64
  return {
65
65
  success: false,
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","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\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":["getFileId","totalChunks","__asyncValues","chunkFile","fileScaner"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","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":["getFileId","totalChunks","__asyncValues","chunkFile","fileScaner"],"mappings":"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"}
package/client/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { __asyncValues } from 'tslib';
2
- import { getFileId, totalChunks, chunkFile } from '../include/File.js';
2
+ import { getFileId, totalChunks, chunkFile } from '../include/file/index.js';
3
3
  import Base from './Base.js';
4
- import fileScaner from '../include/FileScaner.js';
4
+ import fileScaner from '../include/file-scaner/index.js';
5
5
 
6
6
  class SecurequClient extends Base {
7
7
  async send(path, init) {
@@ -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/FileScaner';\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 { 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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"}
@@ -3,18 +3,18 @@
3
3
  var sodium = require('libsodium-wrappers');
4
4
  var fflate = require('fflate');
5
5
  var msgpackr = require('msgpackr');
6
- var crypto = require('./crypto.cjs');
6
+ var index = require('../crypto/index.cjs');
7
7
 
8
8
  /* ================================
9
9
  Buffer-level
10
10
  ================================ */
11
11
  async function compressBuffer(input) {
12
- await crypto.init();
12
+ await index.init();
13
13
  const encoded = msgpackr.pack(input);
14
14
  return fflate.compressSync(encoded);
15
15
  }
16
16
  async function decompressBuffer(input) {
17
- await crypto.init();
17
+ await index.init();
18
18
  const decompressed = fflate.decompressSync(input);
19
19
  return msgpackr.unpack(decompressed);
20
20
  }
@@ -22,24 +22,21 @@ async function decompressBuffer(input) {
22
22
  String-level
23
23
  ================================ */
24
24
  async function compress(input) {
25
- await crypto.init();
25
+ await index.init();
26
26
  const compressed = await compressBuffer(input);
27
27
  return sodium.to_base64(compressed, sodium.base64_variants.ORIGINAL);
28
28
  }
29
29
  async function decompress(base64Str) {
30
- await crypto.init();
30
+ await index.init();
31
31
  const compressed = sodium.from_base64(base64Str, sodium.base64_variants.ORIGINAL);
32
32
  return decompressBuffer(compressed);
33
33
  }
34
- /* ================================
35
- Export
36
- ================================ */
37
34
  const compresor = {
38
- compress,
39
- decompress,
40
35
  compressBuffer,
41
- decompressBuffer
36
+ decompressBuffer,
37
+ compress,
38
+ decompress
42
39
  };
43
40
 
44
41
  module.exports = compresor;
45
- //# sourceMappingURL=compress.cjs.map
42
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/include/compress/index.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":["crypto","pack","compressSync","decompressSync","unpack"],"mappings":";;;;;;;AAKA;;AAEmC;AACnC,eAAe,cAAc,CAAC,KAAU,EAAA;AACrC,IAAA,MAAMA,KAAM,CAAC,IAAI,EAAE,CAAC;AACpB,IAAA,MAAM,OAAO,GAAGC,aAAI,CAAC,KAAK,CAAC,CAAC;AAC5B,IAAA,OAAOC,mBAAY,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,eAAe,gBAAgB,CAAC,KAAiB,EAAA;AAC9C,IAAA,MAAMF,KAAM,CAAC,IAAI,EAAE,CAAC;AACpB,IAAA,MAAM,YAAY,GAAGG,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,MAAMJ,KAAM,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,MAAMA,KAAM,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;;;;;"}
@@ -3,10 +3,10 @@ declare function decompressBuffer(input: Uint8Array): Promise<any>;
3
3
  declare function compress(input: any): Promise<string>;
4
4
  declare function decompress(base64Str: string): Promise<any>;
5
5
  declare const compresor: {
6
- compress: typeof compress;
7
- decompress: typeof decompress;
8
6
  compressBuffer: typeof compressBuffer;
9
7
  decompressBuffer: typeof decompressBuffer;
8
+ compress: typeof compress;
9
+ decompress: typeof decompress;
10
10
  };
11
11
 
12
12
  export { compresor as default };
@@ -1,7 +1,7 @@
1
1
  import sodium from 'libsodium-wrappers';
2
2
  import { compressSync, decompressSync } from 'fflate';
3
3
  import { pack, unpack } from 'msgpackr';
4
- import crypto from './crypto.js';
4
+ import crypto from '../crypto/index.js';
5
5
 
6
6
  /* ================================
7
7
  Buffer-level
@@ -29,15 +29,12 @@ async function decompress(base64Str) {
29
29
  const compressed = sodium.from_base64(base64Str, sodium.base64_variants.ORIGINAL);
30
30
  return decompressBuffer(compressed);
31
31
  }
32
- /* ================================
33
- Export
34
- ================================ */
35
32
  const compresor = {
36
- compress,
37
- decompress,
38
33
  compressBuffer,
39
- decompressBuffer
34
+ decompressBuffer,
35
+ compress,
36
+ decompress
40
37
  };
41
38
 
42
39
  export { compresor as default };
43
- //# sourceMappingURL=compress.js.map
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/include/compress/index.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":[],"mappings":";;;;;AAKA;;AAEmC;AACnC,eAAe,cAAc,CAAC,KAAU,EAAA;AACrC,IAAA,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;AACpB,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5B,IAAA,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,eAAe,gBAAgB,CAAC,KAAiB,EAAA;AAC9C,IAAA,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;AACpB,IAAA,MAAM,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAC3C,IAAA,OAAO,MAAM,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,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
3
  var sodium = require('libsodium-wrappers');
4
- var compress = require('./compress.cjs');
4
+ var index = require('../compress/index.cjs');
5
5
 
6
6
  /* ================================
7
7
  Sodium Init (SAFE & IDP)
8
8
  ================================ */
9
9
  let initPromise = null;
10
- function init() {
10
+ async function init() {
11
11
  if (!initPromise) {
12
12
  initPromise = sodium.ready.then(() => void 0);
13
13
  }
@@ -42,7 +42,7 @@ async function encryptBuffer(input, secret) {
42
42
  await init();
43
43
  const key = deriveKey(secret);
44
44
  const nonce = sodium.randombytes_buf(sodium.crypto_secretbox_NONCEBYTES);
45
- const compressed = await compress.compressBuffer(input);
45
+ const compressed = await index.compressBuffer(input);
46
46
  const cipher = sodium.crypto_secretbox_easy(compressed, nonce, key);
47
47
  const out = new Uint8Array(nonce.length + cipher.length);
48
48
  out.set(nonce);
@@ -63,7 +63,7 @@ async function decryptBuffer(box, secret) {
63
63
  const opened = sodium.crypto_secretbox_open_easy(cipher, nonce, key);
64
64
  if (!opened)
65
65
  return null;
66
- return compress.decompressBuffer(opened);
66
+ return index.decompressBuffer(opened);
67
67
  }
68
68
  /* ================================
69
69
  Hash (URL-safe, short)
@@ -126,10 +126,7 @@ async function verifyToken(token, secret) {
126
126
  }
127
127
  return { valid: true, payload };
128
128
  }
129
- /* ================================
130
- Default Export
131
- ================================ */
132
- var crypto = {
129
+ const crypto = {
133
130
  init,
134
131
  encrypt,
135
132
  decrypt,
@@ -137,8 +134,8 @@ var crypto = {
137
134
  decryptBuffer,
138
135
  hash,
139
136
  createToken,
140
- verifyToken
137
+ verifyToken,
141
138
  };
142
139
 
143
140
  module.exports = crypto;
144
- //# sourceMappingURL=crypto.cjs.map
141
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/include/crypto/index.ts"],"sourcesContent":["import sodium from \"libsodium-wrappers\";\r\nimport compresor from \"../compress\";\r\n\r\n/* ================================\r\n Types\r\n================================ */\r\nexport type EncryptInput = string | object | any[];\r\n\r\n/* ================================\r\n Sodium Init (SAFE & IDP)\r\n================================ */\r\nlet initPromise: Promise<void> | null = null;\r\n\r\nasync function init(): Promise<void> {\r\n if (!initPromise) {\r\n initPromise = sodium.ready.then(() => void 0);\r\n }\r\n return initPromise;\r\n}\r\n\r\n/* ================================\r\n Key Derivation\r\n (Stable & deterministic)\r\n================================ */\r\nfunction deriveKey(secret: string): Uint8Array {\r\n return sodium.crypto_generichash(\r\n sodium.crypto_secretbox_KEYBYTES,\r\n sodium.from_string(secret),\r\n null\r\n ) as Uint8Array\r\n}\r\n\r\n/* ================================\r\n Encrypt (string)\r\n================================ */\r\nasync function encrypt(\r\n input: EncryptInput,\r\n secret: string\r\n): Promise<string> {\r\n const buf = await encryptBuffer(input, secret);\r\n return sodium.to_base64(\r\n buf,\r\n sodium.base64_variants.URLSAFE_NO_PADDING\r\n );\r\n}\r\n\r\n/* ================================\r\n Decrypt (string)\r\n================================ */\r\nasync function decrypt(\r\n base64: string,\r\n secret: string\r\n): Promise<any | null> {\r\n await init();\r\n\r\n const box = sodium.from_base64(\r\n base64,\r\n sodium.base64_variants.URLSAFE_NO_PADDING\r\n );\r\n\r\n return decryptBuffer(box, secret);\r\n}\r\n\r\n/* ================================\r\n Encrypt (buffer)\r\n================================ */\r\nasync function encryptBuffer(\r\n input: EncryptInput,\r\n secret: string\r\n): Promise<Uint8Array> {\r\n await init();\r\n\r\n const key = deriveKey(secret);\r\n const nonce = sodium.randombytes_buf(\r\n sodium.crypto_secretbox_NONCEBYTES\r\n ) as Uint8Array\r\n\r\n\r\n const compressed = await compresor.compressBuffer(input);\r\n\r\n const cipher = sodium.crypto_secretbox_easy(\r\n compressed,\r\n nonce,\r\n key\r\n ) as Uint8Array\r\n\r\n const out = new Uint8Array(nonce.length + cipher.length);\r\n out.set(nonce);\r\n out.set(cipher, nonce.length);\r\n\r\n return out;\r\n}\r\n\r\n/* ================================\r\n Decrypt (buffer)\r\n================================ */\r\nasync function decryptBuffer(\r\n box: Uint8Array,\r\n secret: string\r\n): Promise<any | null> {\r\n await init();\r\n\r\n const key = deriveKey(secret);\r\n const nonceSize = sodium.crypto_secretbox_NONCEBYTES;\r\n\r\n if (box.length <= nonceSize) return null;\r\n\r\n const nonce = box.subarray(0, nonceSize);\r\n const cipher = box.subarray(nonceSize);\r\n\r\n const opened = sodium.crypto_secretbox_open_easy(\r\n cipher,\r\n nonce,\r\n key\r\n ) as Uint8Array\r\n\r\n if (!opened) return null;\r\n\r\n return compresor.decompressBuffer(opened);\r\n}\r\n\r\n/* ================================\r\n Hash (URL-safe, short)\r\n================================ */\r\nasync function hash(str: string): Promise<string> {\r\n await init();\r\n\r\n const digest = sodium.crypto_generichash(\r\n 32,\r\n sodium.from_string(str),\r\n null\r\n );\r\n\r\n return sodium\r\n .to_base64(digest, sodium.base64_variants.URLSAFE_NO_PADDING)\r\n .replace(/[^a-zA-Z0-9]/g, \"\");\r\n}\r\n\r\n/* ================================\r\n Canonical JSON\r\n================================ */\r\nfunction canonicalJSON(value: any): string {\r\n if (value === null || typeof value !== \"object\") {\r\n return JSON.stringify(value);\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return JSON.stringify(value.map(canonicalJSON));\r\n }\r\n\r\n const keys = Object.keys(value).sort();\r\n const obj: any = {};\r\n\r\n for (const k of keys) {\r\n obj[k] = value[k];\r\n }\r\n\r\n return JSON.stringify(obj);\r\n}\r\n\r\n/* ================================\r\n Create Token\r\n================================ */\r\nasync function createToken(\r\n payload: Record<string, any>,\r\n secret: string\r\n): Promise<string> {\r\n await init();\r\n\r\n const key = deriveKey(secret);\r\n const json = canonicalJSON(payload);\r\n\r\n const encryptedPayload = await encrypt(payload, secret);\r\n\r\n const mac = sodium.crypto_generichash(\r\n 32,\r\n sodium.from_string(json),\r\n key\r\n );\r\n\r\n const macBase64 = sodium.to_base64(\r\n mac,\r\n sodium.base64_variants.URLSAFE_NO_PADDING\r\n );\r\n\r\n return `${encryptedPayload}.${macBase64}`;\r\n}\r\n\r\n/* ================================\r\n Verify Token\r\n================================ */\r\nasync function verifyToken(\r\n token: string,\r\n secret: string\r\n): Promise<{ valid: boolean; payload?: any }> {\r\n await init();\r\n\r\n const parts = token.split(\".\");\r\n if (parts.length !== 2) return { valid: false };\r\n\r\n const [payloadBase64, macBase64] = parts;\r\n\r\n const payload = await decrypt(payloadBase64, secret);\r\n if (payload === null) return { valid: false };\r\n\r\n const json = canonicalJSON(payload);\r\n const key = deriveKey(secret);\r\n\r\n const expectedMac = sodium.crypto_generichash(\r\n 32,\r\n sodium.from_string(json),\r\n key\r\n ) as Uint8Array\r\n\r\n const mac = sodium.from_base64(\r\n macBase64,\r\n sodium.base64_variants.URLSAFE_NO_PADDING\r\n );\r\n\r\n if (\r\n mac.length !== expectedMac.length ||\r\n !sodium.memcmp(expectedMac, mac)\r\n ) {\r\n return { valid: false };\r\n }\r\n\r\n return { valid: true, payload };\r\n}\r\n\r\n\r\n\r\nconst crypto = {\r\n init,\r\n encrypt,\r\n decrypt,\r\n encryptBuffer,\r\n decryptBuffer,\r\n hash,\r\n createToken,\r\n verifyToken,\r\n}\r\n\r\nexport default crypto"],"names":["compresor"],"mappings":"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"}
@@ -10,7 +10,7 @@ declare function verifyToken(token: string, secret: string): Promise<{
10
10
  valid: boolean;
11
11
  payload?: any;
12
12
  }>;
13
- declare const _default: {
13
+ declare const crypto: {
14
14
  init: typeof init;
15
15
  encrypt: typeof encrypt;
16
16
  decrypt: typeof decrypt;
@@ -21,5 +21,5 @@ declare const _default: {
21
21
  verifyToken: typeof verifyToken;
22
22
  };
23
23
 
24
- export { _default as default };
24
+ export { crypto as default };
25
25
  export type { EncryptInput };
@@ -1,11 +1,11 @@
1
1
  import sodium from 'libsodium-wrappers';
2
- import compresor from './compress.js';
2
+ import compresor from '../compress/index.js';
3
3
 
4
4
  /* ================================
5
5
  Sodium Init (SAFE & IDP)
6
6
  ================================ */
7
7
  let initPromise = null;
8
- function init() {
8
+ async function init() {
9
9
  if (!initPromise) {
10
10
  initPromise = sodium.ready.then(() => void 0);
11
11
  }
@@ -124,10 +124,7 @@ async function verifyToken(token, secret) {
124
124
  }
125
125
  return { valid: true, payload };
126
126
  }
127
- /* ================================
128
- Default Export
129
- ================================ */
130
- var crypto = {
127
+ const crypto = {
131
128
  init,
132
129
  encrypt,
133
130
  decrypt,
@@ -135,8 +132,8 @@ var crypto = {
135
132
  decryptBuffer,
136
133
  hash,
137
134
  createToken,
138
- verifyToken
135
+ verifyToken,
139
136
  };
140
137
 
141
138
  export { crypto as default };
142
- //# sourceMappingURL=crypto.js.map
139
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/include/crypto/index.ts"],"sourcesContent":["import sodium from \"libsodium-wrappers\";\r\nimport compresor from \"../compress\";\r\n\r\n/* ================================\r\n Types\r\n================================ */\r\nexport type EncryptInput = string | object | any[];\r\n\r\n/* ================================\r\n Sodium Init (SAFE & IDP)\r\n================================ */\r\nlet initPromise: Promise<void> | null = null;\r\n\r\nasync function init(): Promise<void> {\r\n if (!initPromise) {\r\n initPromise = sodium.ready.then(() => void 0);\r\n }\r\n return initPromise;\r\n}\r\n\r\n/* ================================\r\n Key Derivation\r\n (Stable & deterministic)\r\n================================ */\r\nfunction deriveKey(secret: string): Uint8Array {\r\n return sodium.crypto_generichash(\r\n sodium.crypto_secretbox_KEYBYTES,\r\n sodium.from_string(secret),\r\n null\r\n ) as Uint8Array\r\n}\r\n\r\n/* ================================\r\n Encrypt (string)\r\n================================ */\r\nasync function encrypt(\r\n input: EncryptInput,\r\n secret: string\r\n): Promise<string> {\r\n const buf = await encryptBuffer(input, secret);\r\n return sodium.to_base64(\r\n buf,\r\n sodium.base64_variants.URLSAFE_NO_PADDING\r\n );\r\n}\r\n\r\n/* ================================\r\n Decrypt (string)\r\n================================ */\r\nasync function decrypt(\r\n base64: string,\r\n secret: string\r\n): Promise<any | null> {\r\n await init();\r\n\r\n const box = sodium.from_base64(\r\n base64,\r\n sodium.base64_variants.URLSAFE_NO_PADDING\r\n );\r\n\r\n return decryptBuffer(box, secret);\r\n}\r\n\r\n/* ================================\r\n Encrypt (buffer)\r\n================================ */\r\nasync function encryptBuffer(\r\n input: EncryptInput,\r\n secret: string\r\n): Promise<Uint8Array> {\r\n await init();\r\n\r\n const key = deriveKey(secret);\r\n const nonce = sodium.randombytes_buf(\r\n sodium.crypto_secretbox_NONCEBYTES\r\n ) as Uint8Array\r\n\r\n\r\n const compressed = await compresor.compressBuffer(input);\r\n\r\n const cipher = sodium.crypto_secretbox_easy(\r\n compressed,\r\n nonce,\r\n key\r\n ) as Uint8Array\r\n\r\n const out = new Uint8Array(nonce.length + cipher.length);\r\n out.set(nonce);\r\n out.set(cipher, nonce.length);\r\n\r\n return out;\r\n}\r\n\r\n/* ================================\r\n Decrypt (buffer)\r\n================================ */\r\nasync function decryptBuffer(\r\n box: Uint8Array,\r\n secret: string\r\n): Promise<any | null> {\r\n await init();\r\n\r\n const key = deriveKey(secret);\r\n const nonceSize = sodium.crypto_secretbox_NONCEBYTES;\r\n\r\n if (box.length <= nonceSize) return null;\r\n\r\n const nonce = box.subarray(0, nonceSize);\r\n const cipher = box.subarray(nonceSize);\r\n\r\n const opened = sodium.crypto_secretbox_open_easy(\r\n cipher,\r\n nonce,\r\n key\r\n ) as Uint8Array\r\n\r\n if (!opened) return null;\r\n\r\n return compresor.decompressBuffer(opened);\r\n}\r\n\r\n/* ================================\r\n Hash (URL-safe, short)\r\n================================ */\r\nasync function hash(str: string): Promise<string> {\r\n await init();\r\n\r\n const digest = sodium.crypto_generichash(\r\n 32,\r\n sodium.from_string(str),\r\n null\r\n );\r\n\r\n return sodium\r\n .to_base64(digest, sodium.base64_variants.URLSAFE_NO_PADDING)\r\n .replace(/[^a-zA-Z0-9]/g, \"\");\r\n}\r\n\r\n/* ================================\r\n Canonical JSON\r\n================================ */\r\nfunction canonicalJSON(value: any): string {\r\n if (value === null || typeof value !== \"object\") {\r\n return JSON.stringify(value);\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return JSON.stringify(value.map(canonicalJSON));\r\n }\r\n\r\n const keys = Object.keys(value).sort();\r\n const obj: any = {};\r\n\r\n for (const k of keys) {\r\n obj[k] = value[k];\r\n }\r\n\r\n return JSON.stringify(obj);\r\n}\r\n\r\n/* ================================\r\n Create Token\r\n================================ */\r\nasync function createToken(\r\n payload: Record<string, any>,\r\n secret: string\r\n): Promise<string> {\r\n await init();\r\n\r\n const key = deriveKey(secret);\r\n const json = canonicalJSON(payload);\r\n\r\n const encryptedPayload = await encrypt(payload, secret);\r\n\r\n const mac = sodium.crypto_generichash(\r\n 32,\r\n sodium.from_string(json),\r\n key\r\n );\r\n\r\n const macBase64 = sodium.to_base64(\r\n mac,\r\n sodium.base64_variants.URLSAFE_NO_PADDING\r\n );\r\n\r\n return `${encryptedPayload}.${macBase64}`;\r\n}\r\n\r\n/* ================================\r\n Verify Token\r\n================================ */\r\nasync function verifyToken(\r\n token: string,\r\n secret: string\r\n): Promise<{ valid: boolean; payload?: any }> {\r\n await init();\r\n\r\n const parts = token.split(\".\");\r\n if (parts.length !== 2) return { valid: false };\r\n\r\n const [payloadBase64, macBase64] = parts;\r\n\r\n const payload = await decrypt(payloadBase64, secret);\r\n if (payload === null) return { valid: false };\r\n\r\n const json = canonicalJSON(payload);\r\n const key = deriveKey(secret);\r\n\r\n const expectedMac = sodium.crypto_generichash(\r\n 32,\r\n sodium.from_string(json),\r\n key\r\n ) as Uint8Array\r\n\r\n const mac = sodium.from_base64(\r\n macBase64,\r\n sodium.base64_variants.URLSAFE_NO_PADDING\r\n );\r\n\r\n if (\r\n mac.length !== expectedMac.length ||\r\n !sodium.memcmp(expectedMac, mac)\r\n ) {\r\n return { valid: false };\r\n }\r\n\r\n return { valid: true, payload };\r\n}\r\n\r\n\r\n\r\nconst crypto = {\r\n init,\r\n encrypt,\r\n decrypt,\r\n encryptBuffer,\r\n decryptBuffer,\r\n hash,\r\n createToken,\r\n verifyToken,\r\n}\r\n\r\nexport default crypto"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var tslib = require('tslib');
4
- var crypto = require('./crypto.cjs');
4
+ var index = require('../crypto/index.cjs');
5
5
 
6
6
  function getChunkSize(fileSize) {
7
7
  // fileSize in bytes
@@ -60,7 +60,7 @@ async function getFileId(file) {
60
60
  }
61
61
  const meta = `${file.name}||${file.size}||${file.lastModified}||${data.join("||")}`;
62
62
  const ext = file.name.split('.').pop() || '';
63
- const id = await crypto.hash(meta);
63
+ const id = await index.hash(meta);
64
64
  return `${id}.${ext}`;
65
65
  }
66
66
 
@@ -68,4 +68,4 @@ exports.chunkFile = chunkFile;
68
68
  exports.getChunkSize = getChunkSize;
69
69
  exports.getFileId = getFileId;
70
70
  exports.totalChunks = totalChunks;
71
- //# sourceMappingURL=File.cjs.map
71
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/include/file/index.ts"],"sourcesContent":["import crypto from \"../crypto\";\r\n\r\nexport function getChunkSize(fileSize: number): number {\r\n // fileSize in bytes\r\n const MB = 1024 * 1024;\r\n\r\n if (fileSize <= 1 * MB) {\r\n // Very small files (<1MB): single small chunk\r\n return 64 * 1024; // 64 KB\r\n } else if (fileSize <= 10 * MB) {\r\n // Small files (1–10MB): medium chunks\r\n return 256 * 1024; // 256 KB\r\n } else if (fileSize <= 100 * MB) {\r\n // Medium files (10–100MB): faster upload, moderate size\r\n return 512 * 1024; // 512 KB\r\n } else if (fileSize <= 500 * MB) {\r\n // Large files (100–500MB): larger chunks to reduce overhead\r\n return 1 * MB; // 1 MB\r\n } else if (fileSize <= 2 * 1024 * MB) {\r\n // Very large files (500MB–2GB): fewer but larger parts\r\n return 2 * MB; // 2 MB\r\n } else {\r\n // Extremely large files (>2GB)\r\n return 4 * MB; // 4 MB max chunk size\r\n }\r\n}\r\n\r\nexport const totalChunks = (file: File, chunkSize?: number) => Math.ceil(file.size / (chunkSize || getChunkSize(file.size)));\r\n\r\nexport async function* chunkFile(file: File, chunkSize?: number) {\r\n const fileSize = file.size;\r\n chunkSize = chunkSize || getChunkSize(fileSize);\r\n let offset = 0;\r\n\r\n while (offset < fileSize) {\r\n const chunk = file.slice(offset, offset + chunkSize);\r\n const buffer = new Uint8Array(await chunk.arrayBuffer());\r\n yield { chunk: buffer, chunkIndex: Math.floor(offset / chunkSize) };\r\n offset += chunkSize;\r\n }\r\n}\r\n\r\n\r\nexport async function getFileId(file: File): Promise<string> {\r\n let data: any[] = [];\r\n if (typeof window !== 'undefined') {\r\n data = [\r\n navigator.userAgent,\r\n navigator.language,\r\n screen.width,\r\n screen.height,\r\n screen.colorDepth,\r\n new Date().getTimezoneOffset(),\r\n Intl.DateTimeFormat().resolvedOptions().timeZone || \"\"\r\n ]\r\n }\r\n\r\n const meta = `${file.name}||${file.size}||${file.lastModified}||${data.join(\"||\")}`\r\n const ext = file.name.split('.').pop() || ''\r\n const id = await crypto.hash(meta);\r\n return `${id}.${ext}`;\r\n}"],"names":["__await","crypto"],"mappings":"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"}