UNPKG

@credo-ts/core

Version:

<p align="center"> <br /> <img alt="Credo Logo" src="https://github.com/openwallet-foundation/credo-ts/blob/c7886cb8377ceb8ee4efe8d264211e561a75072d/images/credo-logo.png" height="250px" /> </p> <h1 align="center"><b>Credo - Core</b></h1

173 lines (172 loc) • 5.69 kB
import { JsonTransformer } from "../../../../utils/JsonTransformer.mjs"; import "../../../../utils/index.mjs"; import { PublicJwk } from "../../../kms/jwk/PublicJwk.mjs"; import { KeyManagementApi } from "../../../kms/KeyManagementApi.mjs"; import "../../../kms/index.mjs"; import { DidDocument } from "../../domain/DidDocument.mjs"; import "../../domain/DidDocumentRole.mjs"; import "../../domain/index.mjs"; import { DidRecord } from "../../repository/DidRecord.mjs"; import { DidRepository } from "../../repository/DidRepository.mjs"; import "../../repository/index.mjs"; import { didDocumentToNumAlgo4Did } from "./peerDidNumAlgo4.mjs"; import { getAlternativeDidsForPeerDid } from "./didPeer.mjs"; import { publicJwkToNumAlgo0DidDocument } from "./peerDidNumAlgo0.mjs"; import { didDocumentJsonToNumAlgo1Did } from "./peerDidNumAlgo1.mjs"; import { didDocumentToNumAlgo2Did } from "./peerDidNumAlgo2.mjs"; //#region src/modules/dids/methods/peer/PeerDidRegistrar.ts var PeerDidRegistrar = class { constructor() { this.supportedMethods = ["peer"]; } async create(agentContext, options) { const kms = agentContext.dependencyManager.resolve(KeyManagementApi); const didRepository = agentContext.dependencyManager.resolve(DidRepository); let did; let didDocument; let keys; try { if (isPeerDidNumAlgo0CreateOptions(options)) { let publicJwk; if (options.options.createKey) { const createKeyResult = await kms.createKey(options.options.createKey); publicJwk = PublicJwk.fromPublicJwk(createKeyResult.publicJwk); keys = [{ didDocumentRelativeKeyId: `#${publicJwk.fingerprint}`, kmsKeyId: createKeyResult.keyId }]; } else { const _publicJwk = await kms.getPublicKey({ keyId: options.options.keyId }); if (!_publicJwk) return { didDocumentMetadata: {}, didRegistrationMetadata: {}, didState: { state: "failed", reason: `notFound: key with key id '${options.options.keyId}' not found` } }; if (_publicJwk.kty === "oct") return { didDocumentMetadata: {}, didRegistrationMetadata: {}, didState: { state: "failed", reason: `notFound: key with key id '${options.options.keyId}' uses unsupported kty 'oct' for did:key` } }; publicJwk = PublicJwk.fromPublicJwk(_publicJwk); keys = [{ didDocumentRelativeKeyId: `#${publicJwk.fingerprint}`, kmsKeyId: options.options.keyId }]; } didDocument = publicJwkToNumAlgo0DidDocument(publicJwk); did = didDocument.id; } else if (isPeerDidNumAlgo1CreateOptions(options)) { const didDocumentJson = options.didDocument.toJSON(); did = didDocumentJsonToNumAlgo1Did(didDocumentJson); keys = options.options.keys; didDocument = JsonTransformer.fromJSON({ ...didDocumentJson, id: did }, DidDocument); } else if (isPeerDidNumAlgo2CreateOptions(options)) { const didDocumentJson = options.didDocument.toJSON(); did = didDocumentToNumAlgo2Did(options.didDocument); keys = options.options.keys; didDocument = JsonTransformer.fromJSON({ ...didDocumentJson, id: did }, DidDocument); } else if (isPeerDidNumAlgo4CreateOptions(options)) { const didDocumentJson = options.didDocument.toJSON(); keys = options.options.keys; const { longFormDid, shortFormDid } = didDocumentToNumAlgo4Did(options.didDocument); did = longFormDid; didDocument = JsonTransformer.fromJSON({ ...didDocumentJson, id: longFormDid, alsoKnownAs: [shortFormDid] }, DidDocument); } else return { didDocumentMetadata: {}, didRegistrationMetadata: {}, didState: { state: "failed", reason: "Missing or incorrect numAlgo provided" } }; if (!keys || keys.length === 0) return { didDocumentMetadata: {}, didRegistrationMetadata: {}, didState: { state: "failed", reason: `Missing required 'keys' linking did document verification method id to the kms key id. Provide at least one key in the create options` } }; const didRecord = new DidRecord({ did, role: "created", didDocument: isPeerDidNumAlgo1CreateOptions(options) ? didDocument : void 0, keys, tags: { recipientKeyFingerprints: didDocument.recipientKeys.map((key) => key.fingerprint), alternativeDids: getAlternativeDidsForPeerDid(did) } }); await didRepository.save(agentContext, didRecord); return { didDocumentMetadata: {}, didRegistrationMetadata: {}, didState: { state: "finished", did: didDocument.id, didDocument } }; } catch (error) { return { didDocumentMetadata: {}, didRegistrationMetadata: {}, didState: { state: "failed", reason: `unknownError: ${error.message}` } }; } } async update() { return { didDocumentMetadata: {}, didRegistrationMetadata: {}, didState: { state: "failed", reason: "notImplemented: updating did:peer not implemented yet" } }; } async deactivate() { return { didDocumentMetadata: {}, didRegistrationMetadata: {}, didState: { state: "failed", reason: "notImplemented: deactivating did:peer not implemented yet" } }; } }; function isPeerDidNumAlgo1CreateOptions(options) { return options.options.numAlgo === 1; } function isPeerDidNumAlgo0CreateOptions(options) { return options.options.numAlgo === 0; } function isPeerDidNumAlgo2CreateOptions(options) { return options.options.numAlgo === 2; } function isPeerDidNumAlgo4CreateOptions(options) { return options.options.numAlgo === 4; } //#endregion export { PeerDidRegistrar }; //# sourceMappingURL=PeerDidRegistrar.mjs.map