export type VCContextValue = string | Record; export interface VCIssuanceDescriptor { types: string[]; contexts: VCContextValue[]; subject: Record & { id: string; }; id?: string; issuer?: string | Record; issuanceDate?: string; expirationDate?: string; credentialStatus?: Record; } export type VCVerificationErrorKind = "crypto" | "expansion" | "expired" | "revoked" | "schema"; export interface VCVerificationOutcome { verified: boolean; errorKind?: VCVerificationErrorKind; error?: Error; results?: unknown[]; } export interface KeyDoc { address?: string; did?: string; id?: string; controller?: string; type?: string; publicKeyBase58?: string; privateKeyBase58?: string; [key: string]: unknown; } export type SignFn = (payload: { credential: Record; keyDoc: KeyDoc; compactProof?: boolean; issuerObject?: Record | null; addSuiteContext?: boolean; documentLoader?: ((uri: string) => Promise) | null; type?: string | null; }) => Promise<{ proof: Record; issuer?: string | Record; "@context"?: unknown; }>; export interface IssueVCOptions { sign?: SignFn; keyDoc: KeyDoc; documentLoader?: ((uri: string) => Promise) | null; compactProof?: boolean; issuerObject?: Record | null; addSuiteContext?: boolean; } export interface VerifyVCOptions { resolver?: { supports?: (uri: string) => boolean; resolve?: (uri: string) => Promise; } | null; skipSchemaCheck?: boolean; skipRevocationCheck?: boolean; verifyDates?: boolean; compactProof?: boolean; documentLoader?: ((uri: string) => Promise) | null; } export type VerifiableCredentialJSON = Record;