@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
JavaScript
;
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);
}