{"version":3,"file":"introspect.mjs","names":[],"sources":["../../../src/http/endpoints/introspect.ts"],"sourcesContent":["import type { Router, Response } from 'express'\nimport type { OpenBadgesHttpModule } from '../OpenBadgesHttpModule'\nimport type { ObRequest } from '../router'\n\nimport { getRequestContext, sendError, sendJson } from '../router'\nimport { OpenBadgesTokenRepository } from '../../repository/OpenBadgesTokenRepository'\nimport { OpenBadgesOAuthRepository } from '../../repository/OpenBadgesOAuthRepository'\nimport { parseBasicAuth, parseBodyClientAuth } from '../util/auth'\n\nexport function configureIntrospectEndpoint(router: Router, module: OpenBadgesHttpModule) {\n  router.post(module.config.introspectPath, async (req: ObRequest, res: Response) => {\n    const { agentContext } = getRequestContext(req)\n    const basic = parseBasicAuth(req) ?? parseBodyClientAuth(req)\n    if (!basic) return sendError(res, 401, 'invalid_client', 'Client authentication required')\n\n    const oauthRepo = agentContext.dependencyManager.resolve(OpenBadgesOAuthRepository)\n    const clientRec = await oauthRepo.findByClientId(agentContext, basic.clientId)\n    const reg = (clientRec?.clientRegistration as any) || {}\n    if (!clientRec || reg.client_secret !== basic.clientSecret)\n      return sendError(res, 401, 'invalid_client', 'Invalid client credentials')\n\n    const token = String(req.body?.token ?? '')\n    if (!token) return sendError(res, 400, 'invalid_request', 'token is required')\n    const tokenRepo = agentContext.dependencyManager.resolve(OpenBadgesTokenRepository)\n    const t = await tokenRepo.findByToken(agentContext, token)\n    if (!t || t.expiresAt.getTime() < Date.now()) return sendJson(res, { active: false })\n    return sendJson(res, {\n      active: true,\n      client_id: t.clientId,\n      scope: t.scope,\n      sub: t.subject,\n      token_type: t.tokenType,\n      exp: Math.floor(t.expiresAt.getTime() / 1000),\n      iat: Math.floor(t.createdAt.getTime() / 1000),\n    })\n  })\n}\n\n"],"mappings":";;;;;;aAIkE;AAKlE,SAAgB,4BAA4B,QAAgB,QAA8B;AACxF,QAAO,KAAK,OAAO,OAAO,gBAAgB,OAAO,KAAgB,QAAkB;EACjF,MAAM,EAAE,iBAAiB,kBAAkB,IAAI;EAC/C,MAAM,QAAQ,eAAe,IAAI,IAAI,oBAAoB,IAAI;AAC7D,MAAI,CAAC,MAAO,QAAO,UAAU,KAAK,KAAK,kBAAkB,iCAAiC;EAG1F,MAAM,YAAY,MADA,aAAa,kBAAkB,QAAQ,0BAA0B,CACjD,eAAe,cAAc,MAAM,SAAS;EAC9E,MAAM,MAAO,WAAW,sBAA8B,EAAE;AACxD,MAAI,CAAC,aAAa,IAAI,kBAAkB,MAAM,aAC5C,QAAO,UAAU,KAAK,KAAK,kBAAkB,6BAA6B;EAE5E,MAAM,QAAQ,OAAO,IAAI,MAAM,SAAS,GAAG;AAC3C,MAAI,CAAC,MAAO,QAAO,UAAU,KAAK,KAAK,mBAAmB,oBAAoB;EAE9E,MAAM,IAAI,MADQ,aAAa,kBAAkB,QAAQ,0BAA0B,CACzD,YAAY,cAAc,MAAM;AAC1D,MAAI,CAAC,KAAK,EAAE,UAAU,SAAS,GAAG,KAAK,KAAK,CAAE,QAAO,SAAS,KAAK,EAAE,QAAQ,OAAO,CAAC;AACrF,SAAO,SAAS,KAAK;GACnB,QAAQ;GACR,WAAW,EAAE;GACb,OAAO,EAAE;GACT,KAAK,EAAE;GACP,YAAY,EAAE;GACd,KAAK,KAAK,MAAM,EAAE,UAAU,SAAS,GAAG,IAAK;GAC7C,KAAK,KAAK,MAAM,EAAE,UAAU,SAAS,GAAG,IAAK;GAC9C,CAAC;GACF"}