From 0bfd114e31a6d505efe27833d81c646c4f4ece52 Mon Sep 17 00:00:00 2001 From: Joao Santos Date: Thu, 29 Apr 2021 17:10:53 -0300 Subject: [PATCH] interfaces for the CredentialBuilder --- src/apis/CredentialBuilder.ts | 30 +++++++++++++ src/types/VerifiableCredentialsTypes.ts | 60 +++++++++++++++++++++++++ src/types/commonTypes.ts | 1 + 3 files changed, 91 insertions(+) create mode 100644 src/apis/CredentialBuilder.ts create mode 100644 src/types/VerifiableCredentialsTypes.ts create mode 100644 src/types/commonTypes.ts diff --git a/src/apis/CredentialBuilder.ts b/src/apis/CredentialBuilder.ts new file mode 100644 index 0000000..352e7ba --- /dev/null +++ b/src/apis/CredentialBuilder.ts @@ -0,0 +1,30 @@ +import { + GenericClaimModel, ProofDescription, + SchemaIdentifier, + SubjectIdentifier, + VerifiableCredential, VerifiableCredentialId, VerifiableCredentialIssuer, VerifiableCredentialType +} from "../types/VerifiableCredentialsTypes"; + +export interface SubjectAttributes { + id: SubjectIdentifier; + claims: GenericClaimModel[]; +} + +export interface CredentialBlueprint { + id?: VerifiableCredentialId; + subjectAttributes: SubjectAttributes; + credentialSubjectSchema: SchemaIdentifier; + type: VerifiableCredentialType[]; + issuer: VerifiableCredentialIssuer; + proofDescription?: ProofDescription; +} + +export interface CredentialBuilderInterface { + /** + * Create a new instance of a partial VerifiableCredential. + * If all requirements to create a fully VerifiableCredential are available than will return a full VC. + */ + createVerifiableCredential(params: CredentialBlueprint): Partial; + + addProof(credential: Partial, proofDescription?:ProofDescription): VerifiableCredential; +} \ No newline at end of file diff --git a/src/types/VerifiableCredentialsTypes.ts b/src/types/VerifiableCredentialsTypes.ts new file mode 100644 index 0000000..eb6049e --- /dev/null +++ b/src/types/VerifiableCredentialsTypes.ts @@ -0,0 +1,60 @@ +import {isoDateStr} from "./commonTypes"; + +export interface ProofDescription { + type: string; + proofPurpose: string; + verificationMethod: string; +} + + +export interface VerifiableCredentialOptions { + id?: string; + type: string[]; +} + +export interface GenericClaimModel { + getClaimPath(): string; + getClaimStringValue(): string; +} + +export type VerifiableCredentialId = string; +export type VerifiableCredentialType = string; +export type VerifiableCredentialIssuer = string; +// TODO this will be a dynamic type based on the crendential schemas +export type CredentialSubject = any; + +export interface VerifiableCredentialProof extends ProofDescription { + created: isoDateStr; + //[string:any] TODO how to define a dynamic property to accommodate any proof signature structure +} +/** + * Defines an object instance compatible with the W3C Verifiable Credential Data Model + * https://www.w3.org/TR/vc-data-model + */ +export interface VerifiableCredential { + id: VerifiableCredentialId; + type: VerifiableCredentialType[]; + issuer: VerifiableCredentialIssuer; + issuanceDate: isoDateStr; + credentialSubject: CredentialSubject | null; + proof: VerifiableCredential | null; +} + + +/** + * An unique schema identifier to load a credential schema from cache or a remote repo + */ +export type SchemaIdentifier = string; + +/** + * An unique subject identifier like a publicKey or a DID + */ +export type SubjectIdentifier = string; + +export interface CredentialSubjectBuilder { + buildSubjectModel(claims:GenericClaimModel[], schema:SchemaIdentifier, id?:SubjectIdentifier): CredentialSubject; +} + +export interface ProofBuilder { + buildCredentialProof(credential:VerifiableCredential, requiredProof: ProofDescription): VerifiableCredential; +} diff --git a/src/types/commonTypes.ts b/src/types/commonTypes.ts new file mode 100644 index 0000000..2e6fa0f --- /dev/null +++ b/src/types/commonTypes.ts @@ -0,0 +1 @@ +export type isoDateStr = string; \ No newline at end of file