UNPKG

@httpc/kit

Version:

httpc toolbox for building function-based API with minimal code and end-to-end type safety

34 lines (33 loc) 1.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AuthenticationBearerMiddleware = void 0; const tsyringe_1 = require("tsyringe"); const server_1 = require("@httpc/server"); const di_1 = require("../di"); const context_1 = require("./context"); const services_1 = require("../services"); function AuthenticationBearerMiddleware(options) { const authenticate = options?.onAuthenticate || onAuthenticate; if (options?.jwtSecret && !tsyringe_1.container.isRegistered((0, di_1.KEY)("ENV", "JWT_SECRET"), true)) { tsyringe_1.container.registerInstance((0, di_1.KEY)("ENV", "JWT_SECRET"), options.jwtSecret); } if (options?.onDecode) { tsyringe_1.container.registerInstance((0, di_1.KEY)("ENV", "JWT_DECODE"), options.onDecode); } return (0, server_1.PassthroughMiddleware)(async () => { const { request, user } = (0, server_1.useContext)(); if (!user) { const [schema, token] = request.headers.authorization?.split(" ") || []; if (schema?.toUpperCase() === "BEARER") { (0, context_1.useAuthentication)(await authenticate(token) .catch((0, services_1.catchLogAndThrowUnauthorized)("BearerMiddleware"))); } } }); } exports.AuthenticationBearerMiddleware = AuthenticationBearerMiddleware; async function onAuthenticate(token) { const container = (0, di_1.useContainer)(); const auth = (0, di_1.RESOLVE)(container, "BearerAuthentication"); return await auth.authenticate(token); }