@originvault/ov-id-sdk
Version:
A TypeScript SDK for managing decentralized identities (DIDs) and verifiable credentials (VCs)
80 lines • 3.77 kB
JavaScript
import { getUniversalResolverFor } from '@veramo/did-resolver';
import dotenv from 'dotenv';
import { getDIDKeys, listDIDs, createDID, importDID } from './identityManager.js';
import fs from 'fs';
import path from 'path';
import os from 'os';
import { ensureKeyring } from './storePrivateKeys.js';
import { convertRecoveryToPrivateKey } from './encryption.js';
import { createOVAgent, createCheqdProvider, CheqdNetwork, keyStore, privateKeyStore } from './OVAgent.js';
dotenv.config();
export const PRIMARY_DID_WALLET_FILE = path.resolve(os.homedir(), '.originvault-primary-did-wallet.json');
export const ensurePrimaryDIDWallet = async () => {
if (!fs.existsSync(PRIMARY_DID_WALLET_FILE)) {
fs.writeFileSync(PRIMARY_DID_WALLET_FILE, JSON.stringify({}, null, 2));
}
};
const universalResolver = getUniversalResolverFor(['cheqd', 'key']);
let signedVCs = [];
export async function getPrimaryDID() {
ensurePrimaryDIDWallet();
try {
const kr = await ensureKeyring();
const pairs = kr.getPairs();
const primaryPair = pairs.find(p => p.meta?.isPrimary);
const did = (primaryPair?.meta?.did || '');
if (did)
return did;
try {
const storedData = fs.readFileSync(PRIMARY_DID_WALLET_FILE, 'utf8');
const { meta } = JSON.parse(storedData);
if (!meta)
return null;
const { did, didCredential } = meta;
if (!didCredential)
return null;
if (did)
return did;
}
catch (error) {
console.error("❌ Error accessing keyring. File may not exist");
}
return null;
}
catch (error) {
console.error("❌ Error accessing keyring:", error);
return null;
}
}
let cheqdMainnetProvider = null;
export let userAgent = null;
const initializeAgent = async ({ payerSeed, didRecoveryPhrase } = {}) => {
let cosmosPayerSeed = payerSeed || process.env.COSMOS_PAYER_SEED || '';
let didMnemonic = didRecoveryPhrase || process.env.USER_DID_RECOVERY_PHRASE || '';
cheqdMainnetProvider = createCheqdProvider(CheqdNetwork.Mainnet, cosmosPayerSeed, process.env.CHEQD_RPC_URL || 'https://cheqd.originvault.box:443');
userAgent = createOVAgent(cheqdMainnetProvider, universalResolver);
if (!userAgent) {
throw new Error("User agent could not be initialized");
}
const primaryDID = await getPrimaryDID();
if (primaryDID && didMnemonic) {
const primaryPrivateKey = await convertRecoveryToPrivateKey(didMnemonic);
const { credentials } = await importDID({ didString: primaryDID, privateKey: primaryPrivateKey, method: 'cheqd', agent: userAgent });
signedVCs.concat(credentials);
}
return { agent: userAgent, did: primaryDID || '', key: primaryDID || '', credentials: signedVCs };
};
const userStore = {
initialize: initializeAgent,
agent: userAgent,
cheqdMainnetProvider,
privateKeyStore,
keyStore,
listDids: (provider) => userAgent ? listDIDs(userAgent, provider) : Promise.reject(new Error("User agent not initialized")),
getDID: (didString) => userAgent ? getDIDKeys(didString) : Promise.reject(new Error("User agent not initialized")),
createDID: (props) => userAgent ? createDID({ ...props, agent: userAgent }) : Promise.reject(new Error("User agent not initialized")),
importDID: (didString, privateKey, method) => userAgent ? importDID({ didString, privateKey, method, agent: userAgent }) : Promise.reject(new Error("User agent not initialized")),
getPrimaryDID: async () => await getPrimaryDID() || Promise.reject(new Error("User agent not initialized")),
};
export { userStore };
//# sourceMappingURL=userAgent.js.map