import {
validateDeveloperCredential,
validateAgentCredential,
signCredential,
verifyCredential,
generateKeyPair,
ValidationError,
SignatureError,
} from '@beltic/sdk';
async function credentialWorkflow() {
// 1. Validate credential before signing
const credential = { /* DeveloperCredential or AgentCredential */ };
const isDeveloper = 'legalName' in credential;
const validation = isDeveloper
? validateDeveloperCredential(credential)
: validateAgentCredential(credential);
if (!validation.ok) {
throw new ValidationError(validation.errors);
}
// 2. Generate keypair
const { privateKey, publicKey } = await generateKeyPair('EdDSA');
// 3. Sign credential
const issuerDid = 'did:web:issuer.beltic.dev';
const subjectDid = credential.subjectDid || credential.agentId;
const token = await signCredential(credential, privateKey, {
alg: 'EdDSA',
issuerDid,
subjectDid,
keyId: `${issuerDid}#key-1`,
audience: 'did:web:platform.example.com', // Optional
});
// 4. Verify credential
const verified = await verifyCredential(token, {
keyResolver: async ({ kid, alg, iss }) => {
// In production, resolve key from DID document or JWKS
// For this example, return the public key directly
return publicKey;
},
expectedIssuer: issuerDid,
expectedAudience: 'did:web:platform.example.com',
allowedAlgorithms: ['EdDSA'],
});
return {
token,
credential: verified.credential,
algorithm: verified.algorithm,
};
}