securequ 1.1.28 → 1.1.29

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/Base.cjs CHANGED
@@ -58,15 +58,12 @@ class Base {
58
58
  return headers;
59
59
  }
60
60
  async handshake() {
61
- if (this.handshakeInfo) {
62
- return this.handshakeInfo;
63
- }
64
61
  if (this.loadingHandshake) {
65
62
  return await new Promise((resolve) => {
66
63
  const interval = setInterval(() => {
67
64
  if (!this.loadingHandshake) {
68
65
  clearInterval(interval);
69
- resolve(this.handshakeInfo);
66
+ resolve(null);
70
67
  }
71
68
  }, 10);
72
69
  });
@@ -96,7 +93,6 @@ class Base {
96
93
  this.loadingHandshake = false;
97
94
  this.handshakeErrorCount = 0;
98
95
  await this.hooksCall('afterHandshake', this.handshakeInfo);
99
- return res.data;
100
96
  }
101
97
  async fetch(path, init) {
102
98
  var _a, _b;
@@ -1 +1 @@
1
- {"version":3,"file":"Base.cjs","sources":["../../src/client/Base.ts"],"sourcesContent":["import crypto from \"../include/crypto\";\nimport { HandshakeInfo, HttpRequestInit, SecurequClientConfig, SecurequClientResponse } from \"./types\";\nimport xanFetch from 'xanfetch'\n\n\nconst Clients = new Map<string, Base>()\n\nclass Base {\n protected config: SecurequClientConfig;\n private handshakeInfo: HandshakeInfo | null = null;\n private secret_length: number = 0;\n private loadingHandshake: boolean = false;\n private handshakeErrorCount = 0\n\n readonly CONTENT_TYPE = \"application/octet-stream\";\n\n constructor(config: SecurequClientConfig) {\n this.config = {\n defaultOptions: {},\n ...config,\n }\n const url = new URL(config.url)\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`)\n config.url = `${url.origin}${url.pathname}`\n\n if (Clients.has(config.url)) {\n throw new Error(`Client is Blocked!`);\n }\n }\n\n protected hooksCall(hook: keyof NonNullable<SecurequClientConfig['hooks']>, ...args: any[]) {\n if (this.config.hooks && this.config.hooks[hook]) {\n return (this.config.hooks[hook] as Function)(...args)\n }\n }\n\n protected async getSecret() {\n let full = this.config.secret\n let secret = full.substring(0, this.secret_length)\n let hash = (await crypto.hash(secret)).substring(0, this.secret_length)\n return { full, secret, hash }\n }\n\n protected async url(path: string) {\n const secret = await this.getSecret()\n const base = this.config.url;\n if (path === '/') path = ''\n path = path.trim();\n path = path.startsWith('/') ? path.substring(1) : path\n path = path.endsWith('/') ? path.substring(0, path.length - 1) : path\n if (path) path = `/${path}`\n return new URL(`${base}/${secret.hash}${path}`);\n }\n\n protected async getHeaders(path: string, init?: HttpRequestInit) {\n const url = await this.url(path)\n const secret = await this.getSecret()\n let headers: any = {};\n if (this.handshakeInfo) {\n headers[\"X-SIGNETURE\"] = await crypto.encrypt({\n signeture: this.handshakeInfo?.signeture,\n expire: Date.now() + this.handshakeInfo!.timeDiffarenc + 10000 // 10 seconds\n }, secret.secret) || '';\n }\n\n headers = {\n ...this.config?.defaultOptions?.headers,\n ...init?.headers,\n ...headers,\n 'Content-Type': this.CONTENT_TYPE,\n \"X-ORIGIN\": url.origin,\n \"X-METHOD\": (init?.method || 'GET').toUpperCase()\n }\n\n return headers;\n }\n\n async handshake() {\n if (this.handshakeInfo) {\n return this.handshakeInfo\n }\n\n if (this.loadingHandshake) {\n return await new Promise((resolve) => {\n const interval = setInterval(() => {\n if (!this.loadingHandshake) {\n clearInterval(interval);\n resolve(this.handshakeInfo);\n }\n }, 10);\n })\n }\n\n this.handshakeInfo = null;\n this.loadingHandshake = true;\n\n await this.hooksCall('beforeHandshake');\n\n let max = this.config.secret.length\n let min = Math.floor(max / 4) * 3\n this.secret_length = Math.floor(Math.random() * (max - min + 1)) + min\n\n const secret = await this.getSecret()\n const res = await this.fetch('/', {\n method: 'POST',\n body: {\n hash: secret.hash,\n clientTime: new Date().toISOString(),\n secret: secret.secret,\n }\n })\n if (!res.data) {\n this.handshakeErrorCount++\n if (this.handshakeErrorCount < 10) {\n await this.handshake()\n }\n }\n this.handshakeInfo = res.data\n this.loadingHandshake = false;\n this.handshakeErrorCount = 0\n await this.hooksCall('afterHandshake', this.handshakeInfo);\n return res.data\n }\n\n async fetch(path: string, init?: HttpRequestInit): Promise<SecurequClientResponse> {\n const isDev = path !== '/' && this.handshakeInfo?.dev\n const secret = await this.getSecret()\n const url = await this.url(path)\n let sparams = Object.fromEntries(url.searchParams.entries())\n const _init = { ...init }\n let params: any = {\n ...sparams,\n }\n\n if (Object.keys(sparams).length > 0) {\n for (let key in sparams) {\n url.searchParams.delete(key)\n }\n }\n\n if (_init?.params) {\n for (let key in _init.params) {\n params[key] = _init.params[key]\n }\n delete _init.params\n }\n\n if (Object.keys(params).length > 0) {\n if (isDev) {\n _init.params = params\n } else {\n const key = Math.random().toString(36).substring(2, 8);\n const enc = await crypto.encrypt({ params, key }, secret.secret)\n url.href = `${url.href}?${key}=${encodeURIComponent(enc)}`\n }\n }\n\n const httpOption: any = {\n method: \"GET\",\n ...this.config?.defaultOptions,\n ..._init,\n headers: await this.getHeaders(path, _init)\n }\n\n if (httpOption?.body) {\n if (isDev) {\n httpOption.body = JSON.stringify(httpOption.body)\n } else {\n httpOption.body = await crypto.encryptBuffer(httpOption.body, secret.secret);\n }\n }\n const res = await xanFetch(url.href, httpOption)\n if (isDev) {\n const value = await res.text()\n let val = value\n try {\n val = JSON.parse(value)\n } catch (error) {\n\n }\n return {\n success: res.ok,\n message: res.ok ? res.statusText : val,\n data: res.ok ? val : null,\n code: res.status\n }\n }\n const value = await res.arrayBuffer()\n const val = await crypto.decryptBuffer(new Uint8Array(value), secret.secret) as any\n\n return {\n success: res.ok,\n message: res.ok ? res.statusText : (val || res.statusText),\n data: res.ok ? val : null,\n code: res.status\n }\n }\n\n}\n\nexport default Base;\n"],"names":[],"mappings":";;;;;AAKA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAgB;AAEvC,MAAM,IAAI,CAAA;AASP,IAAA,WAAA,CAAY,MAA4B,EAAA;QAPhC,IAAA,CAAA,aAAa,GAAyB,IAAI;QAC1C,IAAA,CAAA,aAAa,GAAW,CAAC;QACzB,IAAA,CAAA,gBAAgB,GAAY,KAAK;QACjC,IAAA,CAAA,mBAAmB,GAAG,CAAC;QAEtB,IAAA,CAAA,YAAY,GAAG,0BAA0B;QAG/C,IAAI,CAAC,MAAM,GAAA,MAAA,CAAA,MAAA,CAAA,EACR,cAAc,EAAE,EAAE,EAAA,EACf,MAAM,CACX;QACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;AAC/B,QAAA,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,CAAA,mBAAA,EAAsB,MAAM,CAAC,GAAG,CAAA,0DAAA,CAA4D,CAAC;AACzI,QAAA,MAAM,CAAC,GAAG,GAAG,CAAA,EAAG,GAAG,CAAC,MAAM,CAAA,EAAG,GAAG,CAAC,QAAQ,CAAA,CAAE;QAE3C,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;AAC1B,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,kBAAA,CAAoB,CAAC;AACvC,QAAA;IACJ;AAEU,IAAA,SAAS,CAAC,IAAsD,EAAE,GAAG,IAAW,EAAA;AACvF,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AAC/C,YAAA,OAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAc,CAAC,GAAG,IAAI,CAAC;AACvD,QAAA;IACJ;AAEU,IAAA,MAAM,SAAS,GAAA;AACtB,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;AAC7B,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC;QAClD,IAAI,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC;AACvE,QAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IAChC;IAEU,MAAM,GAAG,CAAC,IAAY,EAAA;AAC7B,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE;AACrC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG;QAC5B,IAAI,IAAI,KAAK,GAAG;YAAE,IAAI,GAAG,EAAE;AAC3B,QAAA,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;QAClB,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI;QACtD,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI;AACrE,QAAA,IAAI,IAAI;AAAE,YAAA,IAAI,GAAG,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE;AAC3B,QAAA,OAAO,IAAI,GAAG,CAAC,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAA,EAAG,IAAI,CAAA,CAAE,CAAC;IAClD;AAEU,IAAA,MAAM,UAAU,CAAC,IAAY,EAAE,IAAsB,EAAA;;QAC5D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AAChC,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE;QACrC,IAAI,OAAO,GAAQ,EAAE;QACrB,IAAI,IAAI,CAAC,aAAa,EAAE;YACrB,OAAO,CAAC,aAAa,CAAC,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;AAC3C,gBAAA,SAAS,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,0CAAE,SAAS;AACxC,gBAAA,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,aAAc,CAAC,aAAa,GAAG,KAAK;AAChE,aAAA,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;AACzB,QAAA;QAED,OAAO,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACD,MAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,OAAO,CAAA,EACpC,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,MAAA,GAAA,MAAA,GAAJ,IAAI,CAAE,OAAO,GACb,OAAO,CAAA,EAAA,EACV,cAAc,EAAE,IAAI,CAAC,YAAY,EACjC,UAAU,EAAE,GAAG,CAAC,MAAM,EACtB,UAAU,EAAE,CAAC,CAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,MAAA,GAAA,MAAA,GAAJ,IAAI,CAAE,MAAM,KAAI,KAAK,EAAE,WAAW,EAAE,EAAA,CACnD;AAED,QAAA,OAAO,OAAO;IACjB;AAEA,IAAA,MAAM,SAAS,GAAA;QACZ,IAAI,IAAI,CAAC,aAAa,EAAE;YACrB,OAAO,IAAI,CAAC,aAAa;AAC3B,QAAA;QAED,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACxB,YAAA,OAAO,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAClC,gBAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAK;AAC/B,oBAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;wBACzB,aAAa,CAAC,QAAQ,CAAC;AACvB,wBAAA,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;AAC7B,oBAAA;gBACJ,CAAC,EAAE,EAAE,CAAC;AACT,YAAA,CAAC,CAAC;AACJ,QAAA;AAED,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAE5B,QAAA,MAAM,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;QAEvC,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM;AACnC,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG;AAEtE,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE;QACrC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;AAC/B,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,IAAI,EAAE;gBACH,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,gBAAA,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACpC,MAAM,EAAE,MAAM,CAAC,MAAM;AACvB;AACH,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;YACZ,IAAI,CAAC,mBAAmB,EAAE;AAC1B,YAAA,IAAI,IAAI,CAAC,mBAAmB,GAAG,EAAE,EAAE;AAChC,gBAAA,MAAM,IAAI,CAAC,SAAS,EAAE;AACxB,YAAA;AACH,QAAA;AACD,QAAA,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,IAAI;AAC7B,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,QAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC;QAC5B,MAAM,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC;QAC1D,OAAO,GAAG,CAAC,IAAI;IAClB;AAEA,IAAA,MAAM,KAAK,CAAC,IAAY,EAAE,IAAsB,EAAA;;AAC7C,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,GAAG,KAAI,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,GAAG,CAAA;AACrD,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE;QACrC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AAChC,QAAA,IAAI,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;AAC5D,QAAA,MAAM,KAAK,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,IAAI,CAAE;AACzB,QAAA,IAAI,MAAM,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACJ,OAAO,CACZ;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAClC,YAAA,KAAK,IAAI,GAAG,IAAI,OAAO,EAAE;AACtB,gBAAA,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC;AAC9B,YAAA;AACH,QAAA;AAED,QAAA,IAAI,KAAK,KAAA,IAAA,IAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,EAAE;AAChB,YAAA,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE;gBAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;AACjC,YAAA;YACD,OAAO,KAAK,CAAC,MAAM;AACrB,QAAA;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACjC,YAAA,IAAI,KAAK,EAAE;AACR,gBAAA,KAAK,CAAC,MAAM,GAAG,MAAM;AACvB,YAAA;AAAM,iBAAA;AACJ,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;AACtD,gBAAA,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC;AAChE,gBAAA,GAAG,CAAC,IAAI,GAAG,CAAA,EAAG,GAAG,CAAC,IAAI,CAAA,CAAA,EAAI,GAAG,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE;AAC5D,YAAA;AACH,QAAA;QAED,MAAM,UAAU,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EACb,MAAM,EAAE,KAAK,EAAA,EACV,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,cAAc,CAAA,EAC3B,KAAK,CAAA,EAAA,EACR,OAAO,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,EAAA,CAC7C;AAED,QAAA,IAAI,UAAU,KAAA,IAAA,IAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,EAAE;AACnB,YAAA,IAAI,KAAK,EAAE;gBACR,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC;AACnD,YAAA;AAAM,iBAAA;AACJ,gBAAA,UAAU,CAAC,IAAI,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;AAC9E,YAAA;AACH,QAAA;QACD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC;AAChD,QAAA,IAAI,KAAK,EAAE;AACR,YAAA,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;YAC9B,IAAI,GAAG,GAAG,KAAK;YACf,IAAI;AACD,gBAAA,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACzB,YAAA;AAAC,YAAA,OAAO,KAAK,EAAE;AAEf,YAAA;YACD,OAAO;gBACJ,OAAO,EAAE,GAAG,CAAC,EAAE;AACf,gBAAA,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,UAAU,GAAG,GAAG;gBACtC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI;gBACzB,IAAI,EAAE,GAAG,CAAC;aACZ;AACH,QAAA;AACD,QAAA,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,WAAW,EAAE;AACrC,QAAA,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,CAAQ;QAEnF,OAAO;YACJ,OAAO,EAAE,GAAG,CAAC,EAAE;AACf,YAAA,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC;YAC1D,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI;YACzB,IAAI,EAAE,GAAG,CAAC;SACZ;IACJ;AAEF;;;;"}
1
+ {"version":3,"file":"Base.cjs","sources":["../../src/client/Base.ts"],"sourcesContent":["import crypto from \"../include/crypto\";\nimport { HandshakeInfo, HttpRequestInit, SecurequClientConfig, SecurequClientResponse } from \"./types\";\nimport xanFetch from 'xanfetch'\n\n\nconst Clients = new Map<string, Base>()\n\nclass Base {\n protected config: SecurequClientConfig;\n protected handshakeInfo: HandshakeInfo | null = null;\n private secret_length: number = 0;\n private loadingHandshake: boolean = false;\n private handshakeErrorCount = 0\n\n readonly CONTENT_TYPE = \"application/octet-stream\";\n\n constructor(config: SecurequClientConfig) {\n this.config = {\n defaultOptions: {},\n ...config,\n }\n const url = new URL(config.url)\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`)\n config.url = `${url.origin}${url.pathname}`\n\n if (Clients.has(config.url)) {\n throw new Error(`Client is Blocked!`);\n }\n }\n\n protected hooksCall(hook: keyof NonNullable<SecurequClientConfig['hooks']>, ...args: any[]) {\n if (this.config.hooks && this.config.hooks[hook]) {\n return (this.config.hooks[hook] as Function)(...args)\n }\n }\n\n protected async getSecret() {\n let full = this.config.secret\n let secret = full.substring(0, this.secret_length)\n let hash = (await crypto.hash(secret)).substring(0, this.secret_length)\n return { full, secret, hash }\n }\n\n protected async url(path: string) {\n const secret = await this.getSecret()\n const base = this.config.url;\n if (path === '/') path = ''\n path = path.trim();\n path = path.startsWith('/') ? path.substring(1) : path\n path = path.endsWith('/') ? path.substring(0, path.length - 1) : path\n if (path) path = `/${path}`\n return new URL(`${base}/${secret.hash}${path}`);\n }\n\n protected async getHeaders(path: string, init?: HttpRequestInit) {\n const url = await this.url(path)\n const secret = await this.getSecret()\n let headers: any = {};\n if (this.handshakeInfo) {\n headers[\"X-SIGNETURE\"] = await crypto.encrypt({\n signeture: this.handshakeInfo?.signeture,\n expire: Date.now() + this.handshakeInfo!.timeDiffarenc + 10000 // 10 seconds\n }, secret.secret) || '';\n }\n\n headers = {\n ...this.config?.defaultOptions?.headers,\n ...init?.headers,\n ...headers,\n 'Content-Type': this.CONTENT_TYPE,\n \"X-ORIGIN\": url.origin,\n \"X-METHOD\": (init?.method || 'GET').toUpperCase()\n }\n\n return headers;\n }\n\n async handshake() {\n if (this.loadingHandshake) {\n return await new Promise((resolve) => {\n const interval = setInterval(() => {\n if (!this.loadingHandshake) {\n clearInterval(interval);\n resolve(null);\n }\n }, 10);\n })\n }\n\n this.handshakeInfo = null;\n this.loadingHandshake = true;\n\n await this.hooksCall('beforeHandshake');\n\n let max = this.config.secret.length\n let min = Math.floor(max / 4) * 3\n this.secret_length = Math.floor(Math.random() * (max - min + 1)) + min\n\n const secret = await this.getSecret()\n const res = await this.fetch('/', {\n method: 'POST',\n body: {\n hash: secret.hash,\n clientTime: new Date().toISOString(),\n secret: secret.secret,\n }\n })\n if (!res.data) {\n this.handshakeErrorCount++\n if (this.handshakeErrorCount < 10) {\n await this.handshake()\n }\n }\n this.handshakeInfo = res.data\n this.loadingHandshake = false;\n this.handshakeErrorCount = 0\n await this.hooksCall('afterHandshake', this.handshakeInfo);\n }\n\n async fetch(path: string, init?: HttpRequestInit): Promise<SecurequClientResponse> {\n const isDev = path !== '/' && this.handshakeInfo?.dev\n const secret = await this.getSecret()\n const url = await this.url(path)\n let sparams = Object.fromEntries(url.searchParams.entries())\n const _init = { ...init }\n let params: any = {\n ...sparams,\n }\n\n if (Object.keys(sparams).length > 0) {\n for (let key in sparams) {\n url.searchParams.delete(key)\n }\n }\n\n if (_init?.params) {\n for (let key in _init.params) {\n params[key] = _init.params[key]\n }\n delete _init.params\n }\n\n if (Object.keys(params).length > 0) {\n if (isDev) {\n _init.params = params\n } else {\n const key = Math.random().toString(36).substring(2, 8);\n const enc = await crypto.encrypt({ params, key }, secret.secret)\n url.href = `${url.href}?${key}=${encodeURIComponent(enc)}`\n }\n }\n\n const httpOption: any = {\n method: \"GET\",\n ...this.config?.defaultOptions,\n ..._init,\n headers: await this.getHeaders(path, _init)\n }\n\n if (httpOption?.body) {\n if (isDev) {\n httpOption.body = JSON.stringify(httpOption.body)\n } else {\n httpOption.body = await crypto.encryptBuffer(httpOption.body, secret.secret);\n }\n }\n const res = await xanFetch(url.href, httpOption)\n if (isDev) {\n const value = await res.text()\n let val = value\n try {\n val = JSON.parse(value)\n } catch (error) {\n\n }\n return {\n success: res.ok,\n message: res.ok ? res.statusText : val,\n data: res.ok ? val : null,\n code: res.status\n }\n }\n const value = await res.arrayBuffer()\n const val = await crypto.decryptBuffer(new Uint8Array(value), secret.secret) as any\n\n return {\n success: res.ok,\n message: res.ok ? res.statusText : (val || res.statusText),\n data: res.ok ? val : null,\n code: res.status\n }\n }\n\n}\n\nexport default Base;\n"],"names":[],"mappings":"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"}
package/client/Base.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- import { SecurequClientConfig, HttpRequestInit, SecurequClientResponse } from './types.js';
1
+ import { SecurequClientConfig, HandshakeInfo, HttpRequestInit, SecurequClientResponse } from './types.js';
2
2
 
3
3
  declare class Base {
4
4
  protected config: SecurequClientConfig;
5
- private handshakeInfo;
5
+ protected handshakeInfo: HandshakeInfo | null;
6
6
  private secret_length;
7
7
  private loadingHandshake;
8
8
  private handshakeErrorCount;
@@ -16,7 +16,7 @@ declare class Base {
16
16
  }>;
17
17
  protected url(path: string): Promise<URL>;
18
18
  protected getHeaders(path: string, init?: HttpRequestInit): Promise<any>;
19
- handshake(): Promise<any>;
19
+ handshake(): Promise<unknown>;
20
20
  fetch(path: string, init?: HttpRequestInit): Promise<SecurequClientResponse>;
21
21
  }
22
22
 
package/client/Base.js CHANGED
@@ -56,15 +56,12 @@ class Base {
56
56
  return headers;
57
57
  }
58
58
  async handshake() {
59
- if (this.handshakeInfo) {
60
- return this.handshakeInfo;
61
- }
62
59
  if (this.loadingHandshake) {
63
60
  return await new Promise((resolve) => {
64
61
  const interval = setInterval(() => {
65
62
  if (!this.loadingHandshake) {
66
63
  clearInterval(interval);
67
- resolve(this.handshakeInfo);
64
+ resolve(null);
68
65
  }
69
66
  }, 10);
70
67
  });
@@ -94,7 +91,6 @@ class Base {
94
91
  this.loadingHandshake = false;
95
92
  this.handshakeErrorCount = 0;
96
93
  await this.hooksCall('afterHandshake', this.handshakeInfo);
97
- return res.data;
98
94
  }
99
95
  async fetch(path, init) {
100
96
  var _a, _b;
@@ -1 +1 @@
1
- {"version":3,"file":"Base.js","sources":["../../src/client/Base.ts"],"sourcesContent":["import crypto from \"../include/crypto\";\nimport { HandshakeInfo, HttpRequestInit, SecurequClientConfig, SecurequClientResponse } from \"./types\";\nimport xanFetch from 'xanfetch'\n\n\nconst Clients = new Map<string, Base>()\n\nclass Base {\n protected config: SecurequClientConfig;\n private handshakeInfo: HandshakeInfo | null = null;\n private secret_length: number = 0;\n private loadingHandshake: boolean = false;\n private handshakeErrorCount = 0\n\n readonly CONTENT_TYPE = \"application/octet-stream\";\n\n constructor(config: SecurequClientConfig) {\n this.config = {\n defaultOptions: {},\n ...config,\n }\n const url = new URL(config.url)\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`)\n config.url = `${url.origin}${url.pathname}`\n\n if (Clients.has(config.url)) {\n throw new Error(`Client is Blocked!`);\n }\n }\n\n protected hooksCall(hook: keyof NonNullable<SecurequClientConfig['hooks']>, ...args: any[]) {\n if (this.config.hooks && this.config.hooks[hook]) {\n return (this.config.hooks[hook] as Function)(...args)\n }\n }\n\n protected async getSecret() {\n let full = this.config.secret\n let secret = full.substring(0, this.secret_length)\n let hash = (await crypto.hash(secret)).substring(0, this.secret_length)\n return { full, secret, hash }\n }\n\n protected async url(path: string) {\n const secret = await this.getSecret()\n const base = this.config.url;\n if (path === '/') path = ''\n path = path.trim();\n path = path.startsWith('/') ? path.substring(1) : path\n path = path.endsWith('/') ? path.substring(0, path.length - 1) : path\n if (path) path = `/${path}`\n return new URL(`${base}/${secret.hash}${path}`);\n }\n\n protected async getHeaders(path: string, init?: HttpRequestInit) {\n const url = await this.url(path)\n const secret = await this.getSecret()\n let headers: any = {};\n if (this.handshakeInfo) {\n headers[\"X-SIGNETURE\"] = await crypto.encrypt({\n signeture: this.handshakeInfo?.signeture,\n expire: Date.now() + this.handshakeInfo!.timeDiffarenc + 10000 // 10 seconds\n }, secret.secret) || '';\n }\n\n headers = {\n ...this.config?.defaultOptions?.headers,\n ...init?.headers,\n ...headers,\n 'Content-Type': this.CONTENT_TYPE,\n \"X-ORIGIN\": url.origin,\n \"X-METHOD\": (init?.method || 'GET').toUpperCase()\n }\n\n return headers;\n }\n\n async handshake() {\n if (this.handshakeInfo) {\n return this.handshakeInfo\n }\n\n if (this.loadingHandshake) {\n return await new Promise((resolve) => {\n const interval = setInterval(() => {\n if (!this.loadingHandshake) {\n clearInterval(interval);\n resolve(this.handshakeInfo);\n }\n }, 10);\n })\n }\n\n this.handshakeInfo = null;\n this.loadingHandshake = true;\n\n await this.hooksCall('beforeHandshake');\n\n let max = this.config.secret.length\n let min = Math.floor(max / 4) * 3\n this.secret_length = Math.floor(Math.random() * (max - min + 1)) + min\n\n const secret = await this.getSecret()\n const res = await this.fetch('/', {\n method: 'POST',\n body: {\n hash: secret.hash,\n clientTime: new Date().toISOString(),\n secret: secret.secret,\n }\n })\n if (!res.data) {\n this.handshakeErrorCount++\n if (this.handshakeErrorCount < 10) {\n await this.handshake()\n }\n }\n this.handshakeInfo = res.data\n this.loadingHandshake = false;\n this.handshakeErrorCount = 0\n await this.hooksCall('afterHandshake', this.handshakeInfo);\n return res.data\n }\n\n async fetch(path: string, init?: HttpRequestInit): Promise<SecurequClientResponse> {\n const isDev = path !== '/' && this.handshakeInfo?.dev\n const secret = await this.getSecret()\n const url = await this.url(path)\n let sparams = Object.fromEntries(url.searchParams.entries())\n const _init = { ...init }\n let params: any = {\n ...sparams,\n }\n\n if (Object.keys(sparams).length > 0) {\n for (let key in sparams) {\n url.searchParams.delete(key)\n }\n }\n\n if (_init?.params) {\n for (let key in _init.params) {\n params[key] = _init.params[key]\n }\n delete _init.params\n }\n\n if (Object.keys(params).length > 0) {\n if (isDev) {\n _init.params = params\n } else {\n const key = Math.random().toString(36).substring(2, 8);\n const enc = await crypto.encrypt({ params, key }, secret.secret)\n url.href = `${url.href}?${key}=${encodeURIComponent(enc)}`\n }\n }\n\n const httpOption: any = {\n method: \"GET\",\n ...this.config?.defaultOptions,\n ..._init,\n headers: await this.getHeaders(path, _init)\n }\n\n if (httpOption?.body) {\n if (isDev) {\n httpOption.body = JSON.stringify(httpOption.body)\n } else {\n httpOption.body = await crypto.encryptBuffer(httpOption.body, secret.secret);\n }\n }\n const res = await xanFetch(url.href, httpOption)\n if (isDev) {\n const value = await res.text()\n let val = value\n try {\n val = JSON.parse(value)\n } catch (error) {\n\n }\n return {\n success: res.ok,\n message: res.ok ? res.statusText : val,\n data: res.ok ? val : null,\n code: res.status\n }\n }\n const value = await res.arrayBuffer()\n const val = await crypto.decryptBuffer(new Uint8Array(value), secret.secret) as any\n\n return {\n success: res.ok,\n message: res.ok ? res.statusText : (val || res.statusText),\n data: res.ok ? val : null,\n code: res.status\n }\n }\n\n}\n\nexport default Base;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Base.js","sources":["../../src/client/Base.ts"],"sourcesContent":["import crypto from \"../include/crypto\";\nimport { HandshakeInfo, HttpRequestInit, SecurequClientConfig, SecurequClientResponse } from \"./types\";\nimport xanFetch from 'xanfetch'\n\n\nconst Clients = new Map<string, Base>()\n\nclass Base {\n protected config: SecurequClientConfig;\n protected handshakeInfo: HandshakeInfo | null = null;\n private secret_length: number = 0;\n private loadingHandshake: boolean = false;\n private handshakeErrorCount = 0\n\n readonly CONTENT_TYPE = \"application/octet-stream\";\n\n constructor(config: SecurequClientConfig) {\n this.config = {\n defaultOptions: {},\n ...config,\n }\n const url = new URL(config.url)\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`)\n config.url = `${url.origin}${url.pathname}`\n\n if (Clients.has(config.url)) {\n throw new Error(`Client is Blocked!`);\n }\n }\n\n protected hooksCall(hook: keyof NonNullable<SecurequClientConfig['hooks']>, ...args: any[]) {\n if (this.config.hooks && this.config.hooks[hook]) {\n return (this.config.hooks[hook] as Function)(...args)\n }\n }\n\n protected async getSecret() {\n let full = this.config.secret\n let secret = full.substring(0, this.secret_length)\n let hash = (await crypto.hash(secret)).substring(0, this.secret_length)\n return { full, secret, hash }\n }\n\n protected async url(path: string) {\n const secret = await this.getSecret()\n const base = this.config.url;\n if (path === '/') path = ''\n path = path.trim();\n path = path.startsWith('/') ? path.substring(1) : path\n path = path.endsWith('/') ? path.substring(0, path.length - 1) : path\n if (path) path = `/${path}`\n return new URL(`${base}/${secret.hash}${path}`);\n }\n\n protected async getHeaders(path: string, init?: HttpRequestInit) {\n const url = await this.url(path)\n const secret = await this.getSecret()\n let headers: any = {};\n if (this.handshakeInfo) {\n headers[\"X-SIGNETURE\"] = await crypto.encrypt({\n signeture: this.handshakeInfo?.signeture,\n expire: Date.now() + this.handshakeInfo!.timeDiffarenc + 10000 // 10 seconds\n }, secret.secret) || '';\n }\n\n headers = {\n ...this.config?.defaultOptions?.headers,\n ...init?.headers,\n ...headers,\n 'Content-Type': this.CONTENT_TYPE,\n \"X-ORIGIN\": url.origin,\n \"X-METHOD\": (init?.method || 'GET').toUpperCase()\n }\n\n return headers;\n }\n\n async handshake() {\n if (this.loadingHandshake) {\n return await new Promise((resolve) => {\n const interval = setInterval(() => {\n if (!this.loadingHandshake) {\n clearInterval(interval);\n resolve(null);\n }\n }, 10);\n })\n }\n\n this.handshakeInfo = null;\n this.loadingHandshake = true;\n\n await this.hooksCall('beforeHandshake');\n\n let max = this.config.secret.length\n let min = Math.floor(max / 4) * 3\n this.secret_length = Math.floor(Math.random() * (max - min + 1)) + min\n\n const secret = await this.getSecret()\n const res = await this.fetch('/', {\n method: 'POST',\n body: {\n hash: secret.hash,\n clientTime: new Date().toISOString(),\n secret: secret.secret,\n }\n })\n if (!res.data) {\n this.handshakeErrorCount++\n if (this.handshakeErrorCount < 10) {\n await this.handshake()\n }\n }\n this.handshakeInfo = res.data\n this.loadingHandshake = false;\n this.handshakeErrorCount = 0\n await this.hooksCall('afterHandshake', this.handshakeInfo);\n }\n\n async fetch(path: string, init?: HttpRequestInit): Promise<SecurequClientResponse> {\n const isDev = path !== '/' && this.handshakeInfo?.dev\n const secret = await this.getSecret()\n const url = await this.url(path)\n let sparams = Object.fromEntries(url.searchParams.entries())\n const _init = { ...init }\n let params: any = {\n ...sparams,\n }\n\n if (Object.keys(sparams).length > 0) {\n for (let key in sparams) {\n url.searchParams.delete(key)\n }\n }\n\n if (_init?.params) {\n for (let key in _init.params) {\n params[key] = _init.params[key]\n }\n delete _init.params\n }\n\n if (Object.keys(params).length > 0) {\n if (isDev) {\n _init.params = params\n } else {\n const key = Math.random().toString(36).substring(2, 8);\n const enc = await crypto.encrypt({ params, key }, secret.secret)\n url.href = `${url.href}?${key}=${encodeURIComponent(enc)}`\n }\n }\n\n const httpOption: any = {\n method: \"GET\",\n ...this.config?.defaultOptions,\n ..._init,\n headers: await this.getHeaders(path, _init)\n }\n\n if (httpOption?.body) {\n if (isDev) {\n httpOption.body = JSON.stringify(httpOption.body)\n } else {\n httpOption.body = await crypto.encryptBuffer(httpOption.body, secret.secret);\n }\n }\n const res = await xanFetch(url.href, httpOption)\n if (isDev) {\n const value = await res.text()\n let val = value\n try {\n val = JSON.parse(value)\n } catch (error) {\n\n }\n return {\n success: res.ok,\n message: res.ok ? res.statusText : val,\n data: res.ok ? val : null,\n code: res.status\n }\n }\n const value = await res.arrayBuffer()\n const val = await crypto.decryptBuffer(new Uint8Array(value), secret.secret) as any\n\n return {\n success: res.ok,\n message: res.ok ? res.statusText : (val || res.statusText),\n data: res.ok ? val : null,\n code: res.status\n }\n }\n\n}\n\nexport default Base;\n"],"names":[],"mappings":"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"}
package/client/index.cjs CHANGED
@@ -26,7 +26,8 @@ class SecurequClient extends Base {
26
26
  }
27
27
  async uploadFile(file$1, onProgress) {
28
28
  var _a, e_1, _b, _c;
29
- const handshake = await this.handshake();
29
+ var _d, _e, _f;
30
+ await this.handshake();
30
31
  if (!(file$1 instanceof File)) {
31
32
  const controller = new AbortController();
32
33
  const chunk = file$1.chunk;
@@ -34,7 +35,7 @@ class SecurequClient extends Base {
34
35
  const chunkIndex = filemeta.chunkIndex;
35
36
  filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;
36
37
  const fileId = filemeta.fileId;
37
- const maxFileSize = handshake === null || handshake === void 0 ? void 0 : handshake.maxFileSize;
38
+ const maxFileSize = (_d = this.handshakeInfo) === null || _d === void 0 ? void 0 : _d.maxFileSize;
38
39
  if (maxFileSize && filemeta.size > maxFileSize * 1024) {
39
40
  throw new Error(`File size exceeds the limit of ${maxFileSize / 1024} MB`);
40
41
  }
@@ -43,7 +44,7 @@ class SecurequClient extends Base {
43
44
  controller.abort();
44
45
  window.removeEventListener("pagehide", abort);
45
46
  };
46
- if (chunkIndex === 0 && (handshake === null || handshake === void 0 ? void 0 : handshake.checkFileType) && !fileScaner(chunk).valid) {
47
+ if (chunkIndex === 0 && ((_e = this.handshakeInfo) === null || _e === void 0 ? void 0 : _e.checkFileType) && !fileScaner(chunk).valid) {
47
48
  await abort();
48
49
  return {
49
50
  success: false,
@@ -91,7 +92,7 @@ class SecurequClient extends Base {
91
92
  else {
92
93
  const fileId = await file.getFileId(file$1);
93
94
  const _file = await this.hooksCall('beforeUpload', file$1, fileId) || file$1;
94
- const chunkSize = handshake === null || handshake === void 0 ? void 0 : handshake.chunkSize;
95
+ const chunkSize = (_f = this.handshakeInfo) === null || _f === void 0 ? void 0 : _f.chunkSize;
95
96
  // send metadata
96
97
  const filemeta = {
97
98
  fileId: fileId,
@@ -103,9 +104,9 @@ class SecurequClient extends Base {
103
104
  isFinish: false
104
105
  };
105
106
  try {
106
- for (var _d = true, _e = tslib.__asyncValues(file.chunkFile(_file, chunkSize)), _f; _f = await _e.next(), _a = _f.done, !_a;) {
107
- _c = _f.value;
108
- _d = false;
107
+ for (var _g = true, _h = tslib.__asyncValues(file.chunkFile(_file, chunkSize)), _j; _j = await _h.next(), _a = _j.done, !_a;) {
108
+ _c = _j.value;
109
+ _g = false;
109
110
  try {
110
111
  let { chunk, chunkIndex } = _c;
111
112
  filemeta.chunkIndex = chunkIndex;
@@ -115,14 +116,14 @@ class SecurequClient extends Base {
115
116
  });
116
117
  }
117
118
  finally {
118
- _d = true;
119
+ _g = true;
119
120
  }
120
121
  }
121
122
  }
122
123
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
123
124
  finally {
124
125
  try {
125
- if (!_d && !_a && (_b = _e.return)) await _b.call(_e);
126
+ if (!_g && !_a && (_b = _h.return)) await _b.call(_h);
126
127
  }
127
128
  finally { if (e_1) throw e_1.error; }
128
129
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/client/index.ts"],"sourcesContent":["import { FileUploadArgs, HttpRequestInit, SecurequClientResponse } from \"./types\";\nimport { chunkFile, getFileId, totalChunks } from \"../include/file\";\nimport Base from \"./Base\";\nimport fileScaner from '../include/file-scaner';\nimport { UploadFileMeta } from \"../server/types\";\n\nexport * from \"./types\"\n\nclass SecurequClient extends Base {\n\n async send(path: string, init?: HttpRequestInit): Promise<SecurequClientResponse> {\n await this.handshake();\n\n init = await this.hooksCall('beforeRequest', path, init) || init;\n const url = await this.url(path)\n if (url.pathname === '/') throw new Error(\"Path is not allowed\")\n\n for (let key in init?.body) {\n if (init?.body[key] instanceof File) {\n init.body[key] = await this.uploadFile(init.body[key], init?.onProgress)\n }\n }\n\n const res = await this.fetch(path, init);\n if ([\"Signeture expired\", \"Request expired\", \"Invalid Signeture\"].includes(res.message)) {\n return await this.send(path, init);\n }\n await this.hooksCall('afterResponse', res);\n return res;\n }\n\n async uploadFile(file: FileUploadArgs, onProgress?: (p: number) => void): Promise<SecurequClientResponse> {\n const handshake = await this.handshake();\n\n if (!(file instanceof File)) {\n const controller = new AbortController();\n const chunk = file.chunk\n const filemeta = file.meta\n const chunkIndex = filemeta.chunkIndex;\n filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;\n const fileId = filemeta.fileId\n const maxFileSize = handshake?.maxFileSize\n if (maxFileSize && filemeta.size > maxFileSize * 1024) {\n throw new Error(`File size exceeds the limit of ${maxFileSize / 1024} MB`)\n }\n\n const abort = async () => {\n await this.deleteFile(fileId);\n controller.abort();\n window.removeEventListener(\"pagehide\", abort);\n }\n\n if (chunkIndex === 0 && handshake?.checkFileType && !fileScaner(chunk).valid) {\n await abort()\n return {\n success: false,\n message: \"Unknown or unsupported file type\",\n data: null,\n code: 0\n }\n }\n\n const info: any = {\n method: 'PUT',\n signal: controller.signal,\n body: {\n chunk,\n filemeta\n },\n onProgress: (p: number) => {\n if (onProgress) {\n const totalProgress = Math.floor(((chunkIndex + 1) / filemeta.totalChunks) * 100)\n const currentProgress = Math.floor((p / 100) / filemeta.totalChunks * 100)\n onProgress(Math.min(totalProgress + currentProgress, 100))\n }\n }\n }\n\n await this.hooksCall('beforeUploadChunk', chunk, filemeta);\n\n let res = await this.fetch('/', info)\n\n if (!res.success) {\n if ([\"Signeture expired\", \"Request expired\", \"Invalid Signeture\"].includes(res.message)) {\n window.removeEventListener(\"pagehide\", abort);\n res = await this.uploadFile(file, onProgress);\n } else {\n await abort()\n return res\n }\n }\n await this.hooksCall('afterUploadChunk', res, filemeta);\n window.removeEventListener(\"pagehide\", abort);\n return {\n success: true,\n message: 'File uploaded successfully',\n data: filemeta,\n code: 200\n }\n } else {\n const fileId = await getFileId(file);\n const _file = await this.hooksCall('beforeUpload', file, fileId) || file;\n const chunkSize = handshake?.chunkSize\n\n // send metadata\n const filemeta: UploadFileMeta = {\n fileId: fileId,\n name: _file.name,\n size: _file.size,\n type: _file.type,\n totalChunks: totalChunks(_file, chunkSize),\n chunkIndex: 0,\n isFinish: false\n }\n\n for await (let { chunk, chunkIndex } of chunkFile(_file, chunkSize)) {\n filemeta.chunkIndex = chunkIndex;\n await this.uploadFile({\n chunk,\n meta: filemeta\n })\n }\n\n const info = {\n success: true,\n message: 'File uploaded successfully',\n data: filemeta,\n code: 200\n }\n await this.hooksCall('afterUpload', info, _file);\n return info\n }\n }\n\n async deleteFile(fileId: string, init?: Omit<HttpRequestInit, 'body' | 'method'>): Promise<SecurequClientResponse> {\n await this.handshake();\n const res = await this.fetch('/', {\n ...init,\n method: 'DELETE',\n body: { fileId }\n });\n if ([\"Signeture expired\", \"Request expired\", \"Invalid Signeture\"].includes(res.message)) {\n return await this.deleteFile(fileId, init);\n }\n return res;\n }\n\n async get(path: string, init?: Omit<HttpRequestInit, 'body' | 'method'>) {\n return await this.send(path, init);\n }\n\n async post(path: string, init?: Omit<HttpRequestInit, 'method'>) {\n return await this.send(path, { ...init, method: \"POST\" });\n }\n\n async put(path: string, init?: Omit<HttpRequestInit, 'method'>) {\n return await this.send(path, { ...init, method: \"PUT\" });\n }\n\n async delete(path: string, init?: Omit<HttpRequestInit, 'method'>) {\n return await this.send(path, { ...init, method: \"DELETE\" });\n }\n\n}\n\nexport default SecurequClient;\n"],"names":["file","getFileId","totalChunks","__asyncValues","chunkFile"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/client/index.ts"],"sourcesContent":["import { FileUploadArgs, HttpRequestInit, SecurequClientResponse } from \"./types\";\nimport { chunkFile, getFileId, totalChunks } from \"../include/file\";\nimport Base from \"./Base\";\nimport fileScaner from '../include/file-scaner';\nimport { UploadFileMeta } from \"../server/types\";\n\nexport * from \"./types\"\n\nclass SecurequClient extends Base {\n\n async send(path: string, init?: HttpRequestInit): Promise<SecurequClientResponse> {\n await this.handshake();\n\n init = await this.hooksCall('beforeRequest', path, init) || init;\n const url = await this.url(path)\n if (url.pathname === '/') throw new Error(\"Path is not allowed\")\n\n for (let key in init?.body) {\n if (init?.body[key] instanceof File) {\n init.body[key] = await this.uploadFile(init.body[key], init?.onProgress)\n }\n }\n\n const res = await this.fetch(path, init);\n if ([\"Signeture expired\", \"Request expired\", \"Invalid Signeture\"].includes(res.message)) {\n return await this.send(path, init);\n }\n await this.hooksCall('afterResponse', res);\n return res;\n }\n\n async uploadFile(file: FileUploadArgs, onProgress?: (p: number) => void): Promise<SecurequClientResponse> {\n await this.handshake();\n\n if (!(file instanceof File)) {\n const controller = new AbortController();\n const chunk = file.chunk\n const filemeta = file.meta\n const chunkIndex = filemeta.chunkIndex;\n filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;\n const fileId = filemeta.fileId\n const maxFileSize = this.handshakeInfo?.maxFileSize\n if (maxFileSize && filemeta.size > maxFileSize * 1024) {\n throw new Error(`File size exceeds the limit of ${maxFileSize / 1024} MB`)\n }\n\n const abort = async () => {\n await this.deleteFile(fileId);\n controller.abort();\n window.removeEventListener(\"pagehide\", abort);\n }\n\n if (chunkIndex === 0 && this.handshakeInfo?.checkFileType && !fileScaner(chunk).valid) {\n await abort()\n return {\n success: false,\n message: \"Unknown or unsupported file type\",\n data: null,\n code: 0\n }\n }\n\n const info: any = {\n method: 'PUT',\n signal: controller.signal,\n body: {\n chunk,\n filemeta\n },\n onProgress: (p: number) => {\n if (onProgress) {\n const totalProgress = Math.floor(((chunkIndex + 1) / filemeta.totalChunks) * 100)\n const currentProgress = Math.floor((p / 100) / filemeta.totalChunks * 100)\n onProgress(Math.min(totalProgress + currentProgress, 100))\n }\n }\n }\n\n await this.hooksCall('beforeUploadChunk', chunk, filemeta);\n\n let res = await this.fetch('/', info)\n\n if (!res.success) {\n if ([\"Signeture expired\", \"Request expired\", \"Invalid Signeture\"].includes(res.message)) {\n window.removeEventListener(\"pagehide\", abort);\n res = await this.uploadFile(file, onProgress);\n } else {\n await abort()\n return res\n }\n }\n await this.hooksCall('afterUploadChunk', res, filemeta);\n window.removeEventListener(\"pagehide\", abort);\n return {\n success: true,\n message: 'File uploaded successfully',\n data: filemeta,\n code: 200\n }\n } else {\n const fileId = await getFileId(file);\n const _file = await this.hooksCall('beforeUpload', file, fileId) || file;\n const chunkSize = this.handshakeInfo?.chunkSize\n\n // send metadata\n const filemeta: UploadFileMeta = {\n fileId: fileId,\n name: _file.name,\n size: _file.size,\n type: _file.type,\n totalChunks: totalChunks(_file, chunkSize),\n chunkIndex: 0,\n isFinish: false\n }\n\n for await (let { chunk, chunkIndex } of chunkFile(_file, chunkSize)) {\n filemeta.chunkIndex = chunkIndex;\n await this.uploadFile({\n chunk,\n meta: filemeta\n })\n }\n\n const info = {\n success: true,\n message: 'File uploaded successfully',\n data: filemeta,\n code: 200\n }\n await this.hooksCall('afterUpload', info, _file);\n return info\n }\n }\n\n async deleteFile(fileId: string, init?: Omit<HttpRequestInit, 'body' | 'method'>): Promise<SecurequClientResponse> {\n await this.handshake();\n const res = await this.fetch('/', {\n ...init,\n method: 'DELETE',\n body: { fileId }\n });\n if ([\"Signeture expired\", \"Request expired\", \"Invalid Signeture\"].includes(res.message)) {\n return await this.deleteFile(fileId, init);\n }\n return res;\n }\n\n async get(path: string, init?: Omit<HttpRequestInit, 'body' | 'method'>) {\n return await this.send(path, init);\n }\n\n async post(path: string, init?: Omit<HttpRequestInit, 'method'>) {\n return await this.send(path, { ...init, method: \"POST\" });\n }\n\n async put(path: string, init?: Omit<HttpRequestInit, 'method'>) {\n return await this.send(path, { ...init, method: \"PUT\" });\n }\n\n async delete(path: string, init?: Omit<HttpRequestInit, 'method'>) {\n return await this.send(path, { ...init, method: \"DELETE\" });\n }\n\n}\n\nexport default SecurequClient;\n"],"names":["file","getFileId","totalChunks","__asyncValues","chunkFile"],"mappings":"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"}
package/client/index.js CHANGED
@@ -24,7 +24,8 @@ class SecurequClient extends Base {
24
24
  }
25
25
  async uploadFile(file, onProgress) {
26
26
  var _a, e_1, _b, _c;
27
- const handshake = await this.handshake();
27
+ var _d, _e, _f;
28
+ await this.handshake();
28
29
  if (!(file instanceof File)) {
29
30
  const controller = new AbortController();
30
31
  const chunk = file.chunk;
@@ -32,7 +33,7 @@ class SecurequClient extends Base {
32
33
  const chunkIndex = filemeta.chunkIndex;
33
34
  filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;
34
35
  const fileId = filemeta.fileId;
35
- const maxFileSize = handshake === null || handshake === void 0 ? void 0 : handshake.maxFileSize;
36
+ const maxFileSize = (_d = this.handshakeInfo) === null || _d === void 0 ? void 0 : _d.maxFileSize;
36
37
  if (maxFileSize && filemeta.size > maxFileSize * 1024) {
37
38
  throw new Error(`File size exceeds the limit of ${maxFileSize / 1024} MB`);
38
39
  }
@@ -41,7 +42,7 @@ class SecurequClient extends Base {
41
42
  controller.abort();
42
43
  window.removeEventListener("pagehide", abort);
43
44
  };
44
- if (chunkIndex === 0 && (handshake === null || handshake === void 0 ? void 0 : handshake.checkFileType) && !fileScaner(chunk).valid) {
45
+ if (chunkIndex === 0 && ((_e = this.handshakeInfo) === null || _e === void 0 ? void 0 : _e.checkFileType) && !fileScaner(chunk).valid) {
45
46
  await abort();
46
47
  return {
47
48
  success: false,
@@ -89,7 +90,7 @@ class SecurequClient extends Base {
89
90
  else {
90
91
  const fileId = await getFileId(file);
91
92
  const _file = await this.hooksCall('beforeUpload', file, fileId) || file;
92
- const chunkSize = handshake === null || handshake === void 0 ? void 0 : handshake.chunkSize;
93
+ const chunkSize = (_f = this.handshakeInfo) === null || _f === void 0 ? void 0 : _f.chunkSize;
93
94
  // send metadata
94
95
  const filemeta = {
95
96
  fileId: fileId,
@@ -101,9 +102,9 @@ class SecurequClient extends Base {
101
102
  isFinish: false
102
103
  };
103
104
  try {
104
- for (var _d = true, _e = __asyncValues(chunkFile(_file, chunkSize)), _f; _f = await _e.next(), _a = _f.done, !_a;) {
105
- _c = _f.value;
106
- _d = false;
105
+ for (var _g = true, _h = __asyncValues(chunkFile(_file, chunkSize)), _j; _j = await _h.next(), _a = _j.done, !_a;) {
106
+ _c = _j.value;
107
+ _g = false;
107
108
  try {
108
109
  let { chunk, chunkIndex } = _c;
109
110
  filemeta.chunkIndex = chunkIndex;
@@ -113,14 +114,14 @@ class SecurequClient extends Base {
113
114
  });
114
115
  }
115
116
  finally {
116
- _d = true;
117
+ _g = true;
117
118
  }
118
119
  }
119
120
  }
120
121
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
121
122
  finally {
122
123
  try {
123
- if (!_d && !_a && (_b = _e.return)) await _b.call(_e);
124
+ if (!_g && !_a && (_b = _h.return)) await _b.call(_h);
124
125
  }
125
126
  finally { if (e_1) throw e_1.error; }
126
127
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/client/index.ts"],"sourcesContent":["import { FileUploadArgs, HttpRequestInit, SecurequClientResponse } from \"./types\";\nimport { chunkFile, getFileId, totalChunks } from \"../include/file\";\nimport Base from \"./Base\";\nimport fileScaner from '../include/file-scaner';\nimport { UploadFileMeta } from \"../server/types\";\n\nexport * from \"./types\"\n\nclass SecurequClient extends Base {\n\n async send(path: string, init?: HttpRequestInit): Promise<SecurequClientResponse> {\n await this.handshake();\n\n init = await this.hooksCall('beforeRequest', path, init) || init;\n const url = await this.url(path)\n if (url.pathname === '/') throw new Error(\"Path is not allowed\")\n\n for (let key in init?.body) {\n if (init?.body[key] instanceof File) {\n init.body[key] = await this.uploadFile(init.body[key], init?.onProgress)\n }\n }\n\n const res = await this.fetch(path, init);\n if ([\"Signeture expired\", \"Request expired\", \"Invalid Signeture\"].includes(res.message)) {\n return await this.send(path, init);\n }\n await this.hooksCall('afterResponse', res);\n return res;\n }\n\n async uploadFile(file: FileUploadArgs, onProgress?: (p: number) => void): Promise<SecurequClientResponse> {\n const handshake = await this.handshake();\n\n if (!(file instanceof File)) {\n const controller = new AbortController();\n const chunk = file.chunk\n const filemeta = file.meta\n const chunkIndex = filemeta.chunkIndex;\n filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;\n const fileId = filemeta.fileId\n const maxFileSize = handshake?.maxFileSize\n if (maxFileSize && filemeta.size > maxFileSize * 1024) {\n throw new Error(`File size exceeds the limit of ${maxFileSize / 1024} MB`)\n }\n\n const abort = async () => {\n await this.deleteFile(fileId);\n controller.abort();\n window.removeEventListener(\"pagehide\", abort);\n }\n\n if (chunkIndex === 0 && handshake?.checkFileType && !fileScaner(chunk).valid) {\n await abort()\n return {\n success: false,\n message: \"Unknown or unsupported file type\",\n data: null,\n code: 0\n }\n }\n\n const info: any = {\n method: 'PUT',\n signal: controller.signal,\n body: {\n chunk,\n filemeta\n },\n onProgress: (p: number) => {\n if (onProgress) {\n const totalProgress = Math.floor(((chunkIndex + 1) / filemeta.totalChunks) * 100)\n const currentProgress = Math.floor((p / 100) / filemeta.totalChunks * 100)\n onProgress(Math.min(totalProgress + currentProgress, 100))\n }\n }\n }\n\n await this.hooksCall('beforeUploadChunk', chunk, filemeta);\n\n let res = await this.fetch('/', info)\n\n if (!res.success) {\n if ([\"Signeture expired\", \"Request expired\", \"Invalid Signeture\"].includes(res.message)) {\n window.removeEventListener(\"pagehide\", abort);\n res = await this.uploadFile(file, onProgress);\n } else {\n await abort()\n return res\n }\n }\n await this.hooksCall('afterUploadChunk', res, filemeta);\n window.removeEventListener(\"pagehide\", abort);\n return {\n success: true,\n message: 'File uploaded successfully',\n data: filemeta,\n code: 200\n }\n } else {\n const fileId = await getFileId(file);\n const _file = await this.hooksCall('beforeUpload', file, fileId) || file;\n const chunkSize = handshake?.chunkSize\n\n // send metadata\n const filemeta: UploadFileMeta = {\n fileId: fileId,\n name: _file.name,\n size: _file.size,\n type: _file.type,\n totalChunks: totalChunks(_file, chunkSize),\n chunkIndex: 0,\n isFinish: false\n }\n\n for await (let { chunk, chunkIndex } of chunkFile(_file, chunkSize)) {\n filemeta.chunkIndex = chunkIndex;\n await this.uploadFile({\n chunk,\n meta: filemeta\n })\n }\n\n const info = {\n success: true,\n message: 'File uploaded successfully',\n data: filemeta,\n code: 200\n }\n await this.hooksCall('afterUpload', info, _file);\n return info\n }\n }\n\n async deleteFile(fileId: string, init?: Omit<HttpRequestInit, 'body' | 'method'>): Promise<SecurequClientResponse> {\n await this.handshake();\n const res = await this.fetch('/', {\n ...init,\n method: 'DELETE',\n body: { fileId }\n });\n if ([\"Signeture expired\", \"Request expired\", \"Invalid Signeture\"].includes(res.message)) {\n return await this.deleteFile(fileId, init);\n }\n return res;\n }\n\n async get(path: string, init?: Omit<HttpRequestInit, 'body' | 'method'>) {\n return await this.send(path, init);\n }\n\n async post(path: string, init?: Omit<HttpRequestInit, 'method'>) {\n return await this.send(path, { ...init, method: \"POST\" });\n }\n\n async put(path: string, init?: Omit<HttpRequestInit, 'method'>) {\n return await this.send(path, { ...init, method: \"PUT\" });\n }\n\n async delete(path: string, init?: Omit<HttpRequestInit, 'method'>) {\n return await this.send(path, { ...init, method: \"DELETE\" });\n }\n\n}\n\nexport default SecurequClient;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/client/index.ts"],"sourcesContent":["import { FileUploadArgs, HttpRequestInit, SecurequClientResponse } from \"./types\";\nimport { chunkFile, getFileId, totalChunks } from \"../include/file\";\nimport Base from \"./Base\";\nimport fileScaner from '../include/file-scaner';\nimport { UploadFileMeta } from \"../server/types\";\n\nexport * from \"./types\"\n\nclass SecurequClient extends Base {\n\n async send(path: string, init?: HttpRequestInit): Promise<SecurequClientResponse> {\n await this.handshake();\n\n init = await this.hooksCall('beforeRequest', path, init) || init;\n const url = await this.url(path)\n if (url.pathname === '/') throw new Error(\"Path is not allowed\")\n\n for (let key in init?.body) {\n if (init?.body[key] instanceof File) {\n init.body[key] = await this.uploadFile(init.body[key], init?.onProgress)\n }\n }\n\n const res = await this.fetch(path, init);\n if ([\"Signeture expired\", \"Request expired\", \"Invalid Signeture\"].includes(res.message)) {\n return await this.send(path, init);\n }\n await this.hooksCall('afterResponse', res);\n return res;\n }\n\n async uploadFile(file: FileUploadArgs, onProgress?: (p: number) => void): Promise<SecurequClientResponse> {\n await this.handshake();\n\n if (!(file instanceof File)) {\n const controller = new AbortController();\n const chunk = file.chunk\n const filemeta = file.meta\n const chunkIndex = filemeta.chunkIndex;\n filemeta.isFinish = chunkIndex + 1 === filemeta.totalChunks;\n const fileId = filemeta.fileId\n const maxFileSize = this.handshakeInfo?.maxFileSize\n if (maxFileSize && filemeta.size > maxFileSize * 1024) {\n throw new Error(`File size exceeds the limit of ${maxFileSize / 1024} MB`)\n }\n\n const abort = async () => {\n await this.deleteFile(fileId);\n controller.abort();\n window.removeEventListener(\"pagehide\", abort);\n }\n\n if (chunkIndex === 0 && this.handshakeInfo?.checkFileType && !fileScaner(chunk).valid) {\n await abort()\n return {\n success: false,\n message: \"Unknown or unsupported file type\",\n data: null,\n code: 0\n }\n }\n\n const info: any = {\n method: 'PUT',\n signal: controller.signal,\n body: {\n chunk,\n filemeta\n },\n onProgress: (p: number) => {\n if (onProgress) {\n const totalProgress = Math.floor(((chunkIndex + 1) / filemeta.totalChunks) * 100)\n const currentProgress = Math.floor((p / 100) / filemeta.totalChunks * 100)\n onProgress(Math.min(totalProgress + currentProgress, 100))\n }\n }\n }\n\n await this.hooksCall('beforeUploadChunk', chunk, filemeta);\n\n let res = await this.fetch('/', info)\n\n if (!res.success) {\n if ([\"Signeture expired\", \"Request expired\", \"Invalid Signeture\"].includes(res.message)) {\n window.removeEventListener(\"pagehide\", abort);\n res = await this.uploadFile(file, onProgress);\n } else {\n await abort()\n return res\n }\n }\n await this.hooksCall('afterUploadChunk', res, filemeta);\n window.removeEventListener(\"pagehide\", abort);\n return {\n success: true,\n message: 'File uploaded successfully',\n data: filemeta,\n code: 200\n }\n } else {\n const fileId = await getFileId(file);\n const _file = await this.hooksCall('beforeUpload', file, fileId) || file;\n const chunkSize = this.handshakeInfo?.chunkSize\n\n // send metadata\n const filemeta: UploadFileMeta = {\n fileId: fileId,\n name: _file.name,\n size: _file.size,\n type: _file.type,\n totalChunks: totalChunks(_file, chunkSize),\n chunkIndex: 0,\n isFinish: false\n }\n\n for await (let { chunk, chunkIndex } of chunkFile(_file, chunkSize)) {\n filemeta.chunkIndex = chunkIndex;\n await this.uploadFile({\n chunk,\n meta: filemeta\n })\n }\n\n const info = {\n success: true,\n message: 'File uploaded successfully',\n data: filemeta,\n code: 200\n }\n await this.hooksCall('afterUpload', info, _file);\n return info\n }\n }\n\n async deleteFile(fileId: string, init?: Omit<HttpRequestInit, 'body' | 'method'>): Promise<SecurequClientResponse> {\n await this.handshake();\n const res = await this.fetch('/', {\n ...init,\n method: 'DELETE',\n body: { fileId }\n });\n if ([\"Signeture expired\", \"Request expired\", \"Invalid Signeture\"].includes(res.message)) {\n return await this.deleteFile(fileId, init);\n }\n return res;\n }\n\n async get(path: string, init?: Omit<HttpRequestInit, 'body' | 'method'>) {\n return await this.send(path, init);\n }\n\n async post(path: string, init?: Omit<HttpRequestInit, 'method'>) {\n return await this.send(path, { ...init, method: \"POST\" });\n }\n\n async put(path: string, init?: Omit<HttpRequestInit, 'method'>) {\n return await this.send(path, { ...init, method: \"PUT\" });\n }\n\n async delete(path: string, init?: Omit<HttpRequestInit, 'method'>) {\n return await this.send(path, { ...init, method: \"DELETE\" });\n }\n\n}\n\nexport default SecurequClient;\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "securequ",
3
- "version": "1.1.28",
3
+ "version": "1.1.29",
4
4
  "type": "module",
5
5
  "description": "High‑level encrypted & compressed HTTP request + chunked upload toolkit for browser ↔ server applications.",
6
6
  "keywords": [],