@futdevpro/nts-dynamo 1.15.20 → 1.15.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/__documentations/2026-05-17-static-client-serving-howto.md +144 -0
  2. package/_specifications/BACKLOG.md +6 -6
  3. package/build/_modules/logs/_models/file-log-entry.interface.d.ts +14 -0
  4. package/build/_modules/logs/_models/file-log-entry.interface.d.ts.map +1 -0
  5. package/build/_modules/logs/_models/file-log-entry.interface.js +3 -0
  6. package/build/_modules/logs/_models/file-log-entry.interface.js.map +1 -0
  7. package/build/_modules/logs/_models/file-log-read-result.interface.d.ts +36 -0
  8. package/build/_modules/logs/_models/file-log-read-result.interface.d.ts.map +1 -0
  9. package/build/_modules/logs/_models/file-log-read-result.interface.js +3 -0
  10. package/build/_modules/logs/_models/file-log-read-result.interface.js.map +1 -0
  11. package/build/_modules/logs/file-log.service.d.ts +46 -0
  12. package/build/_modules/logs/file-log.service.d.ts.map +1 -1
  13. package/build/_modules/logs/file-log.service.js +178 -0
  14. package/build/_modules/logs/file-log.service.js.map +1 -1
  15. package/build/_modules/logs/file-logs.controller.d.ts +41 -0
  16. package/build/_modules/logs/file-logs.controller.d.ts.map +1 -0
  17. package/build/_modules/logs/file-logs.controller.js +139 -0
  18. package/build/_modules/logs/file-logs.controller.js.map +1 -0
  19. package/build/_modules/logs/get-file-logs-routing-module.util.d.ts +32 -0
  20. package/build/_modules/logs/get-file-logs-routing-module.util.d.ts.map +1 -0
  21. package/build/_modules/logs/get-file-logs-routing-module.util.js +38 -0
  22. package/build/_modules/logs/get-file-logs-routing-module.util.js.map +1 -0
  23. package/build/_modules/logs/index.d.ts +4 -0
  24. package/build/_modules/logs/index.d.ts.map +1 -1
  25. package/build/_modules/logs/index.js +5 -1
  26. package/build/_modules/logs/index.js.map +1 -1
  27. package/build/_modules/server/errors/errors.controller.d.ts +64 -0
  28. package/build/_modules/server/errors/errors.controller.d.ts.map +1 -1
  29. package/build/_modules/server/errors/errors.controller.js +66 -0
  30. package/build/_modules/server/errors/errors.controller.js.map +1 -1
  31. package/package.json +1 -1
  32. package/src/_modules/logs/_models/file-log-entry.interface.ts +13 -0
  33. package/src/_modules/logs/_models/file-log-read-result.interface.ts +37 -0
  34. package/src/_modules/logs/file-log.service.spec.ts +139 -0
  35. package/src/_modules/logs/file-log.service.ts +183 -0
  36. package/src/_modules/logs/file-logs.controller.spec.ts +245 -0
  37. package/src/_modules/logs/file-logs.controller.ts +165 -0
  38. package/src/_modules/logs/get-file-logs-routing-module.util.ts +51 -0
  39. package/src/_modules/logs/index.ts +7 -0
  40. package/src/_modules/server/errors/errors.controller.spec.ts +70 -0
  41. package/src/_modules/server/errors/errors.controller.ts +102 -0
