import { Request, Response } from 'express'; import { DyFM_Error, DyFM_Errors } from '@futdevpro/fsm-dynamo'; import { DyNTS_Controller } from '../../../_services/route/controller.service'; import { DyNTS_Endpoint_Params } from '../../../_models/control-models/endpoint-params.control-model'; import { DyNTS_Errors_ControlService } from './errors.control-service'; /** * Auth retrofit config a `DyNTS_Errors_Controller`-hez. Opt-in — ha az * `authPreProcess` nincs megadva, a controller a regi (auth nelkuli) * viselkedest tartja. * * **Subclass-szintu konfiguracio:** az `authConfig` static, igy az abstract * osztaly minden subclass-a kozott OSZTOTT. Ha tobb subclass-od van kulonbozo * policy-val, hivd a `configure()`-t a megfelelo subclasson — TypeScript a * static field-eket per-class hatarozza meg. */ export interface DyNTS_ErrorsController_AuthConfig { /** * Pre-process fuggveny ami minden vedett endpoint elott fut. Tipikusan: * `DyNTS_AdminApiKey_AuthService.getInstance().verify`. * * Ha hianyzik vagy `undefined`, a controller NEM ad hozza auth-ot semelyik * endpoint-hoz (regi viselkedes, opt-in safety). */ authPreProcess?: (req: Request, res: Response) => Promise; /** * Vedett endpoint nevek listaja. Ha hianyzik, az osszes 8 endpoint vedett * (`authPreProcess` jelenleteben). * * Endpoint nevek: lasd `ALL_ENDPOINT_NAMES` (logError, newError, markErrorDone, * markAllErrorDone, recordFixAttempt, resolveError, getErrors, getErrorsPaged, * getErrorsByCategoryPaged, getErrorsByStatusPaged, getLastErrors, searchErrors). */ protectedEndpoints?: string[]; } /** * Endpoints: * * logError * POST /error/log * * markErrorDone * GET /error/mark-done/:errorId * * markAllErrorDone * GET /error/mark-all-done * * getErrors * GET /error/get-range/:range * * getErrorsPaged * GET /error/get-paged/:range/:pageSize/:pageIndex * * getLastErrors * GET /error/get-last-paged/:range/:pageSize/:pageIndex * * */ export declare abstract class DyNTS_Errors_Controller, T_Error_ControlService extends DyNTS_Errors_ControlService> extends DyNTS_Controller { protected abstract getError_ControlService(set: { data?: T_Error; issuer: string; }): T_Error_ControlService; protected readonly additionalEndpoints: DyNTS_Endpoint_Params[]; /** * Static auth config — opt-in retrofit. Default ures objektum → NO auth * (a meglevo integraciok valtoznatlan viselkedessel folytatodnak). */ protected static authConfig: DyNTS_ErrorsController_AuthConfig; /** * Static config setter. Hivhato barmikor a szerver startup-jan az endpoint * registration ELOTT. * * Use case (host app): * ```ts * const adminAuth = DyNTS_AdminApiKey_AuthService.getInstance(); * DyNTS_Errors_Controller.configure({ authPreProcess: adminAuth.verify }); * // vagy fine-grained: * DyNTS_Errors_Controller.configure({ * authPreProcess: adminAuth.verify, * protectedEndpoints: ['markAllErrorDone', 'logError'], * }); * ``` */ static configure(config: DyNTS_ErrorsController_AuthConfig): void; /** * Aktualis auth config olvasasa (test/diagnosztika celokra). */ static getAuthConfig(): DyNTS_ErrorsController_AuthConfig; /** * Test-only: visszaallitja az auth config-ot ures objektumra. Production code NE hivja. */ static _resetAuthConfigForTesting(): void; /** * Vissza-adja az adott endpoint-hoz tartozo `preProcesses` array-t. * Ha az auth NINCS configurolva (default) vagy az endpoint nincs a * `protectedEndpoints` listan, ures array-t ad vissza. */ protected getPreProcessesFor(endpointName: string): ((req: Request, res: Response) => Promise)[]; /** * FR-263 (2026-06-26) — LAZY, REQUEST-IDŐBEN kiértékelt guard-wrapper. * * GYÖKÉR-OK: a `setupEndpoints()` a controller ELSŐ konstrukciójakor fut, ami a built-in * error-controllernél a host-app `configure()`-ja ELŐTT történhet (a framework korán példányosítja * a singletont). Ilyenkor a `getPreProcessesFor()` még az ÜRES configot olvasta → a guard SOHA nem * kötődött → az admin error-read endpoint-ok (`get-range`, `get-paged`, …) token nélkül **200**-at * adtak vissza, kiszivárogtatva a belső error-logot (info-disclosure). A 39 másik (controller-szinten * HARDCODE-olt) guard azért működött, mert nem függ a `configure()` időzítésétől. * * FIX: a `preProcesses` egy wrapper, ami a configot KÉRÉS-IDŐBEN olvassa (`getPreProcessesFor`), így * a `configure()` SORREND-FÜGGETLEN — bármikor hívható az első kérés előtt. A 401-et a VALÓDI guard * küldi; `res.headersSent`-re leállunk (nincs dupla-send), és nem-védett endpointnál no-op (átenged). */ protected lazyPreProcessesFor(endpointName: string): ((req: Request, res: Response) => Promise)[]; setupEndpoints(): void; } //# sourceMappingURL=errors.controller.d.ts.map