@bitloops/bl-boilerplate-infra-nest-auth-passport
Version:
TypeScript postgres package for Bitloops Language generated projects
61 lines (60 loc) • 2.95 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AsyncLocalStorageInterceptor = void 0;
const common_1 = require("@nestjs/common");
const bl_boilerplate_core_1 = require("@bitloops/bl-boilerplate-core");
let AsyncLocalStorageInterceptor = class AsyncLocalStorageInterceptor {
intercept(context, next) {
if (context.getType() === 'http') {
// do something that is only important in the context of regular HTTP requests (REST)
const request = context.switchToHttp().getRequest();
const store = bl_boilerplate_core_1.asyncLocalStorage.getStore();
if (!store)
throw new Error('No store found, did you forget to attach correlation middleware?');
if (!request.user) {
return next.handle();
}
const token = this.getJWTToken(request);
const email = request.user.email;
const userId = request.user.userId;
store.set('context', { userId, email, jwt: token });
return next.handle();
}
else if (context.getType() === 'rpc') {
// do something that is only important in the context of Microservice requests
const data = context.switchToRpc().getData();
const requestContext = context.switchToRpc().getContext();
const { decodedToken, jwt } = requestContext;
const store = bl_boilerplate_core_1.asyncLocalStorage.getStore();
if (!store)
throw new Error('No store found, did you forget to attach correlation middleware?');
if (!decodedToken) {
return next.handle();
}
const email = decodedToken.email;
const userId = decodedToken.sub;
store.set('context', { userId, email, jwt });
return next.handle();
}
// TODO Handle graphQL
return next.handle();
}
getJWTToken(req) {
const authHeader = req.headers['authorization'];
if (authHeader) {
const token = authHeader.split('Bearer ')[1];
return token;
}
return '';
}
};
AsyncLocalStorageInterceptor = __decorate([
(0, common_1.Injectable)()
], AsyncLocalStorageInterceptor);
exports.AsyncLocalStorageInterceptor = AsyncLocalStorageInterceptor;