cipher-kit 1.0.1 → 2.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +123 -1
  2. package/dist/chunk-6HNTSQAP.js +139 -0
  3. package/dist/chunk-6HNTSQAP.js.map +1 -0
  4. package/dist/chunk-DZLEO2JD.cjs +511 -0
  5. package/dist/chunk-DZLEO2JD.cjs.map +1 -0
  6. package/dist/chunk-I25C3WUZ.js +382 -0
  7. package/dist/chunk-I25C3WUZ.js.map +1 -0
  8. package/dist/chunk-SRGSVNQ2.js +486 -0
  9. package/dist/chunk-SRGSVNQ2.js.map +1 -0
  10. package/dist/chunk-UR5HPMNF.cjs +411 -0
  11. package/dist/chunk-UR5HPMNF.cjs.map +1 -0
  12. package/dist/chunk-ZIVTPFKN.cjs +163 -0
  13. package/dist/chunk-ZIVTPFKN.cjs.map +1 -0
  14. package/dist/export-C2vQXrZa.d.cts +263 -0
  15. package/dist/export-DEWwhS-S.d.ts +264 -0
  16. package/dist/export-DzNR1ht3.d.ts +263 -0
  17. package/dist/export-oVEmcDLI.d.cts +264 -0
  18. package/dist/index.cjs +82 -38
  19. package/dist/index.d.cts +3 -22
  20. package/dist/index.d.ts +3 -22
  21. package/dist/index.js +3 -3
  22. package/dist/node.cjs +84 -28
  23. package/dist/node.d.cts +3 -22
  24. package/dist/node.d.ts +3 -22
  25. package/dist/node.js +2 -2
  26. package/dist/validate-TRx4DDtg.d.cts +123 -0
  27. package/dist/validate-TRx4DDtg.d.ts +123 -0
  28. package/dist/web-api.cjs +84 -28
  29. package/dist/web-api.d.cts +2 -21
  30. package/dist/web-api.d.ts +2 -21
  31. package/dist/web-api.js +2 -2
  32. package/package.json +6 -4
  33. package/dist/chunk-5MYBXP4A.cjs +0 -228
  34. package/dist/chunk-5MYBXP4A.cjs.map +0 -1
  35. package/dist/chunk-DC4WFPHL.js +0 -141
  36. package/dist/chunk-DC4WFPHL.js.map +0 -1
  37. package/dist/chunk-NGVIYM6K.js +0 -217
  38. package/dist/chunk-NGVIYM6K.js.map +0 -1
  39. package/dist/chunk-SBXDW4MY.cjs +0 -99
  40. package/dist/chunk-SBXDW4MY.cjs.map +0 -1
  41. package/dist/chunk-THMEBIZB.js +0 -79
  42. package/dist/chunk-THMEBIZB.js.map +0 -1
  43. package/dist/chunk-XTA6TKBQ.cjs +0 -156
  44. package/dist/chunk-XTA6TKBQ.cjs.map +0 -1
  45. package/dist/utils-Bryp07ny.d.cts +0 -48
  46. package/dist/utils-Bryp07ny.d.ts +0 -48
@@ -0,0 +1,123 @@
1
+ import nodeCrypto, { webcrypto } from 'node:crypto';
2
+
3
+ interface ResultErr {
4
+ readonly message: string;
5
+ readonly description: string;
6
+ }
7
+ type Result<T, E = ResultErr> = T extends object ? ({
8
+ readonly [K in keyof T]: T[K];
9
+ } & {
10
+ readonly success: true;
11
+ readonly error?: undefined;
12
+ }) | ({
13
+ readonly [K in keyof T]?: undefined;
14
+ } & {
15
+ readonly success: false;
16
+ readonly error: E;
17
+ }) : {
18
+ readonly success: true;
19
+ readonly result: T;
20
+ readonly error?: undefined;
21
+ } | {
22
+ readonly success: false;
23
+ readonly error: E;
24
+ readonly result?: undefined;
25
+ };
26
+
27
+ /**
28
+ * Stringify an object.
29
+ *
30
+ * @param obj - The object to stringify.
31
+ * @returns An JSON string.
32
+ * @throws {Error} If the object cannot be stringified.
33
+ */
34
+ declare function stringifyObj<T extends object = Record<string, unknown>>(obj: T): string;
35
+ /**
36
+ * Stringify an object.
37
+ *
38
+ * @param obj - The object to stringify.
39
+ * @returns A Result containing the JSON string or an error.
40
+ */
41
+ declare function tryStringifyObj<T extends object = Record<string, unknown>>(obj: T): Result<string>;
42
+ /**
43
+ * Parse a string to an object.
44
+ *
45
+ * @param str - The JSON string to parse.
46
+ * @returns A Result containing the parsed object or an error.
47
+ */
48
+ declare function tryParseToObj<T extends object = Record<string, unknown>>(str: string): Result<{
49
+ result: T;
50
+ }>;
51
+ /**
52
+ * Parse a string to an object.
53
+ *
54
+ * @param str - The JSON string to parse.
55
+ * @returns A parsed object.
56
+ * @throws {Error} If the string cannot be parsed or is not a valid object.
57
+ */
58
+ declare function parseToObj<T extends object = Record<string, unknown>>(str: string): T;
59
+
60
+ declare const ENCODING_FORMATS: readonly ["base64", "base64url", "hex", "utf8", "latin1"];
61
+ declare const DIGEST_ALGORITHMS: Readonly<{
62
+ readonly sha256: {
63
+ readonly node: "sha256";
64
+ readonly web: "SHA-256";
65
+ };
66
+ readonly sha384: {
67
+ readonly node: "sha384";
68
+ readonly web: "SHA-384";
69
+ };
70
+ readonly sha512: {
71
+ readonly node: "sha512";
72
+ readonly web: "SHA-512";
73
+ };
74
+ }>;
75
+ declare const ENCRYPTION_ALGORITHMS: Readonly<{
76
+ readonly aes256gcm: {
77
+ readonly name: "aes256gcm";
78
+ readonly keyBytes: 32;
79
+ readonly ivLength: 12;
80
+ readonly node: "aes-256-gcm";
81
+ readonly web: "AES-GCM";
82
+ };
83
+ readonly aes192gcm: {
84
+ readonly name: "aes192gcm";
85
+ readonly keyBytes: 24;
86
+ readonly ivLength: 12;
87
+ readonly node: "aes-192-gcm";
88
+ readonly web: "AES-GCM";
89
+ };
90
+ readonly aes128gcm: {
91
+ readonly name: "aes128gcm";
92
+ readonly keyBytes: 16;
93
+ readonly ivLength: 12;
94
+ readonly node: "aes-128-gcm";
95
+ readonly web: "AES-GCM";
96
+ };
97
+ }>;
98
+
99
+ declare const __brand: unique symbol;
100
+ type Brand<T> = {
101
+ readonly [__brand]: T;
102
+ };
103
+ /** Secret Key Type */
104
+ type SecretKey<Platform extends 'web' | 'node'> = {
105
+ readonly platform: Platform;
106
+ readonly digest: keyof typeof DIGEST_ALGORITHMS;
107
+ readonly algo: (typeof ENCRYPTION_ALGORITHMS)[keyof typeof ENCRYPTION_ALGORITHMS];
108
+ readonly key: Platform extends 'web' ? webcrypto.CryptoKey : nodeCrypto.KeyObject;
109
+ } & Brand<`secretKey-${Platform}`>;
110
+ /** Supported encoding formats */
111
+ type EncodingFormat = (typeof ENCODING_FORMATS)[number];
112
+
113
+ declare function isSecretKey<Platform extends 'node' | 'web'>(x: unknown, platform: Platform): x is SecretKey<Platform>;
114
+ /** Regular expressions for encrypted data patterns */
115
+ declare const ENCRYPTED_REGEX: Readonly<{
116
+ general: RegExp;
117
+ node: RegExp;
118
+ web: RegExp;
119
+ }>;
120
+ /** Checks if the input string matches the specified encrypted data pattern. */
121
+ declare function matchPattern(data: string, format: 'general' | 'node' | 'web'): boolean;
122
+
123
+ export { DIGEST_ALGORITHMS as D, ENCRYPTED_REGEX as E, type Result as R, type SecretKey as S, tryStringifyObj as a, type EncodingFormat as b, ENCRYPTION_ALGORITHMS as c, isSecretKey as i, matchPattern as m, parseToObj as p, stringifyObj as s, tryParseToObj as t };
package/dist/web-api.cjs CHANGED
@@ -1,73 +1,129 @@
1
1
  'use strict';
