credo-near-module
Version:
NEAR Module for Credo SSI Agent
51 lines (42 loc) • 1.78 kB
text/typescript
import { SpecValidationResult, VerificationMethods } from "@cheqd/sdk";
import { DidDocument } from "@credo-ts/core";
export function validateSpecCompliantPayload(
didDocument: DidDocument
): SpecValidationResult {
// id is required, validated on both compile and runtime
if (!didDocument.id && !didDocument.id.startsWith("did:near:"))
return { valid: false, error: "id is required" };
// verificationMethod is required
if (!didDocument.verificationMethod)
return { valid: false, error: "verificationMethod is required" };
// verificationMethod must be an array
if (!Array.isArray(didDocument.verificationMethod))
return { valid: false, error: "verificationMethod must be an array" };
// verificationMethod must be not be empty
if (!didDocument.verificationMethod.length)
return { valid: false, error: "verificationMethod must be not be empty" };
// verificationMethod types must be supported
const isValidVerificationMethod = didDocument.verificationMethod.every(
(vm) => {
switch (vm.type) {
case VerificationMethods.Ed255192020:
return vm.publicKeyMultibase != null;
case VerificationMethods.JWK:
return vm.publicKeyJwk != null;
case VerificationMethods.Ed255192018:
return vm.publicKeyBase58 != null;
default:
return false;
}
}
);
if (!isValidVerificationMethod)
return { valid: false, error: "verificationMethod publicKey is Invalid" };
const isValidService = didDocument.service
? didDocument?.service?.every((s) => {
return s?.serviceEndpoint && s?.id && s?.type;
})
: true;
if (!isValidService) return { valid: false, error: "Service is Invalid" };
return { valid: true } as SpecValidationResult;
}