@credo-ts/core 0.6.2-pr-2610-20260108113505 → 0.6.2-pr-2610-20260108163020

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.
@@ -1,4 +1,4 @@
1
- import { KeyImportParams, KeyType, KeyUsage } from "./types.mjs";
1
+ import { KeyGenAlgorithm, KeyType, KeyUsage } from "./types.mjs";
2
2
  import { PublicJwk } from "../../modules/kms/jwk/PublicJwk.mjs";
3
3
  import "../../modules/kms/index.mjs";
4
4
  import * as core from "webcrypto-core";
@@ -6,11 +6,11 @@ import * as core from "webcrypto-core";
6
6
  //#region src/crypto/webcrypto/CredoWebCryptoKey.d.ts
7
7
  declare class CredoWebCryptoKey extends core.CryptoKey {
8
8
  publicJwk: PublicJwk;
9
- algorithm: KeyImportParams;
9
+ algorithm: KeyGenAlgorithm;
10
10
  extractable: boolean;
11
11
  type: KeyType;
12
12
  usages: Array<KeyUsage>;
13
- constructor(publicJwk: PublicJwk, algorithm: KeyImportParams, extractable: boolean, type: KeyType, usages: Array<KeyUsage>);
13
+ constructor(publicJwk: PublicJwk, algorithm: KeyGenAlgorithm, extractable: boolean, type: KeyType, usages: Array<KeyUsage>);
14
14
  }
15
15
  //#endregion
16
16
  export { CredoWebCryptoKey };
@@ -1 +1 @@
1
- {"version":3,"file":"CredoWebCryptoKey.mjs","names":["publicJwk: PublicJwk","algorithm: KeyImportParams","extractable: boolean","type: KeyType","usages: Array<KeyUsage>"],"sources":["../../../src/crypto/webcrypto/CredoWebCryptoKey.ts"],"sourcesContent":["import * as core from 'webcrypto-core'\nimport { PublicJwk } from '../../modules/kms'\nimport type { KeyImportParams, KeyType, KeyUsage } from './types'\n\nexport class CredoWebCryptoKey extends core.CryptoKey {\n public constructor(\n public publicJwk: PublicJwk,\n public override algorithm: KeyImportParams,\n public override extractable: boolean,\n public override type: KeyType,\n public override usages: Array<KeyUsage>\n ) {\n super()\n }\n}\n"],"mappings":";;;;;;AAIA,IAAa,oBAAb,cAAuC,KAAK,UAAU;CACpD,AAAO,YACL,AAAOA,WACP,AAAgBC,WAChB,AAAgBC,aAChB,AAAgBC,MAChB,AAAgBC,QAChB;AACA,SAAO;EANA;EACS;EACA;EACA;EACA"}
1
+ {"version":3,"file":"CredoWebCryptoKey.mjs","names":["publicJwk: PublicJwk","algorithm: KeyGenAlgorithm","extractable: boolean","type: KeyType","usages: Array<KeyUsage>"],"sources":["../../../src/crypto/webcrypto/CredoWebCryptoKey.ts"],"sourcesContent":["import * as core from 'webcrypto-core'\nimport { PublicJwk } from '../../modules/kms'\nimport type { KeyGenAlgorithm, KeyType, KeyUsage } from './types'\n\nexport class CredoWebCryptoKey extends core.CryptoKey {\n public constructor(\n public publicJwk: PublicJwk,\n public override algorithm: KeyGenAlgorithm,\n public override extractable: boolean,\n public override type: KeyType,\n public override usages: Array<KeyUsage>\n ) {\n super()\n }\n}\n"],"mappings":";;;;;;AAIA,IAAa,oBAAb,cAAuC,KAAK,UAAU;CACpD,AAAO,YACL,AAAOA,WACP,AAAgBC,WAChB,AAAgBC,aAChB,AAAgBC,MAChB,AAAgBC,QAChB;AACA,SAAO;EANA;EACS;EACA;EACA;EACA"}
@@ -1,10 +1,10 @@
1
- import { KeyImportParams } from "../types.mjs";
1
+ import { KeyGenAlgorithm } from "../types.mjs";
2
2
  import { PublicJwk } from "../../../modules/kms/jwk/PublicJwk.mjs";
3
3
  import "../../../modules/kms/index.mjs";
4
4
  import { SubjectPublicKeyInfo } from "@peculiar/asn1-x509";