@@ -0,0 +1,144 @@
1
+ # Static client serving — how-to
2
+
3
+ **Date:** 2026-05-17
4
+ **Backlog:** [BL-20260417-001](../_specifications/BACKLOG.md) — DyNTS-kliens kiszolgálás képesség
5
+ **Status:** ✅ done (audit + docs)
6
+
7
+ ## TL;DR
8
+
9
+ A `DyNTS_App_Server` MÁR most ki tudja szolgálni a klienst (SPA-kat, statikus
10
+ oldalakat) az API route-ok mellett ugyanazon a hoszton. Az implementáció
11
+ 2026-03-30 óta (commit `8ffe535`) része a frameworknek; a BL-20260417-001
12
+ backlog entry post-dated a fejlesztést. Ez a how-to a meglévő capability-t
13
+ dokumentálja.
14
+
15
+ ## Konfigurációs felület
16
+
17
+ A static client serving akkor aktiválódik, ha a `DyNTS_App_Server`
18
+ subclass-od `getStaticClientSettings()`-et override-olja és egy
19
+ [`DyNTS_StaticClient_Settings`](../src/_models/interfaces/static-client-settings.interface.ts)
20
+ objektumot ad vissza:
21
+
22
+ ```ts
23
+ import { DyNTS_StaticClient_Settings } from '@futdevpro/nts-dynamo';
24
+
25
+ export interface DyNTS_StaticClient_Settings {
26
+ root: string; // a static fájlok mappája (abszolút v. cwd-relatív)
27
+ fallbackPath?: string; // SPA fallback (pl. 'index.html')
28
+ assetCacheMaxAge?: number; // asset Cache-Control max-age (sec)
29
+ assetCacheImmutable?: boolean; // 'immutable' direktíva (Angular hashed fájlokra)
30
+ fallbackCacheMaxAge?: number; // fallback file Cache-Control max-age (sec)
31
+ }
32
+ ```
33
+
34
+ ## Példa subclass (Angular SPA)
35
+
36
+ ```ts
37
+ import path from 'path';
38
+ import { DyNTS_App_Server, DyNTS_StaticClient_Settings } from '@futdevpro/nts-dynamo';
39
+
40
+ export class MyApp_Server extends DyNTS_App_Server {
41
+ // ... egyéb override-ok (getAppParams, getPortSettings, getApiBasePath, stb.) ...
42
+
43
+ override getStaticClientSettings(): DyNTS_StaticClient_Settings | undefined {
44
+ return {
45
+ // Az Angular `dist/<app-name>` mappa abszolút path-ja
46
+ root: path.resolve(__dirname, '../../client/dist/my-app'),
47
+
48
+ // SPA — minden ismeretlen route a kliens-routerre megy
49
+ fallbackPath: 'index.html',
50
+
51
+ // Hashed assetek (Angular alapból ad nekik hash-et) — 1 év, immutable
52
+ assetCacheMaxAge: 31_536_000,
53
+ assetCacheImmutable: true,
54
+
55
+ // index.html-t SOHA ne cache-elje a böngésző (deploy után friss kell)
56
+ fallbackCacheMaxAge: 0,
57
+ };
58
+ }
59
+ }
60
+ ```
61
+
62
+ ## Mit csinál a framework a háttérben
63
+
64
+ A `DyNTS_App_Server.mountStaticClient()` ([app.server.ts ~1421-1484](../src/_services/server/app.server.ts))
65
+ ezt automatikusan beállítja az API route-ok regisztrációja UTÁN:
66
+
67
+ 1. **`Express.static(root)` middleware** mount a `/` alatt. Ha `assetCacheMaxAge`
68
+ meg van adva, `setHeaders` callback-en keresztül beállítja a `Cache-Control:
69
+ max-age=<N>[, immutable]` header-t.
70
+ 2. **SPA fallback** (ha `fallbackPath` adott): minden ismeretlen GET kérésre
71
+ `res.sendFile(fallbackPath)` + `Cache-Control: max-age=<fallbackCacheMaxAge>`.
72
+ 3. **Default 404** (ha `fallbackPath` hiányzik): a beépített
73
+ [`DyNTS_defaultNotFoundPageHtml`](../src/_collections/default-not-found-page.const.ts)
74
+ kerül kiszolgálásra `status: 404` + `Content-Type: text/html`.
75
+ 4. **HTTP + HTTPS** mindkettő: a flow azonos a `this.openExpress` és
76
+ `this.secureExpress` instance-ekhez (ha mindkettő be van állítva).
77
+
78
+ ## Config matrix — mikor melyik mezőt használd
79
+
80
+ | Use case | `root` | `fallbackPath` | `assetCacheMaxAge` | `assetCacheImmutable` | `fallbackCacheMaxAge` |
81
+ |---|---|---|---|---|---|
82
+ | **SPA** (Angular, React) hashed assetekkel | ✅ kötelező | `'index.html'` | `31_536_000` (1 év) | `true` | `0` (mindig friss) |
83
+ | **SPA** dev mode (rebuild gyakori) | ✅ | `'index.html'` | `0` | `false` | `0` |
84
+ | **Statikus oldal** (nincs SPA-router) | ✅ | hagyd ki | `3600` (1 óra) vagy ahogy jó | `false` | n/a |
85
+ | **Csak API** (nincs frontend) | NE override-old a `getStaticClientSettings()`-et — akkor `undefined`-ot ad vissza és a `mountStaticClient` early-return-öl | | | | |
86
+
87
+ ## Asset + fallback cache stratégia (SPA)
88
+
89
+ A két mező együttes használata az **alapja az Angular/React deploy-friendly caching**-nek:
90
+
91
+ - **Hashed assetek** (`main.<hash>.js`, `styles.<hash>.css`, stb.) ÉLETBEN nem
92
+ változnak — biztonságosan `immutable` + 1 év max-age. A böngésző sose kérdezi
93
+ meg újra a szerverről, amíg a HTML egy új hash-elt nevet nem hivatkozik be.
94
+ - **`index.html`** a "katalógus" ami a hashed assetekre mutat. Deploy után
95
+ AZONNAL friss kell legyen, különben a kliens régi assetekre hivatkozó régi
96
+ index.html-t kap → 404-ek a már nem létező hashed nevekre.
97
+ → `fallbackCacheMaxAge: 0` (no-cache).
98
+
99
+ Az `assetCacheMaxAge` undefined-ja default (Express.static alapértelmezett) cache
100
+ viselkedést hagy meg — production deploy-okra mindig explicit állítsd be.
101
+
102
+ ## Integration test minta
103
+
104
+ A meglévő integration test fixture ([`DyNTS_AppIntegrationTest_Mock`](../src/_modules/mock/app-integration-test.mock.ts)) +
105
+ spec ([app-extended.integration.spec.ts](../src/_modules/socket/app-extended.integration.spec.ts))
106
+ mutatja a teljes flow-t:
107
+
108
+ - A spec `beforeAll`-ban létrehoz egy temp dir-t, kitölti pár static fájllal,
109
+ beállítja a mock `integrationStaticRoot` static property-jét, majd elindítja
110
+ az appot.
111
+ - A spec asszertálja:
112
+ - `started === true` (az app HTTP listenert kapott)
113
+ - GET nemlétező path → `404` + a default not-found HTML kiszolgálva
114
+ - GET `/index.html` → `200` + a temp dir-ben található static content
115
+ - GET `/api/test-0/test-base`, `/api/test-0/test-simple` → API kiszolgálva (az API
116
+ route-ok ELŐBB regisztráltak, mint a static fallback)
117
+ - `afterAll`-ban leállítja az appot és kitakarítja a temp dir-t.
118
+
119
+ ## Edge case-ek + gotchák
120
+
121
+ - **Mounting sorrend:** a `mountStaticClient` az `_routingModules` regisztráció
122
+ UTÁN fut, így az API route-ok prioritást élveznek. Tehát a `/api/...` mindig
123
+ az API-hoz megy, akkor is, ha a static root-ban véletlenül lenne `api/`
124
+ almappa.
125
+ - **`fallbackPath` relatív** a `root`-hoz képest (`sendFile(fallbackPath, { root })`).
126
+ - **Default 404 HTML:** szándékosan minimalista (`DyNTS_defaultNotFoundPageHtml`),
127
+ hogy ne ütközzön a kliens stílusával. Ha custom 404-et akarsz, add meg a
128
+ `fallbackPath`-t (az SPA-router majd kezelje belül a "page not found"-ot).
129
+ - **CSP / security header-ek:** a `mountStaticClient` NEM állít be CSP-t —
130
+ ha kell, használj `helmet` middleware-t az API route-ok elé.
131
+
132
+ ## Releváns kód- és test-fájlok
133
+
134
+ - [`src/_services/server/app.server.ts`](../src/_services/server/app.server.ts) — `mountStaticClient()` private + `getStaticClientSettings?()` opt-in override
135
+ - [`src/_models/interfaces/static-client-settings.interface.ts`](../src/_models/interfaces/static-client-settings.interface.ts) — config interface
136
+ - [`src/_collections/default-fallback-cache-max-age.const.ts`](../src/_collections/default-fallback-cache-max-age.const.ts) — default `0` (no-cache)
137
+ - [`src/_collections/default-not-found-page.const.ts`](../src/_collections/default-not-found-page.const.ts) — default 404 HTML
138
+ - [`src/_modules/mock/app-integration-test.mock.ts`](../src/_modules/mock/app-integration-test.mock.ts) — integration test fixture mintaként
139
+ - [`__documentations/nts-integration-tests-2026-03-17.md`](./nts-integration-tests-2026-03-17.md) — első integration test bevezetése a unified host behavior-ra
140
+
141
+ ## Kapcsolódó backlog entry-k
142
+
143
+ - **BL-20260420-001..004** (dynamo-nts) — `DyNTS_FileLog_Service` + admin endpoints. Mind ✅ done.
144
+ - BL-20260417-001 (ez) — a kliens kiszolgálási képesség. ✅ done — implementáció már része a frameworknek; ez a doc a hivatkozás.
@@ -15,11 +15,11 @@
15
15
  > - IDs: unique, format BL-YYYYMMDD-### (increment ###).
