@ceramicnetwork/common
Version:
Ceramic common types and utilities
66 lines • 2.09 kB
JavaScript
export class CeramicSigner {
constructor(reqs) {
this.isAuthenticated = false;
this.reqs = reqs;
}
get signer() {
return this;
}
static invalid() {
return new CeramicSigner();
}
static fromDID(did) {
const signer = new CeramicSigner();
signer.withDid(did);
return signer;
}
withDid(did) {
this.reqs = {
createDagJWS: (payload, options) => did.createDagJWS(payload, options),
createJWS: (payload, options) => did.createJWS(payload, options),
verifyJWS: (payload, options) => did.verifyJWS(payload, options),
async ensureAuthenticated() {
if (!did.authenticated) {
await did.authenticate();
}
},
async asController() {
return did.hasParent ? did.parent : did.id;
},
};
}
assertRequirements() {
if (!this.reqs) {
return Promise.reject('Requirements not met for signing. Was a DID set?');
}
}
async createJWS(payload, options) {
await this.assertRequirements();
if (!this.isAuthenticated) {
await this.reqs.ensureAuthenticated();
this.isAuthenticated = true;
}
return this.reqs.createJWS(payload, options);
}
async createDagJWS(payload, options) {
await this.assertRequirements();
if (!this.isAuthenticated) {
await this.reqs.ensureAuthenticated();
this.isAuthenticated = true;
}
return this.reqs.createDagJWS(payload, options);
}
async asController() {
await this.assertRequirements();
if (!this.isAuthenticated) {
await this.reqs.ensureAuthenticated();
this.isAuthenticated = true;
}
return this.reqs.asController();
}
async verifyJWS(jws, options) {
await this.assertRequirements();
return this.reqs.verifyJWS(jws, options);
}
}
//# sourceMappingURL=ceramic-signer.js.map