From bcee21ce5da50bf8468fc70f67d91b863253311f Mon Sep 17 00:00:00 2001 From: sanderPostma Date: Thu, 29 Aug 2024 11:50:04 +0200 Subject: [PATCH 01/21] chore: MsoMdocOid4VPEncoded support with throw error disabled --- .../didRestrictionEvaluationHandler.ts | 6 +- package.json | 2 +- pnpm-lock.yaml | 55 +++++++++++++++++-- 3 files changed, 55 insertions(+), 8 deletions(-) diff --git a/lib/evaluation/handlers/didRestrictionEvaluationHandler.ts b/lib/evaluation/handlers/didRestrictionEvaluationHandler.ts index 070b2cec..d442bd86 100644 --- a/lib/evaluation/handlers/didRestrictionEvaluationHandler.ts +++ b/lib/evaluation/handlers/didRestrictionEvaluationHandler.ts @@ -43,9 +43,11 @@ export class DIDRestrictionEvaluationHandler extends AbstractEvaluationHandler { return typeof wrappedVc.credential.issuer === 'object' ? wrappedVc.credential.issuer.id : wrappedVc.credential.issuer; } else if (CredentialMapper.isSdJwtDecodedCredential(wrappedVc.credential)) { return wrappedVc.credential.decodedPayload.iss; + } else if (CredentialMapper.isMsoMdocOid4VPEncoded(wrappedVc.credential) && typeof(wrappedVc.decoded) === 'object') { + return wrappedVc.decoded.iss } - - throw new Error('Unsupported credential type'); + return '' // FIXME Funke + // throw new Error('Unsupported credential type'); } private generateErrorResult(idIdx: number, vcPath: string, wvc: WrappedVerifiableCredential): HandlerCheckResult { diff --git a/package.json b/package.json index 4a66cf1e..cb7e3f37 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@sd-jwt/present": "^0.6.1", "@sd-jwt/types": "^0.6.1", "@sphereon/pex-models": "^2.3.1", - "@sphereon/ssi-types": "0.22.0", + "@sphereon/ssi-types": "0.29.1-unstable.200", "ajv": "^8.12.0", "ajv-formats": "^2.1.1", "jwt-decode": "^3.1.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2d2eda73..32219eca 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,8 +21,8 @@ dependencies: specifier: ^2.3.1 version: 2.3.1 '@sphereon/ssi-types': - specifier: 0.22.0 - version: 0.22.0 + specifier: 0.29.1-unstable.200 + version: 0.29.1-unstable.200 ajv: specifier: ^8.12.0 version: 8.12.0 @@ -795,6 +795,18 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true + /@js-joda/core@5.6.3: + resolution: {integrity: sha512-T1rRxzdqkEXcou0ZprN1q9yDRlvzCPLqmlNt5IIsGBzoEVgLCCYrKEwc84+TvsXuAc95VAZwtWD2zVsKPY4bcA==} + dev: false + + /@js-joda/timezone@2.3.0(@js-joda/core@5.6.3): + resolution: {integrity: sha512-DHXdNs0SydSqC5f0oRJPpTcNfnpRojgBqMCFupQFv6WgeZAjU3DBx+A7JtaGPP3dHrP2Odi2N8Vf+uAm/8ynCQ==} + peerDependencies: + '@js-joda/core': '>=1.11.0' + dependencies: + '@js-joda/core': 5.6.3 + dev: false + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -869,15 +881,28 @@ packages: '@sinonjs/commons': 3.0.1 dev: true + /@sphereon/kmp-mdl-mdoc@0.2.0-SNAPSHOT.22: + resolution: {integrity: sha512-uAZZExVy+ug9JLircejWa5eLtAZ7bnBP6xb7DO2+86LRsHNLh2k2jMWJYxp+iWtGHTsh6RYsZl14ScQLvjiQ/A==} + dependencies: + '@js-joda/core': 5.6.3 + '@js-joda/timezone': 2.3.0(@js-joda/core@5.6.3) + format-util: 1.0.5 + dev: false + /@sphereon/pex-models@2.3.1: resolution: {integrity: sha512-SByU4cJ0XYA6VZQ/L6lsSiRcFtBPHbFioCeQ4GP7/W/jQ+PSBD7uK2oTnKQ9/0iEiMK/6JYqhKgLs4a9UX3UTQ==} dev: false - /@sphereon/ssi-types@0.22.0: - resolution: {integrity: sha512-YPJAZlKmzNALXK8ohP3ETxj1oVzL4+M9ljj3fD5xrbacvYax1JPCVKc8BWSubGcQckKHPbgbpcS7LYEeghyT9Q==} + /@sphereon/ssi-types@0.29.1-unstable.200: + resolution: {integrity: sha512-TTLiagJJa+GAMw7Cu0nxWRtDlinuJ+DVnVIKkx3bmHAUf7kuN/gLi5j8Ff1TyTWVo7yMyrG9oxihBjaIIr8btw==} dependencies: '@sd-jwt/decode': 0.6.1 + '@sphereon/kmp-mdl-mdoc': 0.2.0-SNAPSHOT.22 + debug: 4.3.6 + events: 3.3.0 jwt-decode: 3.1.2 + transitivePeerDependencies: + - supports-color dev: false /@tokenizer/token@0.3.0: @@ -1705,6 +1730,18 @@ packages: ms: 2.1.2 dev: true + /debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: false + /dedent@1.5.1: resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} peerDependencies: @@ -2183,6 +2220,11 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: false + /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -2329,6 +2371,10 @@ packages: signal-exit: 4.1.0 dev: true + /format-util@1.0.5: + resolution: {integrity: sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg==} + dev: false + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true @@ -3499,7 +3545,6 @@ packages: /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} From eb6e42b4a7eebe9546cf1e3bdb979e1a5de19372 Mon Sep 17 00:00:00 2001 From: sanderPostma Date: Thu, 29 Aug 2024 11:59:44 +0200 Subject: [PATCH 02/21] chore: temp version --- lib/PEX.ts | 12 ++++++++++-- lib/evaluation/evaluationClientWrapper.ts | 1 + .../handlers/didRestrictionEvaluationHandler.ts | 2 +- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/lib/PEX.ts b/lib/PEX.ts index 24328075..3042796d 100644 --- a/lib/PEX.ts +++ b/lib/PEX.ts @@ -107,7 +107,10 @@ export class PEX { // When only one presentation, we also allow it to be present in the VP if (!presentationSubmission && presentationsArray.length === 1 && !generatePresentationSubmission) { - presentationSubmission = wrappedPresentations[0].decoded.presentation_submission; + const decoded = wrappedPresentations[0].decoded; + if('presentation_submission' in decoded) { + presentationSubmission = decoded.presentation_submission; + } if (!presentationSubmission) { throw Error(`Either a presentation submission as part of the VP or provided in options was expected`); } @@ -118,7 +121,10 @@ export class PEX { // TODO: we should probably add support for holder dids in the kb-jwt of an SD-JWT. We can extract this from the // `wrappedPresentation.original.compactKbJwt`, but as HAIP doesn't use dids, we'll leave it for now. const holderDIDs = wrappedPresentations - .map((p) => (CredentialMapper.isW3cPresentation(p.presentation) && p.presentation.holder ? p.presentation.holder : undefined)) + .map((p) => { + // @ts-ignore FIXME Funke - Add DeviceResponseCbor support + return (CredentialMapper.isW3cPresentation(p.presentation) && p.presentation.holder ? p.presentation.holder : undefined); + }) .filter((d): d is string => d !== undefined); const updatedOpts = { @@ -341,6 +347,7 @@ export class PEX { }, } satisfies SdJwtKbJwtInput; + // @ts-ignore FIXME Funke return { ...decoded, kbJwt, @@ -530,6 +537,7 @@ export class PEX { }, } satisfies SdJwtKbJwtInput; + // @ts-ignore FIXME Funke presentation = { ...presentation, kbJwt, diff --git a/lib/evaluation/evaluationClientWrapper.ts b/lib/evaluation/evaluationClientWrapper.ts index dd3f0ef4..bd429ecc 100644 --- a/lib/evaluation/evaluationClientWrapper.ts +++ b/lib/evaluation/evaluationClientWrapper.ts @@ -536,6 +536,7 @@ export class EvaluationClientWrapper { // TODO: we should probably add support for holder dids in the kb-jwt of an SD-JWT. We can extract this from the // `wrappedPresentation.original.compactKbJwt`, but as HAIP doesn't use dids, we'll leave it for now. + // @ts-ignore FIXME Funke - Add DeviceResponseCbor support const holderDIDs = CredentialMapper.isW3cPresentation(vp.presentation) && vp.presentation.holder ? [vp.presentation.holder] : []; // Get the presentation definition only for this descriptor, so we can evaluate it separately diff --git a/lib/evaluation/handlers/didRestrictionEvaluationHandler.ts b/lib/evaluation/handlers/didRestrictionEvaluationHandler.ts index d442bd86..4757d65e 100644 --- a/lib/evaluation/handlers/didRestrictionEvaluationHandler.ts +++ b/lib/evaluation/handlers/didRestrictionEvaluationHandler.ts @@ -44,7 +44,7 @@ export class DIDRestrictionEvaluationHandler extends AbstractEvaluationHandler { } else if (CredentialMapper.isSdJwtDecodedCredential(wrappedVc.credential)) { return wrappedVc.credential.decodedPayload.iss; } else if (CredentialMapper.isMsoMdocOid4VPEncoded(wrappedVc.credential) && typeof(wrappedVc.decoded) === 'object') { - return wrappedVc.decoded.iss + return wrappedVc.decoded.iss ?? '' } return '' // FIXME Funke // throw new Error('Unsupported credential type'); From f72774bb4dfdf6abec865013463c607895b338f9 Mon Sep 17 00:00:00 2001 From: sanderPostma Date: Thu, 29 Aug 2024 12:02:35 +0200 Subject: [PATCH 03/21] chore: temp version --- lib/PEX.ts | 6 +++--- lib/evaluation/evaluationClientWrapper.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/PEX.ts b/lib/PEX.ts index 3042796d..c2471826 100644 --- a/lib/PEX.ts +++ b/lib/PEX.ts @@ -122,7 +122,7 @@ export class PEX { // `wrappedPresentation.original.compactKbJwt`, but as HAIP doesn't use dids, we'll leave it for now. const holderDIDs = wrappedPresentations .map((p) => { - // @ts-ignore FIXME Funke - Add DeviceResponseCbor support + // @ts-expect-error FIXME Funke - Add DeviceResponseCbor support return (CredentialMapper.isW3cPresentation(p.presentation) && p.presentation.holder ? p.presentation.holder : undefined); }) .filter((d): d is string => d !== undefined); @@ -347,7 +347,7 @@ export class PEX { }, } satisfies SdJwtKbJwtInput; - // @ts-ignore FIXME Funke + // @ts-expect-error FIXME Funke return { ...decoded, kbJwt, @@ -537,7 +537,7 @@ export class PEX { }, } satisfies SdJwtKbJwtInput; - // @ts-ignore FIXME Funke + // @ts-expect-error FIXME Funke presentation = { ...presentation, kbJwt, diff --git a/lib/evaluation/evaluationClientWrapper.ts b/lib/evaluation/evaluationClientWrapper.ts index bd429ecc..3d295752 100644 --- a/lib/evaluation/evaluationClientWrapper.ts +++ b/lib/evaluation/evaluationClientWrapper.ts @@ -536,7 +536,7 @@ export class EvaluationClientWrapper { // TODO: we should probably add support for holder dids in the kb-jwt of an SD-JWT. We can extract this from the // `wrappedPresentation.original.compactKbJwt`, but as HAIP doesn't use dids, we'll leave it for now. - // @ts-ignore FIXME Funke - Add DeviceResponseCbor support + // @ts-expect-error FIXME Funke - Add DeviceResponseCbor support const holderDIDs = CredentialMapper.isW3cPresentation(vp.presentation) && vp.presentation.holder ? [vp.presentation.holder] : []; // Get the presentation definition only for this descriptor, so we can evaluate it separately From a2e240ee0668d1a0a520d3cf2c4757decf9dd12b Mon Sep 17 00:00:00 2001 From: sanderPostma Date: Thu, 29 Aug 2024 12:05:34 +0200 Subject: [PATCH 04/21] chore: temp version --- lib/PEX.ts | 110 ++++++++++-------- .../didRestrictionEvaluationHandler.ts | 20 ++-- 2 files changed, 76 insertions(+), 54 deletions(-) diff --git a/lib/PEX.ts b/lib/PEX.ts index c2471826..1ddd4ae9 100644 --- a/lib/PEX.ts +++ b/lib/PEX.ts @@ -1,4 +1,9 @@ -import { Format, PresentationDefinitionV1, PresentationDefinitionV2, PresentationSubmission } from '@sphereon/pex-models'; +import { + Format, + PresentationDefinitionV1, + PresentationDefinitionV2, + PresentationSubmission +} from '@sphereon/pex-models'; import { CompactSdJwtVc, CredentialMapper, @@ -13,7 +18,7 @@ import { W3CVerifiableCredential, W3CVerifiablePresentation, WrappedVerifiableCredential, - WrappedVerifiablePresentation, + WrappedVerifiablePresentation } from '@sphereon/ssi-types'; import { Status } from './ConstraintUtils'; @@ -27,11 +32,24 @@ import { SdJwtDecodedVerifiableCredentialWithKbJwtInput, SdJwtKbJwtInput, VerifiablePresentationFromOpts, - VerifiablePresentationResult, + VerifiablePresentationResult } from './signing'; -import { DiscoveredVersion, IInternalPresentationDefinition, IPresentationDefinition, OrArray, PEVersion, SSITypesBuilder } from './types'; +import { + DiscoveredVersion, + IInternalPresentationDefinition, + IPresentationDefinition, + OrArray, + PEVersion, + SSITypesBuilder +} from './types'; import { calculateSdHash, definitionVersionDiscovery, getSubjectIdsAsString } from './utils'; -import { PresentationDefinitionV1VB, PresentationDefinitionV2VB, PresentationSubmissionVB, Validated, ValidationEngine } from './validation'; +import { + PresentationDefinitionV1VB, + PresentationDefinitionV2VB, + PresentationSubmissionVB, + Validated, + ValidationEngine +} from './validation'; export interface PEXOptions { /** @@ -85,7 +103,7 @@ export class PEX { */ presentationSubmissionLocation?: PresentationSubmissionLocation; generatePresentationSubmission?: boolean; - }, + } ): PresentationEvaluationResults { // We map it to an array for now to make processing on the presentations easier, but before checking against the submission // we will transform it to the original structure (array vs single) so the references in the submission stay correct @@ -100,7 +118,7 @@ export class PEX { const presentationsCopy: OriginalVerifiablePresentation[] = JSON.parse(JSON.stringify(presentationsArray)); const wrappedPresentations: WrappedVerifiablePresentation[] = presentationsCopy.map((p) => - SSITypesBuilder.mapExternalVerifiablePresentationToWrappedVP(p, this.options?.hasher), + SSITypesBuilder.mapExternalVerifiablePresentationToWrappedVP(p, this.options?.hasher) ); let presentationSubmission = opts?.presentationSubmission; @@ -108,7 +126,7 @@ export class PEX { // When only one presentation, we also allow it to be present in the VP if (!presentationSubmission && presentationsArray.length === 1 && !generatePresentationSubmission) { const decoded = wrappedPresentations[0].decoded; - if('presentation_submission' in decoded) { + if ('presentation_submission' in decoded) { presentationSubmission = decoded.presentation_submission; } if (!presentationSubmission) { @@ -131,14 +149,14 @@ export class PEX { ...opts, holderDIDs, presentationSubmission, - generatePresentationSubmission, + generatePresentationSubmission }; const allWvcs = wrappedPresentations.reduce((all, wvp) => [...all, ...wvp.vcs], [] as WrappedVerifiableCredential[]); const result = this._evaluationClientWrapper.evaluatePresentations( pd, Array.isArray(presentations) ? wrappedPresentations : wrappedPresentations[0], - updatedOpts, + updatedOpts ); if (result.areRequiredCredentialsPresent !== Status.ERROR) { @@ -171,11 +189,11 @@ export class PEX { limitDisclosureSignatureSuites?: string[]; restrictToFormats?: Format; restrictToDIDMethods?: string[]; - }, + } ): EvaluationResults { const wrappedVerifiableCredentials: WrappedVerifiableCredential[] = SSITypesBuilder.mapExternalVerifiableCredentialsToWrappedVcs( verifiableCredentials, - this.options?.hasher, + this.options?.hasher ); // TODO: So we have state in the form of this property which is set in the constructor, but we are overwriting it here. We need to retrhink how to instantiate PEX @@ -212,7 +230,7 @@ export class PEX { limitDisclosureSignatureSuites?: string[]; restrictToFormats?: Format; restrictToDIDMethods?: string[]; - }, + } ): SelectResults { const verifiableCredentialCopy = JSON.parse(JSON.stringify(verifiableCredentials)); const pd: IInternalPresentationDefinition = SSITypesBuilder.toInternalPresentationDefinition(presentationDefinition); @@ -221,7 +239,7 @@ export class PEX { return this._evaluationClientWrapper.selectFrom( pd, SSITypesBuilder.mapExternalVerifiableCredentialsToWrappedVcs(verifiableCredentialCopy, this.options?.hasher), - opts, + opts ); } @@ -236,13 +254,13 @@ export class PEX { * or Presentation, which means it will become part of the VP */ presentationSubmissionLocation?: PresentationSubmissionLocation; - }, + } ): PresentationSubmission { const pd: IInternalPresentationDefinition = SSITypesBuilder.toInternalPresentationDefinition(presentationDefinition); return this._evaluationClientWrapper.submissionFrom( pd, SSITypesBuilder.mapExternalVerifiableCredentialsToWrappedVcs(selectedCredentials, this.options?.hasher), - opts, + opts ); } @@ -260,7 +278,7 @@ export class PEX { public presentationFrom( presentationDefinition: IPresentationDefinition, selectedCredentials: OriginalVerifiableCredential[], - opts?: PresentationFromOpts, + opts?: PresentationFromOpts ): PresentationResult { const presentationSubmission = this.presentationSubmissionFrom(presentationDefinition, selectedCredentials, opts); const hasSdJwtCredentials = selectedCredentials.some((c) => CredentialMapper.isSdJwtDecodedCredential(c) || CredentialMapper.isSdJwtEncoded(c)); @@ -278,13 +296,13 @@ export class PEX { ...opts, // We only pass in the submission in case it needs to be included in the presentation presentationSubmission: presentationSubmissionLocation === PresentationSubmissionLocation.PRESENTATION ? presentationSubmission : undefined, - hasher: this.options?.hasher, + hasher: this.options?.hasher }); return { presentation, presentationSubmissionLocation, - presentationSubmission, + presentationSubmission }; } @@ -298,7 +316,7 @@ export class PEX { * Hasher to use when decoding an SD-JWT credential. */ hasher?: Hasher; - }, + } ): IPresentation | SdJwtDecodedVerifiableCredentialWithKbJwtInput { const credentials = Array.isArray(selectedCredentials) ? selectedCredentials : [selectedCredentials]; @@ -338,19 +356,19 @@ export class PEX { const kbJwt = { // alg MUST be set by the signer header: { - typ: 'kb+jwt', + typ: 'kb+jwt' }, // aud MUST be set by the signer or provided by e.g. SIOP/OpenID4VP lib payload: { iat: new Date().getTime(), - sd_hash: sdHash, - }, + sd_hash: sdHash + } } satisfies SdJwtKbJwtInput; // @ts-expect-error FIXME Funke return { ...decoded, - kbJwt, + kbJwt }; } else { if (!selectedCredentials) { @@ -361,7 +379,7 @@ export class PEX { const holders = Array.from(new Set(wVCs.flatMap((wvc) => getSubjectIdsAsString(wvc.credential as ICredential)))); if (holders.length !== 1 && !opts?.holderDID) { console.log( - `We deduced ${holders.length} subject from ${wVCs.length} Verifiable Credentials, and no holder property was given. This might lead to undesired results`, + `We deduced ${holders.length} subject from ${wVCs.length} Verifiable Credentials, and no holder property was given. This might lead to undesired results` ); } const holder = opts?.holderDID ?? (holders.length === 1 ? holders[0] : undefined); @@ -398,7 +416,7 @@ export class PEX { type, holder, ...(!!opts?.presentationSubmission && { presentation_submission: opts.presentationSubmission }), - verifiableCredential, + verifiableCredential }; } } @@ -418,13 +436,13 @@ export class PEX { const validators = []; result.version === PEVersion.v1 ? validators.push({ - bundler: new PresentationDefinitionV1VB('root'), - target: SSITypesBuilder.modelEntityToInternalPresentationDefinitionV1(presentationDefinition as PresentationDefinitionV1), - }) + bundler: new PresentationDefinitionV1VB('root'), + target: SSITypesBuilder.modelEntityToInternalPresentationDefinitionV1(presentationDefinition as PresentationDefinitionV1) + }) : validators.push({ - bundler: new PresentationDefinitionV2VB('root'), - target: SSITypesBuilder.modelEntityInternalPresentationDefinitionV2(presentationDefinition as PresentationDefinitionV2), - }); + bundler: new PresentationDefinitionV2VB('root'), + target: SSITypesBuilder.modelEntityInternalPresentationDefinitionV2(presentationDefinition as PresentationDefinitionV2) + }); return new ValidationEngine().validate(validators); } @@ -439,8 +457,8 @@ export class PEX { return new ValidationEngine().validate([ { bundler: new PresentationSubmissionVB('root'), - target: presentationSubmission, - }, + target: presentationSubmission + } ]); } @@ -465,7 +483,7 @@ export class PEX { presentationDefinition: IPresentationDefinition, selectedCredentials: OriginalVerifiableCredential[], signingCallBack: (callBackParams: PresentationSignCallBackParams) => OrPromise, - opts: VerifiablePresentationFromOpts, + opts: VerifiablePresentationFromOpts ): Promise { const { holderDID, signatureOptions, proofOptions } = opts; @@ -484,15 +502,15 @@ export class PEX { const limitDisclosureSignatureSuites = limitedDisclosureSuites(); const evaluationResult = this.evaluateCredentials(presentationDefinition, selectedCredentials, { holderDIDs, - limitDisclosureSignatureSuites, + limitDisclosureSignatureSuites }); const presentationResult = this.presentationFrom(presentationDefinition, evaluationResult.verifiableCredential, opts); const evaluationResults = this.evaluatePresentation(presentationDefinition, presentationResult.presentation, { limitDisclosureSignatureSuites, ...(presentationResult.presentationSubmissionLocation === PresentationSubmissionLocation.EXTERNAL && { - presentationSubmission: presentationResult.presentationSubmission, - }), + presentationSubmission: presentationResult.presentationSubmission + }) }); if (!evaluationResults.value && selectedCredentials.length === 0) { evaluationResults.value = presentationResult.presentationSubmission; @@ -510,7 +528,7 @@ export class PEX { jws: signatureOptions?.jws, challenge: proofOptions?.challenge, nonce: proofOptions?.nonce, - domain: proofOptions?.domain, + domain: proofOptions?.domain }; let presentation = presentationResult.presentation; @@ -527,41 +545,41 @@ export class PEX { const kbJwt = { // alg MUST be set by the signer header: { - typ: 'kb+jwt', + typ: 'kb+jwt' }, // aud MUST be set by the signer or provided by e.g. SIOP/OpenID4VP lib payload: { iat: new Date().getTime(), nonce: proofOptions?.nonce, - sd_hash: sdHash, - }, + sd_hash: sdHash + } } satisfies SdJwtKbJwtInput; // @ts-expect-error FIXME Funke presentation = { ...presentation, - kbJwt, + kbJwt }; } const callBackParams: PresentationSignCallBackParams = { options: { ...opts, - presentationSubmissionLocation: presentationResult.presentationSubmissionLocation, + presentationSubmissionLocation: presentationResult.presentationSubmissionLocation }, presentation, presentationDefinition, selectedCredentials, proof, presentationSubmission: evaluationResults.value, - evaluationResults, + evaluationResults }; const verifiablePresentation = await signingCallBack(callBackParams); return { verifiablePresentation, presentationSubmissionLocation: presentationResult.presentationSubmissionLocation, - presentationSubmission: evaluationResults.value, + presentationSubmission: evaluationResults.value }; } diff --git a/lib/evaluation/handlers/didRestrictionEvaluationHandler.ts b/lib/evaluation/handlers/didRestrictionEvaluationHandler.ts index 4757d65e..bd4139eb 100644 --- a/lib/evaluation/handlers/didRestrictionEvaluationHandler.ts +++ b/lib/evaluation/handlers/didRestrictionEvaluationHandler.ts @@ -1,7 +1,11 @@ import { CredentialMapper, WrappedVerifiableCredential } from '@sphereon/ssi-types'; import { Status } from '../../ConstraintUtils'; -import { IInternalPresentationDefinition, InternalPresentationDefinitionV1, InternalPresentationDefinitionV2 } from '../../types'; +import { + IInternalPresentationDefinition, + InternalPresentationDefinitionV1, + InternalPresentationDefinitionV2 +} from '../../types'; import PexMessages from '../../types/Messages'; import { isRestrictedDID } from '../../utils'; import { HandlerCheckResult } from '../core'; @@ -43,10 +47,10 @@ export class DIDRestrictionEvaluationHandler extends AbstractEvaluationHandler { return typeof wrappedVc.credential.issuer === 'object' ? wrappedVc.credential.issuer.id : wrappedVc.credential.issuer; } else if (CredentialMapper.isSdJwtDecodedCredential(wrappedVc.credential)) { return wrappedVc.credential.decodedPayload.iss; - } else if (CredentialMapper.isMsoMdocOid4VPEncoded(wrappedVc.credential) && typeof(wrappedVc.decoded) === 'object') { - return wrappedVc.decoded.iss ?? '' + } else if (CredentialMapper.isMsoMdocOid4VPEncoded(wrappedVc.credential) && typeof (wrappedVc.decoded) === 'object') { + return wrappedVc.decoded.iss ?? ''; } - return '' // FIXME Funke + return ''; // FIXME Funke // throw new Error('Unsupported credential type'); } @@ -58,8 +62,8 @@ export class DIDRestrictionEvaluationHandler extends AbstractEvaluationHandler { message: PexMessages.FORMAT_RESTRICTION_DIDNT_PASS, verifiable_credential_path: vcPath, payload: { - format: wvc.format, - }, + format: wvc.format + } }; } @@ -71,8 +75,8 @@ export class DIDRestrictionEvaluationHandler extends AbstractEvaluationHandler { message: message ?? PexMessages.FORMAT_RESTRICTION_PASSED, verifiable_credential_path: vcPath, payload: { - format: wvc.format, - }, + format: wvc.format + } }; } } From 443370ee62c764c0350c343c581d5938da7fbfda Mon Sep 17 00:00:00 2001 From: sanderPostma Date: Thu, 29 Aug 2024 12:07:04 +0200 Subject: [PATCH 05/21] chore: temp version --- lib/PEX.ts | 110 ++++++++---------- .../didRestrictionEvaluationHandler.ts | 16 +-- 2 files changed, 52 insertions(+), 74 deletions(-) diff --git a/lib/PEX.ts b/lib/PEX.ts index 1ddd4ae9..7d22b9f6 100644 --- a/lib/PEX.ts +++ b/lib/PEX.ts @@ -1,9 +1,4 @@ -import { - Format, - PresentationDefinitionV1, - PresentationDefinitionV2, - PresentationSubmission -} from '@sphereon/pex-models'; +import { Format, PresentationDefinitionV1, PresentationDefinitionV2, PresentationSubmission } from '@sphereon/pex-models'; import { CompactSdJwtVc, CredentialMapper, @@ -18,7 +13,7 @@ import { W3CVerifiableCredential, W3CVerifiablePresentation, WrappedVerifiableCredential, - WrappedVerifiablePresentation + WrappedVerifiablePresentation, } from '@sphereon/ssi-types'; import { Status } from './ConstraintUtils'; @@ -32,24 +27,11 @@ import { SdJwtDecodedVerifiableCredentialWithKbJwtInput, SdJwtKbJwtInput, VerifiablePresentationFromOpts, - VerifiablePresentationResult + VerifiablePresentationResult, } from './signing'; -import { - DiscoveredVersion, - IInternalPresentationDefinition, - IPresentationDefinition, - OrArray, - PEVersion, - SSITypesBuilder -} from './types'; +import { DiscoveredVersion, IInternalPresentationDefinition, IPresentationDefinition, OrArray, PEVersion, SSITypesBuilder } from './types'; import { calculateSdHash, definitionVersionDiscovery, getSubjectIdsAsString } from './utils'; -import { - PresentationDefinitionV1VB, - PresentationDefinitionV2VB, - PresentationSubmissionVB, - Validated, - ValidationEngine -} from './validation'; +import { PresentationDefinitionV1VB, PresentationDefinitionV2VB, PresentationSubmissionVB, Validated, ValidationEngine } from './validation'; export interface PEXOptions { /** @@ -103,7 +85,7 @@ export class PEX { */ presentationSubmissionLocation?: PresentationSubmissionLocation; generatePresentationSubmission?: boolean; - } + }, ): PresentationEvaluationResults { // We map it to an array for now to make processing on the presentations easier, but before checking against the submission // we will transform it to the original structure (array vs single) so the references in the submission stay correct @@ -118,7 +100,7 @@ export class PEX { const presentationsCopy: OriginalVerifiablePresentation[] = JSON.parse(JSON.stringify(presentationsArray)); const wrappedPresentations: WrappedVerifiablePresentation[] = presentationsCopy.map((p) => - SSITypesBuilder.mapExternalVerifiablePresentationToWrappedVP(p, this.options?.hasher) + SSITypesBuilder.mapExternalVerifiablePresentationToWrappedVP(p, this.options?.hasher), ); let presentationSubmission = opts?.presentationSubmission; @@ -141,7 +123,7 @@ export class PEX { const holderDIDs = wrappedPresentations .map((p) => { // @ts-expect-error FIXME Funke - Add DeviceResponseCbor support - return (CredentialMapper.isW3cPresentation(p.presentation) && p.presentation.holder ? p.presentation.holder : undefined); + return CredentialMapper.isW3cPresentation(p.presentation) && p.presentation.holder ? p.presentation.holder : undefined; }) .filter((d): d is string => d !== undefined); @@ -149,14 +131,14 @@ export class PEX { ...opts, holderDIDs, presentationSubmission, - generatePresentationSubmission + generatePresentationSubmission, }; const allWvcs = wrappedPresentations.reduce((all, wvp) => [...all, ...wvp.vcs], [] as WrappedVerifiableCredential[]); const result = this._evaluationClientWrapper.evaluatePresentations( pd, Array.isArray(presentations) ? wrappedPresentations : wrappedPresentations[0], - updatedOpts + updatedOpts, ); if (result.areRequiredCredentialsPresent !== Status.ERROR) { @@ -189,11 +171,11 @@ export class PEX { limitDisclosureSignatureSuites?: string[]; restrictToFormats?: Format; restrictToDIDMethods?: string[]; - } + }, ): EvaluationResults { const wrappedVerifiableCredentials: WrappedVerifiableCredential[] = SSITypesBuilder.mapExternalVerifiableCredentialsToWrappedVcs( verifiableCredentials, - this.options?.hasher + this.options?.hasher, ); // TODO: So we have state in the form of this property which is set in the constructor, but we are overwriting it here. We need to retrhink how to instantiate PEX @@ -230,7 +212,7 @@ export class PEX { limitDisclosureSignatureSuites?: string[]; restrictToFormats?: Format; restrictToDIDMethods?: string[]; - } + }, ): SelectResults { const verifiableCredentialCopy = JSON.parse(JSON.stringify(verifiableCredentials)); const pd: IInternalPresentationDefinition = SSITypesBuilder.toInternalPresentationDefinition(presentationDefinition); @@ -239,7 +221,7 @@ export class PEX { return this._evaluationClientWrapper.selectFrom( pd, SSITypesBuilder.mapExternalVerifiableCredentialsToWrappedVcs(verifiableCredentialCopy, this.options?.hasher), - opts + opts, ); } @@ -254,13 +236,13 @@ export class PEX { * or Presentation, which means it will become part of the VP */ presentationSubmissionLocation?: PresentationSubmissionLocation; - } + }, ): PresentationSubmission { const pd: IInternalPresentationDefinition = SSITypesBuilder.toInternalPresentationDefinition(presentationDefinition); return this._evaluationClientWrapper.submissionFrom( pd, SSITypesBuilder.mapExternalVerifiableCredentialsToWrappedVcs(selectedCredentials, this.options?.hasher), - opts + opts, ); } @@ -278,7 +260,7 @@ export class PEX { public presentationFrom( presentationDefinition: IPresentationDefinition, selectedCredentials: OriginalVerifiableCredential[], - opts?: PresentationFromOpts + opts?: PresentationFromOpts, ): PresentationResult { const presentationSubmission = this.presentationSubmissionFrom(presentationDefinition, selectedCredentials, opts); const hasSdJwtCredentials = selectedCredentials.some((c) => CredentialMapper.isSdJwtDecodedCredential(c) || CredentialMapper.isSdJwtEncoded(c)); @@ -296,13 +278,13 @@ export class PEX { ...opts, // We only pass in the submission in case it needs to be included in the presentation presentationSubmission: presentationSubmissionLocation === PresentationSubmissionLocation.PRESENTATION ? presentationSubmission : undefined, - hasher: this.options?.hasher + hasher: this.options?.hasher, }); return { presentation, presentationSubmissionLocation, - presentationSubmission + presentationSubmission, }; } @@ -316,7 +298,7 @@ export class PEX { * Hasher to use when decoding an SD-JWT credential. */ hasher?: Hasher; - } + }, ): IPresentation | SdJwtDecodedVerifiableCredentialWithKbJwtInput { const credentials = Array.isArray(selectedCredentials) ? selectedCredentials : [selectedCredentials]; @@ -356,19 +338,19 @@ export class PEX { const kbJwt = { // alg MUST be set by the signer header: { - typ: 'kb+jwt' + typ: 'kb+jwt', }, // aud MUST be set by the signer or provided by e.g. SIOP/OpenID4VP lib payload: { iat: new Date().getTime(), - sd_hash: sdHash - } + sd_hash: sdHash, + }, } satisfies SdJwtKbJwtInput; // @ts-expect-error FIXME Funke return { ...decoded, - kbJwt + kbJwt, }; } else { if (!selectedCredentials) { @@ -379,7 +361,7 @@ export class PEX { const holders = Array.from(new Set(wVCs.flatMap((wvc) => getSubjectIdsAsString(wvc.credential as ICredential)))); if (holders.length !== 1 && !opts?.holderDID) { console.log( - `We deduced ${holders.length} subject from ${wVCs.length} Verifiable Credentials, and no holder property was given. This might lead to undesired results` + `We deduced ${holders.length} subject from ${wVCs.length} Verifiable Credentials, and no holder property was given. This might lead to undesired results`, ); } const holder = opts?.holderDID ?? (holders.length === 1 ? holders[0] : undefined); @@ -416,7 +398,7 @@ export class PEX { type, holder, ...(!!opts?.presentationSubmission && { presentation_submission: opts.presentationSubmission }), - verifiableCredential + verifiableCredential, }; } } @@ -436,13 +418,13 @@ export class PEX { const validators = []; result.version === PEVersion.v1 ? validators.push({ - bundler: new PresentationDefinitionV1VB('root'), - target: SSITypesBuilder.modelEntityToInternalPresentationDefinitionV1(presentationDefinition as PresentationDefinitionV1) - }) + bundler: new PresentationDefinitionV1VB('root'), + target: SSITypesBuilder.modelEntityToInternalPresentationDefinitionV1(presentationDefinition as PresentationDefinitionV1), + }) : validators.push({ - bundler: new PresentationDefinitionV2VB('root'), - target: SSITypesBuilder.modelEntityInternalPresentationDefinitionV2(presentationDefinition as PresentationDefinitionV2) - }); + bundler: new PresentationDefinitionV2VB('root'), + target: SSITypesBuilder.modelEntityInternalPresentationDefinitionV2(presentationDefinition as PresentationDefinitionV2), + }); return new ValidationEngine().validate(validators); } @@ -457,8 +439,8 @@ export class PEX { return new ValidationEngine().validate([ { bundler: new PresentationSubmissionVB('root'), - target: presentationSubmission - } + target: presentationSubmission, + }, ]); } @@ -483,7 +465,7 @@ export class PEX { presentationDefinition: IPresentationDefinition, selectedCredentials: OriginalVerifiableCredential[], signingCallBack: (callBackParams: PresentationSignCallBackParams) => OrPromise, - opts: VerifiablePresentationFromOpts + opts: VerifiablePresentationFromOpts, ): Promise { const { holderDID, signatureOptions, proofOptions } = opts; @@ -502,15 +484,15 @@ export class PEX { const limitDisclosureSignatureSuites = limitedDisclosureSuites(); const evaluationResult = this.evaluateCredentials(presentationDefinition, selectedCredentials, { holderDIDs, - limitDisclosureSignatureSuites + limitDisclosureSignatureSuites, }); const presentationResult = this.presentationFrom(presentationDefinition, evaluationResult.verifiableCredential, opts); const evaluationResults = this.evaluatePresentation(presentationDefinition, presentationResult.presentation, { limitDisclosureSignatureSuites, ...(presentationResult.presentationSubmissionLocation === PresentationSubmissionLocation.EXTERNAL && { - presentationSubmission: presentationResult.presentationSubmission - }) + presentationSubmission: presentationResult.presentationSubmission, + }), }); if (!evaluationResults.value && selectedCredentials.length === 0) { evaluationResults.value = presentationResult.presentationSubmission; @@ -528,7 +510,7 @@ export class PEX { jws: signatureOptions?.jws, challenge: proofOptions?.challenge, nonce: proofOptions?.nonce, - domain: proofOptions?.domain + domain: proofOptions?.domain, }; let presentation = presentationResult.presentation; @@ -545,41 +527,41 @@ export class PEX { const kbJwt = { // alg MUST be set by the signer header: { - typ: 'kb+jwt' + typ: 'kb+jwt', }, // aud MUST be set by the signer or provided by e.g. SIOP/OpenID4VP lib payload: { iat: new Date().getTime(), nonce: proofOptions?.nonce, - sd_hash: sdHash - } + sd_hash: sdHash, + }, } satisfies SdJwtKbJwtInput; // @ts-expect-error FIXME Funke presentation = { ...presentation, - kbJwt + kbJwt, }; } const callBackParams: PresentationSignCallBackParams = { options: { ...opts, - presentationSubmissionLocation: presentationResult.presentationSubmissionLocation + presentationSubmissionLocation: presentationResult.presentationSubmissionLocation, }, presentation, presentationDefinition, selectedCredentials, proof, presentationSubmission: evaluationResults.value, - evaluationResults + evaluationResults, }; const verifiablePresentation = await signingCallBack(callBackParams); return { verifiablePresentation, presentationSubmissionLocation: presentationResult.presentationSubmissionLocation, - presentationSubmission: evaluationResults.value + presentationSubmission: evaluationResults.value, }; } diff --git a/lib/evaluation/handlers/didRestrictionEvaluationHandler.ts b/lib/evaluation/handlers/didRestrictionEvaluationHandler.ts index bd4139eb..24ac4ca8 100644 --- a/lib/evaluation/handlers/didRestrictionEvaluationHandler.ts +++ b/lib/evaluation/handlers/didRestrictionEvaluationHandler.ts @@ -1,11 +1,7 @@ import { CredentialMapper, WrappedVerifiableCredential } from '@sphereon/ssi-types'; import { Status } from '../../ConstraintUtils'; -import { - IInternalPresentationDefinition, - InternalPresentationDefinitionV1, - InternalPresentationDefinitionV2 -} from '../../types'; +import { IInternalPresentationDefinition, InternalPresentationDefinitionV1, InternalPresentationDefinitionV2 } from '../../types'; import PexMessages from '../../types/Messages'; import { isRestrictedDID } from '../../utils'; import { HandlerCheckResult } from '../core'; @@ -47,7 +43,7 @@ export class DIDRestrictionEvaluationHandler extends AbstractEvaluationHandler { return typeof wrappedVc.credential.issuer === 'object' ? wrappedVc.credential.issuer.id : wrappedVc.credential.issuer; } else if (CredentialMapper.isSdJwtDecodedCredential(wrappedVc.credential)) { return wrappedVc.credential.decodedPayload.iss; - } else if (CredentialMapper.isMsoMdocOid4VPEncoded(wrappedVc.credential) && typeof (wrappedVc.decoded) === 'object') { + } else if (CredentialMapper.isMsoMdocOid4VPEncoded(wrappedVc.credential) && typeof wrappedVc.decoded === 'object') { return wrappedVc.decoded.iss ?? ''; } return ''; // FIXME Funke @@ -62,8 +58,8 @@ export class DIDRestrictionEvaluationHandler extends AbstractEvaluationHandler { message: PexMessages.FORMAT_RESTRICTION_DIDNT_PASS, verifiable_credential_path: vcPath, payload: { - format: wvc.format - } + format: wvc.format, + }, }; } @@ -75,8 +71,8 @@ export class DIDRestrictionEvaluationHandler extends AbstractEvaluationHandler { message: message ?? PexMessages.FORMAT_RESTRICTION_PASSED, verifiable_credential_path: vcPath, payload: { - format: wvc.format - } + format: wvc.format, + }, }; } } From bd2d6fa20abff088287f8abe055d672efc22d0a6 Mon Sep 17 00:00:00 2001 From: sanderPostma Date: Fri, 13 Sep 2024 12:31:11 +0200 Subject: [PATCH 06/21] chore: list mso_mdoc as type and use new ssi-types version --- lib/validation/bundlers/presentationSubmissionVB.ts | 1 + package.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/validation/bundlers/presentationSubmissionVB.ts b/lib/validation/bundlers/presentationSubmissionVB.ts index e9c3bf1b..dbe1b0ca 100644 --- a/lib/validation/bundlers/presentationSubmissionVB.ts +++ b/lib/validation/bundlers/presentationSubmissionVB.ts @@ -110,6 +110,7 @@ export class PresentationSubmissionVB extends ValidationBundler Date: Fri, 13 Sep 2024 12:38:56 +0200 Subject: [PATCH 07/21] chore:lockfile --- pnpm-lock.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 32219eca..72bb7fa2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,8 +21,8 @@ dependencies: specifier: ^2.3.1 version: 2.3.1 '@sphereon/ssi-types': - specifier: 0.29.1-unstable.200 - version: 0.29.1-unstable.200 + specifier: 0.29.1-unstable.237 + version: 0.29.1-unstable.237 ajv: specifier: ^8.12.0 version: 8.12.0 @@ -893,8 +893,8 @@ packages: resolution: {integrity: sha512-SByU4cJ0XYA6VZQ/L6lsSiRcFtBPHbFioCeQ4GP7/W/jQ+PSBD7uK2oTnKQ9/0iEiMK/6JYqhKgLs4a9UX3UTQ==} dev: false - /@sphereon/ssi-types@0.29.1-unstable.200: - resolution: {integrity: sha512-TTLiagJJa+GAMw7Cu0nxWRtDlinuJ+DVnVIKkx3bmHAUf7kuN/gLi5j8Ff1TyTWVo7yMyrG9oxihBjaIIr8btw==} + /@sphereon/ssi-types@0.29.1-unstable.237: + resolution: {integrity: sha512-H9vqaFbCwbZpPUk5x84Cn1GeIFvwi7EZAsLN4h6EkXDwm55yOT76dvcSVUnL6obC2AzGr+Bjyv4R2cZSwKkguw==} dependencies: '@sd-jwt/decode': 0.6.1 '@sphereon/kmp-mdl-mdoc': 0.2.0-SNAPSHOT.22 From 3d85f8b92b1c4e5c4402ef11e73253467fa943c4 Mon Sep 17 00:00:00 2001 From: sanderPostma Date: Fri, 13 Sep 2024 14:21:47 +0200 Subject: [PATCH 08/21] chore: partial cleanup of fixme comments --- lib/PEX.ts | 11 ++++------- lib/evaluation/evaluationClientWrapper.ts | 1 - .../handlers/didRestrictionEvaluationHandler.ts | 10 ++++++---- lib/signing/types.ts | 2 +- 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/lib/PEX.ts b/lib/PEX.ts index 7d22b9f6..3c1b8203 100644 --- a/lib/PEX.ts +++ b/lib/PEX.ts @@ -18,7 +18,7 @@ import { import { Status } from './ConstraintUtils'; import { EvaluationClientWrapper, EvaluationResults, SelectResults } from './evaluation'; -import { PresentationEvaluationResults } from './evaluation/core'; +import { PresentationEvaluationResults } from './evaluation'; import { PresentationFromOpts, PresentationResult, @@ -72,7 +72,7 @@ export class PEX { */ public evaluatePresentation( presentationDefinition: IPresentationDefinition, - presentations: OrArray, + presentations: OrArray, opts?: { limitDisclosureSignatureSuites?: string[]; restrictToFormats?: Format; @@ -122,7 +122,6 @@ export class PEX { // `wrappedPresentation.original.compactKbJwt`, but as HAIP doesn't use dids, we'll leave it for now. const holderDIDs = wrappedPresentations .map((p) => { - // @ts-expect-error FIXME Funke - Add DeviceResponseCbor support return CredentialMapper.isW3cPresentation(p.presentation) && p.presentation.holder ? p.presentation.holder : undefined; }) .filter((d): d is string => d !== undefined); @@ -325,7 +324,7 @@ export class PEX { // that a valid assumption? It seems to be this way for BBS SD as well const decoded = ( CredentialMapper.isSdJwtEncoded(credentials[0]) ? CredentialMapper.decodeVerifiableCredential(credentials[0], opts?.hasher) : credentials[0] - ) as SdJwtDecodedVerifiableCredential; + ) as Omit; if (!opts?.hasher) { throw new Error('Hasher must be provided when creating a presentation with an SD-JWT VC'); @@ -347,7 +346,6 @@ export class PEX { }, } satisfies SdJwtKbJwtInput; - // @ts-expect-error FIXME Funke return { ...decoded, kbJwt, @@ -515,7 +513,7 @@ export class PEX { let presentation = presentationResult.presentation; - if (CredentialMapper.isSdJwtDecodedCredential(presentationResult.presentation)) { + if (CredentialMapper.isSdJwtDecodedCredential(presentationResult.presentation as unknown as SdJwtDecodedVerifiableCredential)) { // FIXME? SdJwtDecodedVerifiableCredentialWithKbJwtInput is local type and is not supported in ssi-sdk if (!this.options?.hasher) { throw new Error('Hasher must be provided when creating a presentation with an SD-JWT VC'); } @@ -537,7 +535,6 @@ export class PEX { }, } satisfies SdJwtKbJwtInput; - // @ts-expect-error FIXME Funke presentation = { ...presentation, kbJwt, diff --git a/lib/evaluation/evaluationClientWrapper.ts b/lib/evaluation/evaluationClientWrapper.ts index 3d295752..dd3f0ef4 100644 --- a/lib/evaluation/evaluationClientWrapper.ts +++ b/lib/evaluation/evaluationClientWrapper.ts @@ -536,7 +536,6 @@ export class EvaluationClientWrapper { // TODO: we should probably add support for holder dids in the kb-jwt of an SD-JWT. We can extract this from the // `wrappedPresentation.original.compactKbJwt`, but as HAIP doesn't use dids, we'll leave it for now. - // @ts-expect-error FIXME Funke - Add DeviceResponseCbor support const holderDIDs = CredentialMapper.isW3cPresentation(vp.presentation) && vp.presentation.holder ? [vp.presentation.holder] : []; // Get the presentation definition only for this descriptor, so we can evaluate it separately diff --git a/lib/evaluation/handlers/didRestrictionEvaluationHandler.ts b/lib/evaluation/handlers/didRestrictionEvaluationHandler.ts index 24ac4ca8..6e676f1b 100644 --- a/lib/evaluation/handlers/didRestrictionEvaluationHandler.ts +++ b/lib/evaluation/handlers/didRestrictionEvaluationHandler.ts @@ -43,11 +43,13 @@ export class DIDRestrictionEvaluationHandler extends AbstractEvaluationHandler { return typeof wrappedVc.credential.issuer === 'object' ? wrappedVc.credential.issuer.id : wrappedVc.credential.issuer; } else if (CredentialMapper.isSdJwtDecodedCredential(wrappedVc.credential)) { return wrappedVc.credential.decodedPayload.iss; - } else if (CredentialMapper.isMsoMdocOid4VPEncoded(wrappedVc.credential) && typeof wrappedVc.decoded === 'object') { - return wrappedVc.decoded.iss ?? ''; + } else if (CredentialMapper.isWrappedMdocCredential(wrappedVc)) { + if(typeof wrappedVc.decoded === 'object' && wrappedVc.decoded.iss !== undefined) { + return wrappedVc.decoded.iss + } + throw new Error('cannot get issuer from the supplied mdoc credential'); } - return ''; // FIXME Funke - // throw new Error('Unsupported credential type'); + throw new Error('Unsupported credential type'); } private generateErrorResult(idIdx: number, vcPath: string, wvc: WrappedVerifiableCredential): HandlerCheckResult { diff --git a/lib/signing/types.ts b/lib/signing/types.ts index 61472200..056b5065 100644 --- a/lib/signing/types.ts +++ b/lib/signing/types.ts @@ -95,7 +95,7 @@ export interface SdJwtKbJwtInput { }; } -export type SdJwtDecodedVerifiableCredentialWithKbJwtInput = SdJwtDecodedVerifiableCredential & { kbJwt: SdJwtKbJwtInput }; +export type SdJwtDecodedVerifiableCredentialWithKbJwtInput = Omit & { kbJwt: SdJwtKbJwtInput }; /** * The result object containing the presentation and presentation submission From 82e25a4fbedf61335c21e0ecca85aecbff7a38de Mon Sep 17 00:00:00 2001 From: sanderPostma Date: Fri, 13 Sep 2024 14:41:19 +0200 Subject: [PATCH 09/21] chore: next unstable version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 83a942ae..03a7b890 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@sphereon/pex", - "version": "4.1.0", + "version": "4.1.1-unstable.1", "description": "A Typescript implementation of the v1 and v2 DIF Presentation Exchange specification", "main": "dist/main/index.js", "module": "dist/module/index.js", From d1130a148f8cebed462f6f1f8c90f9567d3826da Mon Sep 17 00:00:00 2001 From: sanderPostma Date: Fri, 13 Sep 2024 16:23:00 +0200 Subject: [PATCH 10/21] chore: prettier --- lib/PEX.ts | 3 ++- lib/evaluation/handlers/didRestrictionEvaluationHandler.ts | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/PEX.ts b/lib/PEX.ts index 3c1b8203..839d887c 100644 --- a/lib/PEX.ts +++ b/lib/PEX.ts @@ -513,7 +513,8 @@ export class PEX { let presentation = presentationResult.presentation; - if (CredentialMapper.isSdJwtDecodedCredential(presentationResult.presentation as unknown as SdJwtDecodedVerifiableCredential)) { // FIXME? SdJwtDecodedVerifiableCredentialWithKbJwtInput is local type and is not supported in ssi-sdk + if (CredentialMapper.isSdJwtDecodedCredential(presentationResult.presentation as unknown as SdJwtDecodedVerifiableCredential)) { + // FIXME? SdJwtDecodedVerifiableCredentialWithKbJwtInput is local type and is not supported in ssi-sdk if (!this.options?.hasher) { throw new Error('Hasher must be provided when creating a presentation with an SD-JWT VC'); } diff --git a/lib/evaluation/handlers/didRestrictionEvaluationHandler.ts b/lib/evaluation/handlers/didRestrictionEvaluationHandler.ts index 6e676f1b..32086d9b 100644 --- a/lib/evaluation/handlers/didRestrictionEvaluationHandler.ts +++ b/lib/evaluation/handlers/didRestrictionEvaluationHandler.ts @@ -44,8 +44,8 @@ export class DIDRestrictionEvaluationHandler extends AbstractEvaluationHandler { } else if (CredentialMapper.isSdJwtDecodedCredential(wrappedVc.credential)) { return wrappedVc.credential.decodedPayload.iss; } else if (CredentialMapper.isWrappedMdocCredential(wrappedVc)) { - if(typeof wrappedVc.decoded === 'object' && wrappedVc.decoded.iss !== undefined) { - return wrappedVc.decoded.iss + if (typeof wrappedVc.decoded === 'object' && wrappedVc.decoded.iss !== undefined) { + return wrappedVc.decoded.iss; } throw new Error('cannot get issuer from the supplied mdoc credential'); } From 5bf313c5049108c0de4b1a848e783369d33c4e01 Mon Sep 17 00:00:00 2001 From: sanderPostma Date: Tue, 17 Sep 2024 14:16:05 +0200 Subject: [PATCH 11/21] chore: new ssi-types --- package.json | 2 +- pnpm-lock.yaml | 1402 +++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 1323 insertions(+), 81 deletions(-) diff --git a/package.json b/package.json index 03a7b890..e58f20ba 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@sd-jwt/present": "^0.6.1", "@sd-jwt/types": "^0.6.1", "@sphereon/pex-models": "^2.3.1", - "@sphereon/ssi-types": "0.29.1-unstable.237", + "@sphereon/ssi-types": "0.29.1-unstable.113", "ajv": "^8.12.0", "ajv-formats": "^2.1.1", "jwt-decode": "^3.1.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 72bb7fa2..b9c374f8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,8 +21,8 @@ dependencies: specifier: ^2.3.1 version: 2.3.1 '@sphereon/ssi-types': - specifier: 0.29.1-unstable.237 - version: 0.29.1-unstable.237 + specifier: 0.29.1-unstable.113 + version: 0.29.1-unstable.113(ts-node@10.9.2) ajv: specifier: ^8.12.0 version: 8.12.0 @@ -150,7 +150,7 @@ packages: '@babel/traverse': 7.24.1 '@babel/types': 7.24.0 convert-source-map: 2.0.0 - debug: 4.3.4 + debug: 4.3.6 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -433,7 +433,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.24.1 '@babel/types': 7.24.0 - debug: 4.3.4 + debug: 4.3.6 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -457,7 +457,6 @@ packages: engines: {node: '>=12'} dependencies: '@jridgewell/trace-mapping': 0.3.9 - dev: true /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} @@ -496,6 +495,106 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@ethersproject/address@5.7.0: + resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/rlp': 5.7.0 + dev: false + + /@ethersproject/bignumber@5.7.0: + resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + bn.js: 5.2.1 + dev: false + + /@ethersproject/bytes@5.7.0: + resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} + dependencies: + '@ethersproject/logger': 5.7.0 + dev: false + + /@ethersproject/constants@5.7.0: + resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + dev: false + + /@ethersproject/keccak256@5.7.0: + resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} + dependencies: + '@ethersproject/bytes': 5.7.0 + js-sha3: 0.8.0 + dev: false + + /@ethersproject/logger@5.7.0: + resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} + dev: false + + /@ethersproject/networks@5.7.1: + resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==} + dependencies: + '@ethersproject/logger': 5.7.0 + dev: false + + /@ethersproject/properties@5.7.0: + resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==} + dependencies: + '@ethersproject/logger': 5.7.0 + dev: false + + /@ethersproject/random@5.7.0: + resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + dev: false + + /@ethersproject/rlp@5.7.0: + resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + dev: false + + /@ethersproject/signing-key@5.7.0: + resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + bn.js: 5.2.1 + elliptic: 6.5.4 + hash.js: 1.1.7 + dev: false + + /@ethersproject/strings@5.7.0: + resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + dev: false + + /@ethersproject/transactions@5.7.0: + resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==} + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + dev: false + /@humanwhocodes/config-array@0.11.14: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} @@ -526,7 +625,6 @@ packages: strip-ansi-cjs: /strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: /wrap-ansi@7.0.0 - dev: true /@istanbuljs/load-nyc-config@1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} @@ -770,7 +868,6 @@ packages: /@jridgewell/resolve-uri@3.1.2: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/set-array@1.2.1: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} @@ -779,7 +876,6 @@ packages: /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true /@jridgewell/trace-mapping@0.3.25: resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -793,7 +889,6 @@ packages: dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - dev: true /@js-joda/core@5.6.3: resolution: {integrity: sha512-T1rRxzdqkEXcou0ZprN1q9yDRlvzCPLqmlNt5IIsGBzoEVgLCCYrKEwc84+TvsXuAc95VAZwtWD2zVsKPY4bcA==} @@ -807,6 +902,26 @@ packages: '@js-joda/core': 5.6.3 dev: false + /@multiformats/base-x@4.0.1: + resolution: {integrity: sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==} + dev: false + + /@noble/ciphers@0.4.1: + resolution: {integrity: sha512-QCOA9cgf3Rc33owG0AYBB9wszz+Ul2kramWN8tXG44Gyciud/tbkEqvxRF/IpqQaBpRBNi9f4jdNxqB2CQCIXg==} + dev: false + + /@noble/curves@1.6.0: + resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==} + engines: {node: ^14.21.3 || >=16} + dependencies: + '@noble/hashes': 1.5.0 + dev: false + + /@noble/hashes@1.5.0: + resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} + engines: {node: ^14.21.3 || >=16} + dev: false + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -832,9 +947,12 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} requiresBuild: true - dev: true optional: true + /@scure/base@1.1.8: + resolution: {integrity: sha512-6CyAclxj3Nb0XT7GHK6K4zK6k2xJm6E4Ft0Ohjt4WgegiFUHEtFb2CGzmPmGBwoIhrLsqNLYfLr04Y1GePrzZg==} + dev: false + /@sd-jwt/decode@0.6.1: resolution: {integrity: sha512-QgTIoYd5zyKKLgXB4xEYJTrvumVwtsj5Dog0v0L9UH9ZvHekDaeexS247X7A4iSdzTvmZzUpGskgABOa4D8NmQ==} engines: {node: '>=16'} @@ -881,6 +999,15 @@ packages: '@sinonjs/commons': 3.0.1 dev: true + /@sphereon/did-uni-client@0.6.3: + resolution: {integrity: sha512-g7LD7ofbE36slHN7Bhr5dwUrj6t0BuZeXBYJMaVY/pOeL1vJxW1cZHbZqu0NSfOmzyBg4nsYVlgTjyi/Aua2ew==} + dependencies: + cross-fetch: 3.1.8 + did-resolver: 4.1.0 + transitivePeerDependencies: + - encoding + dev: false + /@sphereon/kmp-mdl-mdoc@0.2.0-SNAPSHOT.22: resolution: {integrity: sha512-uAZZExVy+ug9JLircejWa5eLtAZ7bnBP6xb7DO2+86LRsHNLh2k2jMWJYxp+iWtGHTsh6RYsZl14ScQLvjiQ/A==} dependencies: @@ -893,6 +1020,326 @@ packages: resolution: {integrity: sha512-SByU4cJ0XYA6VZQ/L6lsSiRcFtBPHbFioCeQ4GP7/W/jQ+PSBD7uK2oTnKQ9/0iEiMK/6JYqhKgLs4a9UX3UTQ==} dev: false + /@sphereon/ssi-sdk-ext.did-utils@0.24.1-next.112(ts-node@10.9.2): + resolution: {integrity: sha512-/qwAk5ivJBF8uRgsA66RK1nBYpDLvoE7ma05HHxENHfQFvrtoE29m/gjcyIFxvlew+HQhI3OHwzOZXGeadLGGw==} + dependencies: + '@ethersproject/networks': 5.7.1 + '@ethersproject/transactions': 5.7.0 + '@sphereon/did-uni-client': 0.6.3 + '@sphereon/ssi-sdk-ext.key-utils': 0.24.1-next.112 + '@sphereon/ssi-sdk-ext.x509-utils': 0.24.1-next.112 + '@sphereon/ssi-sdk.agent-config': 0.29.1-unstable.161(ts-node@10.9.2) + '@sphereon/ssi-sdk.core': 0.29.1-unstable.161 + '@sphereon/ssi-types': 0.29.1-unstable.161 + '@stablelib/ed25519': 1.0.3 + '@veramo/core': 4.2.0 + '@veramo/utils': 4.2.0 + did-jwt: 6.11.6 + did-resolver: 4.1.0 + elliptic: 6.5.7 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@google-cloud/spanner' + - '@sap/hana-client' + - better-sqlite3 + - encoding + - hdb-pool + - ioredis + - mongodb + - mssql + - mysql2 + - oracledb + - pg + - pg-native + - pg-query-stream + - redis + - sql.js + - sqlite3 + - supports-color + - ts-node + - typeorm-aurora-data-api-driver + dev: false + + /@sphereon/ssi-sdk-ext.did-utils@0.24.1-unstable.112(ts-node@10.9.2): + resolution: {integrity: sha512-nc0jFPOWg0H20S8m83aQUpNym0Wx0rJCGkgpH6GdK8gBtgza8Y9DvAap1AYZug18WbqPcF6rBjvtIJqAKsSvlQ==} + dependencies: + '@ethersproject/networks': 5.7.1 + '@ethersproject/transactions': 5.7.0 + '@sphereon/did-uni-client': 0.6.3 + '@sphereon/ssi-sdk-ext.key-utils': 0.24.1-unstable.112 + '@sphereon/ssi-sdk-ext.x509-utils': 0.24.1-unstable.112 + '@sphereon/ssi-sdk.agent-config': 0.29.1-unstable.161(ts-node@10.9.2) + '@sphereon/ssi-sdk.core': 0.29.1-unstable.161 + '@sphereon/ssi-types': 0.29.1-unstable.161 + '@stablelib/ed25519': 1.0.3 + '@veramo/core': 4.2.0 + '@veramo/utils': 4.2.0 + did-jwt: 6.11.6 + did-resolver: 4.1.0 + elliptic: 6.5.7 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@google-cloud/spanner' + - '@sap/hana-client' + - better-sqlite3 + - encoding + - hdb-pool + - ioredis + - mongodb + - mssql + - mysql2 + - oracledb + - pg + - pg-native + - pg-query-stream + - redis + - sql.js + - sqlite3 + - supports-color + - ts-node + - typeorm-aurora-data-api-driver + dev: false + + /@sphereon/ssi-sdk-ext.identifier-resolution@0.24.1-unstable.112(ts-node@10.9.2): + resolution: {integrity: sha512-VBkJjHokFNsQ0wsHUbyCysMuShTOEuK6yrvyW64uOFcB2hzq1J/wi9CewI+YRHv7mnejBlu46uYNycvOKKRcsQ==} + dependencies: + '@sphereon/ssi-sdk-ext.did-utils': 0.24.1-unstable.112(ts-node@10.9.2) + '@sphereon/ssi-sdk-ext.key-utils': 0.24.1-unstable.112 + '@sphereon/ssi-sdk-ext.x509-utils': 0.24.1-unstable.112 + '@sphereon/ssi-sdk.agent-config': 0.29.1-unstable.161(ts-node@10.9.2) + '@sphereon/ssi-types': 0.29.1-unstable.161 + '@veramo/core': 4.2.0 + '@veramo/utils': 4.2.0 + debug: 4.3.6 + pkijs: 3.2.4 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@google-cloud/spanner' + - '@sap/hana-client' + - better-sqlite3 + - encoding + - hdb-pool + - ioredis + - mongodb + - mssql + - mysql2 + - oracledb + - pg + - pg-native + - pg-query-stream + - redis + - sql.js + - sqlite3 + - supports-color + - ts-node + - typeorm-aurora-data-api-driver + dev: false + + /@sphereon/ssi-sdk-ext.jwt-service@0.24.1-unstable.112(ts-node@10.9.2): + resolution: {integrity: sha512-OrBaSg5wLSehkJ4MyuyDWKD4CRIBERnJqRT0o/y5DbaCF3k02+/lN/rWP+4qwk2w192fIEAExG4L2GwZM/5PLQ==} + dependencies: + '@sphereon/ssi-sdk-ext.did-utils': 0.24.1-next.112(ts-node@10.9.2) + '@sphereon/ssi-sdk-ext.identifier-resolution': 0.24.1-unstable.112(ts-node@10.9.2) + '@sphereon/ssi-sdk-ext.key-manager': 0.24.1-unstable.112 + '@sphereon/ssi-sdk-ext.key-utils': 0.24.1-next.112 + '@sphereon/ssi-sdk-ext.x509-utils': 0.24.1-unstable.112 + '@sphereon/ssi-sdk.agent-config': 0.29.1-unstable.161(ts-node@10.9.2) + '@sphereon/ssi-types': 0.29.1-unstable.237 + '@veramo/core': 4.2.0 + '@veramo/utils': 4.2.0 + debug: 4.3.6 + jwt-decode: 4.0.0 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - '@google-cloud/spanner' + - '@sap/hana-client' + - better-sqlite3 + - encoding + - hdb-pool + - ioredis + - mongodb + - mssql + - mysql2 + - oracledb + - pg + - pg-native + - pg-query-stream + - redis + - sql.js + - sqlite3 + - supports-color + - ts-node + - typeorm-aurora-data-api-driver + dev: false + + /@sphereon/ssi-sdk-ext.key-manager@0.24.1-unstable.112: + resolution: {integrity: sha512-XdXV4qj+BYTZWyGHduWQxl0mxCYt5CF0Q93p4Thbm2/hjfaAC6aJi2WAXFGTIri95QVbKW1Uscob0CjNCVkWdg==} + dependencies: + '@veramo/core': 4.2.0 + '@veramo/key-manager': 4.2.0 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@sphereon/ssi-sdk-ext.key-utils@0.24.1-next.112: + resolution: {integrity: sha512-pySpFqfKn4fJ1wJMWRiVMh6zDyEQFs7adkyxlO5uDTKEYJ/9hQ++MD2t+seDpYjq5x2Wh+g60OzD1uiVdbL2aA==} + dependencies: + '@ethersproject/random': 5.7.0 + '@sphereon/ssi-sdk-ext.x509-utils': 0.24.1-next.112 + '@sphereon/ssi-types': 0.29.1-unstable.161 + '@stablelib/ed25519': 1.0.3 + '@stablelib/sha256': 1.0.1 + '@stablelib/sha512': 1.0.1 + '@trust/keyto': 1.0.1 + '@veramo/core': 4.2.0 + base64url: 3.0.1 + debug: 4.3.6 + did-resolver: 4.1.0 + elliptic: 6.5.7 + lodash.isplainobject: 4.0.6 + multiformats: 9.9.0 + uint8arrays: 3.1.1 + varint: 6.0.0 + web-encoding: 1.1.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@sphereon/ssi-sdk-ext.key-utils@0.24.1-unstable.112: + resolution: {integrity: sha512-er6TwGUWxlao2lSP97r1DTFlUXcPSMsIToULOWQJp6wKbvCuvV6pN5luS0qKB/W0/TOUE5kXzFwNx086BPnPRA==} + dependencies: + '@ethersproject/random': 5.7.0 + '@sphereon/ssi-sdk-ext.x509-utils': 0.24.1-unstable.112 + '@sphereon/ssi-types': 0.29.1-unstable.161 + '@stablelib/ed25519': 1.0.3 + '@stablelib/sha256': 1.0.1 + '@stablelib/sha512': 1.0.1 + '@trust/keyto': 1.0.1 + '@veramo/core': 4.2.0 + base64url: 3.0.1 + debug: 4.3.6 + did-resolver: 4.1.0 + elliptic: 6.5.7 + lodash.isplainobject: 4.0.6 + multiformats: 9.9.0 + uint8arrays: 3.1.1 + varint: 6.0.0 + web-encoding: 1.1.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@sphereon/ssi-sdk-ext.x509-utils@0.24.1-next.112: + resolution: {integrity: sha512-D15Kqh1oH620dMuPkImfNmVOpXtperQm6dGbo3jiJ9lvafjJzuVM9nHIeDoSI/uh/LkUXB7xuqD+4sATE/RO9g==} + dependencies: + '@trust/keyto': 1.0.1 + debug: 4.3.6 + js-x509-utils: 1.0.7 + pkijs: 3.2.4 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@sphereon/ssi-sdk-ext.x509-utils@0.24.1-unstable.112: + resolution: {integrity: sha512-bbx2jFoqWhW/xYABVwg3HiUo15yztPt3s+9bJtdB8n4PCjin4Nq3+vFvaHsmu70yAGkbWfsBcBVW6Y3oFtvpAA==} + dependencies: + '@trust/keyto': 1.0.1 + debug: 4.3.6 + js-x509-utils: 1.0.7 + pkijs: 3.2.4 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@sphereon/ssi-sdk.agent-config@0.29.1-unstable.161(ts-node@10.9.2): + resolution: {integrity: sha512-ZP/TjapF/Gv/AwnNr9e1U3rjyRwdLtAj4un9j1csnKcgYe9ff2fhYbe06y9mU4tfQilH69mAW4Tz1t6N5U7XbA==} + dependencies: + '@veramo/core': 4.2.0 + debug: 4.3.6 + jsonpointer: 5.0.1 + typeorm: 0.3.20(ts-node@10.9.2) + url-parse: 1.5.10 + yaml: 2.5.1 + transitivePeerDependencies: + - '@google-cloud/spanner' + - '@sap/hana-client' + - better-sqlite3 + - hdb-pool + - ioredis + - mongodb + - mssql + - mysql2 + - oracledb + - pg + - pg-native + - pg-query-stream + - redis + - sql.js + - sqlite3 + - supports-color + - ts-node + - typeorm-aurora-data-api-driver + dev: false + + /@sphereon/ssi-sdk.core@0.29.1-unstable.161: + resolution: {integrity: sha512-3E/KsjTywT9BzP5bMi41JVTu9nTiu2ekwNSPobF9tAJnHJv+LkjCJ59xA8jtbq/Xe4iq3xRMU17yBvpZXN2W4A==} + dependencies: + '@sphereon/ssi-types': 0.29.1-unstable.161 + '@veramo/core': 4.2.0 + cross-fetch: 3.1.8 + debug: 4.3.6 + image-size: 2.0.0-beta.2 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@sphereon/ssi-types@0.29.1-unstable.113(ts-node@10.9.2): + resolution: {integrity: sha512-uXkVhCYdp9Ucgr23S4T3qaJTHCf0kChmWYN67cXxyCndm18271mPi3AmaNWDnpB7N7zrznFxau9AOalwOou3lg==} + dependencies: + '@sd-jwt/decode': 0.6.1 + '@sphereon/kmp-mdl-mdoc': 0.2.0-SNAPSHOT.22 + '@sphereon/ssi-sdk-ext.jwt-service': 0.24.1-unstable.112(ts-node@10.9.2) + debug: 4.3.6 + events: 3.3.0 + jwt-decode: 3.1.2 + transitivePeerDependencies: + - '@google-cloud/spanner' + - '@sap/hana-client' + - better-sqlite3 + - encoding + - hdb-pool + - ioredis + - mongodb + - mssql + - mysql2 + - oracledb + - pg + - pg-native + - pg-query-stream + - redis + - sql.js + - sqlite3 + - supports-color + - ts-node + - typeorm-aurora-data-api-driver + dev: false + + /@sphereon/ssi-types@0.29.1-unstable.161: + resolution: {integrity: sha512-ifMADjk6k0f97/isK/4Qw/PX6n4k+qS5k6mmmH47MTD3KMDddVghoXycsvNw7wObJdLUalHBX630ghr+u21oMg==} + dependencies: + '@sd-jwt/decode': 0.6.1 + debug: 4.3.6 + events: 3.3.0 + jwt-decode: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: false + /@sphereon/ssi-types@0.29.1-unstable.237: resolution: {integrity: sha512-H9vqaFbCwbZpPUk5x84Cn1GeIFvwi7EZAsLN4h6EkXDwm55yOT76dvcSVUnL6obC2AzGr+Bjyv4R2cZSwKkguw==} dependencies: @@ -905,6 +1352,128 @@ packages: - supports-color dev: false + /@sqltools/formatter@1.2.5: + resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==} + dev: false + + /@stablelib/aead@1.0.1: + resolution: {integrity: sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg==} + dev: false + + /@stablelib/binary@1.0.1: + resolution: {integrity: sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==} + dependencies: + '@stablelib/int': 1.0.1 + dev: false + + /@stablelib/bytes@1.0.1: + resolution: {integrity: sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==} + dev: false + + /@stablelib/chacha20poly1305@1.0.1: + resolution: {integrity: sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA==} + dependencies: + '@stablelib/aead': 1.0.1 + '@stablelib/binary': 1.0.1 + '@stablelib/chacha': 1.0.1 + '@stablelib/constant-time': 1.0.1 + '@stablelib/poly1305': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/chacha@1.0.1: + resolution: {integrity: sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==} + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/constant-time@1.0.1: + resolution: {integrity: sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==} + dev: false + + /@stablelib/ed25519@1.0.3: + resolution: {integrity: sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==} + dependencies: + '@stablelib/random': 1.0.2 + '@stablelib/sha512': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/hash@1.0.1: + resolution: {integrity: sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==} + dev: false + + /@stablelib/int@1.0.1: + resolution: {integrity: sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==} + dev: false + + /@stablelib/keyagreement@1.0.1: + resolution: {integrity: sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg==} + dependencies: + '@stablelib/bytes': 1.0.1 + dev: false + + /@stablelib/poly1305@1.0.1: + resolution: {integrity: sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==} + dependencies: + '@stablelib/constant-time': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/random@1.0.2: + resolution: {integrity: sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==} + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/sha256@1.0.1: + resolution: {integrity: sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ==} + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/sha512@1.0.1: + resolution: {integrity: sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==} + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/wipe@1.0.1: + resolution: {integrity: sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==} + dev: false + + /@stablelib/x25519@1.0.3: + resolution: {integrity: sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw==} + dependencies: + '@stablelib/keyagreement': 1.0.1 + '@stablelib/random': 1.0.2 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/xchacha20@1.0.1: + resolution: {integrity: sha512-1YkiZnFF4veUwBVhDnDYwo6EHeKzQK4FnLiO7ezCl/zu64uG0bCCAUROJaBkaLH+5BEsO3W7BTXTguMbSLlWSw==} + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/chacha': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + + /@stablelib/xchacha20poly1305@1.0.1: + resolution: {integrity: sha512-B1Abj0sMJ8h3HNmGnJ7vHBrAvxuNka6cJJoZ1ILN7iuacXp7sUYcgOVEOTLWj+rtQMpspY9tXSCRLPmN1mQNWg==} + dependencies: + '@stablelib/aead': 1.0.1 + '@stablelib/chacha20poly1305': 1.0.1 + '@stablelib/constant-time': 1.0.1 + '@stablelib/wipe': 1.0.1 + '@stablelib/xchacha20': 1.0.1 + dev: false + /@tokenizer/token@0.3.0: resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} dev: true @@ -914,21 +1483,25 @@ packages: engines: {node: '>= 6'} dev: true + /@trust/keyto@1.0.1: + resolution: {integrity: sha512-OXTmKkrnkwktCX86XA7eWs1TQ6u64enm0syzAfNhjigbuGLy5aLhbhRYWtjt4zzdG/irWudluheRZ9Ic9pCwsA==} + dependencies: + asn1.js: 5.4.1 + base64url: 3.0.1 + elliptic: 6.5.7 + dev: false + /@tsconfig/node10@1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} - dev: true /@tsconfig/node12@1.0.11: resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: true /@tsconfig/node14@1.0.3: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: true /@tsconfig/node16@1.0.4: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - dev: true /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -1000,7 +1573,6 @@ packages: resolution: {integrity: sha512-+wiMJsIwLOYCvUqSdKTrfkS8mpTp+MPINe6+Np4TAGFWWRWiBQ5kSq9nZGCSPkzx9mvT+uEukzpX4MOSCydcvw==} dependencies: undici-types: 5.26.5 - dev: true /@types/semver@7.5.8: resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} @@ -1156,6 +1728,60 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true + /@veramo/core@4.2.0: + resolution: {integrity: sha512-HIqbXfCbwOAJelR5Ohsm22vr63cy6ND8Ua/+9wfMDAiymUUS7NryaJ/v6NRtnmIrNZqUMDdR9/TWdp4cCq5eBg==} + dependencies: + credential-status: 2.0.6 + debug: 4.3.6 + did-jwt-vc: 3.1.3 + did-resolver: 4.1.0 + events: 3.3.0 + z-schema: 5.0.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@veramo/key-manager@4.2.0: + resolution: {integrity: sha512-v/swPrxxI155iFxWjcJDmeyfMLOnAu/VRxJJE+cv8Ld9mmPi5xljaoO9/ozt0j4Cz92n6lFKqfVOxs2ECV85UA==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@stablelib/ed25519': 1.0.3 + '@veramo/core': 4.2.0 + did-jwt: 6.11.6 + uint8arrays: 3.1.1 + uuid: 9.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@veramo/utils@4.2.0: + resolution: {integrity: sha512-jHkli0Qz9rFsWzPAdfJP3P2MFxvVMZPDXZvtVBm8x1fjAGrw/Htz/c5drhDAeBXnqPd9011/7cyvp6AOvdbc8Q==} + dependencies: + '@ethersproject/transactions': 5.7.0 + '@stablelib/ed25519': 1.0.3 + '@veramo/core': 4.2.0 + blakejs: 1.2.1 + cross-fetch: 3.1.8 + debug: 4.3.6 + did-jwt: 6.11.6 + did-jwt-vc: 3.2.15 + did-resolver: 4.1.0 + elliptic: 6.5.7 + multiformats: 9.7.1 + uint8arrays: 3.1.1 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@zxing/text-encoding@0.9.0: + resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==} + requiresBuild: true + dev: false + optional: true + /acorn-jsx@5.3.2(acorn@8.11.3): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1167,19 +1793,17 @@ packages: /acorn-walk@8.3.2: resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} engines: {node: '>=0.4.0'} - dev: true /acorn@8.11.3: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true - dev: true /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4 + debug: 4.3.6 transitivePeerDependencies: - supports-color dev: true @@ -1241,12 +1865,10 @@ packages: /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - dev: true /ansi-regex@6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} - dev: true /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} @@ -1260,7 +1882,6 @@ packages: engines: {node: '>=8'} dependencies: color-convert: 2.0.1 - dev: true /ansi-styles@5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} @@ -1270,7 +1891,10 @@ packages: /ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - dev: true + + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: false /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} @@ -1280,9 +1904,13 @@ packages: picomatch: 2.3.1 dev: true + /app-root-path@3.1.0: + resolution: {integrity: sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==} + engines: {node: '>= 6.0.0'} + dev: false + /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -1368,6 +1996,30 @@ packages: is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 + /asn1.js-rfc5280@3.0.0: + resolution: {integrity: sha512-Y2LZPOWeZ6qehv698ZgOGGCZXBQShObWnGthTrIFlIQjuV1gg2B8QOhWFRExq/MR1VnPpIIe7P9vX2vElxv+Pg==} + dependencies: + asn1.js: 5.4.1 + dev: false + + /asn1.js@5.4.1: + resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} + dependencies: + bn.js: 4.12.0 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + safer-buffer: 2.1.2 + dev: false + + /asn1js@3.0.5: + resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} + engines: {node: '>=12.0.0'} + dependencies: + pvtsutils: 1.3.5 + pvutils: 1.1.3 + tslib: 2.7.0 + dev: false + /available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -1448,7 +2100,31 @@ packages: /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true + + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: false + + /base64url@3.0.1: + resolution: {integrity: sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==} + engines: {node: '>=6.0.0'} + dev: false + + /bech32@2.0.0: + resolution: {integrity: sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==} + dev: false + + /blakejs@1.2.1: + resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} + dev: false + + /bn.js@4.12.0: + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + dev: false + + /bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + dev: false /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -1461,7 +2137,6 @@ packages: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 - dev: true /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} @@ -1470,6 +2145,10 @@ packages: fill-range: 7.0.1 dev: true + /brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + dev: false + /browserslist@4.23.0: resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -1498,6 +2177,13 @@ packages: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true + /buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false + /bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} @@ -1505,6 +2191,11 @@ packages: run-applescript: 7.0.0 dev: true + /bytestreamjs@2.0.1: + resolution: {integrity: sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==} + engines: {node: '>=6.0.0'} + dev: false + /call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} @@ -1534,6 +2225,10 @@ packages: resolution: {integrity: sha512-LRAQHZ4yT1+f9LemSMeqdMpMxZcc4RMWdj4tiFe3G8tNkWK+E58g+/tzotb5cU6TbcVJLr4fySiAW7XmxQvZQA==} dev: true + /canonicalize@2.0.0: + resolution: {integrity: sha512-ulDEYPv7asdKvqahuAY35c1selLdzDwHqugK92hfkzvlDCwXRRelDkR+Er33md/PtnpqHemgkuDPanZ4fiYZ8w==} + dev: false + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -1549,13 +2244,16 @@ packages: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true /char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} dev: true + /charenc@0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + dev: false + /ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} @@ -1565,6 +2263,27 @@ packages: resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} dev: true + /cli-highlight@2.1.11: + resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==} + engines: {node: '>=8.0.0', npm: '>=5.0.0'} + hasBin: true + dependencies: + chalk: 4.1.2 + highlight.js: 10.7.3 + mz: 2.7.0 + parse5: 5.1.1 + parse5-htmlparser2-tree-adapter: 6.0.1 + yargs: 16.2.0 + dev: false + + /cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: false + /cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -1572,7 +2291,6 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true /co@4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} @@ -1610,7 +2328,6 @@ packages: engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 - dev: true /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} @@ -1618,13 +2335,19 @@ packages: /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true /commander@11.1.0: resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} engines: {node: '>=16'} dev: true + /commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + requiresBuild: true + dev: false + optional: true + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true @@ -1654,7 +2377,21 @@ packages: /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true + + /credential-status@2.0.6: + resolution: {integrity: sha512-l5ZwSbX/UXFJ3DQ3dFt4rc2BtfUu/rhlkefR7BL9EZsKPyCe21okJA9mDy4h/nXvMEwpYjSQEa5vzR7KZqhI9g==} + dependencies: + did-jwt: 6.11.6 + did-resolver: 4.1.0 + dev: false + + /cross-fetch@3.1.8: + resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + dev: false /cross-spawn@6.0.5: resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} @@ -1674,7 +2411,10 @@ packages: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - dev: true + + /crypt@0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + dev: false /crypto-random-string@4.0.0: resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} @@ -1707,6 +2447,10 @@ packages: es-errors: 1.3.0 is-data-view: 1.0.1 + /dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + dev: false + /debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: @@ -1740,7 +2484,6 @@ packages: optional: true dependencies: ms: 2.1.2 - dev: false /dedent@1.5.1: resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} @@ -1793,11 +2536,69 @@ packages: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + /des.js@1.1.0: + resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: false + /detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} dev: true + /did-jwt-vc@3.1.3: + resolution: {integrity: sha512-qB1FiQ0sT/FUR5+mQ//P5lS0Gllrtes2OxC3WVMOt8ND0LolF92ohozv50ukyOvB2zBzgfm5durcIPqQcoI+LA==} + engines: {node: '>=14'} + dependencies: + did-jwt: 6.11.6 + did-resolver: 4.1.0 + dev: false + + /did-jwt-vc@3.2.15: + resolution: {integrity: sha512-M/WPiL34CQUiN4bvWnZ0OFHJ3usPtstfQfbNbHAWHvwjeCGi7nAdv62VXHgy2xIhJMc790hH7PsMN3i6SCGEyg==} + engines: {node: '>=18'} + dependencies: + did-jwt: 7.4.7 + did-resolver: 4.1.0 + dev: false + + /did-jwt@6.11.6: + resolution: {integrity: sha512-OfbWknRxJuUqH6Lk0x+H1FsuelGugLbBDEwsoJnicFOntIG/A4y19fn0a8RLxaQbWQ5gXg0yDq5E2huSBiiXzw==} + dependencies: + '@stablelib/ed25519': 1.0.3 + '@stablelib/random': 1.0.2 + '@stablelib/sha256': 1.0.1 + '@stablelib/x25519': 1.0.3 + '@stablelib/xchacha20poly1305': 1.0.1 + bech32: 2.0.0 + canonicalize: 2.0.0 + did-resolver: 4.1.0 + elliptic: 6.5.7 + js-sha3: 0.8.0 + multiformats: 9.9.0 + uint8arrays: 3.1.1 + dev: false + + /did-jwt@7.4.7: + resolution: {integrity: sha512-Apz7nIfIHSKWIMaEP5L/K8xkwByvjezjTG0xiqwKdnNj1x8M0+Yasury5Dm/KPltxi2PlGfRPf3IejRKZrT8mQ==} + dependencies: + '@noble/ciphers': 0.4.1 + '@noble/curves': 1.6.0 + '@noble/hashes': 1.5.0 + '@scure/base': 1.1.8 + canonicalize: 2.0.0 + did-resolver: 4.1.0 + multibase: 4.0.6 + multiformats: 9.9.0 + uint8arrays: 3.1.1 + dev: false + + /did-resolver@4.1.0: + resolution: {integrity: sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==} + dev: false + /diff-sequences@29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -1806,7 +2607,6 @@ packages: /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} - dev: true /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} @@ -1829,14 +2629,42 @@ packages: esutils: 2.0.3 dev: true + /dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + dev: false + /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - dev: true /electron-to-chromium@1.4.711: resolution: {integrity: sha512-hRg81qzvUEibX2lDxnFlVCHACa+LtrCPIsWAxo161LDYIB3jauf57RGsMZV9mvGwE98yGH06icj3zBEoOkxd/w==} dev: true + /elliptic@6.5.4: + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: false + + /elliptic@6.5.7: + resolution: {integrity: sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==} + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: false + /emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} @@ -1844,11 +2672,9 @@ packages: /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: true /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -1994,7 +2820,6 @@ packages: /escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} - dev: true /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} @@ -2369,7 +3194,6 @@ packages: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 - dev: true /format-util@1.0.5: resolution: {integrity: sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg==} @@ -2410,7 +3234,6 @@ packages: /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - dev: true /get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} @@ -2469,7 +3292,6 @@ packages: minimatch: 9.0.3 minipass: 7.0.4 path-scurry: 1.10.1 - dev: true /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} @@ -2547,7 +3369,6 @@ packages: /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - dev: true /has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} @@ -2568,12 +3389,31 @@ packages: dependencies: has-symbols: 1.0.3 + /hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: false + /hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 + /highlight.js@10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + dev: false + + /hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: false + /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true @@ -2588,7 +3428,7 @@ packages: dependencies: '@tootallnate/once': 1.1.2 agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.6 transitivePeerDependencies: - supports-color dev: true @@ -2598,7 +3438,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.6 transitivePeerDependencies: - supports-color dev: true @@ -2610,7 +3450,6 @@ packages: /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true /ignore-walk@3.0.4: resolution: {integrity: sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==} @@ -2623,6 +3462,12 @@ packages: engines: {node: '>= 4'} dev: true + /image-size@2.0.0-beta.2: + resolution: {integrity: sha512-1nDNnVxJixMWBynFgQ1q8+aVqK60TiNHpMyFAXt9xpzGZV+2lHI1IXjgdcAjBxPc4nx2ed1NdYs2I+Zfq+Zn7w==} + engines: {node: '>=18.18.0'} + hasBin: true + dev: false + /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -2654,7 +3499,6 @@ packages: /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true /internal-slot@1.0.7: resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} @@ -2664,6 +3508,14 @@ packages: hasown: 2.0.2 side-channel: 1.0.6 + /is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: false + /is-array-buffer@3.0.4: resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} engines: {node: '>= 0.4'} @@ -2687,6 +3539,10 @@ packages: call-bind: 1.0.7 has-tostringtag: 1.0.2 + /is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + dev: false + /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -2723,13 +3579,19 @@ packages: /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - dev: true /is-generator-fn@2.1.0: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} dev: true + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: false + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -2823,7 +3685,6 @@ packages: /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true /istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} @@ -2869,7 +3730,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4 + debug: 4.3.6 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -2891,7 +3752,6 @@ packages: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - dev: true /jest-changed-files@29.7.0: resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} @@ -3308,10 +4168,113 @@ packages: resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} dev: false + /js-crypto-aes@1.0.6: + resolution: {integrity: sha512-E2hu9z5+YtpDg9Un/bDfmH+I5dv/8aN+ozxv9L0ybZldcQ9T5iYDbBKdlKGBUKI3IvzoWSBSdnZnhwZaRIN46w==} + dependencies: + js-crypto-env: 1.0.5 + dev: false + + /js-crypto-ec@1.0.7: + resolution: {integrity: sha512-vou6cW3wGAQ75RzS++I/rthELPFp0nhHCmaAKQvdhwD480Q3FltLgyNkTMgcLTdN+Ghj8BRU1/+3oIEIOOK/MA==} + dependencies: + asn1.js: 5.4.1 + buffer: 6.0.3 + elliptic: 6.5.7 + js-crypto-env: 1.0.5 + js-crypto-hash: 1.0.7 + js-crypto-key-utils: 1.0.7 + js-crypto-random: 1.0.5 + js-encoding-utils: 0.7.3 + dev: false + + /js-crypto-env@1.0.5: + resolution: {integrity: sha512-8/UNN3sG8J+yMzqwSNVaobaWhIz4MqZFoOg5OB0DFXqS8eFjj2YvdmLJqIWXPl57Yw10SvYx0DQOtkfsWIV9Aw==} + dev: false + + /js-crypto-hash@1.0.7: + resolution: {integrity: sha512-GdbcVKjplbXJdR9oF2ks8+sBCLD7BUZ144Bc+Ie8OJuBHSIiHyMzdg2eD+ZYf87awTsKckNn1xIv+31+V2ewcA==} + dependencies: + buffer: 6.0.3 + hash.js: 1.1.7 + js-crypto-env: 1.0.5 + md5: 2.3.0 + sha3: 2.1.4 + dev: false + + /js-crypto-hmac@1.0.7: + resolution: {integrity: sha512-OVn2wjAuOV7ToQYvRKY2VoElCHoRW7BepycPPuH73xbLygDczkef41YsXMpKLnVAyS5kdwMJQy9qlMR9touHTg==} + dependencies: + js-crypto-env: 1.0.5 + js-crypto-hash: 1.0.7 + dev: false + + /js-crypto-key-utils@1.0.7: + resolution: {integrity: sha512-8/y/hpKevnAgr5EXz2x4IXMfqjzYZAzzXXc9OnAyI5JNdUtAufJkGfwlmZ+o40lTHv3k1egCiP/6pG/dZiqiEA==} + dependencies: + asn1.js: 5.4.1 + buffer: 6.0.3 + des.js: 1.1.0 + elliptic: 6.5.7 + js-crypto-aes: 1.0.6 + js-crypto-hash: 1.0.7 + js-crypto-pbkdf: 1.0.7 + js-crypto-random: 1.0.5 + js-encoding-utils: 0.7.3 + lodash.clonedeep: 4.5.0 + dev: false + + /js-crypto-pbkdf@1.0.7: + resolution: {integrity: sha512-FGs1PZeqGWM8k8k5JlAhHbBhLYtls+iVmeJEC22DUJ98Q3qo9Ki4cu3i0oxhjA2VpZ8V4MmV1DJHDTFYY4iOwg==} + dependencies: + js-crypto-hash: 1.0.7 + js-crypto-hmac: 1.0.7 + js-encoding-utils: 0.7.3 + dev: false + + /js-crypto-random@1.0.5: + resolution: {integrity: sha512-WydEQ5rrWLzgSkX1QNsuGinkv7z57UkYnDGo5f5oGtBe9QeUWUehdmPNNG4a4Sf8xGkjZBOhKaZqT1ACnyYCBA==} + dependencies: + js-crypto-env: 1.0.5 + dev: false + + /js-crypto-rsa@1.0.7: + resolution: {integrity: sha512-HLBCWNGzuUZMNbZ3nndrVAqth1m1mvuCO4tW7PpBDn4nsdLSnPnPd+SA7NvjsufWry38DnZdpFrK2gqbsrksGw==} + dependencies: + bn.js: 5.2.1 + buffer: 6.0.3 + js-crypto-env: 1.0.5 + js-crypto-hash: 1.0.7 + js-crypto-key-utils: 1.0.7 + js-crypto-random: 1.0.5 + js-encoding-utils: 0.7.3 + dev: false + + /js-encoding-utils@0.7.3: + resolution: {integrity: sha512-cfjcyPOzkZ2esMAi6eAjuto7GiT6YpPan5xIeQyN/CFqFHTt1sdqP0PJPgzi3HqAqXKN9j9hduynkgwk+AAJOw==} + dev: false + + /js-sha3@0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + dev: false + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true + /js-x509-utils@1.0.7: + resolution: {integrity: sha512-IDB3CtWyvkNJVbDPZvzM9o3Y6CyzDiMls6R23ZPwfmHHil7nRrpLxtA098SENhqjv1t/6WTeeCKQ5dhIMOGiUw==} + dependencies: + asn1.js: 5.4.1 + asn1.js-rfc5280: 3.0.0 + bn.js: 5.2.1 + buffer: 6.0.3 + js-crypto-ec: 1.0.7 + js-crypto-key-utils: 1.0.7 + js-crypto-random: 1.0.5 + js-crypto-rsa: 1.0.7 + js-encoding-utils: 0.7.3 + dev: false + /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true @@ -3375,10 +4338,20 @@ packages: hasBin: true dev: true + /jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + dev: false + /jwt-decode@3.1.2: resolution: {integrity: sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==} dev: false + /jwt-decode@4.0.0: + resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} + engines: {node: '>=18'} + dev: false + /keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: @@ -3439,6 +4412,22 @@ packages: p-locate: 5.0.0 dev: true + /lodash.clonedeep@4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + dev: false + + /lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + dev: false + + /lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + dev: false + + /lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + dev: false + /lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} dev: true @@ -3450,7 +4439,6 @@ packages: /lru-cache@10.2.0: resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} engines: {node: 14 || >=16.14} - dev: true /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -3474,7 +4462,6 @@ packages: /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true /makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} @@ -3482,6 +4469,14 @@ packages: tmpl: 1.0.5 dev: true + /md5@2.3.0: + resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: 1.1.6 + dev: false + /memorystream@0.3.1: resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} engines: {node: '>= 0.10.0'} @@ -3514,6 +4509,14 @@ packages: engines: {node: '>=6'} dev: true + /minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + dev: false + + /minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + dev: false + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: @@ -3532,7 +4535,6 @@ packages: engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 - dev: true /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -3541,7 +4543,12 @@ packages: /minipass@7.0.4: resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} engines: {node: '>=16 || 14 >=14.17'} - dev: true + + /mkdirp@2.1.6: + resolution: {integrity: sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==} + engines: {node: '>=10'} + hasBin: true + dev: false /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} @@ -3550,10 +4557,30 @@ packages: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true + /multibase@4.0.6: + resolution: {integrity: sha512-x23pDe5+svdLz/k5JPGCVdfn7Q5mZVMBETiC+ORfO+sor9Sgs0smJzAjfTbM5tckeCqnaUuMYoz+k3RXMmJClQ==} + engines: {node: '>=12.0.0', npm: '>=6.0.0'} + deprecated: This module has been superseded by the multiformats module + dependencies: + '@multiformats/base-x': 4.0.1 + dev: false + + /multiformats@9.7.1: + resolution: {integrity: sha512-TaVmGEBt0fhxiNJMGphBfB+oGvUxFs8KgGvgl8d3C+GWtrFcvXdJ2196eg+dYhmSFClmgFfSfJEklo+SZzdNuw==} + dev: false + /multiformats@9.9.0: resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} dev: false + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: false + /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -3578,7 +4605,6 @@ packages: optional: true dependencies: whatwg-url: 5.0.0 - dev: true /node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} @@ -3625,6 +4651,11 @@ packages: path-key: 3.1.1 dev: true + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: false + /object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} @@ -3786,6 +4817,20 @@ packages: lines-and-columns: 1.2.4 dev: true + /parse5-htmlparser2-tree-adapter@6.0.1: + resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} + dependencies: + parse5: 6.0.1 + dev: false + + /parse5@5.1.1: + resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==} + dev: false + + /parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + dev: false + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -3804,7 +4849,6 @@ packages: /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - dev: true /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -3816,7 +4860,6 @@ packages: dependencies: lru-cache: 10.2.0 minipass: 7.0.4 - dev: true /path-type@3.0.0: resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} @@ -3867,6 +4910,18 @@ packages: find-up: 4.1.0 dev: true + /pkijs@3.2.4: + resolution: {integrity: sha512-Et9V5QpvBilPFgagJcaKBqXjKrrgF5JL2mSDELk1vvbOTt4fuBhSSsGn9Tcz0TQTfS5GCpXQ31Whrpqeqp0VRg==} + engines: {node: '>=12.0.0'} + dependencies: + '@noble/hashes': 1.5.0 + asn1js: 3.0.5 + bytestreamjs: 2.0.1 + pvtsutils: 1.3.5 + pvutils: 1.1.3 + tslib: 2.7.0 + dev: false + /possible-typed-array-names@1.0.0: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} @@ -3916,6 +4971,21 @@ packages: resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} dev: true + /pvtsutils@1.3.5: + resolution: {integrity: sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==} + dependencies: + tslib: 2.7.0 + dev: false + + /pvutils@1.1.3: + resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==} + engines: {node: '>=6.0.0'} + dev: false + + /querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + dev: false + /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true @@ -3949,6 +5019,10 @@ packages: readable-stream: 3.6.2 dev: true + /reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + dev: false + /regexp.prototype.flags@1.5.2: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} @@ -3961,12 +5035,15 @@ packages: /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - dev: true /require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + /requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + dev: false + /resolve-cwd@3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} @@ -4040,7 +5117,6 @@ packages: /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true /safe-regex-test@1.0.3: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} @@ -4055,6 +5131,10 @@ packages: engines: {node: '>=10'} dev: true + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: false + /semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true @@ -4093,6 +5173,20 @@ packages: functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 + /sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + + /sha3@2.1.4: + resolution: {integrity: sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg==} + dependencies: + buffer: 6.0.3 + dev: false + /shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} @@ -4105,7 +5199,6 @@ packages: engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 - dev: true /shebang-regex@1.0.0: resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} @@ -4115,7 +5208,6 @@ packages: /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - dev: true /shell-quote@1.8.1: resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} @@ -4137,7 +5229,6 @@ packages: /signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - dev: true /sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -4219,7 +5310,6 @@ packages: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: true /string-width@5.1.2: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} @@ -4228,7 +5318,6 @@ packages: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.1.0 - dev: true /string.prototype.matchall@4.0.10: resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} @@ -4287,14 +5376,12 @@ packages: engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 - dev: true /strip-ansi@7.1.0: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} dependencies: ansi-regex: 6.0.1 - dev: true /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} @@ -4340,7 +5427,6 @@ packages: engines: {node: '>=8'} dependencies: has-flag: 4.0.0 - dev: true /supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} @@ -4396,6 +5482,19 @@ packages: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + dev: false + + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + dev: false + /tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} dev: true @@ -4422,7 +5521,6 @@ packages: /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: true /ts-api-utils@1.3.0(typescript@5.4.2): resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} @@ -4510,7 +5608,6 @@ packages: typescript: 5.4.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - dev: true /tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} @@ -4521,6 +5618,10 @@ packages: strip-bom: 3.0.0 dev: true + /tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + dev: false + /type-check@0.3.2: resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} engines: {node: '>= 0.8.0'} @@ -4600,6 +5701,84 @@ packages: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 + /typeorm@0.3.20(ts-node@10.9.2): + resolution: {integrity: sha512-sJ0T08dV5eoZroaq9uPKBoNcGslHBR4E4y+EBHs//SiGbblGe7IeduP/IH4ddCcj0qp3PHwDwGnuvqEAnKlq/Q==} + engines: {node: '>=16.13.0'} + hasBin: true + peerDependencies: + '@google-cloud/spanner': ^5.18.0 + '@sap/hana-client': ^2.12.25 + better-sqlite3: ^7.1.2 || ^8.0.0 || ^9.0.0 + hdb-pool: ^0.1.6 + ioredis: ^5.0.4 + mongodb: ^5.8.0 + mssql: ^9.1.1 || ^10.0.1 + mysql2: ^2.2.5 || ^3.0.1 + oracledb: ^6.3.0 + pg: ^8.5.1 + pg-native: ^3.0.0 + pg-query-stream: ^4.0.0 + redis: ^3.1.1 || ^4.0.0 + sql.js: ^1.4.0 + sqlite3: ^5.0.3 + ts-node: ^10.7.0 + typeorm-aurora-data-api-driver: ^2.0.0 + peerDependenciesMeta: + '@google-cloud/spanner': + optional: true + '@sap/hana-client': + optional: true + better-sqlite3: + optional: true + hdb-pool: + optional: true + ioredis: + optional: true + mongodb: + optional: true + mssql: + optional: true + mysql2: + optional: true + oracledb: + optional: true + pg: + optional: true + pg-native: + optional: true + pg-query-stream: + optional: true + redis: + optional: true + sql.js: + optional: true + sqlite3: + optional: true + ts-node: + optional: true + typeorm-aurora-data-api-driver: + optional: true + dependencies: + '@sqltools/formatter': 1.2.5 + app-root-path: 3.1.0 + buffer: 6.0.3 + chalk: 4.1.2 + cli-highlight: 2.1.11 + dayjs: 1.11.13 + debug: 4.3.6 + dotenv: 16.4.5 + glob: 10.3.10 + mkdirp: 2.1.6 + reflect-metadata: 0.2.2 + sha.js: 2.4.11 + ts-node: 10.9.2(@types/node@18.19.26)(typescript@5.4.2) + tslib: 2.7.0 + uuid: 9.0.1 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + dev: false + /typescript@5.3.3: resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} engines: {node: '>=14.17'} @@ -4610,7 +5789,6 @@ packages: resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} engines: {node: '>=14.17'} hasBin: true - dev: true /uint8arrays@3.1.1: resolution: {integrity: sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==} @@ -4628,7 +5806,6 @@ packages: /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true /unique-string@3.0.0: resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} @@ -4653,6 +5830,13 @@ packages: dependencies: punycode: 2.3.1 + /url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + dev: false + /urlgrey@1.0.0: resolution: {integrity: sha512-hJfIzMPJmI9IlLkby8QrsCykQ+SXDeO2W5Q9QTW3QpqZVTx4a/K7p8/5q+/isD8vsbVaFgql/gvAoQCRQ2Cb5w==} dependencies: @@ -4663,14 +5847,28 @@ packages: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true + /util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.13 + which-typed-array: 1.1.15 + dev: false + /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true dev: true + /uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + dev: false + /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: true /v8-to-istanbul@9.2.0: resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} @@ -4688,22 +5886,37 @@ packages: spdx-expression-parse: 3.0.1 dev: true + /validator@13.12.0: + resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==} + engines: {node: '>= 0.10'} + dev: false + + /varint@6.0.0: + resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} + dev: false + /walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: makeerror: 1.0.12 dev: true + /web-encoding@1.1.5: + resolution: {integrity: sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==} + dependencies: + util: 0.12.5 + optionalDependencies: + '@zxing/text-encoding': 0.9.0 + dev: false + /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: true /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: true /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} @@ -4737,7 +5950,6 @@ packages: hasBin: true dependencies: isexe: 2.0.0 - dev: true /word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} @@ -4751,7 +5963,6 @@ packages: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true /wrap-ansi@8.1.0: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} @@ -4760,7 +5971,6 @@ packages: ansi-styles: 6.2.1 string-width: 5.1.2 strip-ansi: 7.1.0 - dev: true /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -4777,7 +5987,6 @@ packages: /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - dev: true /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -4787,10 +5996,33 @@ packages: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true + /yaml@2.5.1: + resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} + engines: {node: '>= 14'} + hasBin: true + dev: false + + /yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + dev: false + /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - dev: true + + /yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + dev: false /yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} @@ -4803,14 +6035,24 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - dev: true /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} - dev: true /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true + + /z-schema@5.0.5: + resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} + engines: {node: '>=8.0.0'} + hasBin: true + dependencies: + lodash.get: 4.4.2 + lodash.isequal: 4.5.0 + validator: 13.12.0 + optionalDependencies: + commander: 9.5.0 + dev: false From a72b31fd2a841a46e2f529e9dedd4c1757e33c63 Mon Sep 17 00:00:00 2001 From: sanderPostma Date: Tue, 17 Sep 2024 18:42:09 +0200 Subject: [PATCH 12/21] chore: fixes sd-jwt support --- index.ts | 2 -- lib/PEX.ts | 38 +++++++++++++++++++++----------------- lib/signing/types.ts | 24 ++++++++++-------------- package.json | 2 +- pnpm-lock.yaml | 18 +++++------------- test/SdJwt.spec.ts | 10 +++++----- 6 files changed, 42 insertions(+), 52 deletions(-) diff --git a/index.ts b/index.ts index 5cdcf820..9dbba777 100644 --- a/index.ts +++ b/index.ts @@ -15,7 +15,6 @@ import { PresentationSignCallBackParams, PresentationSubmissionLocation, ProofOptions, - SdJwtDecodedVerifiableCredentialWithKbJwtInput, SelectResults, SignatureOptions, Status, @@ -57,5 +56,4 @@ export { PresentationResult, PresentationFromOpts, PresentationSubmissionLocation, - SdJwtDecodedVerifiableCredentialWithKbJwtInput, }; diff --git a/lib/PEX.ts b/lib/PEX.ts index a27e77e2..e6204f93 100644 --- a/lib/PEX.ts +++ b/lib/PEX.ts @@ -9,11 +9,11 @@ import { OriginalVerifiableCredential, OriginalVerifiablePresentation, OrPromise, - SdJwtDecodedVerifiableCredential, + SdJwtDecodedVerifiableCredential, SdJwtVcKbJwtHeader, W3CVerifiableCredential, W3CVerifiablePresentation, WrappedVerifiableCredential, - WrappedVerifiablePresentation, + WrappedVerifiablePresentation } from '@sphereon/ssi-types'; import { Status } from './ConstraintUtils'; @@ -24,10 +24,10 @@ import { PresentationResult, PresentationSignCallBackParams, PresentationSubmissionLocation, - SdJwtDecodedVerifiableCredentialWithKbJwtInput, + SdJwtDecodedVerifiableCredentialInput, SdJwtKbJwtInput, VerifiablePresentationFromOpts, - VerifiablePresentationResult, + VerifiablePresentationResult } from './signing'; import { DiscoveredVersion, IInternalPresentationDefinition, IPresentationDefinition, OrArray, PEVersion, SSITypesBuilder } from './types'; import { calculateSdHash, definitionVersionDiscovery, getSubjectIdsAsString } from './utils'; @@ -72,7 +72,7 @@ export class PEX { */ public evaluatePresentation( presentationDefinition: IPresentationDefinition, - presentations: OrArray, + presentations: OrArray, opts?: { limitDisclosureSignatureSuites?: string[]; restrictToFormats?: Format; @@ -315,7 +315,7 @@ export class PEX { */ hasher?: Hasher; }, - ): IPresentation | SdJwtDecodedVerifiableCredentialWithKbJwtInput { + ): IPresentation | SdJwtDecodedVerifiableCredentialInput { const credentials = Array.isArray(selectedCredentials) ? selectedCredentials : [selectedCredentials]; // for SD-JWT we want to return the SD-JWT with only the needed disclosures (so filter disclosures array, and update the compactSdJwt) @@ -341,7 +341,7 @@ export class PEX { // that a valid assumption? It seems to be this way for BBS SD as well const decoded = ( CredentialMapper.isSdJwtEncoded(credentials[0]) ? CredentialMapper.decodeVerifiableCredential(credentials[0], opts?.hasher) : credentials[0] - ) as Omit; + ) as SdJwtDecodedVerifiableCredential if (!opts?.hasher) { throw new Error('Hasher must be provided when creating a presentation with an SD-JWT VC'); @@ -355,18 +355,20 @@ export class PEX { // alg MUST be set by the signer header: { typ: 'kb+jwt', - }, + alg: hashAlg, + } satisfies SdJwtVcKbJwtHeader, // aud MUST be set by the signer or provided by e.g. SIOP/OpenID4VP lib payload: { iat: new Date().getTime(), sd_hash: sdHash, - }, - } satisfies SdJwtKbJwtInput; + } + } satisfies SdJwtKbJwtInput - return { + const sdJwtDecodedPresentation:SdJwtDecodedVerifiableCredentialInput = { ...decoded, kbJwt, }; + return sdJwtDecodedPresentation } else { if (!selectedCredentials) { throw Error(`At least a verifiable credential needs to be passed in to create a presentation`); @@ -530,8 +532,9 @@ export class PEX { let presentation = presentationResult.presentation; - if (CredentialMapper.isSdJwtDecodedCredential(presentationResult.presentation as unknown as SdJwtDecodedVerifiableCredential)) { - // FIXME? SdJwtDecodedVerifiableCredentialWithKbJwtInput is local type and is not supported in ssi-sdk + if (CredentialMapper.isSdJwtDecodedCredential(presentationResult.presentation as SdJwtDecodedVerifiableCredential)) { // Select type without kbJwt as isSdJwtDecodedCredential won't need it + const sdJwtPresentation = presentation as SdJwtDecodedVerifiableCredential + // FIXME? SdJwtDecodedVerifiableCredential is local type and is not supported in ssi-sdk if (!this.options?.hasher) { throw new Error('Hasher must be provided when creating a presentation with an SD-JWT VC'); } @@ -544,19 +547,20 @@ export class PEX { // alg MUST be set by the signer header: { typ: 'kb+jwt', + alg: hashAlg }, // aud MUST be set by the signer or provided by e.g. SIOP/OpenID4VP lib payload: { iat: new Date().getTime(), nonce: proofOptions?.nonce, sd_hash: sdHash, - }, - } satisfies SdJwtKbJwtInput; + } + } satisfies SdJwtKbJwtInput presentation = { - ...presentation, + ...sdJwtPresentation, kbJwt, - }; + } satisfies SdJwtDecodedVerifiableCredentialInput; } const callBackParams: PresentationSignCallBackParams = { diff --git a/lib/signing/types.ts b/lib/signing/types.ts index 056b5065..d78ab498 100644 --- a/lib/signing/types.ts +++ b/lib/signing/types.ts @@ -6,9 +6,10 @@ import { IProofPurpose, IProofType, OriginalVerifiableCredential, - SdJwtDecodedVerifiableCredential, - W3CVerifiablePresentation, + SdJwtDecodedVerifiableCredential, SdJwtVcKbJwtPayload, + W3CVerifiablePresentation } from '@sphereon/ssi-types'; +import { SdJwtVcKbJwtHeader } from '@sphereon/ssi-types/src/types/sd-jwt-vc'; import { PresentationEvaluationResults } from '../evaluation'; @@ -84,18 +85,13 @@ export enum PresentationSubmissionLocation { PRESENTATION, // Part of the VP itself } -export interface SdJwtKbJwtInput { - header: { - typ: 'kb+jwt'; - }; - payload: { - iat: number; - sd_hash: string; - nonce?: string; - }; +export type SdJwtKbJwtInput = { + header: SdJwtVcKbJwtHeader + payload: Partial } -export type SdJwtDecodedVerifiableCredentialWithKbJwtInput = Omit & { kbJwt: SdJwtKbJwtInput }; +export type SdJwtDecodedVerifiableCredentialInput = Omit + & { kbJwt: SdJwtKbJwtInput } /** * The result object containing the presentation and presentation submission @@ -104,7 +100,7 @@ export interface PresentationResult { /** * The resulting presentation, can have an embedded submission data depending on the location parameter */ - presentation: IPresentation | SdJwtDecodedVerifiableCredentialWithKbJwtInput; + presentation: IPresentation | SdJwtDecodedVerifiableCredential | SdJwtDecodedVerifiableCredentialInput /** * The resulting location of the presentation submission. @@ -193,7 +189,7 @@ export interface PresentationSignCallBackParams { * and only the optional KB-JWT should be appended to the `compactSdJwt` property. If no KB-JWT is needed on the presentation, the `compactSdJwt` property * from the decoded SD-JWT can be returned as-is. */ - presentation: IPresentation | SdJwtDecodedVerifiableCredentialWithKbJwtInput; + presentation: IPresentation | SdJwtDecodedVerifiableCredential | SdJwtDecodedVerifiableCredentialInput; /** * A partial proof value the callback can use to complete. If proofValue or JWS was supplied the proof could be complete already diff --git a/package.json b/package.json index e58f20ba..985887d9 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@sd-jwt/present": "^0.6.1", "@sd-jwt/types": "^0.6.1", "@sphereon/pex-models": "^2.3.1", - "@sphereon/ssi-types": "0.29.1-unstable.113", + "@sphereon/ssi-types": "0.29.1-unstable.120", "ajv": "^8.12.0", "ajv-formats": "^2.1.1", "jwt-decode": "^3.1.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b9c374f8..7f503313 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,8 +21,8 @@ dependencies: specifier: ^2.3.1 version: 2.3.1 '@sphereon/ssi-types': - specifier: 0.29.1-unstable.113 - version: 0.29.1-unstable.113(ts-node@10.9.2) + specifier: 0.29.1-unstable.120 + version: 0.29.1-unstable.120(ts-node@10.9.2) ajv: specifier: ^8.12.0 version: 8.12.0 @@ -1298,8 +1298,8 @@ packages: - supports-color dev: false - /@sphereon/ssi-types@0.29.1-unstable.113(ts-node@10.9.2): - resolution: {integrity: sha512-uXkVhCYdp9Ucgr23S4T3qaJTHCf0kChmWYN67cXxyCndm18271mPi3AmaNWDnpB7N7zrznFxau9AOalwOou3lg==} + /@sphereon/ssi-types@0.29.1-unstable.120(ts-node@10.9.2): + resolution: {integrity: sha512-l3tQj1H7N6+lsmho4Myu1L1NDpJx6kAq8rJOmUQOX1UwGmVgDH78Cs3km+DfenOm1OxnEBrEQCmHELTenu7hzg==} dependencies: '@sd-jwt/decode': 0.6.1 '@sphereon/kmp-mdl-mdoc': 0.2.0-SNAPSHOT.22 @@ -1733,7 +1733,7 @@ packages: dependencies: credential-status: 2.0.6 debug: 4.3.6 - did-jwt-vc: 3.1.3 + did-jwt-vc: 3.2.15 did-resolver: 4.1.0 events: 3.3.0 z-schema: 5.0.5 @@ -2548,14 +2548,6 @@ packages: engines: {node: '>=8'} dev: true - /did-jwt-vc@3.1.3: - resolution: {integrity: sha512-qB1FiQ0sT/FUR5+mQ//P5lS0Gllrtes2OxC3WVMOt8ND0LolF92ohozv50ukyOvB2zBzgfm5durcIPqQcoI+LA==} - engines: {node: '>=14'} - dependencies: - did-jwt: 6.11.6 - did-resolver: 4.1.0 - dev: false - /did-jwt-vc@3.2.15: resolution: {integrity: sha512-M/WPiL34CQUiN4bvWnZ0OFHJ3usPtstfQfbNbHAWHvwjeCGi7nAdv62VXHgy2xIhJMc790hH7PsMN3i6SCGEyg==} engines: {node: '>=18'} diff --git a/test/SdJwt.spec.ts b/test/SdJwt.spec.ts index bde09626..4bb67015 100644 --- a/test/SdJwt.spec.ts +++ b/test/SdJwt.spec.ts @@ -1,9 +1,9 @@ +import { SdJwtDecodedVerifiableCredential } from '@sphereon/ssi-types'; import { createHash } from 'crypto'; import { PresentationDefinitionV2 } from '@sphereon/pex-models'; -import { SdJwtDecodedVerifiableCredential } from '@sphereon/ssi-types'; -import { PEX, PresentationSubmissionLocation, SdJwtDecodedVerifiableCredentialWithKbJwtInput, Status, Validated } from '../lib'; +import { PEX, PresentationSubmissionLocation, Status, Validated } from '../lib'; import { calculateSdHash } from '../lib/utils'; export const hasher = (data: string) => createHash('sha256').update(data).digest(); @@ -238,16 +238,16 @@ describe('evaluate', () => { presentationDefinition, selectResults.verifiableCredential!, async (options) => { - const presentation = options.presentation as SdJwtDecodedVerifiableCredentialWithKbJwtInput; + const presentation = options.presentation as SdJwtDecodedVerifiableCredential; kbJwt = `${Buffer.from( JSON.stringify({ - ...presentation.kbJwt.header, + ...presentation.kbJwt?.header, alg: 'EdDSA', }), ).toString('base64url')}.${Buffer.from( JSON.stringify({ - ...presentation.kbJwt.payload, + ...presentation.kbJwt?.payload, nonce: 'nonce-from-request', // verifier identifier url (not clear yet in HAIP what this should be, but it MUST be present) aud: 'did:web:something', From a1fd62e50b3100201846652015e1d97b37a93721 Mon Sep 17 00:00:00 2001 From: sanderPostma Date: Tue, 17 Sep 2024 20:48:26 +0200 Subject: [PATCH 13/21] chore: fix in ssi-types --- package.json | 2 +- pnpm-lock.yaml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 985887d9..70b7e7fb 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@sd-jwt/present": "^0.6.1", "@sd-jwt/types": "^0.6.1", "@sphereon/pex-models": "^2.3.1", - "@sphereon/ssi-types": "0.29.1-unstable.120", + "@sphereon/ssi-types": "0.29.1-unstable.121", "ajv": "^8.12.0", "ajv-formats": "^2.1.1", "jwt-decode": "^3.1.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7f503313..632b5529 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,8 +21,8 @@ dependencies: specifier: ^2.3.1 version: 2.3.1 '@sphereon/ssi-types': - specifier: 0.29.1-unstable.120 - version: 0.29.1-unstable.120(ts-node@10.9.2) + specifier: 0.29.1-unstable.121 + version: 0.29.1-unstable.121(ts-node@10.9.2) ajv: specifier: ^8.12.0 version: 8.12.0 @@ -1298,8 +1298,8 @@ packages: - supports-color dev: false - /@sphereon/ssi-types@0.29.1-unstable.120(ts-node@10.9.2): - resolution: {integrity: sha512-l3tQj1H7N6+lsmho4Myu1L1NDpJx6kAq8rJOmUQOX1UwGmVgDH78Cs3km+DfenOm1OxnEBrEQCmHELTenu7hzg==} + /@sphereon/ssi-types@0.29.1-unstable.121(ts-node@10.9.2): + resolution: {integrity: sha512-g5qt2cRa/9t3WrBWMneGOrwjyU2Mqdh4LlKeO6japli5bgl5D6lim91F++m1iIIhOYP4dqPpk5PLjy9XQlLyEw==} dependencies: '@sd-jwt/decode': 0.6.1 '@sphereon/kmp-mdl-mdoc': 0.2.0-SNAPSHOT.22 From 26b7684ebc3de679f437eb5b30540e63b227cd6f Mon Sep 17 00:00:00 2001 From: sanderPostma Date: Tue, 17 Sep 2024 20:49:41 +0200 Subject: [PATCH 14/21] chore: major version up --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 70b7e7fb..dd0a31de 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@sphereon/pex", - "version": "4.1.1-unstable.1", + "version": "5.0.0-unstable.0", "description": "A Typescript implementation of the v1 and v2 DIF Presentation Exchange specification", "main": "dist/main/index.js", "module": "dist/module/index.js", From c9e4a9538de320d24a5754395c379ad1f99e54bf Mon Sep 17 00:00:00 2001 From: sanderPostma Date: Tue, 17 Sep 2024 20:53:13 +0200 Subject: [PATCH 15/21] chore: prettier --- lib/PEX.ts | 28 +++++++++++++++------------- lib/signing/types.ts | 16 ++++++++-------- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/lib/PEX.ts b/lib/PEX.ts index e6204f93..af1be2fd 100644 --- a/lib/PEX.ts +++ b/lib/PEX.ts @@ -9,11 +9,12 @@ import { OriginalVerifiableCredential, OriginalVerifiablePresentation, OrPromise, - SdJwtDecodedVerifiableCredential, SdJwtVcKbJwtHeader, + SdJwtDecodedVerifiableCredential, + SdJwtVcKbJwtHeader, W3CVerifiableCredential, W3CVerifiablePresentation, WrappedVerifiableCredential, - WrappedVerifiablePresentation + WrappedVerifiablePresentation, } from '@sphereon/ssi-types'; import { Status } from './ConstraintUtils'; @@ -27,7 +28,7 @@ import { SdJwtDecodedVerifiableCredentialInput, SdJwtKbJwtInput, VerifiablePresentationFromOpts, - VerifiablePresentationResult + VerifiablePresentationResult, } from './signing'; import { DiscoveredVersion, IInternalPresentationDefinition, IPresentationDefinition, OrArray, PEVersion, SSITypesBuilder } from './types'; import { calculateSdHash, definitionVersionDiscovery, getSubjectIdsAsString } from './utils'; @@ -341,7 +342,7 @@ export class PEX { // that a valid assumption? It seems to be this way for BBS SD as well const decoded = ( CredentialMapper.isSdJwtEncoded(credentials[0]) ? CredentialMapper.decodeVerifiableCredential(credentials[0], opts?.hasher) : credentials[0] - ) as SdJwtDecodedVerifiableCredential + ) as SdJwtDecodedVerifiableCredential; if (!opts?.hasher) { throw new Error('Hasher must be provided when creating a presentation with an SD-JWT VC'); @@ -361,14 +362,14 @@ export class PEX { payload: { iat: new Date().getTime(), sd_hash: sdHash, - } - } satisfies SdJwtKbJwtInput + }, + } satisfies SdJwtKbJwtInput; - const sdJwtDecodedPresentation:SdJwtDecodedVerifiableCredentialInput = { + const sdJwtDecodedPresentation: SdJwtDecodedVerifiableCredentialInput = { ...decoded, kbJwt, }; - return sdJwtDecodedPresentation + return sdJwtDecodedPresentation; } else { if (!selectedCredentials) { throw Error(`At least a verifiable credential needs to be passed in to create a presentation`); @@ -532,8 +533,9 @@ export class PEX { let presentation = presentationResult.presentation; - if (CredentialMapper.isSdJwtDecodedCredential(presentationResult.presentation as SdJwtDecodedVerifiableCredential)) { // Select type without kbJwt as isSdJwtDecodedCredential won't need it - const sdJwtPresentation = presentation as SdJwtDecodedVerifiableCredential + if (CredentialMapper.isSdJwtDecodedCredential(presentationResult.presentation as SdJwtDecodedVerifiableCredential)) { + // Select type without kbJwt as isSdJwtDecodedCredential won't need it + const sdJwtPresentation = presentation as SdJwtDecodedVerifiableCredential; // FIXME? SdJwtDecodedVerifiableCredential is local type and is not supported in ssi-sdk if (!this.options?.hasher) { throw new Error('Hasher must be provided when creating a presentation with an SD-JWT VC'); @@ -547,15 +549,15 @@ export class PEX { // alg MUST be set by the signer header: { typ: 'kb+jwt', - alg: hashAlg + alg: hashAlg, }, // aud MUST be set by the signer or provided by e.g. SIOP/OpenID4VP lib payload: { iat: new Date().getTime(), nonce: proofOptions?.nonce, sd_hash: sdHash, - } - } satisfies SdJwtKbJwtInput + }, + } satisfies SdJwtKbJwtInput; presentation = { ...sdJwtPresentation, diff --git a/lib/signing/types.ts b/lib/signing/types.ts index d78ab498..292faa29 100644 --- a/lib/signing/types.ts +++ b/lib/signing/types.ts @@ -6,8 +6,9 @@ import { IProofPurpose, IProofType, OriginalVerifiableCredential, - SdJwtDecodedVerifiableCredential, SdJwtVcKbJwtPayload, - W3CVerifiablePresentation + SdJwtDecodedVerifiableCredential, + SdJwtVcKbJwtPayload, + W3CVerifiablePresentation, } from '@sphereon/ssi-types'; import { SdJwtVcKbJwtHeader } from '@sphereon/ssi-types/src/types/sd-jwt-vc'; @@ -86,12 +87,11 @@ export enum PresentationSubmissionLocation { } export type SdJwtKbJwtInput = { - header: SdJwtVcKbJwtHeader - payload: Partial -} + header: SdJwtVcKbJwtHeader; + payload: Partial; +}; -export type SdJwtDecodedVerifiableCredentialInput = Omit - & { kbJwt: SdJwtKbJwtInput } +export type SdJwtDecodedVerifiableCredentialInput = Omit & { kbJwt: SdJwtKbJwtInput }; /** * The result object containing the presentation and presentation submission @@ -100,7 +100,7 @@ export interface PresentationResult { /** * The resulting presentation, can have an embedded submission data depending on the location parameter */ - presentation: IPresentation | SdJwtDecodedVerifiableCredential | SdJwtDecodedVerifiableCredentialInput + presentation: IPresentation | SdJwtDecodedVerifiableCredential | SdJwtDecodedVerifiableCredentialInput; /** * The resulting location of the presentation submission. From 466539b6534dfd6ffc816c46cf58aec9c4043733 Mon Sep 17 00:00:00 2001 From: sanderPostma Date: Tue, 17 Sep 2024 21:01:57 +0200 Subject: [PATCH 16/21] chore: Partial --- lib/PEX.ts | 6 ++---- lib/signing/types.ts | 2 +- test/SdJwt.spec.ts | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/lib/PEX.ts b/lib/PEX.ts index af1be2fd..b533d693 100644 --- a/lib/PEX.ts +++ b/lib/PEX.ts @@ -10,7 +10,6 @@ import { OriginalVerifiablePresentation, OrPromise, SdJwtDecodedVerifiableCredential, - SdJwtVcKbJwtHeader, W3CVerifiableCredential, W3CVerifiablePresentation, WrappedVerifiableCredential, @@ -356,9 +355,8 @@ export class PEX { // alg MUST be set by the signer header: { typ: 'kb+jwt', - alg: hashAlg, - } satisfies SdJwtVcKbJwtHeader, - // aud MUST be set by the signer or provided by e.g. SIOP/OpenID4VP lib + // aud MUST be set by the signer or provided by e.g. SIOP/OpenID4VP lib + }, payload: { iat: new Date().getTime(), sd_hash: sdHash, diff --git a/lib/signing/types.ts b/lib/signing/types.ts index 292faa29..8df57d14 100644 --- a/lib/signing/types.ts +++ b/lib/signing/types.ts @@ -87,7 +87,7 @@ export enum PresentationSubmissionLocation { } export type SdJwtKbJwtInput = { - header: SdJwtVcKbJwtHeader; + header: Partial; payload: Partial; }; diff --git a/test/SdJwt.spec.ts b/test/SdJwt.spec.ts index 4bb67015..f554b9d4 100644 --- a/test/SdJwt.spec.ts +++ b/test/SdJwt.spec.ts @@ -1,7 +1,7 @@ -import { SdJwtDecodedVerifiableCredential } from '@sphereon/ssi-types'; import { createHash } from 'crypto'; import { PresentationDefinitionV2 } from '@sphereon/pex-models'; +import { SdJwtDecodedVerifiableCredential } from '@sphereon/ssi-types'; import { PEX, PresentationSubmissionLocation, Status, Validated } from '../lib'; import { calculateSdHash } from '../lib/utils'; From 602d1d295a7b226777e8881ac5d321f1da7610ae Mon Sep 17 00:00:00 2001 From: sanderPostma Date: Tue, 17 Sep 2024 21:26:12 +0200 Subject: [PATCH 17/21] chore: lint --- test/SdJwt.spec.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/SdJwt.spec.ts b/test/SdJwt.spec.ts index 5a630127..7cc00d46 100644 --- a/test/SdJwt.spec.ts +++ b/test/SdJwt.spec.ts @@ -1,6 +1,7 @@ +import { createHash } from 'crypto'; + import { PresentationDefinitionV2 } from '@sphereon/pex-models'; import { SdJwtDecodedVerifiableCredential } from '@sphereon/ssi-types'; -import { createHash } from 'crypto'; import { PEX, PresentationSubmissionLocation, Status, Validated } from '../lib'; import { SubmissionRequirementMatchType } from '../lib/evaluation/core'; From 3f10f69b787605ff7b27bc4e3c95dd1170df02ab Mon Sep 17 00:00:00 2001 From: sanderPostma Date: Tue, 17 Sep 2024 22:13:22 +0200 Subject: [PATCH 18/21] chore: Partial type rename --- lib/PEX.ts | 16 ++++++++-------- lib/signing/types.ts | 8 ++++---- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/PEX.ts b/lib/PEX.ts index b533d693..cc5421cc 100644 --- a/lib/PEX.ts +++ b/lib/PEX.ts @@ -24,8 +24,8 @@ import { PresentationResult, PresentationSignCallBackParams, PresentationSubmissionLocation, - SdJwtDecodedVerifiableCredentialInput, - SdJwtKbJwtInput, + PartialSdJwtDecodedVerifiableCredential, + PartialSdJwtKbJwt, VerifiablePresentationFromOpts, VerifiablePresentationResult, } from './signing'; @@ -72,7 +72,7 @@ export class PEX { */ public evaluatePresentation( presentationDefinition: IPresentationDefinition, - presentations: OrArray, + presentations: OrArray, opts?: { limitDisclosureSignatureSuites?: string[]; restrictToFormats?: Format; @@ -315,7 +315,7 @@ export class PEX { */ hasher?: Hasher; }, - ): IPresentation | SdJwtDecodedVerifiableCredentialInput { + ): IPresentation | PartialSdJwtDecodedVerifiableCredential { const credentials = Array.isArray(selectedCredentials) ? selectedCredentials : [selectedCredentials]; // for SD-JWT we want to return the SD-JWT with only the needed disclosures (so filter disclosures array, and update the compactSdJwt) @@ -361,9 +361,9 @@ export class PEX { iat: new Date().getTime(), sd_hash: sdHash, }, - } satisfies SdJwtKbJwtInput; + } satisfies PartialSdJwtKbJwt; - const sdJwtDecodedPresentation: SdJwtDecodedVerifiableCredentialInput = { + const sdJwtDecodedPresentation: PartialSdJwtDecodedVerifiableCredential = { ...decoded, kbJwt, }; @@ -555,12 +555,12 @@ export class PEX { nonce: proofOptions?.nonce, sd_hash: sdHash, }, - } satisfies SdJwtKbJwtInput; + } satisfies PartialSdJwtKbJwt; presentation = { ...sdJwtPresentation, kbJwt, - } satisfies SdJwtDecodedVerifiableCredentialInput; + } satisfies PartialSdJwtDecodedVerifiableCredential; } const callBackParams: PresentationSignCallBackParams = { diff --git a/lib/signing/types.ts b/lib/signing/types.ts index 8df57d14..2961df82 100644 --- a/lib/signing/types.ts +++ b/lib/signing/types.ts @@ -86,12 +86,12 @@ export enum PresentationSubmissionLocation { PRESENTATION, // Part of the VP itself } -export type SdJwtKbJwtInput = { +export type PartialSdJwtKbJwt = { header: Partial; payload: Partial; }; -export type SdJwtDecodedVerifiableCredentialInput = Omit & { kbJwt: SdJwtKbJwtInput }; +export type PartialSdJwtDecodedVerifiableCredential = Omit & { kbJwt: PartialSdJwtKbJwt }; /** * The result object containing the presentation and presentation submission @@ -100,7 +100,7 @@ export interface PresentationResult { /** * The resulting presentation, can have an embedded submission data depending on the location parameter */ - presentation: IPresentation | SdJwtDecodedVerifiableCredential | SdJwtDecodedVerifiableCredentialInput; + presentation: IPresentation | SdJwtDecodedVerifiableCredential | PartialSdJwtDecodedVerifiableCredential; /** * The resulting location of the presentation submission. @@ -189,7 +189,7 @@ export interface PresentationSignCallBackParams { * and only the optional KB-JWT should be appended to the `compactSdJwt` property. If no KB-JWT is needed on the presentation, the `compactSdJwt` property * from the decoded SD-JWT can be returned as-is. */ - presentation: IPresentation | SdJwtDecodedVerifiableCredential | SdJwtDecodedVerifiableCredentialInput; + presentation: IPresentation | SdJwtDecodedVerifiableCredential | PartialSdJwtDecodedVerifiableCredential; /** * A partial proof value the callback can use to complete. If proofValue or JWS was supplied the proof could be complete already From 1a0364765b1779114649617c787fab257edb24b0 Mon Sep 17 00:00:00 2001 From: sanderPostma Date: Tue, 17 Sep 2024 22:16:04 +0200 Subject: [PATCH 19/21] chore: prettier --- lib/PEX.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/PEX.ts b/lib/PEX.ts index cc5421cc..1c687903 100644 --- a/lib/PEX.ts +++ b/lib/PEX.ts @@ -20,12 +20,12 @@ import { Status } from './ConstraintUtils'; import { EvaluationClientWrapper, EvaluationResults, SelectResults } from './evaluation'; import { PresentationEvaluationResults } from './evaluation'; import { + PartialSdJwtDecodedVerifiableCredential, + PartialSdJwtKbJwt, PresentationFromOpts, PresentationResult, PresentationSignCallBackParams, PresentationSubmissionLocation, - PartialSdJwtDecodedVerifiableCredential, - PartialSdJwtKbJwt, VerifiablePresentationFromOpts, VerifiablePresentationResult, } from './signing'; From 500a374f5b8c1ffb64ee8f4e333878150b2a1c2a Mon Sep 17 00:00:00 2001 From: sanderPostma Date: Wed, 18 Sep 2024 10:21:47 +0200 Subject: [PATCH 20/21] chore: comment update --- lib/PEX.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/PEX.ts b/lib/PEX.ts index 1c687903..733370a3 100644 --- a/lib/PEX.ts +++ b/lib/PEX.ts @@ -531,10 +531,8 @@ export class PEX { let presentation = presentationResult.presentation; - if (CredentialMapper.isSdJwtDecodedCredential(presentationResult.presentation as SdJwtDecodedVerifiableCredential)) { - // Select type without kbJwt as isSdJwtDecodedCredential won't need it + if (CredentialMapper.isSdJwtDecodedCredential(presentationResult.presentation as SdJwtDecodedVerifiableCredential)) { // Select type without kbJwt as isSdJwtDecodedCredential and won't accept the partial sdvc type const sdJwtPresentation = presentation as SdJwtDecodedVerifiableCredential; - // FIXME? SdJwtDecodedVerifiableCredential is local type and is not supported in ssi-sdk if (!this.options?.hasher) { throw new Error('Hasher must be provided when creating a presentation with an SD-JWT VC'); } From 66db08862ecb11ea89bcaad1d60eab542fc055c2 Mon Sep 17 00:00:00 2001 From: sanderPostma Date: Wed, 18 Sep 2024 10:38:53 +0200 Subject: [PATCH 21/21] chore: comment update --- lib/PEX.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/PEX.ts b/lib/PEX.ts index 733370a3..14731e4d 100644 --- a/lib/PEX.ts +++ b/lib/PEX.ts @@ -531,7 +531,8 @@ export class PEX { let presentation = presentationResult.presentation; - if (CredentialMapper.isSdJwtDecodedCredential(presentationResult.presentation as SdJwtDecodedVerifiableCredential)) { // Select type without kbJwt as isSdJwtDecodedCredential and won't accept the partial sdvc type + // Select type without kbJwt as isSdJwtDecodedCredential and won't accept the partial sdvc type + if (CredentialMapper.isSdJwtDecodedCredential(presentationResult.presentation as SdJwtDecodedVerifiableCredential)) { const sdJwtPresentation = presentation as SdJwtDecodedVerifiableCredential; if (!this.options?.hasher) { throw new Error('Hasher must be provided when creating a presentation with an SD-JWT VC');