5
5
 
6
6
  //#region src/crypto/webcrypto/utils/keyAlgorithmConversion.d.ts
7
- declare const publicJwkToCryptoKeyAlgorithm: (key: PublicJwk) => KeyImportParams;
7
+ declare const publicJwkToCryptoKeyAlgorithm: (key: PublicJwk) => KeyGenAlgorithm;
8
8
  //#endregion
9
9
  export { publicJwkToCryptoKeyAlgorithm };
10
10
  //# sourceMappingURL=keyAlgorithmConversion.d.mts.map
@@ -23,36 +23,6 @@ const publicJwkToCryptoKeyAlgorithm = (key) => {
23
23
  } else if (publicJwk.kty === "OKP") {
24
24
  if (publicJwk.crv === "Ed25519") return { name: "Ed25519" };
25
25
  }
26
- if (publicJwk.kty === "RSA") {
27
- const signatureAlg = key.signatureAlgorithm;
28
- switch (signatureAlg) {
29
- case "RS256": return {
30
- name: "RSASSA-PKCS1-v1_5",
31
- hash: { name: "SHA-256" }
32
- };
33
- case "RS384": return {
34
- name: "RSASSA-PKCS1-v1_5",
35
- hash: { name: "SHA-384" }
36
- };
37
- case "RS512": return {
38
- name: "RSASSA-PKCS1-v1_5",
39
- hash: { name: "SHA-512" }
40
- };
41
- case "PS256": return {
42
- name: "RSA-PSS",
43
- hash: { name: "SHA-256" }
44
- };
45
- case "PS384": return {
46
- name: "RSA-PSS",
47
- hash: { name: "SHA-384" }
48
- };
49
- case "PS512": return {
50
- name: "RSA-PSS",
51
- hash: { name: "SHA-512" }
52
- };
53
- default: throw new CredoWebCryptoError(`Unsupported RSA signature algorithm: ${signatureAlg}`);
54
- }
55
- }
56
26
  throw new CredoWebCryptoError(`Unsupported ${key.jwkTypeHumanDescription}`);
57
27
  };
