@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.
- package/__documentations/2026-05-17-static-client-serving-howto.md +144 -0
- package/_specifications/BACKLOG.md +6 -6
- package/build/_modules/logs/_models/file-log-entry.interface.d.ts +14 -0
- package/build/_modules/logs/_models/file-log-entry.interface.d.ts.map +1 -0
- package/build/_modules/logs/_models/file-log-entry.interface.js +3 -0
- package/build/_modules/logs/_models/file-log-entry.interface.js.map +1 -0
- package/build/_modules/logs/_models/file-log-read-result.interface.d.ts +36 -0
- package/build/_modules/logs/_models/file-log-read-result.interface.d.ts.map +1 -0
- package/build/_modules/logs/_models/file-log-read-result.interface.js +3 -0
- package/build/_modules/logs/_models/file-log-read-result.interface.js.map +1 -0
- package/build/_modules/logs/file-log.service.d.ts +46 -0
- package/build/_modules/logs/file-log.service.d.ts.map +1 -1
- package/build/_modules/logs/file-log.service.js +178 -0
- package/build/_modules/logs/file-log.service.js.map +1 -1
- package/build/_modules/logs/file-logs.controller.d.ts +41 -0
- package/build/_modules/logs/file-logs.controller.d.ts.map +1 -0
- package/build/_modules/logs/file-logs.controller.js +139 -0
- package/build/_modules/logs/file-logs.controller.js.map +1 -0
- package/build/_modules/logs/get-file-logs-routing-module.util.d.ts +32 -0
- package/build/_modules/logs/get-file-logs-routing-module.util.d.ts.map +1 -0
- package/build/_modules/logs/get-file-logs-routing-module.util.js +38 -0
- package/build/_modules/logs/get-file-logs-routing-module.util.js.map +1 -0
- package/build/_modules/logs/index.d.ts +4 -0
- package/build/_modules/logs/index.d.ts.map +1 -1
- package/build/_modules/logs/index.js +5 -1
- package/build/_modules/logs/index.js.map +1 -1
- package/build/_modules/server/errors/errors.controller.d.ts +64 -0
- package/build/_modules/server/errors/errors.controller.d.ts.map +1 -1
- package/build/_modules/server/errors/errors.controller.js +66 -0
- package/build/_modules/server/errors/errors.controller.js.map +1 -1
- package/package.json +1 -1
- package/src/_modules/logs/_models/file-log-entry.interface.ts +13 -0
- package/src/_modules/logs/_models/file-log-read-result.interface.ts +37 -0
- package/src/_modules/logs/file-log.service.spec.ts +139 -0
- package/src/_modules/logs/file-log.service.ts +183 -0
- package/src/_modules/logs/file-logs.controller.spec.ts +245 -0
- package/src/_modules/logs/file-logs.controller.ts +165 -0
- package/src/_modules/logs/get-file-logs-routing-module.util.ts +51 -0
- package/src/_modules/logs/index.ts +7 -0
- package/src/_modules/server/errors/errors.controller.spec.ts +70 -0
- 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:
|
|
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:
|
|
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).
|
|
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:
|
|
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.
|
|
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 @@
|
|
|
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 @@
|
|
|
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;
|
|
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"}
|