{"version":3,"file":"registration.mjs","names":[],"sources":["../../../src/http/endpoints/registration.ts"],"sourcesContent":["import type { Router, Response } from 'express'\nimport type { OpenBadgesHttpModuleConfig } from '../OpenBadgesHttpModuleConfig'\nimport type { ObRequest } from '../router'\n\nimport { getRequestContext, sendError, sendJson } from '../router'\nimport { OpenBadgesOAuthRepository } from '../../repository/OpenBadgesOAuthRepository'\nimport { OpenBadgesOAuthRecord } from '../../repository/OpenBadgesOAuthRecord'\n\nfunction randomId(prefix = '') {\n  return prefix + Math.random().toString(36).slice(2) + Math.random().toString(36).slice(2)\n}\n\nexport function configureRegistrationEndpoint(router: Router, config: OpenBadgesHttpModuleConfig) {\n  router.post(config.registrationPath, async (req: ObRequest, res: Response) => {\n    const { agentContext } = getRequestContext(req)\n    const oauthRepo = agentContext.dependencyManager.resolve(OpenBadgesOAuthRepository)\n\n    const body = req.body || {}\n    if (!body.client_name) {\n      return sendError(res, 400, 'invalid_client_metadata', 'client_name is required')\n    }\n\n    const client_id = randomId('ob_')\n    const client_secret = randomId('sec_')\n\n    const registration = {\n      client_id,\n      client_secret,\n      client_id_issued_at: Math.floor(Date.now() / 1000),\n      client_secret_expires_at: 0,\n      token_endpoint_auth_method: 'client_secret_basic',\n      client_name: body.client_name,\n      redirect_uris: body.redirect_uris ?? [],\n      scope: body.scope ?? '',\n      grant_types: body.grant_types ?? ['authorization_code', 'refresh_token'],\n      response_types: body.response_types ?? ['code'],\n      application_type: body.application_type ?? 'web',\n    }\n\n    const rec = new OpenBadgesOAuthRecord({\n      host: new URL(config.baseUrl).origin,\n      clientRegistration: registration,\n      tokens: {},\n    })\n    await oauthRepo.save(agentContext, rec)\n\n    sendJson(res, registration, 201)\n  })\n}\n"],"mappings":";;;;;aAIkE;4BAEY;AAE9E,SAAS,SAAS,SAAS,IAAI;AAC7B,QAAO,SAAS,KAAK,QAAQ,CAAC,SAAS,GAAG,CAAC,MAAM,EAAE,GAAG,KAAK,QAAQ,CAAC,SAAS,GAAG,CAAC,MAAM,EAAE;;AAG3F,SAAgB,8BAA8B,QAAgB,QAAoC;AAChG,QAAO,KAAK,OAAO,kBAAkB,OAAO,KAAgB,QAAkB;EAC5E,MAAM,EAAE,iBAAiB,kBAAkB,IAAI;EAC/C,MAAM,YAAY,aAAa,kBAAkB,QAAQ,0BAA0B;EAEnF,MAAM,OAAO,IAAI,QAAQ,EAAE;AAC3B,MAAI,CAAC,KAAK,YACR,QAAO,UAAU,KAAK,KAAK,2BAA2B,0BAA0B;EAMlF,MAAM,eAAe;GACnB,WAJgB,SAAS,MAAM;GAK/B,eAJoB,SAAS,OAAO;GAKpC,qBAAqB,KAAK,MAAM,KAAK,KAAK,GAAG,IAAK;GAClD,0BAA0B;GAC1B,4BAA4B;GAC5B,aAAa,KAAK;GAClB,eAAe,KAAK,iBAAiB,EAAE;GACvC,OAAO,KAAK,SAAS;GACrB,aAAa,KAAK,eAAe,CAAC,sBAAsB,gBAAgB;GACxE,gBAAgB,KAAK,kBAAkB,CAAC,OAAO;GAC/C,kBAAkB,KAAK,oBAAoB;GAC5C;EAED,MAAM,MAAM,IAAI,sBAAsB;GACpC,MAAM,IAAI,IAAI,OAAO,QAAQ,CAAC;GAC9B,oBAAoB;GACpB,QAAQ,EAAE;GACX,CAAC;AACF,QAAM,UAAU,KAAK,cAAc,IAAI;AAEvC,WAAS,KAAK,cAAc,IAAI;GAChC"}