16
16
 
17
17
  - [FEATURE] (BL-20260417-001) Dynamo NTS kliens kiszolgálás képesség
18
- status: pending
18
+ status: done
19
19
  priority: medium
20
20
  source: user
21
21
  area: backend
22
- details: Alkalmassá kell tenni a Dynamo NTS-t, hogy kiszolgálja a klienst (frontend/client-side serving)
22
+ details: Alkalmassá kell tenni a Dynamo NTS-t, hogy kiszolgálja a klienst (frontend/client-side serving). Audit eredménye (2026-05-17): a capability MÁR implementálva van 2026-03-30 óta (commit 8ffe535) — DyNTS_App_Server.mountStaticClient() + getStaticClientSettings?() opt-in override + DyNTS_StaticClient_Settings interface (root, fallbackPath, assetCacheMaxAge, assetCacheImmutable, fallbackCacheMaxAge). Featureset: Express.static mount /-en az API route-ok után, SPA fallback sendFile-lal, asset+fallback Cache-Control (Angular hashed fájl optimalizálásra), default 404 HTML ha nincs fallbackPath, mindkét http/https express-en mount. Integration test megvan (app-extended.integration.spec.ts + app-integration-test.mock.ts). How-to doc: __documentations/2026-05-17-static-client-serving-howto.md (config matrix + example subclass + cache stratégia + edge case-ek).
23
23
 
24
24
  - [FEATURE] (BL-20260420-001) Átfogó file-based log kezelési rendszer
25
25
  status: ✅ done
