diff --git a/libs/askar/src/agent.utils.ts b/libs/askar/src/agent.utils.ts index 1f49aa05c58b46e25d79e703d50f9c67c776104f..da302db16bc86cb7e360bcd3179b15fffc4f5c0f 100644 --- a/libs/askar/src/agent.utils.ts +++ b/libs/askar/src/agent.utils.ts @@ -65,6 +65,7 @@ import { SvdxDidResolver, SvdxModule, DefaultIpfsClient, + SvdxRecordsApi, } from "@vereign/credo-did-svdx"; import { SubjectInboundTransport } from "./askar/transports/agent.subject.inbound.transport"; @@ -204,9 +205,43 @@ export const generateDidWeb = async ({ console.log(JSON.stringify(didDocumentInstance.toJSON(), null, 2)); }; -export const generateRandomDidSvdx = async (agent: Agent) => { +export const generateDidSvdxForEmail = async (agent: Agent, email: string) => { const seed = crypto.randomBytes(46).toString("hex"); - return generateDidSvdx({ agent, seed }); + const activeKey = await generateKey({ seed, agent }); + const nextKey = await generateKey({ seed, agent }); // TODO Where to find next key? + + const WalletKeyPair = createWalletKeyPairClass(agent.context.wallet); + + const keyPair = new WalletKeyPair({ + id: `key-1`, + controller: `did:svdx:${activeKey.fingerprint}`, + key: activeKey, + wallet: agent.context.wallet, + }); + + const didResult = await agent.dids.create({ + method: "svdx", + options: { + inceptionKey: activeKey, + nextKey: nextKey, + signer: { signer: () => keyPair.signer() }, + }, + }); + console.log(didResult); + + if (!didResult.didState.didDocument) { + throw new Error("Could not create did svdx"); + } + + const svdxApi: SvdxRecordsApi = agent.modules["svdx"]; + await svdxApi.save({ + email: email, + did: didResult.didState.did!, + activeKey: activeKey.publicKeyBase58, + nextKey: nextKey.publicKeyBase58, + }); + + return didResult; }; export const generateDidSvdx = async ({ diff --git a/libs/askar/src/askar/services/agent.ocm.service.ts b/libs/askar/src/askar/services/agent.ocm.service.ts index 6b353ea8f6539789d67d47242c65bc60a431eeee..a650e9bd653e7ef66797b51cdc59f80d0da5f1a1 100644 --- a/libs/askar/src/askar/services/agent.ocm.service.ts +++ b/libs/askar/src/askar/services/agent.ocm.service.ts @@ -1,7 +1,7 @@ import { Injectable, Logger } from "@nestjs/common"; import { EntityNotFoundError, RequestSenderEmailVcDto } from "@ocm-engine/dtos"; import { CatalogClient } from "../clients/catalog.client"; -import { generateRandomDidSvdx } from "../../agent.utils"; +import { generateDidSvdxForEmail } from "../../agent.utils"; import { AskarService } from "./askar.service"; import { IConfCatalog } from "@ocm-engine/config"; import { ConfigService } from "@nestjs/config"; @@ -55,7 +55,10 @@ export class AgentOcmService { }; } - const newDidSvdx = await generateRandomDidSvdx(this.askar.agent); + const newDidSvdx = await generateDidSvdxForEmail( + this.askar.agent, + dto.email, + ); if (!newDidSvdx.didState.did) { throw new Error("Svdx did generation failed");