{"version":3,"sources":["../src/index.ts","../src/logging/index.ts","../src/types/datastore.ts","../src/events/index.ts","../src/utils/object.ts","../src/utils/hasher.ts","../src/utils/vc.ts","../src/utils/did.ts","../src/utils/mdoc.ts","../src/utils/sd-jwt.ts","../src/utils/jose.ts","../src/utils/cose.ts","../src/mapper/credential-constraints.ts","../src/mapper/credential-mapper.ts","../src/mapper/jsonld-language-values.ts"],"sourcesContent":["import { Loggers } from './logging'\n// We call the logger first, making sure that any library (re-)using the logger has the static initialized\nconst logger = Loggers.DEFAULT.get('sphereon:ssi')\nlogger.debug(`Sphereon logger initialized`)\n\nexport * from './types'\nexport * from './logging'\nexport * from './events'\nexport * from './utils'\nexport * from './mapper'\n","import createDebug from 'debug'\n\nimport { EventEmitter } from 'events'\n\nexport enum LogLevel {\n  TRACE = 0,\n  DEBUG,\n  INFO,\n  WARNING,\n  ERROR,\n}\n\nexport enum LoggingEventType {\n  AUDIT = 'audit',\n  ACTIVITY = 'activity',\n  GENERAL = 'general',\n}\n\nexport interface SimpleLogEvent {\n  type: LoggingEventType.GENERAL\n  level: LogLevel\n  correlationId?: string\n  timestamp: Date\n  data: string\n  diagnosticData?: any\n}\n\nexport enum LogMethod {\n  DEBUG_PKG,\n  CONSOLE,\n  EVENT,\n}\n\nexport interface SimpleLogOptions {\n  namespace?: string\n  eventName?: string\n  defaultLogLevel?: LogLevel\n  methods?: LogMethod[]\n}\n\nexport function logOptions(opts?: SimpleLogOptions): Required<SimpleLogOptions> {\n  return {\n    namespace: opts?.namespace ?? 'sphereon',\n    eventName: opts?.eventName ?? 'sphereon:default',\n    defaultLogLevel: opts?.defaultLogLevel ?? LogLevel.INFO,\n    methods: opts?.methods ?? [LogMethod.DEBUG_PKG, LogMethod.EVENT],\n  }\n}\n\nexport class Loggers {\n  private static readonly DEFAULT_KEY = '__DEFAULT__'\n  public static readonly DEFAULT: Loggers = new Loggers({\n    defaultLogLevel: LogLevel.INFO,\n    methods: [LogMethod.DEBUG_PKG, LogMethod.EVENT],\n  })\n  private readonly namespaceOptions: Map<string, Required<SimpleLogOptions>> = new Map()\n  private readonly loggers: WeakMap<Required<SimpleLogOptions>, ISimpleLogger<any>> = new WeakMap()\n\n  constructor(defaultOptions?: Omit<SimpleLogOptions, 'namespace'>) {\n    this.defaultOptions(logOptions(defaultOptions))\n  }\n\n  public options(namespace: string, options: Omit<SimpleLogOptions, 'namespace'>): this {\n    this.namespaceOptions.set(namespace, logOptions({ ...options, namespace }))\n    return this\n  }\n\n  public defaultOptions(options: Omit<SimpleLogOptions, 'namespace'>): this {\n    this.options(Loggers.DEFAULT_KEY, options)\n    return this\n  }\n\n  register<T>(namespace: string, logger: ISimpleLogger<T>): ISimpleLogger<T> {\n    return this.get(namespace, logger)\n  }\n\n  get<T>(namespace: string, registerLogger?: ISimpleLogger<T>): ISimpleLogger<T> {\n    const options = this.namespaceOptions.get(namespace) ?? registerLogger?.options ?? this.namespaceOptions.get(Loggers.DEFAULT_KEY)\n    if (!options) {\n      throw Error(`No logging options found for namespace ${namespace}`)\n    }\n    this.namespaceOptions.set(namespace, options)\n\n    let logger = this.loggers.get(options)\n    if (!logger) {\n      logger = registerLogger ?? new SimpleLogger(options)\n      this.loggers.set(options, logger)\n    }\n    return logger\n  }\n}\n\nexport type ISimpleLogger<LogType> = {\n  options: Required<SimpleLogOptions>\n  log(value: LogType, ...args: any[]): void\n  info(value: LogType, ...args: any[]): void\n  debug(value: LogType, ...args: any[]): void\n  trace(value: LogType, ...args: any[]): void\n  warning(value: LogType, ...args: any[]): void\n  error(value: LogType, ...args: any[]): void\n  logl(level: LogLevel, value: LogType, ...argsW: any[]): void\n}\n\nexport class SimpleLogger implements ISimpleLogger<any> {\n  private _eventEmitter = new EventEmitter({ captureRejections: true })\n  private readonly _options: Required<SimpleLogOptions>\n\n  constructor(opts?: SimpleLogOptions) {\n    this._options = logOptions(opts)\n  }\n\n  get eventEmitter(): EventEmitter {\n    return this._eventEmitter\n  }\n\n  get options(): Required<SimpleLogOptions> {\n    return this._options\n  }\n\n  trace(value: any, ...args: any[]) {\n    this.logImpl(LogLevel.TRACE, value, ...args)\n  }\n\n  debug(value: any, ...args: any[]) {\n    this.logImpl(LogLevel.DEBUG, value, ...args)\n  }\n\n  info(value: any, ...args: any[]) {\n    this.logImpl(LogLevel.INFO, value, ...args)\n  }\n\n  warning(value: any, ...args: any[]) {\n    this.logImpl(LogLevel.WARNING, value, ...args)\n  }\n\n  error(value: any, ...args: any[]) {\n    this.logImpl(LogLevel.ERROR, value, ...args)\n  }\n\n  logl(level: LogLevel, value: any, ...args: any[]) {\n    this.logImpl(level, value, ...args)\n  }\n\n  private logImpl(level: LogLevel, value: any, ...args: any[]) {\n    const date = new Date().toISOString()\n    const filteredArgs = args?.filter((v) => v!!) ?? []\n    const arg = filteredArgs.length === 0 || filteredArgs[0] == undefined ? undefined : filteredArgs\n\n    function toLogValue(options: SimpleLogOptions): any {\n      if (typeof value === 'string') {\n        return `${date}-(${options.namespace}) ${value}`\n      } else if (typeof value === 'object') {\n        value['namespace'] = options.namespace\n        value['time'] = date\n      }\n      return value\n    }\n\n    const logValue = toLogValue(this.options)\n    const logArgs = [logValue]\n    if (arg) {\n      logArgs.push(args)\n    }\n    // FIXME: !!!!!!!!!!!!!!!!!!!!!!\n    let debugPkgEnabled = false && this.options.methods.includes(LogMethod.DEBUG_PKG)\n    if (debugPkgEnabled) {\n      const debugPkgDebugger = createDebug.default(this._options.namespace)\n      // It was enabled at the options level in code, but could be disabled at runtime using env vars\n      debugPkgEnabled = debugPkgDebugger.enabled\n      if (debugPkgEnabled) {\n        if (arg) {\n          debugPkgDebugger(`${date}- ${value},`, ...arg)\n        } else {\n          debugPkgDebugger(`${date}- ${value}`)\n        }\n      }\n    }\n\n    // We do not perform console.logs in case the debug package is enabled in code and used at runtime\n    if (this.options.methods.includes(LogMethod.CONSOLE) && !debugPkgEnabled) {\n      const [value, args] = logArgs\n      let logMethod = console.info\n      switch (level) {\n        case LogLevel.TRACE:\n          logMethod = console.trace\n          break\n        case LogLevel.DEBUG:\n          logMethod = console.debug\n          break\n        case LogLevel.INFO:\n          logMethod = console.info\n          break\n        case LogLevel.WARNING:\n          logMethod = console.warn\n          break\n        case LogLevel.ERROR:\n          logMethod = console.error\n          break\n      }\n      if (args) {\n        logMethod(value + ',', ...args)\n      } else {\n        logMethod(value)\n      }\n    }\n\n    if (this.options.methods.includes(LogMethod.EVENT)) {\n      this._eventEmitter.emit(this.options.eventName, {\n        data: value.toString(),\n        timestamp: new Date(date),\n        level,\n        type: LoggingEventType.GENERAL,\n        diagnosticData: logArgs,\n      } satisfies SimpleLogEvent)\n    }\n  }\n\n  log(value: any, ...args: any[]) {\n    this.logImpl(this.options.defaultLogLevel, value, ...args)\n  }\n}\n\nexport class SimpleRecordLogger extends SimpleLogger implements ISimpleLogger<Record<string, any>> {\n  constructor(opts?: SimpleLogOptions) {\n    super(opts)\n  }\n}\n","export enum CredentialRole {\n  ISSUER = 'ISSUER',\n  VERIFIER = 'VERIFIER',\n  HOLDER = 'HOLDER',\n  FEDERATION_TRUST_ANCHOR = 'FEDERATION_TRUST_ANCHOR',\n}\n","import { EventEmitter } from 'events'\nimport { Loggers, LogLevel, LogMethod } from '../logging'\n\nexport enum System {\n  GENERAL = 'general',\n  KMS = 'kms',\n  IDENTITY = 'identity',\n  OID4VCI = 'oid4vci',\n  OID4VP = 'oid4vp',\n  SIOPv2 = 'siopv2',\n  PE = 'PE',\n  CREDENTIALS = 'credentials',\n  WEB3 = 'web3',\n  PROFILE = 'profile',\n  CONTACT = 'contact',\n}\n\nexport enum SubSystem {\n  KEY = 'key',\n  DID_PROVIDER = 'did_provider',\n  DID_RESOLVER = 'did_resolver',\n  OID4VP_OP = 'oid4vp_op',\n  OID4VCI_CLIENT = 'oid4vci_client',\n  SIOPv2_OP = 'siopv2_op',\n  CONTACT_MANAGER = 'contact_manager',\n  VC_ISSUER = 'vc_issuer',\n  VC_VERIFIER = 'vc_verifier',\n  VC_PERSISTENCE = 'vc_persistence',\n  TRANSPORT = 'transport',\n  PROFILE = 'profile',\n  API = 'api',\n}\n\nexport enum ActionType {\n  CREATE = 'create',\n  READ = 'read',\n  UPDATE = 'update',\n  DELETE = 'delete',\n  EXECUTE = 'execute',\n}\n\nexport enum DefaultActionSubType {\n  KEY_GENERATION = 'Key generation',\n  KEY_IMPORT = 'Key import',\n  KEY_PERSISTENCE = 'Key persistence',\n  KEY_REMOVAL = 'Key removal',\n  DID_CREATION = 'DID creation',\n  DID_RESOLUTION = 'DID resolution',\n  DID_SERVICE_UPDATE = 'DID service update',\n  VC_ISSUE = 'VC issue',\n  VC_VERIFY = 'VC verify',\n  VC_SHARE = 'VC share',\n  VC_DELETE = 'VC delete',\n  VC_ISSUE_DECLINE = 'VC issue decline',\n  VC_SHARE_DECLINE = 'VC share decline',\n}\n\nexport type ActionSubType = DefaultActionSubType | string\n\nexport enum InitiatorType {\n  USER = 'user',\n  SYSTEM = 'system',\n  EXTERNAL = 'external',\n}\n\nexport enum SystemCorrelationIdType {\n  DID = 'did',\n  URL = 'url',\n  EMAIL = 'email',\n  HOSTNAME = 'hostname',\n  PHONE = 'phone',\n  USER = 'user',\n}\n\nexport type EventData = {\n  system: string\n  subSystemType: string\n}\n\nexport interface BasicEvent<SourceType, PayloadType extends EventData> {\n  id: string\n  correlationId?: string\n  eventName: string\n  initiator?: string\n  initiatorType: InitiatorType\n  system: System\n  subsystem: SubSystem\n  data: PayloadType\n}\n\ntype EmitterInstance = {\n  enabled: boolean\n  emitter: EventEmitter\n}\n\nexport class EventManager {\n  private static readonly INSTANCE = new EventManager()\n  private _emitters = new Map<string, EmitterInstance>()\n\n  private constructor() {}\n\n  public static instance(): EventManager {\n    return EventManager.INSTANCE\n  }\n\n  register(name: string, emitter: EventEmitter, opts?: { disabled: boolean }): EventEmitter {\n    this._emitters.set(name, { emitter, enabled: opts?.disabled !== true })\n    return emitter\n  }\n\n  get(name: string, opts?: { onlyEnabled?: boolean }): EventEmitter {\n    const { emitter, enabled } = this._emitters.get(name) ?? {}\n    if (!emitter) {\n      throw Error(`No emitter registered with name ${name}`)\n    } else if (opts?.onlyEnabled && !enabled) {\n      throw Error(`Emitter with name ${name} is not enabled`)\n    }\n    return emitter\n  }\n\n  getOrCreate(name: string, opts?: { onlyEnabled?: boolean }): EventEmitter {\n    if (this.has(name)) {\n      return this.get(name, opts)\n    }\n    return this.register(name, new BasicEventEmitter())\n  }\n\n  has(name: string): boolean {\n    return this._emitters.has(name)\n  }\n\n  emitters(filter?: { eventName?: string | symbol; onlyEnabled?: boolean }): Array<EventEmitter> {\n    const all = Array.from(new Set(this._emitters.values()))\n    return this.emittersImpl(all, filter).map((e) => e.emitter)\n  }\n\n  hasEventName(eventName: string | symbol) {\n    return this.eventNames().includes(eventName)\n  }\n\n  eventNames(): Array<string | symbol> {\n    return Array.from(new Set(this.emitters().flatMap((emitter) => emitter.eventNames())))\n  }\n\n  emitBasic(event: BasicEvent<any, any>, ...args: any[]) {\n    return this.emit(event.eventName, event, args)\n  }\n\n  emit(eventName: string | symbol, event: Omit<BasicEvent<any, any>, 'eventName'> | any, ...args: any[]): void {\n    if ('id' in event && 'system' in event && !event.eventName) {\n      event.eventName = eventName\n    }\n    Loggers.DEFAULT.options('sphereon:events', {\n      methods: [LogMethod.CONSOLE],\n      defaultLogLevel: LogLevel.INFO,\n    })\n      .get('sphereon:events')\n      .log(`Emitting '${eventName.toString()}' event`, event)\n    const emitters = this.emitters({ eventName })\n    emitters.flatMap((emitter) => emitter.emit(eventName, event, args))\n  }\n\n  listenerCount(eventName: string | symbol) {\n    const emitters = this.emitters({ eventName })\n    return emitters.map((emitter) => emitter.listenerCount(eventName)).reduce((previous, current) => current + previous)\n  }\n\n  listeners(filter: { emitterName?: string; eventName: string; onlyEnabled?: boolean }): Array<Function> {\n    const emitters = filter?.emitterName ? [this.get(filter.emitterName, filter)] : this.emitters(filter)\n    return Array.from(\n      new Set(\n        this.emittersImpl(\n          emitters.map((emitter) => {\n            return { emitter, enabled: true }\n          }),\n          filter,\n        ).flatMap((emitter) => emitter.emitter.listeners(filter.eventName)),\n      ),\n    )\n  }\n\n  private emittersImpl(\n    all: { emitter: EventEmitter; enabled: boolean }[],\n    filter?: {\n      eventName?: string | symbol\n      onlyEnabled?: boolean\n    },\n  ): Array<EmitterInstance> {\n    const { eventName } = filter ?? {}\n    if (!eventName) {\n      return all\n    }\n    const filtered = all.filter((emitter) => emitter.emitter.eventNames().includes(eventName) && (emitter.enabled || filter?.onlyEnabled !== true))\n    return Array.from(new Set(filtered))\n  }\n}\n\nexport class BasicEventEmitter extends EventEmitter {\n  addListener(eventName: string | symbol, listener: (event: BasicEvent<any, any>, ...args: any[]) => void): this {\n    return super.addListener(eventName, listener)\n  }\n\n  once(eventName: string | symbol, listener: (event: BasicEvent<any, any>, ...args: any[]) => void): this {\n    return super.once(eventName, listener)\n  }\n\n  emit(eventName: string, event: BasicEvent<any, any>, ...args: any[]): boolean {\n    return super.emit(eventName, ...args)\n  }\n}\n","const BASE64_REGEX = /^[-A-Za-z0-9+_/]*={0,3}$/g\n\nexport class ObjectUtils {\n  public static asArray<T>(value: T): T[] {\n    return Array.isArray(value) ? value : [value]\n  }\n\n  public static isObject(value: unknown): value is object {\n    return typeof value === 'object' || Object.prototype.toString.call(value) === '[object Object]'\n  }\n\n  public static isUrlAbsolute(url: string) {\n    // regex to check for absolute IRI (starting scheme and ':') or blank node IRI\n    const isAbsoluteRegex = /^([A-Za-z][A-Za-z0-9+-.]*|_):[^\\s]*$/\n    ObjectUtils.isString(url) && isAbsoluteRegex.test(url)\n  }\n\n  public static isString(value: unknown): value is string {\n    return typeof value === 'string' || Object.prototype.toString.call(value) === '[object String]'\n  }\n\n  public static isBase64(value: unknown): boolean {\n    if (!ObjectUtils.isString(value)) {\n      return false\n    }\n    return value.match(BASE64_REGEX) !== null\n  }\n}\n","import { sha256, sha384, sha512 } from '@noble/hashes/sha2'\n\n// @ts-ignore\nimport * as u8a from 'uint8arrays'\nconst { fromString } = u8a\nimport type { HasherSync } from '../types'\n\nconst supportedAlgorithms = ['sha256', 'sha384', 'sha512'] as const\ntype SupportedAlgorithms = (typeof supportedAlgorithms)[number]\n\nexport const shaHasher: HasherSync = (data, algorithm) => {\n  const sanitizedAlgorithm = algorithm.toLowerCase().replace(/[-_]/g, '')\n  if (!supportedAlgorithms.includes(sanitizedAlgorithm as SupportedAlgorithms)) {\n    throw new Error(`Unsupported hashing algorithm ${algorithm}`)\n  }\n  const hasher = sanitizedAlgorithm === 'sha384' ? sha384 : sanitizedAlgorithm === 'sha512' ? sha512 : sha256\n  return hasher(typeof data === 'string' ? fromString(data) : new Uint8Array(data))\n}\n\nexport const defaultHasher: HasherSync = shaHasher\n","import type {\n  ICredential,\n  IVerifiableCredential,\n  WrappedVerifiableCredential,\n  WrappedVerifiablePresentation,\n  WrappedW3CVerifiableCredential,\n  WrappedW3CVerifiablePresentation,\n} from '../types'\nimport type { CredentialPayload, VerifiableCredential } from '@veramo/core'\n\nexport function isWrappedW3CVerifiableCredential(vc: WrappedVerifiableCredential): vc is WrappedW3CVerifiableCredential {\n  return vc.format === 'jwt_vc' || vc.format === 'ldp_vc'\n}\n\nexport function isWrappedW3CVerifiablePresentation(vp: WrappedVerifiablePresentation): vp is WrappedW3CVerifiablePresentation {\n  return vp.format === 'jwt_vp' || vp.format === 'ldp_vp'\n}\n\nexport enum StatusListType {\n  StatusList2021 = 'StatusList2021',\n  OAuthStatusList = 'OAuthStatusList',\n  BitstringStatusList = 'BitstringStatusList',\n}\n\nfunction isVcdmCredential(\n  credential: CredentialPayload | IVerifiableCredential | ICredential | VerifiableCredential | unknown,\n  vcdmType: string,\n): boolean {\n  if (!credential || typeof credential !== 'object') {\n    return false\n  } else if (!('@context' in credential && Array.isArray(credential['@context']))) {\n    return false\n  }\n  return credential['@context'].includes(vcdmType)\n}\nexport function isVcdm1Credential(credential: CredentialPayload | IVerifiableCredential | ICredential | VerifiableCredential | unknown): boolean {\n  return isVcdmCredential(credential, VCDM_CREDENTIAL_CONTEXT_V1)\n}\n\nexport function isVcdm2Credential(credential: CredentialPayload | IVerifiableCredential | ICredential | VerifiableCredential | unknown): boolean {\n  return isVcdmCredential(credential, VCDM_CREDENTIAL_CONTEXT_V2)\n}\n\nexport function addVcdmContextIfNeeded(context?: string[], defaultValue: string = VCDM_CREDENTIAL_CONTEXT_V2): string[] {\n  const newContext = [...(context ?? [])]\n  const vcdmContext = context?.find((val) => VCDM_CREDENTIAL_CONTEXT_VERSIONS.includes(val))\n  if (!vcdmContext) {\n    newContext.unshift(defaultValue)\n  }\n  return newContext\n}\n\nexport const VCDM_CREDENTIAL_CONTEXT_V1 = 'https://www.w3.org/2018/credentials/v1'\nexport const VCDM_CREDENTIAL_CONTEXT_V2 = 'https://www.w3.org/ns/credentials/v2'\nexport const VCDM_CREDENTIAL_CONTEXT_VERSIONS = [VCDM_CREDENTIAL_CONTEXT_V2, VCDM_CREDENTIAL_CONTEXT_V1]\n","import { IParsedDID } from '../types'\n\nexport enum IProofPurpose {\n  verificationMethod = 'verificationMethod',\n  assertionMethod = 'assertionMethod',\n  authentication = 'authentication',\n  keyAgreement = 'keyAgreement',\n  contractAgreement = 'contactAgreement',\n  capabilityInvocation = 'capabilityInvocation',\n  capabilityDelegation = 'capabilityDelegation',\n}\n\nexport enum IProofType {\n  Ed25519Signature2018 = 'Ed25519Signature2018',\n  Ed25519Signature2020 = 'Ed25519Signature2020',\n  EcdsaSecp256k1Signature2019 = 'EcdsaSecp256k1Signature2019',\n  EcdsaSecp256k1RecoverySignature2020 = 'EcdsaSecp256k1RecoverySignature2020',\n  JsonWebSignature2020 = 'JsonWebSignature2020',\n  RsaSignature2018 = 'RsaSignature2018',\n  GpgSignature2020 = 'GpgSignature2020',\n  JcsEd25519Signature2020 = 'JcsEd25519Signature2020',\n  BbsBlsSignatureProof2020 = 'BbsBlsSignatureProof2020',\n  BbsBlsBoundSignatureProof2020 = 'BbsBlsBoundSignatureProof2020',\n  JwtProof2020 = 'JwtProof2020',\n  SdJwtProof2024 = 'SdJwtProof2024',\n  MdocProof2024 = 'MsoMdocProof2024',\n}\n\nexport const parseDid = (did: string): IParsedDID => {\n  const parsedDid = parse(did)\n  if (parsedDid === null) {\n    throw new Error('invalid did')\n  }\n\n  return parsedDid\n}\n\nconst parse = (didUrl: string): IParsedDID | null => {\n  const PCT_ENCODED = '(?:%[0-9a-fA-F]{2})'\n  const ID_CHAR = `(?:[a-zA-Z0-9._-]|${PCT_ENCODED})`\n  const METHOD = '([a-z0-9]+)'\n  const METHOD_ID = `((?:${ID_CHAR}*:)*(${ID_CHAR}+))`\n  const PARAM_CHAR = '[a-zA-Z0-9_.:%-]'\n  const PARAM = `;${PARAM_CHAR}+=${PARAM_CHAR}*`\n  const PARAMS = `((${PARAM})*)`\n  const PATH = `(/[^#?]*)?`\n  const QUERY = `([?][^#]*)?`\n  const FRAGMENT = `(#.*)?`\n  const DID_MATCHER = new RegExp(`^did:${METHOD}:${METHOD_ID}${PARAMS}${PATH}${QUERY}${FRAGMENT}$`)\n\n  if (didUrl === '' || !didUrl) return null\n  const sections = didUrl.match(DID_MATCHER)\n  if (sections) {\n    const parts: IParsedDID = {\n      did: `did:${sections[1]}:${sections[2]}`,\n      method: sections[1],\n      id: sections[2],\n      didUrl,\n    }\n    if (sections[4]) {\n      const params = sections[4].slice(1).split(';')\n      parts.params = {}\n      for (const p of params) {\n        const kv = p.split('=')\n        parts.params[kv[0]] = kv[1]\n      }\n    }\n    if (sections[6]) parts.path = sections[6]\n    if (sections[7]) parts.query = sections[7].slice(1)\n    if (sections[8]) parts.fragment = sections[8].slice(1)\n    return parts\n  }\n\n  return null\n}\n\n// Copied from did-resolver, so we have types without external dep\n\n// Copyright 2018 Consensys AG\n\n// Licensed under the Apache License, Version 2.0(the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n\n// http://www.apache.org/licenses/LICENSE-2.0\n\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n","import type {\n  DocumentJson,\n  IssuerSignedItemJson,\n  IVerifiableCredential,\n  MdocDecodedPayload,\n  MdocDeviceResponse,\n  MdocDocument,\n  MdocIssuerSigned,\n  MdocOid4vpIssuerSigned,\n  MdocOid4vpMdocVpToken,\n  WrappedMdocCredential,\n  WrappedMdocPresentation,\n  WrappedVerifiableCredential,\n  WrappedVerifiablePresentation,\n} from '../types'\nimport mdocPkg from '@sphereon/kmp-mdoc-core'\nconst { com } = mdocPkg\nimport { IProofPurpose, IProofType } from './did'\n\nexport function isWrappedMdocCredential(vc: WrappedVerifiableCredential): vc is WrappedMdocCredential {\n  return vc.format === 'mso_mdoc'\n}\n\nexport function isWrappedMdocPresentation(vp: WrappedVerifiablePresentation): vp is WrappedMdocPresentation {\n  return vp.format === 'mso_mdoc'\n}\n\nexport function getMdocDecodedPayload(mdoc: MdocDocument): MdocDecodedPayload {\n  const mdocJson = mdoc.toJson()\n  if (!mdocJson.issuerSigned.nameSpaces) {\n    throw Error(`Cannot access Issuer Signed items from the Mdoc`)\n  }\n\n  const issuerSignedJson = mdoc.issuerSigned.toJsonDTO()\n  const namespaces = issuerSignedJson.nameSpaces as unknown as Record<string, IssuerSignedItemJson[]>\n\n  const decodedPayload: MdocDecodedPayload = {}\n  for (const [namespace, items] of Object.entries(namespaces)) {\n    decodedPayload[namespace] = items.reduce(\n      (acc, item) => ({\n        ...acc,\n        [item.key]: item.value.value,\n      }),\n      {},\n    )\n  }\n\n  return decodedPayload\n}\n\n/**\n * Decode an Mdoc from its issuerSigned OID4VP Base64URL (string) to an object containing the disclosures,\n * signed payload, decoded payload\n *\n */\nexport function decodeMdocIssuerSigned(oid4vpIssuerSigned: MdocOid4vpIssuerSigned): MdocDocument {\n  // Issuer signed according to 18013-7 in base64url\n  const issuerSigned: MdocIssuerSigned = com.sphereon.mdoc.data.device.IssuerSignedCbor.Static.cborDecode(\n    com.sphereon.kmp.decodeFrom(oid4vpIssuerSigned, com.sphereon.kmp.Encoding.BASE64URL),\n  )\n  // Create an mdoc from it. // Validations need to be performed by the caller after this!\n  const holderMdoc: MdocDocument = issuerSigned.toDocument()\n  return holderMdoc\n}\n\nexport function encodeMdocIssuerSigned(issuerSigned: MdocIssuerSigned, encoding: 'base64url' = 'base64url') {\n  return com.sphereon.kmp.encodeTo(issuerSigned.cborEncode(), com.sphereon.kmp.Encoding.BASE64URL)\n}\n\n/**\n * Decode an Mdoc from its vp_token OID4VP Base64URL (string) to an object containing the disclosures,\n * signed payload, decoded payload\n *\n */\nexport function decodeMdocDeviceResponse(vpToken: MdocOid4vpMdocVpToken): MdocDeviceResponse {\n  const deviceResponse = com.sphereon.mdoc.data.device.DeviceResponseCbor.Static.cborDecode(\n    com.sphereon.kmp.decodeFrom(vpToken, com.sphereon.kmp.Encoding.BASE64URL),\n  )\n  return deviceResponse\n}\n\n// TODO naive implementation of mapping a mdoc onto a IVerifiableCredential. Needs some fixes and further implementation and needs to be moved out of ssi-types\nexport const mdocDecodedCredentialToUniformCredential = (\n  decoded: MdocDocument,\n  // @ts-ignore\n  opts?: { maxTimeSkewInMS?: number },\n): IVerifiableCredential => {\n  const document = decoded.toJson()\n  const json = document.toJsonDTO<DocumentJson>()\n  const type = 'Personal Identification Data'\n  const MSO = document.MSO\n  if (!MSO || !json.issuerSigned?.nameSpaces) {\n    throw Error(`Cannot access Mobile Security Object or Issuer Signed items from the Mdoc`)\n  }\n  const nameSpaces = json.issuerSigned.nameSpaces as unknown as Record<string, IssuerSignedItemJson[]>\n  if (!('eu.europa.ec.eudi.pid.1' in nameSpaces)) {\n    throw Error(`Only PID supported at present`)\n  }\n  const items = nameSpaces['eu.europa.ec.eudi.pid.1']\n  if (!items || items.length === 0) {\n    throw Error(`No issuer signed items were found`)\n  }\n  type DisclosuresAccumulator = {\n    [key: string]: any\n  }\n\n  const credentialSubject = items.reduce((acc: DisclosuresAccumulator, item: IssuerSignedItemJson) => {\n    if (Array.isArray(item.value)) {\n      acc[item.key] = item.value.map((val) => val.value).join(', ')\n    } else {\n      acc[item.key] = item.value.value\n    }\n    return acc\n  }, {})\n  const validFrom = MSO.validityInfo.validFrom\n  const validUntil = MSO.validityInfo.validUntil\n  const docType = MSO.docType\n  const expirationDate = validUntil\n  let issuanceDateStr = validFrom\n\n  const issuanceDate = issuanceDateStr\n  if (!issuanceDate) {\n    throw Error(`JWT issuance date is required but was not present`)\n  }\n\n  const credential: Omit<IVerifiableCredential, 'issuer' | 'issuanceDate'> = {\n    type: [docType], // Mdoc not a W3C VC, so no VerifiableCredential\n    '@context': [], // Mdoc has no JSON-LD by default. Certainly not the VC DM1 default context for JSON-LD\n    credentialSubject: {\n      type,\n      ...credentialSubject,\n    },\n    issuanceDate,\n    expirationDate,\n    proof: {\n      type: IProofType.MdocProof2024,\n      created: issuanceDate,\n      proofPurpose: IProofPurpose.authentication,\n      verificationMethod: json.issuerSigned.issuerAuth.payload,\n      mso_mdoc: com.sphereon.kmp.encodeTo(decoded.cborEncode(), com.sphereon.kmp.Encoding.BASE64URL),\n    },\n  }\n\n  return credential as IVerifiableCredential\n}\n","import { decodeSdJwt, decodeSdJwtSync, getClaims, getClaimsSync } from '@sd-jwt/decode'\nimport type {\n  AdditionalClaims,\n  CompactSdJwtVc,\n  Hasher,\n  HasherSync,\n  ICredentialSubject,\n  IVerifiableCredential,\n  SdJwtDecodedDisclosure,\n  SdJwtDecodedVerifiableCredential,\n  SdJwtDecodedVerifiableCredentialPayload,\n  SdJwtDisclosure,\n  SdJwtSignedVerifiableCredentialPayload,\n  SdJwtType,\n  SdJwtVcKbJwtHeader,\n  SdJwtVcKbJwtPayload,\n  SingleOrArray,\n} from '../types'\nimport { IProofPurpose, IProofType } from './did'\n\n/**\n * Decode an SD-JWT vc from its compact format (string) to an object containing the disclosures,\n * signed payload, decoded payload and the compact SD-JWT vc.\n *\n * Both the input and output interfaces of this method are defined in `@sphereon/ssi-types`, so\n * this method hides the actual implementation of SD-JWT (which is currently based on @sd-jwt/core)\n */\nexport function decodeSdJwtVc(compactSdJwtVc: CompactSdJwtVc, hasher: HasherSync): SdJwtDecodedVerifiableCredential {\n  const { jwt, disclosures, kbJwt } = decodeSdJwtSync(compactSdJwtVc, hasher)\n\n  const signedPayload = jwt.payload as SdJwtSignedVerifiableCredentialPayload\n  const decodedPayload = getClaimsSync<any>(signedPayload, disclosures, hasher)\n  const compactKeyBindingJwt = kbJwt ? compactSdJwtVc.split('~').pop() : undefined\n  const type: SdJwtType = decodedPayload.vct ? 'dc+sd-jwt' : 'vc+sd-jwt'\n\n  return {\n    compactSdJwtVc,\n    type,\n    decodedPayload: decodedPayload as SdJwtDecodedVerifiableCredentialPayload,\n    disclosures: disclosures.map((d) => {\n      const decoded = d.key ? [d.salt, d.key, d.value] : [d.salt, d.value]\n      if (!d._digest) throw new Error('Implementation error: digest not present in disclosure')\n      return {\n        decoded: decoded as SdJwtDecodedDisclosure,\n        digest: d._digest,\n        encoded: d.encode(),\n      } satisfies SdJwtDisclosure\n    }),\n    signedPayload: signedPayload as SdJwtSignedVerifiableCredentialPayload,\n    ...(compactKeyBindingJwt &&\n      kbJwt && {\n        kbJwt: {\n          header: kbJwt.header as SdJwtVcKbJwtHeader,\n          compact: compactKeyBindingJwt,\n          payload: kbJwt.payload as SdJwtVcKbJwtPayload,\n        },\n      }),\n  }\n}\n\n/**\n * Decode an SD-JWT vc from its compact format (string) to an object containing the disclosures,\n * signed payload, decoded payload and the compact SD-JWT vc.\n *\n * Both the input and output interfaces of this method are defined in `@sphereon/ssi-types`, so\n * this method hides the actual implementation of SD-JWT (which is currently based on @sd-jwt/core)\n */\nexport async function decodeSdJwtVcAsync(compactSdJwtVc: CompactSdJwtVc, hasher: Hasher): Promise<SdJwtDecodedVerifiableCredential> {\n  const { jwt, disclosures, kbJwt } = await decodeSdJwt(compactSdJwtVc, hasher)\n\n  const signedPayload = jwt.payload as SdJwtSignedVerifiableCredentialPayload\n  const decodedPayload = await getClaims<any>(signedPayload, disclosures, hasher)\n  const compactKeyBindingJwt = kbJwt ? compactSdJwtVc.split('~').pop() : undefined\n\n  const type: SdJwtType = decodedPayload.vct ? 'dc+sd-jwt' : 'vc+sd-jwt'\n  return {\n    compactSdJwtVc,\n    type,\n    decodedPayload: decodedPayload as SdJwtDecodedVerifiableCredentialPayload,\n    disclosures: disclosures.map((d) => {\n      const decoded = d.key ? [d.salt, d.key, d.value] : [d.salt, d.value]\n      if (!d._digest) throw new Error('Implementation error: digest not present in disclosure')\n      return {\n        decoded: decoded as SdJwtDecodedDisclosure,\n        digest: d._digest,\n        encoded: d.encode(),\n      } satisfies SdJwtDisclosure\n    }),\n    signedPayload: signedPayload as SdJwtSignedVerifiableCredentialPayload,\n    ...(compactKeyBindingJwt &&\n      kbJwt && {\n        kbJwt: {\n          header: kbJwt.header as SdJwtVcKbJwtHeader,\n          payload: kbJwt.payload as SdJwtVcKbJwtPayload,\n          compact: compactKeyBindingJwt,\n        },\n      }),\n  }\n}\n\nexport const sdJwtDecodedCredentialToUniformCredential = (\n  decoded: SdJwtDecodedVerifiableCredential,\n  opts?: { maxTimeSkewInMS?: number },\n): IVerifiableCredential => {\n  const { decodedPayload } = decoded\n  const { exp, nbf, iss, iat, vct, cnf, status, jti, validUntil, validFrom } = decodedPayload\n  let credentialSubject: SingleOrArray<ICredentialSubject & AdditionalClaims> | undefined = decodedPayload.credentialSubject as\n    | SingleOrArray<ICredentialSubject & AdditionalClaims>\n    | undefined\n\n  let issuer = iss ?? decodedPayload.issuer\n  if (typeof issuer === 'object' && 'id' in issuer && typeof issuer.id === 'string') {\n    issuer = issuer.id as string\n  }\n  const subId = decodedPayload.sub ?? (typeof credentialSubject == 'object' && 'id' in credentialSubject ? credentialSubject.id : undefined)\n\n  const maxSkewInMS = opts?.maxTimeSkewInMS ?? 1500\n\n  const expirationDate = (validUntil as string | undefined) ?? jwtDateToISOString({ jwtClaim: exp, claimName: 'exp' })\n  let issuanceDateStr = (validFrom as string | undefined) ?? jwtDateToISOString({ jwtClaim: iat, claimName: 'iat' })\n\n  let nbfDateAsStr: string | undefined\n  if (nbf) {\n    nbfDateAsStr = jwtDateToISOString({ jwtClaim: nbf, claimName: 'nbf' })\n    if (issuanceDateStr && nbfDateAsStr && issuanceDateStr !== nbfDateAsStr) {\n      const diff = Math.abs(new Date(nbfDateAsStr).getTime() - new Date(issuanceDateStr).getTime())\n      if (!maxSkewInMS || diff > maxSkewInMS) {\n        throw Error(`Inconsistent issuance dates between JWT claim (${nbfDateAsStr}) and VC value (${iss})`)\n      }\n    }\n    issuanceDateStr = nbfDateAsStr\n  }\n  const issuanceDate = issuanceDateStr\n  if (!issuanceDate) {\n    throw Error(`JWT issuance date is required but was not present`)\n  }\n\n  // Filter out the fields we don't want in credentialSubject\n  const excludedFields = new Set(['vct', 'cnf', 'iss', 'iat', 'exp', 'nbf', 'jti', 'sub'])\n  if (!credentialSubject) {\n    credentialSubject = Object.entries(decodedPayload).reduce(\n      (acc, [key, value]) => {\n        if (\n          !excludedFields.has(key) &&\n          value !== undefined &&\n          value !== '' &&\n          !(typeof value === 'object' && value !== null && Object.keys(value).length === 0)\n        ) {\n          acc[key] = value\n        }\n        return acc\n      },\n      {} as Record<string, any>,\n    )\n  }\n  const sdJwtVc = decodedPayload.vct && !decodedPayload.type\n  const credential: Omit<IVerifiableCredential, 'issuer' | 'issuanceDate'> = {\n    ...{ type: sdJwtVc ? [vct] : decodedPayload.type },\n    ...{ '@context': sdJwtVc ? [] : decodedPayload['@context'] },\n    credentialSubject: {\n      ...credentialSubject,\n      id: subId ?? jti,\n    },\n    ...(issuanceDate && (sdJwtVc ? { issuanceDate } : { validFrom: issuanceDateStr })),\n    ...(expirationDate && (sdJwtVc ? { expirationDate } : { validUntil: expirationDate })),\n    issuer: issuer,\n    ...(cnf && { cnf }),\n    ...(status && { status }),\n    proof: {\n      type: IProofType.SdJwtProof2024,\n      created: nbfDateAsStr ?? issuanceDate,\n      proofPurpose: IProofPurpose.authentication,\n      verificationMethod: iss,\n      jwt: decoded.compactSdJwtVc,\n    },\n  }\n\n  return credential as IVerifiableCredential\n}\n\nconst jwtDateToISOString = ({\n  jwtClaim,\n  claimName,\n  isRequired = false,\n}: {\n  jwtClaim?: number\n  claimName: string\n  isRequired?: boolean\n}): string | undefined => {\n  if (jwtClaim) {\n    const claim = parseInt(jwtClaim.toString())\n    // change JWT seconds to millisecond for the date\n    return new Date(claim * (claim < 9999999999 ? 1000 : 1)).toISOString().replace(/\\.000Z/, 'Z')\n  } else if (isRequired) {\n    throw Error(`JWT claim ${claimName} is required but was not present`)\n  }\n  return undefined\n}\n","export enum JwkKeyType {\n  EC = 'EC',\n  RSA = 'RSA',\n  oct = 'oct',\n  OKP = 'OKP',\n}\n\nexport enum JoseSignatureAlgorithm {\n  RS256 = 'RS256',\n  RS384 = 'RS384',\n  RS512 = 'RS512',\n  ES256 = 'ES256',\n  ES256K = 'ES256K',\n  ES384 = 'ES384',\n  ES512 = 'ES512',\n  EdDSA = 'EdDSA',\n  HS256 = 'HS256',\n  HS384 = 'HS384',\n  HS512 = 'HS512',\n  PS256 = 'PS256',\n  PS384 = 'PS384',\n  PS512 = 'PS512',\n  none = 'none',\n}\n\nexport enum JoseKeyOperation {\n  SIGN = 'sign',\n  VERIFY = 'verify',\n  ENCRYPT = 'encrypt',\n  DECRYPT = 'decrypt',\n  WRAP_KEY = 'wrapKey',\n  UNWRAP_KEY = 'unwrapKey',\n  DERIVE_KEY = 'deriveKey',\n  DERIVE_BITS = 'deriveBits',\n}\n\nexport enum JoseCurve {\n  P_256 = 'P-256',\n  P_384 = 'P-384',\n  P_521 = 'P-521',\n  X25519 = 'X25519',\n  X448 = 'X448',\n  EdDSA = 'EdDSA',\n  Ed25519 = 'Ed25519',\n  Ed448 = 'Ed448',\n  secp256k1 = 'secp256k1',\n}\n","export enum ICoseKeyType {\n  OKP = 1,\n  EC2 = 2,\n  RSA = 3,\n  Symmetric = 4,\n  Reserved = 0,\n}\n\nexport enum ICoseSignatureAlgorithm {\n  ES256 = -7,\n  ES256K = -47,\n  ES384 = -35,\n  ES512 = -36,\n  EdDSA = -8,\n  HS256_64 = 4,\n  HS256 = 5,\n  HS384 = 6,\n  HS512 = 7,\n  PS256 = -37,\n  PS384 = -38,\n  PS512 = -39,\n}\n\nexport enum ICoseKeyOperation {\n  SIGN = 1,\n  VERIFY = 2,\n  ENCRYPT = 3,\n  DECRYPT = 4,\n  WRAP_KEY = 5,\n  UNWRAP_KEY = 6,\n  DERIVE_KEY = 7,\n  DERIVE_BITS = 8,\n  MAC_CREATE = 9,\n  MAC_VERIFY = 10,\n}\n\nexport enum ICoseCurve {\n  P_256 = 1,\n  P_384 = 2,\n  P_521 = 3,\n  X25519 = 4,\n  X448 = 5,\n  Ed25519 = 6,\n  Ed448 = 7,\n  secp256k1 = -1,\n}\n","import type { CredentialFormat, PresentationFormat } from '../types'\n\nexport type CredentialEncoding = 'json' /*includes json-ld*/ | 'jwt' | 'cbor'\n\nexport type IssuerAttributeName = 'iss' | 'issuer' | 'issuerAuth'\nexport type SubjectAttributeName = 'subject' | 'id' | 'deviceMac' | 'TODO'\nexport type TypeAttributeName = 'type' | 'vct'\n\nexport type DataModel = 'W3C_VCDM' | 'IETF_SD_JWT' | 'ISO_MSO_MDOC'\n\nexport interface CredentialConstraint {\n  credentialFormat: CredentialFormat\n  presentationFormat: PresentationFormat\n  maxSignatures: number\n  encoding: CredentialEncoding\n  dataModel: DataModel\n  typeAttribute?: TypeAttributeName // optional since mdocs use namespace maps without an explicit type attribute\n  issuerAttributes: [IssuerAttributeName]\n}\n\nexport enum StatusListCredentialIdMode {\n  ISSUANCE = 'ISSUANCE',\n  // PERSISTENCE = 'PERSISTENCE',\n  NEVER = 'NEVER',\n}\n\nexport enum StatusListDriverType {\n  AGENT_TYPEORM = 'agent_typeorm',\n  /* AGENT_KV_STORE = 'agent_kv_store',\n  GITHUB = 'github',\n  AGENT_FILESYSTEM = 'agent_filesystem',*/\n}\n","import type { IssuerType } from '@veramo/core'\nimport type {\n  Hasher,\n  HasherSync,\n  ICredential,\n  IPresentation,\n  IProof,\n  IVerifiableCredential,\n  IVerifiablePresentation,\n  JwtDecodedVerifiableCredential,\n  JwtDecodedVerifiablePresentation,\n  MdocDeviceResponse,\n  MdocDocument,\n  MdocOid4vpMdocVpToken,\n  OriginalVerifiableCredential,\n  OriginalVerifiablePresentation,\n  SdJwtDecodedVerifiableCredential,\n  SdJwtDecodedVerifiableCredentialPayload,\n  UniformVerifiablePresentation,\n  W3CVerifiableCredential,\n  W3CVerifiablePresentation,\n  WrappedMdocCredential,\n  WrappedSdJwtVerifiableCredential,\n  WrappedSdJwtVerifiablePresentation,\n  WrappedVerifiableCredential,\n  WrappedVerifiablePresentation,\n  WrappedW3CVerifiableCredential,\n} from '../types'\nimport {\n  decodeMdocDeviceResponse,\n  decodeMdocIssuerSigned,\n  decodeSdJwtVc,\n  decodeSdJwtVcAsync as decodeSdJwtVcAsyncFunc,\n  defaultHasher,\n  getMdocDecodedPayload,\n  IProofPurpose,\n  IProofType,\n  isWrappedMdocCredential,\n  isWrappedMdocPresentation,\n  isWrappedW3CVerifiableCredential,\n  isWrappedW3CVerifiablePresentation,\n  mdocDecodedCredentialToUniformCredential,\n  ObjectUtils,\n  sdJwtDecodedCredentialToUniformCredential,\n} from '../utils'\nimport mdocPkg from '@sphereon/kmp-mdoc-core'\nimport { jwtDecode } from 'jwt-decode'\n\ntype DeviceResponseCbor = mdocPkg.com.sphereon.mdoc.data.device.DeviceResponseCbor\n\nexport const sha256 = (data: string | ArrayBuffer | SharedArrayBuffer): Uint8Array => {\n  return defaultHasher(data, 'sha256')\n}\n\nexport class CredentialMapper {\n  /**\n   * Decodes a compact SD-JWT vc to it's decoded variant. This method can be used when the hasher implementation used is Async, and therefore not suitable for usage\n   * with the other decode methods.\n   */\n  static decodeSdJwtVcAsync(compactSdJwtVc: string, hasher: Hasher): Promise<SdJwtDecodedVerifiableCredential> {\n    return decodeSdJwtVcAsyncFunc(compactSdJwtVc, hasher ?? sha256)\n  }\n\n  /**\n   * Decodes a Verifiable Presentation to a uniform format.\n   *\n   * When decoding SD-JWT credentials, a hasher implementation must be provided. The hasher implementation must be sync. When using\n   * an async hasher implementation, use the decodeSdJwtVcAsync method instead and you can provide the decoded payload to methods\n   * instead of the compact SD-JWT.\n   *\n   * @param presentation\n   * @param hasher Hasher implementation to use for SD-JWT decoding.\n   */\n  static decodeVerifiablePresentation(\n    presentation: OriginalVerifiablePresentation,\n    hasher?: HasherSync\n  ): JwtDecodedVerifiablePresentation | IVerifiablePresentation | SdJwtDecodedVerifiableCredential | MdocOid4vpMdocVpToken | MdocDeviceResponse {\n    if (CredentialMapper.isJwtEncoded(presentation)) {\n      const payload = jwtDecode(presentation as string) as JwtDecodedVerifiablePresentation\n      const header = jwtDecode(presentation as string, { header: true }) as Record<string, any>\n\n      payload.vp.proof = {\n        type: IProofType.JwtProof2020,\n        created: payload.nbf,\n        proofPurpose: IProofPurpose.authentication,\n        verificationMethod: header['kid'] ?? payload.iss,\n        jwt: presentation as string,\n      }\n      return payload\n    } else if (CredentialMapper.isJwtDecodedPresentation(presentation)) {\n      return presentation as JwtDecodedVerifiablePresentation\n    } else if (CredentialMapper.isSdJwtEncoded(presentation)) {\n      return decodeSdJwtVc(presentation, hasher ?? sha256)\n    } else if (CredentialMapper.isSdJwtDecodedCredential(presentation)) {\n      return presentation as SdJwtDecodedVerifiableCredential\n    } else if (CredentialMapper.isMsoMdocOid4VPEncoded(presentation)) {\n      return presentation as MdocOid4vpMdocVpToken\n    } else if (CredentialMapper.isMsoMdocDecodedPresentation(presentation)) {\n      return presentation as MdocDeviceResponse\n    } else if (CredentialMapper.isJsonLdAsString(presentation)) {\n      return JSON.parse(presentation as string) as IVerifiablePresentation\n    } else {\n      return presentation as IVerifiablePresentation\n    }\n  }\n\n  /**\n   * Decodes a Verifiable Credential to a uniform format.\n   *\n   * When decoding SD-JWT credentials, a hasher implementation must be provided. The hasher implementation must be sync. When using\n   * an async hasher implementation, use the decodeSdJwtVcAsync method instead and you can provide the decoded payload to methods\n   * instead of the compact SD-JWT.\n   *\n   * @param credential\n   * @param hasher Hasher implementation to use for SD-JWT decoding\n   */\n  static decodeVerifiableCredential(\n    credential: OriginalVerifiableCredential,\n    hasher?: HasherSync\n  ): JwtDecodedVerifiableCredential | IVerifiableCredential | SdJwtDecodedVerifiableCredential {\n    if (CredentialMapper.isJwtEncoded(credential)) {\n      const payload = jwtDecode(credential as string) as JwtDecodedVerifiableCredential\n      const header = jwtDecode(credential as string, { header: true }) as Record<string, any>\n      payload.vc = payload.vc ?? {}\n      payload.vc.proof = {\n        type: IProofType.JwtProof2020,\n        created: payload.nbf,\n        proofPurpose: IProofPurpose.authentication,\n        verificationMethod: header['kid'] ?? payload.iss,\n        jwt: credential as string,\n      }\n      return payload\n    } else if (CredentialMapper.isJwtDecodedCredential(credential)) {\n      return credential\n    } else if (CredentialMapper.isJsonLdAsString(credential)) {\n      return JSON.parse(credential as string) as IVerifiableCredential\n    } else if (CredentialMapper.isSdJwtEncoded(credential)) {\n      return decodeSdJwtVc(credential, hasher ?? sha256)\n    } else if (CredentialMapper.isSdJwtDecodedCredential(credential)) {\n      return credential\n    } else {\n      return credential as IVerifiableCredential\n    }\n  }\n\n  /**\n   * Converts a presentation to a wrapped presentation.\n   *\n   * When decoding SD-JWT credentials, a hasher implementation must be provided. The hasher implementation must be sync. When using\n   * an async hasher implementation, use the decodeSdJwtVcAsync method instead and you can provide the decoded payload to methods\n   * instead of the compact SD-JWT.\n   *\n   * @param originalPresentation\n   * @param opts\n   */\n  static toWrappedVerifiablePresentation(\n    originalPresentation: OriginalVerifiablePresentation,\n    opts?: { maxTimeSkewInMS?: number; hasher?: HasherSync }\n  ): WrappedVerifiablePresentation {\n    // MSO_MDOC\n    if (CredentialMapper.isMsoMdocDecodedPresentation(originalPresentation) || CredentialMapper.isMsoMdocOid4VPEncoded(originalPresentation)) {\n      let deviceResponse: MdocDeviceResponse\n      let originalType: OriginalType\n      if (CredentialMapper.isMsoMdocOid4VPEncoded(originalPresentation)) {\n        deviceResponse = decodeMdocDeviceResponse(originalPresentation)\n        originalType = OriginalType.MSO_MDOC_ENCODED\n      } else {\n        deviceResponse = originalPresentation\n        originalType = OriginalType.MSO_MDOC_DECODED\n      }\n\n      const mdocCredentials = deviceResponse.documents?.map(\n        (doc) => CredentialMapper.toWrappedVerifiableCredential(doc, opts) as WrappedMdocCredential\n      )\n      if (!mdocCredentials || mdocCredentials.length === 0) {\n        throw new Error('could not extract any mdoc credentials from mdoc device response')\n      }\n\n      return {\n        type: originalType,\n        format: 'mso_mdoc',\n        original: originalPresentation,\n        presentation: deviceResponse,\n        decoded: deviceResponse,\n        vcs: mdocCredentials,\n      }\n    }\n    // SD-JWT\n    if (CredentialMapper.isSdJwtDecodedCredential(originalPresentation) || CredentialMapper.isSdJwtEncoded(originalPresentation)) {\n      let decodedPresentation: SdJwtDecodedVerifiableCredential\n      if (CredentialMapper.isSdJwtEncoded(originalPresentation)) {\n        decodedPresentation = decodeSdJwtVc(originalPresentation, opts?.hasher ?? sha256)\n      } else {\n        decodedPresentation = originalPresentation\n      }\n      return {\n        type: CredentialMapper.isSdJwtDecodedCredential(originalPresentation) ? OriginalType.SD_JWT_VC_DECODED : OriginalType.SD_JWT_VC_ENCODED,\n        format: 'dc+sd-jwt',\n        original: originalPresentation,\n        presentation: decodedPresentation,\n        decoded: decodedPresentation.decodedPayload,\n        // NOTE: we also include the SD-JWT VC as the VC, as the SD-JWT acts as both the VC and the VP\n        vcs: [CredentialMapper.toWrappedVerifiableCredential(originalPresentation, opts) as WrappedSdJwtVerifiableCredential],\n      }\n    }\n\n    // If the VP is not an encoded/decoded SD-JWT, we assume it will be a W3C VC\n    const proof = CredentialMapper.getFirstProof(originalPresentation)\n    const original =\n      typeof originalPresentation !== 'string' && CredentialMapper.hasJWTProofType(originalPresentation) ? proof?.jwt : originalPresentation\n    if (!original) {\n      throw Error(\n        'Could not determine original presentation, probably it was a converted JWT presentation, that is now missing the JWT value in the proof'\n      )\n    }\n    const decoded = CredentialMapper.decodeVerifiablePresentation(original) as IVerifiablePresentation | JwtDecodedVerifiablePresentation\n    const isJwtEncoded: boolean = CredentialMapper.isJwtEncoded(original)\n    const isJwtDecoded: boolean = CredentialMapper.isJwtDecodedPresentation(original)\n\n    const type = isJwtEncoded ? OriginalType.JWT_ENCODED : isJwtDecoded ? OriginalType.JWT_DECODED : OriginalType.JSONLD\n    const format = isJwtDecoded || isJwtEncoded ? 'jwt_vp' : ('ldp_vp' as const)\n\n    let vp: OriginalVerifiablePresentation\n    if (isJwtEncoded || isJwtDecoded) {\n      vp = CredentialMapper.jwtDecodedPresentationToUniformPresentation(decoded as JwtDecodedVerifiablePresentation, false, opts)\n    } else {\n      vp = decoded as IVerifiablePresentation\n    }\n    if (!vp) {\n      throw Error(`VP key not found`)\n    }\n    const noVCs = !('verifiableCredential' in vp) || !vp.verifiableCredential || vp.verifiableCredential.length === 0\n    if (noVCs) {\n      console.warn(`Presentation without verifiable credentials. That is rare! `)\n      // throw Error(`VP needs to have at least one verifiable credential at this point`)\n    }\n    const vcs = noVCs\n      ? []\n      : (CredentialMapper.toWrappedVerifiableCredentials(\n          vp.verifiableCredential ?? [] /*.map(value => value.original)*/,\n          opts\n        ) as WrappedW3CVerifiableCredential[])\n\n    const presentation = {\n      ...vp,\n      verifiableCredential: vcs, // We overwrite the verifiableCredentials with wrapped versions, making it an InternalVerifiablePresentation. Note: we keep the singular key name of the vc data model\n    } as UniformVerifiablePresentation\n    return {\n      type,\n      format,\n      original,\n      decoded,\n      presentation,\n      vcs,\n    }\n  }\n\n  /**\n   * Converts a list of credentials to a list of wrapped credentials.\n   *\n   * When decoding SD-JWT credentials, a hasher implementation must be provided. The hasher implementation must be sync. When using\n   * an async hasher implementation, use the decodeSdJwtVcAsync method instead and you can provide the decoded payload to methods\n   * instead of the compact SD-JWT.\n   *\n   * @param hasher Hasher implementation to use for SD-JWT decoding\n   */\n  static toWrappedVerifiableCredentials(\n    verifiableCredentials: OriginalVerifiableCredential[],\n    opts?: { maxTimeSkewInMS?: number; hasher?: HasherSync }\n  ): WrappedVerifiableCredential[] {\n    return verifiableCredentials.map((vc) => CredentialMapper.toWrappedVerifiableCredential(vc, opts))\n  }\n\n  /**\n   * Converts a credential to a wrapped credential.\n   *\n   * When decoding SD-JWT credentials, a hasher implementation must be provided. The hasher implementation must be sync. When using\n   * an async hasher implementation, use the decodeSdJwtVcAsync method instead and you can provide the decoded payload to methods\n   * instead of the compact SD-JWT.\n   *\n   * @param hasher Hasher implementation to use for SD-JWT decoding\n   */\n  static toWrappedVerifiableCredential(\n    verifiableCredential: OriginalVerifiableCredential,\n    opts?: { maxTimeSkewInMS?: number; hasher?: HasherSync }\n  ): WrappedVerifiableCredential {\n    // MSO_MDOC\n    if (CredentialMapper.isMsoMdocDecodedCredential(verifiableCredential) || CredentialMapper.isMsoMdocOid4VPEncoded(verifiableCredential)) {\n      let mdoc: MdocDocument\n      if (CredentialMapper.isMsoMdocOid4VPEncoded(verifiableCredential)) {\n        mdoc = decodeMdocIssuerSigned(verifiableCredential)\n      } else {\n        mdoc = verifiableCredential\n      }\n      return {\n        type: CredentialMapper.isMsoMdocDecodedCredential(verifiableCredential) ? OriginalType.MSO_MDOC_DECODED : OriginalType.MSO_MDOC_ENCODED,\n        format: 'mso_mdoc',\n        original: verifiableCredential,\n        credential: mdoc,\n        decoded: getMdocDecodedPayload(mdoc),\n      }\n    }\n\n    // SD-JWT\n    if (CredentialMapper.isSdJwtDecodedCredential(verifiableCredential) || CredentialMapper.isSdJwtEncoded(verifiableCredential)) {\n      let decodedCredential: SdJwtDecodedVerifiableCredential\n      if (CredentialMapper.isSdJwtEncoded(verifiableCredential)) {\n        const hasher = opts?.hasher ?? sha256\n        decodedCredential = decodeSdJwtVc(verifiableCredential, hasher)\n      } else {\n        decodedCredential = verifiableCredential\n      }\n\n      return {\n        type: CredentialMapper.isSdJwtDecodedCredential(verifiableCredential) ? OriginalType.SD_JWT_VC_DECODED : OriginalType.SD_JWT_VC_ENCODED,\n        format: 'dc+sd-jwt',\n        original: verifiableCredential,\n        credential: decodedCredential,\n        decoded: decodedCredential.decodedPayload,\n      }\n    }\n\n    // If the VC is not an encoded/decoded SD-JWT, we assume it will be a W3C VC\n    const proof = CredentialMapper.getFirstProof(verifiableCredential)\n    const original = CredentialMapper.hasJWTProofType(verifiableCredential) && proof ? proof.jwt ?? verifiableCredential : verifiableCredential\n    if (!original) {\n      throw Error(\n        'Could not determine original credential, probably it was a converted JWT credential, that is now missing the JWT value in the proof'\n      )\n    }\n    const decoded = CredentialMapper.decodeVerifiableCredential(original) as JwtDecodedVerifiableCredential | IVerifiableCredential\n\n    const isJwtEncoded = CredentialMapper.isJwtEncoded(original)\n    const isJwtDecoded = CredentialMapper.isJwtDecodedCredential(original)\n    const type = isJwtEncoded ? OriginalType.JWT_ENCODED : isJwtDecoded ? OriginalType.JWT_DECODED : OriginalType.JSONLD\n\n    const credential =\n      isJwtEncoded || isJwtDecoded\n        ? CredentialMapper.jwtDecodedCredentialToUniformCredential(decoded as JwtDecodedVerifiableCredential, opts)\n        : (decoded as IVerifiableCredential)\n\n    const format = isJwtEncoded || isJwtDecoded ? ('jwt_vc' as const) : ('ldp_vc' as const)\n    return {\n      original,\n      decoded,\n      format,\n      type,\n      credential,\n    }\n  }\n\n  public static isJwtEncoded(original: OriginalVerifiableCredential | OriginalVerifiablePresentation): original is string {\n    return ObjectUtils.isString(original) && original.startsWith('ey') && !original.includes('~')\n  }\n\n  public static isSdJwtEncoded(original: OriginalVerifiableCredential | OriginalVerifiablePresentation): original is string {\n    return ObjectUtils.isString(original) && original.startsWith('ey') && original.includes('~')\n  }\n\n  public static isMsoMdocOid4VPEncoded(original: OriginalVerifiableCredential | OriginalVerifiablePresentation): original is string {\n    return ObjectUtils.isString(original) && !original.startsWith('ey') && ObjectUtils.isBase64(original)\n  }\n\n  public static isW3cCredential(credential: ICredential | SdJwtDecodedVerifiableCredential | MdocDocument): credential is ICredential {\n    return typeof credential === 'object' && '@context' in credential && ((credential as ICredential).type?.includes('VerifiableCredential') || false)\n  }\n\n  public static isCredential(original: OriginalVerifiableCredential | OriginalVerifiablePresentation): original is OriginalVerifiableCredential {\n    try {\n      if (CredentialMapper.isJwtEncoded(original)) {\n        const vc: IVerifiableCredential = CredentialMapper.toUniformCredential(original)\n        return CredentialMapper.isW3cCredential(vc)\n      } else if (CredentialMapper.isSdJwtEncoded(original)) {\n        return true\n      } else if (CredentialMapper.isMsoMdocDecodedCredential(original)) {\n        return true\n      } else if (CredentialMapper.isMsoMdocOid4VPEncoded(original)) {\n        return true\n      }\n      return (\n        CredentialMapper.isW3cCredential(original as ICredential) ||\n        CredentialMapper.isSdJwtDecodedCredentialPayload(original as ICredential) ||\n        CredentialMapper.isJwtDecodedCredential(original as OriginalVerifiableCredential) ||\n        CredentialMapper.isSdJwtDecodedCredential(original as OriginalVerifiableCredential)\n      )\n    } catch (e) {\n      return false\n    }\n  }\n\n  public static isPresentation(original: OriginalVerifiableCredential | OriginalVerifiablePresentation): original is OriginalVerifiablePresentation {\n    try {\n      if (CredentialMapper.isJwtEncoded(original)) {\n        const vp: IVerifiablePresentation = CredentialMapper.toUniformPresentation(original)\n        return CredentialMapper.isW3cPresentation(vp)\n      } else if (CredentialMapper.isSdJwtEncoded(original)) {\n        return false\n        // @ts-expect-error\n      } else if (CredentialMapper.isMsoMdocDecodedPresentation(original)) {\n        return true\n      } else if (CredentialMapper.isMsoMdocOid4VPEncoded(original)) {\n        return true\n      }\n      return (\n        CredentialMapper.isW3cPresentation(original as IPresentation) ||\n        CredentialMapper.isSdJwtDecodedCredentialPayload(original as ICredential) ||\n        CredentialMapper.isJwtDecodedPresentation(original as OriginalVerifiablePresentation) ||\n        CredentialMapper.isSdJwtDecodedCredential(original as OriginalVerifiableCredential)\n      )\n    } catch (e) {\n      return false\n    }\n  }\n\n  public static hasProof(original: OriginalVerifiableCredential | OriginalVerifiablePresentation | string): boolean {\n    try {\n      if (CredentialMapper.isMsoMdocOid4VPEncoded(original)) {\n        return false\n        // @ts-ignore\n      } else if (CredentialMapper.isMsoMdocDecodedCredential(original) || CredentialMapper.isMsoMdocDecodedPresentation(original)) {\n        return true\n      } else if (CredentialMapper.isJwtEncoded(original) || CredentialMapper.isJwtDecodedCredential(original as OriginalVerifiableCredential)) {\n        return true\n      } else if (CredentialMapper.isSdJwtEncoded(original) || CredentialMapper.isSdJwtDecodedCredential(original)) {\n        //todo: we might want to revisit this\n        return true\n      }\n      if (typeof original !== 'object') {\n        return false\n      }\n      if ('vc' in (original as JwtDecodedVerifiableCredential) && (original as JwtDecodedVerifiableCredential).vc.proof) {\n        return true\n      }\n      if ('vp' in (original as JwtDecodedVerifiablePresentation) && (original as JwtDecodedVerifiablePresentation).vp.proof) {\n        return true\n      }\n      return !!(original as IVerifiableCredential | IVerifiablePresentation).proof\n    } catch (e) {\n      return false\n    }\n  }\n\n  public static isW3cPresentation(\n    presentation: UniformVerifiablePresentation | IPresentation | SdJwtDecodedVerifiableCredential | DeviceResponseCbor\n  ): presentation is IPresentation {\n    return (\n      typeof presentation === 'object' &&\n      '@context' in presentation &&\n      ((presentation as IPresentation).type?.includes('VerifiablePresentation') || false)\n    )\n  }\n\n  public static isSdJwtDecodedCredentialPayload(\n    credential: ICredential | SdJwtDecodedVerifiableCredentialPayload\n  ): credential is SdJwtDecodedVerifiableCredentialPayload {\n    return typeof credential === 'object' && 'vct' in credential\n  }\n\n  public static areOriginalVerifiableCredentialsEqual(firstOriginal: OriginalVerifiableCredential, secondOriginal: OriginalVerifiableCredential) {\n    // String (e.g. encoded jwt or SD-JWT)\n    if (typeof firstOriginal === 'string' || typeof secondOriginal === 'string') {\n      return firstOriginal === secondOriginal\n    } else if (CredentialMapper.isMsoMdocDecodedCredential(firstOriginal) || CredentialMapper.isMsoMdocDecodedCredential(secondOriginal)) {\n      if (!CredentialMapper.isMsoMdocDecodedCredential(firstOriginal) || !CredentialMapper.isMsoMdocDecodedCredential(secondOriginal)) {\n        // We are doing this over here, as the rest of the logic around it would otherwise need to be adjusted substantially\n        return false\n      }\n\n      // FIXME: mdoc library fails on parsing the device signed, so for now we just check whether the issuerSigned\n      // is equal, then we have a good chance it is the same credential. Once device signed parsing is fixed in mdl\n      // library we can move the .equals() to the top-level object.\n      return firstOriginal.issuerSigned.equals(secondOriginal.issuerSigned)\n    } else if (CredentialMapper.isSdJwtDecodedCredential(firstOriginal) || CredentialMapper.isSdJwtDecodedCredential(secondOriginal)) {\n      return firstOriginal.compactSdJwtVc === secondOriginal.compactSdJwtVc\n    } else {\n      // JSON-LD or decoded JWT. (should we compare the signatures instead?)\n      return JSON.stringify(secondOriginal.proof) === JSON.stringify(firstOriginal.proof)\n    }\n  }\n\n  public static isJsonLdAsString(original: OriginalVerifiableCredential | OriginalVerifiablePresentation): original is string {\n    return ObjectUtils.isString(original) && original.includes('@context')\n  }\n\n  public static isSdJwtDecodedCredential(\n    original: OriginalVerifiableCredential | OriginalVerifiablePresentation | ICredential | IPresentation\n  ): original is SdJwtDecodedVerifiableCredential {\n    return (\n      typeof original === 'object' &&\n      ((<SdJwtDecodedVerifiableCredential>original).compactSdJwtVc !== undefined || (<SdJwtDecodedVerifiableCredential>original).kbJwt !== undefined)\n    )\n  }\n\n  public static isSdJwtVcdm2DecodedCredential(\n    original: OriginalVerifiableCredential | OriginalVerifiablePresentation | ICredential | IPresentation\n  ): original is SdJwtDecodedVerifiableCredential {\n    if (typeof original !== 'object') {\n      return false\n    }\n    const decoded = <SdJwtDecodedVerifiableCredential>original\n    return decoded.compactSdJwtVc !== undefined && !decoded.decodedPayload.vct && !decoded.decodedPayload['@context']\n  }\n\n  public static isMsoMdocDecodedCredential(\n    original: OriginalVerifiableCredential | OriginalVerifiablePresentation | ICredential | IPresentation\n  ): original is MdocDocument {\n    return typeof original === 'object' && 'issuerSigned' in original && (<MdocDocument>original).issuerSigned !== undefined\n  }\n\n  public static isMsoMdocDecodedPresentation(original: OriginalVerifiablePresentation): original is MdocDeviceResponse {\n    return typeof original === 'object' && 'version' in original && (<MdocDeviceResponse>original).version !== undefined\n  }\n\n  public static isJwtDecodedCredential(original: OriginalVerifiableCredential): original is JwtDecodedVerifiableCredential {\n    return (\n      typeof original === 'object' &&\n      (<JwtDecodedVerifiableCredential>original).vc !== undefined &&\n      (<JwtDecodedVerifiableCredential>original).iss !== undefined\n    )\n  }\n\n  public static isJwtDecodedPresentation(original: OriginalVerifiablePresentation): original is JwtDecodedVerifiablePresentation {\n    return (\n      typeof original === 'object' &&\n      (<JwtDecodedVerifiablePresentation>original).vp !== undefined &&\n      (<JwtDecodedVerifiablePresentation>original).iss !== undefined\n    )\n  }\n\n  public static isWrappedSdJwtVerifiableCredential = isWrappedSdJwtVerifiableCredential\n  public static isWrappedSdJwtVerifiablePresentation = isWrappedSdJwtVerifiablePresentation\n  public static isWrappedW3CVerifiableCredential = isWrappedW3CVerifiableCredential\n  public static isWrappedW3CVerifiablePresentation = isWrappedW3CVerifiablePresentation\n  public static isWrappedMdocCredential = isWrappedMdocCredential\n  public static isWrappedMdocPresentation = isWrappedMdocPresentation\n\n  static jwtEncodedPresentationToUniformPresentation(\n    jwt: string,\n    makeCredentialsUniform: boolean = true,\n    opts?: { maxTimeSkewInMS?: number }\n  ): IPresentation {\n    return CredentialMapper.jwtDecodedPresentationToUniformPresentation(jwtDecode(jwt), makeCredentialsUniform, opts)\n  }\n\n  static jwtDecodedPresentationToUniformPresentation(\n    decoded: JwtDecodedVerifiablePresentation,\n    makeCredentialsUniform: boolean = true,\n    opts?: { maxTimeSkewInMS?: number }\n  ): IVerifiablePresentation {\n    const { iss, aud, jti, vp, ...rest } = decoded\n\n    const presentation: IVerifiablePresentation = {\n      ...rest,\n      ...vp,\n    }\n    if (makeCredentialsUniform) {\n      if (!vp.verifiableCredential) {\n        throw Error('Verifiable Presentation should have a verifiable credential at this point')\n      }\n      presentation.verifiableCredential = vp.verifiableCredential.map((vc) => CredentialMapper.toUniformCredential(vc, opts))\n    }\n    if (iss) {\n      const holder = presentation.holder\n      if (holder) {\n        if (holder !== iss) {\n          throw new Error(`Inconsistent holders between JWT claim (${iss}) and VC value (${holder})`)\n        }\n      }\n      presentation.holder = iss\n    }\n    if (aud) {\n      const verifier = presentation.verifier\n      if (verifier) {\n        if (verifier !== aud) {\n          throw new Error(`Inconsistent holders between JWT claim (${aud}) and VC value (${verifier})`)\n        }\n      }\n      presentation.verifier = aud\n    }\n    if (jti) {\n      const id = presentation.id\n      if (id && id !== jti) {\n        throw new Error(`Inconsistent VP ids between JWT claim (${jti}) and VP value (${id})`)\n      }\n      presentation.id = jti\n    }\n    return presentation\n  }\n\n  static toUniformCredential(\n    verifiableCredential: OriginalVerifiableCredential,\n    opts?: {\n      maxTimeSkewInMS?: number\n      hasher?: HasherSync\n    }\n  ): IVerifiableCredential {\n    if (CredentialMapper.isMsoMdocDecodedCredential(verifiableCredential)) {\n      return mdocDecodedCredentialToUniformCredential(verifiableCredential)\n    }\n    if (CredentialMapper.isSdJwtDecodedCredential(verifiableCredential)) {\n      return sdJwtDecodedCredentialToUniformCredential(verifiableCredential, opts)\n    }\n    const original =\n      typeof verifiableCredential !== 'string' && CredentialMapper.hasJWTProofType(verifiableCredential)\n        ? CredentialMapper.getFirstProof(verifiableCredential)?.jwt\n        : verifiableCredential\n    if (!original) {\n      throw Error(\n        'Could not determine original credential from passed in credential. Probably because a JWT proof type was present, but now is not available anymore'\n      )\n    }\n    const decoded = CredentialMapper.decodeVerifiableCredential(original, opts?.hasher ?? sha256)\n\n    const isJwtEncoded: boolean = CredentialMapper.isJwtEncoded(original)\n    const isJwtDecoded: boolean = CredentialMapper.isJwtDecodedCredential(original)\n    const isSdJwtEncoded = CredentialMapper.isSdJwtEncoded(original)\n    const isMdocEncoded = CredentialMapper.isMsoMdocOid4VPEncoded(original)\n\n    if (isSdJwtEncoded) {\n      return sdJwtDecodedCredentialToUniformCredential(decoded as SdJwtDecodedVerifiableCredential, opts)\n    } else if (isMdocEncoded) {\n      return mdocDecodedCredentialToUniformCredential(decodeMdocIssuerSigned(original))\n    } else if (isJwtDecoded || isJwtEncoded) {\n      return CredentialMapper.jwtDecodedCredentialToUniformCredential(decoded as JwtDecodedVerifiableCredential, opts)\n    } else {\n      return decoded as IVerifiableCredential\n    }\n  }\n\n  static toUniformPresentation(\n    presentation: OriginalVerifiablePresentation,\n    opts?: { maxTimeSkewInMS?: number; addContextIfMissing?: boolean; hasher?: HasherSync }\n  ): IVerifiablePresentation {\n    if (CredentialMapper.isSdJwtDecodedCredential(presentation)) {\n      throw new Error('Converting SD-JWT VC to uniform VP is not supported.')\n    } else if (CredentialMapper.isMsoMdocDecodedPresentation(presentation)) {\n      throw new Error('Converting MSO_MDOC to uniform VP is not supported yet.')\n    }\n\n    const proof = CredentialMapper.getFirstProof(presentation)\n    const original = typeof presentation !== 'string' && CredentialMapper.hasJWTProofType(presentation) ? proof?.jwt : presentation\n    if (!original) {\n      throw Error(\n        'Could not determine original presentation, probably it was a converted JWT presentation, that is now missing the JWT value in the proof'\n      )\n    }\n    const decoded = CredentialMapper.decodeVerifiablePresentation(original, opts?.hasher ?? sha256)\n    const isJwtEncoded: boolean = CredentialMapper.isJwtEncoded(original)\n    const isJwtDecoded: boolean = CredentialMapper.isJwtDecodedPresentation(original)\n    const uniformPresentation =\n      isJwtEncoded || isJwtDecoded\n        ? CredentialMapper.jwtDecodedPresentationToUniformPresentation(decoded as JwtDecodedVerifiablePresentation, false)\n        : (decoded as IVerifiablePresentation)\n\n    // At time of writing Velocity Networks does not conform to specification. Adding bare minimum @context section to stop parsers from crashing and whatnot\n    if (opts?.addContextIfMissing && !uniformPresentation['@context']) {\n      uniformPresentation['@context'] = ['https://www.w3.org/2018/credentials/v1']\n    }\n\n    uniformPresentation.verifiableCredential = uniformPresentation.verifiableCredential?.map((vc) =>\n      CredentialMapper.toUniformCredential(vc, opts)\n    ) as IVerifiableCredential[] // We cast it because we IPresentation needs a VC. The internal Credential doesn't have the required Proof anymore (that is intended)\n    return uniformPresentation\n  }\n\n  static jwtEncodedCredentialToUniformCredential(\n    jwt: string,\n    opts?: {\n      maxTimeSkewInMS?: number\n    }\n  ): IVerifiableCredential {\n    return CredentialMapper.jwtDecodedCredentialToUniformCredential(jwtDecode(jwt), opts)\n  }\n\n  static jwtDecodedCredentialToUniformCredential(\n    decoded: JwtDecodedVerifiableCredential,\n    opts?: { maxTimeSkewInMS?: number }\n  ): IVerifiableCredential {\n    const { exp, nbf, iss, vc, sub, jti, ...rest } = decoded\n    const credential: IVerifiableCredential = {\n      ...rest,\n      ...vc,\n    }\n\n    const maxSkewInMS = opts?.maxTimeSkewInMS ?? 1500\n\n    if (exp) {\n      const expDate = credential.expirationDate\n      const jwtExp = parseInt(exp.toString())\n      // fix seconds to millisecond for the date\n      const expDateAsStr = jwtExp < 9999999999 ? new Date(jwtExp * 1000).toISOString().replace(/\\.000Z/, 'Z') : new Date(jwtExp).toISOString()\n      if (expDate && expDate !== expDateAsStr) {\n        const diff = Math.abs(new Date(expDateAsStr).getTime() - new Date(expDate).getTime())\n        if (!maxSkewInMS || diff > maxSkewInMS) {\n          throw new Error(`Inconsistent expiration dates between JWT claim (${expDateAsStr}) and VC value (${expDate})`)\n        }\n      }\n      credential.expirationDate = expDateAsStr\n    }\n\n    if (nbf) {\n      const issuanceDate = credential.issuanceDate\n      const jwtNbf = parseInt(nbf.toString())\n      // fix seconds to millisecs for the date\n      const nbfDateAsStr = jwtNbf < 9999999999 ? new Date(jwtNbf * 1000).toISOString().replace(/\\.000Z/, 'Z') : new Date(jwtNbf).toISOString()\n      if (issuanceDate && issuanceDate !== nbfDateAsStr) {\n        const diff = Math.abs(new Date(nbfDateAsStr).getTime() - new Date(issuanceDate).getTime())\n        if (!maxSkewInMS || diff > maxSkewInMS) {\n          throw new Error(`Inconsistent issuance dates between JWT claim (${nbfDateAsStr}) and VC value (${issuanceDate})`)\n        }\n      }\n      credential.issuanceDate = nbfDateAsStr\n    }\n\n    if (iss) {\n      const issuer = credential.issuer\n      if (issuer) {\n        if (typeof issuer === 'string') {\n          if (issuer !== iss) {\n            throw new Error(`Inconsistent issuers between JWT claim (${iss}) and VC value (${issuer})`)\n          }\n        } else {\n          if (!issuer.id && Object.keys(issuer).length > 0) {\n            // We have an issuer object with more than 1 property but without an issuer id. Set it,\n            // because the default behaviour of did-jwt-vc is to remove the id value when creating JWTs\n            issuer.id = iss\n          }\n          if (issuer.id !== iss) {\n            throw new Error(`Inconsistent issuers between JWT claim (${iss}) and VC value (${issuer.id})`)\n          }\n        }\n      } else {\n        credential.issuer = iss\n      }\n    }\n\n    if (sub) {\n      const subjects = Array.isArray(credential.credentialSubject) ? credential.credentialSubject : [credential.credentialSubject]\n      for (let i = 0; i < subjects.length; i++) {\n        const csId = subjects[i].id\n        if (csId && csId !== sub) {\n          throw new Error(`Inconsistent credential subject ids between JWT claim (${sub}) and VC value (${csId})`)\n        }\n        Array.isArray(credential.credentialSubject) ? (credential.credentialSubject[i].id = sub) : (credential.credentialSubject.id = sub)\n      }\n    }\n    if (jti) {\n      const id = credential.id\n      if (id && id !== jti) {\n        throw new Error(`Inconsistent credential ids between JWT claim (${jti}) and VC value (${id})`)\n      }\n      credential.id = jti\n    }\n\n    return credential\n  }\n\n  static toExternalVerifiableCredential(verifiableCredential: any): IVerifiableCredential {\n    let proof\n    if (verifiableCredential.proof) {\n      if (!verifiableCredential.proof.type) {\n        throw new Error('Verifiable credential proof is missing a type')\n      }\n\n      if (!verifiableCredential.proof.created) {\n        throw new Error('Verifiable credential proof is missing a created date')\n      }\n\n      if (!verifiableCredential.proof.proofPurpose) {\n        throw new Error('Verifiable credential proof is missing a proof purpose')\n      }\n\n      if (!verifiableCredential.proof.verificationMethod) {\n        throw new Error('Verifiable credential proof is missing a verification method')\n      }\n      proof = {\n        ...verifiableCredential.proof,\n        type: verifiableCredential.proof.type,\n        created: verifiableCredential.proof.created,\n        proofPurpose: verifiableCredential.proof.proofPurpose,\n        verificationMethod: verifiableCredential.proof.verificationMethod,\n      }\n    }\n\n    return {\n      ...verifiableCredential,\n      type: verifiableCredential.type\n        ? typeof verifiableCredential.type === 'string'\n          ? [verifiableCredential.type]\n          : verifiableCredential.type\n        : ['VerifiableCredential'],\n      proof,\n    }\n  }\n\n  static storedCredentialToOriginalFormat(credential: OriginalVerifiableCredential): W3CVerifiableCredential {\n    const type: DocumentFormat = CredentialMapper.detectDocumentType(credential)\n    if (typeof credential === 'string') {\n      if (type === DocumentFormat.JWT) {\n        return CredentialMapper.toCompactJWT(credential)\n      } else if (type === DocumentFormat.JSONLD) {\n        return JSON.parse(credential)\n      } else if (type === DocumentFormat.SD_JWT_VC) {\n        return credential\n      }\n    } else if (type === DocumentFormat.JWT && ObjectUtils.isObject(credential) && 'vc' in credential) {\n      return CredentialMapper.toCompactJWT(credential)\n    } else if (ObjectUtils.isObject(credential) && 'proof' in credential && credential.proof.type === 'JwtProof2020' && credential.proof.jwt) {\n      return credential.proof.jwt\n    } else if (\n      ObjectUtils.isObject(credential) &&\n      'proof' in credential &&\n      credential.proof.type === IProofType.SdJwtProof2024 &&\n      credential.proof.jwt\n    ) {\n      return credential.proof.jwt\n    } else if (type === DocumentFormat.SD_JWT_VC && this.isSdJwtDecodedCredential(credential)) {\n      return credential.compactSdJwtVc\n    }\n    return credential as W3CVerifiableCredential\n  }\n\n  static storedPresentationToOriginalFormat(presentation: OriginalVerifiablePresentation): W3CVerifiablePresentation {\n    const type: DocumentFormat = CredentialMapper.detectDocumentType(presentation)\n    if (typeof presentation === 'string') {\n      if (type === DocumentFormat.JWT) {\n        return CredentialMapper.toCompactJWT(presentation)\n      } else if (type === DocumentFormat.JSONLD) {\n        return JSON.parse(presentation)\n      }\n    } else if (type === DocumentFormat.JWT && ObjectUtils.isObject(presentation) && 'vp' in presentation) {\n      return CredentialMapper.toCompactJWT(presentation)\n    } else if (\n      ObjectUtils.isObject(presentation) &&\n      'proof' in presentation &&\n      presentation.proof.type === 'JwtProof2020' &&\n      presentation.proof.jwt\n    ) {\n      return presentation.proof.jwt\n    }\n    return presentation as W3CVerifiablePresentation\n  }\n\n  static toCompactJWT(\n    jwtDocument: W3CVerifiableCredential | JwtDecodedVerifiableCredential | W3CVerifiablePresentation | JwtDecodedVerifiablePresentation | string\n  ): string {\n    if (!jwtDocument || CredentialMapper.detectDocumentType(jwtDocument) !== DocumentFormat.JWT) {\n      throw Error('Cannot convert non JWT credential to JWT')\n    }\n    if (typeof jwtDocument === 'string') {\n      return jwtDocument\n    }\n    let proof: string | undefined\n    if (ObjectUtils.isObject(jwtDocument) && 'vp' in jwtDocument) {\n      proof = 'jwt' in jwtDocument.vp.proof ? jwtDocument.vp.proof.jwt : jwtDocument.vp.proof\n    } else if (ObjectUtils.isObject(jwtDocument) && 'vc' in jwtDocument) {\n      proof = 'jwt' in jwtDocument.vc.proof ? jwtDocument.vc.proof.jwt : jwtDocument.vc.proof\n    } else {\n      proof = Array.isArray(jwtDocument.proof) ? jwtDocument.proof[0].jwt : jwtDocument.proof.jwt\n    }\n    if (!proof) {\n      throw Error(`Could not get JWT from supplied document`)\n    }\n    return proof\n  }\n\n  static detectDocumentType(\n    document:\n      | W3CVerifiableCredential\n      | W3CVerifiablePresentation\n      | JwtDecodedVerifiableCredential\n      | JwtDecodedVerifiablePresentation\n      | SdJwtDecodedVerifiableCredential\n      | MdocDeviceResponse\n      | MdocDocument\n  ): DocumentFormat {\n    if (this.isMsoMdocOid4VPEncoded(document as any) || this.isMsoMdocDecodedCredential(document as any)) {\n      return DocumentFormat.MSO_MDOC\n    } else if (this.isMsoMdocDecodedPresentation(document as any) || this.isMsoMdocDecodedPresentation(document as any)) {\n      return DocumentFormat.MSO_MDOC\n    } else if (this.isJsonLdAsString(document)) {\n      return DocumentFormat.JSONLD\n    } else if (this.isJwtEncoded(document)) {\n      return DocumentFormat.JWT\n    } else if (this.isSdJwtEncoded(document) || this.isSdJwtDecodedCredential(document as any)) {\n      return DocumentFormat.SD_JWT_VC\n    }\n\n    const proofs =\n      typeof document !== 'string' &&\n      ('vc' in document ? document.vc.proof : 'vp' in document ? document.vp.proof : (<IVerifiableCredential>document).proof)\n    const proof: IProof = Array.isArray(proofs) ? proofs[0] : proofs\n\n    if (proof?.jwt) {\n      return DocumentFormat.JWT\n    } else if (proof?.type === 'EthereumEip712Signature2021') {\n      return DocumentFormat.EIP712\n    }\n    return DocumentFormat.JSONLD\n  }\n\n  private static hasJWTProofType(\n    document: W3CVerifiableCredential | W3CVerifiablePresentation | JwtDecodedVerifiableCredential | JwtDecodedVerifiablePresentation\n  ): boolean {\n    if (typeof document === 'string') {\n      return false\n    }\n    return !!CredentialMapper.getFirstProof(document)?.jwt\n  }\n\n  private static getFirstProof(\n    document: W3CVerifiableCredential | W3CVerifiablePresentation | JwtDecodedVerifiableCredential | JwtDecodedVerifiablePresentation\n  ): IProof | undefined {\n    if (!document || typeof document === 'string') {\n      return undefined\n    }\n    const proofs = 'vc' in document ? document.vc.proof : 'vp' in document ? document.vp.proof : (<IVerifiableCredential>document).proof\n    return Array.isArray(proofs) ? proofs[0] : proofs\n  }\n\n  static issuerCorrelationIdFromIssuerType(issuer: IssuerType): string {\n    if (issuer === undefined) {\n      throw new Error('Issuer type us undefined')\n    } else if (typeof issuer === 'string') {\n      return issuer\n    } else if (typeof issuer === 'object') {\n      if ('id' in issuer) {\n        return issuer.id\n      } else {\n        throw new Error('Encountered an invalid issuer object: missing id property')\n      }\n    } else {\n      throw new Error('Invalid issuer type')\n    }\n  }\n}\n\nexport function isWrappedSdJwtVerifiableCredential(vc: WrappedVerifiableCredential): vc is WrappedSdJwtVerifiableCredential {\n  return vc.format === 'dc+sd-jwt'\n}\n\nexport function isWrappedSdJwtVerifiablePresentation(vp: WrappedVerifiablePresentation): vp is WrappedSdJwtVerifiablePresentation {\n  return vp.format === 'dc+sd-jwt'\n}\n\nexport enum OriginalType {\n  // W3C\n  JSONLD = 'json-ld',\n  JWT_ENCODED = 'jwt-encoded',\n  JWT_DECODED = 'jwt-decoded',\n\n  SD_JWT_VC_ENCODED = 'sd-jwt-vc-encoded',\n  SD_JWT_VC_DECODED = 'sd-jwt-vc-decoded',\n\n  // MSO MDOCS\n  MSO_MDOC_ENCODED = 'mso_mdoc-encoded',\n  MSO_MDOC_DECODED = 'mso_mdoc-decoded',\n}\n\nexport const JWT_PROOF_TYPE_2020 = 'JwtProof2020'\n\nexport enum DocumentFormat {\n  // W3C\n  JWT,\n  JSONLD,\n  // SD-JWT\n  SD_JWT_VC,\n  // Remaining\n  EIP712,\n  MSO_MDOC,\n}\n","import { ObjectUtils } from '../utils'\n\nexport type LanguageValueClaim = {\n  language: string\n  value: string | string[] | number | number[]\n}\n\nexport const isLanguageValueObject = (claim?: unknown): claim is LanguageValueClaim => {\n  if (!claim || !ObjectUtils.isObject(claim) || Array.isArray(claim)) {\n    return false\n  }\n  const keys = Object.keys(claim)\n  if (keys.length !== 2) {\n    return false // Only 'language' and 'value' for now\n  } else if (!('language' in claim && !!claim.language)) {\n    return false\n  } else if (!('value' in claim && !!claim.value)) {\n    return false\n  }\n  return true\n}\n\nexport const isLanguageValueObjects = (claim?: unknown): claim is LanguageValueClaim[] => {\n  if (!claim || !Array.isArray(claim)) {\n    return false\n  }\n  return claim.every((val) => isLanguageValueObject(val))\n}\n\nexport const toLanguageValueObject = (claim?: unknown): LanguageValueClaim | undefined => {\n  return isLanguageValueObject(claim) ? claim : undefined\n}\n\nexport const toLanguageValueObjects = (claim?: unknown): LanguageValueClaim[] | undefined => {\n  if (isLanguageValueObject(claim)) {\n    return ObjectUtils.asArray(toLanguageValueObject(claim) as LanguageValueClaim)\n  } else if (isLanguageValueObjects(claim)) {\n    return claim\n  }\n  return undefined // no empty array on purpose, as this really would not be a language value object\n}\n\nexport const mapLanguageValue = (\n  claim?: unknown,\n  opts?: {\n    language?: string\n    fallbackToFirstObject?: boolean\n  },\n): any => {\n  const langValues = toLanguageValueObjects(claim)\n  if (Array.isArray(langValues)) {\n    if (langValues.length === 0) {\n      // should not happen, but let's return original claim to be sure\n      return claim\n    }\n    const filteredLangValues = langValues.filter((val) => (opts?.language ? val.language.toLowerCase().includes(opts.language.toLowerCase()) : true))\n\n    let langValue: LanguageValueClaim\n    if (filteredLangValues.length > 0) {\n      langValue = filteredLangValues[0]\n    } else {\n      if (opts?.fallbackToFirstObject === false) {\n        // No match and we also do not fallback to the first value, so return the original claim\n        return claim\n      }\n      // Fallback to the first value\n      langValue = langValues[0]\n    }\n    return langValue.value\n  }\n\n  return claim\n}\n\nexport const mapLanguageValues = <T extends object>(\n  claimsOrCredential: T,\n  opts?: {\n    language?: string\n    fallbackToFirstObject?: boolean\n    noDeepClone?: boolean\n  },\n): T => {\n  const result = opts?.noDeepClone ? claimsOrCredential : JSON.parse(JSON.stringify(claimsOrCredential))\n  Object.keys(claimsOrCredential).forEach((key) => {\n    result[key] = mapLanguageValue(result[key], opts)\n    if (ObjectUtils.isObject(result[key]) || Array.isArray(result[key])) {\n      result[key] = mapLanguageValues(result[key], { ...opts, noDeepClone: true })\n    }\n  })\n  return result\n}\n"],"mappings":"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","names":["sha256","LogLevel","LoggingEventType","LogMethod","logOptions","opts","namespace","eventName","defaultLogLevel","methods","Loggers","DEFAULT_KEY","DEFAULT","namespaceOptions","Map","loggers","WeakMap","defaultOptions","options","set","register","logger","get","registerLogger","Error","SimpleLogger","_eventEmitter","EventEmitter","captureRejections","_options","eventEmitter","trace","value","args","logImpl","debug","info","warning","error","logl","level","date","Date","toISOString","filteredArgs","filter","v","arg","length","undefined","toLogValue","logValue","logArgs","push","debugPkgEnabled","debugPkgDebugger","createDebug","default","enabled","includes","logMethod","console","warn","emit","data","toString","timestamp","type","diagnosticData","log","SimpleRecordLogger","CredentialRole","import_events","System","SubSystem","ActionType","DefaultActionSubType","InitiatorType","SystemCorrelationIdType","EventManager","INSTANCE","_emitters","Map","instance","register","name","emitter","opts","set","enabled","disabled","get","Error","onlyEnabled","getOrCreate","has","BasicEventEmitter","emitters","filter","all","Array","from","Set","values","emittersImpl","map","e","hasEventName","eventName","eventNames","includes","flatMap","emitBasic","event","args","emit","Loggers","DEFAULT","options","methods","LogMethod","CONSOLE","defaultLogLevel","LogLevel","INFO","log","toString","listenerCount","reduce","previous","current","listeners","emitterName","filtered","EventEmitter","addListener","listener","once","BASE64_REGEX","ObjectUtils","asArray","value","Array","isArray","isObject","Object","prototype","toString","call","isUrlAbsolute","url","isAbsoluteRegex","isString","test","isBase64","match","fromString","u8a","supportedAlgorithms","shaHasher","data","algorithm","sanitizedAlgorithm","toLowerCase","replace","includes","Error","hasher","sha384","sha512","sha256","Uint8Array","defaultHasher","isWrappedW3CVerifiableCredential","vc","format","isWrappedW3CVerifiablePresentation","vp","StatusListType","isVcdmCredential","credential","vcdmType","Array","isArray","includes","isVcdm1Credential","VCDM_CREDENTIAL_CONTEXT_V1","isVcdm2Credential","VCDM_CREDENTIAL_CONTEXT_V2","addVcdmContextIfNeeded","context","defaultValue","newContext","vcdmContext","find","val","VCDM_CREDENTIAL_CONTEXT_VERSIONS","unshift","IProofPurpose","IProofType","parseDid","did","parsedDid","parse","Error","didUrl","PCT_ENCODED","ID_CHAR","METHOD","METHOD_ID","PARAM_CHAR","PARAM","PARAMS","PATH","QUERY","FRAGMENT","DID_MATCHER","RegExp","sections","match","parts","method","id","params","slice","split","p","kv","path","query","fragment","com","mdocPkg","isWrappedMdocCredential","vc","format","isWrappedMdocPresentation","vp","getMdocDecodedPayload","mdoc","mdocJson","toJson","issuerSigned","nameSpaces","Error","issuerSignedJson","toJsonDTO","namespaces","decodedPayload","namespace","items","Object","entries","reduce","acc","item","key","value","decodeMdocIssuerSigned","oid4vpIssuerSigned","sphereon","data","device","IssuerSignedCbor","Static","cborDecode","kmp","decodeFrom","Encoding","BASE64URL","holderMdoc","toDocument","encodeMdocIssuerSigned","encoding","encodeTo","cborEncode","decodeMdocDeviceResponse","vpToken","deviceResponse","DeviceResponseCbor","mdocDecodedCredentialToUniformCredential","decoded","opts","document","json","type","MSO","length","credentialSubject","Array","isArray","map","val","join","validFrom","validityInfo","validUntil","docType","expirationDate","issuanceDateStr","issuanceDate","credential","proof","IProofType","MdocProof2024","created","proofPurpose","IProofPurpose","authentication","verificationMethod","issuerAuth","payload","mso_mdoc","decodeSdJwtVc","compactSdJwtVc","hasher","jwt","disclosures","kbJwt","decodeSdJwtSync","signedPayload","payload","decodedPayload","getClaimsSync","compactKeyBindingJwt","split","pop","undefined","type","vct","map","d","decoded","key","salt","value","_digest","Error","digest","encoded","encode","header","compact","decodeSdJwtVcAsync","decodeSdJwt","getClaims","sdJwtDecodedCredentialToUniformCredential","opts","exp","nbf","iss","iat","cnf","status","jti","validUntil","validFrom","credentialSubject","issuer","id","subId","sub","maxSkewInMS","maxTimeSkewInMS","expirationDate","jwtDateToISOString","jwtClaim","claimName","issuanceDateStr","nbfDateAsStr","diff","Math","abs","Date","getTime","issuanceDate","excludedFields","Set","Object","entries","reduce","acc","has","keys","length","sdJwtVc","credential","proof","IProofType","SdJwtProof2024","created","proofPurpose","IProofPurpose","authentication","verificationMethod","isRequired","claim","parseInt","toString","toISOString","replace","JwkKeyType","JoseSignatureAlgorithm","JoseKeyOperation","JoseCurve","ICoseKeyType","ICoseSignatureAlgorithm","ICoseKeyOperation","ICoseCurve","StatusListCredentialIdMode","StatusListDriverType","sha256","data","defaultHasher","CredentialMapper","decodeSdJwtVcAsync","compactSdJwtVc","hasher","decodeSdJwtVcAsyncFunc","decodeVerifiablePresentation","presentation","isJwtEncoded","payload","jwtDecode","header","vp","proof","type","IProofType","JwtProof2020","created","nbf","proofPurpose","IProofPurpose","authentication","verificationMethod","iss","jwt","isJwtDecodedPresentation","isSdJwtEncoded","decodeSdJwtVc","isSdJwtDecodedCredential","isMsoMdocOid4VPEncoded","isMsoMdocDecodedPresentation","isJsonLdAsString","JSON","parse","decodeVerifiableCredential","credential","vc","isJwtDecodedCredential","toWrappedVerifiablePresentation","originalPresentation","opts","deviceResponse","originalType","decodeMdocDeviceResponse","mdocCredentials","documents","map","doc","toWrappedVerifiableCredential","length","Error","format","original","decoded","vcs","decodedPresentation","decodedPayload","getFirstProof","hasJWTProofType","isJwtDecoded","jwtDecodedPresentationToUniformPresentation","noVCs","verifiableCredential","console","warn","toWrappedVerifiableCredentials","verifiableCredentials","isMsoMdocDecodedCredential","mdoc","decodeMdocIssuerSigned","getMdocDecodedPayload","decodedCredential","jwtDecodedCredentialToUniformCredential","ObjectUtils","isString","startsWith","includes","isBase64","isW3cCredential","isCredential","toUniformCredential","isSdJwtDecodedCredentialPayload","e","isPresentation","toUniformPresentation","isW3cPresentation","hasProof","areOriginalVerifiableCredentialsEqual","firstOriginal","secondOriginal","issuerSigned","equals","stringify","undefined","kbJwt","isSdJwtVcdm2DecodedCredential","vct","version","isWrappedSdJwtVerifiableCredential","isWrappedSdJwtVerifiablePresentation","isWrappedW3CVerifiableCredential","isWrappedW3CVerifiablePresentation","isWrappedMdocCredential","isWrappedMdocPresentation","jwtEncodedPresentationToUniformPresentation","makeCredentialsUniform","aud","jti","rest","holder","verifier","id","mdocDecodedCredentialToUniformCredential","sdJwtDecodedCredentialToUniformCredential","isMdocEncoded","uniformPresentation","addContextIfMissing","jwtEncodedCredentialToUniformCredential","exp","sub","maxSkewInMS","maxTimeSkewInMS","expDate","expirationDate","jwtExp","parseInt","toString","expDateAsStr","Date","toISOString","replace","diff","Math","abs","getTime","issuanceDate","jwtNbf","nbfDateAsStr","issuer","Object","keys","subjects","Array","isArray","credentialSubject","i","csId","toExternalVerifiableCredential","storedCredentialToOriginalFormat","detectDocumentType","toCompactJWT","isObject","SdJwtProof2024","storedPresentationToOriginalFormat","jwtDocument","document","proofs","issuerCorrelationIdFromIssuerType","OriginalType","JWT_PROOF_TYPE_2020","DocumentFormat","isLanguageValueObject","claim","ObjectUtils","isObject","Array","isArray","keys","Object","length","language","value","isLanguageValueObjects","every","val","toLanguageValueObject","undefined","toLanguageValueObjects","asArray","mapLanguageValue","opts","langValues","filteredLangValues","filter","toLowerCase","includes","langValue","fallbackToFirstObject","mapLanguageValues","claimsOrCredential","result","noDeepClone","JSON","parse","stringify","forEach","key","logger","Loggers","DEFAULT","get","debug"]}