cipher-kit 0.0.7 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-UYBB4K56.js → chunk-2VWYNA5O.js} +5 -9
- package/dist/chunk-2VWYNA5O.js.map +1 -0
- package/dist/{chunk-65XPPPAR.cjs → chunk-3E7B77NS.cjs} +52 -57
- package/dist/chunk-3E7B77NS.cjs.map +1 -0
- package/dist/{chunk-PKIT6YQN.js → chunk-FVUCOHD7.js} +5 -9
- package/dist/chunk-FVUCOHD7.js.map +1 -0
- package/dist/{chunk-IMSNCUFU.cjs → chunk-GAAPPJTK.cjs} +16 -2
- package/dist/chunk-GAAPPJTK.cjs.map +1 -0
- package/dist/{chunk-RF735UV3.cjs → chunk-RWMHFO5T.cjs} +40 -45
- package/dist/chunk-RWMHFO5T.cjs.map +1 -0
- package/dist/{chunk-F52DT5C4.js → chunk-V7MXS2IX.js} +11 -3
- package/dist/chunk-V7MXS2IX.js.map +1 -0
- package/dist/index.cjs +30 -26
- package/dist/index.d.cts +6 -8
- package/dist/index.d.ts +6 -8
- package/dist/index.js +3 -3
- package/dist/node.cjs +21 -21
- package/dist/node.d.cts +4 -5
- package/dist/node.d.ts +4 -5
- package/dist/node.js +2 -2
- package/dist/{types-C7UlGfO2.d.cts → utils-Bryp07ny.d.cts} +7 -5
- package/dist/{types-C7UlGfO2.d.ts → utils-Bryp07ny.d.ts} +7 -5
- package/dist/web-api.cjs +21 -21
- package/dist/web-api.d.cts +3 -4
- package/dist/web-api.d.ts +3 -4
- package/dist/web-api.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-65XPPPAR.cjs.map +0 -1
- package/dist/chunk-F52DT5C4.js.map +0 -1
- package/dist/chunk-IMSNCUFU.cjs.map +0 -1
- package/dist/chunk-PKIT6YQN.js.map +0 -1
- package/dist/chunk-RF735UV3.cjs.map +0 -1
- package/dist/chunk-UYBB4K56.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __export, $isStr, $err, $stringifyError, $ok, stringifyObj, WEB_API_ALGORITHM, parseToObj, isInWebApiEncryptionFormat } from './chunk-
|
|
1
|
+
import { __export, $isStr, $err, $stringifyError, $ok, stringifyObj, isWebApiKey, WEB_API_ALGORITHM, parseToObj, isInWebApiEncryptionFormat } from './chunk-V7MXS2IX.js';
|
|
2
2
|
|
|
3
3
|
// src/web/encode.ts
|
|
4
4
|
var textEncoder = new TextEncoder();
|
|
@@ -87,9 +87,6 @@ function generateUuid() {
|
|
|
87
87
|
return $err({ msg: "Failed to generate UUID with Crypto Web API", desc: $stringifyError(error) });
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
|
-
function isWebApiKey(key) {
|
|
91
|
-
return key !== null && key !== void 0 && typeof key === "object" && "type" in key && typeof key.type === "string" && "algorithm" in key && typeof key.algorithm === "object" && "extractable" in key && typeof key.extractable === "boolean" && "usages" in key && Array.isArray(key.usages) && key.usages.every((usage) => typeof usage === "string");
|
|
92
|
-
}
|
|
93
90
|
async function hash(data) {
|
|
94
91
|
if (!$isStr(data)) {
|
|
95
92
|
return $err({ msg: "Empty data for hashing", desc: "Data must be a non-empty string" });
|
|
@@ -195,10 +192,9 @@ __export(export_exports, {
|
|
|
195
192
|
encrypt: () => encrypt,
|
|
196
193
|
encryptObj: () => encryptObj,
|
|
197
194
|
generateUuid: () => generateUuid,
|
|
198
|
-
hash: () => hash
|
|
199
|
-
isWebApiKey: () => isWebApiKey
|
|
195
|
+
hash: () => hash
|
|
200
196
|
});
|
|
201
197
|
|
|
202
|
-
export { createSecretKey, decode, decrypt, decryptObj, encode, encrypt, encryptObj, export_exports, generateUuid, hash
|
|
203
|
-
//# sourceMappingURL=chunk-
|
|
204
|
-
//# sourceMappingURL=chunk-
|
|
198
|
+
export { createSecretKey, decode, decrypt, decryptObj, encode, encrypt, encryptObj, export_exports, generateUuid, hash };
|
|
199
|
+
//# sourceMappingURL=chunk-2VWYNA5O.js.map
|
|
200
|
+
//# sourceMappingURL=chunk-2VWYNA5O.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/web/encode.ts","../src/web/encrypt.ts","../src/web/export.ts"],"names":["error"],"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,OAAO,IAAI,EAAE,KAAA,EAAO,WAAA,CAAY,IAAI,GAAG,CAAA;AAAA,MACzC,KAAK,WAAA;AACH,QAAA,OAAO,IAAI,EAAE,KAAA,EAAO,cAAA,CAAe,IAAI,GAAG,CAAA;AAAA,MAC5C,KAAK,KAAA;AACH,QAAA,OAAO,IAAI,EAAE,KAAA,EAAO,QAAA,CAAS,IAAI,GAAG,CAAA;AAAA,MACtC,KAAK,MAAA;AACH,QAAA,OAAO,IAAI,EAAE,KAAA,EAAO,YAAY,MAAA,CAAO,IAAI,GAAG,CAAA;AAAA,MAChD;AACE,QAAA,OAAO,IAAA,CAAK,EAAE,GAAA,EAAK,CAAA,2BAAA,EAA8B,MAAM,CAAA,CAAA,EAAI,IAAA,EAAM,uCAAuC,CAAA;AAAA;AAC5G,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,IAAA,CAAK,EAAE,GAAA,EAAK,uBAAA,EAAyB,MAAM,eAAA,CAAgB,KAAK,GAAG,CAAA;AAAA,EAC5E;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,OAAO,GAAA,CAAI,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,MAC7B,KAAK,WAAA;AACH,QAAA,OAAO,GAAA,CAAI,YAAA,CAAa,KAAK,CAAC,CAAA;AAAA,MAChC,KAAK,KAAA;AACH,QAAA,OAAO,GAAA,CAAI,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,MAC1B,KAAK,MAAA;AACH,QAAA,OAAO,GAAA,CAAI,WAAA,CAAY,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,MACtC;AACE,QAAA,OAAO,IAAA,CAAK,EAAE,GAAA,EAAK,CAAA,2BAAA,EAA8B,MAAM,CAAA,CAAA,EAAI,IAAA,EAAM,uCAAuC,CAAA;AAAA;AAC5G,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,IAAA,CAAK,EAAE,GAAA,EAAK,uBAAA,EAAyB,MAAM,eAAA,CAAgB,KAAK,GAAG,CAAA;AAAA,EAC5E;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;;;ACpFO,SAAS,YAAA,GAA+B;AAC7C,EAAA,IAAI;AACF,IAAA,OAAO,GAAA,CAAI,MAAA,CAAO,UAAA,EAAY,CAAA;AAAA,EAChC,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,IAAA,CAAK,EAAE,GAAA,EAAK,6CAAA,EAA+C,MAAM,eAAA,CAAgB,KAAK,GAAG,CAAA;AAAA,EAClG;AACF;AAEA,eAAsB,KAAK,IAAA,EAAuC;AAChE,EAAA,IAAI,CAAC,MAAA,CAAO,IAAI,CAAA,EAAG;AACjB,IAAA,OAAO,KAAK,EAAE,GAAA,EAAK,wBAAA,EAA0B,IAAA,EAAM,mCAAmC,CAAA;AAAA,EACxF;AAEA,EAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAM,GAAI,MAAA,CAAO,MAAM,MAAM,CAAA;AAC5C,EAAA,IAAI,KAAA,EAAO,OAAO,IAAA,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,SAASA,MAAAA,EAAO;AACd,IAAA,OAAO,IAAA,CAAK,EAAE,GAAA,EAAK,yCAAA,EAA2C,MAAM,eAAA,CAAgBA,MAAK,GAAG,CAAA;AAAA,EAC9F;AACF;AAEA,eAAsB,gBAAgB,GAAA,EAAoE;AACxG,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,IAAI,CAAC,MAAA,CAAO,GAAA,EAAK,CAAC,CAAA,EAAG,OAAO,IAAA,CAAK,EAAE,GAAA,EAAK,8BAAA,EAAgC,IAAA,EAAM,oBAAA,EAAsB,CAAA;AAEpG,IAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAM,GAAI,MAAA,CAAO,KAAK,MAAM,CAAA;AAC3C,IAAA,IAAI,KAAA,EAAO,OAAO,IAAA,CAAK,KAAK,CAAA;AAE5B,IAAA,IAAI;AACF,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,EAAM,iBAAA,EAAkB,EAAG,IAAA,EAAM;AAAA,QACnG,SAAA;AAAA,QACA;AAAA,OACD,CAAA;AACD,MAAA,OAAO,GAAA,CAAI,EAAE,SAAA,EAAW,CAAA;AAAA,IAC1B,SAASA,MAAAA,EAAO;AACd,MAAA,OAAO,IAAA,CAAK,EAAE,GAAA,EAAK,iDAAA,EAAmD,MAAM,eAAA,CAAgBA,MAAK,GAAG,CAAA;AAAA,IACtG;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,WAAA,CAAY,GAAG,CAAA,EAAG,OAAO,IAAA,CAAK,EAAE,GAAA,EAAK,oBAAA,EAAsB,IAAA,EAAM,gCAAA,EAAkC,CAAA;AACxG,EAAA,OAAO,GAAA,CAAI,EAAE,SAAA,EAAW,GAAA,EAAK,CAAA;AAC/B;AAEA,eAAsB,OAAA,CAAQ,MAAc,SAAA,EAA+C;AACzF,EAAA,IAAI,CAAC,MAAA,CAAO,IAAI,CAAA,EAAG;AACjB,IAAA,OAAO,KAAK,EAAE,GAAA,EAAK,2BAAA,EAA6B,IAAA,EAAM,mCAAmC,CAAA;AAAA,EAC3F;AAEA,EAAA,IAAI,CAAC,WAAA,CAAY,SAAS,CAAA,EAAG;AAC3B,IAAA,OAAO,KAAK,EAAE,GAAA,EAAK,wBAAA,EAA0B,IAAA,EAAM,kCAAkC,CAAA;AAAA,EACvF;AAEA,EAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAM,GAAI,MAAA,CAAO,MAAM,MAAM,CAAA;AAC5C,EAAA,IAAI,KAAA,EAAO,OAAO,IAAA,CAAK,KAAK,CAAA;AAE5B,EAAA,IAAI;AACF,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,EAAM,iBAAA,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,OAAO,KAAK,EAAE,GAAA,EAAK,uCAAA,EAAyC,IAAA,EAAM,kBAAkB,CAAA;AAAA,IACtF;AAEA,IAAA,OAAO,GAAA,CAAI,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,gBAAgB,CAAA,CAAA,CAAG,CAAA;AAAA,EAChD,SAASA,MAAAA,EAAO;AACd,IAAA,OAAO,IAAA,CAAK,EAAE,GAAA,EAAK,4CAAA,EAA8C,MAAM,eAAA,CAAgBA,MAAK,GAAG,CAAA;AAAA,EACjG;AACF;AAEA,eAAsB,OAAA,CAAQ,WAAmB,SAAA,EAA+C;AAC9F,EAAA,IAAI,0BAAA,CAA2B,SAAS,CAAA,KAAM,KAAA,EAAO;AACnD,IAAA,OAAO,IAAA,CAAK;AAAA,MACV,GAAA,EAAK,+BAAA;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,CAAC,OAAO,EAAA,EAAI,CAAC,KAAK,CAAC,MAAA,CAAO,gBAAA,EAAkB,CAAC,CAAA,EAAG;AAClD,IAAA,OAAO,IAAA,CAAK;AAAA,MACV,GAAA,EAAK,mCAAA;AAAA,MACL,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,CAAC,WAAA,CAAY,SAAS,CAAA,EAAG;AAC3B,IAAA,OAAO,KAAK,EAAE,GAAA,EAAK,wBAAA,EAA0B,IAAA,EAAM,kCAAkC,CAAA;AAAA,EACvF;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,OAAO,KAAK,EAAE,GAAA,EAAK,uCAAA,EAAyC,IAAA,EAAM,kBAAkB,CAAA;AAAA,EACtF;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,EAAE,IAAA,EAAM,iBAAA,EAAmB,EAAA,EAAI,OAAA,EAAQ,EAAG,SAAA,EAAW,cAAc,CAAA;AAEjH,IAAA,OAAO,MAAA,CAAO,WAAW,MAAM,CAAA;AAAA,EACjC,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,IAAA,CAAK,EAAE,GAAA,EAAK,4CAAA,EAA8C,MAAM,eAAA,CAAgB,KAAK,GAAG,CAAA;AAAA,EACjG;AACF;AAEA,eAAsB,UAAA,CAAW,MAA+B,SAAA,EAA+C;AAC7G,EAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAM,GAAI,aAAa,IAAI,CAAA;AAC3C,EAAA,IAAI,KAAA,EAAO,OAAO,IAAA,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,OAAO,IAAA,CAAK,KAAK,CAAA;AAC5B,EAAA,OAAO,WAAW,MAAM,CAAA;AAC1B;;;ACjIA,IAAA,cAAA,GAAA;AAAA,QAAA,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-2VWYNA5O.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({ msg: `Unsupported encode format: ${format}`, desc: 'Use base64, base64url, hex, or utf8' });\r\n }\r\n } catch (error) {\r\n return $err({ msg: '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({ msg: `Unsupported decode format: ${format}`, desc: 'Use base64, base64url, hex, or utf8' });\r\n }\r\n } catch (error) {\r\n return $err({ msg: '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: 'Failed to generate UUID with Crypto Web API', desc: $stringifyError(error) });\r\n }\r\n}\r\n\r\nexport async function hash(data: string): Promise<Result<string>> {\r\n if (!$isStr(data)) {\r\n return $err({ msg: '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: 'Failed to hash data with Crypto Web API', 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 if (!$isStr(key, 1)) return $err({ msg: 'Empty key for Crypto Web API', desc: '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({ msg: 'Failed to create secret key with Crypto Web API', desc: $stringifyError(error) });\r\n }\r\n }\r\n\r\n if (!isWebApiKey(key)) return $err({ msg: 'Invalid secret key', desc: '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({ msg: '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({ msg: 'Invalid encryption key', desc: '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({ msg: 'Failed to encode IV or encrypted data', desc: 'Encoding error' });\r\n }\r\n\r\n return $ok(`${decodedIv}.${decodedEncrypted}.`);\r\n } catch (error) {\r\n return $err({ msg: 'Failed to encrypt data with Crypto Web API', 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: 'Invalid encrypted data format',\r\n desc: '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 msg: 'Invalid parameters for decryption',\r\n desc: 'IV and encrypted data must be non-empty strings',\r\n });\r\n }\r\n\r\n if (!isWebApiKey(secretKey)) {\r\n return $err({ msg: 'Invalid decryption key', desc: '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({ msg: 'Failed to encode IV or encrypted data', desc: '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({ msg: 'Failed to decrypt data with Crypto Web API', 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"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkGAAPPJTK_cjs = require('./chunk-GAAPPJTK.cjs');
|
|
4
4
|
|
|
5
5
|
// src/web/encode.ts
|
|
6
6
|
var textEncoder = new TextEncoder();
|
|
@@ -9,18 +9,18 @@ function encode(data, format = "utf8") {
|
|
|
9
9
|
try {
|
|
10
10
|
switch (format) {
|
|
11
11
|
case "base64":
|
|
12
|
-
return
|
|
12
|
+
return chunkGAAPPJTK_cjs.$ok({ bytes: $fromBase64(data) });
|
|
13
13
|
case "base64url":
|
|
14
|
-
return
|
|
14
|
+
return chunkGAAPPJTK_cjs.$ok({ bytes: $fromBase64Url(data) });
|
|
15
15
|
case "hex":
|
|
16
|
-
return
|
|
16
|
+
return chunkGAAPPJTK_cjs.$ok({ bytes: $fromHex(data) });
|
|
17
17
|
case "utf8":
|
|
18
|
-
return
|
|
18
|
+
return chunkGAAPPJTK_cjs.$ok({ bytes: textEncoder.encode(data) });
|
|
19
19
|
default:
|
|
20
|
-
return
|
|
20
|
+
return chunkGAAPPJTK_cjs.$err({ msg: `Unsupported encode format: ${format}`, desc: "Use base64, base64url, hex, or utf8" });
|
|
21
21
|
}
|
|
22
22
|
} catch (error) {
|
|
23
|
-
return
|
|
23
|
+
return chunkGAAPPJTK_cjs.$err({ msg: "Failed to encode data", desc: chunkGAAPPJTK_cjs.$stringifyError(error) });
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
function decode(data, format = "utf8") {
|
|
@@ -28,18 +28,18 @@ function decode(data, format = "utf8") {
|
|
|
28
28
|
const bytes = data instanceof Uint8Array ? data : new Uint8Array(data);
|
|
29
29
|
switch (format) {
|
|
30
30
|
case "base64":
|
|
31
|
-
return
|
|
31
|
+
return chunkGAAPPJTK_cjs.$ok($toBase64(bytes));
|
|
32
32
|
case "base64url":
|
|
33
|
-
return
|
|
33
|
+
return chunkGAAPPJTK_cjs.$ok($toBase64Url(bytes));
|
|
34
34
|
case "hex":
|
|
35
|
-
return
|
|
35
|
+
return chunkGAAPPJTK_cjs.$ok($toHex(bytes));
|
|
36
36
|
case "utf8":
|
|
37
|
-
return
|
|
37
|
+
return chunkGAAPPJTK_cjs.$ok(textDecoder.decode(bytes));
|
|
38
38
|
default:
|
|
39
|
-
return
|
|
39
|
+
return chunkGAAPPJTK_cjs.$err({ msg: `Unsupported decode format: ${format}`, desc: "Use base64, base64url, hex, or utf8" });
|
|
40
40
|
}
|
|
41
41
|
} catch (error) {
|
|
42
|
-
return
|
|
42
|
+
return chunkGAAPPJTK_cjs.$err({ msg: "Failed to decode data", desc: chunkGAAPPJTK_cjs.$stringifyError(error) });
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
function $toBase64(bytes) {
|
|
@@ -84,111 +84,108 @@ function $fromHex(data) {
|
|
|
84
84
|
// src/web/encrypt.ts
|
|
85
85
|
function generateUuid() {
|
|
86
86
|
try {
|
|
87
|
-
return
|
|
87
|
+
return chunkGAAPPJTK_cjs.$ok(crypto.randomUUID());
|
|
88
88
|
} catch (error) {
|
|
89
|
-
return
|
|
89
|
+
return chunkGAAPPJTK_cjs.$err({ msg: "Failed to generate UUID with Crypto Web API", desc: chunkGAAPPJTK_cjs.$stringifyError(error) });
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
|
-
function isWebApiKey(key) {
|
|
93
|
-
return key !== null && key !== void 0 && typeof key === "object" && "type" in key && typeof key.type === "string" && "algorithm" in key && typeof key.algorithm === "object" && "extractable" in key && typeof key.extractable === "boolean" && "usages" in key && Array.isArray(key.usages) && key.usages.every((usage) => typeof usage === "string");
|
|
94
|
-
}
|
|
95
92
|
async function hash(data) {
|
|
96
|
-
if (!
|
|
97
|
-
return
|
|
93
|
+
if (!chunkGAAPPJTK_cjs.$isStr(data)) {
|
|
94
|
+
return chunkGAAPPJTK_cjs.$err({ msg: "Empty data for hashing", desc: "Data must be a non-empty string" });
|
|
98
95
|
}
|
|
99
96
|
const { bytes, error } = encode(data, "utf8");
|
|
100
|
-
if (error) return
|
|
97
|
+
if (error) return chunkGAAPPJTK_cjs.$err(error);
|
|
101
98
|
try {
|
|
102
99
|
const hashed = await crypto.subtle.digest("SHA-256", bytes);
|
|
103
100
|
return decode(hashed, "base64url");
|
|
104
101
|
} catch (error2) {
|
|
105
|
-
return
|
|
102
|
+
return chunkGAAPPJTK_cjs.$err({ msg: "Failed to hash data with Crypto Web API", desc: chunkGAAPPJTK_cjs.$stringifyError(error2) });
|
|
106
103
|
}
|
|
107
104
|
}
|
|
108
105
|
async function createSecretKey(key) {
|
|
109
106
|
if (typeof key === "string") {
|
|
110
|
-
if (!
|
|
107
|
+
if (!chunkGAAPPJTK_cjs.$isStr(key, 1)) return chunkGAAPPJTK_cjs.$err({ msg: "Empty key for Crypto Web API", desc: "Invalid secret key" });
|
|
111
108
|
const { bytes, error } = encode(key, "utf8");
|
|
112
|
-
if (error) return
|
|
109
|
+
if (error) return chunkGAAPPJTK_cjs.$err(error);
|
|
113
110
|
try {
|
|
114
111
|
const hashedKey = await crypto.subtle.digest("SHA-256", bytes);
|
|
115
|
-
const secretKey = await crypto.subtle.importKey("raw", hashedKey, { name:
|
|
112
|
+
const secretKey = await crypto.subtle.importKey("raw", hashedKey, { name: chunkGAAPPJTK_cjs.WEB_API_ALGORITHM }, true, [
|
|
116
113
|
"encrypt",
|
|
117
114
|
"decrypt"
|
|
118
115
|
]);
|
|
119
|
-
return
|
|
116
|
+
return chunkGAAPPJTK_cjs.$ok({ secretKey });
|
|
120
117
|
} catch (error2) {
|
|
121
|
-
return
|
|
118
|
+
return chunkGAAPPJTK_cjs.$err({ msg: "Failed to create secret key with Crypto Web API", desc: chunkGAAPPJTK_cjs.$stringifyError(error2) });
|
|
122
119
|
}
|
|
123
120
|
}
|
|
124
|
-
if (!isWebApiKey(key)) return
|
|
125
|
-
return
|
|
121
|
+
if (!chunkGAAPPJTK_cjs.isWebApiKey(key)) return chunkGAAPPJTK_cjs.$err({ msg: "Invalid secret key", desc: "Expected a webcrypto.CryptoKey" });
|
|
122
|
+
return chunkGAAPPJTK_cjs.$ok({ secretKey: key });
|
|
126
123
|
}
|
|
127
124
|
async function encrypt(data, secretKey) {
|
|
128
|
-
if (!
|
|
129
|
-
return
|
|
125
|
+
if (!chunkGAAPPJTK_cjs.$isStr(data)) {
|
|
126
|
+
return chunkGAAPPJTK_cjs.$err({ msg: "Empty data for encryption", desc: "Data must be a non-empty string" });
|
|
130
127
|
}
|
|
131
|
-
if (!isWebApiKey(secretKey)) {
|
|
132
|
-
return
|
|
128
|
+
if (!chunkGAAPPJTK_cjs.isWebApiKey(secretKey)) {
|
|
129
|
+
return chunkGAAPPJTK_cjs.$err({ msg: "Invalid encryption key", desc: "Expected a webcrypto.CryptoKey" });
|
|
133
130
|
}
|
|
134
131
|
const { bytes, error } = encode(data, "utf8");
|
|
135
|
-
if (error) return
|
|
132
|
+
if (error) return chunkGAAPPJTK_cjs.$err(error);
|
|
136
133
|
try {
|
|
137
134
|
const iv = crypto.getRandomValues(new Uint8Array(12));
|
|
138
|
-
const encrypted = await crypto.subtle.encrypt({ name:
|
|
135
|
+
const encrypted = await crypto.subtle.encrypt({ name: chunkGAAPPJTK_cjs.WEB_API_ALGORITHM, iv }, secretKey, bytes);
|
|
139
136
|
const { result: decodedIv, error: ivError } = decode(iv, "base64url");
|
|
140
137
|
const { result: decodedEncrypted, error: encryptedError } = decode(encrypted, "base64url");
|
|
141
138
|
if (ivError || encryptedError) {
|
|
142
|
-
return
|
|
139
|
+
return chunkGAAPPJTK_cjs.$err({ msg: "Failed to encode IV or encrypted data", desc: "Encoding error" });
|
|
143
140
|
}
|
|
144
|
-
return
|
|
141
|
+
return chunkGAAPPJTK_cjs.$ok(`${decodedIv}.${decodedEncrypted}.`);
|
|
145
142
|
} catch (error2) {
|
|
146
|
-
return
|
|
143
|
+
return chunkGAAPPJTK_cjs.$err({ msg: "Failed to encrypt data with Crypto Web API", desc: chunkGAAPPJTK_cjs.$stringifyError(error2) });
|
|
147
144
|
}
|
|
148
145
|
}
|
|
149
146
|
async function decrypt(encrypted, secretKey) {
|
|
150
|
-
if (
|
|
151
|
-
return
|
|
147
|
+
if (chunkGAAPPJTK_cjs.isInWebApiEncryptionFormat(encrypted) === false) {
|
|
148
|
+
return chunkGAAPPJTK_cjs.$err({
|
|
152
149
|
msg: "Invalid encrypted data format",
|
|
153
150
|
desc: 'Data must be in the format "iv.encryptedWithTag."'
|
|
154
151
|
});
|
|
155
152
|
}
|
|
156
153
|
const [iv, encryptedWithTag] = encrypted.split(".", 3);
|
|
157
|
-
if (!
|
|
158
|
-
return
|
|
154
|
+
if (!chunkGAAPPJTK_cjs.$isStr(iv, 1) || !chunkGAAPPJTK_cjs.$isStr(encryptedWithTag, 1)) {
|
|
155
|
+
return chunkGAAPPJTK_cjs.$err({
|
|
159
156
|
msg: "Invalid parameters for decryption",
|
|
160
157
|
desc: "IV and encrypted data must be non-empty strings"
|
|
161
158
|
});
|
|
162
159
|
}
|
|
163
|
-
if (!isWebApiKey(secretKey)) {
|
|
164
|
-
return
|
|
160
|
+
if (!chunkGAAPPJTK_cjs.isWebApiKey(secretKey)) {
|
|
161
|
+
return chunkGAAPPJTK_cjs.$err({ msg: "Invalid decryption key", desc: "Expected a webcrypto.CryptoKey" });
|
|
165
162
|
}
|
|
166
163
|
const { bytes: ivBytes, error: ivError } = encode(iv, "base64url");
|
|
167
164
|
const { bytes: encryptedBytes, error: encryptedError } = encode(encryptedWithTag, "base64url");
|
|
168
165
|
if (ivError || encryptedError) {
|
|
169
|
-
return
|
|
166
|
+
return chunkGAAPPJTK_cjs.$err({ msg: "Failed to encode IV or encrypted data", desc: "Encoding error" });
|
|
170
167
|
}
|
|
171
168
|
try {
|
|
172
|
-
const decrypted = await crypto.subtle.decrypt({ name:
|
|
169
|
+
const decrypted = await crypto.subtle.decrypt({ name: chunkGAAPPJTK_cjs.WEB_API_ALGORITHM, iv: ivBytes }, secretKey, encryptedBytes);
|
|
173
170
|
return decode(decrypted, "utf8");
|
|
174
171
|
} catch (error) {
|
|
175
|
-
return
|
|
172
|
+
return chunkGAAPPJTK_cjs.$err({ msg: "Failed to decrypt data with Crypto Web API", desc: chunkGAAPPJTK_cjs.$stringifyError(error) });
|
|
176
173
|
}
|
|
177
174
|
}
|
|
178
175
|
async function encryptObj(data, secretKey) {
|
|
179
|
-
const { result, error } =
|
|
180
|
-
if (error) return
|
|
176
|
+
const { result, error } = chunkGAAPPJTK_cjs.stringifyObj(data);
|
|
177
|
+
if (error) return chunkGAAPPJTK_cjs.$err(error);
|
|
181
178
|
return await encrypt(result, secretKey);
|
|
182
179
|
}
|
|
183
180
|
async function decryptObj(encrypted, secretKey) {
|
|
184
181
|
const { result, error } = await decrypt(encrypted, secretKey);
|
|
185
|
-
if (error) return
|
|
186
|
-
return
|
|
182
|
+
if (error) return chunkGAAPPJTK_cjs.$err(error);
|
|
183
|
+
return chunkGAAPPJTK_cjs.parseToObj(result);
|
|
187
184
|
}
|
|
188
185
|
|
|
189
186
|
// src/web/export.ts
|
|
190
187
|
var export_exports = {};
|
|
191
|
-
|
|
188
|
+
chunkGAAPPJTK_cjs.__export(export_exports, {
|
|
192
189
|
createSecretKey: () => createSecretKey,
|
|
193
190
|
decode: () => decode,
|
|
194
191
|
decrypt: () => decrypt,
|
|
@@ -197,8 +194,7 @@ chunkIMSNCUFU_cjs.__export(export_exports, {
|
|
|
197
194
|
encrypt: () => encrypt,
|
|
198
195
|
encryptObj: () => encryptObj,
|
|
199
196
|
generateUuid: () => generateUuid,
|
|
200
|
-
hash: () => hash
|
|
201
|
-
isWebApiKey: () => isWebApiKey
|
|
197
|
+
hash: () => hash
|
|
202
198
|
});
|
|
203
199
|
|
|
204
200
|
exports.createSecretKey = createSecretKey;
|
|
@@ -211,6 +207,5 @@ exports.encryptObj = encryptObj;
|
|
|
211
207
|
exports.export_exports = export_exports;
|
|
212
208
|
exports.generateUuid = generateUuid;
|
|
213
209
|
exports.hash = hash;
|
|
214
|
-
|
|
215
|
-
//# sourceMappingURL=chunk-
|
|
216
|
-
//# sourceMappingURL=chunk-65XPPPAR.cjs.map
|
|
210
|
+
//# sourceMappingURL=chunk-3E7B77NS.cjs.map
|
|
211
|
+
//# sourceMappingURL=chunk-3E7B77NS.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
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":"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","file":"chunk-3E7B77NS.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({ msg: `Unsupported encode format: ${format}`, desc: 'Use base64, base64url, hex, or utf8' });\r\n }\r\n } catch (error) {\r\n return $err({ msg: '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({ msg: `Unsupported decode format: ${format}`, desc: 'Use base64, base64url, hex, or utf8' });\r\n }\r\n } catch (error) {\r\n return $err({ msg: '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: 'Failed to generate UUID with Crypto Web API', desc: $stringifyError(error) });\r\n }\r\n}\r\n\r\nexport async function hash(data: string): Promise<Result<string>> {\r\n if (!$isStr(data)) {\r\n return $err({ msg: '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: 'Failed to hash data with Crypto Web API', 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 if (!$isStr(key, 1)) return $err({ msg: 'Empty key for Crypto Web API', desc: '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({ msg: 'Failed to create secret key with Crypto Web API', desc: $stringifyError(error) });\r\n }\r\n }\r\n\r\n if (!isWebApiKey(key)) return $err({ msg: 'Invalid secret key', desc: '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({ msg: '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({ msg: 'Invalid encryption key', desc: '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({ msg: 'Failed to encode IV or encrypted data', desc: 'Encoding error' });\r\n }\r\n\r\n return $ok(`${decodedIv}.${decodedEncrypted}.`);\r\n } catch (error) {\r\n return $err({ msg: 'Failed to encrypt data with Crypto Web API', 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: 'Invalid encrypted data format',\r\n desc: '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 msg: 'Invalid parameters for decryption',\r\n desc: 'IV and encrypted data must be non-empty strings',\r\n });\r\n }\r\n\r\n if (!isWebApiKey(secretKey)) {\r\n return $err({ msg: 'Invalid decryption key', desc: '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({ msg: 'Failed to encode IV or encrypted data', desc: '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({ msg: 'Failed to decrypt data with Crypto Web API', 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"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { __export, $isStr, $err, $stringifyError, $ok, stringifyObj, NODE_ALGORITHM, parseToObj, isInNodeEncryptionFormat } from './chunk-
|
|
1
|
+
import { __export, $isStr, $err, $stringifyError, $ok, stringifyObj, isNodeKey, NODE_ALGORITHM, parseToObj, isInNodeEncryptionFormat } from './chunk-V7MXS2IX.js';
|
|
2
2
|
import { Buffer } from 'buffer';
|
|
3
3
|
import nodeCrypto from 'crypto';
|
|
4
4
|
|
|
@@ -23,9 +23,6 @@ function generateUuid() {
|
|
|
23
23
|
return $err({ msg: "Failed to generate UUID with Crypto NodeJS", desc: $stringifyError(error) });
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
-
function isNodeKey(key) {
|
|
27
|
-
return key instanceof nodeCrypto.KeyObject;
|
|
28
|
-
}
|
|
29
26
|
function hash(data) {
|
|
30
27
|
if (!$isStr(data)) {
|
|
31
28
|
return $err({ msg: "Empty data for hashing", desc: "Data must be a non-empty string" });
|
|
@@ -128,10 +125,9 @@ __export(export_exports, {
|
|
|
128
125
|
encrypt: () => encrypt,
|
|
129
126
|
encryptObj: () => encryptObj,
|
|
130
127
|
generateUuid: () => generateUuid,
|
|
131
|
-
hash: () => hash
|
|
132
|
-
isNodeKey: () => isNodeKey
|
|
128
|
+
hash: () => hash
|
|
133
129
|
});
|
|
134
130
|
|
|
135
|
-
export { createSecretKey, decode, decrypt, decryptObj, encode, encrypt, encryptObj, export_exports, generateUuid, hash
|
|
136
|
-
//# sourceMappingURL=chunk-
|
|
137
|
-
//# sourceMappingURL=chunk-
|
|
131
|
+
export { createSecretKey, decode, decrypt, decryptObj, encode, encrypt, encryptObj, export_exports, generateUuid, hash };
|
|
132
|
+
//# sourceMappingURL=chunk-FVUCOHD7.js.map
|
|
133
|
+
//# sourceMappingURL=chunk-FVUCOHD7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/node/encode.ts","../src/node/encrypt.ts","../src/node/export.ts"],"names":["Buffer"],"mappings":"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","file":"chunk-FVUCOHD7.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({ msg: 'Failed to encode data', desc: $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({ msg: 'Failed to decode data', desc: $stringifyError(error) });\r\n }\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, isInNodeEncryptionFormat, isNodeKey, NODE_ALGORITHM, parseToObj, stringifyObj } from '~/utils';\r\nimport { decode, encode } from './encode';\r\n\r\nexport function generateUuid(): Result<string> {\r\n try {\r\n return $ok(nodeCrypto.randomUUID());\r\n } catch (error) {\r\n return $err({ msg: 'Failed to generate UUID with Crypto NodeJS', desc: $stringifyError(error) });\r\n }\r\n}\r\n\r\nexport function hash(data: string): Result<string> {\r\n if (!$isStr(data)) {\r\n return $err({ msg: 'Empty data for hashing', desc: '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({ msg: 'Failed to hash data with Crypto NodeJS', desc: $stringifyError(error) });\r\n }\r\n}\r\n\r\nexport function createSecretKey(key: string | NodeKey): Result<{ secretKey: NodeKey }> {\r\n if (typeof key === 'string') {\r\n if (!$isStr(key, 1)) return $err({ msg: 'Empty key for Crypto NodeJS', desc: '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({ msg: 'Failed to create secret key with Crypto NodeJS', desc: $stringifyError(error) });\r\n }\r\n }\r\n\r\n if (!isNodeKey(key)) return $err({ msg: 'Invalid secret key', desc: '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({ msg: 'Empty data for encryption', desc: 'Data must be a non-empty string' });\r\n }\r\n\r\n if (!isNodeKey(secretKey)) {\r\n return $err({ msg: 'Invalid encryption key', desc: '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({ msg: 'Failed to encode encrypted data', desc: 'Encoding error' });\r\n }\r\n\r\n return $ok(`${decodedIv}.${decodedEncrypted}.${decodedTag}.`);\r\n } catch (error) {\r\n return $err({ msg: 'Failed to encrypt data with Crypto NodeJS', desc: $stringifyError(error) });\r\n }\r\n}\r\n\r\nexport function decrypt(encrypted: string, secretKey: NodeKey): Result<string> {\r\n if (isInNodeEncryptionFormat(encrypted) === false) {\r\n return $err({\r\n msg: 'Invalid encrypted data format',\r\n desc: '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 msg: 'Invalid parameters for decryption',\r\n desc: '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({ msg: 'Invalid decryption key', desc: '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({ msg: 'Failed to encode IV or encrypted data', desc: '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({ msg: 'Failed to decrypt data with Crypto NodeJS', desc: $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","export { decode, encode } from './encode';\r\nexport { createSecretKey, decrypt, decryptObj, encrypt, encryptObj, generateUuid, hash } from './encrypt';\r\n"]}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var nodeCrypto = require('crypto');
|
|
4
|
+
|
|
5
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
6
|
+
|
|
7
|
+
var nodeCrypto__default = /*#__PURE__*/_interopDefault(nodeCrypto);
|
|
8
|
+
|
|
3
9
|
var __defProp = Object.defineProperty;
|
|
4
10
|
var __export = (target, all) => {
|
|
5
11
|
for (var name in all)
|
|
@@ -46,6 +52,12 @@ function $isStr(value, min = 0) {
|
|
|
46
52
|
function $isObj(value) {
|
|
47
53
|
return typeof value === "object" && value !== null && value !== void 0 && (Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null);
|
|
48
54
|
}
|
|
55
|
+
function isWebApiKey(key) {
|
|
56
|
+
return key !== null && key !== void 0 && typeof key === "object" && "type" in key && typeof key.type === "string" && "algorithm" in key && typeof key.algorithm === "object" && "extractable" in key && typeof key.extractable === "boolean" && "usages" in key && Array.isArray(key.usages) && key.usages.every((usage) => typeof usage === "string");
|
|
57
|
+
}
|
|
58
|
+
function isNodeKey(key) {
|
|
59
|
+
return key instanceof nodeCrypto__default.default.KeyObject;
|
|
60
|
+
}
|
|
49
61
|
function stringifyObj(obj) {
|
|
50
62
|
if (!$isObj(obj)) return $err({ msg: "Invalid object", desc: "Input is not a plain object" });
|
|
51
63
|
try {
|
|
@@ -78,7 +90,9 @@ exports.__export = __export;
|
|
|
78
90
|
exports.isInEncryptionFormat = isInEncryptionFormat;
|
|
79
91
|
exports.isInNodeEncryptionFormat = isInNodeEncryptionFormat;
|
|
80
92
|
exports.isInWebApiEncryptionFormat = isInWebApiEncryptionFormat;
|
|
93
|
+
exports.isNodeKey = isNodeKey;
|
|
94
|
+
exports.isWebApiKey = isWebApiKey;
|
|
81
95
|
exports.parseToObj = parseToObj;
|
|
82
96
|
exports.stringifyObj = stringifyObj;
|
|
83
|
-
//# sourceMappingURL=chunk-
|
|
84
|
-
//# sourceMappingURL=chunk-
|
|
97
|
+
//# sourceMappingURL=chunk-GAAPPJTK.cjs.map
|
|
98
|
+
//# sourceMappingURL=chunk-GAAPPJTK.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/error.ts","../src/utils.ts"],"names":["nodeCrypto"],"mappings":"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","file":"chunk-GAAPPJTK.cjs","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: { msg: string; desc: string }): Result<never, ResultErr>;\r\nexport function $err(typeOrErr: ResultErr): Result<never, ResultErr>;\r\nexport function $err(typeOrErr: { msg: string; desc: string } | ResultErr): Result<never, ResultErr> {\r\n return {\r\n success: false,\r\n error:\r\n 'msg' in typeOrErr && 'desc' in typeOrErr\r\n ? { message: typeOrErr.msg, description: typeOrErr.desc }\r\n : { message: typeOrErr.message, description: typeOrErr.description },\r\n } 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 nodeCrypto from 'node:crypto';\r\nimport type { WebApiKey } from '~/types';\r\nimport { $err, $ok, $stringifyError, type Result } from './error';\r\n\r\nexport const NODE_ALGORITHM = 'aes-256-gcm';\r\nexport const WEB_API_ALGORITHM = 'AES-GCM';\r\n\r\nexport const ENCRYPTION_REGEX = Object.freeze({\r\n GENERAL: /^(?:[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+(?:\\.[A-Za-z0-9_-]+)?\\.)$/,\r\n NODE: /^([A-Za-z0-9_-]+)\\.([A-Za-z0-9_-]+)\\.([A-Za-z0-9_-]+)\\.$/,\r\n WEB_API: /^([A-Za-z0-9_-]+)\\.([A-Za-z0-9_-]+)\\.$/,\r\n});\r\n\r\nexport function isInEncryptionFormat(data: string): boolean {\r\n return typeof data === 'string' && ENCRYPTION_REGEX.GENERAL.test(data);\r\n}\r\n\r\nexport function isInNodeEncryptionFormat(data: string): boolean {\r\n return typeof data === 'string' && ENCRYPTION_REGEX.NODE.test(data);\r\n}\r\n\r\nexport function isInWebApiEncryptionFormat(data: string): boolean {\r\n return typeof data === 'string' && ENCRYPTION_REGEX.WEB_API.test(data);\r\n}\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 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\r\nexport function isNodeKey(key: unknown): key is nodeCrypto.KeyObject {\r\n return key instanceof nodeCrypto.KeyObject;\r\n}\r\n\r\nexport function stringifyObj(obj: Record<string, unknown>): Result<string> {\r\n if (!$isObj(obj)) return $err({ msg: 'Invalid object', desc: '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({ msg: 'Stringify error', desc: $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({ msg: 'Invalid input', desc: '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({ msg: 'Invalid object format', desc: '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({ msg: 'Invalid format', desc: $stringifyError(error) });\r\n }\r\n}\r\n"]}
|