securequ 1.1.13 → 1.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/index.cjs.map +1 -1
- package/client/index.d.ts +2 -1
- package/client/index.js.map +1 -1
- package/index.d.ts +0 -2
- package/package.json +17 -7
- package/server/index.cjs.map +1 -1
- package/server/index.d.ts +2 -1
- package/server/index.js.map +1 -1
- package/server/types.d.ts +1 -11
package/client/index.cjs.map
CHANGED
|
@@ -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\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/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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"}
|
package/client/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { HttpRequestInit, SecurequClientResponse } from './types.js';
|
|
2
|
+
export { HTTPMethods, HandshakeInfo, SecurequClientConfig } from './types.js';
|
|
2
3
|
import Base from './Base.js';
|
|
3
4
|
|
|
4
5
|
declare class SecurequClient extends Base {
|
|
@@ -11,4 +12,4 @@ declare class SecurequClient extends Base {
|
|
|
11
12
|
delete(path: string, init?: Omit<HttpRequestInit, 'method'>): Promise<SecurequClientResponse>;
|
|
12
13
|
}
|
|
13
14
|
|
|
14
|
-
export { SecurequClient as default };
|
|
15
|
+
export { HttpRequestInit, SecurequClientResponse, SecurequClient as default };
|
package/client/index.js.map
CHANGED
|
@@ -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\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/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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"}
|
package/index.d.ts
CHANGED
|
@@ -2,5 +2,3 @@ export { default as SecurequServer } from './server/index.js';
|
|
|
2
2
|
export { default as SecurequClient } from './client/index.js';
|
|
3
3
|
export { default as crypto } from './include/crypto.js';
|
|
4
4
|
export { default as compresor } from './include/compress.js';
|
|
5
|
-
export { HandlerFunction, HandlerInfo, ListenerInfo, Metadata, RouteFactory, SecurequServerConfig, ServerClient, ServerClientInfo, ServerClientOrigin, ServerClientSecret, ServerResponse, UploadFileMeta, UploadFilePath } from './server/types.js';
|
|
6
|
-
export { HTTPMethods, HandshakeInfo, HttpRequestInit, SecurequClientConfig, SecurequClientResponse } from './client/types.js';
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "securequ",
|
|
3
|
-
"version": "1.1.
|
|
4
|
-
"description": "",
|
|
3
|
+
"version": "1.1.14",
|
|
4
|
+
"description": "High‑level encrypted & compressed HTTP request + chunked upload toolkit for browser ↔ server applications.",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"sideEffects": false,
|
|
7
7
|
"dependencies": {
|
|
@@ -12,11 +12,6 @@
|
|
|
12
12
|
"xanfetch": "^1.0.8"
|
|
13
13
|
},
|
|
14
14
|
"exports": {
|
|
15
|
-
".": {
|
|
16
|
-
"import": "./index.js",
|
|
17
|
-
"require": "./index.cjs",
|
|
18
|
-
"types": "./index.d.ts"
|
|
19
|
-
},
|
|
20
15
|
"./server": {
|
|
21
16
|
"import": "./server/index.js",
|
|
22
17
|
"require": "./server/index.cjs",
|
|
@@ -26,6 +21,21 @@
|
|
|
26
21
|
"import": "./client/index.js",
|
|
27
22
|
"require": "./client/index.cjs",
|
|
28
23
|
"types": "./client/index.d.ts"
|
|
24
|
+
},
|
|
25
|
+
"./crypto": {
|
|
26
|
+
"import": "./include/crypto/index.js",
|
|
27
|
+
"require": "./include/crypto/index.cjs",
|
|
28
|
+
"types": "./include/crypto/index.d.ts"
|
|
29
|
+
},
|
|
30
|
+
"./compress": {
|
|
31
|
+
"import": "./include/compress/index.js",
|
|
32
|
+
"require": "./include/compress/index.cjs",
|
|
33
|
+
"types": "./include/compress/index.d.ts"
|
|
34
|
+
},
|
|
35
|
+
"./FileScaner": {
|
|
36
|
+
"import": "./include/FileScaner/index.js",
|
|
37
|
+
"require": "./include/FileScaner/index.cjs",
|
|
38
|
+
"types": "./include/FileScaner/index.d.ts"
|
|
29
39
|
}
|
|
30
40
|
}
|
|
31
41
|
}
|
package/server/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/server/index.ts"],"sourcesContent":["import crypto from \"../include/crypto\";\r\nimport { Metadata, ListenerInfo, ServerResponse, UploadFileMeta } from \"./types\";\r\nimport SecurequServerBase from \"./Base\";\r\nimport fileScaner from \"../include/FileScaner\";\r\nimport { HTTPMethods } from \"../client/types\";\r\nimport { chunkFile, getFileId, totalChunks } from \"../include/File\";\r\n\r\nclass SecurequServer extends SecurequServerBase {\r\n\r\n async handshake(body: any, clientInfo: any) {\r\n const data: any = await crypto.decryptBuffer(body, clientInfo.secret)\r\n const serverSecret = await this.getSecret()\r\n if (!data) throw new Error(\"Invalid handshake data\");\r\n if (data.hash !== clientInfo.hash) {\r\n throw new Error(\"Invalid handshake\");\r\n } else if (data.secret !== clientInfo.secret) {\r\n throw new Error(\"Invalid handshake secret\");\r\n } else if (Date.now() - data.clientTime > 30000) { // 30 seconds\r\n throw new Error(\"Handshake expired\");\r\n }\r\n\r\n const serverTime = new Date();\r\n const clientDate = new Date(data.clientTime);\r\n const offsetMs = clientDate.getTime() - serverTime.getTime();\r\n\r\n let info = {\r\n dev: this.config.mode === 'development',\r\n timeDiffarenc: offsetMs,\r\n maxFileSize: this.config.file?.maxFilesize || null,\r\n checkFileType: this.config.file?.checkFileType || false,\r\n signeture: await crypto.encrypt({\r\n expire: Date.now() + 30000, // 30 seconds\r\n hash: clientInfo.hash\r\n }, serverSecret)\r\n }\r\n throw info\r\n }\r\n\r\n async uploadFile(file: File, onProgress?: (p: number) => void): Promise<UploadFileMeta> {\r\n if (!this.config.file?.upload) throw new Response(\"Upload not supported\", { status: 403 });\r\n\r\n const fileId = await getFileId(file);\r\n const chunkSize = this.config.file.chunkSize\r\n const filemeta: UploadFileMeta = {\r\n fileId: fileId,\r\n name: file.name,\r\n size: file.size,\r\n type: file.type,\r\n totalChunks: totalChunks(file, chunkSize),\r\n chunkIndex: 0,\r\n isFinish: false\r\n }\r\n\r\n for await (let { chunk, chunkIndex } of chunkFile(file, chunkSize)) {\r\n if (this.config.file.checkFileType && chunkIndex === 0) {\r\n let fileType = fileScaner(chunk);\r\n if (!fileType) throw new Error(\"Unknown or unsupported file type\");\r\n }\r\n filemeta.chunkIndex = chunkIndex;\r\n filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;\r\n await this.config.file.upload(chunk, filemeta);\r\n if (onProgress) {\r\n const progress = Math.floor(((chunkIndex + 1) / filemeta.totalChunks) * 100)\r\n onProgress(progress);\r\n }\r\n }\r\n return filemeta\r\n }\r\n\r\n async deleteFile(fileId: string): Promise<void> {\r\n if (!this.config.file?.delete) throw new Response(\"Delete not supported\", { status: 403 })\r\n await this.config.file.delete(fileId);\r\n }\r\n\r\n async listen(url: string, { body, headers, metadata }: ListenerInfo): Promise<ServerResponse> {\r\n\r\n const signeture = headers['x-signeture'] || '';\r\n const origin = headers['x-origin'] || '';\r\n const method: HTTPMethods = headers['x-method'] || 'POST' as any\r\n let clientInfo = await this.clientInfo(url, origin)\r\n\r\n\r\n if (!clientInfo) {\r\n return {\r\n status: 403,\r\n value: \"Client not allowed\"\r\n }\r\n }\r\n let path = clientInfo.path\r\n const isDev = path !== '/' && this.config.mode === 'development'\r\n try {\r\n if (path === '/' && method === \"POST\") {\r\n await this.handshake(body, clientInfo)\r\n }\r\n\r\n if (path === '/' && method === 'GET') throw new Response(\"Invalid method\", { status: 405 })\r\n\r\n if (!signeture) {\r\n throw new Response(\"Signeture is required\", { status: 403 });\r\n }\r\n const decryptSigneture = await crypto.decrypt(signeture, clientInfo.secret) as any\r\n if (!decryptSigneture) throw new Response(\"Invalid Signeture\", { status: 403 });\r\n if (decryptSigneture.expire < Date.now()) throw new Response(\"Request expired\", { status: 403 });\r\n\r\n await this.isValidSigneture(decryptSigneture.signeture, clientInfo.hash)\r\n\r\n let data: any = null\r\n if (body) {\r\n if (isDev) {\r\n const decoder = new TextDecoder();\r\n const text = decoder.decode(body).trim();\r\n if (text) {\r\n try {\r\n data = JSON.parse(text)\r\n } catch (error) {\r\n\r\n }\r\n }\r\n } else {\r\n data = await crypto.decryptBuffer(body, clientInfo.secret)\r\n }\r\n }\r\n\r\n if (path === '/') {\r\n\r\n const fileConfig = this.config.file\r\n\r\n // handle file upload\r\n if (method === \"PUT\") {\r\n if (!fileConfig?.upload) throw new Response(\"Upload not supported\", { status: 403 })\r\n\r\n const filemeta: UploadFileMeta = data.filemeta\r\n const chunk: Uint8Array = data.chunk\r\n\r\n if (filemeta.chunkIndex === 0 && fileConfig.checkFileType && !fileScaner(chunk)) {\r\n throw new Error(\"Unknown or unsupported file type\");\r\n }\r\n\r\n await fileConfig.upload(chunk, filemeta)\r\n throw { success: true }\r\n } else if (method === \"DELETE\") {\r\n await this.deleteFile(data.fileId)\r\n throw { success: true }\r\n } else {\r\n throw new Response(\"Invalid method\", { status: 405 });\r\n }\r\n }\r\n\r\n await this.handleRequest({\r\n method,\r\n path,\r\n body: data,\r\n searchParams: clientInfo.searchParams,\r\n params: {}\r\n }, metadata);\r\n\r\n } catch (info: any) {\r\n const isError = info instanceof Error\r\n const isResponse = info instanceof Response\r\n let value = isError ? info.message : (isResponse ? await info.text() : info);\r\n if (isDev) {\r\n return {\r\n status: isError ? 404 : (info?.status || 200),\r\n value: JSON.stringify(value)\r\n };\r\n }\r\n return {\r\n status: isError ? 404 : (info?.status || 200),\r\n value: await crypto.encryptBuffer(value, clientInfo.secret)\r\n };\r\n }\r\n\r\n if (isDev) {\r\n return {\r\n status: 404,\r\n value: \"Not found\"\r\n };\r\n }\r\n\r\n return {\r\n status: 404,\r\n value: await crypto.encryptBuffer(\"Not found\", clientInfo.secret)\r\n };\r\n }\r\n\r\n}\r\n\r\nexport default SecurequServer;"],"names":["SecurequServerBase","getFileId","totalChunks","__asyncValues","chunkFile","fileScaner"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/server/index.ts"],"sourcesContent":["import crypto from \"../include/crypto\";\r\nimport { ListenerInfo, ServerResponse, UploadFileMeta } from \"./types\";\r\nimport SecurequServerBase from \"./Base\";\r\nimport fileScaner from \"../include/FileScaner\";\r\nimport { HTTPMethods } from \"../client/types\";\r\nimport { chunkFile, getFileId, totalChunks } from \"../include/File\";\r\nexport * from './types'\r\n\r\nclass SecurequServer extends SecurequServerBase {\r\n\r\n async handshake(body: any, clientInfo: any) {\r\n const data: any = await crypto.decryptBuffer(body, clientInfo.secret)\r\n const serverSecret = await this.getSecret()\r\n if (!data) throw new Error(\"Invalid handshake data\");\r\n if (data.hash !== clientInfo.hash) {\r\n throw new Error(\"Invalid handshake\");\r\n } else if (data.secret !== clientInfo.secret) {\r\n throw new Error(\"Invalid handshake secret\");\r\n } else if (Date.now() - data.clientTime > 30000) { // 30 seconds\r\n throw new Error(\"Handshake expired\");\r\n }\r\n\r\n const serverTime = new Date();\r\n const clientDate = new Date(data.clientTime);\r\n const offsetMs = clientDate.getTime() - serverTime.getTime();\r\n\r\n let info = {\r\n dev: this.config.mode === 'development',\r\n timeDiffarenc: offsetMs,\r\n maxFileSize: this.config.file?.maxFilesize || null,\r\n checkFileType: this.config.file?.checkFileType || false,\r\n signeture: await crypto.encrypt({\r\n expire: Date.now() + 30000, // 30 seconds\r\n hash: clientInfo.hash\r\n }, serverSecret)\r\n }\r\n throw info\r\n }\r\n\r\n async uploadFile(file: File, onProgress?: (p: number) => void): Promise<UploadFileMeta> {\r\n if (!this.config.file?.upload) throw new Response(\"Upload not supported\", { status: 403 });\r\n\r\n const fileId = await getFileId(file);\r\n const chunkSize = this.config.file.chunkSize\r\n const filemeta: UploadFileMeta = {\r\n fileId: fileId,\r\n name: file.name,\r\n size: file.size,\r\n type: file.type,\r\n totalChunks: totalChunks(file, chunkSize),\r\n chunkIndex: 0,\r\n isFinish: false\r\n }\r\n\r\n for await (let { chunk, chunkIndex } of chunkFile(file, chunkSize)) {\r\n if (this.config.file.checkFileType && chunkIndex === 0) {\r\n let fileType = fileScaner(chunk);\r\n if (!fileType) throw new Error(\"Unknown or unsupported file type\");\r\n }\r\n filemeta.chunkIndex = chunkIndex;\r\n filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;\r\n await this.config.file.upload(chunk, filemeta);\r\n if (onProgress) {\r\n const progress = Math.floor(((chunkIndex + 1) / filemeta.totalChunks) * 100)\r\n onProgress(progress);\r\n }\r\n }\r\n return filemeta\r\n }\r\n\r\n async deleteFile(fileId: string): Promise<void> {\r\n if (!this.config.file?.delete) throw new Response(\"Delete not supported\", { status: 403 })\r\n await this.config.file.delete(fileId);\r\n }\r\n\r\n async listen(url: string, { body, headers, metadata }: ListenerInfo): Promise<ServerResponse> {\r\n\r\n const signeture = headers['x-signeture'] || '';\r\n const origin = headers['x-origin'] || '';\r\n const method: HTTPMethods = headers['x-method'] || 'POST' as any\r\n let clientInfo = await this.clientInfo(url, origin)\r\n\r\n\r\n if (!clientInfo) {\r\n return {\r\n status: 403,\r\n value: \"Client not allowed\"\r\n }\r\n }\r\n let path = clientInfo.path\r\n const isDev = path !== '/' && this.config.mode === 'development'\r\n try {\r\n if (path === '/' && method === \"POST\") {\r\n await this.handshake(body, clientInfo)\r\n }\r\n\r\n if (path === '/' && method === 'GET') throw new Response(\"Invalid method\", { status: 405 })\r\n\r\n if (!signeture) {\r\n throw new Response(\"Signeture is required\", { status: 403 });\r\n }\r\n const decryptSigneture = await crypto.decrypt(signeture, clientInfo.secret) as any\r\n if (!decryptSigneture) throw new Response(\"Invalid Signeture\", { status: 403 });\r\n if (decryptSigneture.expire < Date.now()) throw new Response(\"Request expired\", { status: 403 });\r\n\r\n await this.isValidSigneture(decryptSigneture.signeture, clientInfo.hash)\r\n\r\n let data: any = null\r\n if (body) {\r\n if (isDev) {\r\n const decoder = new TextDecoder();\r\n const text = decoder.decode(body).trim();\r\n if (text) {\r\n try {\r\n data = JSON.parse(text)\r\n } catch (error) {\r\n\r\n }\r\n }\r\n } else {\r\n data = await crypto.decryptBuffer(body, clientInfo.secret)\r\n }\r\n }\r\n\r\n if (path === '/') {\r\n\r\n const fileConfig = this.config.file\r\n\r\n // handle file upload\r\n if (method === \"PUT\") {\r\n if (!fileConfig?.upload) throw new Response(\"Upload not supported\", { status: 403 })\r\n\r\n const filemeta: UploadFileMeta = data.filemeta\r\n const chunk: Uint8Array = data.chunk\r\n\r\n if (filemeta.chunkIndex === 0 && fileConfig.checkFileType && !fileScaner(chunk)) {\r\n throw new Error(\"Unknown or unsupported file type\");\r\n }\r\n\r\n await fileConfig.upload(chunk, filemeta)\r\n throw { success: true }\r\n } else if (method === \"DELETE\") {\r\n await this.deleteFile(data.fileId)\r\n throw { success: true }\r\n } else {\r\n throw new Response(\"Invalid method\", { status: 405 });\r\n }\r\n }\r\n\r\n await this.handleRequest({\r\n method,\r\n path,\r\n body: data,\r\n searchParams: clientInfo.searchParams,\r\n params: {}\r\n }, metadata);\r\n\r\n } catch (info: any) {\r\n const isError = info instanceof Error\r\n const isResponse = info instanceof Response\r\n let value = isError ? info.message : (isResponse ? await info.text() : info);\r\n if (isDev) {\r\n return {\r\n status: isError ? 404 : (info?.status || 200),\r\n value: JSON.stringify(value)\r\n };\r\n }\r\n return {\r\n status: isError ? 404 : (info?.status || 200),\r\n value: await crypto.encryptBuffer(value, clientInfo.secret)\r\n };\r\n }\r\n\r\n if (isDev) {\r\n return {\r\n status: 404,\r\n value: \"Not found\"\r\n };\r\n }\r\n\r\n return {\r\n status: 404,\r\n value: await crypto.encryptBuffer(\"Not found\", clientInfo.secret)\r\n };\r\n }\r\n\r\n}\r\n\r\nexport default SecurequServer;"],"names":["SecurequServerBase","getFileId","totalChunks","__asyncValues","chunkFile","fileScaner"],"mappings":";;;;;;;;AAQA,MAAM,cAAe,SAAQA,IAAkB,CAAA;AAE5C,IAAA,MAAM,SAAS,CAAC,IAAS,EAAE,UAAe,EAAA;;AACvC,QAAA,MAAM,IAAI,GAAQ,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;AACrE,QAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;AAC3C,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;AACrD,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,EAAE;AAChC,YAAA,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;AACvC,QAAA,CAAA;AAAM,aAAA,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE;AAC3C,YAAA,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;AAC9C,QAAA,CAAA;AAAM,aAAA,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,GAAG,KAAK,EAAE;AAC9C,YAAA,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;AACvC,QAAA,CAAA;AAED,QAAA,MAAM,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;AAE7D,QAAA,IAAI,IAAI,GAAG;AACR,YAAA,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,aAAa;AACvC,YAAA,aAAa,EAAE,QAAQ;YACvB,WAAW,EAAE,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,WAAW,KAAI,IAAI;YAClD,aAAa,EAAE,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,aAAa,KAAI,KAAK;AACvD,YAAA,SAAS,EAAE,MAAM,MAAM,CAAC,OAAO,CAAC;AAC7B,gBAAA,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;gBAC1B,IAAI,EAAE,UAAU,CAAC,IAAI;AACvB,aAAA,EAAE,YAAY,CAAC;SAClB,CAAA;AACD,QAAA,MAAM,IAAI,CAAA;IACb,CAAC;AAED,IAAA,MAAM,UAAU,CAAC,IAAU,EAAE,UAAgC,EAAA;;;QAC1D,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,CAAA;YAAE,MAAM,IAAI,QAAQ,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AAE3F,QAAA,MAAM,MAAM,GAAG,MAAMC,cAAS,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAA;AAC5C,QAAA,MAAM,QAAQ,GAAmB;AAC9B,YAAA,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,WAAW,EAAEC,gBAAW,CAAC,IAAI,EAAE,SAAS,CAAC;AACzC,YAAA,UAAU,EAAE,CAAC;AACb,YAAA,QAAQ,EAAE,KAAK;SACjB,CAAA;;YAED,KAAwC,IAAA,EAAA,GAAA,IAAA,EAAA,EAAA,GAAAC,mBAAA,CAAAC,cAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA,EAAA,EAAA,EAAA,EAAA,GAAA,MAAA,EAAA,CAAA,IAAA,EAAA,EAAA,EAAA,GAAA,EAAA,CAAA,IAAA,EAAA,CAAA,EAAA,GAAA;gBAA1B,EAAA,GAAA,EAAA,CAAA,KAAA,CAA0B;gBAA1B,EAAA,GAAA,KAAA,CAA0B;;AAAvD,oBAAA,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,KAAA,CAAA;oBACjC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,UAAU,KAAK,CAAC,EAAE;AACrD,wBAAA,IAAI,QAAQ,GAAGC,UAAU,CAAC,KAAK,CAAC,CAAC;AACjC,wBAAA,IAAI,CAAC,QAAQ;AAAE,4BAAA,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;AACrE,oBAAA,CAAA;AACD,oBAAA,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC;oBACjC,QAAQ,CAAC,QAAQ,GAAG,UAAU,GAAG,CAAC,KAAK,QAAQ,CAAC,WAAW,CAAC;AAC5D,oBAAA,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC/C,oBAAA,IAAI,UAAU,EAAE;wBACb,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,IAAI,QAAQ,CAAC,WAAW,IAAI,GAAG,CAAC,CAAA;wBAC5E,UAAU,CAAC,QAAQ,CAAC,CAAC;AACvB,oBAAA,CAAA;;;;;AACH,YAAA,CAAA;;;;;;;;;AACD,QAAA,OAAO,QAAQ,CAAA;IAClB,CAAC;IAED,MAAM,UAAU,CAAC,MAAc,EAAA;;QAC5B,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,CAAA;YAAE,MAAM,IAAI,QAAQ,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAC1F,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,MAAM,CAAC,GAAW,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAgB,EAAA;QAEhE,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACzC,MAAM,MAAM,GAAgB,OAAO,CAAC,UAAU,CAAC,IAAI,MAAa,CAAA;QAChE,IAAI,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QAGnD,IAAI,CAAC,UAAU,EAAE;YACd,OAAO;AACJ,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,KAAK,EAAE,oBAAoB;aAC7B,CAAA;AACH,QAAA,CAAA;AACD,QAAA,IAAI,IAAI,GAAG,UAAU,CAAC,IAAI,CAAA;AAC1B,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,aAAa,CAAA;QAChE,IAAI;AACD,YAAA,IAAI,IAAI,KAAK,GAAG,IAAI,MAAM,KAAK,MAAM,EAAE;gBACpC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;AACxC,YAAA,CAAA;AAED,YAAA,IAAI,IAAI,KAAK,GAAG,IAAI,MAAM,KAAK,KAAK;gBAAE,MAAM,IAAI,QAAQ,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;YAE3F,IAAI,CAAC,SAAS,EAAE;gBACb,MAAM,IAAI,QAAQ,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AAC/D,YAAA,CAAA;AACD,YAAA,MAAM,gBAAgB,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAQ,CAAA;AAClF,YAAA,IAAI,CAAC,gBAAgB;gBAAE,MAAM,IAAI,QAAQ,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AAChF,YAAA,IAAI,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE;gBAAE,MAAM,IAAI,QAAQ,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AAEjG,YAAA,MAAM,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,CAAA;YAExE,IAAI,IAAI,GAAQ,IAAI,CAAA;AACpB,YAAA,IAAI,IAAI,EAAE;AACP,gBAAA,IAAI,KAAK,EAAE;AACR,oBAAA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;oBAClC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AACzC,oBAAA,IAAI,IAAI,EAAE;wBACP,IAAI;AACD,4BAAA,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;AACzB,wBAAA,CAAA;AAAC,wBAAA,OAAO,KAAK,EAAE;AAEf,wBAAA,CAAA;AACH,oBAAA,CAAA;AACH,gBAAA,CAAA;AAAM,qBAAA;AACJ,oBAAA,IAAI,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;AAC5D,gBAAA,CAAA;AACH,YAAA,CAAA;YAED,IAAI,IAAI,KAAK,GAAG,EAAE;AAEf,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAA;;gBAGnC,IAAI,MAAM,KAAK,KAAK,EAAE;oBACnB,IAAI,EAAC,UAAU,KAAA,IAAA,IAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAE,MAAM,CAAA;wBAAE,MAAM,IAAI,QAAQ,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;AAEpF,oBAAA,MAAM,QAAQ,GAAmB,IAAI,CAAC,QAAQ,CAAA;AAC9C,oBAAA,MAAM,KAAK,GAAe,IAAI,CAAC,KAAK,CAAA;AAEpC,oBAAA,IAAI,QAAQ,CAAC,UAAU,KAAK,CAAC,IAAI,UAAU,CAAC,aAAa,IAAI,CAACA,UAAU,CAAC,KAAK,CAAC,EAAE;AAC9E,wBAAA,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;AACtD,oBAAA,CAAA;oBAED,MAAM,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;AACxC,oBAAA,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;AACzB,gBAAA,CAAA;qBAAM,IAAI,MAAM,KAAK,QAAQ,EAAE;oBAC7B,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAClC,oBAAA,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;AACzB,gBAAA,CAAA;AAAM,qBAAA;oBACJ,MAAM,IAAI,QAAQ,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AACxD,gBAAA,CAAA;AACH,YAAA,CAAA;YAED,MAAM,IAAI,CAAC,aAAa,CAAC;gBACtB,MAAM;gBACN,IAAI;AACJ,gBAAA,IAAI,EAAE,IAAI;gBACV,YAAY,EAAE,UAAU,CAAC,YAAY;AACrC,gBAAA,MAAM,EAAE,EAAE;aACZ,EAAE,QAAQ,CAAC,CAAC;AAEf,QAAA,CAAA;AAAC,QAAA,OAAO,IAAS,EAAE;AACjB,YAAA,MAAM,OAAO,GAAG,IAAI,YAAY,KAAK,CAAA;AACrC,YAAA,MAAM,UAAU,GAAG,IAAI,YAAY,QAAQ,CAAA;YAC3C,IAAI,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;AAC7E,YAAA,IAAI,KAAK,EAAE;gBACR,OAAO;oBACJ,MAAM,EAAE,OAAO,GAAG,GAAG,IAAI,CAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,MAAA,GAAA,MAAA,GAAJ,IAAI,CAAE,MAAM,KAAI,GAAG,CAAC;AAC7C,oBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;iBAC9B,CAAC;AACJ,YAAA,CAAA;YACD,OAAO;gBACJ,MAAM,EAAE,OAAO,GAAG,GAAG,IAAI,CAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,MAAA,GAAA,MAAA,GAAJ,IAAI,CAAE,MAAM,KAAI,GAAG,CAAC;gBAC7C,KAAK,EAAE,MAAM,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC;aAC7D,CAAC;AACJ,QAAA,CAAA;AAED,QAAA,IAAI,KAAK,EAAE;YACR,OAAO;AACJ,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,KAAK,EAAE,WAAW;aACpB,CAAC;AACJ,QAAA,CAAA;QAED,OAAO;AACJ,YAAA,MAAM,EAAE,GAAG;YACX,KAAK,EAAE,MAAM,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC;SACnE,CAAC;IACL,CAAC;AAEH;;;;"}
|
package/server/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { UploadFileMeta, ListenerInfo, ServerResponse } from './types.js';
|
|
2
|
+
export { HandlerFunction, HandlerInfo, Metadata, RouteFactory, SecurequServerConfig, ServerClient, ServerClientSecret } from './types.js';
|
|
2
3
|
import SecurequServerBase from './Base.js';
|
|
3
4
|
|
|
4
5
|
declare class SecurequServer extends SecurequServerBase {
|
|
@@ -8,4 +9,4 @@ declare class SecurequServer extends SecurequServerBase {
|
|
|
8
9
|
listen(url: string, { body, headers, metadata }: ListenerInfo): Promise<ServerResponse>;
|
|
9
10
|
}
|
|
10
11
|
|
|
11
|
-
export { SecurequServer as default };
|
|
12
|
+
export { ListenerInfo, ServerResponse, UploadFileMeta, SecurequServer as default };
|
package/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/server/index.ts"],"sourcesContent":["import crypto from \"../include/crypto\";\r\nimport { Metadata, ListenerInfo, ServerResponse, UploadFileMeta } from \"./types\";\r\nimport SecurequServerBase from \"./Base\";\r\nimport fileScaner from \"../include/FileScaner\";\r\nimport { HTTPMethods } from \"../client/types\";\r\nimport { chunkFile, getFileId, totalChunks } from \"../include/File\";\r\n\r\nclass SecurequServer extends SecurequServerBase {\r\n\r\n async handshake(body: any, clientInfo: any) {\r\n const data: any = await crypto.decryptBuffer(body, clientInfo.secret)\r\n const serverSecret = await this.getSecret()\r\n if (!data) throw new Error(\"Invalid handshake data\");\r\n if (data.hash !== clientInfo.hash) {\r\n throw new Error(\"Invalid handshake\");\r\n } else if (data.secret !== clientInfo.secret) {\r\n throw new Error(\"Invalid handshake secret\");\r\n } else if (Date.now() - data.clientTime > 30000) { // 30 seconds\r\n throw new Error(\"Handshake expired\");\r\n }\r\n\r\n const serverTime = new Date();\r\n const clientDate = new Date(data.clientTime);\r\n const offsetMs = clientDate.getTime() - serverTime.getTime();\r\n\r\n let info = {\r\n dev: this.config.mode === 'development',\r\n timeDiffarenc: offsetMs,\r\n maxFileSize: this.config.file?.maxFilesize || null,\r\n checkFileType: this.config.file?.checkFileType || false,\r\n signeture: await crypto.encrypt({\r\n expire: Date.now() + 30000, // 30 seconds\r\n hash: clientInfo.hash\r\n }, serverSecret)\r\n }\r\n throw info\r\n }\r\n\r\n async uploadFile(file: File, onProgress?: (p: number) => void): Promise<UploadFileMeta> {\r\n if (!this.config.file?.upload) throw new Response(\"Upload not supported\", { status: 403 });\r\n\r\n const fileId = await getFileId(file);\r\n const chunkSize = this.config.file.chunkSize\r\n const filemeta: UploadFileMeta = {\r\n fileId: fileId,\r\n name: file.name,\r\n size: file.size,\r\n type: file.type,\r\n totalChunks: totalChunks(file, chunkSize),\r\n chunkIndex: 0,\r\n isFinish: false\r\n }\r\n\r\n for await (let { chunk, chunkIndex } of chunkFile(file, chunkSize)) {\r\n if (this.config.file.checkFileType && chunkIndex === 0) {\r\n let fileType = fileScaner(chunk);\r\n if (!fileType) throw new Error(\"Unknown or unsupported file type\");\r\n }\r\n filemeta.chunkIndex = chunkIndex;\r\n filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;\r\n await this.config.file.upload(chunk, filemeta);\r\n if (onProgress) {\r\n const progress = Math.floor(((chunkIndex + 1) / filemeta.totalChunks) * 100)\r\n onProgress(progress);\r\n }\r\n }\r\n return filemeta\r\n }\r\n\r\n async deleteFile(fileId: string): Promise<void> {\r\n if (!this.config.file?.delete) throw new Response(\"Delete not supported\", { status: 403 })\r\n await this.config.file.delete(fileId);\r\n }\r\n\r\n async listen(url: string, { body, headers, metadata }: ListenerInfo): Promise<ServerResponse> {\r\n\r\n const signeture = headers['x-signeture'] || '';\r\n const origin = headers['x-origin'] || '';\r\n const method: HTTPMethods = headers['x-method'] || 'POST' as any\r\n let clientInfo = await this.clientInfo(url, origin)\r\n\r\n\r\n if (!clientInfo) {\r\n return {\r\n status: 403,\r\n value: \"Client not allowed\"\r\n }\r\n }\r\n let path = clientInfo.path\r\n const isDev = path !== '/' && this.config.mode === 'development'\r\n try {\r\n if (path === '/' && method === \"POST\") {\r\n await this.handshake(body, clientInfo)\r\n }\r\n\r\n if (path === '/' && method === 'GET') throw new Response(\"Invalid method\", { status: 405 })\r\n\r\n if (!signeture) {\r\n throw new Response(\"Signeture is required\", { status: 403 });\r\n }\r\n const decryptSigneture = await crypto.decrypt(signeture, clientInfo.secret) as any\r\n if (!decryptSigneture) throw new Response(\"Invalid Signeture\", { status: 403 });\r\n if (decryptSigneture.expire < Date.now()) throw new Response(\"Request expired\", { status: 403 });\r\n\r\n await this.isValidSigneture(decryptSigneture.signeture, clientInfo.hash)\r\n\r\n let data: any = null\r\n if (body) {\r\n if (isDev) {\r\n const decoder = new TextDecoder();\r\n const text = decoder.decode(body).trim();\r\n if (text) {\r\n try {\r\n data = JSON.parse(text)\r\n } catch (error) {\r\n\r\n }\r\n }\r\n } else {\r\n data = await crypto.decryptBuffer(body, clientInfo.secret)\r\n }\r\n }\r\n\r\n if (path === '/') {\r\n\r\n const fileConfig = this.config.file\r\n\r\n // handle file upload\r\n if (method === \"PUT\") {\r\n if (!fileConfig?.upload) throw new Response(\"Upload not supported\", { status: 403 })\r\n\r\n const filemeta: UploadFileMeta = data.filemeta\r\n const chunk: Uint8Array = data.chunk\r\n\r\n if (filemeta.chunkIndex === 0 && fileConfig.checkFileType && !fileScaner(chunk)) {\r\n throw new Error(\"Unknown or unsupported file type\");\r\n }\r\n\r\n await fileConfig.upload(chunk, filemeta)\r\n throw { success: true }\r\n } else if (method === \"DELETE\") {\r\n await this.deleteFile(data.fileId)\r\n throw { success: true }\r\n } else {\r\n throw new Response(\"Invalid method\", { status: 405 });\r\n }\r\n }\r\n\r\n await this.handleRequest({\r\n method,\r\n path,\r\n body: data,\r\n searchParams: clientInfo.searchParams,\r\n params: {}\r\n }, metadata);\r\n\r\n } catch (info: any) {\r\n const isError = info instanceof Error\r\n const isResponse = info instanceof Response\r\n let value = isError ? info.message : (isResponse ? await info.text() : info);\r\n if (isDev) {\r\n return {\r\n status: isError ? 404 : (info?.status || 200),\r\n value: JSON.stringify(value)\r\n };\r\n }\r\n return {\r\n status: isError ? 404 : (info?.status || 200),\r\n value: await crypto.encryptBuffer(value, clientInfo.secret)\r\n };\r\n }\r\n\r\n if (isDev) {\r\n return {\r\n status: 404,\r\n value: \"Not found\"\r\n };\r\n }\r\n\r\n return {\r\n status: 404,\r\n value: await crypto.encryptBuffer(\"Not found\", clientInfo.secret)\r\n };\r\n }\r\n\r\n}\r\n\r\nexport default SecurequServer;"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/server/index.ts"],"sourcesContent":["import crypto from \"../include/crypto\";\r\nimport { ListenerInfo, ServerResponse, UploadFileMeta } from \"./types\";\r\nimport SecurequServerBase from \"./Base\";\r\nimport fileScaner from \"../include/FileScaner\";\r\nimport { HTTPMethods } from \"../client/types\";\r\nimport { chunkFile, getFileId, totalChunks } from \"../include/File\";\r\nexport * from './types'\r\n\r\nclass SecurequServer extends SecurequServerBase {\r\n\r\n async handshake(body: any, clientInfo: any) {\r\n const data: any = await crypto.decryptBuffer(body, clientInfo.secret)\r\n const serverSecret = await this.getSecret()\r\n if (!data) throw new Error(\"Invalid handshake data\");\r\n if (data.hash !== clientInfo.hash) {\r\n throw new Error(\"Invalid handshake\");\r\n } else if (data.secret !== clientInfo.secret) {\r\n throw new Error(\"Invalid handshake secret\");\r\n } else if (Date.now() - data.clientTime > 30000) { // 30 seconds\r\n throw new Error(\"Handshake expired\");\r\n }\r\n\r\n const serverTime = new Date();\r\n const clientDate = new Date(data.clientTime);\r\n const offsetMs = clientDate.getTime() - serverTime.getTime();\r\n\r\n let info = {\r\n dev: this.config.mode === 'development',\r\n timeDiffarenc: offsetMs,\r\n maxFileSize: this.config.file?.maxFilesize || null,\r\n checkFileType: this.config.file?.checkFileType || false,\r\n signeture: await crypto.encrypt({\r\n expire: Date.now() + 30000, // 30 seconds\r\n hash: clientInfo.hash\r\n }, serverSecret)\r\n }\r\n throw info\r\n }\r\n\r\n async uploadFile(file: File, onProgress?: (p: number) => void): Promise<UploadFileMeta> {\r\n if (!this.config.file?.upload) throw new Response(\"Upload not supported\", { status: 403 });\r\n\r\n const fileId = await getFileId(file);\r\n const chunkSize = this.config.file.chunkSize\r\n const filemeta: UploadFileMeta = {\r\n fileId: fileId,\r\n name: file.name,\r\n size: file.size,\r\n type: file.type,\r\n totalChunks: totalChunks(file, chunkSize),\r\n chunkIndex: 0,\r\n isFinish: false\r\n }\r\n\r\n for await (let { chunk, chunkIndex } of chunkFile(file, chunkSize)) {\r\n if (this.config.file.checkFileType && chunkIndex === 0) {\r\n let fileType = fileScaner(chunk);\r\n if (!fileType) throw new Error(\"Unknown or unsupported file type\");\r\n }\r\n filemeta.chunkIndex = chunkIndex;\r\n filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;\r\n await this.config.file.upload(chunk, filemeta);\r\n if (onProgress) {\r\n const progress = Math.floor(((chunkIndex + 1) / filemeta.totalChunks) * 100)\r\n onProgress(progress);\r\n }\r\n }\r\n return filemeta\r\n }\r\n\r\n async deleteFile(fileId: string): Promise<void> {\r\n if (!this.config.file?.delete) throw new Response(\"Delete not supported\", { status: 403 })\r\n await this.config.file.delete(fileId);\r\n }\r\n\r\n async listen(url: string, { body, headers, metadata }: ListenerInfo): Promise<ServerResponse> {\r\n\r\n const signeture = headers['x-signeture'] || '';\r\n const origin = headers['x-origin'] || '';\r\n const method: HTTPMethods = headers['x-method'] || 'POST' as any\r\n let clientInfo = await this.clientInfo(url, origin)\r\n\r\n\r\n if (!clientInfo) {\r\n return {\r\n status: 403,\r\n value: \"Client not allowed\"\r\n }\r\n }\r\n let path = clientInfo.path\r\n const isDev = path !== '/' && this.config.mode === 'development'\r\n try {\r\n if (path === '/' && method === \"POST\") {\r\n await this.handshake(body, clientInfo)\r\n }\r\n\r\n if (path === '/' && method === 'GET') throw new Response(\"Invalid method\", { status: 405 })\r\n\r\n if (!signeture) {\r\n throw new Response(\"Signeture is required\", { status: 403 });\r\n }\r\n const decryptSigneture = await crypto.decrypt(signeture, clientInfo.secret) as any\r\n if (!decryptSigneture) throw new Response(\"Invalid Signeture\", { status: 403 });\r\n if (decryptSigneture.expire < Date.now()) throw new Response(\"Request expired\", { status: 403 });\r\n\r\n await this.isValidSigneture(decryptSigneture.signeture, clientInfo.hash)\r\n\r\n let data: any = null\r\n if (body) {\r\n if (isDev) {\r\n const decoder = new TextDecoder();\r\n const text = decoder.decode(body).trim();\r\n if (text) {\r\n try {\r\n data = JSON.parse(text)\r\n } catch (error) {\r\n\r\n }\r\n }\r\n } else {\r\n data = await crypto.decryptBuffer(body, clientInfo.secret)\r\n }\r\n }\r\n\r\n if (path === '/') {\r\n\r\n const fileConfig = this.config.file\r\n\r\n // handle file upload\r\n if (method === \"PUT\") {\r\n if (!fileConfig?.upload) throw new Response(\"Upload not supported\", { status: 403 })\r\n\r\n const filemeta: UploadFileMeta = data.filemeta\r\n const chunk: Uint8Array = data.chunk\r\n\r\n if (filemeta.chunkIndex === 0 && fileConfig.checkFileType && !fileScaner(chunk)) {\r\n throw new Error(\"Unknown or unsupported file type\");\r\n }\r\n\r\n await fileConfig.upload(chunk, filemeta)\r\n throw { success: true }\r\n } else if (method === \"DELETE\") {\r\n await this.deleteFile(data.fileId)\r\n throw { success: true }\r\n } else {\r\n throw new Response(\"Invalid method\", { status: 405 });\r\n }\r\n }\r\n\r\n await this.handleRequest({\r\n method,\r\n path,\r\n body: data,\r\n searchParams: clientInfo.searchParams,\r\n params: {}\r\n }, metadata);\r\n\r\n } catch (info: any) {\r\n const isError = info instanceof Error\r\n const isResponse = info instanceof Response\r\n let value = isError ? info.message : (isResponse ? await info.text() : info);\r\n if (isDev) {\r\n return {\r\n status: isError ? 404 : (info?.status || 200),\r\n value: JSON.stringify(value)\r\n };\r\n }\r\n return {\r\n status: isError ? 404 : (info?.status || 200),\r\n value: await crypto.encryptBuffer(value, clientInfo.secret)\r\n };\r\n }\r\n\r\n if (isDev) {\r\n return {\r\n status: 404,\r\n value: \"Not found\"\r\n };\r\n }\r\n\r\n return {\r\n status: 404,\r\n value: await crypto.encryptBuffer(\"Not found\", clientInfo.secret)\r\n };\r\n }\r\n\r\n}\r\n\r\nexport default SecurequServer;"],"names":[],"mappings":"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"}
|
package/server/types.d.ts
CHANGED
|
@@ -2,15 +2,6 @@ import { MatchFunction } from 'path-to-regexp';
|
|
|
2
2
|
import { HTTPMethods } from '../client/types.js';
|
|
3
3
|
|
|
4
4
|
type ServerClientSecret = string;
|
|
5
|
-
type ServerClientOrigin = string;
|
|
6
|
-
type ServerClientInfo = {
|
|
7
|
-
path: string;
|
|
8
|
-
secret: string;
|
|
9
|
-
hash: string;
|
|
10
|
-
searchParams: {
|
|
11
|
-
[key: string]: any;
|
|
12
|
-
};
|
|
13
|
-
};
|
|
14
5
|
type ServerClient = {
|
|
15
6
|
origin: string;
|
|
16
7
|
secret: ServerClientSecret;
|
|
@@ -24,7 +15,6 @@ type UploadFileMeta = {
|
|
|
24
15
|
totalChunks: number;
|
|
25
16
|
isFinish: boolean;
|
|
26
17
|
};
|
|
27
|
-
type UploadFilePath = string;
|
|
28
18
|
type Metadata = {
|
|
29
19
|
[key: string]: any;
|
|
30
20
|
};
|
|
@@ -75,4 +65,4 @@ type RouteFactory = {
|
|
|
75
65
|
};
|
|
76
66
|
};
|
|
77
67
|
|
|
78
|
-
export type { HandlerFunction, HandlerInfo, ListenerInfo, Metadata, RouteFactory, SecurequServerConfig, ServerClient,
|
|
68
|
+
export type { HandlerFunction, HandlerInfo, ListenerInfo, Metadata, RouteFactory, SecurequServerConfig, ServerClient, ServerClientSecret, ServerResponse, UploadFileMeta };
|