cipher-kit 0.0.2 → 0.0.3

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.
@@ -13,6 +13,9 @@ function $stringifyError(error) {
13
13
  }
14
14
 
15
15
  // src/utils.ts
16
+ var ENCRYPTED_REGEX = /^(?:[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+(?:\.[A-Za-z0-9_-]+)?\.)$/;
17
+ var ENCRYPTED_NODE_REGEX = /^([A-Za-z0-9_-]+)\.([A-Za-z0-9_-]+)\.([A-Za-z0-9_-]+)\.$/;
18
+ var ENCRYPTED_WEB_REGEX = /^([A-Za-z0-9_-]+)\.([A-Za-z0-9_-]+)\.$/;
16
19
  function $isStr(value, min = 0) {
17
20
  return (value !== null || value !== void 0) && typeof value === "string" && value.trim().length >= min;
18
21
  }
@@ -40,6 +43,6 @@ function $parseToObj(str) {
40
43
  }
41
44
  }
42
45
 
43
- export { $err, $isStr, $ok, $parseToObj, $stringifyError, $stringifyObj };
44
- //# sourceMappingURL=chunk-7QVQLIZE.js.map
45
- //# sourceMappingURL=chunk-7QVQLIZE.js.map
46
+ export { $err, $isStr, $ok, $parseToObj, $stringifyError, $stringifyObj, ENCRYPTED_NODE_REGEX, ENCRYPTED_REGEX, ENCRYPTED_WEB_REGEX };
47
+ //# sourceMappingURL=chunk-72PZBMQR.js.map
48
+ //# sourceMappingURL=chunk-72PZBMQR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/error.ts","../src/utils.ts"],"names":[],"mappings":";AAeO,SAAS,IAAO,MAAA,EAAuB;AAC5C,EAAA,IAAI,MAAA,CAAO,MAAM,CAAA,EAAG,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,GAAI,MAAA,EAAsB;AACtE,EAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,MAAA,EAAO;AACjC;AAIO,SAAS,KAAK,SAAA,EAA2F;AAC9G,EAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,SAAA,EAAU;AAC5C;AAEO,SAAS,gBAAgB,KAAA,EAAwB;AACtD,EAAA,IAAI,KAAA,YAAiB,KAAA,EAAO,OAAO,KAAA,CAAM,OAAA;AACzC,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;;;AC5BO,IAAM,eAAA,GAAkB;AACxB,IAAM,oBAAA,GAAuB;AAC7B,IAAM,mBAAA,GAAsB;AAE5B,SAAS,MAAA,CAAO,KAAA,EAAgB,GAAA,GAAM,CAAA,EAAoB;AAC/D,EAAA,OAAA,CAAQ,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,KAAc,OAAO,UAAU,QAAA,IAAY,KAAA,CAAM,IAAA,EAAK,CAAE,MAAA,IAAU,GAAA;AACxG;AAEO,SAAS,OAAO,KAAA,EAAkD;AACvE,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,KAAA,KAAU,IAAA,IACV,UAAU,MAAA,KACT,MAAA,CAAO,cAAA,CAAe,KAAK,MAAM,MAAA,CAAO,SAAA,IAAa,MAAA,CAAO,cAAA,CAAe,KAAK,CAAA,KAAM,IAAA,CAAA;AAE3F;AAEO,SAAS,cAAc,GAAA,EAA8C;AAC1E,EAAA,IAAI,CAAC,MAAA,CAAO,GAAG,CAAA,EAAG,OAAO,IAAA,CAAK,EAAE,OAAA,EAAS,gBAAA,EAAkB,WAAA,EAAa,6BAAA,EAA+B,CAAA;AAEvG,EAAA,IAAI;AACF,IAAA,OAAO,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC,CAAA;AAAA,EAChC,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,IAAA,CAAK,EAAE,OAAA,EAAS,iBAAA,EAAmB,aAAa,eAAA,CAAgB,KAAK,GAAG,CAAA;AAAA,EACjF;AACF;AAEO,SAAS,YAAY,GAAA,EAA0D;AACpF,EAAA,IAAI,CAAC,MAAA,CAAO,GAAG,CAAA,EAAG,OAAO,IAAA,CAAK,EAAE,OAAA,EAAS,eAAA,EAAiB,WAAA,EAAa,6BAAA,EAA+B,CAAA;AAEtG,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC1B,IAAA,IAAI,CAAC,MAAA,CAAO,GAAG,CAAA,EAAG;AAChB,MAAA,OAAO,KAAK,EAAE,OAAA,EAAS,uBAAA,EAAyB,WAAA,EAAa,qCAAqC,CAAA;AAAA,IACpG;AAEA,IAAA,OAAO,GAAA,CAAI,EAAE,MAAA,EAAQ,GAAA,EAAK,CAAA;AAAA,EAC5B,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,IAAA,CAAK,EAAE,OAAA,EAAS,gBAAA,EAAkB,aAAa,eAAA,CAAgB,KAAK,GAAG,CAAA;AAAA,EAChF;AACF","file":"chunk-72PZBMQR.js","sourcesContent":["import { $isObj } from './utils';\r\n\r\nexport interface ResultErr {\r\n readonly message: string;\r\n readonly description: string;\r\n}\r\n\r\nexport type Result<T, E = ResultErr> = T extends object\r\n ?\r\n | ({ readonly [K in keyof T]: T[K] } & { readonly success: true; readonly error?: undefined })\r\n | ({ readonly [K in keyof T]?: undefined } & { readonly success: false; readonly error: E })\r\n :\r\n | { readonly success: true; readonly result: T; readonly error?: undefined }\r\n | { readonly success: false; readonly error: E; readonly result?: undefined };\r\n\r\nexport function $ok<T>(result?: T): Result<T> {\r\n if ($isObj(result)) return { success: true, ...(result as T & object) } as Result<T>;\r\n return { success: true, result } as Result<T>;\r\n}\r\n\r\nexport function $err(typeOrErr: { message: string; description: string }): Result<never, ResultErr>;\r\nexport function $err(typeOrErr: ResultErr): Result<never, ResultErr>;\r\nexport function $err(typeOrErr: { message: string; description: string } | ResultErr): Result<never, ResultErr> {\r\n return { success: false, error: typeOrErr } as Result<never, ResultErr>;\r\n}\r\n\r\nexport function $stringifyError(error: unknown): string {\r\n if (error instanceof Error) return error.message;\r\n if (typeof error === 'string') return error;\r\n return String(error);\r\n}\r\n","import { $err, $ok, $stringifyError, type Result } from './error';\r\n\r\nexport const ENCRYPTED_REGEX = /^(?:[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+(?:\\.[A-Za-z0-9_-]+)?\\.)$/;\r\nexport const ENCRYPTED_NODE_REGEX = /^([A-Za-z0-9_-]+)\\.([A-Za-z0-9_-]+)\\.([A-Za-z0-9_-]+)\\.$/;\r\nexport const ENCRYPTED_WEB_REGEX = /^([A-Za-z0-9_-]+)\\.([A-Za-z0-9_-]+)\\.$/;\r\n\r\nexport function $isStr(value: unknown, min = 0): value is string {\r\n return (value !== null || value !== undefined) && typeof value === 'string' && value.trim().length >= min;\r\n}\r\n\r\nexport function $isObj(value: unknown): value is Record<string, unknown> {\r\n return (\r\n typeof value === 'object' &&\r\n value !== null &&\r\n value !== undefined &&\r\n (Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null)\r\n );\r\n}\r\n\r\nexport function $stringifyObj(obj: Record<string, unknown>): Result<string> {\r\n if (!$isObj(obj)) return $err({ message: 'Invalid object', description: 'Input is not a plain object' });\r\n\r\n try {\r\n return $ok(JSON.stringify(obj));\r\n } catch (error) {\r\n return $err({ message: 'Stringify error', description: $stringifyError(error) });\r\n }\r\n}\r\n\r\nexport function $parseToObj(str: string): Result<{ result: Record<string, unknown> }> {\r\n if (!$isStr(str)) return $err({ message: 'Invalid input', description: 'Input is not a valid string' });\r\n\r\n try {\r\n const obj = JSON.parse(str);\r\n if (!$isObj(obj)) {\r\n return $err({ message: 'Invalid object format', description: 'Parsed data is not a plain object' });\r\n }\r\n\r\n return $ok({ result: obj });\r\n } catch (error) {\r\n return $err({ message: 'Invalid format', description: $stringifyError(error) });\r\n }\r\n}\r\n"]}
@@ -1,4 +1,4 @@
1
- import { $err, $ok, $stringifyError, $isStr, $stringifyObj, $parseToObj } from './chunk-7QVQLIZE.js';
1
+ import { $err, $ok, $stringifyError, $isStr, ENCRYPTED_WEB_REGEX, $stringifyObj, $parseToObj } from './chunk-72PZBMQR.js';
2
2
 
3
3
  // src/web/encode.ts
4
4
  var textEncoder = new TextEncoder();
@@ -86,7 +86,6 @@ function $fromHex(data) {
86
86
  }
87
87
 
88
88
  // src/web/utils.ts
