@sphereon/ssi-types 0.36.1-next.50 → 0.36.1-next.70
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/mapper/credential-mapper.ts +1 -1
- package/src/types/sd-jwt-vc.ts +2 -2
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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): 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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAAAA;EAAA;;;;;;;ACAA,mBAAwB;AAExB,oBAA6B;AAEtB,IAAKC,WAAAA,0BAAAA,WAAAA;;;;;;SAAAA;;AAQL,IAAKC,mBAAAA,0BAAAA,mBAAAA;;;;SAAAA;;AAeL,IAAKC,YAAAA,0BAAAA,YAAAA;;;;SAAAA;;AAaL,SAASC,WAAWC,MAAuB;AAChD,SAAO;IACLC,WAAWD,MAAMC,aAAa;IAC9BC,WAAWF,MAAME,aAAa;IAC9BC,iBAAiBH,MAAMG,mBAAAA;IACvBC,SAASJ,MAAMI,WAAW;;;;EAC5B;AACF;AAPgBL;AAST,IAAMM,UAAN,MAAMA,SAAAA;EAjDb,OAiDaA;;;EACX,OAAwBC,cAAc;EACtC,OAAuBC,UAAmB,IAAIF,SAAQ;IACpDF,iBAAe;IACfC,SAAS;;;;EACX,CAAA;EACiBI,mBAA4D,oBAAIC,IAAAA;EAChEC,UAAmE,oBAAIC,QAAAA;EAExF,YAAYC,gBAAsD;AAChE,SAAKA,eAAeb,WAAWa,cAAAA,CAAAA;EACjC;EAEOC,QAAQZ,WAAmBY,SAAoD;AACpF,SAAKL,iBAAiBM,IAAIb,WAAWF,WAAW;MAAE,GAAGc;MAASZ;IAAU,CAAA,CAAA;AACxE,WAAO;EACT;EAEOW,eAAeC,SAAoD;AACxE,SAAKA,QAAQR,SAAQC,aAAaO,OAAAA;AAClC,WAAO;EACT;EAEAE,SAAYd,WAAmBe,SAA4C;AACzE,WAAO,KAAKC,IAAIhB,WAAWe,OAAAA;EAC7B;EAEAC,IAAOhB,WAAmBiB,gBAAqD;AAC7E,UAAML,UAAU,KAAKL,iBAAiBS,IAAIhB,SAAAA,KAAciB,gBAAgBL,WAAW,KAAKL,iBAAiBS,IAAIZ,SAAQC,WAAW;AAChI,QAAI,CAACO,SAAS;AACZ,YAAMM,MAAM,0CAA0ClB,SAAAA,EAAW;IACnE;AACA,SAAKO,iBAAiBM,IAAIb,WAAWY,OAAAA;AAErC,QAAIG,UAAS,KAAKN,QAAQO,IAAIJ,OAAAA;AAC9B,QAAI,CAACG,SAAQ;AACXA,MAAAA,UAASE,kBAAkB,IAAIE,aAAaP,OAAAA;AAC5C,WAAKH,QAAQI,IAAID,SAASG,OAAAA;IAC5B;AACA,WAAOA;EACT;AACF;AAaO,IAAMI,eAAN,MAAMA;EAvGb,OAuGaA;;;EACHC,gBAAgB,IAAIC,2BAAa;IAAEC,mBAAmB;EAAK,CAAA;EAClDC;EAEjB,YAAYxB,MAAyB;AACnC,SAAKwB,WAAWzB,WAAWC,IAAAA;EAC7B;EAEA,IAAIyB,eAA6B;AAC/B,WAAO,KAAKJ;EACd;EAEA,IAAIR,UAAsC;AACxC,WAAO,KAAKW;EACd;EAEAE,MAAMC,UAAeC,MAAa;AAChC,SAAKC,QAAO,GAAiBF,OAAAA,GAAUC,IAAAA;EACzC;EAEAE,MAAMH,UAAeC,MAAa;AAChC,SAAKC,QAAO,GAAiBF,OAAAA,GAAUC,IAAAA;EACzC;EAEAG,KAAKJ,UAAeC,MAAa;AAC/B,SAAKC,QAAO,GAAgBF,OAAAA,GAAUC,IAAAA;EACxC;EAEAI,QAAQL,UAAeC,MAAa;AAClC,SAAKC,QAAO,GAAmBF,OAAAA,GAAUC,IAAAA;EAC3C;EAEAK,MAAMN,UAAeC,MAAa;AAChC,SAAKC,QAAO,GAAiBF,OAAAA,GAAUC,IAAAA;EACzC;EAEAM,KAAKC,OAAiBR,UAAeC,MAAa;AAChD,SAAKC,QAAQM,OAAOR,OAAAA,GAAUC,IAAAA;EAChC;EAEQC,QAAQM,OAAiBR,UAAeC,MAAa;AAC3D,UAAMQ,QAAO,oBAAIC,KAAAA,GAAOC,YAAW;AACnC,UAAMC,eAAeX,MAAMY,OAAO,CAACC,MAAMA,CAAAA,KAAQ,CAAA;AACjD,UAAMC,MAAMH,aAAaI,WAAW,KAAKJ,aAAa,CAAA,KAAMK,SAAYA,SAAYL;AAEpF,aAASM,WAAWhC,SAAyB;AAC3C,UAAI,OAAOc,UAAU,UAAU;AAC7B,eAAO,GAAGS,IAAAA,KAASvB,QAAQZ,SAAS,KAAK0B,KAAAA;MAC3C,WAAW,OAAOA,UAAU,UAAU;AACpCA,cAAM,WAAA,IAAed,QAAQZ;AAC7B0B,cAAM,MAAA,IAAUS;MAClB;AACA,aAAOT;IACT;AARSkB;AAUT,UAAMC,WAAWD,WAAW,KAAKhC,OAAO;AACxC,UAAMkC,UAAU;MAACD;;AACjB,QAAIJ,KAAK;AACPK,cAAQC,KAAKpB,IAAAA;IACf;AAEA,QAAIqB,kBAAkB;AACtB,QAAIA,iBAAiB;AACnB,YAAMC,mBAAmBC,aAAAA,QAAYC,QAAQ,KAAK5B,SAASvB,SAAS;AAEpEgD,wBAAkBC,iBAAiBG;AACnC,UAAIJ,iBAAiB;AACnB,YAAIP,KAAK;AACPQ,2BAAiB,GAAGd,IAAAA,KAAST,KAAAA,KAAQ,GAAKe,GAAAA;QAC5C,OAAO;AACLQ,2BAAiB,GAAGd,IAAAA,KAAST,KAAAA,EAAO;QACtC;MACF;IACF;AAGA,QAAI,KAAKd,QAAQT,QAAQkD,SAAQ,CAAA,KAAuB,CAACL,iBAAiB;AACxE,YAAM,CAACtB,QAAOC,KAAAA,IAAQmB;AACtB,UAAIQ,YAAYC,QAAQzB;AACxB,cAAQI,OAAAA;QACN,KAAA;AACEoB,sBAAYC,QAAQ9B;AACpB;QACF,KAAA;AACE6B,sBAAYC,QAAQ1B;AACpB;QACF,KAAA;AACEyB,sBAAYC,QAAQzB;AACpB;QACF,KAAA;AACEwB,sBAAYC,QAAQC;AACpB;QACF,KAAA;AACEF,sBAAYC,QAAQvB;AACpB;MACJ;AACA,UAAIL,OAAM;AACR2B,kBAAU5B,SAAQ,KAAA,GAAQC,KAAAA;MAC5B,OAAO;AACL2B,kBAAU5B,MAAAA;MACZ;IACF;AAEA,QAAI,KAAKd,QAAQT,QAAQkD,SAAQ,CAAA,GAAmB;AAClD,WAAKjC,cAAcqC,KAAK,KAAK7C,QAAQX,WAAW;QAC9CyD,MAAMhC,MAAMiC,SAAQ;QACpBC,WAAW,IAAIxB,KAAKD,IAAAA;QACpBD;QACA2B,MAAI;QACJC,gBAAgBhB;MAClB,CAAA;IACF;EACF;EAEAiB,IAAIrC,UAAeC,MAAa;AAC9B,SAAKC,QAAQ,KAAKhB,QAAQV,iBAAiBwB,OAAAA,GAAUC,IAAAA;EACvD;AACF;AAEO,IAAMqC,qBAAN,cAAiC7C,aAAAA;EA9NxC,OA8NwCA;;;EACtC,YAAYpB,MAAyB;AACnC,UAAMA,IAAAA;EACR;AACF;;;AClOO,IAAKkE,iBAAAA,0BAAAA,iBAAAA;;;;;SAAAA;;;;ACAZ,IAAAC,iBAA6B;AAGtB,IAAKC,SAAAA,0BAAAA,SAAAA;;;;;;;;;;;;SAAAA;;AAcL,IAAKC,YAAAA,0BAAAA,YAAAA;;;;;;;;;;;;;;SAAAA;;AAgBL,IAAKC,aAAAA,0BAAAA,aAAAA;;;;;;SAAAA;;AAQL,IAAKC,uBAAAA,0BAAAA,uBAAAA;;;;;;;;;;;;;;SAAAA;;AAkBL,IAAKC,gBAAAA,0BAAAA,gBAAAA;;;;SAAAA;;AAML,IAAKC,0BAAAA,0BAAAA,0BAAAA;;;;;;;SAAAA;;AA8BL,IAAMC,eAAN,MAAMA,cAAAA;EA/Fb,OA+FaA;;;EACX,OAAwBC,WAAW,IAAID,cAAAA;EAC/BE,YAAY,oBAAIC,IAAAA;EAExB,cAAsB;EAAC;EAEvB,OAAcC,WAAyB;AACrC,WAAOJ,cAAaC;EACtB;EAEAI,SAASC,MAAcC,SAAuBC,MAA4C;AACxF,SAAKN,UAAUO,IAAIH,MAAM;MAAEC;MAASG,SAASF,MAAMG,aAAa;IAAK,CAAA;AACrE,WAAOJ;EACT;EAEAK,IAAIN,MAAcE,MAAgD;AAChE,UAAM,EAAED,SAASG,QAAO,IAAK,KAAKR,UAAUU,IAAIN,IAAAA,KAAS,CAAC;AAC1D,QAAI,CAACC,SAAS;AACZ,YAAMM,MAAM,mCAAmCP,IAAAA,EAAM;IACvD,WAAWE,MAAMM,eAAe,CAACJ,SAAS;AACxC,YAAMG,MAAM,qBAAqBP,IAAAA,iBAAqB;IACxD;AACA,WAAOC;EACT;EAEAQ,YAAYT,MAAcE,MAAgD;AACxE,QAAI,KAAKQ,IAAIV,IAAAA,GAAO;AAClB,aAAO,KAAKM,IAAIN,MAAME,IAAAA;IACxB;AACA,WAAO,KAAKH,SAASC,MAAM,IAAIW,kBAAAA,CAAAA;EACjC;EAEAD,IAAIV,MAAuB;AACzB,WAAO,KAAKJ,UAAUc,IAAIV,IAAAA;EAC5B;EAEAY,SAASC,QAAsF;AAC7F,UAAMC,MAAMC,MAAMC,KAAK,IAAIC,IAAI,KAAKrB,UAAUsB,OAAM,CAAA,CAAA;AACpD,WAAO,KAAKC,aAAaL,KAAKD,MAAAA,EAAQO,IAAI,CAACC,MAAMA,EAAEpB,OAAO;EAC5D;EAEAqB,aAAaC,WAA4B;AACvC,WAAO,KAAKC,WAAU,EAAGC,SAASF,SAAAA;EACpC;EAEAC,aAAqC;AACnC,WAAOT,MAAMC,KAAK,IAAIC,IAAI,KAAKL,SAAQ,EAAGc,QAAQ,CAACzB,YAAYA,QAAQuB,WAAU,CAAA,CAAA,CAAA;EACnF;EAEAG,UAAUC,UAAgCC,MAAa;AACrD,WAAO,KAAKC,KAAKF,MAAML,WAAWK,OAAOC,IAAAA;EAC3C;EAEAC,KAAKP,WAA4BK,UAAyDC,MAAmB;AAC3G,QAAI,QAAQD,SAAS,YAAYA,SAAS,CAACA,MAAML,WAAW;AAC1DK,YAAML,YAAYA;IACpB;AACAQ,YAAQC,QAAQC,QAAQ,mBAAmB;MACzCC,SAAS;QAACC,UAAUC;;MACpBC,iBAAiBC,SAASC;IAC5B,CAAA,EACGjC,IAAI,iBAAA,EACJkC,IAAI,aAAajB,UAAUkB,SAAQ,CAAA,WAAab,KAAAA;AACnD,UAAMhB,WAAW,KAAKA,SAAS;MAAEW;IAAU,CAAA;AAC3CX,aAASc,QAAQ,CAACzB,YAAYA,QAAQ6B,KAAKP,WAAWK,OAAOC,IAAAA,CAAAA;EAC/D;EAEAa,cAAcnB,WAA4B;AACxC,UAAMX,WAAW,KAAKA,SAAS;MAAEW;IAAU,CAAA;AAC3C,WAAOX,SAASQ,IAAI,CAACnB,YAAYA,QAAQyC,cAAcnB,SAAAA,CAAAA,EAAYoB,OAAO,CAACC,UAAUC,YAAYA,UAAUD,QAAAA;EAC7G;EAEAE,UAAUjC,QAA6F;AACrG,UAAMD,WAAWC,QAAQkC,cAAc;MAAC,KAAKzC,IAAIO,OAAOkC,aAAalC,MAAAA;QAAW,KAAKD,SAASC,MAAAA;AAC9F,WAAOE,MAAMC,KACX,IAAIC,IACF,KAAKE,aACHP,SAASQ,IAAI,CAACnB,YAAAA;AACZ,aAAO;QAAEA;QAASG,SAAS;MAAK;IAClC,CAAA,GACAS,MAAAA,EACAa,QAAQ,CAACzB,YAAYA,QAAQA,QAAQ6C,UAAUjC,OAAOU,SAAS,CAAA,CAAA,CAAA;EAGvE;EAEQJ,aACNL,KACAD,QAIwB;AACxB,UAAM,EAAEU,UAAS,IAAKV,UAAU,CAAC;AACjC,QAAI,CAACU,WAAW;AACd,aAAOT;IACT;AACA,UAAMkC,WAAWlC,IAAID,OAAO,CAACZ,YAAYA,QAAQA,QAAQuB,WAAU,EAAGC,SAASF,SAAAA,MAAetB,QAAQG,WAAWS,QAAQL,gBAAgB,KAAG;AAC5I,WAAOO,MAAMC,KAAK,IAAIC,IAAI+B,QAAAA,CAAAA;EAC5B;AACF;AAEO,IAAMrC,oBAAN,cAAgCsC,4BAAAA;EArMvC,OAqMuCA;;;EACrCC,YAAY3B,WAA4B4B,UAAuE;AAC7G,WAAO,MAAMD,YAAY3B,WAAW4B,QAAAA;EACtC;EAEAC,KAAK7B,WAA4B4B,UAAuE;AACtG,WAAO,MAAMC,KAAK7B,WAAW4B,QAAAA;EAC/B;EAEArB,KAAKP,WAAmBK,UAAgCC,MAAsB;AAC5E,WAAO,MAAMC,KAAKP,WAAAA,GAAcM,IAAAA;EAClC;AACF;;;ACjNA,IAAMwB,eAAe;AAEd,IAAMC,cAAN,MAAMA,aAAAA;EAFb,OAEaA;;;EACX,OAAcC,QAAWC,OAAe;AACtC,WAAOC,MAAMC,QAAQF,KAAAA,IAASA,QAAQ;MAACA;;EACzC;EAEA,OAAcG,SAASH,OAAiC;AACtD,WAAO,OAAOA,UAAU,YAAYI,OAAOC,UAAUC,SAASC,KAAKP,KAAAA,MAAW;EAChF;EAEA,OAAcQ,cAAcC,KAAa;AAEvC,UAAMC,kBAAkB;AACxBZ,iBAAYa,SAASF,GAAAA,KAAQC,gBAAgBE,KAAKH,GAAAA;EACpD;EAEA,OAAcE,SAASX,OAAiC;AACtD,WAAO,OAAOA,UAAU,YAAYI,OAAOC,UAAUC,SAASC,KAAKP,KAAAA,MAAW;EAChF;EAEA,OAAca,SAASb,OAAyB;AAC9C,QAAI,CAACF,aAAYa,SAASX,KAAAA,GAAQ;AAChC,aAAO;IACT;AACA,WAAOA,MAAMc,MAAMjB,YAAAA,MAAkB;EACvC;AACF;;;AC3BA,kBAAuC;AAGvC,UAAqB;AACrB,IAAM,EAAEkB,WAAU,IAAKC;AAGvB,IAAMC,sBAAsB;EAAC;EAAU;EAAU;;AAG1C,IAAMC,YAAwB,wBAACC,MAAMC,cAAAA;AAC1C,QAAMC,qBAAqBD,UAAUE,YAAW,EAAGC,QAAQ,SAAS,EAAA;AACpE,MAAI,CAACN,oBAAoBO,SAASH,kBAAAA,GAA4C;AAC5E,UAAM,IAAII,MAAM,iCAAiCL,SAAAA,EAAW;EAC9D;AACA,QAAMM,SAASL,uBAAuB,WAAWM,qBAASN,uBAAuB,WAAWO,qBAASC;AACrG,SAAOH,OAAO,OAAOP,SAAS,WAAWJ,WAAWI,IAAAA,IAAQ,IAAIW,WAAWX,IAAAA,CAAAA;AAC7E,GAPqC;AAS9B,IAAMY,gBAA4Bb;;;ACTlC,SAASc,iCAAiCC,IAA+B;AAC9E,SAAOA,GAAGC,WAAW,YAAYD,GAAGC,WAAW;AACjD;AAFgBF;AAIT,SAASG,mCAAmCC,IAAiC;AAClF,SAAOA,GAAGF,WAAW,YAAYE,GAAGF,WAAW;AACjD;AAFgBC;AAIT,IAAKE,iBAAAA,0BAAAA,iBAAAA;;;;SAAAA;;AAMZ,SAASC,iBACPC,YACAC,UAAgB;AAEhB,MAAI,CAACD,cAAc,OAAOA,eAAe,UAAU;AACjD,WAAO;EACT,WAAW,EAAE,cAAcA,cAAcE,MAAMC,QAAQH,WAAW,UAAA,CAAW,IAAI;AAC/E,WAAO;EACT;AACA,SAAOA,WAAW,UAAA,EAAYI,SAASH,QAAAA;AACzC;AAVSF;AAWF,SAASM,kBAAkBL,YAAoG;AACpI,SAAOD,iBAAiBC,YAAYM,0BAAAA;AACtC;AAFgBD;AAIT,SAASE,kBAAkBP,YAAoG;AACpI,SAAOD,iBAAiBC,YAAYQ,0BAAAA;AACtC;AAFgBD;AAIT,SAASE,uBAAuBC,SAAoBC,eAAuBH,4BAA0B;AAC1G,QAAMI,aAAa;OAAKF,WAAW,CAAA;;AACnC,QAAMG,cAAcH,SAASI,KAAK,CAACC,QAAQC,iCAAiCZ,SAASW,GAAAA,CAAAA;AACrF,MAAI,CAACF,aAAa;AAChBD,eAAWK,QAAQN,YAAAA;EACrB;AACA,SAAOC;AACT;AAPgBH;AAST,IAAMH,6BAA6B;AACnC,IAAME,6BAA6B;AACnC,IAAMQ,mCAAmC;EAACR;EAA4BF;;;;ACpDtE,IAAKY,gBAAAA,0BAAAA,gBAAAA;;;;;;;;SAAAA;;AAUL,IAAKC,aAAAA,0BAAAA,aAAAA;;;;;;;;;;;;;;SAAAA;;AAgBL,IAAMC,WAAW,wBAACC,QAAAA;AACvB,QAAMC,YAAYC,MAAMF,GAAAA;AACxB,MAAIC,cAAc,MAAM;AACtB,UAAM,IAAIE,MAAM,aAAA;EAClB;AAEA,SAAOF;AACT,GAPwB;AASxB,IAAMC,QAAQ,wBAACE,WAAAA;AACb,QAAMC,cAAc;AACpB,QAAMC,UAAU,qBAAqBD,WAAAA;AACrC,QAAME,SAAS;AACf,QAAMC,YAAY,OAAOF,OAAAA,QAAeA,OAAAA;AACxC,QAAMG,aAAa;AACnB,QAAMC,QAAQ,IAAID,UAAAA,KAAeA,UAAAA;AACjC,QAAME,SAAS,KAAKD,KAAAA;AACpB,QAAME,OAAO;AACb,QAAMC,QAAQ;AACd,QAAMC,WAAW;AACjB,QAAMC,cAAc,IAAIC,OAAO,QAAQT,MAAAA,IAAUC,SAAAA,GAAYG,MAAAA,GAASC,IAAAA,GAAOC,KAAAA,GAAQC,QAAAA,GAAW;AAEhG,MAAIV,WAAW,MAAM,CAACA,OAAQ,QAAO;AACrC,QAAMa,WAAWb,OAAOc,MAAMH,WAAAA;AAC9B,MAAIE,UAAU;AACZ,UAAME,QAAoB;MACxBnB,KAAK,OAAOiB,SAAS,CAAA,CAAE,IAAIA,SAAS,CAAA,CAAE;MACtCG,QAAQH,SAAS,CAAA;MACjBI,IAAIJ,SAAS,CAAA;MACbb;IACF;AACA,QAAIa,SAAS,CAAA,GAAI;AACf,YAAMK,SAASL,SAAS,CAAA,EAAGM,MAAM,CAAA,EAAGC,MAAM,GAAA;AAC1CL,YAAMG,SAAS,CAAC;AAChB,iBAAWG,KAAKH,QAAQ;AACtB,cAAMI,KAAKD,EAAED,MAAM,GAAA;AACnBL,cAAMG,OAAOI,GAAG,CAAA,CAAE,IAAIA,GAAG,CAAA;MAC3B;IACF;AACA,QAAIT,SAAS,CAAA,EAAIE,OAAMQ,OAAOV,SAAS,CAAA;AACvC,QAAIA,SAAS,CAAA,EAAIE,OAAMS,QAAQX,SAAS,CAAA,EAAGM,MAAM,CAAA;AACjD,QAAIN,SAAS,CAAA,EAAIE,OAAMU,WAAWZ,SAAS,CAAA,EAAGM,MAAM,CAAA;AACpD,WAAOJ;EACT;AAEA,SAAO;AACT,GArCc;;;ACtBd,2BAAoB;AACpB,IAAM,EAAEW,IAAG,IAAKC,qBAAAA;AAGT,SAASC,wBAAwBC,IAA+B;AACrE,SAAOA,GAAGC,WAAW;AACvB;AAFgBF;AAIT,SAASG,0BAA0BC,IAAiC;AACzE,SAAOA,GAAGF,WAAW;AACvB;AAFgBC;AAIT,SAASE,sBAAsBC,MAAkB;AACtD,QAAMC,WAAWD,KAAKE,OAAM;AAC5B,MAAI,CAACD,SAASE,aAAaC,YAAY;AACrC,UAAMC,MAAM,iDAAiD;EAC/D;AAEA,QAAMC,mBAAmBN,KAAKG,aAAaI,UAAS;AACpD,QAAMC,aAAaF,iBAAiBF;AAEpC,QAAMK,iBAAqC,CAAC;AAC5C,aAAW,CAACC,WAAWC,KAAAA,KAAUC,OAAOC,QAAQL,UAAAA,GAAa;AAC3DC,mBAAeC,SAAAA,IAAaC,MAAMG,OAChC,CAACC,KAAKC,UAAU;MACd,GAAGD;MACH,CAACC,KAAKC,GAAG,GAAGD,KAAKE,MAAMA;IACzB,IACA,CAAC,CAAA;EAEL;AAEA,SAAOT;AACT;AArBgBV;AA4BT,SAASoB,uBAAuBC,oBAA0C;AAE/E,QAAMjB,eAAiCX,IAAI6B,SAASrB,KAAKsB,KAAKC,OAAOC,iBAAiBC,OAAOC,WAC3FlC,IAAI6B,SAASM,IAAIC,WAAWR,oBAAoB5B,IAAI6B,SAASM,IAAIE,SAASC,SAAS,CAAA;AAGrF,QAAMC,aAA2B5B,aAAa6B,WAAU;AACxD,SAAOD;AACT;AARgBZ;AAUT,SAASc,uBAAuB9B,cAAgC+B,WAAwB,aAAW;AACxG,SAAO1C,IAAI6B,SAASM,IAAIQ,SAAShC,aAAaiC,WAAU,GAAI5C,IAAI6B,SAASM,IAAIE,SAASC,SAAS;AACjG;AAFgBG;AAST,SAASI,yBAAyBC,SAA8B;AACrE,QAAMC,iBAAiB/C,IAAI6B,SAASrB,KAAKsB,KAAKC,OAAOiB,mBAAmBf,OAAOC,WAC7ElC,IAAI6B,SAASM,IAAIC,WAAWU,SAAS9C,IAAI6B,SAASM,IAAIE,SAASC,SAAS,CAAA;AAE1E,SAAOS;AACT;AALgBF;AAQT,IAAMI,2CAA2C,wBACtDC,SAEAC,SAAAA;AAEA,QAAMC,WAAWF,QAAQxC,OAAM;AAC/B,QAAM2C,OAAOD,SAASrC,UAAS;AAC/B,QAAMuC,OAAO;AACb,QAAMC,MAAMH,SAASG;AACrB,MAAI,CAACA,OAAO,CAACF,KAAK1C,cAAcC,YAAY;AAC1C,UAAMC,MAAM,2EAA2E;EACzF;AACA,QAAMD,aAAayC,KAAK1C,aAAaC;AACrC,MAAI,EAAE,6BAA6BA,aAAa;AAC9C,UAAMC,MAAM,+BAA+B;EAC7C;AACA,QAAMM,QAAQP,WAAW,yBAAA;AACzB,MAAI,CAACO,SAASA,MAAMqC,WAAW,GAAG;AAChC,UAAM3C,MAAM,mCAAmC;EACjD;AAKA,QAAM4C,oBAAoBtC,MAAMG,OAAO,CAACC,KAA6BC,SAAAA;AACnE,QAAIkC,MAAMC,QAAQnC,KAAKE,KAAK,GAAG;AAC7BH,UAAIC,KAAKC,GAAG,IAAID,KAAKE,MAAMkC,IAAI,CAACC,QAAQA,IAAInC,KAAK,EAAEoC,KAAK,IAAA;IAC1D,OAAO;AACLvC,UAAIC,KAAKC,GAAG,IAAID,KAAKE,MAAMA;IAC7B;AACA,WAAOH;EACT,GAAG,CAAC,CAAA;AACJ,QAAMwC,YAAYR,IAAIS,aAAaD;AACnC,QAAME,aAAaV,IAAIS,aAAaC;AACpC,QAAMC,UAAUX,IAAIW;AACpB,QAAMC,iBAAiBF;AACvB,MAAIG,kBAAkBL;AAEtB,QAAMM,eAAeD;AACrB,MAAI,CAACC,cAAc;AACjB,UAAMxD,MAAM,mDAAmD;EACjE;AAEA,QAAMyD,aAAqE;IACzEhB,MAAM;MAACY;;IACP,YAAY,CAAA;IACZT,mBAAmB;MACjBH;MACA,GAAGG;IACL;IACAY;IACAF;IACAI,OAAO;MACLjB,MAAMkB,WAAWC;MACjBC,SAASL;MACTM,cAAcC,cAAcC;MAC5BC,oBAAoBzB,KAAK1C,aAAaoE,WAAWC;MACjDC,UAAUjF,IAAI6B,SAASM,IAAIQ,SAASO,QAAQN,WAAU,GAAI5C,IAAI6B,SAASM,IAAIE,SAASC,SAAS;IAC/F;EACF;AAEA,SAAOgC;AACT,GA9DwD;;;AClFxD,oBAAuE;AA2BhE,SAASY,cAAcC,gBAAgCC,QAAkB;AAC9E,QAAM,EAAEC,KAAKC,aAAaC,MAAK,QAAKC,+BAAgBL,gBAAgBC,MAAAA;AAEpE,QAAMK,gBAAgBJ,IAAIK;AAC1B,QAAMC,qBAAiBC,6BAAmBH,eAAeH,aAAaF,MAAAA;AACtE,QAAMS,uBAAuBN,QAAQJ,eAAeW,MAAM,GAAA,EAAKC,IAAG,IAAKC;AACvE,QAAMC,OAAkBN,eAAeO,MAAM,cAAc;AAE3D,SAAO;IACLf;IACAc;IACAN;IACAL,aAAaA,YAAYa,IAAI,CAACC,MAAAA;AAC5B,YAAMC,UAAUD,EAAEE,MAAM;QAACF,EAAEG;QAAMH,EAAEE;QAAKF,EAAEI;UAAS;QAACJ,EAAEG;QAAMH,EAAEI;;AAC9D,UAAI,CAACJ,EAAEK,QAAS,OAAM,IAAIC,MAAM,wDAAA;AAChC,aAAO;QACLL;QACAM,QAAQP,EAAEK;QACVG,SAASR,EAAES,OAAM;MACnB;IACF,CAAA;IACApB;IACA,GAAII,wBACFN,SAAS;MACPA,OAAO;QACLuB,QAAQvB,MAAMuB;QACdC,SAASlB;QACTH,SAASH,MAAMG;MACjB;IACF;EACJ;AACF;AA/BgBR;AAwChB,eAAsB8B,mBAAmB7B,gBAAgCC,QAAc;AACrF,QAAM,EAAEC,KAAKC,aAAaC,MAAK,IAAK,UAAM0B,2BAAY9B,gBAAgBC,MAAAA;AAEtE,QAAMK,gBAAgBJ,IAAIK;AAC1B,QAAMC,iBAAiB,UAAMuB,yBAAezB,eAAeH,aAAaF,MAAAA;AACxE,QAAMS,uBAAuBN,QAAQJ,eAAeW,MAAM,GAAA,EAAKC,IAAG,IAAKC;AAEvE,QAAMC,OAAkBN,eAAeO,MAAM,cAAc;AAC3D,SAAO;IACLf;IACAc;IACAN;IACAL,aAAaA,YAAYa,IAAI,CAACC,MAAAA;AAC5B,YAAMC,UAAUD,EAAEE,MAAM;QAACF,EAAEG;QAAMH,EAAEE;QAAKF,EAAEI;UAAS;QAACJ,EAAEG;QAAMH,EAAEI;;AAC9D,UAAI,CAACJ,EAAEK,QAAS,OAAM,IAAIC,MAAM,wDAAA;AAChC,aAAO;QACLL;QACAM,QAAQP,EAAEK;QACVG,SAASR,EAAES,OAAM;MACnB;IACF,CAAA;IACApB;IACA,GAAII,wBACFN,SAAS;MACPA,OAAO;QACLuB,QAAQvB,MAAMuB;QACdpB,SAASH,MAAMG;QACfqB,SAASlB;MACX;IACF;EACJ;AACF;AA/BsBmB;AAiCf,IAAMG,4CAA4C,wBACvDd,SACAe,SAAAA;AAEA,QAAM,EAAEzB,eAAc,IAAKU;AAC3B,QAAM,EAAEgB,KAAKC,KAAKC,KAAKC,KAAKtB,KAAKuB,KAAKC,QAAQC,KAAKC,YAAYC,UAAS,IAAKlC;AAC7E,MAAImC,oBAAsFnC,eAAemC;AAIzG,MAAIC,SAASR,OAAO5B,eAAeoC;AACnC,MAAI,OAAOA,WAAW,YAAY,QAAQA,UAAU,OAAOA,OAAOC,OAAO,UAAU;AACjFD,aAASA,OAAOC;EAClB;AACA,QAAMC,QAAQtC,eAAeuC,QAAQ,OAAOJ,qBAAqB,YAAY,QAAQA,oBAAoBA,kBAAkBE,KAAKhC;AAEhI,QAAMmC,cAAcf,MAAMgB,mBAAmB;AAE7C,QAAMC,iBAAkBT,cAAqCU,mBAAmB;IAAEC,UAAUlB;IAAKmB,WAAW;EAAM,CAAA;AAClH,MAAIC,kBAAmBZ,aAAoCS,mBAAmB;IAAEC,UAAUf;IAAKgB,WAAW;EAAM,CAAA;AAEhH,MAAIE;AACJ,MAAIpB,KAAK;AACPoB,mBAAeJ,mBAAmB;MAAEC,UAAUjB;MAAKkB,WAAW;IAAM,CAAA;AACpE,QAAIC,mBAAmBC,gBAAgBD,oBAAoBC,cAAc;AACvE,YAAMC,OAAOC,KAAKC,IAAI,IAAIC,KAAKJ,YAAAA,EAAcK,QAAO,IAAK,IAAID,KAAKL,eAAAA,EAAiBM,QAAO,CAAA;AAC1F,UAAI,CAACZ,eAAeQ,OAAOR,aAAa;AACtC,cAAMzB,MAAM,kDAAkDgC,YAAAA,mBAA+BnB,GAAAA,GAAM;MACrG;IACF;AACAkB,sBAAkBC;EACpB;AACA,QAAMM,eAAeP;AACrB,MAAI,CAACO,cAAc;AACjB,UAAMtC,MAAM,mDAAmD;EACjE;AAGA,QAAMuC,iBAAiB,oBAAIC,IAAI;IAAC;IAAO;IAAO;IAAO;IAAO;IAAO;IAAO;IAAO;GAAM;AACvF,MAAI,CAACpB,mBAAmB;AACtBA,wBAAoBqB,OAAOC,QAAQzD,cAAAA,EAAgB0D,OACjD,CAACC,KAAK,CAAChD,KAAKE,KAAAA,MAAM;AAChB,UACE,CAACyC,eAAeM,IAAIjD,GAAAA,KACpBE,UAAUR,UACVQ,UAAU,MACV,EAAE,OAAOA,UAAU,YAAYA,UAAU,QAAQ2C,OAAOK,KAAKhD,KAAAA,EAAOiD,WAAW,IAC/E;AACAH,YAAIhD,GAAAA,IAAOE;MACb;AACA,aAAO8C;IACT,GACA,CAAC,CAAA;EAEL;AACA,QAAMI,UAAU/D,eAAeO,OAAO,CAACP,eAAeM;AACtD,QAAM0D,aAAqE;IACzE,GAAG;MAAE1D,MAAMyD,UAAU;QAACxD;UAAOP,eAAeM;IAAK;IACjD,GAAG;MAAE,YAAYyD,UAAU,CAAA,IAAK/D,eAAe,UAAA;IAAY;IAC3DmC,mBAAmB;MACjB,GAAGA;MACHE,IAAIC,SAASN;IACf;IACA,GAAIqB,iBAAiBU,UAAU;MAAEV;IAAa,IAAI;MAAEnB,WAAWY;IAAgB;IAC/E,GAAIJ,mBAAmBqB,UAAU;MAAErB;IAAe,IAAI;MAAET,YAAYS;IAAe;IACnFN;IACA,GAAIN,OAAO;MAAEA;IAAI;IACjB,GAAIC,UAAU;MAAEA;IAAO;IACvBkC,OAAO;MACL3D,MAAM4D,WAAWC;MACjBC,SAASrB,gBAAgBM;MACzBgB,cAAcC,cAAcC;MAC5BC,oBAAoB5C;MACpBlC,KAAKgB,QAAQlB;IACf;EACF;AAEA,SAAOwE;AACT,GA9EyD;AAgFzD,IAAMrB,qBAAqB,wBAAC,EAC1BC,UACAC,WACA4B,aAAa,MAAK,MAKnB;AACC,MAAI7B,UAAU;AACZ,UAAM8B,QAAQC,SAAS/B,SAASgC,SAAQ,CAAA;AAExC,WAAO,IAAIzB,KAAKuB,SAASA,QAAQ,aAAa,MAAO,EAAA,EAAIG,YAAW,EAAGC,QAAQ,UAAU,GAAA;EAC3F,WAAWL,YAAY;AACrB,UAAM1D,MAAM,aAAa8B,SAAAA,kCAA2C;EACtE;AACA,SAAOxC;AACT,GAjB2B;;;ACpLpB,IAAK0E,aAAAA,0BAAAA,aAAAA;;;;;SAAAA;;AAOL,IAAKC,yBAAAA,0BAAAA,yBAAAA;;;;;;;;;;;;;;;;SAAAA;;AAkBL,IAAKC,mBAAAA,0BAAAA,mBAAAA;;;;;;;;;SAAAA;;AAWL,IAAKC,YAAAA,0BAAAA,YAAAA;;;;;;;;;;SAAAA;;;;ACpCL,IAAKC,eAAAA,0BAAAA,eAAAA;;;;;;SAAAA;;AAQL,IAAKC,0BAAAA,0BAAAA,0BAAAA;;;;;;;;;;;;;SAAAA;;AAeL,IAAKC,oBAAAA,0BAAAA,oBAAAA;;;;;;;;;;;SAAAA;;AAaL,IAAKC,aAAAA,0BAAAA,aAAAA;;;;;;;;;SAAAA;;;;AChBL,IAAKC,6BAAAA,0BAAAA,6BAAAA;;;SAAAA;;AAML,IAAKC,uBAAAA,0BAAAA,uBAAAA;;SAAAA;;;;ACoBZ,wBAA0B;AAInB,IAAMC,UAAS,wBAACC,SAAAA;AACrB,SAAOC,cAAcD,MAAM,QAAA;AAC7B,GAFsB;AAIf,IAAME,mBAAN,MAAMA,kBAAAA;EA1Bb,OA0BaA;;;;;;;EAKX,OAAOC,mBAAmBC,gBAAwBC,QAA2D;AAC3G,WAAOC,mBAAuBF,gBAAgBC,UAAUN,OAAAA;EAC1D;;;;;;;;;;;EAYA,OAAOQ,6BACLC,cACAH,QAC4I;AAC5I,QAAIH,kBAAiBO,aAAaD,YAAAA,GAAe;AAC/C,YAAME,cAAUC,6BAAUH,YAAAA;AAC1B,YAAMI,aAASD,6BAAUH,cAAwB;QAAEI,QAAQ;MAAK,CAAA;AAEhEF,cAAQG,GAAGC,QAAQ;QACjBC,MAAMC,WAAWC;QACjBC,SAASR,QAAQS;QACjBC,cAAcC,cAAcC;QAC5BC,oBAAoBX,OAAO,KAAA,KAAUF,QAAQc;QAC7CC,KAAKjB;MACP;AACA,aAAOE;IACT,WAAWR,kBAAiBwB,yBAAyBlB,YAAAA,GAAe;AAClE,aAAOA;IACT,WAAWN,kBAAiByB,eAAenB,YAAAA,GAAe;AACxD,aAAOoB,cAAcpB,cAAcH,UAAUN,OAAAA;IAC/C,WAAWG,kBAAiB2B,yBAAyBrB,YAAAA,GAAe;AAClE,aAAOA;IACT,WAAWN,kBAAiB4B,uBAAuBtB,YAAAA,GAAe;AAChE,aAAOA;IACT,WAAWN,kBAAiB6B,6BAA6BvB,YAAAA,GAAe;AACtE,aAAOA;IACT,WAAWN,kBAAiB8B,iBAAiBxB,YAAAA,GAAe;AAC1D,aAAOyB,KAAKC,MAAM1B,YAAAA;IACpB,OAAO;AACL,aAAOA;IACT;EACF;;;;;;;;;;;EAYA,OAAO2B,2BACLC,YACA/B,QAC2F;AAC3F,QAAIH,kBAAiBO,aAAa2B,UAAAA,GAAa;AAC7C,YAAM1B,cAAUC,6BAAUyB,UAAAA;AAC1B,YAAMxB,aAASD,6BAAUyB,YAAsB;QAAExB,QAAQ;MAAK,CAAA;AAC9DF,cAAQ2B,KAAK3B,QAAQ2B,MAAM,CAAC;AAC5B3B,cAAQ2B,GAAGvB,QAAQ;QACjBC,MAAMC,WAAWC;QACjBC,SAASR,QAAQS;QACjBC,cAAcC,cAAcC;QAC5BC,oBAAoBX,OAAO,KAAA,KAAUF,QAAQc;QAC7CC,KAAKW;MACP;AACA,aAAO1B;IACT,WAAWR,kBAAiBoC,uBAAuBF,UAAAA,GAAa;AAC9D,aAAOA;IACT,WAAWlC,kBAAiB8B,iBAAiBI,UAAAA,GAAa;AACxD,aAAOH,KAAKC,MAAME,UAAAA;IACpB,WAAWlC,kBAAiByB,eAAeS,UAAAA,GAAa;AACtD,aAAOR,cAAcQ,YAAY/B,UAAUN,OAAAA;IAC7C,WAAWG,kBAAiB2B,yBAAyBO,UAAAA,GAAa;AAChE,aAAOA;IACT,OAAO;AACL,aAAOA;IACT;EACF;;;;;;;;;;;EAYA,OAAOG,gCACLC,sBACAC,MAC+B;AAE/B,QAAIvC,kBAAiB6B,6BAA6BS,oBAAAA,KAAyBtC,kBAAiB4B,uBAAuBU,oBAAAA,GAAuB;AACxI,UAAIE;AACJ,UAAIC;AACJ,UAAIzC,kBAAiB4B,uBAAuBU,oBAAAA,GAAuB;AACjEE,yBAAiBE,yBAAyBJ,oBAAAA;AAC1CG,uBAAAA;MACF,OAAO;AACLD,yBAAiBF;AACjBG,uBAAAA;MACF;AAEA,YAAME,kBAAkBH,eAAeI,WAAWC,IAChD,CAACC,QAAQ9C,kBAAiB+C,8BAA8BD,KAAKP,IAAAA,CAAAA;AAE/D,UAAI,CAACI,mBAAmBA,gBAAgBK,WAAW,GAAG;AACpD,cAAM,IAAIC,MAAM,kEAAA;MAClB;AAEA,aAAO;QACLpC,MAAM4B;QACNS,QAAQ;QACRC,UAAUb;QACVhC,cAAckC;QACdY,SAASZ;QACTa,KAAKV;MACP;IACF;AAEA,QAAI3C,kBAAiB2B,yBAAyBW,oBAAAA,KAAyBtC,kBAAiByB,eAAea,oBAAAA,GAAuB;AAC5H,UAAIgB;AACJ,UAAItD,kBAAiByB,eAAea,oBAAAA,GAAuB;AACzDgB,8BAAsB5B,cAAcY,sBAAsBC,MAAMpC,UAAUN,OAAAA;MAC5E,OAAO;AACLyD,8BAAsBhB;MACxB;AACA,aAAO;QACLzB,MAAMb,kBAAiB2B,yBAAyBW,oBAAAA,IAAAA,sBAAAA;QAChDY,QAAQ;QACRC,UAAUb;QACVhC,cAAcgD;QACdF,SAASE,oBAAoBC;;QAE7BF,KAAK;UAACrD,kBAAiB+C,8BAA8BT,sBAAsBC,IAAAA;;MAC7E;IACF;AAGA,UAAM3B,QAAQZ,kBAAiBwD,cAAclB,oBAAAA;AAC7C,UAAMa,WACJ,OAAOb,yBAAyB,YAAYtC,kBAAiByD,gBAAgBnB,oBAAAA,IAAwB1B,OAAOW,MAAMe;AACpH,QAAI,CAACa,UAAU;AACb,YAAMF,MACJ,yIAAA;IAEJ;AACA,UAAMG,UAAUpD,kBAAiBK,6BAA6B8C,QAAAA;AAC9D,UAAM5C,eAAwBP,kBAAiBO,aAAa4C,QAAAA;AAC5D,UAAMO,eAAwB1D,kBAAiBwB,yBAAyB2B,QAAAA;AAExE,UAAMtC,OAAON,eAAAA,gBAA0CmD,eAAAA,gBAAAA;AACvD,UAAMR,SAASQ,gBAAgBnD,eAAe,WAAY;AAE1D,QAAII;AACJ,QAAIJ,gBAAgBmD,cAAc;AAChC/C,WAAKX,kBAAiB2D,4CAA4CP,SAA6C,OAAOb,IAAAA;IACxH,OAAO;AACL5B,WAAKyC;IACP;AACA,QAAI,CAACzC,IAAI;AACP,YAAMsC,MAAM,kBAAkB;IAChC;AACA,UAAMW,QAAQ,EAAE,0BAA0BjD,OAAO,CAACA,GAAGkD,wBAAwBlD,GAAGkD,qBAAqBb,WAAW;AAChH,QAAIY,OAAO;AACTE,cAAQC,KAAK,6DAA6D;IAE5E;AACA,UAAMV,MAAMO,QACR,CAAA,IACC5D,kBAAiBgE,+BAChBrD,GAAGkD,wBAAwB,CAAA,GAC3BtB,IAAAA;AAGN,UAAMjC,eAAe;MACnB,GAAGK;MACHkD,sBAAsBR;IACxB;AACA,WAAO;MACLxC;MACAqC;MACAC;MACAC;MACA9C;MACA+C;IACF;EACF;;;;;;;;;;EAWA,OAAOW,+BACLC,uBACA1B,MAC+B;AAC/B,WAAO0B,sBAAsBpB,IAAI,CAACV,OAAOnC,kBAAiB+C,8BAA8BZ,IAAII,IAAAA,CAAAA;EAC9F;;;;;;;;;;EAWA,OAAOQ,8BACLc,sBACAtB,MAC6B;AAE7B,QAAIvC,kBAAiBkE,2BAA2BL,oBAAAA,KAAyB7D,kBAAiB4B,uBAAuBiC,oBAAAA,GAAuB;AACtI,UAAIM;AACJ,UAAInE,kBAAiB4B,uBAAuBiC,oBAAAA,GAAuB;AACjEM,eAAOC,uBAAuBP,oBAAAA;MAChC,OAAO;AACLM,eAAON;MACT;AACA,aAAO;QACLhD,MAAMb,kBAAiBkE,2BAA2BL,oBAAAA,IAAAA,qBAAAA;QAClDX,QAAQ;QACRC,UAAUU;QACV3B,YAAYiC;QACZf,SAASiB,sBAAsBF,IAAAA;MACjC;IACF;AAGA,QAAInE,kBAAiB2B,yBAAyBkC,oBAAAA,KAAyB7D,kBAAiByB,eAAeoC,oBAAAA,GAAuB;AAC5H,UAAIS;AACJ,UAAItE,kBAAiByB,eAAeoC,oBAAAA,GAAuB;AACzD,cAAM1D,SAASoC,MAAMpC,UAAUN;AAC/ByE,4BAAoB5C,cAAcmC,sBAAsB1D,MAAAA;MAC1D,OAAO;AACLmE,4BAAoBT;MACtB;AAEA,aAAO;QACLhD,MAAMb,kBAAiB2B,yBAAyBkC,oBAAAA,IAAAA,sBAAAA;QAChDX,QAAQ;QACRC,UAAUU;QACV3B,YAAYoC;QACZlB,SAASkB,kBAAkBf;MAC7B;IACF;AAGA,UAAM3C,QAAQZ,kBAAiBwD,cAAcK,oBAAAA;AAC7C,UAAMV,WAAWnD,kBAAiByD,gBAAgBI,oBAAAA,KAAyBjD,QAASA,MAAMW,OAAOsC,uBAAwBA;AACzH,QAAI,CAACV,UAAU;AACb,YAAMF,MACJ,qIAAA;IAEJ;AACA,UAAMG,UAAUpD,kBAAiBiC,2BAA2BkB,QAAAA;AAE5D,UAAM5C,eAAeP,kBAAiBO,aAAa4C,QAAAA;AACnD,UAAMO,eAAe1D,kBAAiBoC,uBAAuBe,QAAAA;AAC7D,UAAMtC,OAAON,eAAAA,gBAA0CmD,eAAAA,gBAAAA;AAEvD,UAAMxB,aACJ3B,gBAAgBmD,eACZ1D,kBAAiBuE,wCAAwCnB,SAA2Cb,IAAAA,IACnGa;AAEP,UAAMF,SAAS3C,gBAAgBmD,eAAgB,WAAsB;AACrE,WAAO;MACLP;MACAC;MACAF;MACArC;MACAqB;IACF;EACF;EAEA,OAAc3B,aAAa4C,UAA6F;AACtH,WAAOqB,YAAYC,SAAStB,QAAAA,KAAaA,SAASuB,WAAW,IAAA,KAAS,CAACvB,SAASwB,SAAS,GAAA;EAC3F;EAEA,OAAclD,eAAe0B,UAA6F;AACxH,WAAOqB,YAAYC,SAAStB,QAAAA,KAAaA,SAASuB,WAAW,IAAA,KAASvB,SAASwB,SAAS,GAAA;EAC1F;EAEA,OAAc/C,uBAAuBuB,UAA6F;AAChI,WAAOqB,YAAYC,SAAStB,QAAAA,KAAa,CAACA,SAASuB,WAAW,IAAA,KAASF,YAAYI,SAASzB,QAAAA;EAC9F;EAEA,OAAc0B,gBAAgB3C,YAAsG;AAClI,WAAO,OAAOA,eAAe,YAAY,cAAcA,eAAgBA,WAA2BrB,MAAM8D,SAAS,sBAAA,KAA2B;EAC9I;EAEA,OAAcG,aAAa3B,UAAmH;AAC5I,QAAI;AACF,UAAInD,kBAAiBO,aAAa4C,QAAAA,GAAW;AAC3C,cAAMhB,KAA4BnC,kBAAiB+E,oBAAoB5B,QAAAA;AACvE,eAAOnD,kBAAiB6E,gBAAgB1C,EAAAA;MAC1C,WAAWnC,kBAAiByB,eAAe0B,QAAAA,GAAW;AACpD,eAAO;MACT,WAAWnD,kBAAiBkE,2BAA2Bf,QAAAA,GAAW;AAChE,eAAO;MACT,WAAWnD,kBAAiB4B,uBAAuBuB,QAAAA,GAAW;AAC5D,eAAO;MACT;AACA,aACEnD,kBAAiB6E,gBAAgB1B,QAAAA,KACjCnD,kBAAiBgF,gCAAgC7B,QAAAA,KACjDnD,kBAAiBoC,uBAAuBe,QAAAA,KACxCnD,kBAAiB2B,yBAAyBwB,QAAAA;IAE9C,SAAS8B,GAAG;AACV,aAAO;IACT;EACF;EAEA,OAAcC,eAAe/B,UAAqH;AAChJ,QAAI;AACF,UAAInD,kBAAiBO,aAAa4C,QAAAA,GAAW;AAC3C,cAAMxC,KAA8BX,kBAAiBmF,sBAAsBhC,QAAAA;AAC3E,eAAOnD,kBAAiBoF,kBAAkBzE,EAAAA;MAC5C,WAAWX,kBAAiByB,eAAe0B,QAAAA,GAAW;AACpD,eAAO;MAET,WAAWnD,kBAAiB6B,6BAA6BsB,QAAAA,GAAW;AAClE,eAAO;MACT,WAAWnD,kBAAiB4B,uBAAuBuB,QAAAA,GAAW;AAC5D,eAAO;MACT;AACA,aACEnD,kBAAiBoF,kBAAkBjC,QAAAA,KACnCnD,kBAAiBgF,gCAAgC7B,QAAAA,KACjDnD,kBAAiBwB,yBAAyB2B,QAAAA,KAC1CnD,kBAAiB2B,yBAAyBwB,QAAAA;IAE9C,SAAS8B,GAAG;AACV,aAAO;IACT;EACF;EAEA,OAAcI,SAASlC,UAA2F;AAChH,QAAI;AACF,UAAInD,kBAAiB4B,uBAAuBuB,QAAAA,GAAW;AACrD,eAAO;MAET,WAAWnD,kBAAiBkE,2BAA2Bf,QAAAA,KAAanD,kBAAiB6B,6BAA6BsB,QAAAA,GAAW;AAC3H,eAAO;MACT,WAAWnD,kBAAiBO,aAAa4C,QAAAA,KAAanD,kBAAiBoC,uBAAuBe,QAAAA,GAA2C;AACvI,eAAO;MACT,WAAWnD,kBAAiByB,eAAe0B,QAAAA,KAAanD,kBAAiB2B,yBAAyBwB,QAAAA,GAAW;AAE3G,eAAO;MACT;AACA,UAAI,OAAOA,aAAa,UAAU;AAChC,eAAO;MACT;AACA,UAAI,QAASA,YAAgDA,SAA4ChB,GAAGvB,OAAO;AACjH,eAAO;MACT;AACA,UAAI,QAASuC,YAAkDA,SAA8CxC,GAAGC,OAAO;AACrH,eAAO;MACT;AACA,aAAO,CAAC,CAAEuC,SAA6DvC;IACzE,SAASqE,GAAG;AACV,aAAO;IACT;EACF;EAEA,OAAcG,kBACZ9E,cAC+B;AAC/B,WACE,OAAOA,iBAAiB,YACxB,cAAcA,iBACZA,aAA+BO,MAAM8D,SAAS,wBAAA,KAA6B;EAEjF;EAEA,OAAcK,gCACZ9C,YACuD;AACvD,WAAO,OAAOA,eAAe,YAAY,SAASA;EACpD;EAEA,OAAcoD,sCAAsCC,eAA6CC,gBAA8C;AAE7I,QAAI,OAAOD,kBAAkB,YAAY,OAAOC,mBAAmB,UAAU;AAC3E,aAAOD,kBAAkBC;IAC3B,WAAWxF,kBAAiBkE,2BAA2BqB,aAAAA,KAAkBvF,kBAAiBkE,2BAA2BsB,cAAAA,GAAiB;AACpI,UAAI,CAACxF,kBAAiBkE,2BAA2BqB,aAAAA,KAAkB,CAACvF,kBAAiBkE,2BAA2BsB,cAAAA,GAAiB;AAE/H,eAAO;MACT;AAKA,aAAOD,cAAcE,aAAaC,OAAOF,eAAeC,YAAY;IACtE,WAAWzF,kBAAiB2B,yBAAyB4D,aAAAA,KAAkBvF,kBAAiB2B,yBAAyB6D,cAAAA,GAAiB;AAChI,aAAOD,cAAcrF,mBAAmBsF,eAAetF;IACzD,OAAO;AAEL,aAAO6B,KAAK4D,UAAUH,eAAe5E,KAAK,MAAMmB,KAAK4D,UAAUJ,cAAc3E,KAAK;IACpF;EACF;EAEA,OAAckB,iBAAiBqB,UAA6F;AAC1H,WAAOqB,YAAYC,SAAStB,QAAAA,KAAaA,SAASwB,SAAS,UAAA;EAC7D;EAEA,OAAchD,yBACZwB,UAC8C;AAC9C,WACE,OAAOA,aAAa,aACgBA,SAAUjD,mBAAmB0F,UAAgDzC,SAAU0C,UAAUD;EAEzI;EAEA,OAAcE,8BACZ3C,UAC8C;AAC9C,QAAI,OAAOA,aAAa,UAAU;AAChC,aAAO;IACT;AACA,UAAMC,UAA4CD;AAClD,WAAOC,QAAQlD,mBAAmB0F,UAAa,CAACxC,QAAQG,eAAewC,OAAO,CAAC3C,QAAQG,eAAe,UAAA;EACxG;EAEA,OAAcW,2BACZf,UAC0B;AAC1B,WAAO,OAAOA,aAAa,YAAY,kBAAkBA,YAA2BA,SAAUsC,iBAAiBG;EACjH;EAEA,OAAc/D,6BAA6BsB,UAA0E;AACnH,WAAO,OAAOA,aAAa,YAAY,aAAaA,YAAiCA,SAAU6C,YAAYJ;EAC7G;EAEA,OAAcxD,uBAAuBe,UAAoF;AACvH,WACE,OAAOA,aAAa,YACaA,SAAUhB,OAAOyD,UACjBzC,SAAU7B,QAAQsE;EAEvD;EAEA,OAAcpE,yBAAyB2B,UAAwF;AAC7H,WACE,OAAOA,aAAa,YACeA,SAAUxC,OAAOiF,UACjBzC,SAAU7B,QAAQsE;EAEzD;EAEA,OAAcK,qCAAqCA;EACnD,OAAcC,uCAAuCA;EACrD,OAAcC,mCAAmCA;EACjD,OAAcC,qCAAqCA;EACnD,OAAcC,0BAA0BA;EACxC,OAAcC,4BAA4BA;EAE1C,OAAOC,4CACLhF,KACAiF,yBAAkC,MAClCjE,MACe;AACf,WAAOvC,kBAAiB2D,gDAA4ClD,6BAAUc,GAAAA,GAAMiF,wBAAwBjE,IAAAA;EAC9G;EAEA,OAAOoB,4CACLP,SACAoD,yBAAkC,MAClCjE,MACyB;AACzB,UAAM,EAAEjB,KAAKmF,KAAKC,KAAK/F,IAAI,GAAGgG,KAAAA,IAASvD;AAEvC,UAAM9C,eAAwC;MAC5C,GAAGqG;MACH,GAAGhG;IACL;AACA,QAAI6F,wBAAwB;AAC1B,UAAI,CAAC7F,GAAGkD,sBAAsB;AAC5B,cAAMZ,MAAM,2EAAA;MACd;AACA3C,mBAAauD,uBAAuBlD,GAAGkD,qBAAqBhB,IAAI,CAACV,OAAOnC,kBAAiB+E,oBAAoB5C,IAAII,IAAAA,CAAAA;IACnH;AACA,QAAIjB,KAAK;AACP,YAAMsF,SAAStG,aAAasG;AAC5B,UAAIA,QAAQ;AACV,YAAIA,WAAWtF,KAAK;AAClB,gBAAM,IAAI2B,MAAM,2CAA2C3B,GAAAA,mBAAsBsF,MAAAA,GAAS;QAC5F;MACF;AACAtG,mBAAasG,SAAStF;IACxB;AACA,QAAImF,KAAK;AACP,YAAMI,WAAWvG,aAAauG;AAC9B,UAAIA,UAAU;AACZ,YAAIA,aAAaJ,KAAK;AACpB,gBAAM,IAAIxD,MAAM,2CAA2CwD,GAAAA,mBAAsBI,QAAAA,GAAW;QAC9F;MACF;AACAvG,mBAAauG,WAAWJ;IAC1B;AACA,QAAIC,KAAK;AACP,YAAMI,KAAKxG,aAAawG;AACxB,UAAIA,MAAMA,OAAOJ,KAAK;AACpB,cAAM,IAAIzD,MAAM,0CAA0CyD,GAAAA,mBAAsBI,EAAAA,GAAK;MACvF;AACAxG,mBAAawG,KAAKJ;IACpB;AACA,WAAOpG;EACT;EAEA,OAAOyE,oBACLlB,sBACAtB,MAIuB;AACvB,QAAIvC,kBAAiBkE,2BAA2BL,oBAAAA,GAAuB;AACrE,aAAOkD,yCAAyClD,oBAAAA;IAClD;AACA,QAAI7D,kBAAiB2B,yBAAyBkC,oBAAAA,GAAuB;AACnE,aAAOmD,0CAA0CnD,sBAAsBtB,IAAAA;IACzE;AACA,UAAMY,WACJ,OAAOU,yBAAyB,YAAY7D,kBAAiByD,gBAAgBI,oBAAAA,IACzE7D,kBAAiBwD,cAAcK,oBAAAA,GAAuBtC,MACtDsC;AACN,QAAI,CAACV,UAAU;AACb,YAAMF,MACJ,oJAAA;IAEJ;AACA,UAAMG,UAAUpD,kBAAiBiC,2BAA2BkB,UAAUZ,MAAMpC,UAAUN,OAAAA;AAEtF,UAAMU,eAAwBP,kBAAiBO,aAAa4C,QAAAA;AAC5D,UAAMO,eAAwB1D,kBAAiBoC,uBAAuBe,QAAAA;AACtE,UAAM1B,iBAAiBzB,kBAAiByB,eAAe0B,QAAAA;AACvD,UAAM8D,gBAAgBjH,kBAAiB4B,uBAAuBuB,QAAAA;AAE9D,QAAI1B,gBAAgB;AAClB,aAAOuF,0CAA0C5D,SAA6Cb,IAAAA;IAChG,WAAW0E,eAAe;AACxB,aAAOF,yCAAyC3C,uBAAuBjB,QAAAA,CAAAA;IACzE,WAAWO,gBAAgBnD,cAAc;AACvC,aAAOP,kBAAiBuE,wCAAwCnB,SAA2Cb,IAAAA;IAC7G,OAAO;AACL,aAAOa;IACT;EACF;EAEA,OAAO+B,sBACL7E,cACAiC,MACyB;AACzB,QAAIvC,kBAAiB2B,yBAAyBrB,YAAAA,GAAe;AAC3D,YAAM,IAAI2C,MAAM,sDAAA;IAClB,WAAWjD,kBAAiB6B,6BAA6BvB,YAAAA,GAAe;AACtE,YAAM,IAAI2C,MAAM,yDAAA;IAClB;AAEA,UAAMrC,QAAQZ,kBAAiBwD,cAAclD,YAAAA;AAC7C,UAAM6C,WAAW,OAAO7C,iBAAiB,YAAYN,kBAAiByD,gBAAgBnD,YAAAA,IAAgBM,OAAOW,MAAMjB;AACnH,QAAI,CAAC6C,UAAU;AACb,YAAMF,MACJ,yIAAA;IAEJ;AACA,UAAMG,UAAUpD,kBAAiBK,6BAA6B8C,UAAUZ,MAAMpC,UAAUN,OAAAA;AACxF,UAAMU,eAAwBP,kBAAiBO,aAAa4C,QAAAA;AAC5D,UAAMO,eAAwB1D,kBAAiBwB,yBAAyB2B,QAAAA;AACxE,UAAM+D,sBACJ3G,gBAAgBmD,eACZ1D,kBAAiB2D,4CAA4CP,SAA6C,KAAA,IACzGA;AAGP,QAAIb,MAAM4E,uBAAuB,CAACD,oBAAoB,UAAA,GAAa;AACjEA,0BAAoB,UAAA,IAAc;QAAC;;IACrC;AAEAA,wBAAoBrD,uBAAuBqD,oBAAoBrD,sBAAsBhB,IAAI,CAACV,OACxFnC,kBAAiB+E,oBAAoB5C,IAAII,IAAAA,CAAAA;AAE3C,WAAO2E;EACT;EAEA,OAAOE,wCACL7F,KACAgB,MAGuB;AACvB,WAAOvC,kBAAiBuE,4CAAwC9D,6BAAUc,GAAAA,GAAMgB,IAAAA;EAClF;EAEA,OAAOgC,wCACLnB,SACAb,MACuB;AACvB,UAAM,EAAE8E,KAAKpG,KAAKK,KAAKa,IAAImF,KAAKZ,KAAK,GAAGC,KAAAA,IAASvD;AACjD,UAAMlB,aAAoC;MACxC,GAAGyE;MACH,GAAGxE;IACL;AAEA,UAAMoF,cAAchF,MAAMiF,mBAAmB;AAE7C,QAAIH,KAAK;AACP,YAAMI,UAAUvF,WAAWwF;AAC3B,YAAMC,SAASC,SAASP,IAAIQ,SAAQ,CAAA;AAEpC,YAAMC,eAAeH,SAAS,aAAa,IAAII,KAAKJ,SAAS,GAAA,EAAMK,YAAW,EAAGC,QAAQ,UAAU,GAAA,IAAO,IAAIF,KAAKJ,MAAAA,EAAQK,YAAW;AACtI,UAAIP,WAAWA,YAAYK,cAAc;AACvC,cAAMI,OAAOC,KAAKC,IAAI,IAAIL,KAAKD,YAAAA,EAAcO,QAAO,IAAK,IAAIN,KAAKN,OAAAA,EAASY,QAAO,CAAA;AAClF,YAAI,CAACd,eAAeW,OAAOX,aAAa;AACtC,gBAAM,IAAItE,MAAM,oDAAoD6E,YAAAA,mBAA+BL,OAAAA,GAAU;QAC/G;MACF;AACAvF,iBAAWwF,iBAAiBI;IAC9B;AAEA,QAAI7G,KAAK;AACP,YAAMqH,eAAepG,WAAWoG;AAChC,YAAMC,SAASX,SAAS3G,IAAI4G,SAAQ,CAAA;AAEpC,YAAMW,eAAeD,SAAS,aAAa,IAAIR,KAAKQ,SAAS,GAAA,EAAMP,YAAW,EAAGC,QAAQ,UAAU,GAAA,IAAO,IAAIF,KAAKQ,MAAAA,EAAQP,YAAW;AACtI,UAAIM,gBAAgBA,iBAAiBE,cAAc;AACjD,cAAMN,OAAOC,KAAKC,IAAI,IAAIL,KAAKS,YAAAA,EAAcH,QAAO,IAAK,IAAIN,KAAKO,YAAAA,EAAcD,QAAO,CAAA;AACvF,YAAI,CAACd,eAAeW,OAAOX,aAAa;AACtC,gBAAM,IAAItE,MAAM,kDAAkDuF,YAAAA,mBAA+BF,YAAAA,GAAe;QAClH;MACF;AACApG,iBAAWoG,eAAeE;IAC5B;AAEA,QAAIlH,KAAK;AACP,YAAMmH,SAASvG,WAAWuG;AAC1B,UAAIA,QAAQ;AACV,YAAI,OAAOA,WAAW,UAAU;AAC9B,cAAIA,WAAWnH,KAAK;AAClB,kBAAM,IAAI2B,MAAM,2CAA2C3B,GAAAA,mBAAsBmH,MAAAA,GAAS;UAC5F;QACF,OAAO;AACL,cAAI,CAACA,OAAO3B,MAAM4B,OAAOC,KAAKF,MAAAA,EAAQzF,SAAS,GAAG;AAGhDyF,mBAAO3B,KAAKxF;UACd;AACA,cAAImH,OAAO3B,OAAOxF,KAAK;AACrB,kBAAM,IAAI2B,MAAM,2CAA2C3B,GAAAA,mBAAsBmH,OAAO3B,EAAE,GAAG;UAC/F;QACF;MACF,OAAO;AACL5E,mBAAWuG,SAASnH;MACtB;IACF;AAEA,QAAIgG,KAAK;AACP,YAAMsB,WAAWC,MAAMC,QAAQ5G,WAAW6G,iBAAiB,IAAI7G,WAAW6G,oBAAoB;QAAC7G,WAAW6G;;AAC1G,eAASC,IAAI,GAAGA,IAAIJ,SAAS5F,QAAQgG,KAAK;AACxC,cAAMC,OAAOL,SAASI,CAAAA,EAAGlC;AACzB,YAAImC,QAAQA,SAAS3B,KAAK;AACxB,gBAAM,IAAIrE,MAAM,0DAA0DqE,GAAAA,mBAAsB2B,IAAAA,GAAO;QACzG;AACAJ,cAAMC,QAAQ5G,WAAW6G,iBAAiB,IAAK7G,WAAW6G,kBAAkBC,CAAAA,EAAGlC,KAAKQ,MAAQpF,WAAW6G,kBAAkBjC,KAAKQ;MAChI;IACF;AACA,QAAIZ,KAAK;AACP,YAAMI,KAAK5E,WAAW4E;AACtB,UAAIA,MAAMA,OAAOJ,KAAK;AACpB,cAAM,IAAIzD,MAAM,kDAAkDyD,GAAAA,mBAAsBI,EAAAA,GAAK;MAC/F;AACA5E,iBAAW4E,KAAKJ;IAClB;AAEA,WAAOxE;EACT;EAEA,OAAOgH,+BAA+BrF,sBAAkD;AACtF,QAAIjD;AACJ,QAAIiD,qBAAqBjD,OAAO;AAC9B,UAAI,CAACiD,qBAAqBjD,MAAMC,MAAM;AACpC,cAAM,IAAIoC,MAAM,+CAAA;MAClB;AAEA,UAAI,CAACY,qBAAqBjD,MAAMI,SAAS;AACvC,cAAM,IAAIiC,MAAM,uDAAA;MAClB;AAEA,UAAI,CAACY,qBAAqBjD,MAAMM,cAAc;AAC5C,cAAM,IAAI+B,MAAM,wDAAA;MAClB;AAEA,UAAI,CAACY,qBAAqBjD,MAAMS,oBAAoB;AAClD,cAAM,IAAI4B,MAAM,8DAAA;MAClB;AACArC,cAAQ;QACN,GAAGiD,qBAAqBjD;QACxBC,MAAMgD,qBAAqBjD,MAAMC;QACjCG,SAAS6C,qBAAqBjD,MAAMI;QACpCE,cAAc2C,qBAAqBjD,MAAMM;QACzCG,oBAAoBwC,qBAAqBjD,MAAMS;MACjD;IACF;AAEA,WAAO;MACL,GAAGwC;MACHhD,MAAMgD,qBAAqBhD,OACvB,OAAOgD,qBAAqBhD,SAAS,WACnC;QAACgD,qBAAqBhD;UACtBgD,qBAAqBhD,OACvB;QAAC;;MACLD;IACF;EACF;EAEA,OAAOuI,iCAAiCjH,YAAmE;AACzG,UAAMrB,OAAuBb,kBAAiBoJ,mBAAmBlH,UAAAA;AACjE,QAAI,OAAOA,eAAe,UAAU;AAClC,UAAIrB,SAAAA,GAA6B;AAC/B,eAAOb,kBAAiBqJ,aAAanH,UAAAA;MACvC,WAAWrB,SAAAA,GAAgC;AACzC,eAAOkB,KAAKC,MAAME,UAAAA;MACpB,WAAWrB,SAAAA,GAAmC;AAC5C,eAAOqB;MACT;IACF,WAAWrB,SAAAA,KAA+B2D,YAAY8E,SAASpH,UAAAA,KAAe,QAAQA,YAAY;AAChG,aAAOlC,kBAAiBqJ,aAAanH,UAAAA;IACvC,WAAWsC,YAAY8E,SAASpH,UAAAA,KAAe,WAAWA,cAAcA,WAAWtB,MAAMC,SAAS,kBAAkBqB,WAAWtB,MAAMW,KAAK;AACxI,aAAOW,WAAWtB,MAAMW;IAC1B,WACEiD,YAAY8E,SAASpH,UAAAA,KACrB,WAAWA,cACXA,WAAWtB,MAAMC,SAASC,WAAWyI,kBACrCrH,WAAWtB,MAAMW,KACjB;AACA,aAAOW,WAAWtB,MAAMW;IAC1B,WAAWV,SAAAA,KAAqC,KAAKc,yBAAyBO,UAAAA,GAAa;AACzF,aAAOA,WAAWhC;IACpB;AACA,WAAOgC;EACT;EAEA,OAAOsH,mCAAmClJ,cAAyE;AACjH,UAAMO,OAAuBb,kBAAiBoJ,mBAAmB9I,YAAAA;AACjE,QAAI,OAAOA,iBAAiB,UAAU;AACpC,UAAIO,SAAAA,GAA6B;AAC/B,eAAOb,kBAAiBqJ,aAAa/I,YAAAA;MACvC,WAAWO,SAAAA,GAAgC;AACzC,eAAOkB,KAAKC,MAAM1B,YAAAA;MACpB;IACF,WAAWO,SAAAA,KAA+B2D,YAAY8E,SAAShJ,YAAAA,KAAiB,QAAQA,cAAc;AACpG,aAAON,kBAAiBqJ,aAAa/I,YAAAA;IACvC,WACEkE,YAAY8E,SAAShJ,YAAAA,KACrB,WAAWA,gBACXA,aAAaM,MAAMC,SAAS,kBAC5BP,aAAaM,MAAMW,KACnB;AACA,aAAOjB,aAAaM,MAAMW;IAC5B;AACA,WAAOjB;EACT;EAEA,OAAO+I,aACLI,aACQ;AACR,QAAI,CAACA,eAAezJ,kBAAiBoJ,mBAAmBK,WAAAA,MAAAA,GAAqC;AAC3F,YAAMxG,MAAM,0CAAA;IACd;AACA,QAAI,OAAOwG,gBAAgB,UAAU;AACnC,aAAOA;IACT;AACA,QAAI7I;AACJ,QAAI4D,YAAY8E,SAASG,WAAAA,KAAgB,QAAQA,aAAa;AAC5D7I,cAAQ,SAAS6I,YAAY9I,GAAGC,QAAQ6I,YAAY9I,GAAGC,MAAMW,MAAMkI,YAAY9I,GAAGC;IACpF,WAAW4D,YAAY8E,SAASG,WAAAA,KAAgB,QAAQA,aAAa;AACnE7I,cAAQ,SAAS6I,YAAYtH,GAAGvB,QAAQ6I,YAAYtH,GAAGvB,MAAMW,MAAMkI,YAAYtH,GAAGvB;IACpF,OAAO;AACLA,cAAQiI,MAAMC,QAAQW,YAAY7I,KAAK,IAAI6I,YAAY7I,MAAM,CAAA,EAAGW,MAAMkI,YAAY7I,MAAMW;IAC1F;AACA,QAAI,CAACX,OAAO;AACV,YAAMqC,MAAM,0CAA0C;IACxD;AACA,WAAOrC;EACT;EAEA,OAAOwI,mBACLM,UAQgB;AAChB,QAAI,KAAK9H,uBAAuB8H,QAAAA,KAAoB,KAAKxF,2BAA2BwF,QAAAA,GAAkB;AACpG,aAAA;IACF,WAAW,KAAK7H,6BAA6B6H,QAAAA,KAAoB,KAAK7H,6BAA6B6H,QAAAA,GAAkB;AACnH,aAAA;IACF,WAAW,KAAK5H,iBAAiB4H,QAAAA,GAAW;AAC1C,aAAA;IACF,WAAW,KAAKnJ,aAAamJ,QAAAA,GAAW;AACtC,aAAA;IACF,WAAW,KAAKjI,eAAeiI,QAAAA,KAAa,KAAK/H,yBAAyB+H,QAAAA,GAAkB;AAC1F,aAAA;IACF;AAEA,UAAMC,SACJ,OAAOD,aAAa,aACnB,QAAQA,WAAWA,SAASvH,GAAGvB,QAAQ,QAAQ8I,WAAWA,SAAS/I,GAAGC,QAAgC8I,SAAU9I;AACnH,UAAMA,QAAgBiI,MAAMC,QAAQa,MAAAA,IAAUA,OAAO,CAAA,IAAKA;AAE1D,QAAI/I,OAAOW,KAAK;AACd,aAAA;IACF,WAAWX,OAAOC,SAAS,+BAA+B;AACxD,aAAA;IACF;AACA,WAAA;EACF;EAEA,OAAe4C,gBACbiG,UACS;AACT,QAAI,OAAOA,aAAa,UAAU;AAChC,aAAO;IACT;AACA,WAAO,CAAC,CAAC1J,kBAAiBwD,cAAckG,QAAAA,GAAWnI;EACrD;EAEA,OAAeiC,cACbkG,UACoB;AACpB,QAAI,CAACA,YAAY,OAAOA,aAAa,UAAU;AAC7C,aAAO9D;IACT;AACA,UAAM+D,SAAS,QAAQD,WAAWA,SAASvH,GAAGvB,QAAQ,QAAQ8I,WAAWA,SAAS/I,GAAGC,QAAgC8I,SAAU9I;AAC/H,WAAOiI,MAAMC,QAAQa,MAAAA,IAAUA,OAAO,CAAA,IAAKA;EAC7C;EAEA,OAAOC,kCAAkCnB,QAA4B;AACnE,QAAIA,WAAW7C,QAAW;AACxB,YAAM,IAAI3C,MAAM,0BAAA;IAClB,WAAW,OAAOwF,WAAW,UAAU;AACrC,aAAOA;IACT,WAAW,OAAOA,WAAW,UAAU;AACrC,UAAI,QAAQA,QAAQ;AAClB,eAAOA,OAAO3B;MAChB,OAAO;AACL,cAAM,IAAI7D,MAAM,2DAAA;MAClB;IACF,OAAO;AACL,YAAM,IAAIA,MAAM,qBAAA;IAClB;EACF;AACF;AAEO,SAASgD,mCAAmC9D,IAA+B;AAChF,SAAOA,GAAGe,WAAW;AACvB;AAFgB+C;AAIT,SAASC,qCAAqCvF,IAAiC;AACpF,SAAOA,GAAGuC,WAAW;AACvB;AAFgBgD;AAIT,IAAK2D,eAAAA,0BAAAA,eAAAA;;;;;;;;SAAAA;;AAcL,IAAMC,sBAAsB;AAE5B,IAAKC,iBAAAA,0BAAAA,iBAAAA;;;;;;SAAAA;;;;AC17BL,IAAMC,wBAAwB,wBAACC,UAAAA;AACpC,MAAI,CAACA,SAAS,CAACC,YAAYC,SAASF,KAAAA,KAAUG,MAAMC,QAAQJ,KAAAA,GAAQ;AAClE,WAAO;EACT;AACA,QAAMK,OAAOC,OAAOD,KAAKL,KAAAA;AACzB,MAAIK,KAAKE,WAAW,GAAG;AACrB,WAAO;EACT,WAAW,EAAE,cAAcP,SAAS,CAAC,CAACA,MAAMQ,WAAW;AACrD,WAAO;EACT,WAAW,EAAE,WAAWR,SAAS,CAAC,CAACA,MAAMS,QAAQ;AAC/C,WAAO;EACT;AACA,SAAO;AACT,GAbqC;AAe9B,IAAMC,yBAAyB,wBAACV,UAAAA;AACrC,MAAI,CAACA,SAAS,CAACG,MAAMC,QAAQJ,KAAAA,GAAQ;AACnC,WAAO;EACT;AACA,SAAOA,MAAMW,MAAM,CAACC,QAAQb,sBAAsBa,GAAAA,CAAAA;AACpD,GALsC;AAO/B,IAAMC,wBAAwB,wBAACb,UAAAA;AACpC,SAAOD,sBAAsBC,KAAAA,IAASA,QAAQc;AAChD,GAFqC;AAI9B,IAAMC,yBAAyB,wBAACf,UAAAA;AACrC,MAAID,sBAAsBC,KAAAA,GAAQ;AAChC,WAAOC,YAAYe,QAAQH,sBAAsBb,KAAAA,CAAAA;EACnD,WAAWU,uBAAuBV,KAAAA,GAAQ;AACxC,WAAOA;EACT;AACA,SAAOc;AACT,GAPsC;AAS/B,IAAMG,mBAAmB,wBAC9BjB,OACAkB,SAAAA;AAKA,QAAMC,aAAaJ,uBAAuBf,KAAAA;AAC1C,MAAIG,MAAMC,QAAQe,UAAAA,GAAa;AAC7B,QAAIA,WAAWZ,WAAW,GAAG;AAE3B,aAAOP;IACT;AACA,UAAMoB,qBAAqBD,WAAWE,OAAO,CAACT,QAASM,MAAMV,WAAWI,IAAIJ,SAASc,YAAW,EAAGC,SAASL,KAAKV,SAASc,YAAW,CAAA,IAAM,IAAA;AAE3I,QAAIE;AACJ,QAAIJ,mBAAmBb,SAAS,GAAG;AACjCiB,kBAAYJ,mBAAmB,CAAA;IACjC,OAAO;AACL,UAAIF,MAAMO,0BAA0B,OAAO;AAEzC,eAAOzB;MACT;AAEAwB,kBAAYL,WAAW,CAAA;IACzB;AACA,WAAOK,UAAUf;EACnB;AAEA,SAAOT;AACT,GA9BgC;AAgCzB,IAAM0B,oBAAoB,wBAC/BC,oBACAT,SAAAA;AAMA,QAAMU,SAASV,MAAMW,cAAcF,qBAAqBG,KAAKC,MAAMD,KAAKE,UAAUL,kBAAAA,CAAAA;AAClFrB,SAAOD,KAAKsB,kBAAAA,EAAoBM,QAAQ,CAACC,QAAAA;AACvCN,WAAOM,GAAAA,IAAOjB,iBAAiBW,OAAOM,GAAAA,GAAMhB,IAAAA;AAC5C,QAAIjB,YAAYC,SAAS0B,OAAOM,GAAAA,CAAI,KAAK/B,MAAMC,QAAQwB,OAAOM,GAAAA,CAAI,GAAG;AACnEN,aAAOM,GAAAA,IAAOR,kBAAkBE,OAAOM,GAAAA,GAAM;QAAE,GAAGhB;QAAMW,aAAa;MAAK,CAAA;IAC5E;EACF,CAAA;AACA,SAAOD;AACT,GAhBiC;;;AdxEjC,IAAMO,SAASC,QAAQC,QAAQC,IAAI,cAAA;AACnCH,OAAOI,MAAM,6BAA6B;","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"]}
|
|
1
|
+
{"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"]}
|