@did-btcr2/method
Version:
Javascript/TypeScript reference implementation of did:btcr2 method, a censorship resistant DID Method using the Bitcoin blockchain as a Verifiable Data Registry to announce changes to the DID document. Core package of the did-btcr2-js monorepo.
74 lines (61 loc) • 2.18 kB
text/typescript
import { DidDocumentError, INVALID_DID_DOCUMENT } from '@did-btcr2/common';
import { BeaconService } from '../interfaces/ibeacon.js';
import { DidDocument, DidVerificationMethod } from './did-document.js';
export class DidDocumentBuilder {
private document: Partial<DidDocument> = {};
constructor(initialDocument: Partial<DidDocument>) {
if (!initialDocument.id) {
throw new DidDocumentError('Missing required "id" property', INVALID_DID_DOCUMENT, initialDocument);
}
this.document.id = initialDocument.id;
this.document.verificationMethod = initialDocument.verificationMethod ?? [];
if (initialDocument['@context']) {
this.document['@context'] = initialDocument['@context'];
}
}
withController(controller?: Array<string>): this {
if (controller) {
this.document.controller = controller ?? [this.document.id!];
}
return this;
}
withAuthentication(authentication: Array<string | DidVerificationMethod>): this {
if (authentication) {
this.document.authentication = authentication;
}
return this;
}
withAssertionMethod(assertionMethod: Array<string | DidVerificationMethod>): this {
if (assertionMethod) {
this.document.assertionMethod = assertionMethod;
}
return this;
}
withCapabilityInvocation(capabilityInvocation: Array<string | DidVerificationMethod>): this {
if (capabilityInvocation) {
this.document.capabilityInvocation = capabilityInvocation;
}
return this;
}
withCapabilityDelegation(capabilityDelegation: Array<string | DidVerificationMethod>): this {
if (capabilityDelegation) {
this.document.capabilityDelegation = capabilityDelegation;
}
return this;
}
withService(service: Array<BeaconService>): this {
if (service) {
this.document.service = service;
}
return this;
}
build(): DidDocument {
const didDocument = new DidDocument(this.document as DidDocument);
for (const key of Object.keys(didDocument)) {
if (didDocument[key as keyof DidDocument] === undefined) {
delete didDocument[key as keyof DidDocument];
}
}
return didDocument;
}
}