UNPKG

@wepublish/api

Version:
47 lines 1.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.OneOfGuard = void 0; const tslib_1 = require("tslib"); const common_1 = require("@nestjs/common"); const core_1 = require("@nestjs/core"); const rxjs_1 = require("rxjs"); const one_of_decorator_1 = require("./one-of.decorator"); let OneOfGuard = exports.OneOfGuard = class OneOfGuard { constructor(reflector, moduleRef) { this.reflector = reflector; this.moduleRef = moduleRef; } canActivate(context) { return tslib_1.__awaiter(this, void 0, void 0, function* () { const allowedGuards = this.reflector.getAllAndMerge(one_of_decorator_1.ONE_OF_METADATA_KEY, [ context.getHandler(), context.getClass() ]); const guards = allowedGuards.map(guardReference => this.moduleRef.get(guardReference, { strict: false })); if (!guards.length) { return true; } const checks = yield Promise.all(guards.map((guard) => tslib_1.__awaiter(this, void 0, void 0, function* () { try { const canActivate$ = guard.canActivate(context); const canActivate = (0, rxjs_1.isObservable)(canActivate$) ? yield (0, rxjs_1.lastValueFrom)(canActivate$) : yield canActivate$; return canActivate; } catch (error) { if (error instanceof common_1.UnauthorizedException) { return false; } throw error; } }))); return checks.some(Boolean); }); } }; exports.OneOfGuard = OneOfGuard = tslib_1.__decorate([ (0, common_1.Injectable)(), tslib_1.__metadata("design:paramtypes", [core_1.Reflector, core_1.ModuleRef]) ], OneOfGuard); //# sourceMappingURL=one-of.guard.js.map