{"version":3,"file":"knownJwk.mjs","names":[],"sources":["../../../../src/modules/kms/jwk/knownJwk.ts"],"sourcesContent":["import { z } from 'zod'\nimport { zParseWithErrorHandling } from '../../../utils/zod'\nimport { KeyManagementError } from '../error/KeyManagementError'\nimport type {\n  KmsCreateKeyType,\n  KmsCreateKeyTypeEc,\n  KmsCreateKeyTypeOct,\n  KmsCreateKeyTypeOkp,\n  KmsCreateKeyTypeRsa,\n} from '../options'\nimport {\n  type KmsJwkPrivateEc,\n  type KmsJwkPublicEc,\n  zKmsJwkPrivateEc,\n  zKmsJwkPrivateToPublicEc,\n  zKmsJwkPublicEc,\n} from './kty/ec/ecJwk'\nimport {\n  type KmsJwkPrivateOct,\n  type KmsJwkPublicOct,\n  zKmsJwkPrivateOct,\n  zKmsJwkPrivateToPublicOct,\n  zKmsJwkPublicOct,\n} from './kty/oct/octJwk'\nimport {\n  type KmsJwkPrivateOkp,\n  type KmsJwkPublicOkp,\n  zKmsJwkPrivateOkp,\n  zKmsJwkPrivateToPublicOkp,\n  zKmsJwkPublicOkp,\n} from './kty/okp/okpJwk'\nimport {\n  type KmsJwkPrivateRsa,\n  type KmsJwkPublicRsa,\n  zKmsJwkPrivateRsa,\n  zKmsJwkPrivateToPublicRsa,\n  zKmsJwkPublicRsa,\n} from './kty/rsa/rsaJwk'\n\nexport const zKmsJwkPublicAsymmetric = z.discriminatedUnion('kty', [\n  zKmsJwkPublicEc,\n  zKmsJwkPublicRsa,\n  zKmsJwkPublicOkp,\n])\nexport type KmsJwkPublicAsymmetric = z.output<typeof zKmsJwkPublicAsymmetric>\n\nexport function isJwkAsymmetric(\n  jwk: KmsJwkPublic | KmsJwkPrivate\n): jwk is KmsJwkPrivateAsymmetric | KmsJwkPublicAsymmetric {\n  return jwk.kty !== 'oct'\n}\n\nexport function assertJwkAsymmetric(\n  jwk: KmsJwkPublic | KmsJwkPrivate,\n  keyId?: string\n): asserts jwk is KmsJwkPublicAsymmetric | KmsJwkPrivateAsymmetric {\n  if (!isJwkAsymmetric(jwk)) {\n    if (keyId) {\n      throw new KeyManagementError(`Expected jwk with keyId ${keyId} to be an asymmetric jwk, but found kty 'oct'`)\n    }\n    throw new KeyManagementError(\"Expected jwk to be an asymmetric jwk, but found kty 'oct'\")\n  }\n}\n\nexport const zKmsJwkPublicCrv = z.discriminatedUnion('kty', [zKmsJwkPublicEc, zKmsJwkPublicOkp])\nexport type KmsJwkPublicCrv = z.output<typeof zKmsJwkPublicCrv>\n\nexport const zKmsJwkPublic = z.discriminatedUnion('kty', [\n  zKmsJwkPublicEc,\n  zKmsJwkPublicRsa,\n  zKmsJwkPublicOct,\n  zKmsJwkPublicOkp,\n])\nexport type KmsJwkPublic = z.output<typeof zKmsJwkPublic>\n\nconst zKmsJwkPrivateToPublic = z\n  .discriminatedUnion('kty', [\n    zKmsJwkPrivateToPublicEc,\n    zKmsJwkPrivateToPublicRsa,\n    zKmsJwkPrivateToPublicOct,\n    zKmsJwkPrivateToPublicOkp,\n  ])\n  // Mdoc library does not work well with undefined values. It should not be needed\n  // but for now it's the easiest approach\n  .transform(\n    (jwk): KmsJwkPublic =>\n      Object.fromEntries(Object.entries(jwk).filter(([, value]) => value !== undefined)) as KmsJwkPublic\n  )\n\nexport const zKmsJwkPrivateCrv = z.discriminatedUnion('kty', [zKmsJwkPrivateEc, zKmsJwkPrivateOkp])\nexport type KmsJwkPrivateCrv = z.output<typeof zKmsJwkPrivateCrv>\n\nexport const zKmsJwkPrivate = z.discriminatedUnion('kty', [\n  zKmsJwkPrivateEc,\n  zKmsJwkPrivateRsa,\n  zKmsJwkPrivateOct,\n  zKmsJwkPrivateOkp,\n])\nexport type KmsJwkPrivate = z.output<typeof zKmsJwkPrivate>\n\nexport const zKmsJwkPrivateAsymmetric = z.discriminatedUnion('kty', [\n  zKmsJwkPrivateEc,\n  zKmsJwkPrivateRsa,\n  zKmsJwkPrivateOkp,\n])\nexport type KmsJwkPrivateAsymmetric = z.output<typeof zKmsJwkPrivateAsymmetric>\n\nexport function publicJwkFromPrivateJwk(privateJwk: KmsJwkPrivate | KmsJwkPublic): KmsJwkPublic {\n  // This will remove any private properties\n  return zParseWithErrorHandling(zKmsJwkPrivateToPublic, privateJwk)\n}\n\nexport type KmsJwkPrivateFromKmsJwkPublic<Type extends KmsCreateKeyType> = Type extends KmsCreateKeyTypeRsa\n  ? KmsJwkPrivateRsa\n  : Type extends KmsCreateKeyTypeOct\n    ? KmsJwkPrivateOct\n    : Type extends KmsCreateKeyTypeOkp\n      ? KmsJwkPrivateOkp & { crv: Type['crv'] }\n      : Type extends KmsCreateKeyTypeEc\n        ? KmsJwkPrivateEc & { crv: Type['crv'] }\n        : KmsJwkPrivate\n\nexport type KmsJwkPublicFromKmsJwkPrivate<Jwk extends KmsJwkPrivate> = Jwk extends KmsJwkPrivateRsa\n  ? KmsJwkPublicRsa\n  : Jwk extends KmsJwkPrivateOct\n    ? KmsJwkPublicOct\n    : Jwk extends KmsJwkPrivateOkp\n      ? KmsJwkPublicOkp & { crv: Jwk['crv'] }\n      : Jwk extends KmsJwkPrivateEc\n        ? KmsJwkPublicEc & { crv: Jwk['crv'] }\n        : KmsJwkPublic\n\nexport type KmsJwkPublicFromCreateType<Type extends KmsCreateKeyType> = Type extends KmsCreateKeyTypeRsa\n  ? KmsJwkPublicRsa\n  : Type extends KmsCreateKeyTypeOct\n    ? KmsJwkPublicOct\n    : Type extends KmsCreateKeyTypeOkp\n      ? KmsJwkPublicOkp & { crv: Type['crv'] }\n      : Type extends KmsCreateKeyTypeEc\n        ? KmsJwkPublicEc & { crv: Type['crv'] }\n        : KmsJwkPublic\n"],"mappings":";;;;;;;;;;;AAuCA,MAAa,0BAA0B,EAAE,mBAAmB,OAAO;CACjE;CACA;CACA;CACD,CAAC;AAGF,SAAgB,gBACd,KACyD;AACzD,QAAO,IAAI,QAAQ;;AAGrB,SAAgB,oBACd,KACA,OACiE;AACjE,KAAI,CAAC,gBAAgB,IAAI,EAAE;AACzB,MAAI,MACF,OAAM,IAAI,mBAAmB,2BAA2B,MAAM,+CAA+C;AAE/G,QAAM,IAAI,mBAAmB,4DAA4D;;;AAI7F,MAAa,mBAAmB,EAAE,mBAAmB,OAAO,CAAC,iBAAiB,iBAAiB,CAAC;AAGhG,MAAa,gBAAgB,EAAE,mBAAmB,OAAO;CACvD;CACA;CACA;CACA;CACD,CAAC;AAGF,MAAM,yBAAyB,EAC5B,mBAAmB,OAAO;CACzB;CACA;CACA;CACA;CACD,CAAC,CAGD,WACE,QACC,OAAO,YAAY,OAAO,QAAQ,IAAI,CAAC,QAAQ,GAAG,WAAW,UAAU,OAAU,CAAC,CACrF;AAEH,MAAa,oBAAoB,EAAE,mBAAmB,OAAO,CAAC,kBAAkB,kBAAkB,CAAC;AAGnG,MAAa,iBAAiB,EAAE,mBAAmB,OAAO;CACxD;CACA;CACA;CACA;CACD,CAAC;AAGF,MAAa,2BAA2B,EAAE,mBAAmB,OAAO;CAClE;CACA;CACA;CACD,CAAC;AAGF,SAAgB,wBAAwB,YAAwD;AAE9F,QAAO,wBAAwB,wBAAwB,WAAW"}