import { stringify } from '@substrate-system/json-canon' import type { DidDocument, Service } from './types.js' export type DidArgs = { host:string; aka?:string[], publicKey:string; service?:Service[] } /** * Create a canonical JSON string from the given DID data. The JSON returned * here is stable, so you can use it for things like cryptographic signatures. * * @param {DidArgs} args DID data * @returns {string} */ export function json (args:DidArgs):string { return stringify(did(args)) } export function did ({ host, aka, publicKey, service, }:DidArgs):DidDocument { const newDid:DidDocument = { '@context': [ 'https://www.w3.org/ns/did/v1', 'https://w3id.org/security/multikey/v1' ], id: `did:web:${host}`, verificationMethod: [ { id: `did:web:${host}#main-key`, type: 'Multikey', controller: `did:web:${host}`, publicKeyMultibase: publicKey } ], authentication: [`did:web:${host}#main-key`], assertionMethod: [`did:web:${host}#main-key`] } if (aka) newDid.alsoKnownAs = aka if (service) newDid.service = service return newDid }