@@ -36,15 +36,15 @@
36
36
  details: Új admin authentikációs mechanizmus bevezetése, ahol az admin API key-t environment variable-ből olvassuk (pl. DYNTS_ADMIN_API_KEY), és ezzel lehet védeni az érzékeny / admin endpointokat. Implementálva (2026-05-17): DyNTS_AdminApiKey_AuthService (singleton) — preProcess `.verify(req, res)` fn opt-in átadható `DyNTS_Endpoint_Params.preProcesses`-be vagy `DyNTS_getLogsRoutingModule({ authPreProcess })`-be. Default env var DYNTS_ADMIN_API_KEY, header x-admin-api-key + Authorization Bearer fallback. Konfig: `configure({ envVarName, headerName, allowAuthorizationBearer })`. Timing-safe compare (crypto.timingSafeEqual + length-mismatch dummy compare). Hibák: 500 ha env nincs, 401 ha header hiányzik/rossz. Env minden híváskor olvasott (nem cache-elt). 15/15 spec + 1148/0 full suite + smoke verifikálva. Foundational a BL-003 (log fetch) és BL-004 (errors retrofit) entry-knek.
37
37
 
38
38
  - [FEATURE] (BL-20260420-003) Server log file-ok lekérése admin endpointon keresztül
39
- status: pending
39
+ status: done
40
40
  priority: medium
41
41
  source: user
42
42
  area: backend
43
- details: A BL-20260420-001 file-based log rendszerre épülve egy új endpoint, amin keresztül le lehet kérni a szerverről a kiírt log file-ok tartalmát (pl. paged / range / tail módon). Az endpointot a BL-20260420-002 admin API key auth-tal kell védeni
43
+ details: A BL-20260420-001 file-based log rendszerre épülve egy új endpoint, amin keresztül le lehet kérni a szerverről a kiírt log file-ok tartalmát (pl. paged / range / tail módon). Implementálva (2026-05-17): DyNTS_FileLogs_Controller (GET /list + GET /file/:filename) + DyNTS_getFileLogsRoutingModule() factory + DyNTS_FileLog_Service bővítés (listLogFiles, readLogFile, getCurrentLogFilename). Olvasási módok: tail / head / range (max 10000 sor). Safeguards: filename whitelist regex prefix-szel, path traversal védelem (resolvedPath + sep ellenőrzés), 503/404/400 helyes status code-ok. Auth opt-in: `DyNTS_getFileLogsRoutingModule({ authPreProcess: adminAuth.verify })`. Default route /file-logs. 38/38 FileLog spec (24 service + 14 controller) + 1175/0 full suite + smoke 4/4 verifikálva.
44
44
 
45
45
  - [IMPROVEMENT] (BL-20260420-004) Errors endpointok opcionális admin API key védelme
46
- status: pending
46
+ status: done
47
47
  priority: medium
48
48
  source: user
49
49
  area: backend
50
- details: A BL-20260420-002 admin API key auth réteget opcionálisan rá kell tudni húzni a meglévő DyNTS_Errors_Controller endpointjaira (errors.controller.ts) is, hogy érzékeny error-listázó / kezelő endpointok admin auth mögé kerülhessenek. Opt-in legyen, ne törje a meglévő integrációkat
50
+ details: A BL-20260420-002 admin API key auth réteget opcionálisan rá kell tudni húzni a meglévő DyNTS_Errors_Controller endpointjaira (errors.controller.ts) is, hogy érzékeny error-listázó / kezelő endpointok admin auth mögé kerülhessenek. Implementálva (2026-05-17): static `DyNTS_Errors_Controller.configure({ authPreProcess?, protectedEndpoints? })` — opt-in, default = no auth (backwards compatible). `authPreProcess` jelenléte esetén default mind a 8 endpoint védett, vagy `protectedEndpoints` subset-tel fine-grained kontroll. `getAuthConfig()` + `_resetAuthConfigForTesting()` segéd-fnk-ek. Per-endpoint `preProcesses: this.getPreProcessesFor(name)` thread-elve mind a 8 endpoint-konstrukcióba. 16/16 errors controller spec (11 régi backwards-compat + 5 új retrofit) + 1180/0 full suite + smoke 3/3 (default, full, subset).
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Egy log fajl meta-adata a listazasban.
3
+ */
4
+ export interface DyNTS_FileLog_Entry {
5
+ /** Fajlnev (csak basename — NEM teljes path). */
6
+ name: string;
7
+ /** Fajlmeret byte-ban. */
8
+ sizeBytes: number;
9
+ /** Modositasi ido ms-ban (mtimeMs). */
10
+ mtimeMs: number;
11
+ /** Igaz, ha ez az aktualis aktiv session fajlja. */
12
+ isCurrent: boolean;
13
+ }
14
+ //# sourceMappingURL=file-log-entry.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-log-entry.interface.d.ts","sourceRoot":"","sources":["../../../../src/_modules/logs/_models/file-log-entry.interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,SAAS,EAAE,OAAO,CAAC;CACpB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=file-log-entry.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-log-entry.interface.js","sourceRoot":"","sources":["../../../../src/_modules/logs/_models/file-log-entry.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * `readLogFile()` valaszobjektum.
3
+ */
4
+ export interface DyNTS_FileLog_ReadResult {
5
+ /** Fajlnev (csak basename). */
6
+ name: string;
7
+ /** Teljes fajlmeret byte-ban. */
8
+ sizeBytes: number;
9
+ /** A fajlban talalhato osszes sor szama. */
10
+ totalLines: number;
11
+ /** A visszaadott sorok. */
12
+ lines: string[];
13
+ /** Mod amiben olvastunk: 'tail' | 'head' | 'range'. */
14
+ mode: 'tail' | 'head' | 'range';
15
+ /** Visszaadott tartomany 1-based start (range/tail/head normalizalva). */
16
+ rangeStart: number;
17
+ /** Visszaadott tartomany 1-based end (inclusive). */
18
+ rangeEnd: number;
19
+ }
20
+ /**
21
+ * `readLogFile(name, options)` opciok.
22
+ *
23
+ * Egyetlen mod aktiv egyszerre. Prioritas: range > head > tail.
24
+ * Egyik sem megadott → default `tail: 200`.
25
+ */
26
+ export interface DyNTS_FileLog_ReadOptions {
27
+ /** Utolso N sor (default mod ha semmi mas nincs). */
28
+ tail?: number;
29
+ /** Elso N sor. */
30
+ head?: number;
31
+ /** 1-based line range start (inclusive). `rangeEnd` is kell. */
32
+ rangeStart?: number;
33
+ /** 1-based line range end (inclusive). */
34
+ rangeEnd?: number;
35
+ }
36
+ //# sourceMappingURL=file-log-read-result.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-log-read-result.interface.d.ts","sourceRoot":"","sources":["../../../../src/_modules/logs/_models/file-log-read-result.interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,uDAAuD;IACvD,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAChC,0EAA0E;IAC1E,UAAU,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAGD;;;;;GAKG;AACH,MAAM,WAAW,yBAAyB;IACxC,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kBAAkB;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=file-log-read-result.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-log-read-result.interface.js","sourceRoot":"","sources":["../../../../src/_modules/logs/_models/file-log-read-result.interface.ts"],"names":[],"mappings":""}
@@ -1,4 +1,6 @@
1
1
  import { DyNTS_SingletonServiceBase } from '../../_services/base/singleton.service-base';