2
2
 
3
- var chunk5MYBXP4A_cjs = require('./chunk-5MYBXP4A.cjs');
4
- var chunkSBXDW4MY_cjs = require('./chunk-SBXDW4MY.cjs');
3
+ var chunkDZLEO2JD_cjs = require('./chunk-DZLEO2JD.cjs');
4
+ var chunkZIVTPFKN_cjs = require('./chunk-ZIVTPFKN.cjs');
5
5
 
6
6
 
7
7
 
8
- Object.defineProperty(exports, "createSecretKey", {
8
+ Object.defineProperty(exports, "convertBytesToStr", {
9
9
  enumerable: true,
10
- get: function () { return chunk5MYBXP4A_cjs.createSecretKey; }
10
+ get: function () { return chunkDZLEO2JD_cjs.convertBytesToStr; }
11
11
  });
12
- Object.defineProperty(exports, "decode", {
12
+ Object.defineProperty(exports, "convertFormat", {
13
13
  enumerable: true,
14
- get: function () { return chunk5MYBXP4A_cjs.decode; }
14
+ get: function () { return chunkDZLEO2JD_cjs.convertFormat; }
15
15
  });
16
- Object.defineProperty(exports, "decrypt", {
16
+ Object.defineProperty(exports, "convertStrToBytes", {
17
17
  enumerable: true,
18
- get: function () { return chunk5MYBXP4A_cjs.decrypt; }
18
+ get: function () { return chunkDZLEO2JD_cjs.convertStrToBytes; }
19
19
  });
20
- Object.defineProperty(exports, "decryptObj", {
20
+ Object.defineProperty(exports, "createSecretKey", {
21
21
  enumerable: true,
22
- get: function () { return chunk5MYBXP4A_cjs.decryptObj; }
22
+ get: function () { return chunkDZLEO2JD_cjs.createSecretKey; }
23
23
  });
24
- Object.defineProperty(exports, "encode", {
24
+ Object.defineProperty(exports, "decrypt", {
25
25
  enumerable: true,
26
- get: function () { return chunk5MYBXP4A_cjs.encode; }
26
+ get: function () { return chunkDZLEO2JD_cjs.decrypt; }
27
+ });
28
+ Object.defineProperty(exports, "decryptObj", {
29
+ enumerable: true,
30
+ get: function () { return chunkDZLEO2JD_cjs.decryptObj; }
27
31
  });
28
32
  Object.defineProperty(exports, "encrypt", {
29
33
  enumerable: true,
30
- get: function () { return chunk5MYBXP4A_cjs.encrypt; }
34
+ get: function () { return chunkDZLEO2JD_cjs.encrypt; }
31
35
  });
32
36
  Object.defineProperty(exports, "encryptObj", {
33
37
  enumerable: true,
34
- get: function () { return chunk5MYBXP4A_cjs.encryptObj; }
38
+ get: function () { return chunkDZLEO2JD_cjs.encryptObj; }
35
39
  });
36
40
  Object.defineProperty(exports, "generateUuid", {
37
41
  enumerable: true,
38
- get: function () { return chunk5MYBXP4A_cjs.generateUuid; }
42
+ get: function () { return chunkDZLEO2JD_cjs.generateUuid; }
39
43
  });
40
44
  Object.defineProperty(exports, "hash", {
41
45
  enumerable: true,
42
- get: function () { return chunk5MYBXP4A_cjs.hash; }
46
+ get: function () { return chunkDZLEO2JD_cjs.hash; }
47
+ });
48
+ Object.defineProperty(exports, "hashPassword", {
49
+ enumerable: true,
50
+ get: function () { return chunkDZLEO2JD_cjs.hashPassword; }
51
+ });
52
+ Object.defineProperty(exports, "tryConvertBytesToStr", {
53
+ enumerable: true,
54
+ get: function () { return chunkDZLEO2JD_cjs.tryConvertBytesToStr; }
55
+ });
56
+ Object.defineProperty(exports, "tryConvertFormat", {
57
+ enumerable: true,
58
+ get: function () { return chunkDZLEO2JD_cjs.tryConvertFormat; }
59
+ });
60
+ Object.defineProperty(exports, "tryConvertStrToBytes", {
61
+ enumerable: true,
62
+ get: function () { return chunkDZLEO2JD_cjs.tryConvertStrToBytes; }
63
+ });
64
+ Object.defineProperty(exports, "tryCreateSecretKey", {
65
+ enumerable: true,
66
+ get: function () { return chunkDZLEO2JD_cjs.tryCreateSecretKey; }
67
+ });
68
+ Object.defineProperty(exports, "tryDecrypt", {
69
+ enumerable: true,
70
+ get: function () { return chunkDZLEO2JD_cjs.tryDecrypt; }
71
+ });
72
+ Object.defineProperty(exports, "tryDecryptObj", {
73
+ enumerable: true,
74
+ get: function () { return chunkDZLEO2JD_cjs.tryDecryptObj; }
75
+ });
76
+ Object.defineProperty(exports, "tryEncrypt", {
77
+ enumerable: true,
78
+ get: function () { return chunkDZLEO2JD_cjs.tryEncrypt; }
79
+ });
80
+ Object.defineProperty(exports, "tryEncryptObj", {
81
+ enumerable: true,
82
+ get: function () { return chunkDZLEO2JD_cjs.tryEncryptObj; }
43
83
  });
44
- Object.defineProperty(exports, "ENCRYPTION_REGEX", {
84
+ Object.defineProperty(exports, "tryGenerateUuid", {
45
85
  enumerable: true,
46
- get: function () { return chunkSBXDW4MY_cjs.ENCRYPTION_REGEX; }
86
+ get: function () { return chunkDZLEO2JD_cjs.tryGenerateUuid; }
47
87
  });
48
- Object.defineProperty(exports, "WEB_API_ALGORITHM", {
88
+ Object.defineProperty(exports, "tryHash", {
49
89
  enumerable: true,
50
- get: function () { return chunkSBXDW4MY_cjs.WEB_API_ALGORITHM; }
90
+ get: function () { return chunkDZLEO2JD_cjs.tryHash; }
51
91
  });
52
- Object.defineProperty(exports, "isInEncryptionFormat", {
92
+ Object.defineProperty(exports, "tryHashPassword", {
53
93
  enumerable: true,
54
- get: function () { return chunkSBXDW4MY_cjs.isInEncryptionFormat; }
94
+ get: function () { return chunkDZLEO2JD_cjs.tryHashPassword; }
55
95
  });
56
- Object.defineProperty(exports, "isInWebApiEncryptionFormat", {
96
+ Object.defineProperty(exports, "verifyPassword", {
57
97
  enumerable: true,
58
- get: function () { return chunkSBXDW4MY_cjs.isInWebApiEncryptionFormat; }
98
+ get: function () { return chunkDZLEO2JD_cjs.verifyPassword; }
59
99
  });
60
- Object.defineProperty(exports, "isWebApiKey", {
100
+ Object.defineProperty(exports, "ENCRYPTED_REGEX", {
61
101
  enumerable: true,
62
- get: function () { return chunkSBXDW4MY_cjs.isWebApiKey; }
102
+ get: function () { return chunkZIVTPFKN_cjs.ENCRYPTED_REGEX; }
103
+ });
104
+ Object.defineProperty(exports, "isSecretKey", {
105
+ enumerable: true,
106
+ get: function () { return chunkZIVTPFKN_cjs.isSecretKey; }
107
+ });
108
+ Object.defineProperty(exports, "matchPattern", {
109
+ enumerable: true,
110
+ get: function () { return chunkZIVTPFKN_cjs.matchPattern; }
63
111
  });
64
112
  Object.defineProperty(exports, "parseToObj", {
65
113
  enumerable: true,
66
- get: function () { return chunkSBXDW4MY_cjs.parseToObj; }
114
+ get: function () { return chunkZIVTPFKN_cjs.parseToObj; }
67
115
  });
68
116
  Object.defineProperty(exports, "stringifyObj", {
69
117
  enumerable: true,
70
- get: function () { return chunkSBXDW4MY_cjs.stringifyObj; }
118
+ get: function () { return chunkZIVTPFKN_cjs.stringifyObj; }
119
+ });
120
+ Object.defineProperty(exports, "tryParseToObj", {
121
+ enumerable: true,
122
+ get: function () { return chunkZIVTPFKN_cjs.tryParseToObj; }
123
+ });
124
+ Object.defineProperty(exports, "tryStringifyObj", {
125
+ enumerable: true,
126
+ get: function () { return chunkZIVTPFKN_cjs.tryStringifyObj; }
71
127
  });
72
128
  //# sourceMappingURL=web-api.cjs.map
73
129
  //# sourceMappingURL=web-api.cjs.map
@@ -1,22 +1,3 @@
1
- import { g as EncodingFormat, R as Result, f as WebApiKey } from './utils-Bryp07ny.cjs';
2
- export { E as ENCRYPTION_REGEX, W as WEB_API_ALGORITHM, i as isInEncryptionFormat, b as isInWebApiEncryptionFormat, d as isWebApiKey, p as parseToObj, s as stringifyObj } from './utils-Bryp07ny.cjs';
1
+ export { E as ENCRYPTED_REGEX, S as SecretKey, i as isSecretKey, m as matchPattern, p as parseToObj, s as stringifyObj, t as tryParseToObj, a as tryStringifyObj } from './validate-TRx4DDtg.cjs';
2
+ export { u as convertBytesToStr, x as convertFormat, r as convertStrToBytes, c as createSecretKey, f as decrypt, l as decryptObj, e as encrypt, i as encryptObj, g as generateUuid, n as hash, p as hashPassword, s as tryConvertBytesToStr, w as tryConvertFormat, q as tryConvertStrToBytes, a as tryCreateSecretKey, d as tryDecrypt, j as tryDecryptObj, b as tryEncrypt, h as tryEncryptObj, t as tryGenerateUuid, m as tryHash, o as tryHashPassword, v as verifyPassword } from './export-C2vQXrZa.cjs';
3
3
  import 'node:crypto';
4
-
5
- declare function encode(data: string, format?: EncodingFormat): Result<{
6
- bytes: Uint8Array;
7
- }>;
8
- declare function decode(data: ArrayBuffer | Uint8Array, format?: EncodingFormat): Result<string>;
9
-
10
- declare function generateUuid(): Result<string>;
11
- declare function hash(data: string): Promise<Result<string>>;
12
- declare function createSecretKey(key: string | WebApiKey): Promise<Result<{
13
- secretKey: WebApiKey;
14
- }>>;
15
- declare function encrypt(data: string, secretKey: WebApiKey): Promise<Result<string>>;
16
- declare function decrypt(encrypted: string, secretKey: WebApiKey): Promise<Result<string>>;
17
- declare function encryptObj(data: Record<string, unknown>, secretKey: WebApiKey): Promise<Result<string>>;
18
- declare function decryptObj(encrypted: string, secretKey: WebApiKey): Promise<Result<{
19
- result: Record<string, unknown>;
20
- }>>;
21
-
22
- export { WebApiKey, createSecretKey, decode, decrypt, decryptObj, encode, encrypt, encryptObj, generateUuid, hash };
package/dist/web-api.d.ts CHANGED
@@ -1,22 +1,3 @@
1
- import { g as EncodingFormat, R as Result, f as WebApiKey } from './utils-Bryp07ny.js';
2
- export { E as ENCRYPTION_REGEX, W as WEB_API_ALGORITHM, i as isInEncryptionFormat, b as isInWebApiEncryptionFormat, d as isWebApiKey, p as parseToObj, s as stringifyObj } from './utils-Bryp07ny.js';
1
+ export { E as ENCRYPTED_REGEX, S as SecretKey, i as isSecretKey, m as matchPattern, p as parseToObj, s as stringifyObj, t as tryParseToObj, a as tryStringifyObj } from './validate-TRx4DDtg.js';
2
+ export { u as convertBytesToStr, x as convertFormat, r as convertStrToBytes, c as createSecretKey, f as decrypt, l as decryptObj, e as encrypt, i as encryptObj, g as generateUuid, n as hash, p as hashPassword, s as tryConvertBytesToStr, w as tryConvertFormat, q as tryConvertStrToBytes, a as tryCreateSecretKey, d as tryDecrypt, j as tryDecryptObj, b as tryEncrypt, h as tryEncryptObj, t as tryGenerateUuid, m as tryHash, o as tryHashPassword, v as verifyPassword } from './export-DzNR1ht3.js';
3
3
  import 'node:crypto';
4
-
5
- declare function encode(data: string, format?: EncodingFormat): Result<{
6
- bytes: Uint8Array;
7
- }>;
8
- declare function decode(data: ArrayBuffer | Uint8Array, format?: EncodingFormat): Result<string>;
9
-
10
- declare function generateUuid(): Result<string>;
11
- declare function hash(data: string): Promise<Result<string>>;
12
- declare function createSecretKey(key: string | WebApiKey): Promise<Result<{
13
- secretKey: WebApiKey;
14
- }>>;
15
- declare function encrypt(data: string, secretKey: WebApiKey): Promise<Result<string>>;
16
- declare function decrypt(encrypted: string, secretKey: WebApiKey): Promise<Result<string>>;
17
- declare function encryptObj(data: Record<string, unknown>, secretKey: WebApiKey): Promise<Result<string>>;
18
- declare function decryptObj(encrypted: string, secretKey: WebApiKey): Promise<Result<{
19
- result: Record<string, unknown>;
20
- }>>;
21
-
22
- export { WebApiKey, createSecretKey, decode, decrypt, decryptObj, encode, encrypt, encryptObj, generateUuid, hash };
package/dist/web-api.js CHANGED
@@ -1,4 +1,4 @@
1
- export { createSecretKey, decode, decrypt, decryptObj, encode, encrypt, encryptObj, generateUuid, hash } from './chunk-NGVIYM6K.js';
2
- export { ENCRYPTION_REGEX, WEB_API_ALGORITHM, isInEncryptionFormat, isInWebApiEncryptionFormat, isWebApiKey, parseToObj, stringifyObj } from './chunk-THMEBIZB.js';
1
+ export { convertBytesToStr, convertFormat, convertStrToBytes, createSecretKey, decrypt, decryptObj, encrypt, encryptObj, generateUuid, hash, hashPassword, tryConvertBytesToStr, tryConvertFormat, tryConvertStrToBytes, tryCreateSecretKey, tryDecrypt, tryDecryptObj, tryEncrypt, tryEncryptObj, tryGenerateUuid, tryHash, tryHashPassword, verifyPassword } from './chunk-SRGSVNQ2.js';
2
+ export { ENCRYPTED_REGEX, isSecretKey, matchPattern, parseToObj, stringifyObj, tryParseToObj, tryStringifyObj } from './chunk-6HNTSQAP.js';
3
3
  //# sourceMappingURL=web-api.js.map
4
4
  //# sourceMappingURL=web-api.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "cipher-kit",
3
- "version": "1.0.1",
4
- "description": "🔐 Secure, Lightweight, and Cross-Platform Encryption & Decryption for Web, Node.js, Deno, and Bun",
3
+ "version": "2.0.0-beta.1",
4
+ "description": "🔐 Secure, Lightweight, and Cross-Platform Encryption, Decryption, and Hashing for Web, Node.js, Deno, Bun, and Cloudflare Workers",
5
5
  "homepage": "https://github.com/WolfieLeader/npm/tree/main/packages/cipher-kit#readme",
6
6
  "repository": {
7
7
  "type": "git",
@@ -68,7 +68,7 @@
68
68
  "test": "vitest"
69
69
  },
70
70
  "devDependencies": {
71
- "@types/node": "^24.2.0",
71
+ "@types/node": "^24.5.2",
72
72
  "tsup": "^8.5.0",
73
73
  "typescript": "^5.9.2",
74
74
  "vitest": "^3.2.4"
@@ -85,6 +85,8 @@
85
85
  "web",
86
86
  "node",
87
87
  "deno",
88
- "bun"
88
+ "bun",
89
+ "cloudflare",
90
+ "workers"
89
91
  ]
90
92
  }
@@ -1,228 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkSBXDW4MY_cjs = require('./chunk-SBXDW4MY.cjs');
4
-
5
- // src/web/encode.ts
6
- var textEncoder = new TextEncoder();
7
- var textDecoder = new TextDecoder();
8
- function encode(data, format = "utf8") {
9
- try {
10
- switch (format) {
11
- case "base64":
12
- return chunkSBXDW4MY_cjs.$ok({ bytes: $fromBase64(data) });
13
- case "base64url":
14
- return chunkSBXDW4MY_cjs.$ok({ bytes: $fromBase64Url(data) });
15
- case "hex":
16
- return chunkSBXDW4MY_cjs.$ok({ bytes: $fromHex(data) });
17
- case "utf8":
18
- return chunkSBXDW4MY_cjs.$ok({ bytes: textEncoder.encode(data) });
19
- default:
20
- return chunkSBXDW4MY_cjs.$err({
21
- msg: `Crypto Web API: Unsupported encode format: ${format}`,
22
- desc: "Use base64, base64url, hex, or utf8"
23
- });
24
- }
25
- } catch (error) {
26
- return chunkSBXDW4MY_cjs.$err({ msg: "Crypto Web API: Failed to encode data", desc: chunkSBXDW4MY_cjs.$stringifyError(error) });
27
- }
28
- }
29
- function decode(data, format = "utf8") {
30
- try {
31
- const bytes = data instanceof Uint8Array ? data : new Uint8Array(data);
32
- switch (format) {
33
- case "base64":
34
- return chunkSBXDW4MY_cjs.$ok($toBase64(bytes));
35
- case "base64url":
36
- return chunkSBXDW4MY_cjs.$ok($toBase64Url(bytes));
37
- case "hex":
38
- return chunkSBXDW4MY_cjs.$ok($toHex(bytes));
39
- case "utf8":
40
- return chunkSBXDW4MY_cjs.$ok(textDecoder.decode(bytes));
41
- default:
42
- return chunkSBXDW4MY_cjs.$err({
43
- msg: `Crypto Web API: Unsupported decode format: ${format}`,
44
- desc: "Use base64, base64url, hex, or utf8"
45
- });
46
- }
47
- } catch (error) {
48
- return chunkSBXDW4MY_cjs.$err({ msg: "Crypto Web API: Failed to decode data", desc: chunkSBXDW4MY_cjs.$stringifyError(error) });
49
- }
50
- }
51
- function $toBase64(bytes) {
52
- let binary = "";
53
- const chunkSize = 32768;
54
- for (let i = 0; i < bytes.length; i += chunkSize) {
55
- binary += String.fromCharCode(...bytes.subarray(i, i + chunkSize));
56
- }
57
- return btoa(binary);
58
- }
59
- function $fromBase64(data) {
60
- const binary = atob(data);
61
- const len = binary.length;
62
- const bytes = new Uint8Array(len);
63
- for (let i = 0; i < len; i++) {
64
- bytes[i] = binary.charCodeAt(i);
65
- }
66
- return bytes;
67
- }
68
- function $toBase64Url(bytes) {
69
- return $toBase64(bytes).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
70
- }
71
- function $fromBase64Url(data) {
72
- let b64 = data.replace(/-/g, "+").replace(/_/g, "/");
73
- const padLen = (4 - b64.length % 4) % 4;
74
- b64 += "=".repeat(padLen);
75
- return $fromBase64(b64);
76
- }
77
- function $toHex(bytes) {
78
- return Array.from(bytes).map((b) => b.toString(16).padStart(2, "0")).join("");
79
- }
80
- function $fromHex(data) {
81
- const clean = data.startsWith("0x") ? data.slice(2) : data;
82
- if (clean.length % 2 !== 0) throw new Error("Invalid hex string");
83
- const out = new Uint8Array(clean.length / 2);
84
- for (let i = 0; i < out.length; i++) {
85
- out[i] = Number.parseInt(clean.slice(i * 2, i * 2 + 2), 16);
86
- }
87
- return out;
88
- }
89
-
90
- // src/web/encrypt.ts
91
- function generateUuid() {
92
- try {
93
- return chunkSBXDW4MY_cjs.$ok(crypto.randomUUID());
94
- } catch (error) {
95
- return chunkSBXDW4MY_cjs.$err({ msg: "Crypto Web API: Failed to generate UUID", desc: chunkSBXDW4MY_cjs.$stringifyError(error) });
96
- }
97
- }
98
- async function hash(data) {
99
- if (!chunkSBXDW4MY_cjs.$isStr(data, 0)) {
100
- return chunkSBXDW4MY_cjs.$err({ msg: "Crypto Web API: Empty data for hashing", desc: "Data must be a non-empty string" });
101
- }
102
- const { bytes, error } = encode(data, "utf8");
103
- if (error) return chunkSBXDW4MY_cjs.$err(error);
104
- try {
105
- const hashed = await crypto.subtle.digest("SHA-256", bytes);
106
- return decode(hashed, "base64url");
107
- } catch (error2) {
108
- return chunkSBXDW4MY_cjs.$err({ msg: "Crypto Web API: Failed to hash data", desc: chunkSBXDW4MY_cjs.$stringifyError(error2) });
109
- }
110
- }
111
- async function createSecretKey(key) {
112
- if (typeof key === "string") {
113
- try {
114
- if (!chunkSBXDW4MY_cjs.$isStr(key)) return chunkSBXDW4MY_cjs.$err({ msg: "Crypto Web API: Empty key", desc: "Key must be a non-empty string" });
115
- const { bytes, error } = encode(key, "utf8");
116
- if (error) return chunkSBXDW4MY_cjs.$err(error);
117
- const hashedKey = await crypto.subtle.digest("SHA-256", bytes);
118
- const secretKey = await crypto.subtle.importKey("raw", hashedKey, { name: chunkSBXDW4MY_cjs.WEB_API_ALGORITHM }, true, [
119
- "encrypt",
120
- "decrypt"
121
- ]);
122
- return chunkSBXDW4MY_cjs.$ok({ secretKey });
123
- } catch (error) {
124
- return chunkSBXDW4MY_cjs.$err({ msg: "Crypto Web API: Failed to create secret key", desc: chunkSBXDW4MY_cjs.$stringifyError(error) });
125
- }
126
- }
127
- if (!chunkSBXDW4MY_cjs.isWebApiKey(key)) {
128
- return chunkSBXDW4MY_cjs.$err({ msg: "Crypto Web API: Invalid secret key", desc: "Expected a WebApiKey (webcrypto.CryptoKey)" });
129
- }
130
- return chunkSBXDW4MY_cjs.$ok({ secretKey: key });
131
- }
132
- async function encrypt(data, secretKey) {
133
- try {
134
- if (!chunkSBXDW4MY_cjs.$isStr(data)) {
135
- return chunkSBXDW4MY_cjs.$err({ msg: "Crypto Web API: Empty data for encryption", desc: "Data must be a non-empty string" });
136
- }
137
- if (!chunkSBXDW4MY_cjs.isWebApiKey(secretKey)) {
138
- return chunkSBXDW4MY_cjs.$err({
139
- msg: "Crypto Web API: Invalid encryption key",
140
- desc: "Expected a WebApiKey (webcrypto.CryptoKey)"
141
- });
142
- }
143
- const { bytes, error } = encode(data, "utf8");
144
- if (error) return chunkSBXDW4MY_cjs.$err(error);
145
- const iv = crypto.getRandomValues(new Uint8Array(12));
146
- const encrypted = await crypto.subtle.encrypt({ name: chunkSBXDW4MY_cjs.WEB_API_ALGORITHM, iv }, secretKey, bytes);
147
- const { result: decodedIv, error: ivError } = decode(iv, "base64url");
148
- const { result: decodedEncrypted, error: encryptedError } = decode(encrypted, "base64url");
149
- if (ivError || encryptedError) {
150
- return chunkSBXDW4MY_cjs.$err({
151
- msg: "Crypto Web API: Failed to convert IV or encrypted data",
152
- desc: `Conversion error: ${ivError || encryptedError}`
153
- });
154
- }
155
- return chunkSBXDW4MY_cjs.$ok(`${decodedIv}.${decodedEncrypted}.`);
156
- } catch (error) {
157
- return chunkSBXDW4MY_cjs.$err({ msg: "Crypto Web API: Failed to encrypt data", desc: chunkSBXDW4MY_cjs.$stringifyError(error) });
158
- }
159
- }
160
- async function decrypt(encrypted, secretKey) {
161
- if (chunkSBXDW4MY_cjs.isInWebApiEncryptionFormat(encrypted) === false) {
162
- return chunkSBXDW4MY_cjs.$err({
163
- msg: "Crypto Web API: Invalid encrypted data format",
164
- desc: 'Encrypted data must be in the format "iv.encryptedData."'
165
- });
166
- }
167
- const [iv, encryptedWithTag] = encrypted.split(".", 3);
168
- if (!chunkSBXDW4MY_cjs.$isStr(iv) || !chunkSBXDW4MY_cjs.$isStr(encryptedWithTag)) {
169
- return chunkSBXDW4MY_cjs.$err({
170
- msg: "Crypto Web API: Invalid encrypted data",
171
- desc: "Encrypted data must contain valid IV, encrypted and tag components"
172
- });
173
- }
174
- if (!chunkSBXDW4MY_cjs.isWebApiKey(secretKey)) {
175
- return chunkSBXDW4MY_cjs.$err({ msg: "Crypto Web API: Invalid decryption key", desc: "Expected a WebApiKey (webcrypto.CryptoKey)" });
176
- }
177
- const { bytes: ivBytes, error: ivError } = encode(iv, "base64url");
178
- const { bytes: encryptedBytes, error: encryptedError } = encode(encryptedWithTag, "base64url");
179
- if (ivError || encryptedError) {
180
- return chunkSBXDW4MY_cjs.$err({
181
- msg: "Crypto Web API: Failed to convert IV or encrypted data",
182
- desc: `Conversion error: ${ivError || encryptedError}`
183
- });
184
- }
185
- try {
186
- const decrypted = await crypto.subtle.decrypt({ name: chunkSBXDW4MY_cjs.WEB_API_ALGORITHM, iv: ivBytes }, secretKey, encryptedBytes);
187
- return decode(decrypted, "utf8");
188
- } catch (error) {
189
- return chunkSBXDW4MY_cjs.$err({ msg: "Crypto Web API: Failed to decrypt data", desc: chunkSBXDW4MY_cjs.$stringifyError(error) });
190
- }
191
- }
192
- async function encryptObj(data, secretKey) {
193
- const { result, error } = chunkSBXDW4MY_cjs.stringifyObj(data);
194
- if (error) return chunkSBXDW4MY_cjs.$err(error);
195
- return await encrypt(result, secretKey);
196
- }
197
- async function decryptObj(encrypted, secretKey) {
198
- const { result, error } = await decrypt(encrypted, secretKey);
199
- if (error) return chunkSBXDW4MY_cjs.$err(error);
200
- return chunkSBXDW4MY_cjs.parseToObj(result);
201
- }
202
-
203
- // src/web/export.ts
204
- var export_exports = {};
205
- chunkSBXDW4MY_cjs.__export(export_exports, {
206
- createSecretKey: () => createSecretKey,
207
- decode: () => decode,
208
- decrypt: () => decrypt,
209
- decryptObj: () => decryptObj,
210
- encode: () => encode,
211
- encrypt: () => encrypt,
212
- encryptObj: () => encryptObj,
213
- generateUuid: () => generateUuid,
214
- hash: () => hash
215
- });
216
-
217
- exports.createSecretKey = createSecretKey;
218
- exports.decode = decode;
219
- exports.decrypt = decrypt;
220
- exports.decryptObj = decryptObj;
221
- exports.encode = encode;
222
- exports.encrypt = encrypt;
223
- exports.encryptObj = encryptObj;
224
- exports.export_exports = export_exports;
225
- exports.generateUuid = generateUuid;
226
- exports.hash = hash;
227
- //# sourceMappingURL=chunk-5MYBXP4A.cjs.map
228
- //# sourceMappingURL=chunk-5MYBXP4A.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/web/encode.ts","../src/web/encrypt.ts","../src/web/export.ts"],"names":["$ok","$err","$stringifyError","$isStr","error","WEB_API_ALGORITHM","isWebApiKey","isInWebApiEncryptionFormat","stringifyObj","parseToObj","__export"],"mappings":";;;;;AAGA,IAAM,WAAA,GAAc,IAAI,WAAA,EAAY;AACpC,IAAM,WAAA,GAAc,IAAI,WAAA,EAAY;AAE7B,SAAS,MAAA,CAAO,IAAA,EAAc,MAAA,GAAyB,MAAA,EAAuC;AACnG,EAAA,IAAI;AACF,IAAA,QAAQ,MAAA;AAAQ,MACd,KAAK,QAAA;AACH,QAAA,OAAOA,sBAAI,EAAE,KAAA,EAAO,WAAA,CAAY,IAAI,GAAG,CAAA;AAAA,MACzC,KAAK,WAAA;AACH,QAAA,OAAOA,sBAAI,EAAE,KAAA,EAAO,cAAA,CAAe,IAAI,GAAG,CAAA;AAAA,MAC5C,KAAK,KAAA;AACH,QAAA,OAAOA,sBAAI,EAAE,KAAA,EAAO,QAAA,CAAS,IAAI,GAAG,CAAA;AAAA,MACtC,KAAK,MAAA;AACH,QAAA,OAAOA,sBAAI,EAAE,KAAA,EAAO,YAAY,MAAA,CAAO,IAAI,GAAG,CAAA;AAAA,MAChD;AACE,QAAA,OAAOC,sBAAA,CAAK;AAAA,UACV,GAAA,EAAK,8CAA8C,MAAM,CAAA,CAAA;AAAA,UACzD,IAAA,EAAM;AAAA,SACP,CAAA;AAAA;AACL,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAOA,sBAAA,CAAK,EAAE,GAAA,EAAK,uCAAA,EAAyC,MAAMC,iCAAA,CAAgB,KAAK,GAAG,CAAA;AAAA,EAC5F;AACF;AAEO,SAAS,MAAA,CAAO,IAAA,EAAgC,MAAA,GAAyB,MAAA,EAAwB;AACtG,EAAA,IAAI;AACF,IAAA,MAAM,QAAQ,IAAA,YAAgB,UAAA,GAAa,IAAA,GAAO,IAAI,WAAW,IAAI,CAAA;AACrE,IAAA,QAAQ,MAAA;AAAQ,MACd,KAAK,QAAA;AACH,QAAA,OAAOF,qBAAA,CAAI,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,MAC7B,KAAK,WAAA;AACH,QAAA,OAAOA,qBAAA,CAAI,YAAA,CAAa,KAAK,CAAC,CAAA;AAAA,MAChC,KAAK,KAAA;AACH,QAAA,OAAOA,qBAAA,CAAI,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,MAC1B,KAAK,MAAA;AACH,QAAA,OAAOA,qBAAA,CAAI,WAAA,CAAY,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,MACtC;AACE,QAAA,OAAOC,sBAAA,CAAK;AAAA,UACV,GAAA,EAAK,8CAA8C,MAAM,CAAA,CAAA;AAAA,UACzD,IAAA,EAAM;AAAA,SACP,CAAA;AAAA;AACL,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAOA,sBAAA,CAAK,EAAE,GAAA,EAAK,uCAAA,EAAyC,MAAMC,iCAAA,CAAgB,KAAK,GAAG,CAAA;AAAA,EAC5F;AACF;AAEA,SAAS,UAAU,KAAA,EAA2B;AAC5C,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,MAAM,SAAA,GAAY,KAAA;AAClB,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,MAAA,EAAQ,KAAK,SAAA,EAAW;AAChD,IAAA,MAAA,IAAU,MAAA,CAAO,aAAa,GAAG,KAAA,CAAM,SAAS,CAAA,EAAG,CAAA,GAAI,SAAS,CAAC,CAAA;AAAA,EACnE;AACA,EAAA,OAAO,KAAK,MAAM,CAAA;AACpB;AAEA,SAAS,YAAY,IAAA,EAA0B;AAC7C,EAAA,MAAM,MAAA,GAAS,KAAK,IAAI,CAAA;AACxB,EAAA,MAAM,MAAM,MAAA,CAAO,MAAA;AACnB,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,GAAG,CAAA;AAChC,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA,EAAK;AAC5B,IAAA,KAAA,CAAM,CAAC,CAAA,GAAI,MAAA,CAAO,UAAA,CAAW,CAAC,CAAA;AAAA,EAChC;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,aAAa,KAAA,EAA2B;AAC/C,EAAA,OAAO,SAAA,CAAU,KAAK,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAAE,OAAA,CAAQ,OAAO,EAAE,CAAA;AACnF;AAEA,SAAS,eAAe,IAAA,EAA0B;AAChD,EAAA,IAAI,GAAA,GAAM,KAAK,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA,CAAE,OAAA,CAAQ,MAAM,GAAG,CAAA;AACnD,EAAA,MAAM,MAAA,GAAA,CAAU,CAAA,GAAK,GAAA,CAAI,MAAA,GAAS,CAAA,IAAM,CAAA;AACxC,EAAA,GAAA,IAAO,GAAA,CAAI,OAAO,MAAM,CAAA;AACxB,EAAA,OAAO,YAAY,GAAG,CAAA;AACxB;AAEA,SAAS,OAAO,KAAA,EAA2B;AACzC,EAAA,OAAO,MAAM,IAAA,CAAK,KAAK,CAAA,CACpB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,EAAE,EAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAC1C,KAAK,EAAE,CAAA;AACZ;AAEA,SAAS,SAAS,IAAA,EAA0B;AAC1C,EAAA,MAAM,KAAA,GAAQ,KAAK,UAAA,CAAW,IAAI,IAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA;AACtD,EAAA,IAAI,MAAM,MAAA,GAAS,CAAA,KAAM,GAAG,MAAM,IAAI,MAAM,oBAAoB,CAAA;AAChE,EAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,KAAA,CAAM,SAAS,CAAC,CAAA;AAC3C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACnC,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,KAAA,CAAM,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,CAAC,CAAA,EAAG,EAAE,CAAA;AAAA,EAC5D;AACA,EAAA,OAAO,GAAA;AACT;;;AC1FO,SAAS,YAAA,GAA+B;AAC7C,EAAA,IAAI;AACF,IAAA,OAAOF,qBAAA,CAAI,MAAA,CAAO,UAAA,EAAY,CAAA;AAAA,EAChC,SAAS,KAAA,EAAO;AACd,IAAA,OAAOC,sBAAA,CAAK,EAAE,GAAA,EAAK,yCAAA,EAA2C,MAAMC,iCAAA,CAAgB,KAAK,GAAG,CAAA;AAAA,EAC9F;AACF;AAEA,eAAsB,KAAK,IAAA,EAAuC;AAChE,EAAA,IAAI,CAACC,wBAAA,CAAO,IAAA,EAAM,CAAC,CAAA,EAAG;AACpB,IAAA,OAAOF,uBAAK,EAAE,GAAA,EAAK,wCAAA,EAA0C,IAAA,EAAM,mCAAmC,CAAA;AAAA,EACxG;AAEA,EAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAM,GAAI,MAAA,CAAO,MAAM,MAAM,CAAA;AAC5C,EAAA,IAAI,KAAA,EAAO,OAAOA,sBAAA,CAAK,KAAK,CAAA;AAE5B,EAAA,IAAI;AACF,IAAA,MAAM,SAAS,MAAM,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,WAAW,KAAK,CAAA;AAC1D,IAAA,OAAO,MAAA,CAAO,QAAQ,WAAW,CAAA;AAAA,EACnC,SAASG,MAAAA,EAAO;AACd,IAAA,OAAOH,sBAAA,CAAK,EAAE,GAAA,EAAK,qCAAA,EAAuC,MAAMC,iCAAA,CAAgBE,MAAK,GAAG,CAAA;AAAA,EAC1F;AACF;AAEA,eAAsB,gBAAgB,GAAA,EAAoE;AACxG,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,IAAI;AACF,MAAA,IAAI,CAACD,wBAAA,CAAO,GAAG,CAAA,EAAG,OAAOF,sBAAA,CAAK,EAAE,GAAA,EAAK,2BAAA,EAA6B,IAAA,EAAM,gCAAA,EAAkC,CAAA;AAC1G,MAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAM,GAAI,MAAA,CAAO,KAAK,MAAM,CAAA;AAC3C,MAAA,IAAI,KAAA,EAAO,OAAOA,sBAAA,CAAK,KAAK,CAAA;AAE5B,MAAA,MAAM,YAAY,MAAM,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,WAAW,KAAK,CAAA;AAC7D,MAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,KAAA,EAAO,SAAA,EAAW,EAAE,IAAA,EAAMI,mCAAA,EAAkB,EAAG,IAAA,EAAM;AAAA,QACnG,SAAA;AAAA,QACA;AAAA,OACD,CAAA;AACD,MAAA,OAAOL,qBAAA,CAAI,EAAE,SAAA,EAAW,CAAA;AAAA,IAC1B,SAAS,KAAA,EAAO;AACd,MAAA,OAAOC,sBAAA,CAAK,EAAE,GAAA,EAAK,6CAAA,EAA+C,MAAMC,iCAAA,CAAgB,KAAK,GAAG,CAAA;AAAA,IAClG;AAAA,EACF;AAEA,EAAA,IAAI,CAACI,6BAAA,CAAY,GAAG,CAAA,EAAG;AACrB,IAAA,OAAOL,uBAAK,EAAE,GAAA,EAAK,oCAAA,EAAsC,IAAA,EAAM,8CAA8C,CAAA;AAAA,EAC/G;AAEA,EAAA,OAAOD,qBAAA,CAAI,EAAE,SAAA,EAAW,GAAA,EAAK,CAAA;AAC/B;AAEA,eAAsB,OAAA,CAAQ,MAAc,SAAA,EAA+C;AACzF,EAAA,IAAI;AACF,IAAA,IAAI,CAACG,wBAAA,CAAO,IAAI,CAAA,EAAG;AACjB,MAAA,OAAOF,uBAAK,EAAE,GAAA,EAAK,2CAAA,EAA6C,IAAA,EAAM,mCAAmC,CAAA;AAAA,IAC3G;AAEA,IAAA,IAAI,CAACK,6BAAA,CAAY,SAAS,CAAA,EAAG;AAC3B,MAAA,OAAOL,sBAAA,CAAK;AAAA,QACV,GAAA,EAAK,wCAAA;AAAA,QACL,IAAA,EAAM;AAAA,OACP,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAM,GAAI,MAAA,CAAO,MAAM,MAAM,CAAA;AAC5C,IAAA,IAAI,KAAA,EAAO,OAAOA,sBAAA,CAAK,KAAK,CAAA;AAE5B,IAAA,MAAM,KAAK,MAAA,CAAO,eAAA,CAAgB,IAAI,UAAA,CAAW,EAAE,CAAC,CAAA;AACpD,IAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,EAAE,IAAA,EAAMI,mCAAA,EAAmB,EAAA,EAAO,EAAG,SAAA,EAAW,KAAK,CAAA;AAEnG,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;AAEzF,IAAA,IAAI,WAAW,cAAA,EAAgB;AAC7B,MAAA,OAAOJ,sBAAA,CAAK;AAAA,QACV,GAAA,EAAK,wDAAA;AAAA,QACL,IAAA,EAAM,CAAA,kBAAA,EAAqB,OAAA,IAAW,cAAc,CAAA;AAAA,OACrD,CAAA;AAAA,IACH;AAEA,IAAA,OAAOD,qBAAA,CAAI,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,gBAAgB,CAAA,CAAA,CAAG,CAAA;AAAA,EAChD,SAAS,KAAA,EAAO;AACd,IAAA,OAAOC,sBAAA,CAAK,EAAE,GAAA,EAAK,wCAAA,EAA0C,MAAMC,iCAAA,CAAgB,KAAK,GAAG,CAAA;AAAA,EAC7F;AACF;AAEA,eAAsB,OAAA,CAAQ,WAAmB,SAAA,EAA+C;AAC9F,EAAA,IAAIK,4CAAA,CAA2B,SAAS,CAAA,KAAM,KAAA,EAAO;AACnD,IAAA,OAAON,sBAAA,CAAK;AAAA,MACV,GAAA,EAAK,+CAAA;AAAA,MACL,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,CAAC,EAAA,EAAI,gBAAgB,IAAI,SAAA,CAAU,KAAA,CAAM,KAAK,CAAC,CAAA;AACrD,EAAA,IAAI,CAACE,wBAAA,CAAO,EAAE,KAAK,CAACA,wBAAA,CAAO,gBAAgB,CAAA,EAAG;AAC5C,IAAA,OAAOF,sBAAA,CAAK;AAAA,MACV,GAAA,EAAK,wCAAA;AAAA,MACL,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,CAACK,6BAAA,CAAY,SAAS,CAAA,EAAG;AAC3B,IAAA,OAAOL,uBAAK,EAAE,GAAA,EAAK,wCAAA,EAA0C,IAAA,EAAM,8CAA8C,CAAA;AAAA,EACnH;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,kBAAkB,WAAW,CAAA;AAC7F,EAAA,IAAI,WAAW,cAAA,EAAgB;AAC7B,IAAA,OAAOA,sBAAA,CAAK;AAAA,MACV,GAAA,EAAK,wDAAA;AAAA,MACL,IAAA,EAAM,CAAA,kBAAA,EAAqB,OAAA,IAAW,cAAc,CAAA;AAAA,KACrD,CAAA;AAAA,EACH;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,EAAE,IAAA,EAAMI,mCAAA,EAAmB,EAAA,EAAI,OAAA,EAAQ,EAAG,SAAA,EAAW,cAAc,CAAA;AACjH,IAAA,OAAO,MAAA,CAAO,WAAW,MAAM,CAAA;AAAA,EACjC,SAAS,KAAA,EAAO;AACd,IAAA,OAAOJ,sBAAA,CAAK,EAAE,GAAA,EAAK,wCAAA,EAA0C,MAAMC,iCAAA,CAAgB,KAAK,GAAG,CAAA;AAAA,EAC7F;AACF;AAEA,eAAsB,UAAA,CAAW,MAA+B,SAAA,EAA+C;AAC7G,EAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAM,GAAIM,+BAAa,IAAI,CAAA;AAC3C,EAAA,IAAI,KAAA,EAAO,OAAOP,sBAAA,CAAK,KAAK,CAAA;AAC5B,EAAA,OAAO,MAAM,OAAA,CAAQ,MAAA,EAAQ,SAAS,CAAA;AACxC;AAEA,eAAsB,UAAA,CACpB,WACA,SAAA,EACsD;AACtD,EAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,KAAU,MAAM,OAAA,CAAQ,WAAW,SAAS,CAAA;AAC5D,EAAA,IAAI,KAAA,EAAO,OAAOA,sBAAA,CAAK,KAAK,CAAA;AAC5B,EAAA,OAAOQ,6BAAW,MAAM,CAAA;AAC1B;;;AC3IA,IAAA,cAAA,GAAA;AAAAC,0BAAA,CAAA,cAAA,EAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,MAAA,EAAA,MAAA,MAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,MAAA,EAAA,MAAA,MAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,IAAA,EAAA,MAAA;AAAA,CAAA,CAAA","file":"chunk-5MYBXP4A.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 msg: `Crypto Web API: Unsupported encode format: ${format}`,\r\n desc: 'Use base64, base64url, hex, or utf8',\r\n });\r\n }\r\n } catch (error) {\r\n return $err({ msg: 'Crypto Web API: Failed to encode data', desc: $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 msg: `Crypto Web API: Unsupported decode format: ${format}`,\r\n desc: 'Use base64, base64url, hex, or utf8',\r\n });\r\n }\r\n } catch (error) {\r\n return $err({ msg: 'Crypto Web API: Failed to decode data', desc: $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\nimport { $isStr, isInWebApiEncryptionFormat, isWebApiKey, parseToObj, stringifyObj, WEB_API_ALGORITHM } from '~/utils';\r\nimport { decode, encode } from './encode';\r\n\r\nexport function generateUuid(): Result<string> {\r\n try {\r\n return $ok(crypto.randomUUID());\r\n } catch (error) {\r\n return $err({ msg: 'Crypto Web API: Failed to generate UUID', desc: $stringifyError(error) });\r\n }\r\n}\r\n\r\nexport async function hash(data: string): Promise<Result<string>> {\r\n if (!$isStr(data, 0)) {\r\n return $err({ msg: 'Crypto Web API: Empty data for hashing', desc: '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({ msg: 'Crypto Web API: Failed to hash data', desc: $stringifyError(error) });\r\n }\r\n}\r\n\r\nexport async function createSecretKey(key: string | WebApiKey): Promise<Result<{ secretKey: WebApiKey }>> {\r\n if (typeof key === 'string') {\r\n try {\r\n if (!$isStr(key)) return $err({ msg: 'Crypto Web API: Empty key', desc: 'Key must be a non-empty string' });\r\n const { bytes, error } = encode(key, 'utf8');\r\n if (error) return $err(error);\r\n\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({ msg: 'Crypto Web API: Failed to create secret key', desc: $stringifyError(error) });\r\n }\r\n }\r\n\r\n if (!isWebApiKey(key)) {\r\n return $err({ msg: 'Crypto Web API: Invalid secret key', desc: 'Expected a WebApiKey (webcrypto.CryptoKey)' });\r\n }\r\n\r\n return $ok({ secretKey: key });\r\n}\r\n\r\nexport async function encrypt(data: string, secretKey: WebApiKey): Promise<Result<string>> {\r\n try {\r\n if (!$isStr(data)) {\r\n return $err({ msg: 'Crypto Web API: Empty data for encryption', desc: 'Data must be a non-empty string' });\r\n }\r\n\r\n if (!isWebApiKey(secretKey)) {\r\n return $err({\r\n msg: 'Crypto Web API: Invalid encryption key',\r\n desc: 'Expected a WebApiKey (webcrypto.CryptoKey)',\r\n });\r\n }\r\n\r\n const { bytes, error } = encode(data, 'utf8');\r\n if (error) return $err(error);\r\n\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({\r\n msg: 'Crypto Web API: Failed to convert IV or encrypted data',\r\n desc: `Conversion error: ${ivError || encryptedError}`,\r\n });\r\n }\r\n\r\n return $ok(`${decodedIv}.${decodedEncrypted}.`);\r\n } catch (error) {\r\n return $err({ msg: 'Crypto Web API: Failed to encrypt data', desc: $stringifyError(error) });\r\n }\r\n}\r\n\r\nexport async function decrypt(encrypted: string, secretKey: WebApiKey): Promise<Result<string>> {\r\n if (isInWebApiEncryptionFormat(encrypted) === false) {\r\n return $err({\r\n msg: 'Crypto Web API: Invalid encrypted data format',\r\n desc: 'Encrypted data must be in the format \"iv.encryptedData.\"',\r\n });\r\n }\r\n\r\n const [iv, encryptedWithTag] = encrypted.split('.', 3);\r\n if (!$isStr(iv) || !$isStr(encryptedWithTag)) {\r\n return $err({\r\n msg: 'Crypto Web API: Invalid encrypted data',\r\n desc: 'Encrypted data must contain valid IV, encrypted and tag components',\r\n });\r\n }\r\n\r\n if (!isWebApiKey(secretKey)) {\r\n return $err({ msg: 'Crypto Web API: Invalid decryption key', desc: 'Expected a WebApiKey (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({\r\n msg: 'Crypto Web API: Failed to convert IV or encrypted data',\r\n desc: `Conversion error: ${ivError || encryptedError}`,\r\n });\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 return decode(decrypted, 'utf8');\r\n } catch (error) {\r\n return $err({ msg: 'Crypto Web API: Failed to decrypt data', desc: $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","export { decode, encode } from './encode';\r\nexport { createSecretKey, decrypt, decryptObj, encrypt, encryptObj, generateUuid, hash } from './encrypt';\r\n"]}