UNPKG

@sphereon/gx-compliance-client

Version:

<!--suppress HtmlDeprecatedAttribute --> <h1 align="center"> <br> <a href="https://www.sphereon.com"><img src="https://sphereon.com/content/themes/sphereon/assets/img/logo.svg" alt="Sphereon" width="400"></a> <br>Gaia-X Compliance client (Typescript

31 lines (28 loc) 1.64 kB
import { ICredentialSubject } from '@sphereon/ssi-types' import { CredentialPayload, VerifiableCredential } from '@veramo/core' import { IGaiaxCredentialType } from '../types' export function extractSubjectDIDFromVCs(verifiableCredentials: VerifiableCredential[] | CredentialPayload) { const credentialSubject = Array.isArray(verifiableCredentials) ? verifiableCredentials[0].credentialSubject : verifiableCredentials.credentialSubject // todo: check whether other credentials have the same subject? let participantDID if (Array.isArray(credentialSubject)) { const singleCredentialSubject = (credentialSubject as ICredentialSubject[]).filter((s) => !!s.id).pop() if (!credentialSubject) { throw new Error('No subject DID present') } participantDID = (singleCredentialSubject as ICredentialSubject)['id'] as string } else { participantDID = (credentialSubject as ICredentialSubject)['id'] as string } if (!participantDID) { throw new Error("Subject DID can't be extracted from received VerifiableCredentials. Please make sure the credentialSubject id is set") } return participantDID } export function extractApiTypeFromVC(vc: VerifiableCredential): string { const types = Array.isArray(vc.type) ? vc.type : [vc.type] // todo: This is too naive as you can have more than 2 types on a VC. Should simply search for the specific type in the array and if found return it const credentialType = types.find((type) => type !== 'VerifiableCredential') return credentialType === IGaiaxCredentialType.LegalPerson || IGaiaxCredentialType.NaturalPerson ? 'participant' : 'service-offering' }