Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP - Interfaces for the CredentialBuilder Proposal #1

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions src/apis/CredentialBuilder.ts
Original file line number Diff line number Diff line change
@@ -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<VerifiableCredential>;

addProof(credential: Partial<VerifiableCredential>, proofDescription?:ProofDescription): VerifiableCredential;
}
60 changes: 60 additions & 0 deletions src/types/VerifiableCredentialsTypes.ts
Original file line number Diff line number Diff line change
@@ -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;
}
1 change: 1 addition & 0 deletions src/types/commonTypes.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export type isoDateStr = string;