UNPKG

@dudousxd/nestjs-telescope

Version:

Laravel Telescope-style observability console for NestJS — core: watchers, recorder, correlation, SQLite store, headless API.

68 lines 3 kB
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; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; // packages/core/src/nest/telescope-action.guard.ts import { Inject, Injectable } from '@nestjs/common'; import { isQueueAction, isQueueState } from '../queue/queue-manager.js'; import { TELESCOPE_OPTIONS } from './telescope.options.js'; /** * Resolve the requested action. Most mutation routes carry it as the `:action` * path param. Enqueue uses a fixed `/enqueue` segment (it carries a JSON body), * so it has no `:action` param — we recover it from the request URL path. */ function resolveAction(params, url) { if (params.action !== undefined) return params.action; const path = (url ?? '').split('?')[0] ?? ''; if (path.endsWith('/enqueue')) return 'enqueue'; return undefined; } let TelescopeActionGuard = class TelescopeActionGuard { options; constructor(options) { this.options = options; } async canActivate(context) { // Default-deny: no authorizeAction means mutations are forbidden. if (!this.options.authorizeAction) return false; const request = context .switchToHttp() .getRequest(); const params = request.params ?? {}; const query = request.query ?? {}; const resolvedAction = resolveAction(params, request.url); if (!params.driver || !params.queue || !isQueueAction(resolvedAction)) return false; const action = { driver: params.driver, queue: params.queue, action: resolvedAction, ...(params.id !== undefined ? { jobId: params.id } : {}), ...(isQueueState(query.state) ? { state: query.state } : {}), }; try { return await this.options.authorizeAction({ request }, action); } catch { return false; // fail closed } } }; TelescopeActionGuard = __decorate([ Injectable(), __param(0, Inject(TELESCOPE_OPTIONS)), __metadata("design:paramtypes", [Object]) ], TelescopeActionGuard); export { TelescopeActionGuard }; //# sourceMappingURL=telescope-action.guard.js.map