2
+ import { DyNTS_FileLog_Entry } from './_models/file-log-entry.interface';
3
+ import { DyNTS_FileLog_ReadOptions, DyNTS_FileLog_ReadResult } from './_models/file-log-read-result.interface';
2
4
  /**
3
5
  * File-based szerver log service — duplikalja a stdout/stderr-t per-session
4
6
  * log fajl(ok)ba, miközben a console kimenet erintetlenul marad. Az
@@ -48,6 +50,50 @@ export declare class DyNTS_FileLog_Service extends DyNTS_SingletonServiceBase {
48
50
  * ha az install() sikeresen lefutott; egyebkent ures string).
49
51
  */
50
52
  getCurrentLogPath(): string;
53
+ /**
54
+ * Az aktualis aktiv log fajl basename-je (NEM teljes path). Csak akkor
55
+ * nem-ures, ha az install() sikeresen lefutott.
56
+ */
57
+ getCurrentLogFilename(): string;
58
+ /**
59
+ * Aktiv log dir abszolut path-ja. Csak akkor nem-ures, ha az install()
60
+ * sikeresen lefutott.
61
+ */
62
+ getActiveLogDir(): string;
63
+ /**
64
+ * Aktiv filename prefix (a service config-jabol). Hasznalja a controller
65
+ * a request-fajlnev whitelist regex epitesehez.
66
+ */
67
+ getFilenamePrefix(): string;
68
+ /**
69
+ * Osszes log fajl listazasa az aktiv log dir-bol. Csak a service prefix-evel
70
+ * matchelo fajlokat veszi (`{prefix}*.log`).
71
+ *
72
+ * Rendezes: mtime DESC (legujabb elol). Hibakat csendben elnyel — ha a dir
73
+ * nem letezik vagy nem olvashato, ures array-t ad vissza.
74
+ */
75
+ listLogFiles(): DyNTS_FileLog_Entry[];
76
+ /**
77
+ * Egy konkret log fajl olvasasa, line-based mode-ban (tail / head / range).
78
+ *
79
+ * **Biztonsagi safeguards:**
80
+ * - Filename whitelist: `{prefix}*.log` mintara matchelo nev kotelezo
81
+ * - Path resolution `path.resolve(activeLogDir, name)` + `startsWith(activeLogDir)` (path traversal vedelem)
82
+ * - Sor szam cap: `MAX_READ_LINES` (10000)
83
+ *
84
+ * **Hibak:**
85
+ * - Throw `Error('not installed')` ha a service nincs install-olva
86
+ * - Throw `Error('invalid filename')` ha a name nem matchel a whitelist-re VAGY kilep az activeLogDir-bol
87
+ * - Throw `Error('file not found')` ha a fajl nem letezik
88
+ *
89
+ * A hivot kell vigyaznia hogy ezeket HTTP status code-okra forditja.
90
+ */
91
+ readLogFile(name: string, options?: DyNTS_FileLog_ReadOptions): DyNTS_FileLog_ReadResult;
92
+ /**
93
+ * Filename whitelist ellenorzes. Csak a service prefix-evel matchelo,
94
+ * biztonsagos karakterkeszletu fajlnev megengedett.
95
+ */
96
+ private isValidFilename;
51
97
  /**
52
98
  * Telepitve van-e (csak akkor true, ha az enabled === true es a setup nem bukott).
53
99
  */
