{"version":3,"sources":["../src/index.ts","../src/jwk-did-resolver.ts","../src/types/jwk-resolver-types.ts"],"sourcesContent":["/**\n * Provides `did:jwk` {@link @veramo/did-provider-jwk#JwkDIDProvider | identifier provider }\n * for the {@link @veramo/did-manager#DIDManager}\n *\n * @packageDocumentation\n */\nexport { getDidJwkResolver } from './jwk-did-resolver'\nexport * from './types/jwk-resolver-types'\n","import { IParsedDID, parseDid } from '@sphereon/ssi-types'\nimport base64url from 'base64url'\nimport { DIDResolutionOptions, DIDResolutionResult, DIDResolver, JsonWebKey } from 'did-resolver'\nimport { ContextType, ENC_KEY_ALGS, KeyUse, SIG_KEY_ALGS, VerificationType, VocabType } from './types/jwk-resolver-types'\n\nexport const resolveDidJwk: DIDResolver = async (didUrl: string, options?: DIDResolutionOptions): Promise<DIDResolutionResult> => {\n  return resolve(didUrl, options)\n}\n\nconst resolve = async (didUrl: string, _options?: DIDResolutionOptions): Promise<DIDResolutionResult> => {\n  let parsedDid: IParsedDID\n  try {\n    parsedDid = parseDid(didUrl)\n  } catch (error: unknown) {\n    // Error from did resolution spec\n    return errorResponseFrom('invalidDid')\n  }\n\n  if (parsedDid.method !== 'jwk') {\n    // Error from did resolution spec\n    return errorResponseFrom('unsupportedDidMethod')\n  }\n\n  let jwk: JsonWebKey\n  try {\n    jwk = JSON.parse(base64url.decode(parsedDid.id, 'UTF-8'))\n  } catch (error: unknown) {\n    // Error from did resolution spec\n    return errorResponseFrom('invalidDid')\n  }\n\n  // We need this since DIDResolutionResult does not allow for an object in the array\n  const context = [ContextType.DidDocument, { '@vocab': VocabType.Jose }] as never\n\n  // We add the alg check to ensure max compatibility with implementations that do not export the use property\n  const enc = (jwk.use && jwk.use === KeyUse.Encryption) || (jwk.alg && ENC_KEY_ALGS.includes(jwk.alg))\n  const sig = (jwk.use && jwk.use === KeyUse.Signature) || (jwk.alg && SIG_KEY_ALGS.includes(jwk.alg))\n\n  const didResolution: DIDResolutionResult = {\n    didResolutionMetadata: {\n      contentType: 'application/did+ld+json',\n      pattern: '^(did:jwk:.+)$',\n      did: {\n        didString: parsedDid.did,\n        methodSpecificId: parsedDid.id,\n        method: 'jwk',\n      },\n    },\n\n    didDocument: {\n      '@context': context,\n      id: parsedDid.did,\n      verificationMethod: [\n        {\n          id: `${parsedDid.did}#0`,\n          type: VerificationType.JsonWebKey2020,\n          controller: parsedDid.did,\n          publicKeyJwk: jwk,\n        },\n      ],\n      ...(sig && { assertionMethod: [`${parsedDid.did}#0`] }),\n      ...(sig && { authentication: [`${parsedDid.did}#0`] }),\n      ...(sig && { capabilityInvocation: [`${parsedDid.did}#0`] }),\n      ...(sig && { capabilityDelegation: [`${parsedDid.did}#0`] }),\n      ...(enc && { keyAgreement: [`${parsedDid.did}#0`] }),\n    },\n    didDocumentMetadata: {},\n  }\n\n  return didResolution\n}\n\nconst errorResponseFrom = async (error: string): Promise<DIDResolutionResult> => {\n  return {\n    didResolutionMetadata: {\n      error,\n    },\n    didDocument: null,\n    didDocumentMetadata: {},\n  }\n}\n\nexport function getDidJwkResolver() {\n  return { jwk: resolveDidJwk }\n}\n","export enum Key {\n  Ed25519 = 'Ed25519',\n  Secp256k1 = 'Secp256k1',\n  Secp256r1 = 'Secp256r1',\n}\n\nexport enum KeyUse {\n  Encryption = 'enc',\n  Signature = 'sig',\n}\n\nexport enum KeyType {\n  EC = 'EC',\n  OKP = 'OKP',\n}\n\nexport enum VerificationType {\n  JsonWebKey2020 = 'JsonWebKey2020',\n}\nexport const SIG_KEY_ALGS = ['ES256', 'ES384', 'ES512', 'EdDSA', 'ES256K', 'Ed25519', 'Secp256k1', 'Secp256r1', 'Bls12381G1', 'Bls12381G2']\nexport const ENC_KEY_ALGS = ['X25519', 'ECDH_ES_A256KW', 'RSA_OAEP_256']\n\n// https://datatracker.ietf.org/doc/html/rfc8812#section-3\n// https://datatracker.ietf.org/doc/html/rfc8812#section-4\nexport enum VocabType {\n  Jose = 'https://www.iana.org/assignments/jose#',\n}\n\nexport enum ContextType {\n  DidDocument = 'https://www.w3.org/ns/did/v1',\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;ACAA,uBAAqC;AACrC,uBAAsB;;;ACDf,IAAKA,MAAAA,0BAAAA,MAAAA;;;;SAAAA;;AAML,IAAKC,SAAAA,0BAAAA,SAAAA;;;SAAAA;;AAKL,IAAKC,UAAAA,0BAAAA,UAAAA;;;SAAAA;;AAKL,IAAKC,mBAAAA,0BAAAA,mBAAAA;;SAAAA;;AAGL,IAAMC,eAAe;EAAC;EAAS;EAAS;EAAS;EAAS;EAAU;EAAW;EAAa;EAAa;EAAc;;AACvH,IAAMC,eAAe;EAAC;EAAU;EAAkB;;AAIlD,IAAKC,YAAAA,0BAAAA,YAAAA;;SAAAA;;AAIL,IAAKC,cAAAA,0BAAAA,cAAAA;;SAAAA;;;;ADvBL,IAAMC,gBAA6B,8BAAOC,QAAgBC,YAAAA;AAC/D,SAAOC,QAAQF,QAAQC,OAAAA;AACzB,GAF0C;AAI1C,IAAMC,UAAU,8BAAOF,QAAgBG,aAAAA;AACrC,MAAIC;AACJ,MAAI;AACFA,oBAAYC,2BAASL,MAAAA;EACvB,SAASM,OAAgB;AAEvB,WAAOC,kBAAkB,YAAA;EAC3B;AAEA,MAAIH,UAAUI,WAAW,OAAO;AAE9B,WAAOD,kBAAkB,sBAAA;EAC3B;AAEA,MAAIE;AACJ,MAAI;AACFA,UAAMC,KAAKC,MAAMC,iBAAAA,QAAUC,OAAOT,UAAUU,IAAI,OAAA,CAAA;EAClD,SAASR,OAAgB;AAEvB,WAAOC,kBAAkB,YAAA;EAC3B;AAGA,QAAMQ,UAAU;IAACC,YAAYC;IAAa;MAAE,UAAUC,UAAUC;IAAK;;AAGrE,QAAMC,MAAOX,IAAIY,OAAOZ,IAAIY,QAAQC,OAAOC,cAAgBd,IAAIe,OAAOC,aAAaC,SAASjB,IAAIe,GAAG;AACnG,QAAMG,MAAOlB,IAAIY,OAAOZ,IAAIY,QAAQC,OAAOM,aAAenB,IAAIe,OAAOK,aAAaH,SAASjB,IAAIe,GAAG;AAElG,QAAMM,gBAAqC;IACzCC,uBAAuB;MACrBC,aAAa;MACbC,SAAS;MACTC,KAAK;QACHC,WAAW/B,UAAU8B;QACrBE,kBAAkBhC,UAAUU;QAC5BN,QAAQ;MACV;IACF;IAEA6B,aAAa;MACX,YAAYtB;MACZD,IAAIV,UAAU8B;MACdI,oBAAoB;QAClB;UACExB,IAAI,GAAGV,UAAU8B,GAAG;UACpBK,MAAMC,iBAAiBC;UACvBC,YAAYtC,UAAU8B;UACtBS,cAAclC;QAChB;;MAEF,GAAIkB,OAAO;QAAEiB,iBAAiB;UAAC,GAAGxC,UAAU8B,GAAG;;MAAM;MACrD,GAAIP,OAAO;QAAEkB,gBAAgB;UAAC,GAAGzC,UAAU8B,GAAG;;MAAM;MACpD,GAAIP,OAAO;QAAEmB,sBAAsB;UAAC,GAAG1C,UAAU8B,GAAG;;MAAM;MAC1D,GAAIP,OAAO;QAAEoB,sBAAsB;UAAC,GAAG3C,UAAU8B,GAAG;;MAAM;MAC1D,GAAId,OAAO;QAAE4B,cAAc;UAAC,GAAG5C,UAAU8B,GAAG;;MAAM;IACpD;IACAe,qBAAqB,CAAC;EACxB;AAEA,SAAOnB;AACT,GA7DgB;AA+DhB,IAAMvB,oBAAoB,8BAAOD,UAAAA;AAC/B,SAAO;IACLyB,uBAAuB;MACrBzB;IACF;IACA+B,aAAa;IACbY,qBAAqB,CAAC;EACxB;AACF,GAR0B;AAUnB,SAASC,oBAAAA;AACd,SAAO;IAAEzC,KAAKV;EAAc;AAC9B;AAFgBmD;","names":["Key","KeyUse","KeyType","VerificationType","SIG_KEY_ALGS","ENC_KEY_ALGS","VocabType","ContextType","resolveDidJwk","didUrl","options","resolve","_options","parsedDid","parseDid","error","errorResponseFrom","method","jwk","JSON","parse","base64url","decode","id","context","ContextType","DidDocument","VocabType","Jose","enc","use","KeyUse","Encryption","alg","ENC_KEY_ALGS","includes","sig","Signature","SIG_KEY_ALGS","didResolution","didResolutionMetadata","contentType","pattern","did","didString","methodSpecificId","didDocument","verificationMethod","type","VerificationType","JsonWebKey2020","controller","publicKeyJwk","assertionMethod","authentication","capabilityInvocation","capabilityDelegation","keyAgreement","didDocumentMetadata","getDidJwkResolver"]}