89
- var ENCRYPTED_WEB_API_REGEX = /^([A-Za-z0-9_-]+)\.([A-Za-z0-9_-]+)\.$/;
90
89
  function newUuid() {
91
90
  try {
92
91
  return $ok(crypto.randomUUID());
@@ -155,7 +154,7 @@ async function encrypt(data, secretKey) {
155
154
  }
156
155
  }
157
156
  async function decrypt(encrypted, secretKey) {
158
- if (ENCRYPTED_WEB_API_REGEX.test(encrypted) === false) {
157
+ if (ENCRYPTED_WEB_REGEX.test(encrypted) === false) {
159
158
  return $err({
160
159
  message: "Invalid encrypted data format",
161
160
  description: 'Data must be in the format "iv.encryptedWithTag."'
@@ -194,6 +193,6 @@ async function decryptObj(encrypted, secretKey) {
194
193
  return $parseToObj(result);
195
194
  }
196
195
 
197
- export { ENCRYPTED_WEB_API_REGEX, WEB_API_ALGORITHM, decode, decrypt, decryptObj, encode, encrypt, encryptObj, hash, newSecretKey, newUuid };
198
- //# sourceMappingURL=chunk-42BWXKCF.js.map
199
- //# sourceMappingURL=chunk-42BWXKCF.js.map
196
+ export { WEB_API_ALGORITHM, decode, decrypt, decryptObj, encode, encrypt, encryptObj, hash, newSecretKey, newUuid };
197
+ //# sourceMappingURL=chunk-GYFL6RUD.js.map
198
+ //# sourceMappingURL=chunk-GYFL6RUD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/web/encode.ts","../src/web/utils.ts","../src/web/encrypt.ts"],"names":["error"],"mappings":"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","file":"chunk-GYFL6RUD.js","sourcesContent":["import { $err, $ok, $stringifyError, type Result } from '~/error';\r\nimport type { EncodingFormat } from '~/types';\r\n\r\nconst textEncoder = new TextEncoder();\r\nconst textDecoder = new TextDecoder();\r\n\r\nexport function encode(data: string, format: EncodingFormat = 'utf8'): Result<{ bytes: Uint8Array }> {\r\n try {\r\n switch (format) {\r\n case 'base64':\r\n return $ok({ bytes: $fromBase64(data) });\r\n case 'base64url':\r\n return $ok({ bytes: $fromBase64Url(data) });\r\n case 'hex':\r\n return $ok({ bytes: $fromHex(data) });\r\n case 'utf8':\r\n return $ok({ bytes: textEncoder.encode(data) });\r\n default:\r\n return $err({\r\n message: `Unsupported encode format: ${format}`,\r\n description: 'Use base64, base64url, hex, or utf8',\r\n });\r\n }\r\n } catch (error) {\r\n return $err({ message: 'Failed to encode data', description: $stringifyError(error) });\r\n }\r\n}\r\n\r\nexport function decode(data: ArrayBuffer | Uint8Array, format: EncodingFormat = 'utf8'): Result<string> {\r\n try {\r\n const bytes = data instanceof Uint8Array ? data : new Uint8Array(data);\r\n switch (format) {\r\n case 'base64':\r\n return $ok($toBase64(bytes));\r\n case 'base64url':\r\n return $ok($toBase64Url(bytes));\r\n case 'hex':\r\n return $ok($toHex(bytes));\r\n case 'utf8':\r\n return $ok(textDecoder.decode(bytes));\r\n default:\r\n return $err({\r\n message: `Unsupported decode format: ${format}`,\r\n description: 'Use base64, base64url, hex, or utf8',\r\n });\r\n }\r\n } catch (error) {\r\n return $err({ message: 'Failed to decode data', description: $stringifyError(error) });\r\n }\r\n}\r\n\r\nfunction $toBase64(bytes: Uint8Array): string {\r\n let binary = '';\r\n const chunkSize = 0x8000; // 32KB per chunk\r\n for (let i = 0; i < bytes.length; i += chunkSize) {\r\n binary += String.fromCharCode(...bytes.subarray(i, i + chunkSize));\r\n }\r\n return btoa(binary);\r\n}\r\n\r\nfunction $fromBase64(data: string): Uint8Array {\r\n const binary = atob(data);\r\n const len = binary.length;\r\n const bytes = new Uint8Array(len);\r\n for (let i = 0; i < len; i++) {\r\n bytes[i] = binary.charCodeAt(i);\r\n }\r\n return bytes;\r\n}\r\n\r\nfunction $toBase64Url(bytes: Uint8Array): string {\r\n return $toBase64(bytes).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\r\n}\r\n\r\nfunction $fromBase64Url(data: string): Uint8Array {\r\n let b64 = data.replace(/-/g, '+').replace(/_/g, '/');\r\n const padLen = (4 - (b64.length % 4)) % 4;\r\n b64 += '='.repeat(padLen);\r\n return $fromBase64(b64);\r\n}\r\n\r\nfunction $toHex(bytes: Uint8Array): string {\r\n return Array.from(bytes)\r\n .map((b) => b.toString(16).padStart(2, '0'))\r\n .join('');\r\n}\r\n\r\nfunction $fromHex(data: string): Uint8Array {\r\n const clean = data.startsWith('0x') ? data.slice(2) : data;\r\n if (clean.length % 2 !== 0) throw new Error('Invalid hex string');\r\n const out = new Uint8Array(clean.length / 2);\r\n for (let i = 0; i < out.length; i++) {\r\n out[i] = Number.parseInt(clean.slice(i * 2, i * 2 + 2), 16);\r\n }\r\n return out;\r\n}\r\n","import { $err, $ok, $stringifyError, type Result } from '~/error';\r\nimport type { WebApiKey } from '~/types';\r\n\r\nexport const ENCRYPTED_WEB_API_REGEX = /^([A-Za-z0-9_-]+)\\.([A-Za-z0-9_-]+)\\.$/;\r\n\r\nexport function newUuid(): Result<string> {\r\n try {\r\n return $ok(crypto.randomUUID());\r\n } catch (error) {\r\n return $err({ message: 'Failed to generate UUID with Crypto Web API', description: $stringifyError(error) });\r\n }\r\n}\r\n\r\nexport function $isWebApiKey(key: unknown): key is WebApiKey {\r\n return (\r\n key !== null &&\r\n key !== undefined &&\r\n typeof key === 'object' &&\r\n 'type' in key &&\r\n typeof key.type === 'string' &&\r\n 'algorithm' in key &&\r\n typeof key.algorithm === 'object' &&\r\n 'extractable' in key &&\r\n typeof key.extractable === 'boolean' &&\r\n 'usages' in key &&\r\n Array.isArray(key.usages) &&\r\n key.usages.every((usage) => typeof usage === 'string')\r\n );\r\n}\r\n","import { $err, $ok, $stringifyError, type Result } from '~/error';\r\nimport type { WebApiKey } from '~/types';\r\nimport { $isStr, $parseToObj, $stringifyObj, ENCRYPTED_WEB_REGEX } from '~/utils';\r\nimport { decode, encode } from './encode';\r\nimport { $isWebApiKey } from './utils';\r\n\r\nexport const WEB_API_ALGORITHM = 'AES-GCM';\r\n\r\nexport async function hash(data: string): Promise<Result<string>> {\r\n if (!$isStr(data)) {\r\n return $err({ message: 'Empty data for hashing', description: 'Data must be a non-empty string' });\r\n }\r\n\r\n const { bytes, error } = encode(data, 'utf8');\r\n if (error) return $err(error);\r\n\r\n try {\r\n const hashed = await crypto.subtle.digest('SHA-256', bytes);\r\n return decode(hashed, 'base64url');\r\n } catch (error) {\r\n return $err({ message: 'Failed to hash data with Crypto Web API', description: $stringifyError(error) });\r\n }\r\n}\r\n\r\nexport async function newSecretKey(key: string | WebApiKey): Promise<Result<{ secretKey: WebApiKey }>> {\r\n if (typeof key === 'string') {\r\n if (!$isStr(key, 1)) return $err({ message: 'Empty key for Crypto Web API', description: 'Invalid secret key' });\r\n\r\n const { bytes, error } = encode(key, 'utf8');\r\n if (error) return $err(error);\r\n\r\n try {\r\n const hashedKey = await crypto.subtle.digest('SHA-256', bytes);\r\n const secretKey = await crypto.subtle.importKey('raw', hashedKey, { name: WEB_API_ALGORITHM }, true, [\r\n 'encrypt',\r\n 'decrypt',\r\n ]);\r\n return $ok({ secretKey });\r\n } catch (error) {\r\n return $err({ message: 'Failed to create secret key with Crypto Web API', description: $stringifyError(error) });\r\n }\r\n }\r\n\r\n if (!$isWebApiKey(key)) return $err({ message: 'Invalid secret key', description: 'Expected a webcrypto.CryptoKey' });\r\n return $ok({ secretKey: key });\r\n}\r\n\r\nexport async function encrypt(data: string, secretKey: WebApiKey): Promise<Result<string>> {\r\n if (!$isStr(data)) {\r\n return $err({ message: 'Empty data for encryption', description: 'Data must be a non-empty string' });\r\n }\r\n\r\n if (!$isWebApiKey(secretKey)) {\r\n return $err({ message: 'Invalid encryption key', description: 'Expected a webcrypto.CryptoKey' });\r\n }\r\n\r\n const { bytes, error } = encode(data, 'utf8');\r\n if (error) return $err(error);\r\n\r\n try {\r\n const iv = crypto.getRandomValues(new Uint8Array(12));\r\n const encrypted = await crypto.subtle.encrypt({ name: WEB_API_ALGORITHM, iv: iv }, secretKey, bytes);\r\n\r\n const { result: decodedIv, error: ivError } = decode(iv, 'base64url');\r\n const { result: decodedEncrypted, error: encryptedError } = decode(encrypted, 'base64url');\r\n\r\n if (ivError || encryptedError) {\r\n return $err({ message: 'Failed to encode IV or encrypted data', description: 'Encoding error' });\r\n }\r\n\r\n return $ok(`${decodedIv}.${decodedEncrypted}.`);\r\n } catch (error) {\r\n return $err({ message: 'Failed to encrypt data with Crypto Web API', description: $stringifyError(error) });\r\n }\r\n}\r\n\r\nexport async function decrypt(encrypted: string, secretKey: WebApiKey): Promise<Result<string>> {\r\n if (ENCRYPTED_WEB_REGEX.test(encrypted) === false) {\r\n return $err({\r\n message: 'Invalid encrypted data format',\r\n description: 'Data must be in the format \"iv.encryptedWithTag.\"',\r\n });\r\n }\r\n\r\n const [iv, encryptedWithTag] = encrypted.split('.', 3);\r\n if (!$isStr(iv, 1) || !$isStr(encryptedWithTag, 1)) {\r\n return $err({\r\n message: 'Invalid parameters for decryption',\r\n description: 'IV and encrypted data must be non-empty strings',\r\n });\r\n }\r\n\r\n if (!$isWebApiKey(secretKey)) {\r\n return $err({ message: 'Invalid decryption key', description: 'Expected a webcrypto.CryptoKey' });\r\n }\r\n\r\n const { bytes: ivBytes, error: ivError } = encode(iv, 'base64url');\r\n const { bytes: encryptedBytes, error: encryptedError } = encode(encryptedWithTag, 'base64url');\r\n if (ivError || encryptedError) {\r\n return $err({ message: 'Failed to encode IV or encrypted data', description: 'Encoding error' });\r\n }\r\n\r\n try {\r\n const decrypted = await crypto.subtle.decrypt({ name: WEB_API_ALGORITHM, iv: ivBytes }, secretKey, encryptedBytes);\r\n\r\n return decode(decrypted, 'utf8');\r\n } catch (error) {\r\n return $err({ message: 'Failed to decrypt data with Crypto Web API', description: $stringifyError(error) });\r\n }\r\n}\r\n\r\nexport async function encryptObj(data: Record<string, unknown>, secretKey: WebApiKey): Promise<Result<string>> {\r\n const { result, error } = $stringifyObj(data);\r\n if (error) return $err(error);\r\n return await encrypt(result, secretKey);\r\n}\r\n\r\nexport async function decryptObj(\r\n encrypted: string,\r\n secretKey: WebApiKey,\r\n): Promise<Result<{ result: Record<string, unknown> }>> {\r\n const { result, error } = await decrypt(encrypted, secretKey);\r\n if (error) return $err(error);\r\n return $parseToObj(result);\r\n}\r\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkQN3P7CIM_cjs = require('./chunk-QN3P7CIM.cjs');
3
+ var chunkWD5FWRQ4_cjs = require('./chunk-WD5FWRQ4.cjs');
4
4
 
5
5
  // src/web/encode.ts
6
6
  var textEncoder = new TextEncoder();
@@ -9,21 +9,21 @@ function encode(data, format = "utf8") {
9
9
  try {
10
10
  switch (format) {
11
11
  case "base64":
12
- return chunkQN3P7CIM_cjs.$ok({ bytes: $fromBase64(data) });
12
+ return chunkWD5FWRQ4_cjs.$ok({ bytes: $fromBase64(data) });
13
13
  case "base64url":
14
- return chunkQN3P7CIM_cjs.$ok({ bytes: $fromBase64Url(data) });
14
+ return chunkWD5FWRQ4_cjs.$ok({ bytes: $fromBase64Url(data) });
15
15
  case "hex":
16
- return chunkQN3P7CIM_cjs.$ok({ bytes: $fromHex(data) });
16
+ return chunkWD5FWRQ4_cjs.$ok({ bytes: $fromHex(data) });
17
17
  case "utf8":
18
- return chunkQN3P7CIM_cjs.$ok({ bytes: textEncoder.encode(data) });
18
+ return chunkWD5FWRQ4_cjs.$ok({ bytes: textEncoder.encode(data) });
19
19
  default:
20
- return chunkQN3P7CIM_cjs.$err({
20
+ return chunkWD5FWRQ4_cjs.$err({
21
21
  message: `Unsupported encode format: ${format}`,
22
22
  description: "Use base64, base64url, hex, or utf8"
23
23
  });
24
24
  }
25
25
  } catch (error) {
26
- return chunkQN3P7CIM_cjs.$err({ message: "Failed to encode data", description: chunkQN3P7CIM_cjs.$stringifyError(error) });
26
+ return chunkWD5FWRQ4_cjs.$err({ message: "Failed to encode data", description: chunkWD5FWRQ4_cjs.$stringifyError(error) });
27
27
  }
28
28
  }
29
29
  function decode(data, format = "utf8") {
@@ -31,21 +31,21 @@ function decode(data, format = "utf8") {
31
31
  const bytes = data instanceof Uint8Array ? data : new Uint8Array(data);
32
32
  switch (format) {
33
33
  case "base64":
34
- return chunkQN3P7CIM_cjs.$ok($toBase64(bytes));
34
+ return chunkWD5FWRQ4_cjs.$ok($toBase64(bytes));
35
35
  case "base64url":
36
- return chunkQN3P7CIM_cjs.$ok($toBase64Url(bytes));
36
+ return chunkWD5FWRQ4_cjs.$ok($toBase64Url(bytes));
37
37
  case "hex":
38
- return chunkQN3P7CIM_cjs.$ok($toHex(bytes));
38
+ return chunkWD5FWRQ4_cjs.$ok($toHex(bytes));
39
39
  case "utf8":
40
- return chunkQN3P7CIM_cjs.$ok(textDecoder.decode(bytes));
40
+ return chunkWD5FWRQ4_cjs.$ok(textDecoder.decode(bytes));
41
41
  default:
42
- return chunkQN3P7CIM_cjs.$err({
42
+ return chunkWD5FWRQ4_cjs.$err({
43
43
  message: `Unsupported decode format: ${format}`,
44
44
  description: "Use base64, base64url, hex, or utf8"
45
45
  });
46
46
  }
47
47
  } catch (error) {
48
- return chunkQN3P7CIM_cjs.$err({ message: "Failed to decode data", description: chunkQN3P7CIM_cjs.$stringifyError(error) });
48
+ return chunkWD5FWRQ4_cjs.$err({ message: "Failed to decode data", description: chunkWD5FWRQ4_cjs.$stringifyError(error) });
49
49
  }
50
50
  }
51
51
  function $toBase64(bytes) {
@@ -88,12 +88,11 @@ function $fromHex(data) {
88
88
  }
89
89
 
90
90
  // src/web/utils.ts
91
- var ENCRYPTED_WEB_API_REGEX = /^([A-Za-z0-9_-]+)\.([A-Za-z0-9_-]+)\.$/;
92
91
  function newUuid() {
93
92
  try {
94
- return chunkQN3P7CIM_cjs.$ok(crypto.randomUUID());
93
+ return chunkWD5FWRQ4_cjs.$ok(crypto.randomUUID());
95
94
  } catch (error) {
96
- return chunkQN3P7CIM_cjs.$err({ message: "Failed to generate UUID with Crypto Web API", description: chunkQN3P7CIM_cjs.$stringifyError(error) });
95
+ return chunkWD5FWRQ4_cjs.$err({ message: "Failed to generate UUID with Crypto Web API", description: chunkWD5FWRQ4_cjs.$stringifyError(error) });
97
96
  }
98
97
  }
99
98
  function $isWebApiKey(key) {
@@ -103,100 +102,99 @@ function $isWebApiKey(key) {
103
102
  // src/web/encrypt.ts
104
103
  var WEB_API_ALGORITHM = "AES-GCM";
105
104
  async function hash(data) {
106
- if (!chunkQN3P7CIM_cjs.$isStr(data)) {
107
- return chunkQN3P7CIM_cjs.$err({ message: "Empty data for hashing", description: "Data must be a non-empty string" });
105
+ if (!chunkWD5FWRQ4_cjs.$isStr(data)) {
106
+ return chunkWD5FWRQ4_cjs.$err({ message: "Empty data for hashing", description: "Data must be a non-empty string" });
108
107
  }
109
108
  const { bytes, error } = encode(data, "utf8");
110
- if (error) return chunkQN3P7CIM_cjs.$err(error);
109
+ if (error) return chunkWD5FWRQ4_cjs.$err(error);
111
110
  try {
112
111
  const hashed = await crypto.subtle.digest("SHA-256", bytes);
113
112
  return decode(hashed, "base64url");
114
113
  } catch (error2) {
115
- return chunkQN3P7CIM_cjs.$err({ message: "Failed to hash data with Crypto Web API", description: chunkQN3P7CIM_cjs.$stringifyError(error2) });
114
+ return chunkWD5FWRQ4_cjs.$err({ message: "Failed to hash data with Crypto Web API", description: chunkWD5FWRQ4_cjs.$stringifyError(error2) });
116
115
  }
117
116
  }
118
117
  async function newSecretKey(key) {
119
118
  if (typeof key === "string") {
120
- if (!chunkQN3P7CIM_cjs.$isStr(key, 1)) return chunkQN3P7CIM_cjs.$err({ message: "Empty key for Crypto Web API", description: "Invalid secret key" });
119
+ if (!chunkWD5FWRQ4_cjs.$isStr(key, 1)) return chunkWD5FWRQ4_cjs.$err({ message: "Empty key for Crypto Web API", description: "Invalid secret key" });
121
120
  const { bytes, error } = encode(key, "utf8");
122
- if (error) return chunkQN3P7CIM_cjs.$err(error);
121
+ if (error) return chunkWD5FWRQ4_cjs.$err(error);
123
122
  try {
124
123
  const hashedKey = await crypto.subtle.digest("SHA-256", bytes);
125
124
  const secretKey = await crypto.subtle.importKey("raw", hashedKey, { name: WEB_API_ALGORITHM }, true, [
126
125
  "encrypt",
127
126
  "decrypt"
128
127
  ]);
129
- return chunkQN3P7CIM_cjs.$ok({ secretKey });
128
+ return chunkWD5FWRQ4_cjs.$ok({ secretKey });
130
129
  } catch (error2) {
131
- return chunkQN3P7CIM_cjs.$err({ message: "Failed to create secret key with Crypto Web API", description: chunkQN3P7CIM_cjs.$stringifyError(error2) });
130
+ return chunkWD5FWRQ4_cjs.$err({ message: "Failed to create secret key with Crypto Web API", description: chunkWD5FWRQ4_cjs.$stringifyError(error2) });
132
131
  }
133
132
  }
134
- if (!$isWebApiKey(key)) return chunkQN3P7CIM_cjs.$err({ message: "Invalid secret key", description: "Expected a webcrypto.CryptoKey" });
135
- return chunkQN3P7CIM_cjs.$ok({ secretKey: key });
133
+ if (!$isWebApiKey(key)) return chunkWD5FWRQ4_cjs.$err({ message: "Invalid secret key", description: "Expected a webcrypto.CryptoKey" });
134
+ return chunkWD5FWRQ4_cjs.$ok({ secretKey: key });
136
135
  }
137
136
  async function encrypt(data, secretKey) {
138
- if (!chunkQN3P7CIM_cjs.$isStr(data)) {
139
- return chunkQN3P7CIM_cjs.$err({ message: "Empty data for encryption", description: "Data must be a non-empty string" });
137
+ if (!chunkWD5FWRQ4_cjs.$isStr(data)) {
138
+ return chunkWD5FWRQ4_cjs.$err({ message: "Empty data for encryption", description: "Data must be a non-empty string" });
140
139
  }
141
140
  if (!$isWebApiKey(secretKey)) {
142
- return chunkQN3P7CIM_cjs.$err({ message: "Invalid encryption key", description: "Expected a webcrypto.CryptoKey" });
141
+ return chunkWD5FWRQ4_cjs.$err({ message: "Invalid encryption key", description: "Expected a webcrypto.CryptoKey" });
143
142
  }
144
143
  const { bytes, error } = encode(data, "utf8");
145
- if (error) return chunkQN3P7CIM_cjs.$err(error);
144
+ if (error) return chunkWD5FWRQ4_cjs.$err(error);
146
145
  try {
147
146
  const iv = crypto.getRandomValues(new Uint8Array(12));
148
147
  const encrypted = await crypto.subtle.encrypt({ name: WEB_API_ALGORITHM, iv }, secretKey, bytes);
149
148
  const { result: decodedIv, error: ivError } = decode(iv, "base64url");
150
149
  const { result: decodedEncrypted, error: encryptedError } = decode(encrypted, "base64url");
151
150
  if (ivError || encryptedError) {
152
- return chunkQN3P7CIM_cjs.$err({ message: "Failed to encode IV or encrypted data", description: "Encoding error" });
151
+ return chunkWD5FWRQ4_cjs.$err({ message: "Failed to encode IV or encrypted data", description: "Encoding error" });
153
152
  }
154
- return chunkQN3P7CIM_cjs.$ok(`${decodedIv}.${decodedEncrypted}.`);
153
+ return chunkWD5FWRQ4_cjs.$ok(`${decodedIv}.${decodedEncrypted}.`);
155
154
  } catch (error2) {
156
- return chunkQN3P7CIM_cjs.$err({ message: "Failed to encrypt data with Crypto Web API", description: chunkQN3P7CIM_cjs.$stringifyError(error2) });
155
+ return chunkWD5FWRQ4_cjs.$err({ message: "Failed to encrypt data with Crypto Web API", description: chunkWD5FWRQ4_cjs.$stringifyError(error2) });
157
156
  }
158
157
  }
159
158
  async function decrypt(encrypted, secretKey) {
160
- if (ENCRYPTED_WEB_API_REGEX.test(encrypted) === false) {
161
- return chunkQN3P7CIM_cjs.$err({
159
+ if (chunkWD5FWRQ4_cjs.ENCRYPTED_WEB_REGEX.test(encrypted) === false) {
160
+ return chunkWD5FWRQ4_cjs.$err({
162
161
  message: "Invalid encrypted data format",
163
162
  description: 'Data must be in the format "iv.encryptedWithTag."'
164
163
  });
165
164
  }
166
165
  const [iv, encryptedWithTag] = encrypted.split(".", 3);
167
- if (!chunkQN3P7CIM_cjs.$isStr(iv, 1) || !chunkQN3P7CIM_cjs.$isStr(encryptedWithTag, 1)) {
168
- return chunkQN3P7CIM_cjs.$err({
166
+ if (!chunkWD5FWRQ4_cjs.$isStr(iv, 1) || !chunkWD5FWRQ4_cjs.$isStr(encryptedWithTag, 1)) {
167
+ return chunkWD5FWRQ4_cjs.$err({
169
168
  message: "Invalid parameters for decryption",
170
169
  description: "IV and encrypted data must be non-empty strings"
171
170
  });
172
171
  }
173
172
  if (!$isWebApiKey(secretKey)) {
174
- return chunkQN3P7CIM_cjs.$err({ message: "Invalid decryption key", description: "Expected a webcrypto.CryptoKey" });
173
+ return chunkWD5FWRQ4_cjs.$err({ message: "Invalid decryption key", description: "Expected a webcrypto.CryptoKey" });
175
174
  }
176
175
  const { bytes: ivBytes, error: ivError } = encode(iv, "base64url");
177
176
  const { bytes: encryptedBytes, error: encryptedError } = encode(encryptedWithTag, "base64url");
178
177
  if (ivError || encryptedError) {
179
- return chunkQN3P7CIM_cjs.$err({ message: "Failed to encode IV or encrypted data", description: "Encoding error" });
178
+ return chunkWD5FWRQ4_cjs.$err({ message: "Failed to encode IV or encrypted data", description: "Encoding error" });
180
179
  }
181
180
  try {
182
181
  const decrypted = await crypto.subtle.decrypt({ name: WEB_API_ALGORITHM, iv: ivBytes }, secretKey, encryptedBytes);
183
182
  return decode(decrypted, "utf8");
184
183
  } catch (error) {
185
- return chunkQN3P7CIM_cjs.$err({ message: "Failed to decrypt data with Crypto Web API", description: chunkQN3P7CIM_cjs.$stringifyError(error) });
184
+ return chunkWD5FWRQ4_cjs.$err({ message: "Failed to decrypt data with Crypto Web API", description: chunkWD5FWRQ4_cjs.$stringifyError(error) });
186
185
  }
187
186
  }
188
187
  async function encryptObj(data, secretKey) {
189
- const { result, error } = chunkQN3P7CIM_cjs.$stringifyObj(data);
190
- if (error) return chunkQN3P7CIM_cjs.$err(error);
188
+ const { result, error } = chunkWD5FWRQ4_cjs.$stringifyObj(data);
189
+ if (error) return chunkWD5FWRQ4_cjs.$err(error);
191
190
  return await encrypt(result, secretKey);
192
191
  }
193
192
  async function decryptObj(encrypted, secretKey) {
194
193
  const { result, error } = await decrypt(encrypted, secretKey);
195
- if (error) return chunkQN3P7CIM_cjs.$err(error);
196
- return chunkQN3P7CIM_cjs.$parseToObj(result);
194
+ if (error) return chunkWD5FWRQ4_cjs.$err(error);
195
+ return chunkWD5FWRQ4_cjs.$parseToObj(result);
197
196
  }
198
197
 
199
- exports.ENCRYPTED_WEB_API_REGEX = ENCRYPTED_WEB_API_REGEX;
200
198
  exports.WEB_API_ALGORITHM = WEB_API_ALGORITHM;
201
199
  exports.decode = decode;
202
200
  exports.decrypt = decrypt;
@@ -207,5 +205,5 @@ exports.encryptObj = encryptObj;
207
205
  exports.hash = hash;
208
206
  exports.newSecretKey = newSecretKey;
209
207
  exports.newUuid = newUuid;
210
- //# sourceMappingURL=chunk-NT4ZCTLJ.cjs.map
211
- //# sourceMappingURL=chunk-NT4ZCTLJ.cjs.map
208
+ //# sourceMappingURL=chunk-KFZLZJ2J.cjs.map
209
+ //# sourceMappingURL=chunk-KFZLZJ2J.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/web/encode.ts","../src/web/utils.ts","../src/web/encrypt.ts"],"names":["$ok","$err","$stringifyError","$isStr","error","ENCRYPTED_WEB_REGEX","$stringifyObj","$parseToObj"],"mappings":"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","file":"chunk-KFZLZJ2J.cjs","sourcesContent":["import { $err, $ok, $stringifyError, type Result } from '~/error';\r\nimport type { EncodingFormat } from '~/types';\r\n\r\nconst textEncoder = new TextEncoder();\r\nconst textDecoder = new TextDecoder();\r\n\r\nexport function encode(data: string, format: EncodingFormat = 'utf8'): Result<{ bytes: Uint8Array }> {\r\n try {\r\n switch (format) {\r\n case 'base64':\r\n return $ok({ bytes: $fromBase64(data) });\r\n case 'base64url':\r\n return $ok({ bytes: $fromBase64Url(data) });\r\n case 'hex':\r\n return $ok({ bytes: $fromHex(data) });\r\n case 'utf8':\r\n return $ok({ bytes: textEncoder.encode(data) });\r\n default:\r\n return $err({\r\n message: `Unsupported encode format: ${format}`,\r\n description: 'Use base64, base64url, hex, or utf8',\r\n });\r\n }\r\n } catch (error) {\r\n return $err({ message: 'Failed to encode data', description: $stringifyError(error) });\r\n }\r\n}\r\n\r\nexport function decode(data: ArrayBuffer | Uint8Array, format: EncodingFormat = 'utf8'): Result<string> {\r\n try {\r\n const bytes = data instanceof Uint8Array ? data : new Uint8Array(data);\r\n switch (format) {\r\n case 'base64':\r\n return $ok($toBase64(bytes));\r\n case 'base64url':\r\n return $ok($toBase64Url(bytes));\r\n case 'hex':\r\n return $ok($toHex(bytes));\r\n case 'utf8':\r\n return $ok(textDecoder.decode(bytes));\r\n default:\r\n return $err({\r\n message: `Unsupported decode format: ${format}`,\r\n description: 'Use base64, base64url, hex, or utf8',\r\n });\r\n }\r\n } catch (error) {\r\n return $err({ message: 'Failed to decode data', description: $stringifyError(error) });\r\n }\r\n}\r\n\r\nfunction $toBase64(bytes: Uint8Array): string {\r\n let binary = '';\r\n const chunkSize = 0x8000; // 32KB per chunk\r\n for (let i = 0; i < bytes.length; i += chunkSize) {\r\n binary += String.fromCharCode(...bytes.subarray(i, i + chunkSize));\r\n }\r\n return btoa(binary);\r\n}\r\n\r\nfunction $fromBase64(data: string): Uint8Array {\r\n const binary = atob(data);\r\n const len = binary.length;\r\n const bytes = new Uint8Array(len);\r\n for (let i = 0; i < len; i++) {\r\n bytes[i] = binary.charCodeAt(i);\r\n }\r\n return bytes;\r\n}\r\n\r\nfunction $toBase64Url(bytes: Uint8Array): string {\r\n return $toBase64(bytes).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\r\n}\r\n\r\nfunction $fromBase64Url(data: string): Uint8Array {\r\n let b64 = data.replace(/-/g, '+').replace(/_/g, '/');\r\n const padLen = (4 - (b64.length % 4)) % 4;\r\n b64 += '='.repeat(padLen);\r\n return $fromBase64(b64);\r\n}\r\n\r\nfunction $toHex(bytes: Uint8Array): string {\r\n return Array.from(bytes)\r\n .map((b) => b.toString(16).padStart(2, '0'))\r\n .join('');\r\n}\r\n\r\nfunction $fromHex(data: string): Uint8Array {\r\n const clean = data.startsWith('0x') ? data.slice(2) : data;\r\n if (clean.length % 2 !== 0) throw new Error('Invalid hex string');\r\n const out = new Uint8Array(clean.length / 2);\r\n for (let i = 0; i < out.length; i++) {\r\n out[i] = Number.parseInt(clean.slice(i * 2, i * 2 + 2), 16);\r\n }\r\n return out;\r\n}\r\n","import { $err, $ok, $stringifyError, type Result } from '~/error';\r\nimport type { WebApiKey } from '~/types';\r\n\r\nexport const ENCRYPTED_WEB_API_REGEX = /^([A-Za-z0-9_-]+)\\.([A-Za-z0-9_-]+)\\.$/;\r\n\r\nexport function newUuid(): Result<string> {\r\n try {\r\n return $ok(crypto.randomUUID());\r\n } catch (error) {\r\n return $err({ message: 'Failed to generate UUID with Crypto Web API', description: $stringifyError(error) });\r\n }\r\n}\r\n\r\nexport function $isWebApiKey(key: unknown): key is WebApiKey {\r\n return (\r\n key !== null &&\r\n key !== undefined &&\r\n typeof key === 'object' &&\r\n 'type' in key &&\r\n typeof key.type === 'string' &&\r\n 'algorithm' in key &&\r\n typeof key.algorithm === 'object' &&\r\n 'extractable' in key &&\r\n typeof key.extractable === 'boolean' &&\r\n 'usages' in key &&\r\n Array.isArray(key.usages) &&\r\n key.usages.every((usage) => typeof usage === 'string')\r\n );\r\n}\r\n","import { $err, $ok, $stringifyError, type Result } from '~/error';\r\nimport type { WebApiKey } from '~/types';\r\nimport { $isStr, $parseToObj, $stringifyObj, ENCRYPTED_WEB_REGEX } from '~/utils';\r\nimport { decode, encode } from './encode';\r\nimport { $isWebApiKey } from './utils';\r\n\r\nexport const WEB_API_ALGORITHM = 'AES-GCM';\r\n\r\nexport async function hash(data: string): Promise<Result<string>> {\r\n if (!$isStr(data)) {\r\n return $err({ message: 'Empty data for hashing', description: 'Data must be a non-empty string' });\r\n }\r\n\r\n const { bytes, error } = encode(data, 'utf8');\r\n if (error) return $err(error);\r\n\r\n try {\r\n const hashed = await crypto.subtle.digest('SHA-256', bytes);\r\n return decode(hashed, 'base64url');\r\n } catch (error) {\r\n return $err({ message: 'Failed to hash data with Crypto Web API', description: $stringifyError(error) });\r\n }\r\n}\r\n\r\nexport async function newSecretKey(key: string | WebApiKey): Promise<Result<{ secretKey: WebApiKey }>> {\r\n if (typeof key === 'string') {\r\n if (!$isStr(key, 1)) return $err({ message: 'Empty key for Crypto Web API', description: 'Invalid secret key' });\r\n\r\n const { bytes, error } = encode(key, 'utf8');\r\n if (error) return $err(error);\r\n\r\n try {\r\n const hashedKey = await crypto.subtle.digest('SHA-256', bytes);\r\n const secretKey = await crypto.subtle.importKey('raw', hashedKey, { name: WEB_API_ALGORITHM }, true, [\r\n 'encrypt',\r\n 'decrypt',\r\n ]);\r\n return $ok({ secretKey });\r\n } catch (error) {\r\n return $err({ message: 'Failed to create secret key with Crypto Web API', description: $stringifyError(error) });\r\n }\r\n }\r\n\r\n if (!$isWebApiKey(key)) return $err({ message: 'Invalid secret key', description: 'Expected a webcrypto.CryptoKey' });\r\n return $ok({ secretKey: key });\r\n}\r\n\r\nexport async function encrypt(data: string, secretKey: WebApiKey): Promise<Result<string>> {\r\n if (!$isStr(data)) {\r\n return $err({ message: 'Empty data for encryption', description: 'Data must be a non-empty string' });\r\n }\r\n\r\n if (!$isWebApiKey(secretKey)) {\r\n return $err({ message: 'Invalid encryption key', description: 'Expected a webcrypto.CryptoKey' });\r\n }\r\n\r\n const { bytes, error } = encode(data, 'utf8');\r\n if (error) return $err(error);\r\n\r\n try {\r\n const iv = crypto.getRandomValues(new Uint8Array(12));\r\n const encrypted = await crypto.subtle.encrypt({ name: WEB_API_ALGORITHM, iv: iv }, secretKey, bytes);\r\n\r\n const { result: decodedIv, error: ivError } = decode(iv, 'base64url');\r\n const { result: decodedEncrypted, error: encryptedError } = decode(encrypted, 'base64url');\r\n\r\n if (ivError || encryptedError) {\r\n return $err({ message: 'Failed to encode IV or encrypted data', description: 'Encoding error' });\r\n }\r\n\r\n return $ok(`${decodedIv}.${decodedEncrypted}.`);\r\n } catch (error) {\r\n return $err({ message: 'Failed to encrypt data with Crypto Web API', description: $stringifyError(error) });\r\n }\r\n}\r\n\r\nexport async function decrypt(encrypted: string, secretKey: WebApiKey): Promise<Result<string>> {\r\n if (ENCRYPTED_WEB_REGEX.test(encrypted) === false) {\r\n return $err({\r\n message: 'Invalid encrypted data format',\r\n description: 'Data must be in the format \"iv.encryptedWithTag.\"',\r\n });\r\n }\r\n\r\n const [iv, encryptedWithTag] = encrypted.split('.', 3);\r\n if (!$isStr(iv, 1) || !$isStr(encryptedWithTag, 1)) {\r\n return $err({\r\n message: 'Invalid parameters for decryption',\r\n description: 'IV and encrypted data must be non-empty strings',\r\n });\r\n }\r\n\r\n if (!$isWebApiKey(secretKey)) {\r\n return $err({ message: 'Invalid decryption key', description: 'Expected a webcrypto.CryptoKey' });\r\n }\r\n\r\n const { bytes: ivBytes, error: ivError } = encode(iv, 'base64url');\r\n const { bytes: encryptedBytes, error: encryptedError } = encode(encryptedWithTag, 'base64url');\r\n if (ivError || encryptedError) {\r\n return $err({ message: 'Failed to encode IV or encrypted data', description: 'Encoding error' });\r\n }\r\n\r\n try {\r\n const decrypted = await crypto.subtle.decrypt({ name: WEB_API_ALGORITHM, iv: ivBytes }, secretKey, encryptedBytes);\r\n\r\n return decode(decrypted, 'utf8');\r\n } catch (error) {\r\n return $err({ message: 'Failed to decrypt data with Crypto Web API', description: $stringifyError(error) });\r\n }\r\n}\r\n\r\nexport async function encryptObj(data: Record<string, unknown>, secretKey: WebApiKey): Promise<Result<string>> {\r\n const { result, error } = $stringifyObj(data);\r\n if (error) return $err(error);\r\n return await encrypt(result, secretKey);\r\n}\r\n\r\nexport async function decryptObj(\r\n encrypted: string,\r\n secretKey: WebApiKey,\r\n): Promise<Result<{ result: Record<string, unknown> }>> {\r\n const { result, error } = await decrypt(encrypted, secretKey);\r\n if (error) return $err(error);\r\n return $parseToObj(result);\r\n}\r\n"]}
@@ -1,4 +1,4 @@
1
- import { $ok, $err, $stringifyError, $isStr, $stringifyObj, $parseToObj } from './chunk-7QVQLIZE.js';
1
+ import { $ok, $err, $stringifyError, $isStr, ENCRYPTED_NODE_REGEX, $stringifyObj, $parseToObj } from './chunk-72PZBMQR.js';
2
2
  import { Buffer } from 'buffer';
3
3
  import nodeCrypto2 from 'crypto';
4
4
 
@@ -16,7 +16,6 @@ function decode(data, format = "utf8") {
16
16
  return $err({ message: "Failed to decode data", description: $stringifyError(error) });
17
17
  }
18
18
  }
19
- var ENCRYPTED_NODE_REGEX = /^([A-Za-z0-9_-]+)\.([A-Za-z0-9_-]+)\.([A-Za-z0-9_-]+)\.$/;
20
19
  function newUuid() {
21
20
  try {
22
21
  return $ok(nodeCrypto2.randomUUID());
@@ -121,6 +120,6 @@ function decryptObj(encrypted, secretKey) {
121
120
  return $parseToObj(result);
122
121
  }
123
122
 
124
- export { ENCRYPTED_NODE_REGEX, NODE_ALGORITHM, decode, decrypt, decryptObj, encode, encrypt, encryptObj, hash, newSecretKey, newUuid };
125
- //# sourceMappingURL=chunk-XIXGSHXM.js.map
126
- //# sourceMappingURL=chunk-XIXGSHXM.js.map
123
+ export { NODE_ALGORITHM, decode, decrypt, decryptObj, encode, encrypt, encryptObj, hash, newSecretKey, newUuid };
124
+ //# sourceMappingURL=chunk-MMHTEI3Q.js.map
125
+ //# sourceMappingURL=chunk-MMHTEI3Q.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/node/encode.ts","../src/node/utils.ts","../src/node/encrypt.ts"],"names":["nodeCrypto","Buffer"],"mappings":";;;;AAIO,SAAS,MAAA,CAAO,IAAA,EAAc,MAAA,GAAyB,MAAA,EAAmC;AAC/F,EAAA,IAAI;AACF,IAAA,OAAO,GAAA,CAAI,EAAE,KAAA,EAAO,MAAA,CAAO,KAAK,IAAA,EAAM,MAAM,GAAG,CAAA;AAAA,EACjD,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,IAAA,CAAK,EAAE,OAAA,EAAS,uBAAA,EAAyB,aAAa,eAAA,CAAgB,KAAK,GAAG,CAAA;AAAA,EACvF;AACF;AAEO,SAAS,MAAA,CAAO,IAAA,EAAc,MAAA,GAAyB,MAAA,EAAwB;AACpF,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAAE,QAAA,CAAS,MAAM,CAAC,CAAA;AAAA,EAC/C,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,IAAA,CAAK,EAAE,OAAA,EAAS,uBAAA,EAAyB,aAAa,eAAA,CAAgB,KAAK,GAAG,CAAA;AAAA,EACvF;AACF;ACbO,SAAS,OAAA,GAA0B;AACxC,EAAA,IAAI;AACF,IAAA,OAAO,GAAA,CAAIA,WAAA,CAAW,UAAA,EAAY,CAAA;AAAA,EACpC,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,IAAA,CAAK,EAAE,OAAA,EAAS,4CAAA,EAA8C,aAAa,eAAA,CAAgB,KAAK,GAAG,CAAA;AAAA,EAC5G;AACF;AAEO,SAAS,WAAW,GAAA,EAA2C;AACpE,EAAA,OAAO,eAAeA,WAAA,CAAW,SAAA;AACnC;;;ACPO,IAAM,cAAA,GAAiB;AAEvB,SAAS,KAAK,IAAA,EAA8B;AACjD,EAAA,IAAI,CAAC,MAAA,CAAO,IAAI,CAAA,EAAG;AACjB,IAAA,OAAO,KAAK,EAAE,OAAA,EAAS,wBAAA,EAA0B,WAAA,EAAa,mCAAmC,CAAA;AAAA,EACnG;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAASA,YAAW,UAAA,CAAW,QAAQ,EAAE,MAAA,CAAO,IAAI,EAAE,MAAA,EAAO;AACnE,IAAA,OAAO,MAAA,CAAO,QAAQ,WAAW,CAAA;AAAA,EACnC,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,IAAA,CAAK,EAAE,OAAA,EAAS,wCAAA,EAA0C,aAAa,eAAA,CAAgB,KAAK,GAAG,CAAA;AAAA,EACxG;AACF;AAEO,SAAS,aAAa,GAAA,EAAuD;AAClF,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,IAAI,CAAC,MAAA,CAAO,GAAA,EAAK,CAAC,CAAA,EAAG,OAAO,IAAA,CAAK,EAAE,OAAA,EAAS,6BAAA,EAA+B,WAAA,EAAa,oBAAA,EAAsB,CAAA;AAE9G,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAYA,YAAW,UAAA,CAAW,QAAQ,EAAE,MAAA,CAAO,GAAG,EAAE,MAAA,EAAO;AACrE,MAAA,MAAM,SAAA,GAAYA,WAAAA,CAAW,eAAA,CAAgB,SAAS,CAAA;AACtD,MAAA,OAAO,GAAA,CAAI,EAAE,SAAA,EAAW,CAAA;AAAA,IAC1B,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,IAAA,CAAK,EAAE,OAAA,EAAS,gDAAA,EAAkD,aAAa,eAAA,CAAgB,KAAK,GAAG,CAAA;AAAA,IAChH;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,UAAA,CAAW,GAAG,CAAA,EAAG,OAAO,IAAA,CAAK,EAAE,OAAA,EAAS,oBAAA,EAAsB,WAAA,EAAa,6BAAA,EAA+B,CAAA;AAC/G,EAAA,OAAO,GAAA,CAAI,EAAE,SAAA,EAAW,GAAA,EAAK,CAAA;AAC/B;AAEO,SAAS,OAAA,CAAQ,MAAc,SAAA,EAAoC;AACxE,EAAA,IAAI,CAAC,MAAA,CAAO,IAAI,CAAA,EAAG;AACjB,IAAA,OAAO,KAAK,EAAE,OAAA,EAAS,2BAAA,EAA6B,WAAA,EAAa,mCAAmC,CAAA;AAAA,EACtG;AAEA,EAAA,IAAI,CAAC,UAAA,CAAW,SAAS,CAAA,EAAG;AAC1B,IAAA,OAAO,KAAK,EAAE,OAAA,EAAS,wBAAA,EAA0B,WAAA,EAAa,+BAA+B,CAAA;AAAA,EAC/F;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,EAAA,GAAKA,WAAAA,CAAW,WAAA,CAAY,EAAE,CAAA;AACpC,IAAA,MAAM,MAAA,GAASA,WAAAA,CAAW,cAAA,CAAe,cAAA,EAAgB,WAAW,EAAE,CAAA;AACtE,IAAA,MAAM,SAAA,GAAYC,MAAAA,CAAO,MAAA,CAAO,CAAC,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA,EAAG,MAAA,CAAO,KAAA,EAAO,CAAC,CAAA;AAC7E,IAAA,MAAM,GAAA,GAAM,OAAO,UAAA,EAAW;AAE9B,IAAA,MAAM,EAAE,QAAQ,SAAA,EAAW,KAAA,EAAO,SAAQ,GAAI,MAAA,CAAO,IAAI,WAAW,CAAA;AACpE,IAAA,MAAM,EAAE,QAAQ,gBAAA,EAAkB,KAAA,EAAO,gBAAe,GAAI,MAAA,CAAO,WAAW,WAAW,CAAA;AACzF,IAAA,MAAM,EAAE,QAAQ,UAAA,EAAY,KAAA,EAAO,UAAS,GAAI,MAAA,CAAO,KAAK,WAAW,CAAA;AACvE,IAAA,IAAI,OAAA,IAAW,kBAAkB,QAAA,EAAU;AACzC,MAAA,OAAO,KAAK,EAAE,OAAA,EAAS,iCAAA,EAAmC,WAAA,EAAa,kBAAkB,CAAA;AAAA,IAC3F;AAEA,IAAA,OAAO,IAAI,CAAA,EAAG,SAAS,IAAI,gBAAgB,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,CAAG,CAAA;AAAA,EAC9D,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,IAAA,CAAK,EAAE,OAAA,EAAS,2CAAA,EAA6C,aAAa,eAAA,CAAgB,KAAK,GAAG,CAAA;AAAA,EAC3G;AACF;AAEO,SAAS,OAAA,CAAQ,WAAmB,SAAA,EAAoC;AAC7E,EAAA,IAAI,oBAAA,CAAqB,IAAA,CAAK,SAAS,CAAA,KAAM,KAAA,EAAO;AAClD,IAAA,OAAO,IAAA,CAAK;AAAA,MACV,OAAA,EAAS,+BAAA;AAAA,MACT,WAAA,EAAa;AAAA,KACd,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,CAAC,IAAI,aAAA,EAAe,GAAG,IAAI,SAAA,CAAU,KAAA,CAAM,KAAK,CAAC,CAAA;AACvD,EAAA,IAAI,CAAC,MAAA,CAAO,EAAA,EAAI,CAAC,KAAK,CAAC,MAAA,CAAO,aAAA,EAAe,CAAC,CAAA,IAAK,CAAC,MAAA,CAAO,GAAA,EAAK,CAAC,CAAA,EAAG;AAClE,IAAA,OAAO,IAAA,CAAK;AAAA,MACV,OAAA,EAAS,mCAAA;AAAA,MACT,WAAA,EAAa;AAAA,KACd,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,CAAC,UAAA,CAAW,SAAS,CAAA,EAAG;AAC1B,IAAA,OAAO,KAAK,EAAE,OAAA,EAAS,wBAAA,EAA0B,WAAA,EAAa,+BAA+B,CAAA;AAAA,EAC/F;AAEA,EAAA,MAAM,EAAE,OAAO,OAAA,EAAS,KAAA,EAAO,SAAQ,GAAI,MAAA,CAAO,IAAI,WAAW,CAAA;AACjE,EAAA,MAAM,EAAE,OAAO,cAAA,EAAgB,KAAA,EAAO,gBAAe,GAAI,MAAA,CAAO,eAAe,WAAW,CAAA;AAC1F,EAAA,MAAM,EAAE,OAAO,QAAA,EAAU,KAAA,EAAO,UAAS,GAAI,MAAA,CAAO,KAAK,WAAW,CAAA;AACpE,EAAA,IAAI,OAAA,IAAW,kBAAkB,QAAA,EAAU;AACzC,IAAA,OAAO,KAAK,EAAE,OAAA,EAAS,uCAAA,EAAyC,WAAA,EAAa,kBAAkB,CAAA;AAAA,EACjG;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAWD,WAAAA,CAAW,gBAAA,CAAiB,cAAA,EAAgB,WAAW,OAAO,CAAA;AAC/E,IAAA,QAAA,CAAS,WAAW,QAAQ,CAAA;AAE5B,IAAA,MAAM,SAAA,GAAYC,MAAAA,CAAO,MAAA,CAAO,CAAC,QAAA,CAAS,MAAA,CAAO,cAAc,CAAA,EAAG,QAAA,CAAS,KAAA,EAAO,CAAC,CAAA;AACnF,IAAA,OAAO,MAAA,CAAO,WAAW,MAAM,CAAA;AAAA,EACjC,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,IAAA,CAAK,EAAE,OAAA,EAAS,2CAAA,EAA6C,aAAa,eAAA,CAAgB,KAAK,GAAG,CAAA;AAAA,EAC3G;AACF;AAEO,SAAS,UAAA,CAAW,MAA+B,SAAA,EAAoC;AAC5F,EAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAM,GAAI,cAAc,IAAI,CAAA;AAC5C,EAAA,IAAI,KAAA,EAAO,OAAO,IAAA,CAAK,KAAK,CAAA;AAC5B,EAAA,OAAO,OAAA,CAAQ,QAAQ,SAAS,CAAA;AAClC;AAEO,SAAS,UAAA,CAAW,WAAmB,SAAA,EAAiE;AAC7G,EAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAM,GAAI,OAAA,CAAQ,WAAW,SAAS,CAAA;AACtD,EAAA,IAAI,KAAA,EAAO,OAAO,IAAA,CAAK,KAAK,CAAA;AAC5B,EAAA,OAAO,YAAY,MAAM,CAAA;AAC3B","file":"chunk-MMHTEI3Q.js","sourcesContent":["import { Buffer } from 'node:buffer';\r\nimport { $err, $ok, $stringifyError, type Result } from '~/error';\r\nimport type { EncodingFormat } from '~/types';\r\n\r\nexport function encode(data: string, format: EncodingFormat = 'utf8'): Result<{ bytes: Buffer }> {\r\n try {\r\n return $ok({ bytes: Buffer.from(data, format) });\r\n } catch (error) {\r\n return $err({ message: 'Failed to encode data', description: $stringifyError(error) });\r\n }\r\n}\r\n\r\nexport function decode(data: Buffer, format: EncodingFormat = 'utf8'): Result<string> {\r\n try {\r\n return $ok(Buffer.from(data).toString(format));\r\n } catch (error) {\r\n return $err({ message: 'Failed to decode data', description: $stringifyError(error) });\r\n }\r\n}\r\n","import nodeCrypto from 'node:crypto';\r\nimport { $err, $ok, $stringifyError, type Result } from '~/error';\r\n\r\nexport const ENCRYPTED_NODE_REGEX = /^([A-Za-z0-9_-]+)\\.([A-Za-z0-9_-]+)\\.([A-Za-z0-9_-]+)\\.$/;\r\n\r\nexport function newUuid(): Result<string> {\r\n try {\r\n return $ok(nodeCrypto.randomUUID());\r\n } catch (error) {\r\n return $err({ message: 'Failed to generate UUID with Crypto NodeJS', description: $stringifyError(error) });\r\n }\r\n}\r\n\r\nexport function $isNodeKey(key: unknown): key is nodeCrypto.KeyObject {\r\n return key instanceof nodeCrypto.KeyObject;\r\n}\r\n","import { Buffer } from 'node:buffer';\r\nimport nodeCrypto from 'node:crypto';\r\nimport { $err, $ok, $stringifyError, type Result } from '~/error';\r\nimport type { NodeKey } from '~/types';\r\nimport { $isStr, $parseToObj, $stringifyObj, ENCRYPTED_NODE_REGEX } from '~/utils';\r\nimport { decode, encode } from './encode';\r\nimport { $isNodeKey } from './utils';\r\n\r\nexport const NODE_ALGORITHM = 'aes-256-gcm';\r\n\r\nexport function hash(data: string): Result<string> {\r\n if (!$isStr(data)) {\r\n return $err({ message: 'Empty data for hashing', description: 'Data must be a non-empty string' });\r\n }\r\n\r\n try {\r\n const hashed = nodeCrypto.createHash('sha256').update(data).digest();\r\n return decode(hashed, 'base64url');\r\n } catch (error) {\r\n return $err({ message: 'Failed to hash data with Crypto NodeJS', description: $stringifyError(error) });\r\n }\r\n}\r\n\r\nexport function newSecretKey(key: string | NodeKey): Result<{ secretKey: NodeKey }> {\r\n if (typeof key === 'string') {\r\n if (!$isStr(key, 1)) return $err({ message: 'Empty key for Crypto NodeJS', description: 'Invalid secret key' });\r\n\r\n try {\r\n const hashedKey = nodeCrypto.createHash('sha256').update(key).digest();\r\n const secretKey = nodeCrypto.createSecretKey(hashedKey);\r\n return $ok({ secretKey });\r\n } catch (error) {\r\n return $err({ message: 'Failed to create secret key with Crypto NodeJS', description: $stringifyError(error) });\r\n }\r\n }\r\n\r\n if (!$isNodeKey(key)) return $err({ message: 'Invalid secret key', description: 'Expected a crypto.KeyObject' });\r\n return $ok({ secretKey: key });\r\n}\r\n\r\nexport function encrypt(data: string, secretKey: NodeKey): Result<string> {\r\n if (!$isStr(data)) {\r\n return $err({ message: 'Empty data for encryption', description: 'Data must be a non-empty string' });\r\n }\r\n\r\n if (!$isNodeKey(secretKey)) {\r\n return $err({ message: 'Invalid encryption key', description: 'Expected a crypto.KeyObject' });\r\n }\r\n\r\n try {\r\n const iv = nodeCrypto.randomBytes(12);\r\n const cipher = nodeCrypto.createCipheriv(NODE_ALGORITHM, secretKey, iv);\r\n const encrypted = Buffer.concat([cipher.update(data, 'utf8'), cipher.final()]);\r\n const tag = cipher.getAuthTag();\r\n\r\n const { result: decodedIv, error: ivError } = decode(iv, 'base64url');\r\n const { result: decodedEncrypted, error: encryptedError } = decode(encrypted, 'base64url');\r\n const { result: decodedTag, error: tagError } = decode(tag, 'base64url');\r\n if (ivError || encryptedError || tagError) {\r\n return $err({ message: 'Failed to encode encrypted data', description: 'Encoding error' });\r\n }\r\n\r\n return $ok(`${decodedIv}.${decodedEncrypted}.${decodedTag}.`);\r\n } catch (error) {\r\n return $err({ message: 'Failed to encrypt data with Crypto NodeJS', description: $stringifyError(error) });\r\n }\r\n}\r\n\r\nexport function decrypt(encrypted: string, secretKey: NodeKey): Result<string> {\r\n if (ENCRYPTED_NODE_REGEX.test(encrypted) === false) {\r\n return $err({\r\n message: 'Invalid encrypted data format',\r\n description: 'Encrypted data must be in the format \"iv.encrypted.tag.\"',\r\n });\r\n }\r\n\r\n const [iv, encryptedData, tag] = encrypted.split('.', 4);\r\n if (!$isStr(iv, 1) || !$isStr(encryptedData, 1) || !$isStr(tag, 1)) {\r\n return $err({\r\n message: 'Invalid parameters for decryption',\r\n description: 'IV, encrypted data, and tag must be non-empty strings',\r\n });\r\n }\r\n\r\n if (!$isNodeKey(secretKey)) {\r\n return $err({ message: 'Invalid decryption key', description: 'Expected a crypto.KeyObject' });\r\n }\r\n\r\n const { bytes: ivBytes, error: ivError } = encode(iv, 'base64url');\r\n const { bytes: encryptedBytes, error: encryptedError } = encode(encryptedData, 'base64url');\r\n const { bytes: tagBytes, error: tagError } = encode(tag, 'base64url');\r\n if (ivError || encryptedError || tagError) {\r\n return $err({ message: 'Failed to encode IV or encrypted data', description: 'Encoding error' });\r\n }\r\n\r\n try {\r\n const decipher = nodeCrypto.createDecipheriv(NODE_ALGORITHM, secretKey, ivBytes);\r\n decipher.setAuthTag(tagBytes);\r\n\r\n const decrypted = Buffer.concat([decipher.update(encryptedBytes), decipher.final()]);\r\n return decode(decrypted, 'utf8');\r\n } catch (error) {\r\n return $err({ message: 'Failed to decrypt data with Crypto NodeJS', description: $stringifyError(error) });\r\n }\r\n}\r\n\r\nexport function encryptObj(data: Record<string, unknown>, secretKey: NodeKey): Result<string> {\r\n const { result, error } = $stringifyObj(data);\r\n if (error) return $err(error);\r\n return encrypt(result, secretKey);\r\n}\r\n\r\nexport function decryptObj(encrypted: string, secretKey: NodeKey): Result<{ result: Record<string, unknown> }> {\r\n const { result, error } = decrypt(encrypted, secretKey);\r\n if (error) return $err(error);\r\n return $parseToObj(result);\r\n}\r\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkQN3P7CIM_cjs = require('./chunk-QN3P7CIM.cjs');
3
+ var chunkWD5FWRQ4_cjs = require('./chunk-WD5FWRQ4.cjs');
4
4
  var buffer = require('buffer');
5
5
  var nodeCrypto2 = require('crypto');
6
6
 
@@ -10,24 +10,23 @@ var nodeCrypto2__default = /*#__PURE__*/_interopDefault(nodeCrypto2);
10
10
 
11
11
  function encode(data, format = "utf8") {
12
12
  try {
13
- return chunkQN3P7CIM_cjs.$ok({ bytes: buffer.Buffer.from(data, format) });
13
+ return chunkWD5FWRQ4_cjs.$ok({ bytes: buffer.Buffer.from(data, format) });
14
14
  } catch (error) {
15
- return chunkQN3P7CIM_cjs.$err({ message: "Failed to encode data", description: chunkQN3P7CIM_cjs.$stringifyError(error) });
15
+ return chunkWD5FWRQ4_cjs.$err({ message: "Failed to encode data", description: chunkWD5FWRQ4_cjs.$stringifyError(error) });
16
16
  }
17
17
  }
18
18
  function decode(data, format = "utf8") {
19
19
  try {
20
- return chunkQN3P7CIM_cjs.$ok(buffer.Buffer.from(data).toString(format));
20
+ return chunkWD5FWRQ4_cjs.$ok(buffer.Buffer.from(data).toString(format));
21
21
  } catch (error) {
22
- return chunkQN3P7CIM_cjs.$err({ message: "Failed to decode data", description: chunkQN3P7CIM_cjs.$stringifyError(error) });
22
+ return chunkWD5FWRQ4_cjs.$err({ message: "Failed to decode data", description: chunkWD5FWRQ4_cjs.$stringifyError(error) });
23
23
  }
24
24
  }
25
- var ENCRYPTED_NODE_REGEX = /^([A-Za-z0-9_-]+)\.([A-Za-z0-9_-]+)\.([A-Za-z0-9_-]+)\.$/;
26
25
  function newUuid() {
27
26
  try {
28
- return chunkQN3P7CIM_cjs.$ok(nodeCrypto2__default.default.randomUUID());
27
+ return chunkWD5FWRQ4_cjs.$ok(nodeCrypto2__default.default.randomUUID());
29
28
  } catch (error) {
30
- return chunkQN3P7CIM_cjs.$err({ message: "Failed to generate UUID with Crypto NodeJS", description: chunkQN3P7CIM_cjs.$stringifyError(error) });
29
+ return chunkWD5FWRQ4_cjs.$err({ message: "Failed to generate UUID with Crypto NodeJS", description: chunkWD5FWRQ4_cjs.$stringifyError(error) });
31
30
  }
32
31
  }
33
32
  function $isNodeKey(key) {
@@ -37,36 +36,36 @@ function $isNodeKey(key) {
37
36
  // src/node/encrypt.ts
38
37
  var NODE_ALGORITHM = "aes-256-gcm";
39
38
  function hash(data) {
40
- if (!chunkQN3P7CIM_cjs.$isStr(data)) {
41
- return chunkQN3P7CIM_cjs.$err({ message: "Empty data for hashing", description: "Data must be a non-empty string" });
39
+ if (!chunkWD5FWRQ4_cjs.$isStr(data)) {
40
+ return chunkWD5FWRQ4_cjs.$err({ message: "Empty data for hashing", description: "Data must be a non-empty string" });
42
41
  }
43
42
  try {
44
43
  const hashed = nodeCrypto2__default.default.createHash("sha256").update(data).digest();
45
44
  return decode(hashed, "base64url");
46
45
  } catch (error) {
47
- return chunkQN3P7CIM_cjs.$err({ message: "Failed to hash data with Crypto NodeJS", description: chunkQN3P7CIM_cjs.$stringifyError(error) });
46
+ return chunkWD5FWRQ4_cjs.$err({ message: "Failed to hash data with Crypto NodeJS", description: chunkWD5FWRQ4_cjs.$stringifyError(error) });
48
47
  }
49
48
  }
50
49
  function newSecretKey(key) {
51
50
  if (typeof key === "string") {
52
- if (!chunkQN3P7CIM_cjs.$isStr(key, 1)) return chunkQN3P7CIM_cjs.$err({ message: "Empty key for Crypto NodeJS", description: "Invalid secret key" });
51
+ if (!chunkWD5FWRQ4_cjs.$isStr(key, 1)) return chunkWD5FWRQ4_cjs.$err({ message: "Empty key for Crypto NodeJS", description: "Invalid secret key" });
53
52
  try {
54
53
  const hashedKey = nodeCrypto2__default.default.createHash("sha256").update(key).digest();
55
54
  const secretKey = nodeCrypto2__default.default.createSecretKey(hashedKey);
56
- return chunkQN3P7CIM_cjs.$ok({ secretKey });
55
+ return chunkWD5FWRQ4_cjs.$ok({ secretKey });
57
56
  } catch (error) {
58
- return chunkQN3P7CIM_cjs.$err({ message: "Failed to create secret key with Crypto NodeJS", description: chunkQN3P7CIM_cjs.$stringifyError(error) });
57
+ return chunkWD5FWRQ4_cjs.$err({ message: "Failed to create secret key with Crypto NodeJS", description: chunkWD5FWRQ4_cjs.$stringifyError(error) });
59
58
  }
60
59
  }
61
- if (!$isNodeKey(key)) return chunkQN3P7CIM_cjs.$err({ message: "Invalid secret key", description: "Expected a crypto.KeyObject" });
62
- return chunkQN3P7CIM_cjs.$ok({ secretKey: key });
60
+ if (!$isNodeKey(key)) return chunkWD5FWRQ4_cjs.$err({ message: "Invalid secret key", description: "Expected a crypto.KeyObject" });
61
+ return chunkWD5FWRQ4_cjs.$ok({ secretKey: key });
63
62
  }
64
63
  function encrypt(data, secretKey) {
65
- if (!chunkQN3P7CIM_cjs.$isStr(data)) {
66
- return chunkQN3P7CIM_cjs.$err({ message: "Empty data for encryption", description: "Data must be a non-empty string" });
64
+ if (!chunkWD5FWRQ4_cjs.$isStr(data)) {
65
+ return chunkWD5FWRQ4_cjs.$err({ message: "Empty data for encryption", description: "Data must be a non-empty string" });
67
66
  }
68
67
  if (!$isNodeKey(secretKey)) {
69
- return chunkQN3P7CIM_cjs.$err({ message: "Invalid encryption key", description: "Expected a crypto.KeyObject" });
68
+ return chunkWD5FWRQ4_cjs.$err({ message: "Invalid encryption key", description: "Expected a crypto.KeyObject" });
70
69
  }
71
70
  try {
72
71
  const iv = nodeCrypto2__default.default.randomBytes(12);
@@ -77,35 +76,35 @@ function encrypt(data, secretKey) {
77
76
  const { result: decodedEncrypted, error: encryptedError } = decode(encrypted, "base64url");
78
77
  const { result: decodedTag, error: tagError } = decode(tag, "base64url");
79
78
  if (ivError || encryptedError || tagError) {
80
- return chunkQN3P7CIM_cjs.$err({ message: "Failed to encode encrypted data", description: "Encoding error" });
79
+ return chunkWD5FWRQ4_cjs.$err({ message: "Failed to encode encrypted data", description: "Encoding error" });
81
80
  }
82
- return chunkQN3P7CIM_cjs.$ok(`${decodedIv}.${decodedEncrypted}.${decodedTag}.`);
81
+ return chunkWD5FWRQ4_cjs.$ok(`${decodedIv}.${decodedEncrypted}.${decodedTag}.`);
83
82
  } catch (error) {
84
- return chunkQN3P7CIM_cjs.$err({ message: "Failed to encrypt data with Crypto NodeJS", description: chunkQN3P7CIM_cjs.$stringifyError(error) });
83
+ return chunkWD5FWRQ4_cjs.$err({ message: "Failed to encrypt data with Crypto NodeJS", description: chunkWD5FWRQ4_cjs.$stringifyError(error) });
85
84
  }
86
85
  }
87
86
  function decrypt(encrypted, secretKey) {
88
- if (ENCRYPTED_NODE_REGEX.test(encrypted) === false) {
89
- return chunkQN3P7CIM_cjs.$err({
87
+ if (chunkWD5FWRQ4_cjs.ENCRYPTED_NODE_REGEX.test(encrypted) === false) {
88
+ return chunkWD5FWRQ4_cjs.$err({
90
89
  message: "Invalid encrypted data format",
91
90
  description: 'Encrypted data must be in the format "iv.encrypted.tag."'
92
91
  });
93
92
  }
94
93
  const [iv, encryptedData, tag] = encrypted.split(".", 4);
95
- if (!chunkQN3P7CIM_cjs.$isStr(iv, 1) || !chunkQN3P7CIM_cjs.$isStr(encryptedData, 1) || !chunkQN3P7CIM_cjs.$isStr(tag, 1)) {
96
- return chunkQN3P7CIM_cjs.$err({
94
+ if (!chunkWD5FWRQ4_cjs.$isStr(iv, 1) || !chunkWD5FWRQ4_cjs.$isStr(encryptedData, 1) || !chunkWD5FWRQ4_cjs.$isStr(tag, 1)) {
95
+ return chunkWD5FWRQ4_cjs.$err({
97
96
  message: "Invalid parameters for decryption",
98
97
  description: "IV, encrypted data, and tag must be non-empty strings"
99
98
  });
100
99
  }
101
100
  if (!$isNodeKey(secretKey)) {
102
- return chunkQN3P7CIM_cjs.$err({ message: "Invalid decryption key", description: "Expected a crypto.KeyObject" });
101
+ return chunkWD5FWRQ4_cjs.$err({ message: "Invalid decryption key", description: "Expected a crypto.KeyObject" });
103
102
  }
104
103
  const { bytes: ivBytes, error: ivError } = encode(iv, "base64url");
105
104
  const { bytes: encryptedBytes, error: encryptedError } = encode(encryptedData, "base64url");
106
105
  const { bytes: tagBytes, error: tagError } = encode(tag, "base64url");
107
106
  if (ivError || encryptedError || tagError) {
108
- return chunkQN3P7CIM_cjs.$err({ message: "Failed to encode IV or encrypted data", description: "Encoding error" });
107
+ return chunkWD5FWRQ4_cjs.$err({ message: "Failed to encode IV or encrypted data", description: "Encoding error" });
109
108
  }
110
109
  try {
111
110
  const decipher = nodeCrypto2__default.default.createDecipheriv(NODE_ALGORITHM, secretKey, ivBytes);
@@ -113,21 +112,20 @@ function decrypt(encrypted, secretKey) {
113
112
  const decrypted = buffer.Buffer.concat([decipher.update(encryptedBytes), decipher.final()]);
114
113
  return decode(decrypted, "utf8");
115
114
  } catch (error) {
116
- return chunkQN3P7CIM_cjs.$err({ message: "Failed to decrypt data with Crypto NodeJS", description: chunkQN3P7CIM_cjs.$stringifyError(error) });
115
+ return chunkWD5FWRQ4_cjs.$err({ message: "Failed to decrypt data with Crypto NodeJS", description: chunkWD5FWRQ4_cjs.$stringifyError(error) });
117
116
  }
118
117
  }
119
118
  function encryptObj(data, secretKey) {
120
- const { result, error } = chunkQN3P7CIM_cjs.$stringifyObj(data);
121
- if (error) return chunkQN3P7CIM_cjs.$err(error);
119
+ const { result, error } = chunkWD5FWRQ4_cjs.$stringifyObj(data);
120
+ if (error) return chunkWD5FWRQ4_cjs.$err(error);
122
121
  return encrypt(result, secretKey);
123
122
  }
124
123
  function decryptObj(encrypted, secretKey) {
125
124
  const { result, error } = decrypt(encrypted, secretKey);
126
- if (error) return chunkQN3P7CIM_cjs.$err(error);
127
- return chunkQN3P7CIM_cjs.$parseToObj(result);
125
+ if (error) return chunkWD5FWRQ4_cjs.$err(error);
126
+ return chunkWD5FWRQ4_cjs.$parseToObj(result);
128
127
  }
129
128
 
130
- exports.ENCRYPTED_NODE_REGEX = ENCRYPTED_NODE_REGEX;
131
129
  exports.NODE_ALGORITHM = NODE_ALGORITHM;
132
130
  exports.decode = decode;
133
131
  exports.decrypt = decrypt;
@@ -138,5 +136,5 @@ exports.encryptObj = encryptObj;
138
136
  exports.hash = hash;
139
137
  exports.newSecretKey = newSecretKey;
140
138
  exports.newUuid = newUuid;
141
- //# sourceMappingURL=chunk-4DJEDYAV.cjs.map
142
- //# sourceMappingURL=chunk-4DJEDYAV.cjs.map
139
+ //# sourceMappingURL=chunk-WB7F34SY.cjs.map
140
+ //# sourceMappingURL=chunk-WB7F34SY.cjs.map