@@ -1 +1 @@
1
- {"version":3,"file":"file-log.service.d.ts","sourceRoot":"","sources":["../../../src/_modules/logs/file-log.service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAC;AAsBzF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,qBAAsB,SAAQ,0BAA0B;IAEnE,MAAM,CAAC,WAAW,IAAI,qBAAqB;IAI3C,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,cAAc,CAAmC;IACzD,OAAO,CAAC,gBAAgB,CAAkD;IAC1E,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,mBAAmB,CAAa;IAExC,OAAO,CAAC,mBAAmB,CAA4C;IACvE,OAAO,CAAC,mBAAmB,CAA4C;IAGvE;;;;;;OAMG;IACH,OAAO,IAAI,IAAI;IAoEf;;;OAGG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;;OAGG;IACH,mBAAmB,IAAI,IAAI;IAgB3B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAa5B;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IAsBhB;;;OAGG;IACH,OAAO,CAAC,MAAM;IAWd;;;;;;;OAOG;IACH,OAAO,CAAC,cAAc;CAoCvB"}
1
+ {"version":3,"file":"file-log.service.d.ts","sourceRoot":"","sources":["../../../src/_modules/logs/file-log.service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAC;AAEzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AA2B/G;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,qBAAsB,SAAQ,0BAA0B;IAEnE,MAAM,CAAC,WAAW,IAAI,qBAAqB;IAI3C,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,cAAc,CAAmC;IACzD,OAAO,CAAC,gBAAgB,CAAkD;IAC1E,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,mBAAmB,CAAa;IAExC,OAAO,CAAC,mBAAmB,CAA4C;IACvE,OAAO,CAAC,mBAAmB,CAA4C;IAGvE;;;;;;OAMG;IACH,OAAO,IAAI,IAAI;IAoEf;;;OAGG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;;OAGG;IACH,qBAAqB,IAAI,MAAM;IAK/B;;;OAGG;IACH,eAAe,IAAI,MAAM;IAIzB;;;OAGG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;;;;;OAMG;IACH,YAAY,IAAI,mBAAmB,EAAE;IAiCrC;;;;;;;;;;;;;;OAcG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,yBAA8B,GAAG,wBAAwB;IAiF5F;;;OAGG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;;OAGG;IACH,mBAAmB,IAAI,IAAI;IAgB3B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAa5B;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IAsBhB;;;OAGG;IACH,OAAO,CAAC,MAAM;IAWd;;;;;;;OAOG;IACH,OAAO,CAAC,cAAc;CAoCvB"}
@@ -21,6 +21,10 @@ const DEFAULT_INCLUDE_STDOUT = true;
21
21
  const DEFAULT_INCLUDE_STDERR = true;
22
22
  /** ANSI escape code regex (szin/formazas kodok). */
23
23
  const ANSI_ESCAPE_REGEX = /\x1b\[[0-9;]*[a-zA-Z]/g;
24
+ /** Max sor szam egy `readLogFile()` hivasra — vedi a memory-t nagy fajloknal. */
25
+ const MAX_READ_LINES = 10000;
26
+ /** Default tail sor szam (ha semmi mas mod nincs megadva). */
27
+ const DEFAULT_READ_TAIL = 200;
24
28
  /**
25
29
  * File-based szerver log service — duplikalja a stdout/stderr-t per-session
26
30
  * log fajl(ok)ba, miközben a console kimenet erintetlenul marad. Az
@@ -135,6 +139,180 @@ class DyNTS_FileLog_Service extends singleton_service_base_1.DyNTS_SingletonServ
135
139
  getCurrentLogPath() {
136
140
  return this.currentLogPath;
137
141
  }
142
+ /**
143
+ * Az aktualis aktiv log fajl basename-je (NEM teljes path). Csak akkor
144
+ * nem-ures, ha az install() sikeresen lefutott.
145
+ */
146
+ getCurrentLogFilename() {
147
+ if (!this.currentLogPath) {
148
+ return '';
149
+ }
150
+ return path.basename(this.currentLogPath);
151
+ }
152
+ /**
153
+ * Aktiv log dir abszolut path-ja. Csak akkor nem-ures, ha az install()
154
+ * sikeresen lefutott.
155
+ */
156
+ getActiveLogDir() {
157
+ return this.activeLogDir;
158
+ }
159
+ /**
160
+ * Aktiv filename prefix (a service config-jabol). Hasznalja a controller
161
+ * a request-fajlnev whitelist regex epitesehez.
162
+ */
163
+ getFilenamePrefix() {
164
+ return this.filenamePrefix;
165
+ }
166
+ /**
167
+ * Osszes log fajl listazasa az aktiv log dir-bol. Csak a service prefix-evel
168
+ * matchelo fajlokat veszi (`{prefix}*.log`).
169
+ *
170
+ * Rendezes: mtime DESC (legujabb elol). Hibakat csendben elnyel — ha a dir
171
+ * nem letezik vagy nem olvashato, ures array-t ad vissza.
172
+ */
173
+ listLogFiles() {
174
+ if (!this.activeLogDir || !this.installed) {
175
+ return [];
176
+ }
177
+ const currentBasename = this.getCurrentLogFilename();
178
+ const entries = [];
179
+ try {
180
+ const dirContents = fs.readdirSync(this.activeLogDir);
181
+ for (const name of dirContents) {
182
+ if (!name.startsWith(this.filenamePrefix) || !name.endsWith(DEFAULT_FILENAME_SUFFIX)) {
183
+ continue;
184
+ }
185
+ const fullPath = path.join(this.activeLogDir, name);
186
+ try {
187
+ const stats = fs.statSync(fullPath);
188
+ if (!stats.isFile()) {
189
+ continue;
190
+ }
191
+ entries.push({
192
+ name: name,
193
+ sizeBytes: stats.size,
194
+ mtimeMs: stats.mtimeMs,
195
+ isCurrent: name === currentBasename,
196
+ });
197
+ }
198
+ catch {
199
+ // egy fajlonkenti hiba ne szakitsa meg a listat
200
+ }
201
+ }
202
+ }
203
+ catch {
204
+ // dir read hiba → ures listat adunk vissza
205
+ return [];
206
+ }
207
+ // Legujabb elol
208
+ entries.sort((a, b) => b.mtimeMs - a.mtimeMs);
209
+ return entries;
210
+ }
211
+ /**
212
+ * Egy konkret log fajl olvasasa, line-based mode-ban (tail / head / range).
213
+ *
214
+ * **Biztonsagi safeguards:**
215
+ * - Filename whitelist: `{prefix}*.log` mintara matchelo nev kotelezo
216
+ * - Path resolution `path.resolve(activeLogDir, name)` + `startsWith(activeLogDir)` (path traversal vedelem)
217
+ * - Sor szam cap: `MAX_READ_LINES` (10000)
218
+ *
219
+ * **Hibak:**
220
+ * - Throw `Error('not installed')` ha a service nincs install-olva
221
+ * - Throw `Error('invalid filename')` ha a name nem matchel a whitelist-re VAGY kilep az activeLogDir-bol
222
+ * - Throw `Error('file not found')` ha a fajl nem letezik
223
+ *
224
+ * A hivot kell vigyaznia hogy ezeket HTTP status code-okra forditja.
225
+ */
226
+ readLogFile(name, options = {}) {
227
+ if (!this.installed || !this.activeLogDir) {
228
+ throw new Error('FileLog service not installed');
229
+ }
230
+ // Whitelist regex: csak a service prefix-evel matchelo fajlnev
231
+ if (!this.isValidFilename(name)) {
232
+ throw new Error('invalid filename');
233
+ }
234
+ // Path resolve + traversal check
235
+ const resolvedPath = path.resolve(this.activeLogDir, name);
236
+ const resolvedDir = path.resolve(this.activeLogDir);
237
+ // path.sep + sufix ellenőrzéssel megelőzzük a hasonló prefixű dir átverést
238
+ // (pl. '/logs' vs '/logs-other'); a resolvedPath az activeLogDir-en BELUL
239
+ // kell legyen.
240
+ if (!resolvedPath.startsWith(resolvedDir + path.sep) && resolvedPath !== resolvedDir) {
241
+ throw new Error('invalid filename');
242
+ }
243
+ if (!fs.existsSync(resolvedPath)) {
244
+ throw new Error('file not found');
245
+ }
246
+ const stats = fs.statSync(resolvedPath);
247
+ if (!stats.isFile()) {
248
+ throw new Error('file not found');
249
+ }
250
+ // Olvass + split soroka. UTF-8 encoding alapertelmezett. Nagy fajloknal a
251
+ // teljes betoltes nem ideal, de a 10000-soros cap es a Stream-based
252
+ // optimization egy kesobbi iteracio lehet ha kell.
253
+ const fullContent = fs.readFileSync(resolvedPath, 'utf-8');
254
+ // Split a sorvegekre — utolso ures stringet kivagjuk ha a fajl
255
+ // sorvégzodessel zarult (regenerált sor szám hibakerulest celozzuk meg)
256
+ const allLines = fullContent.split(/\r?\n/);
257
+ if (allLines.length > 0 && allLines[allLines.length - 1] === '') {
258
+ allLines.pop();
259
+ }
260
+ const totalLines = allLines.length;
261
+ // Mod meghatarozasa: range > head > tail
262
+ let mode;
263
+ let startIdx;
264
+ let endIdx; // exclusive
265
+ if (options.rangeStart !== undefined && options.rangeEnd !== undefined) {
266
+ mode = 'range';
267
+ const start1 = Math.max(1, Math.floor(options.rangeStart));
268
+ const end1 = Math.max(start1, Math.floor(options.rangeEnd));
269
+ startIdx = Math.max(0, Math.min(totalLines, start1 - 1));
270
+ endIdx = Math.max(startIdx, Math.min(totalLines, end1));
271
+ // Cap
272
+ if (endIdx - startIdx > MAX_READ_LINES) {
273
+ endIdx = startIdx + MAX_READ_LINES;
274
+ }
275
+ }
276
+ else if (options.head !== undefined) {
277
+ mode = 'head';
278
+ const headN = Math.min(Math.max(1, Math.floor(options.head)), MAX_READ_LINES);
279
+ startIdx = 0;
280
+ endIdx = Math.min(totalLines, headN);
281
+ }
282
+ else {
283
+ mode = 'tail';
284
+ const tailN = Math.min(Math.max(1, Math.floor(options.tail ?? DEFAULT_READ_TAIL)), MAX_READ_LINES);
285
+ startIdx = Math.max(0, totalLines - tailN);
286
+ endIdx = totalLines;
287
+ }
288
+ const lines = allLines.slice(startIdx, endIdx);
289
+ return {
290
+ name: path.basename(resolvedPath),
291
+ sizeBytes: stats.size,
292
+ totalLines: totalLines,
293
+ lines: lines,
294
+ mode: mode,
295
+ rangeStart: startIdx + 1, // 1-based, inclusive
296
+ rangeEnd: Math.max(startIdx, endIdx), // 1-based, inclusive ha lines van; egyebkent 0-szeru
297
+ };
298
+ }
299
+ /**
300
+ * Filename whitelist ellenorzes. Csak a service prefix-evel matchelo,
301
+ * biztonsagos karakterkeszletu fajlnev megengedett.
302
+ */
303
+ isValidFilename(name) {
304
+ if (typeof name !== 'string' || name.length === 0 || name.length > 256) {
305
+ return false;
306
+ }
307
+ // Path-szeparatorokat kifejezetten tiltjuk (mar a regex is, de gyors check)
308
+ if (name.includes('/') || name.includes('\\') || name.includes('..')) {
309
+ return false;
310
+ }
311
+ // `{prefix}[\w\-.]+\.log` — szigoru ASCII set
312
+ const escapedPrefix = this.filenamePrefix.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
313
+ const regex = new RegExp(`^${escapedPrefix}[\\w\\-.]+\\.log$`);
314
+ return regex.test(name);
315
+ }
138
316
  /**
139
317
  * Telepitve van-e (csak akkor true, ha az enabled === true es a setup nem bukott).
140
318
  */
@@ -1 +1 @@
1
- {"version":3,"file":"file-log.service.js","sourceRoot":"","sources":["../../../src/_modules/logs/file-log.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file-log.service.js","sourceRoot":"","sources":["../../../src/_modules/logs/file-log.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { Request, Response } from 'express';
2
+ import { DyNTS_Controller } from '../../_services/route/controller.service';
3
+ /**
4
+ * Config a `DyNTS_FileLogs_Controller`-hez (opcionalis auth pre-process).
5
+ */
6
+ export interface DyNTS_FileLogsController_Config {
7
+ /**
8
+ * Opcionalis auth pre-process — ha megadod, a controller-en levo endpointok
9
+ * vedettek. Tipikusan: `DyNTS_AdminApiKey_AuthService.getInstance().verify`.
10
+ */
11
+ authPreProcess?: (req: Request, res: Response) => Promise<void>;
12
+ }
13
+ /**
14
+ * NTS File Logs Controller — endpointok a `DyNTS_FileLog_Service` altal irt
15
+ * log fajl-ok lekeresehez.
16
+ *
17
+ * **Endpoint-ok:**
18
+ * GET /list — log fajlok listazasa (basename, sizeBytes, mtimeMs, isCurrent)
19
+ * GET /file/:filename — egy fajl olvasasa, line-based: ?tail=N | ?head=N | ?rangeStart=A&rangeEnd=B
20
+ *
21
+ * **Mount-olas (host app):**
22
+ * app.use(DyNTS_getFileLogsRoutingModule({
23
+ * authPreProcess: adminAuth.verify, // opcionalis
24
+ * route: '/admin/file-logs', // default '/file-logs'
25
+ * }));
26
+ *
27
+ * **Status code-ok:**
28
+ * 200 — sikeres response (lehet ures lista is)
29
+ * 400 — invalid query parameter (tail/head/range)
30
+ * 401 — auth pre-process throw-ol DyFM_Error(401)
31
+ * 404 — fajl nem letezik vagy nem megfelelo nev (whitelist failure / path traversal kiserlet)
32
+ * 503 — a DyNTS_FileLog_Service nincs install-olva (vagy file_log.enabled=false)
33
+ */
34
+ export declare class DyNTS_FileLogs_Controller extends DyNTS_Controller {
35
+ private static config;
36
+ static configure(config: DyNTS_FileLogsController_Config): void;
37
+ static getInstance(): DyNTS_FileLogs_Controller;
38
+ private readonly fileLogService;
39
+ setupEndpoints(): void;
40
+ }
41
+ //# sourceMappingURL=file-logs.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-logs.controller.d.ts","sourceRoot":"","sources":["../../../src/_modules/logs/file-logs.controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAI5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAQ5E;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE;AAGD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,yBAA0B,SAAQ,gBAAgB;IAE7D,OAAO,CAAC,MAAM,CAAC,MAAM,CAAuC;IAE5D,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,+BAA+B,GAAG,IAAI;IAI/D,MAAM,CAAC,WAAW,IAAI,yBAAyB;IAI/C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA8D;IAE7F,cAAc,IAAI,IAAI;CAyGvB"}