{"version":3,"file":"did.mjs","names":[],"sources":["../../../src/http/endpoints/did.ts"],"sourcesContent":["import type { Router, Response } from 'express'\nimport type { OpenBadgesHttpModuleConfig } from '../OpenBadgesHttpModuleConfig'\nimport type { ObRequest } from '../router'\n\nimport { getRequestContext, sendJson } from '../router'\nimport { OpenBadgesKeyBindingRepository } from '../../repository/OpenBadgesKeyBindingRepository'\n\nfunction parseDidWebToPath(did: string): string {\n  // did:web:example.com[:path:segments]\n  const parts = did.split(':')\n  if (parts.length < 3 || parts[0] !== 'did' || parts[1] !== 'web') return ''\n  const domainEnc = parts[2]\n  const pathSegs = parts.slice(3)\n  // Resolution rules: if path segments present => \"/<segments>/did.json\", else => \"/.well-known/did.json\"\n  return pathSegs.length > 0 ? `/${pathSegs.join('/')}/did.json` : '/.well-known/did.json'\n}\n\nexport function configureDidDocumentEndpoint(router: Router, config: OpenBadgesHttpModuleConfig) {\n  const did = config.didWebId\n  if (!did) return\n  const path = config.didDocumentPath || parseDidWebToPath(did) || '/.well-known/did.json'\n  router.get(path, async (req: ObRequest, res: Response) => {\n    const { agentContext } = getRequestContext(req)\n    const bindingRepo = agentContext.dependencyManager.resolve(OpenBadgesKeyBindingRepository)\n    let bindings = [] as any[]\n    try {\n      const all = await bindingRepo.getAll(agentContext)\n      bindings = (all as any[]).filter((b) => b.controller === did)\n    } catch (e) {\n      agentContext.config.logger.warn('[OB][HTTP][DID] bindingRepo.getAll failed', { err: (e as any)?.message || e })\n      bindings = []\n    }\n\n    const vm = bindings.map((b: any) => ({\n      id: b.vmId,\n      type: 'Ed25519VerificationKey2020',\n      controller: did,\n      publicKeyMultibase: b.publicKeyMultibase,\n    }))\n    const doc = {\n      '@context': 'https://www.w3.org/ns/did/v1',\n      id: did,\n      verificationMethod: vm,\n      assertionMethod: vm.map((v: any) => v.id),\n    }\n    sendJson(res, doc)\n  })\n}\n"],"mappings":";;;;aAIuD;AAGvD,SAAS,kBAAkB,KAAqB;CAE9C,MAAM,QAAQ,IAAI,MAAM,IAAI;AAC5B,KAAI,MAAM,SAAS,KAAK,MAAM,OAAO,SAAS,MAAM,OAAO,MAAO,QAAO;AACvD,OAAM;CACxB,MAAM,WAAW,MAAM,MAAM,EAAE;AAE/B,QAAO,SAAS,SAAS,IAAI,IAAI,SAAS,KAAK,IAAI,CAAC,aAAa;;AAGnE,SAAgB,6BAA6B,QAAgB,QAAoC;CAC/F,MAAM,MAAM,OAAO;AACnB,KAAI,CAAC,IAAK;CACV,MAAM,OAAO,OAAO,mBAAmB,kBAAkB,IAAI,IAAI;AACjE,QAAO,IAAI,MAAM,OAAO,KAAgB,QAAkB;EACxD,MAAM,EAAE,iBAAiB,kBAAkB,IAAI;EAC/C,MAAM,cAAc,aAAa,kBAAkB,QAAQ,+BAA+B;EAC1F,IAAI,WAAW,EAAE;AACjB,MAAI;AAEF,eADY,MAAM,YAAY,OAAO,aAAa,EACxB,QAAQ,MAAM,EAAE,eAAe,IAAI;WACtD,GAAG;AACV,gBAAa,OAAO,OAAO,KAAK,6CAA6C,EAAE,KAAM,GAAW,WAAW,GAAG,CAAC;AAC/G,cAAW,EAAE;;EAGf,MAAM,KAAK,SAAS,KAAK,OAAY;GACnC,IAAI,EAAE;GACN,MAAM;GACN,YAAY;GACZ,oBAAoB,EAAE;GACvB,EAAE;AAOH,WAAS,KANG;GACV,YAAY;GACZ,IAAI;GACJ,oBAAoB;GACpB,iBAAiB,GAAG,KAAK,MAAW,EAAE,GAAG;GAC1C,CACiB;GAClB"}