joopjs 2.0.0
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/CHANGELOG.md +678 -0
- package/README.md +583 -0
- package/dist/a11y.service-C-DQQfgO.d.mts +143 -0
- package/dist/a11y.service-CauEJrJe.d.ts +143 -0
- package/dist/adapters-B6slG6hQ.d.mts +84 -0
- package/dist/adapters-B6slG6hQ.d.ts +84 -0
- package/dist/aes.service-CkoupAww.d.mts +95 -0
- package/dist/aes.service-CkoupAww.d.ts +95 -0
- package/dist/ai/index.d.mts +99 -0
- package/dist/ai/index.d.ts +99 -0
- package/dist/ai/index.js +307 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/index.mjs +304 -0
- package/dist/ai/index.mjs.map +1 -0
- package/dist/analytics/index.d.mts +42 -0
- package/dist/analytics/index.d.ts +42 -0
- package/dist/analytics/index.js +139 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/index.mjs +136 -0
- package/dist/analytics/index.mjs.map +1 -0
- package/dist/angular/index.d.mts +148 -0
- package/dist/angular/index.d.ts +148 -0
- package/dist/angular/index.js +122 -0
- package/dist/angular/index.js.map +1 -0
- package/dist/angular/index.mjs +101 -0
- package/dist/angular/index.mjs.map +1 -0
- package/dist/api/index.d.mts +128 -0
- package/dist/api/index.d.ts +128 -0
- package/dist/api/index.js +1358 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/index.mjs +1332 -0
- package/dist/api/index.mjs.map +1 -0
- package/dist/auth/index.d.mts +105 -0
- package/dist/auth/index.d.ts +105 -0
- package/dist/auth/index.js +989 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/index.mjs +979 -0
- package/dist/auth/index.mjs.map +1 -0
- package/dist/auth.service-DNVB-L4U.d.mts +16 -0
- package/dist/auth.service-PjUUSUIt.d.ts +16 -0
- package/dist/banking/index.d.mts +1530 -0
- package/dist/banking/index.d.ts +1530 -0
- package/dist/banking/index.js +4739 -0
- package/dist/banking/index.js.map +1 -0
- package/dist/banking/index.mjs +4661 -0
- package/dist/banking/index.mjs.map +1 -0
- package/dist/cache/index.d.mts +40 -0
- package/dist/cache/index.d.ts +40 -0
- package/dist/cache/index.js +174 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/index.mjs +172 -0
- package/dist/cache/index.mjs.map +1 -0
- package/dist/client-profile.service-BuPeXVp5.d.mts +28 -0
- package/dist/client-profile.service-D5bRRYQp.d.ts +28 -0
- package/dist/config.models-Cqg04fAQ.d.mts +84 -0
- package/dist/config.models-Cqg04fAQ.d.ts +84 -0
- package/dist/config.service-CrCvI-JS.d.ts +31 -0
- package/dist/config.service-Cz4QQLlf.d.mts +31 -0
- package/dist/core/index.d.mts +4 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.js +631 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/index.mjs +619 -0
- package/dist/core/index.mjs.map +1 -0
- package/dist/crypto-utils-DriNhLdx.d.mts +30 -0
- package/dist/crypto-utils-DriNhLdx.d.ts +30 -0
- package/dist/data-storage.service-DT6xaTxE.d.ts +51 -0
- package/dist/data-storage.service-LvhGRCmw.d.mts +51 -0
- package/dist/deeplink/index.d.mts +39 -0
- package/dist/deeplink/index.d.ts +39 -0
- package/dist/deeplink/index.js +268 -0
- package/dist/deeplink/index.js.map +1 -0
- package/dist/deeplink/index.mjs +265 -0
- package/dist/deeplink/index.mjs.map +1 -0
- package/dist/deeplink.service-Ctd5u243.d.mts +35 -0
- package/dist/deeplink.service-uUuTnY9_.d.ts +35 -0
- package/dist/dev/index.d.mts +20 -0
- package/dist/dev/index.d.ts +20 -0
- package/dist/dev/index.js +51 -0
- package/dist/dev/index.js.map +1 -0
- package/dist/dev/index.mjs +49 -0
- package/dist/dev/index.mjs.map +1 -0
- package/dist/device/index.d.mts +108 -0
- package/dist/device/index.d.ts +108 -0
- package/dist/device/index.js +960 -0
- package/dist/device/index.js.map +1 -0
- package/dist/device/index.mjs +951 -0
- package/dist/device/index.mjs.map +1 -0
- package/dist/differential-privacy-BcAv1G80.d.mts +210 -0
- package/dist/differential-privacy-C8mAUjZr.d.ts +210 -0
- package/dist/encryption/index.d.mts +75 -0
- package/dist/encryption/index.d.ts +75 -0
- package/dist/encryption/index.js +605 -0
- package/dist/encryption/index.js.map +1 -0
- package/dist/encryption/index.mjs +598 -0
- package/dist/encryption/index.mjs.map +1 -0
- package/dist/form-validator-3tkmzr_o.d.mts +72 -0
- package/dist/form-validator-3tkmzr_o.d.ts +72 -0
- package/dist/forms/index.d.mts +59 -0
- package/dist/forms/index.d.ts +59 -0
- package/dist/forms/index.js +446 -0
- package/dist/forms/index.js.map +1 -0
- package/dist/forms/index.mjs +442 -0
- package/dist/forms/index.mjs.map +1 -0
- package/dist/i18n/index.d.mts +37 -0
- package/dist/i18n/index.d.ts +37 -0
- package/dist/i18n/index.js +147 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/index.mjs +145 -0
- package/dist/i18n/index.mjs.map +1 -0
- package/dist/idempotency.service-_6LqhivP.d.mts +372 -0
- package/dist/idempotency.service-eOKoISRD.d.ts +372 -0
- package/dist/index-B_ksKpS1.d.mts +202 -0
- package/dist/index-CqDKWTUP.d.mts +28 -0
- package/dist/index-CqDKWTUP.d.ts +28 -0
- package/dist/index-DFqEoX_l.d.ts +202 -0
- package/dist/index-Dz0gOur2.d.mts +36 -0
- package/dist/index-Dz0gOur2.d.ts +36 -0
- package/dist/index.d.mts +1336 -0
- package/dist/index.d.ts +1336 -0
- package/dist/index.js +19464 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +19155 -0
- package/dist/index.mjs.map +1 -0
- package/dist/india/index.d.mts +75 -0
- package/dist/india/index.d.ts +75 -0
- package/dist/india/index.js +325 -0
- package/dist/india/index.js.map +1 -0
- package/dist/india/index.mjs +303 -0
- package/dist/india/index.mjs.map +1 -0
- package/dist/joop-Bx7Iwj5p.d.mts +155 -0
- package/dist/joop-CA3DMeOO.d.ts +155 -0
- package/dist/native-bridge/index.d.mts +27 -0
- package/dist/native-bridge/index.d.ts +27 -0
- package/dist/native-bridge/index.js +98 -0
- package/dist/native-bridge/index.js.map +1 -0
- package/dist/native-bridge/index.mjs +96 -0
- package/dist/native-bridge/index.mjs.map +1 -0
- package/dist/network/index.d.mts +85 -0
- package/dist/network/index.d.ts +85 -0
- package/dist/network/index.js +454 -0
- package/dist/network/index.js.map +1 -0
- package/dist/network/index.mjs +451 -0
- package/dist/network/index.mjs.map +1 -0
- package/dist/network-monitor-BIwPSXme.d.mts +179 -0
- package/dist/network-monitor-Bqp2hvZr.d.ts +179 -0
- package/dist/notification.service-Dm4fvfZf.d.mts +25 -0
- package/dist/notification.service-tEMKatWJ.d.ts +25 -0
- package/dist/observability/index.d.mts +179 -0
- package/dist/observability/index.d.ts +179 -0
- package/dist/observability/index.js +559 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/index.mjs +552 -0
- package/dist/observability/index.mjs.map +1 -0
- package/dist/oidc-client-DIJcClmB.d.mts +190 -0
- package/dist/oidc-client-DxhyE59t.d.ts +190 -0
- package/dist/platform/index.d.mts +73 -0
- package/dist/platform/index.d.ts +73 -0
- package/dist/platform/index.js +127 -0
- package/dist/platform/index.js.map +1 -0
- package/dist/platform/index.mjs +125 -0
- package/dist/platform/index.mjs.map +1 -0
- package/dist/pwa/index.d.mts +31 -0
- package/dist/pwa/index.d.ts +31 -0
- package/dist/pwa/index.js +247 -0
- package/dist/pwa/index.js.map +1 -0
- package/dist/pwa/index.mjs +244 -0
- package/dist/pwa/index.mjs.map +1 -0
- package/dist/react/index.d.mts +133 -0
- package/dist/react/index.d.ts +133 -0
- package/dist/react/index.js +632 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/index.mjs +630 -0
- package/dist/react/index.mjs.map +1 -0
- package/dist/router/index.d.mts +39 -0
- package/dist/router/index.d.ts +39 -0
- package/dist/router/index.js +168 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/index.mjs +166 -0
- package/dist/router/index.mjs.map +1 -0
- package/dist/security/index.d.mts +206 -0
- package/dist/security/index.d.ts +206 -0
- package/dist/security/index.js +1297 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/index.mjs +1285 -0
- package/dist/security/index.mjs.map +1 -0
- package/dist/session/index.d.mts +115 -0
- package/dist/session/index.d.ts +115 -0
- package/dist/session/index.js +297 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/index.mjs +292 -0
- package/dist/session/index.mjs.map +1 -0
- package/dist/state/index.d.mts +43 -0
- package/dist/state/index.d.ts +43 -0
- package/dist/state/index.js +156 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/index.mjs +152 -0
- package/dist/state/index.mjs.map +1 -0
- package/dist/statement-parser-BHQtXwCM.d.ts +260 -0
- package/dist/statement-parser-C2qNmb49.d.mts +260 -0
- package/dist/storage/index.d.mts +40 -0
- package/dist/storage/index.d.ts +40 -0
- package/dist/storage/index.js +256 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/index.mjs +252 -0
- package/dist/storage/index.mjs.map +1 -0
- package/dist/sync/index.d.mts +69 -0
- package/dist/sync/index.d.ts +69 -0
- package/dist/sync/index.js +330 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/index.mjs +323 -0
- package/dist/sync/index.mjs.map +1 -0
- package/dist/sync-engine-DCIMRG5s.d.ts +61 -0
- package/dist/sync-engine-DZqyKHkK.d.mts +61 -0
- package/dist/theme/index.d.mts +53 -0
- package/dist/theme/index.d.ts +53 -0
- package/dist/theme/index.js +169 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/index.mjs +167 -0
- package/dist/theme/index.mjs.map +1 -0
- package/dist/ui/index.d.mts +66 -0
- package/dist/ui/index.d.ts +66 -0
- package/dist/ui/index.js +811 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/index.mjs +803 -0
- package/dist/ui/index.mjs.map +1 -0
- package/dist/utilities/index.d.mts +199 -0
- package/dist/utilities/index.d.ts +199 -0
- package/dist/utilities/index.js +1991 -0
- package/dist/utilities/index.js.map +1 -0
- package/dist/utilities/index.mjs +1923 -0
- package/dist/utilities/index.mjs.map +1 -0
- package/dist/validation/index.d.mts +60 -0
- package/dist/validation/index.d.ts +60 -0
- package/dist/validation/index.js +460 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/index.mjs +455 -0
- package/dist/validation/index.mjs.map +1 -0
- package/dist/vue/index.d.mts +135 -0
- package/dist/vue/index.d.ts +135 -0
- package/dist/vue/index.js +621 -0
- package/dist/vue/index.js.map +1 -0
- package/dist/vue/index.mjs +619 -0
- package/dist/vue/index.mjs.map +1 -0
- package/dist/watermark.service-Detur5tq.d.ts +235 -0
- package/dist/watermark.service-QNegMeQZ.d.mts +235 -0
- package/dist/workers/index.d.mts +42 -0
- package/dist/workers/index.d.ts +42 -0
- package/dist/workers/index.js +359 -0
- package/dist/workers/index.js.map +1 -0
- package/dist/workers/index.mjs +356 -0
- package/dist/workers/index.mjs.map +1 -0
- package/dist/workflow/index.d.mts +99 -0
- package/dist/workflow/index.d.ts +99 -0
- package/dist/workflow/index.js +282 -0
- package/dist/workflow/index.js.map +1 -0
- package/dist/workflow/index.mjs +279 -0
- package/dist/workflow/index.mjs.map +1 -0
- package/package.json +226 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/common.utility.ts","../../src/models/error.models.ts","../../src/encryption/gcm.service.ts","../../src/encryption/rsa.service.ts","../../src/encryption/aes.service.ts","../../src/encryption/x25519.service.ts","../../src/encryption/e2e.service.ts","../../src/encryption/crypto-utils.ts"],"names":["encText","x25519","base64Encode","chacha20poly1305","base64Decode"],"mappings":"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","file":"index.js","sourcesContent":["/** Remove a trailing slash from a URL string. */\nexport function removeTrailingSlash(url: string): string {\n return url?.endsWith('/') ? url.slice(0, -1) : url;\n}\n\n/** Serialize a plain object to a URL-encoded query string. */\nexport function objectToQueryString(obj: Record<string, any>): string {\n return Object.entries(obj)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)\n .join('&');\n}\n\n/** Deep-clone a JSON-serializable object. */\nexport function deepClone<T>(obj: T): T {\n return JSON.parse(JSON.stringify(obj));\n}\n\n/** Check if a value is a plain object (not an array, not null). */\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/** Generate a random alphanumeric string of a given length. */\nexport function randomString(length: number, charset = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'): string {\n let result = '';\n for (let i = 0; i < length; i++) {\n result += charset[Math.floor(Math.random() * charset.length)];\n }\n return result;\n}\n\n/** Convert a string to its hex representation. */\nexport function stringToHex(input: string): string {\n let result = '';\n for (let i = 0; i < input.length; i++) {\n result += input.charCodeAt(i).toString(16).slice(-4);\n }\n return result;\n}\n\n/** Convert an ArrayBuffer to a lowercase hex string. */\nexport function bufferToHex(buffer: ArrayBuffer | Uint8Array): string {\n return [...new Uint8Array(buffer)]\n .map(b => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\n/** Serialize a nested object into flat form-data-style string segments. */\nexport function flattenObject(obj: Record<string, any>, prefix = ''): Record<string, string> {\n const result: Record<string, string> = {};\n for (const [key, value] of Object.entries(obj)) {\n const fullKey = prefix ? `${prefix}.${key}` : key;\n if (isPlainObject(value)) {\n Object.assign(result, flattenObject(value as Record<string, any>, fullKey));\n } else {\n result[fullKey] = String(value);\n }\n }\n return result;\n}\n","export type JoopErrorType = 'screen' | 'popup' | 'quiet' | 'inline';\n\nexport interface JoopError {\n status?: number;\n title?: string;\n message?: string;\n description?: string;\n icon?: string;\n style?: string;\n isTimeout?: boolean;\n type?: JoopErrorType;\n customData?: any;\n buttons?: JoopErrorButton[];\n}\n\nexport interface JoopErrorButton {\n label: string;\n action?: string;\n style?: string;\n actionData?: any;\n}\n\nexport class JoopHttpError extends Error {\n constructor(\n public readonly statusCode: number,\n public readonly statusText: string,\n public readonly body?: any\n ) {\n super(`HTTP ${statusCode}: ${statusText}`);\n this.name = 'JoopHttpError';\n }\n}\n\nexport class JoopEncryptionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'JoopEncryptionError';\n }\n}\n","import { bufferToHex } from '../utilities/common.utility';\nimport { JoopEncryptionError } from '../models/error.models';\n\n/**\n * AES-GCM symmetric encryption / decryption.\n * Relies on the WebCrypto API (available in all modern browsers and Node 16+).\n */\nexport class JoopGcmService {\n\n async encrypt(data: string, aesKey: string): Promise<string> {\n const keyBuffer = this._keyToBuffer(aesKey);\n const iv = await this._deriveIV(aesKey, data);\n\n const cryptoKey = await crypto.subtle.importKey('raw', keyBuffer, { name: 'AES-GCM' }, false, ['encrypt']);\n const encrypted = await crypto.subtle.encrypt(\n { name: 'AES-GCM', iv: this._toSafeUint8Array(iv), tagLength: 128 },\n cryptoKey,\n new TextEncoder().encode(data)\n );\n\n const ivBytes = Array.from(iv);\n const encBytes = Array.from(new Uint8Array(encrypted));\n return bufferToHex(new Uint8Array([...ivBytes, ...encBytes]));\n }\n\n async decrypt(hexData: string, aesKey: string): Promise<string> {\n const parsedIV = hexData.substring(0, 24);\n const keyBuffer = this._keyToBuffer(aesKey);\n const iv = this._toSafeUint8Array(this._hexToUint8(parsedIV));\n const encrypted = this._toSafeUint8Array(this._hexToUint8(hexData.substring(24)));\n\n const importedKey = await crypto.subtle.importKey('raw', keyBuffer, 'AES-GCM', true, ['decrypt']);\n try {\n const plaintext = await crypto.subtle.decrypt({ name: 'AES-GCM', iv }, importedKey, encrypted);\n return new TextDecoder().decode(new Uint8Array(plaintext));\n } catch {\n throw new JoopEncryptionError('AES-GCM decryption failed — wrong key or corrupted data');\n }\n }\n\n private async _deriveIV(key: string, data: string): Promise<Uint8Array> {\n const randomData = btoa(String.fromCharCode(...Array.from(crypto.getRandomValues(new Uint8Array(12)))));\n return this._pbkdf2(key + randomData, data + Date.now().toString(), 1, 12, 'SHA-256');\n }\n\n private async _pbkdf2(message: string, salt: string, iterations: number, keyLen: number, algorithm: string): Promise<Uint8Array> {\n const enc = new TextEncoder();\n const keyMaterial = await crypto.subtle.importKey('raw', enc.encode(message), { name: 'PBKDF2' }, false, ['deriveBits']);\n const bits = await crypto.subtle.deriveBits(\n { name: 'PBKDF2', salt: enc.encode(salt), iterations, hash: algorithm },\n keyMaterial,\n keyLen * 8\n );\n return new Uint8Array(bits);\n }\n\n private _keyToBuffer(key: string): ArrayBuffer {\n const enc = new TextEncoder();\n const bytes = enc.encode(key);\n const hex = bufferToHex(bytes);\n return this._toSafeUint8Array(this._hexToUint8(hex)).buffer;\n }\n\n private _hexToUint8(hex: string): Uint8Array {\n hex = hex.replace(/^0x/, '');\n const pairs = hex.match(/[\\dA-F]{2}/gi) ?? [];\n return new Uint8Array(pairs.map(s => parseInt(s, 16)));\n }\n\n /** Copy Uint8Array into a fresh ArrayBuffer to satisfy TS5.3+ BufferSource constraints. */\n private _toSafeUint8Array(src: Uint8Array): Uint8Array<ArrayBuffer> {\n const buf = new ArrayBuffer(src.length);\n new Uint8Array(buf).set(src);\n return new Uint8Array(buf) as Uint8Array<ArrayBuffer>;\n }\n}\n","import { JoopRsaKeyPair } from '../models/api.models';\nimport { bufferToHex } from '../utilities/common.utility';\nimport { JoopEncryptionError } from '../models/error.models';\n\n/**\n * RSA-OAEP-256 encryption using the WebCrypto API.\n * Encrypts plaintext with a server-supplied public key (hex modulus + exponent).\n */\nexport class JoopRsaService {\n\n async encrypt(data: string, keys: JoopRsaKeyPair): Promise<string> {\n let { modulus, exponent } = keys;\n\n if (modulus.length === 514) {\n modulus = modulus.slice(2);\n }\n\n let encBuffer = '';\n\n try {\n const cryptoKey = await crypto.subtle.importKey(\n 'jwk',\n {\n kty: 'RSA',\n e: this._b64ToB64Url(this._hexToBase64(exponent)),\n n: this._b64ToB64Url(this._hexToBase64(modulus)),\n alg: 'RSA-OAEP-256',\n ext: true,\n },\n { name: 'RSA-OAEP', hash: { name: 'SHA-256' } },\n true,\n ['encrypt']\n );\n\n const encoded = new TextEncoder().encode(data);\n const encData = await crypto.subtle.encrypt({ name: 'RSA-OAEP' }, cryptoKey, encoded);\n encBuffer = bufferToHex(encData);\n } catch (err) {\n throw new JoopEncryptionError(`RSA-OAEP encryption failed: ${err}`);\n }\n\n return encBuffer;\n }\n\n private _hexToBase64(hex: string): string {\n return btoa(\n (hex.match(/\\w{2}/g) ?? [])\n .map(a => String.fromCodePoint(parseInt(a, 16) || 0))\n .join('')\n );\n }\n\n private _b64ToB64Url(b64: string): string {\n return b64.replaceAll('=', '').replaceAll('+', '-').replaceAll('/', '_');\n }\n}\n","import { JoopRsaKeyPair } from '../models/api.models';\nimport { randomString, stringToHex } from '../utilities/common.utility';\nimport { JoopGcmService } from './gcm.service';\nimport { JoopRsaService } from './rsa.service';\n\n/**\n * AES end-to-end encryption orchestrator.\n *\n * Supports two modes:\n * - Session mode (e2eRsaStatus = '1'): one AES key per session\n * - Request mode (e2eRsaStatus = '0'): new AES key per request\n */\nexport class JoopAesService {\n private _e2eRsaStatus = '';\n private _e2eStatus = '';\n private _modulus = '';\n private _exponent = '';\n private _random = '';\n private _genKey = '';\n private _genKeyHex = '';\n\n constructor(\n private readonly _gcm: JoopGcmService,\n private readonly _rsa: JoopRsaService\n ) {}\n\n get e2eRsaStatus(): string { return this._e2eRsaStatus; }\n set e2eRsaStatus(v: string) { this._e2eRsaStatus = v; }\n\n get e2eStatus(): string { return this._e2eStatus; }\n set e2eStatus(v: string) { this._e2eStatus = v; }\n\n get modulus(): string { return this._modulus; }\n set modulus(v: string) { this._modulus = v; }\n\n get exponent(): string { return this._exponent; }\n set exponent(v: string) { this._exponent = v; }\n\n get random(): string { return this._random; }\n set random(v: string) { this._random = v; }\n\n get genKey(): string { return this._genKey; }\n set genKey(v: string) { this._genKey = v; }\n\n /** Returns true when E2E encryption is active (not on the initial request). */\n isE2EEnabled(isInitialRequest: boolean): boolean {\n return !isInitialRequest && this._e2eStatus === '1';\n }\n\n /**\n * Encrypt serialised request data.\n * Returns an object with `encryptedText` (and optionally `pageToken` already embedded in data).\n */\n async processEncryption(serializedData: string, pageToken: string): Promise<Record<string, string>> {\n if (serializedData && pageToken) {\n serializedData = `${serializedData}&pageToken=${pageToken}`;\n }\n\n const isSessionMode = this._e2eRsaStatus === '1';\n\n if (isSessionMode) {\n if (!serializedData) return {};\n const encText = await this._gcm.encrypt(serializedData, this._genKey);\n return { encryptedText: encText };\n }\n\n // Request mode — generate a fresh AES key per request\n this._generateKey();\n const rsaEncryptedKey = await this._encryptAesKey();\n\n if (!serializedData) return { encryptedText: rsaEncryptedKey };\n const encText = await this._gcm.encrypt(serializedData, this._genKey);\n return { encryptedText: rsaEncryptedKey + encText };\n }\n\n /** Decrypt an encrypted response payload. */\n async decryptResponse(encryptedData: string): Promise<string> {\n return this._gcm.decrypt(encryptedData, this._genKey);\n }\n\n clearKeys(): void {\n this._e2eStatus = '';\n this._e2eRsaStatus = '';\n this._genKey = '';\n this._genKeyHex = '';\n this._modulus = '';\n this._exponent = '';\n this._random = '';\n }\n\n private _generateKey(): void {\n this._genKey = randomString(16, '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ');\n this._genKeyHex = stringToHex(this._genKey);\n }\n\n private _encryptAesKey(): Promise<string> {\n const keys: JoopRsaKeyPair = {\n modulus: this._modulus,\n exponent: this._exponent,\n randomNumber: this._random,\n };\n return this._rsa.encrypt(this._genKeyHex, keys);\n }\n}\n","import { encode as base64Encode, decode as base64Decode } from 'base64-arraybuffer';\nimport { x25519 } from '@noble/curves/ed25519.js';\nimport { chacha20poly1305 } from '@noble/ciphers/chacha.js';\nimport { JoopEncryptionError } from '../models/error.models';\n\n/**\n * X25519 + ChaCha20-Poly1305 end-to-end encryption.\n *\n * Protocol:\n * 1. `init()` — generates a local X25519 key pair; returns X.509 public key (base64)\n * 2. `keyExchange()`— DH with server public key + HKDF-SHA512 key derivation\n * 3. `encrypt()` — ChaCha20-Poly1305 encrypt\n * 4. `decrypt()` — ChaCha20-Poly1305 decrypt\n */\nexport class JoopX25519Service {\n private static readonly INFO_ENC_KEY = 'enc-key';\n private static readonly INFO_ENC_IV = 'enc-iv';\n private static readonly INFO_MAC_KEY = 'mac-iv';\n\n private _privateKey: Uint8Array | null = null;\n private _publicKey: Uint8Array | null = null;\n private _encKey: Uint8Array | null = null;\n private _nonce: Uint8Array | null = null;\n private _macKey: Uint8Array | null = null;\n private _ready = false;\n\n /** Generate key pair; returns base64-encoded X.509 public key to send to the server. */\n async init(): Promise<string> {\n try {\n const priv = x25519.utils.randomSecretKey();\n const pub = x25519.getPublicKey(priv);\n this._privateKey = priv;\n this._publicKey = pub;\n const x509 = this._encodeX509(pub);\n const buf = new ArrayBuffer(x509.byteLength);\n new Uint8Array(buf).set(x509);\n this._ready = true;\n return base64Encode(buf);\n } catch (err) {\n this._reset();\n throw new JoopEncryptionError(`X25519 init failed: ${err}`);\n }\n }\n\n /** Perform DH key exchange and derive ChaCha20-Poly1305 keys. */\n async keyExchange(serverPublicKeyBase64: string, serverRandomBase64: string): Promise<void> {\n this._assertReady();\n try {\n const serverPubRaw = this._base64UrlDecode(serverPublicKeyBase64);\n const serverPub = this._decodeX509(serverPubRaw);\n const salt = this._base64UrlDecode(serverRandomBase64);\n const shared = x25519.getSharedSecret(this._privateKey!, serverPub);\n\n const prk = await this._hkdfExtract(salt, shared);\n this._nonce = await this._hkdfExpand(prk, JoopX25519Service.INFO_ENC_IV, 12);\n this._encKey = await this._hkdfExpand(prk, JoopX25519Service.INFO_ENC_KEY, 32);\n this._macKey = await this._hkdfExpand(prk, JoopX25519Service.INFO_MAC_KEY, 16);\n } catch (err) {\n this._reset();\n throw new JoopEncryptionError(`Key exchange failed: ${err}`);\n }\n }\n\n async encrypt(plainText: string): Promise<string> {\n this._assertReady();\n this._assertKeysReady();\n try {\n const data = new TextEncoder().encode(plainText);\n const cipher = chacha20poly1305(this._encKey!, this._nonce!);\n const ct = cipher.encrypt(data);\n const buf = new ArrayBuffer(ct.byteLength);\n new Uint8Array(buf).set(ct);\n return base64Encode(buf);\n } catch (err) {\n throw new JoopEncryptionError(`Encryption failed: ${err}`);\n }\n }\n\n async decrypt(cipherBase64: string): Promise<string> {\n this._assertReady();\n this._assertKeysReady();\n try {\n const ct = new Uint8Array(base64Decode(cipherBase64));\n const cipher = chacha20poly1305(this._encKey!, this._nonce!);\n return new TextDecoder().decode(cipher.decrypt(ct));\n } catch (err) {\n throw new JoopEncryptionError(`Decryption failed: ${err}`);\n }\n }\n\n reset(): void { this._reset(); }\n\n // ──────────────── private helpers ────────────────\n\n private _assertReady(): void {\n if (!this._ready || !this._privateKey || !this._publicKey) {\n throw new JoopEncryptionError('X25519Service not initialised — call init() first.');\n }\n }\n\n private _assertKeysReady(): void {\n if (!this._encKey || !this._nonce || !this._macKey) {\n throw new JoopEncryptionError('X25519Service keys not derived — call keyExchange() first.');\n }\n }\n\n private _reset(): void {\n this._privateKey = this._publicKey = this._encKey = this._nonce = this._macKey = null;\n this._ready = false;\n }\n\n private _encodeX509(raw: Uint8Array): Uint8Array {\n if (raw.length !== 32) throw new JoopEncryptionError('Invalid X25519 public key length');\n const prefix = new Uint8Array([0x30, 0x2A, 0x30, 0x05, 0x06, 0x03, 0x2B, 0x65, 0x6E, 0x03, 0x21, 0x00]);\n return new Uint8Array([...prefix, ...raw]);\n }\n\n private _decodeX509(x509: Uint8Array): Uint8Array {\n if (x509.length < 44) throw new JoopEncryptionError('Invalid X.509 key format');\n return x509.slice(12);\n }\n\n private _base64UrlDecode(s: string): Uint8Array {\n let b64 = s.replaceAll('-', '+').replaceAll('_', '/');\n while (b64.length % 4 !== 0) b64 += '=';\n return new Uint8Array(base64Decode(b64));\n }\n\n private async _hkdfExtract(salt: Uint8Array, ikm: Uint8Array): Promise<Uint8Array> {\n const saltBuf = new ArrayBuffer(salt.byteLength);\n new Uint8Array(saltBuf).set(salt);\n const key = await crypto.subtle.importKey('raw', saltBuf, { name: 'HMAC', hash: 'SHA-512' }, false, ['sign']);\n const ikmBuf = new ArrayBuffer(ikm.byteLength);\n new Uint8Array(ikmBuf).set(ikm);\n return new Uint8Array(await crypto.subtle.sign('HMAC', key, ikmBuf));\n }\n\n private async _hkdfExpand(prk: Uint8Array, info: string, length: number): Promise<Uint8Array> {\n const enc = new TextEncoder();\n const infoBytes = enc.encode(info);\n const prkBuf = new ArrayBuffer(prk.byteLength);\n new Uint8Array(prkBuf).set(prk);\n const key = await crypto.subtle.importKey('raw', prkBuf, { name: 'HMAC', hash: 'SHA-512' }, false, ['sign']);\n\n let T = new Uint8Array(0);\n let output = new Uint8Array(0);\n let counter = 0;\n\n while (output.length < length) {\n counter++;\n const input = new Uint8Array([...T, ...infoBytes, counter]);\n T = new Uint8Array(await crypto.subtle.sign('HMAC', key, input));\n output = new Uint8Array([...output, ...T]);\n }\n return output.slice(0, length);\n }\n}\n","// JoopE2EService — RSA key pair management, hybrid encryption, and digital signatures\n// Uses WebCrypto API: RSA-OAEP for key wrapping, AES-GCM for data, RSA-PSS for signatures\n\nexport interface JoopRsaKeyPair {\n publicKey: CryptoKey;\n privateKey: CryptoKey;\n}\n\nexport interface JoopE2EPayload {\n wrappedKey: string; // base64 AES key wrapped with RSA public key\n iv: string; // base64 AES-GCM IV\n ciphertext: string; // base64 AES-GCM encrypted data\n algorithm: 'RSA-OAEP+AES-GCM';\n}\n\n// Key generation params (hash as string is valid for RsaHashedKeyGenParams)\nconst _oaepGen = (bits: number): RsaHashedKeyGenParams => ({\n name: 'RSA-OAEP', modulusLength: bits, publicExponent: new Uint8Array([1, 0, 1]), hash: 'SHA-256',\n});\nconst _pssGen = (bits: number): RsaHashedKeyGenParams => ({\n name: 'RSA-PSS', modulusLength: bits, publicExponent: new Uint8Array([1, 0, 1]), hash: 'SHA-256',\n});\n// Import params (hash as KeyAlgorithm object required by importKey overload)\nconst OAEP_IMP = { name: 'RSA-OAEP', hash: { name: 'SHA-256' } };\nconst PSS_IMP = { name: 'RSA-PSS', hash: { name: 'SHA-256' } };\n\nfunction _b64(buf: ArrayBuffer | ArrayBufferView): string {\n const bytes = ArrayBuffer.isView(buf) ? new Uint8Array(buf.buffer as ArrayBuffer, buf.byteOffset, buf.byteLength) : new Uint8Array(buf);\n return btoa(String.fromCharCode(...bytes));\n}\nfunction _unb64(s: string): Uint8Array<ArrayBuffer> {\n return new Uint8Array(Array.from(atob(s), c => c.charCodeAt(0)));\n}\nfunction _pemToBytes(pem: string): Uint8Array<ArrayBuffer> {\n return _unb64(pem.replace(/-----[^-]+-----/g, '').replace(/\\s/g, ''));\n}\nfunction _bytesToPem(bytes: ArrayBuffer, type: string): string {\n const b64 = _b64(bytes);\n const lines = b64.match(/.{1,64}/g)?.join('\\n') ?? b64;\n return `-----BEGIN ${type}-----\\n${lines}\\n-----END ${type}-----`;\n}\n\nexport class JoopE2EService {\n\n // ── Key generation ─────────────────────────────────────────────────────────\n\n async generateKeyPair(bits: 2048 | 4096 = 2048): Promise<JoopRsaKeyPair> {\n const pair = await crypto.subtle.generateKey(_oaepGen(bits), true, ['encrypt', 'decrypt']);\n return pair as JoopRsaKeyPair;\n }\n\n async generateSigningKeyPair(bits: 2048 | 4096 = 2048): Promise<JoopRsaKeyPair> {\n const pair = await crypto.subtle.generateKey(_pssGen(bits), true, ['sign', 'verify']);\n return pair as JoopRsaKeyPair;\n }\n\n // ── PEM export/import ──────────────────────────────────────────────────────\n\n async exportPublicKeyPem(key: CryptoKey): Promise<string> {\n return _bytesToPem(await crypto.subtle.exportKey('spki', key), 'PUBLIC KEY');\n }\n\n async exportPrivateKeyPem(key: CryptoKey): Promise<string> {\n return _bytesToPem(await crypto.subtle.exportKey('pkcs8', key), 'PRIVATE KEY');\n }\n\n async importPublicKeyPem(pem: string, usage: 'encrypt' | 'verify' = 'encrypt'): Promise<CryptoKey> {\n const algo = usage === 'encrypt' ? OAEP_IMP : PSS_IMP;\n return crypto.subtle.importKey('spki', _pemToBytes(pem), algo, true, [usage]);\n }\n\n async importPrivateKeyPem(pem: string, usage: 'decrypt' | 'sign' = 'decrypt'): Promise<CryptoKey> {\n const algo = usage === 'decrypt' ? OAEP_IMP : PSS_IMP;\n return crypto.subtle.importKey('pkcs8', _pemToBytes(pem), algo, true, [usage]);\n }\n\n // ── JWK export/import ──────────────────────────────────────────────────────\n\n async exportPublicKeyJwk(key: CryptoKey): Promise<JsonWebKey> {\n return crypto.subtle.exportKey('jwk', key);\n }\n\n async importPublicKeyJwk(jwk: JsonWebKey, usage: 'encrypt' | 'verify' = 'encrypt'): Promise<CryptoKey> {\n const algo = usage === 'encrypt' ? OAEP_IMP : PSS_IMP;\n return crypto.subtle.importKey('jwk', jwk, algo, true, [usage]);\n }\n\n async exportPrivateKeyJwk(key: CryptoKey): Promise<JsonWebKey> {\n return crypto.subtle.exportKey('jwk', key);\n }\n\n // ── Hybrid encryption (RSA wraps AES key) ─────────────────────────────────\n\n async encryptForRecipient(plaintext: string, publicKey: CryptoKey | string): Promise<JoopE2EPayload> {\n const pk = typeof publicKey === 'string' ? await this.importPublicKeyPem(publicKey, 'encrypt') : publicKey;\n\n const aesKey = await crypto.subtle.generateKey({ name: 'AES-GCM', length: 256 }, true, ['encrypt']);\n const iv = crypto.getRandomValues(new Uint8Array(12));\n\n const cipherBuf = await crypto.subtle.encrypt({ name: 'AES-GCM', iv }, aesKey, new TextEncoder().encode(plaintext));\n const rawAes = await crypto.subtle.exportKey('raw', aesKey);\n const wrappedBuf = await crypto.subtle.encrypt({ name: 'RSA-OAEP' }, pk, rawAes);\n\n return { wrappedKey: _b64(wrappedBuf), iv: _b64(iv), ciphertext: _b64(cipherBuf), algorithm: 'RSA-OAEP+AES-GCM' };\n }\n\n async decryptFromSender(payload: JoopE2EPayload, privateKey: CryptoKey | string): Promise<string> {\n const sk = typeof privateKey === 'string' ? await this.importPrivateKeyPem(privateKey, 'decrypt') : privateKey;\n const rawAes = await crypto.subtle.decrypt({ name: 'RSA-OAEP' }, sk, _unb64(payload.wrappedKey));\n const aesKey = await crypto.subtle.importKey('raw', rawAes, 'AES-GCM', false, ['decrypt']);\n const plainBuf = await crypto.subtle.decrypt({ name: 'AES-GCM', iv: _unb64(payload.iv) }, aesKey, _unb64(payload.ciphertext));\n return new TextDecoder().decode(plainBuf);\n }\n\n // ── Digital signatures (RSA-PSS) ──────────────────────────────────────────\n\n async sign(data: string, privateKey: CryptoKey | string): Promise<string> {\n const sk = typeof privateKey === 'string' ? await this.importPrivateKeyPem(privateKey, 'sign') : privateKey;\n const buf = await crypto.subtle.sign({ name: 'RSA-PSS', saltLength: 32 }, sk, new TextEncoder().encode(data));\n return _b64(buf);\n }\n\n async verify(data: string, signature: string, publicKey: CryptoKey | string): Promise<boolean> {\n try {\n const pk = typeof publicKey === 'string' ? await this.importPublicKeyPem(publicKey, 'verify') : publicKey;\n return crypto.subtle.verify({ name: 'RSA-PSS', saltLength: 32 }, pk, _unb64(signature), new TextEncoder().encode(data));\n } catch { return false; }\n }\n\n // ── Session key utilities ─────────────────────────────────────────────────\n\n async generateSessionKey(): Promise<{ key: CryptoKey; exported: string }> {\n const key = await crypto.subtle.generateKey({ name: 'AES-GCM', length: 256 }, true, ['encrypt', 'decrypt']);\n return { key, exported: _b64(await crypto.subtle.exportKey('raw', key)) };\n }\n\n async wrapSessionKey(sessionKey: CryptoKey, recipientPublicKey: CryptoKey): Promise<string> {\n const raw = await crypto.subtle.exportKey('raw', sessionKey);\n return _b64(await crypto.subtle.encrypt({ name: 'RSA-OAEP' }, recipientPublicKey, raw));\n }\n\n async unwrapSessionKey(wrappedKey: string, privateKey: CryptoKey): Promise<CryptoKey> {\n const raw = await crypto.subtle.decrypt({ name: 'RSA-OAEP' }, privateKey, _unb64(wrappedKey));\n return crypto.subtle.importKey('raw', raw, 'AES-GCM', false, ['encrypt', 'decrypt']);\n }\n\n // ── Direct RSA encrypt/decrypt (small payloads only, <190 bytes for 2048-bit key) ──\n\n async encryptRaw(data: string, publicKey: CryptoKey | string): Promise<string> {\n const pk = typeof publicKey === 'string' ? await this.importPublicKeyPem(publicKey, 'encrypt') : publicKey;\n return _b64(await crypto.subtle.encrypt({ name: 'RSA-OAEP' }, pk, new TextEncoder().encode(data)));\n }\n\n async decryptRaw(ciphertext: string, privateKey: CryptoKey | string): Promise<string> {\n const sk = typeof privateKey === 'string' ? await this.importPrivateKeyPem(privateKey, 'decrypt') : privateKey;\n return new TextDecoder().decode(await crypto.subtle.decrypt({ name: 'RSA-OAEP' }, sk, _unb64(ciphertext)));\n }\n\n // ── Key fingerprint ───────────────────────────────────────────────────────\n\n async fingerprint(publicKey: CryptoKey): Promise<string> {\n const spki = await crypto.subtle.exportKey('spki', publicKey);\n const hash = await crypto.subtle.digest('SHA-256', spki);\n return Array.from(new Uint8Array(hash)).map(b => b.toString(16).padStart(2, '0')).join(':');\n }\n}\n","// Framework-agnostic cryptographic utilities built on WebCrypto\n\nexport interface JoopPasswordHash {\n hash: string; // hex\n salt: string; // hex\n iterations: number;\n keyLen: number;\n}\n\nfunction _hex(buf: ArrayBuffer): string {\n return Array.from(new Uint8Array(buf)).map(b => b.toString(16).padStart(2, '0')).join('');\n}\nfunction _hexToBytes(hex: string): Uint8Array<ArrayBuffer> {\n return new Uint8Array(hex.match(/.{2}/g)!.map(h => parseInt(h, 16)));\n}\n\nexport class JoopCryptoUtils {\n\n // ── Hashing ──────────────────────────────────────────────────────────────\n\n async sha256(data: string | ArrayBuffer): Promise<string> {\n const buf = typeof data === 'string' ? new TextEncoder().encode(data) : data;\n return _hex(await crypto.subtle.digest('SHA-256', buf));\n }\n\n async sha512(data: string | ArrayBuffer): Promise<string> {\n const buf = typeof data === 'string' ? new TextEncoder().encode(data) : data;\n return _hex(await crypto.subtle.digest('SHA-512', buf));\n }\n\n async sha1(data: string | ArrayBuffer): Promise<string> {\n const buf = typeof data === 'string' ? new TextEncoder().encode(data) : data;\n return _hex(await crypto.subtle.digest('SHA-1', buf));\n }\n\n // ── HMAC ─────────────────────────────────────────────────────────────────\n\n async hmac(data: string, secret: string, algo: 'SHA-256' | 'SHA-512' | 'SHA-1' = 'SHA-256'): Promise<string> {\n const key = await crypto.subtle.importKey(\n 'raw', new TextEncoder().encode(secret),\n { name: 'HMAC', hash: algo }, false, ['sign'],\n );\n return _hex(await crypto.subtle.sign('HMAC', key, new TextEncoder().encode(data)));\n }\n\n async hmacVerify(data: string, secret: string, signature: string, algo: 'SHA-256' | 'SHA-512' | 'SHA-1' = 'SHA-256'): Promise<boolean> {\n const expected = await this.hmac(data, secret, algo);\n return this.timingSafeEqual(expected, signature);\n }\n\n // ── PBKDF2 ───────────────────────────────────────────────────────────────\n\n async pbkdf2(\n password: string,\n salt: string,\n iterations = 100_000,\n keyLen = 32,\n hash: 'SHA-256' | 'SHA-512' = 'SHA-256',\n ): Promise<string> {\n const key = await crypto.subtle.importKey('raw', new TextEncoder().encode(password), 'PBKDF2', false, ['deriveBits']);\n const bits = await crypto.subtle.deriveBits(\n { name: 'PBKDF2', salt: new TextEncoder().encode(salt), iterations, hash },\n key, keyLen * 8,\n );\n return _hex(bits);\n }\n\n // ── Password hashing ──────────────────────────────────────────────────────\n\n async hashPassword(password: string, salt?: string, iterations = 100_000): Promise<JoopPasswordHash> {\n const s = salt ?? this.generateSalt();\n const hash = await this.pbkdf2(password, s, iterations);\n return { hash, salt: s, iterations, keyLen: 32 };\n }\n\n async verifyPassword(password: string, record: JoopPasswordHash): Promise<boolean> {\n const { hash } = await this.hashPassword(password, record.salt, record.iterations);\n return this.timingSafeEqual(hash, record.hash);\n }\n\n // ── Utilities ──────────────────────────────────────────────────────────────\n\n generateSalt(bytes = 32): string { return _hex(crypto.getRandomValues(new Uint8Array(bytes)).buffer as ArrayBuffer); }\n\n randomBytes(length: number): Uint8Array<ArrayBuffer> {\n return new Uint8Array(crypto.getRandomValues(new Uint8Array(length)));\n }\n\n randomHex(bytes = 16): string { return _hex(this.randomBytes(bytes).buffer as ArrayBuffer); }\n\n uuid(): string {\n const bytes = crypto.getRandomValues(new Uint8Array(16));\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex = _hex(bytes.buffer as ArrayBuffer);\n return `${hex.slice(0,8)}-${hex.slice(8,12)}-${hex.slice(12,16)}-${hex.slice(16,20)}-${hex.slice(20)}`;\n }\n\n /** Constant-time string comparison to prevent timing attacks */\n timingSafeEqual(a: string, b: string): boolean {\n if (a.length !== b.length) return false;\n let diff = 0;\n for (let i = 0; i < a.length; i++) diff |= a.charCodeAt(i) ^ b.charCodeAt(i);\n return diff === 0;\n }\n\n hexToBytes(hex: string): Uint8Array<ArrayBuffer> { return _hexToBytes(hex); }\n bytesToHex(bytes: Uint8Array): string { return _hex(bytes.buffer as ArrayBuffer); }\n\n base64ToHex(b64: string): string { return this.bytesToHex(new Uint8Array(Array.from(atob(b64), c => c.charCodeAt(0)))); }\n hexToBase64(hex: string): string { return btoa(String.fromCharCode(..._hexToBytes(hex))); }\n\n /** Derive an AES-GCM key from a password via PBKDF2 */\n async deriveKey(password: string, salt: string, iterations = 100_000): Promise<CryptoKey> {\n const base = await crypto.subtle.importKey('raw', new TextEncoder().encode(password), 'PBKDF2', false, ['deriveKey']);\n return crypto.subtle.deriveKey(\n { name: 'PBKDF2', salt: new TextEncoder().encode(salt), iterations, hash: 'SHA-256' },\n base, { name: 'AES-GCM', length: 256 }, false, ['encrypt', 'decrypt'],\n );\n }\n}\n"]}
|