58
28
  const cryptoKeyAlgorithmToCreateKeyOptions = (algorithm) => {
@@ -1 +1 @@
1
- {"version":3,"file":"keyAlgorithmConversion.mjs","names":[],"sources":["../../../../src/crypto/webcrypto/utils/keyAlgorithmConversion.ts"],"sourcesContent":["import { RSAPublicKey } from '@peculiar/asn1-rsa'\nimport { AsnParser, AsnSerializer } from '@peculiar/asn1-schema'\nimport { AlgorithmIdentifier, SubjectPublicKeyInfo } from '@peculiar/asn1-x509'\nimport { type KmsCreateKeyType, PublicJwk } from '../../../modules/kms'\nimport {\n ecPublicKeyWithK256AlgorithmIdentifier,\n ecPublicKeyWithP256AlgorithmIdentifier,\n ecPublicKeyWithP384AlgorithmIdentifier,\n ecPublicKeyWithP521AlgorithmIdentifier,\n ed25519AlgorithmIdentifier,\n rsaKeyAlgorithmIdentifier,\n x25519AlgorithmIdentifier,\n} from '../algorithmIdentifiers'\nimport { CredoWebCryptoError } from '../CredoWebCryptoError'\nimport type { EcKeyGenParams, KeyGenAlgorithm, KeyImportParams, RsaHashedKeyGenParams } from '../types'\n\nexport const publicJwkToCryptoKeyAlgorithm = (key: PublicJwk): KeyImportParams => {\n const publicJwk = key.toJson()\n\n if (publicJwk.kty === 'EC') {\n if (publicJwk.crv === 'P-256' || publicJwk.crv === 'P-384' || publicJwk.crv === 'P-521') {\n return { name: 'ECDSA', namedCurve: publicJwk.crv }\n }\n\n if (publicJwk.crv === 'secp256k1') {\n return {\n name: 'ECDSA',\n namedCurve: 'K-256',\n }\n }\n } else if (publicJwk.kty === 'OKP') {\n if (publicJwk.crv === 'Ed25519') {\n return { name: 'Ed25519' }\n }\n }\n\n if (publicJwk.kty === 'RSA') {\n const signatureAlg = key.signatureAlgorithm\n switch (signatureAlg) {\n case 'RS256':\n return { name: 'RSASSA-PKCS1-v1_5', hash: { name: 'SHA-256' } }\n case 'RS384':\n return { name: 'RSASSA-PKCS1-v1_5', hash: { name: 'SHA-384' } }\n case 'RS512':\n return { name: 'RSASSA-PKCS1-v1_5', hash: { name: 'SHA-512' } }\n case 'PS256':\n return { name: 'RSA-PSS', hash: { name: 'SHA-256' } }\n case 'PS384':\n return { name: 'RSA-PSS', hash: { name: 'SHA-384' } }\n case 'PS512':\n return { name: 'RSA-PSS', hash: { name: 'SHA-512' } }\n default:\n throw new CredoWebCryptoError(`Unsupported RSA signature algorithm: ${signatureAlg}`)\n }\n }\n\n throw new CredoWebCryptoError(`Unsupported ${key.jwkTypeHumanDescription}`)\n}\n\n// TODO: support RSA\nexport const cryptoKeyAlgorithmToCreateKeyOptions = (algorithm: KeyGenAlgorithm) => {\n const algorithmName = algorithm.name.toUpperCase()\n switch (algorithmName) {\n case 'ED25519':\n return {\n kty: 'OKP',\n crv: 'Ed25519',\n } satisfies KmsCreateKeyType\n case 'X25519':\n return {\n kty: 'OKP',\n crv: 'X25519',\n } satisfies KmsCreateKeyType\n case 'ECDSA': {\n const crv = (algorithm as EcKeyGenParams).namedCurve.toUpperCase()\n switch (crv) {\n case 'P-256':\n case 'P-384':\n case 'P-521':\n return {\n kty: 'EC',\n crv,\n } satisfies KmsCreateKeyType\n case 'K-256':\n return {\n kty: 'EC',\n crv: 'secp256k1',\n } satisfies KmsCreateKeyType\n default:\n throw new CredoWebCryptoError(`Unsupported curve for ECDSA: ${(algorithm as EcKeyGenParams).namedCurve}`)\n }\n }\n case 'RSASSA-PKCS1-V1_5':\n case 'RSA-PSS': {\n const rsaParams = algorithm as RsaHashedKeyGenParams\n\n if (rsaParams.publicExponent) {\n throw new CredoWebCryptoError('Custom exponent not suported for RSA')\n }\n\n if (rsaParams.modulusLength !== 2048 && rsaParams.modulusLength !== 3072 && rsaParams.modulusLength !== 4096) {\n throw new CredoWebCryptoError(\n `Unsupported modulusLength '${rsaParams.modulusLength}' for RSA key. Expected one of 2048, 3072, 4096.`\n )\n }\n\n return {\n kty: 'RSA',\n modulusLength: rsaParams.modulusLength,\n } satisfies KmsCreateKeyType\n }\n }\n\n throw new CredoWebCryptoError(`Unsupported algorithm: ${algorithmName}`)\n}\n\nexport const spkiToPublicJwk = (spki: SubjectPublicKeyInfo): PublicJwk => {\n if (spki.algorithm.isEqual(ecPublicKeyWithP256AlgorithmIdentifier)) {\n return PublicJwk.fromPublicKey({\n kty: 'EC',\n crv: 'P-256',\n publicKey: new Uint8Array(spki.subjectPublicKey),\n })\n }\n if (spki.algorithm.isEqual(ecPublicKeyWithP384AlgorithmIdentifier)) {\n return PublicJwk.fromPublicKey({\n kty: 'EC',\n crv: 'P-384',\n publicKey: new Uint8Array(spki.subjectPublicKey),\n })\n }\n if (spki.algorithm.isEqual(ecPublicKeyWithP521AlgorithmIdentifier)) {\n return PublicJwk.fromPublicKey({\n kty: 'EC',\n crv: 'P-521',\n publicKey: new Uint8Array(spki.subjectPublicKey),\n })\n }\n if (spki.algorithm.isEqual(ecPublicKeyWithK256AlgorithmIdentifier)) {\n return PublicJwk.fromPublicKey({\n kty: 'EC',\n crv: 'secp256k1',\n publicKey: new Uint8Array(spki.subjectPublicKey),\n })\n }\n if (spki.algorithm.isEqual(ed25519AlgorithmIdentifier)) {\n return PublicJwk.fromPublicKey({\n kty: 'OKP',\n crv: 'Ed25519',\n publicKey: new Uint8Array(spki.subjectPublicKey),\n })\n }\n if (spki.algorithm.isEqual(x25519AlgorithmIdentifier)) {\n return PublicJwk.fromPublicKey({\n kty: 'OKP',\n crv: 'X25519',\n publicKey: new Uint8Array(spki.subjectPublicKey),\n })\n }\n if (spki.algorithm.isEqual(rsaKeyAlgorithmIdentifier)) {\n // The RSA key is another ASN.1 structure inside the subjectPublicKey bit string\n // The first byte in the bit string is the number of unused bits (typically 0)\n const keyWithoutUnusedBits = new Uint8Array(spki.subjectPublicKey).slice(1)\n\n // Parse the RSA public key structure\n const rsaPublicKey = AsnParser.parse(keyWithoutUnusedBits, RSAPublicKey)\n\n return PublicJwk.fromPublicKey({\n kty: 'RSA',\n modulus: new Uint8Array(rsaPublicKey.modulus),\n exponent: new Uint8Array(rsaPublicKey.publicExponent),\n })\n }\n\n throw new CredoWebCryptoError(\n `Unsupported algorithm: ${spki.algorithm.algorithm}, with params: ${spki.algorithm.parameters ? 'yes' : 'no'}`\n )\n}\n\nexport const publicJwkToSpki = (publicJwk: PublicJwk): SubjectPublicKeyInfo => {\n const publicKey = publicJwk.publicKey\n\n if (publicKey.kty === 'RSA') {\n const rsaPublicKey = new RSAPublicKey({\n modulus: new Uint8Array(publicKey.modulus).buffer,\n publicExponent: new Uint8Array(publicKey.exponent).buffer,\n })\n\n // 2. Encode the RSA public key to DER\n const rsaPublicKeyDer = AsnSerializer.serialize(rsaPublicKey)\n\n return new SubjectPublicKeyInfo({\n algorithm: rsaKeyAlgorithmIdentifier,\n subjectPublicKey: new Uint8Array([0, ...new Uint8Array(rsaPublicKeyDer)]).buffer,\n })\n }\n\n const crvToAlgorithm: Record<(typeof publicKey)['crv'], AlgorithmIdentifier> = {\n 'P-256': ecPublicKeyWithP256AlgorithmIdentifier,\n 'P-384': ecPublicKeyWithP384AlgorithmIdentifier,\n 'P-521': ecPublicKeyWithP521AlgorithmIdentifier,\n secp256k1: ecPublicKeyWithK256AlgorithmIdentifier,\n Ed25519: ed25519AlgorithmIdentifier,\n X25519: x25519AlgorithmIdentifier,\n }\n\n return new SubjectPublicKeyInfo({\n algorithm: crvToAlgorithm[publicKey.crv],\n subjectPublicKey: new Uint8Array(publicKey.publicKey).buffer,\n })\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"keyAlgorithmConversion.mjs","names":[],"sources":["../../../../src/crypto/webcrypto/utils/keyAlgorithmConversion.ts"],"sourcesContent":["import { RSAPublicKey } from '@peculiar/asn1-rsa'\nimport { AsnParser, AsnSerializer } from '@peculiar/asn1-schema'\nimport { AlgorithmIdentifier, SubjectPublicKeyInfo } from '@peculiar/asn1-x509'\nimport { type KmsCreateKeyType, PublicJwk } from '../../../modules/kms'\nimport {\n ecPublicKeyWithK256AlgorithmIdentifier,\n ecPublicKeyWithP256AlgorithmIdentifier,\n ecPublicKeyWithP384AlgorithmIdentifier,\n ecPublicKeyWithP521AlgorithmIdentifier,\n ed25519AlgorithmIdentifier,\n rsaKeyAlgorithmIdentifier,\n x25519AlgorithmIdentifier,\n} from '../algorithmIdentifiers'\nimport { CredoWebCryptoError } from '../CredoWebCryptoError'\nimport type { EcKeyGenParams, KeyGenAlgorithm, RsaHashedKeyGenParams } from '../types'\n\nexport const publicJwkToCryptoKeyAlgorithm = (key: PublicJwk): KeyGenAlgorithm => {\n const publicJwk = key.toJson()\n\n if (publicJwk.kty === 'EC') {\n if (publicJwk.crv === 'P-256' || publicJwk.crv === 'P-384' || publicJwk.crv === 'P-521') {\n return { name: 'ECDSA', namedCurve: publicJwk.crv }\n }\n\n if (publicJwk.crv === 'secp256k1') {\n return {\n name: 'ECDSA',\n namedCurve: 'K-256',\n }\n }\n } else if (publicJwk.kty === 'OKP') {\n if (publicJwk.crv === 'Ed25519') {\n return { name: 'Ed25519' }\n }\n }\n\n // TODO: support RSA, but i think we need some extra params for this\n throw new CredoWebCryptoError(`Unsupported ${key.jwkTypeHumanDescription}`)\n}\n\n// TODO: support RSA\nexport const cryptoKeyAlgorithmToCreateKeyOptions = (algorithm: KeyGenAlgorithm) => {\n const algorithmName = algorithm.name.toUpperCase()\n switch (algorithmName) {\n case 'ED25519':\n return {\n kty: 'OKP',\n crv: 'Ed25519',\n } satisfies KmsCreateKeyType\n case 'X25519':\n return {\n kty: 'OKP',\n crv: 'X25519',\n } satisfies KmsCreateKeyType\n case 'ECDSA': {\n const crv = (algorithm as EcKeyGenParams).namedCurve.toUpperCase()\n switch (crv) {\n case 'P-256':\n case 'P-384':\n case 'P-521':\n return {\n kty: 'EC',\n crv,\n } satisfies KmsCreateKeyType\n case 'K-256':\n return {\n kty: 'EC',\n crv: 'secp256k1',\n } satisfies KmsCreateKeyType\n default:\n throw new CredoWebCryptoError(`Unsupported curve for ECDSA: ${(algorithm as EcKeyGenParams).namedCurve}`)\n }\n }\n case 'RSASSA-PKCS1-V1_5':\n case 'RSA-PSS': {\n const rsaParams = algorithm as RsaHashedKeyGenParams\n\n if (rsaParams.publicExponent) {\n throw new CredoWebCryptoError('Custom exponent not suported for RSA')\n }\n\n if (rsaParams.modulusLength !== 2048 && rsaParams.modulusLength !== 3072 && rsaParams.modulusLength !== 4096) {\n throw new CredoWebCryptoError(\n `Unsupported modulusLength '${rsaParams.modulusLength}' for RSA key. Expected one of 2048, 3072, 4096.`\n )\n }\n\n return {\n kty: 'RSA',\n modulusLength: rsaParams.modulusLength,\n } satisfies KmsCreateKeyType\n }\n }\n\n throw new CredoWebCryptoError(`Unsupported algorithm: ${algorithmName}`)\n}\n\nexport const spkiToPublicJwk = (spki: SubjectPublicKeyInfo): PublicJwk => {\n if (spki.algorithm.isEqual(ecPublicKeyWithP256AlgorithmIdentifier)) {\n return PublicJwk.fromPublicKey({\n kty: 'EC',\n crv: 'P-256',\n publicKey: new Uint8Array(spki.subjectPublicKey),\n })\n }\n if (spki.algorithm.isEqual(ecPublicKeyWithP384AlgorithmIdentifier)) {\n return PublicJwk.fromPublicKey({\n kty: 'EC',\n crv: 'P-384',\n publicKey: new Uint8Array(spki.subjectPublicKey),\n })\n }\n if (spki.algorithm.isEqual(ecPublicKeyWithP521AlgorithmIdentifier)) {\n return PublicJwk.fromPublicKey({\n kty: 'EC',\n crv: 'P-521',\n publicKey: new Uint8Array(spki.subjectPublicKey),\n })\n }\n if (spki.algorithm.isEqual(ecPublicKeyWithK256AlgorithmIdentifier)) {\n return PublicJwk.fromPublicKey({\n kty: 'EC',\n crv: 'secp256k1',\n publicKey: new Uint8Array(spki.subjectPublicKey),\n })\n }\n if (spki.algorithm.isEqual(ed25519AlgorithmIdentifier)) {\n return PublicJwk.fromPublicKey({\n kty: 'OKP',\n crv: 'Ed25519',\n publicKey: new Uint8Array(spki.subjectPublicKey),\n })\n }\n if (spki.algorithm.isEqual(x25519AlgorithmIdentifier)) {\n return PublicJwk.fromPublicKey({\n kty: 'OKP',\n crv: 'X25519',\n publicKey: new Uint8Array(spki.subjectPublicKey),\n })\n }\n if (spki.algorithm.isEqual(rsaKeyAlgorithmIdentifier)) {\n // The RSA key is another ASN.1 structure inside the subjectPublicKey bit string\n // The first byte in the bit string is the number of unused bits (typically 0)\n const keyWithoutUnusedBits = new Uint8Array(spki.subjectPublicKey).slice(1)\n\n // Parse the RSA public key structure\n const rsaPublicKey = AsnParser.parse(keyWithoutUnusedBits, RSAPublicKey)\n\n return PublicJwk.fromPublicKey({\n kty: 'RSA',\n modulus: new Uint8Array(rsaPublicKey.modulus),\n exponent: new Uint8Array(rsaPublicKey.publicExponent),\n })\n }\n\n throw new CredoWebCryptoError(\n `Unsupported algorithm: ${spki.algorithm.algorithm}, with params: ${spki.algorithm.parameters ? 'yes' : 'no'}`\n )\n}\n\nexport const publicJwkToSpki = (publicJwk: PublicJwk): SubjectPublicKeyInfo => {\n const publicKey = publicJwk.publicKey\n\n if (publicKey.kty === 'RSA') {\n const rsaPublicKey = new RSAPublicKey({\n modulus: new Uint8Array(publicKey.modulus).buffer,\n publicExponent: new Uint8Array(publicKey.exponent).buffer,\n })\n\n // 2. Encode the RSA public key to DER\n const rsaPublicKeyDer = AsnSerializer.serialize(rsaPublicKey)\n\n return new SubjectPublicKeyInfo({\n algorithm: rsaKeyAlgorithmIdentifier,\n subjectPublicKey: new Uint8Array([0, ...new Uint8Array(rsaPublicKeyDer)]).buffer,\n })\n }\n\n const crvToAlgorithm: Record<(typeof publicKey)['crv'], AlgorithmIdentifier> = {\n 'P-256': ecPublicKeyWithP256AlgorithmIdentifier,\n 'P-384': ecPublicKeyWithP384AlgorithmIdentifier,\n 'P-521': ecPublicKeyWithP521AlgorithmIdentifier,\n secp256k1: ecPublicKeyWithK256AlgorithmIdentifier,\n Ed25519: ed25519AlgorithmIdentifier,\n X25519: x25519AlgorithmIdentifier,\n }\n\n return new SubjectPublicKeyInfo({\n algorithm: crvToAlgorithm[publicKey.crv],\n subjectPublicKey: new Uint8Array(publicKey.publicKey).buffer,\n })\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"mixins.d.mts","names":[],"sources":["../../src/utils/mixins.ts"],"sourcesContent":[],"mappings":";KAKY,8CAA8C;KAI9C,4DAA4D,mBAAmB,sBAAsB;AAJrG,KAQA,mBARW,CAAmC,CAAA,CAAC,GAAA,CAQrB,CARqB,SAAA,GAAA,GAAA,CAAA,CAAA,EAQD,CARC,EAAA,GAAA,IAAA,GAAA,KAAA,CAAA,UAAA,CAAA,CAAA,EAAA,KAAA,EAAA,EAAA,GAAA,IAAA,IAQkD,CARlD,GAAA,KAAA"}
1
+ {"version":3,"file":"mixins.d.mts","names":[],"sources":["../../src/utils/mixins.ts"],"sourcesContent":[],"mappings":";KAKY,8CAA8C;KAI9C,4DAA4D,mBAAmB,sBAAsB;AAJrG,KAQA,mBAR8C,CAAA,CAAC,CAAA,GAAA,CAQrB,CARqB,SAAA,GAAA,GAAA,CAAA,CAAA,EAQD,CARC,EAAA,GAAA,IAAA,GAAA,KAAA,CAAA,UAAA,CAAA,CAAA,EAAA,KAAA,EAAA,EAAA,GAAA,IAAA,IAQkD,CARlD,GAAA,KAAA"}
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  ".": "./build/index.mjs",
5
5
  "./package.json": "./package.json"
6
6
  },
7
- "version": "0.6.2-pr-2610-20260108113505",
7
+ "version": "0.6.2-pr-2610-20260108163020",
8
8
  "files": [
9
9
  "build"
10
10
  ],