@futdevpro/nts-dynamo 1.15.116 → 1.15.118
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/.dynamo/logs/cicd-pipeline/output.log +1856 -1863
- package/.dynamo/logs/cicd-pipeline/status.json +37 -37
- package/build/_collections/field-encryption.util.d.ts +52 -0
- package/build/_collections/field-encryption.util.d.ts.map +1 -0
- package/build/_collections/field-encryption.util.js +148 -0
- package/build/_collections/field-encryption.util.js.map +1 -0
- package/build/_modules/server/server-status/server-status.controller.d.ts.map +1 -1
- package/build/_modules/server/server-status/server-status.controller.js +18 -2
- package/build/_modules/server/server-status/server-status.controller.js.map +1 -1
- package/build/_services/base/db.service.d.ts.map +1 -1
- package/build/_services/base/db.service.js +15 -2
- package/build/_services/base/db.service.js.map +1 -1
- package/package.json +2 -2
- package/src/_collections/field-encryption.util.spec.ts +109 -0
- package/src/_collections/field-encryption.util.ts +173 -0
- package/src/_modules/server/server-status/server-status.controller.spec.ts +21 -0
- package/src/_modules/server/server-status/server-status.controller.ts +18 -2
- package/src/_services/base/db.service.encryption.spec.ts +76 -0
- package/src/_services/base/db.service.ts +22 -6
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"pid":
|
|
3
|
-
"startedAt": "2026-07-
|
|
4
|
-
"startedAtMs":
|
|
2
|
+
"pid": 3702,
|
|
3
|
+
"startedAt": "2026-07-26T19:12:39.969Z",
|
|
4
|
+
"startedAtMs": 1785093159969,
|
|
5
5
|
"phase": "npm-publish",
|
|
6
6
|
"pipelineComplete": false,
|
|
7
7
|
"serverRunning": false,
|
|
@@ -10,77 +10,77 @@
|
|
|
10
10
|
"steps": {
|
|
11
11
|
"validate-secrets": {
|
|
12
12
|
"status": "ok",
|
|
13
|
-
"startedAt": "2026-07-
|
|
13
|
+
"startedAt": "2026-07-26T19:12:39.998Z",
|
|
14
14
|
"logLineStart": 2,
|
|
15
15
|
"logLineEnd": 8,
|
|
16
|
-
"durationSec": 0.
|
|
16
|
+
"durationSec": 0.3
|
|
17
17
|
},
|
|
18
18
|
"discord-start": {
|
|
19
19
|
"status": "ok",
|
|
20
|
-
"startedAt": "2026-07-
|
|
20
|
+
"startedAt": "2026-07-26T19:12:41.267Z",
|
|
21
21
|
"logLineStart": 9,
|
|
22
22
|
"logLineEnd": 14,
|
|
23
|
-
"durationSec":
|
|
23
|
+
"durationSec": 10
|
|
24
24
|
},
|
|
25
25
|
"pre-flight": {
|
|
26
26
|
"status": "ok",
|
|
27
|
-
"startedAt": "2026-07-
|
|
27
|
+
"startedAt": "2026-07-26T19:12:52.294Z",
|
|
28
28
|
"logLineStart": 15,
|
|
29
29
|
"logLineEnd": 17,
|
|
30
|
-
"durationSec": 0.
|
|
30
|
+
"durationSec": 0.4
|
|
31
31
|
},
|
|
32
32
|
"install": {
|
|
33
33
|
"status": "ok",
|
|
34
|
-
"startedAt": "2026-07-
|
|
34
|
+
"startedAt": "2026-07-26T19:12:54.084Z",
|
|
35
35
|
"logLineStart": 18,
|
|
36
|
-
"logLineEnd":
|
|
37
|
-
"durationSec": 22.
|
|
36
|
+
"logLineEnd": 101,
|
|
37
|
+
"durationSec": 22.6
|
|
38
38
|
},
|
|
39
39
|
"check-dev-leftovers": {
|
|
40
40
|
"status": "ok",
|
|
41
|
-
"startedAt": "2026-07-
|
|
42
|
-
"logLineStart":
|
|
43
|
-
"logLineEnd":
|
|
44
|
-
"durationSec":
|
|
41
|
+
"startedAt": "2026-07-26T19:13:17.671Z",
|
|
42
|
+
"logLineStart": 102,
|
|
43
|
+
"logLineEnd": 109,
|
|
44
|
+
"durationSec": 6.9
|
|
45
45
|
},
|
|
46
46
|
"build": {
|
|
47
47
|
"status": "ok",
|
|
48
|
-
"startedAt": "2026-07-
|
|
49
|
-
"logLineStart":
|
|
50
|
-
"logLineEnd":
|
|
51
|
-
"durationSec":
|
|
48
|
+
"startedAt": "2026-07-26T19:13:25.768Z",
|
|
49
|
+
"logLineStart": 110,
|
|
50
|
+
"logLineEnd": 111,
|
|
51
|
+
"durationSec": 31.1
|
|
52
52
|
},
|
|
53
53
|
"test": {
|
|
54
54
|
"status": "ok",
|
|
55
|
-
"startedAt": "2026-07-
|
|
56
|
-
"logLineStart":
|
|
57
|
-
"logLineEnd":
|
|
58
|
-
"durationSec":
|
|
55
|
+
"startedAt": "2026-07-26T19:13:57.906Z",
|
|
56
|
+
"logLineStart": 112,
|
|
57
|
+
"logLineEnd": 2802,
|
|
58
|
+
"durationSec": 23.4,
|
|
59
59
|
"testSummary": {
|
|
60
|
-
"totalSpecs":
|
|
60
|
+
"totalSpecs": 1588,
|
|
61
61
|
"failures": 0,
|
|
62
|
-
"passed":
|
|
63
|
-
"testDurationSec":
|
|
62
|
+
"passed": 1588,
|
|
63
|
+
"testDurationSec": 7.319
|
|
64
64
|
},
|
|
65
65
|
"errors": [
|
|
66
66
|
{
|
|
67
|
-
"line":
|
|
68
|
-
"text": "
|
|
69
|
-
"details": "
|
|
70
|
-
"detailLineEnd":
|
|
67
|
+
"line": 1068,
|
|
68
|
+
"text": "(checkDbReadiness) diagnostics collection failed (non-fatal) Error: boom",
|
|
69
|
+
"details": "at runNext (/tmp/pipeline-runs/955768d5-beca-48b1-97ac-8dace53081bd/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8355:16)\nat /tmp/pipeline-runs/955768d5-beca-48b1-97ac-8dace53081bd/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8361:11\nat /tmp/pipeline-runs/955768d5-beca-48b1-97ac-8dace53081bd/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8241:9\nat UserContext.<anonymous> (/tmp/pipeline-runs/955768d5-beca-48b1-97ac-8dace53081bd/build/_modules/server/server-status/server-status.control-service.spec.js:507:68)\nat QueueRunner.attempt (/tmp/pipeline-runs/955768d5-beca-48b1-97ac-8dace53081bd/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8414:40)\nat QueueRunner.run (/tmp/pipeline-runs/955768d5-beca-48b1-97ac-8dace53081bd/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8452:27)\nat runNext (/tmp/pipeline-runs/955768d5-beca-48b1-97ac-8dace53081bd/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8355:16)\nat /tmp/pipeline-runs/955768d5-beca-48b1-97ac-8dace53081bd/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8361:11\nat /tmp/pipeline-runs/955768d5-beca-48b1-97ac-8dace53081bd/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8241:9",
|
|
70
|
+
"detailLineEnd": 1074
|
|
71
71
|
},
|
|
72
72
|
{
|
|
73
|
-
"line":
|
|
74
|
-
"text": "(checkDbReadiness) diagnostics collection failed (non-fatal) Error: boom",
|
|
75
|
-
"details": "at runNext (/tmp/pipeline-runs/
|
|
76
|
-
"detailLineEnd":
|
|
73
|
+
"line": 1084,
|
|
74
|
+
"text": ".....(checkDbReadiness) diagnostics collection failed (non-fatal) Error: diag boom",
|
|
75
|
+
"details": "at runNext (/tmp/pipeline-runs/955768d5-beca-48b1-97ac-8dace53081bd/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8355:16)\nat /tmp/pipeline-runs/955768d5-beca-48b1-97ac-8dace53081bd/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8361:11\nat /tmp/pipeline-runs/955768d5-beca-48b1-97ac-8dace53081bd/node_modules/.pnpm/jasmine-core@5.10.0/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:8241:9\nat Object.get host [as host] (/tmp/pipeline-runs/955768d5-beca-48b1-97ac-8dace53081bd/build/_modules/server/server-status/server-status.control-service.spec.js:487:36)\nat TestServerStatusControlService.checkDbReadiness (/tmp/pipeline-runs/955768d5-beca-48b1-97ac-8dace53081bd/build/_modules/server/server-status/server-status.control-service.js:177:29)\nat async UserContext.<anonymous> (/tmp/pipeline-runs/955768d5-beca-48b1-97ac-8dace53081bd/build/_modules/server/server-status/server-status.control-service.spec.js:490:28)",
|
|
76
|
+
"detailLineEnd": 1087
|
|
77
77
|
}
|
|
78
78
|
]
|
|
79
79
|
},
|
|
80
80
|
"npm-publish": {
|
|
81
81
|
"status": "running",
|
|
82
|
-
"startedAt": "2026-07-
|
|
83
|
-
"logLineStart":
|
|
82
|
+
"startedAt": "2026-07-26T19:14:22.317Z",
|
|
83
|
+
"logLineStart": 2803,
|
|
84
84
|
"logLineEnd": null,
|
|
85
85
|
"durationSec": null
|
|
86
86
|
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { DyFM_DataProperties } from '@futdevpro/fsm-dynamo';
|
|
2
|
+
/**
|
|
3
|
+
* AT-REST field-encryption transzform (Option B, bedrock). A DBService a közös írási úton
|
|
4
|
+
* (`createData` / `modifyData`) a persist ELŐTT titkosítja, a read-post-processor
|
|
5
|
+
* (`stringifyDataId`) a load UTÁN visszafejti az `encrypt:true` mezőket.
|
|
6
|
+
*
|
|
7
|
+
* **App-rétegben fut, NEM mongoose-hook** — a `modifyData` `findByIdAndUpdate`-je megkerüli a
|
|
8
|
+
* mongoose settereket/pre-save-hookokat, ezért a transzform explicit itt történik.
|
|
9
|
+
*
|
|
10
|
+
* **Opt-in, default-off:** ha egy modell egyetlen mezője sem `encrypt:true`, a transzform tiszta
|
|
11
|
+
* NO-OP (ugyanaz az objektum-referencia, nincs klónozás, nincs viselkedés-változás, kulcs sem kell).
|
|
12
|
+
*
|
|
13
|
+
* **Legacy-plaintext biztonságos:** a read-transzform CSAK a `DYENC1:` envelope-értékeket fejti vissza
|
|
14
|
+
* (`isEncryptedDbValue`); a régi, még nem migrált plaintext értékek változatlanul jönnek vissza.
|
|
15
|
+
*
|
|
16
|
+
* Kulcs: `FDP_CORE_DBCONTENT_CRYPT_KEY` (Keystore/CI-env). Verzió: `FDP_CORE_DBCONTENT_CRYPT_KEY_VERSION`
|
|
17
|
+
* (default 1) — a kulcs-rotációhoz (a verzió az envelope-ban utazik).
|
|
18
|
+
*/
|
|
19
|
+
export declare class DyNTS_FieldEncryption_Util {
|
|
20
|
+
static readonly ENV_KEY: string;
|
|
21
|
+
static readonly ENV_KEY_VERSION: string;
|
|
22
|
+
/** `hasEncryptedFields` cache per properties-objektum (referencia szerint). */
|
|
23
|
+
private static readonly _hasEncCache;
|
|
24
|
+
/** A titkosító kulcs env-ből (üres string, ha nincs beállítva). */
|
|
25
|
+
static getKey(): string;
|
|
26
|
+
/** Az aktuális kulcs-verzió (default 1). */
|
|
27
|
+
static getKeyVersion(): number;
|
|
28
|
+
/**
|
|
29
|
+
* True, ha a properties-fa (rekurzívan a `subObjectParams`-on át) tartalmaz `encrypt:true` mezőt.
|
|
30
|
+
* Cache-elt (a properties-objektum immutábilis a modell-élettartam alatt).
|
|
31
|
+
*/
|
|
32
|
+
static hasEncryptedFields(properties?: DyFM_DataProperties<any>): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Titkosítja a doc `encrypt:true` mezőit persist előtt. **Klónt ad vissza** — az eredeti (hívó)
|
|
35
|
+
* objektumot NEM mutálja (különben a `this.data` ciphertextté válna). NO-OP, ha nincs enc-mező.
|
|
36
|
+
* @throws ha van enc-mező, de a kulcs env-var nincs beállítva (fail-loud misconfiguration).
|
|
37
|
+
*/
|
|
38
|
+
static encryptDoc<T>(data: T, properties?: DyFM_DataProperties<any>): T;
|
|
39
|
+
/**
|
|
40
|
+
* Visszafejti a doc `encrypt:true` mezőit load után. CSAK a `DYENC1:` envelope-értékeket bántja
|
|
41
|
+
* (legacy plaintext változatlan). NO-OP, ha nincs enc-mező. Kulcs hiányában read-en NEM dob
|
|
42
|
+
* (a read ne törjön el) — az envelope-értékek visszafejtetlenül maradnak (a hívó látja + a hiba loggolt).
|
|
43
|
+
*/
|
|
44
|
+
static decryptDoc<T>(data: T, properties?: DyFM_DataProperties<any>): T;
|
|
45
|
+
/**
|
|
46
|
+
* Rekurzív per-field walk: az `encrypt:true` mezőket titkosítja/visszafejti, a `subObjectParams`-os
|
|
47
|
+
* mezőkbe (objektum VAGY objektum-tömb) leszáll. Immutábilis: minden érintett konténert sekélyen
|
|
48
|
+
* klónoz (az eredetit nem mutálja); a nem-érintett ágakat referencia szerint megosztja (read-only).
|
|
49
|
+
*/
|
|
50
|
+
private static _transform;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=field-encryption.util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-encryption.util.d.ts","sourceRoot":"","sources":["../../src/_collections/field-encryption.util.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EAEpB,MAAM,uBAAuB,CAAC;AAG/B;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,0BAA0B;IACrC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAkC;IACjE,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAA0C;IAEjF,+EAA+E;IAC/E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAA2C;IAE/E,mEAAmE;IACnE,MAAM,CAAC,MAAM,IAAI,MAAM;IAIvB,4CAA4C;IAC5C,MAAM,CAAC,aAAa,IAAI,MAAM;IAK9B;;;OAGG;IACH,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC,GAAG,CAAC,GAAG,OAAO;IA8BzE;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC;IAmBvE;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC;IAavE;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;CAkD1B"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DyNTS_FieldEncryption_Util = void 0;
|
|
4
|
+
const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
|
|
5
|
+
const crypto_1 = require("@futdevpro/fsm-dynamo/crypto");
|
|
6
|
+
/**
|
|
7
|
+
* AT-REST field-encryption transzform (Option B, bedrock). A DBService a közös írási úton
|
|
8
|
+
* (`createData` / `modifyData`) a persist ELŐTT titkosítja, a read-post-processor
|
|
9
|
+
* (`stringifyDataId`) a load UTÁN visszafejti az `encrypt:true` mezőket.
|
|
10
|
+
*
|
|
11
|
+
* **App-rétegben fut, NEM mongoose-hook** — a `modifyData` `findByIdAndUpdate`-je megkerüli a
|
|
12
|
+
* mongoose settereket/pre-save-hookokat, ezért a transzform explicit itt történik.
|
|
13
|
+
*
|
|
14
|
+
* **Opt-in, default-off:** ha egy modell egyetlen mezője sem `encrypt:true`, a transzform tiszta
|
|
15
|
+
* NO-OP (ugyanaz az objektum-referencia, nincs klónozás, nincs viselkedés-változás, kulcs sem kell).
|
|
16
|
+
*
|
|
17
|
+
* **Legacy-plaintext biztonságos:** a read-transzform CSAK a `DYENC1:` envelope-értékeket fejti vissza
|
|
18
|
+
* (`isEncryptedDbValue`); a régi, még nem migrált plaintext értékek változatlanul jönnek vissza.
|
|
19
|
+
*
|
|
20
|
+
* Kulcs: `FDP_CORE_DBCONTENT_CRYPT_KEY` (Keystore/CI-env). Verzió: `FDP_CORE_DBCONTENT_CRYPT_KEY_VERSION`
|
|
21
|
+
* (default 1) — a kulcs-rotációhoz (a verzió az envelope-ban utazik).
|
|
22
|
+
*/
|
|
23
|
+
class DyNTS_FieldEncryption_Util {
|
|
24
|
+
static ENV_KEY = 'FDP_CORE_DBCONTENT_CRYPT_KEY';
|
|
25
|
+
static ENV_KEY_VERSION = 'FDP_CORE_DBCONTENT_CRYPT_KEY_VERSION';
|
|
26
|
+
/** `hasEncryptedFields` cache per properties-objektum (referencia szerint). */
|
|
27
|
+
static _hasEncCache = new WeakMap();
|
|
28
|
+
/** A titkosító kulcs env-ből (üres string, ha nincs beállítva). */
|
|
29
|
+
static getKey() {
|
|
30
|
+
return process.env[this.ENV_KEY] ?? '';
|
|
31
|
+
}
|
|
32
|
+
/** Az aktuális kulcs-verzió (default 1). */
|
|
33
|
+
static getKeyVersion() {
|
|
34
|
+
const parsed = Number(process.env[this.ENV_KEY_VERSION]);
|
|
35
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : 1;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* True, ha a properties-fa (rekurzívan a `subObjectParams`-on át) tartalmaz `encrypt:true` mezőt.
|
|
39
|
+
* Cache-elt (a properties-objektum immutábilis a modell-élettartam alatt).
|
|
40
|
+
*/
|
|
41
|
+
static hasEncryptedFields(properties) {
|
|
42
|
+
if (!properties) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
const cached = this._hasEncCache.get(properties);
|
|
46
|
+
if (cached !== undefined) {
|
|
47
|
+
return cached;
|
|
48
|
+
}
|
|
49
|
+
let has = false;
|
|
50
|
+
for (const key in properties) {
|
|
51
|
+
const prop = properties[key]; // ccap-review-disable-line no-any-type
|
|
52
|
+
if (!prop) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
if (prop.encrypt === true) {
|
|
56
|
+
has = true;
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
if (prop.subObjectParams && this.hasEncryptedFields(prop.subObjectParams)) {
|
|
60
|
+
has = true;
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
this._hasEncCache.set(properties, has);
|
|
65
|
+
return has;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Titkosítja a doc `encrypt:true` mezőit persist előtt. **Klónt ad vissza** — az eredeti (hívó)
|
|
69
|
+
* objektumot NEM mutálja (különben a `this.data` ciphertextté válna). NO-OP, ha nincs enc-mező.
|
|
70
|
+
* @throws ha van enc-mező, de a kulcs env-var nincs beállítva (fail-loud misconfiguration).
|
|
71
|
+
*/
|
|
72
|
+
static encryptDoc(data, properties) {
|
|
73
|
+
if (data == null || !this.hasEncryptedFields(properties)) {
|
|
74
|
+
return data;
|
|
75
|
+
}
|
|
76
|
+
const key = this.getKey();
|
|
77
|
+
if (!key) {
|
|
78
|
+
throw new fsm_dynamo_1.DyFM_Error({
|
|
79
|
+
status: 500,
|
|
80
|
+
errorCode: 'DyNTS-ENC-KEY-MISSING',
|
|
81
|
+
message: `At-rest encryption: "${this.ENV_KEY}" env-var is not set, but a model field is encrypt:true. ` +
|
|
82
|
+
`Set the key in the Keystore/CI-env and redeploy.`,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
return this._transform(data, properties, 'encrypt', key, this.getKeyVersion());
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Visszafejti a doc `encrypt:true` mezőit load után. CSAK a `DYENC1:` envelope-értékeket bántja
|
|
89
|
+
* (legacy plaintext változatlan). NO-OP, ha nincs enc-mező. Kulcs hiányában read-en NEM dob
|
|
90
|
+
* (a read ne törjön el) — az envelope-értékek visszafejtetlenül maradnak (a hívó látja + a hiba loggolt).
|
|
91
|
+
*/
|
|
92
|
+
static decryptDoc(data, properties) {
|
|
93
|
+
if (data == null || !this.hasEncryptedFields(properties)) {
|
|
94
|
+
return data;
|
|
95
|
+
}
|
|
96
|
+
const key = this.getKey();
|
|
97
|
+
if (!key) {
|
|
98
|
+
return data;
|
|
99
|
+
}
|
|
100
|
+
return this._transform(data, properties, 'decrypt', key, this.getKeyVersion());
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Rekurzív per-field walk: az `encrypt:true` mezőket titkosítja/visszafejti, a `subObjectParams`-os
|
|
104
|
+
* mezőkbe (objektum VAGY objektum-tömb) leszáll. Immutábilis: minden érintett konténert sekélyen
|
|
105
|
+
* klónoz (az eredetit nem mutálja); a nem-érintett ágakat referencia szerint megosztja (read-only).
|
|
106
|
+
*/
|
|
107
|
+
static _transform(value, properties, mode, key, keyVersion) {
|
|
108
|
+
if (value == null || typeof value !== 'object') {
|
|
109
|
+
return value;
|
|
110
|
+
}
|
|
111
|
+
const result = Array.isArray(value) ? [...value] : { ...value }; // ccap-review-disable-line no-any-type
|
|
112
|
+
for (const propKey in properties) {
|
|
113
|
+
const prop = properties[propKey]; // ccap-review-disable-line no-any-type
|
|
114
|
+
if (!prop) {
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
if (prop.encrypt === true) {
|
|
118
|
+
const current = result[propKey]; // ccap-review-disable-line no-any-type
|
|
119
|
+
if (mode === 'encrypt') {
|
|
120
|
+
// Üres/undefined/null-t NEM titkosítunk (a DyFM_Crypto ezekre dob); már-envelope-ot sem (idempotens).
|
|
121
|
+
if (current != null && current !== '' && !crypto_1.DyFM_Crypto.isEncryptedDbValue(current)) {
|
|
122
|
+
result[propKey] = crypto_1.DyFM_Crypto.encryptDbValue(current, key, keyVersion);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
// CSAK envelope-ot fejtünk vissza (legacy plaintext változatlan).
|
|
127
|
+
if (crypto_1.DyFM_Crypto.isEncryptedDbValue(current)) {
|
|
128
|
+
result[propKey] = crypto_1.DyFM_Crypto.decryptDbValue(current, key);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else if (prop.subObjectParams) {
|
|
133
|
+
const current = result[propKey]; // ccap-review-disable-line no-any-type
|
|
134
|
+
if (current != null && typeof current === 'object') {
|
|
135
|
+
if (Array.isArray(current)) {
|
|
136
|
+
result[propKey] = current.map((item) => this._transform(item, prop.subObjectParams, mode, key, keyVersion));
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
result[propKey] = this._transform(current, prop.subObjectParams, mode, key, keyVersion);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return result;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
exports.DyNTS_FieldEncryption_Util = DyNTS_FieldEncryption_Util;
|
|
148
|
+
//# sourceMappingURL=field-encryption.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-encryption.util.js","sourceRoot":"","sources":["../../src/_collections/field-encryption.util.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-status.controller.d.ts","sourceRoot":"","sources":["../../../../src/_modules/server/server-status/server-status.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAwC,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACzH,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+DAA+D,CAAC;AAEtG,OAAO,EAAqB,iCAAiC,EAAE,MAAM,iCAAiC,CAAC;AACvG,OAAO,EAAE,yCAAyC,EAAE,MAAM,0CAA0C,CAAC;AAKrG;;;;;;;;;;GAUG;AACH,MAAM,WAAW,uCAAuC;IACtD;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;
|
|
1
|
+
{"version":3,"file":"server-status.controller.d.ts","sourceRoot":"","sources":["../../../../src/_modules/server/server-status/server-status.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAwC,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACzH,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+DAA+D,CAAC;AAEtG,OAAO,EAAqB,iCAAiC,EAAE,MAAM,iCAAiC,CAAC;AACvG,OAAO,EAAE,yCAAyC,EAAE,MAAM,0CAA0C,CAAC;AAKrG;;;;;;;;;;GAUG;AACH,MAAM,WAAW,uCAAuC;IACtD;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AA0CD;;;;;;;;;;;;GAYG;AACH,8BAAsB,6BAA6B,CACjD,cAAc,SAAS,iBAAiB,EACxC,OAAO,SAAS,UAAU,EAC1B,QAAQ,SAAS,WAAW,CAAC,OAAO,CAAC,EACrC,uBAAuB,SAAS,2BAA2B,CAAC,OAAO,EAAE,QAAQ,CAAC,EAC9E,sBAAsB,SAAS,iBAAiB,EAChD,qCAAqC,SAAS,yCAAyC,CAAC,sBAAsB,CAAC,EAC/G,6BAA6B,SAAS,iCAAiC,CACrE,cAAc,EACd,OAAO,EACP,QAAQ,EACR,uBAAuB,EACvB,sBAAsB,EACtB,qCAAqC,CACtC,CACD,SAAQ,gBAAgB;IAMxB,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,6BAA6B,CAAC;IAGrE,SAAS,CAAC,QAAQ,CAAC,mBAAmB,EAAE,qBAAqB,EAAE,CAAM;IAErE;;;OAGG;IACH,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,uCAAuC,CAAM;IAE1E;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,uCAAuC,GAAG,IAAI;IAIvE;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,uCAAuC;IAI/D;;OAEG;IACH,MAAM,CAAC,0BAA0B,IAAI,IAAI;IAIzC;;;;;OAKG;IACH,SAAS,CAAC,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE;IAQtG;;;;;;OAMG;IACH,SAAS,CAAC,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE;IAYvG,cAAc,IAAI,IAAI;CAoHvB"}
|
|
@@ -23,11 +23,27 @@ const PUBLIC_PROBE_ENDPOINTS = [
|
|
|
23
23
|
'getServerStatus', 'getServerHealth', 'getServerReadiness', 'getServerStatusForClient',
|
|
24
24
|
];
|
|
25
25
|
/**
|
|
26
|
-
* Default vedett vegpontok (ha a host nem ad `protectedEndpoints`-t):
|
|
27
|
-
*
|
|
26
|
+
* Default vedett vegpontok (ha a host nem ad `protectedEndpoints`-t): a valodi admin-adat
|
|
27
|
+
* vegpontok. A status-probak publikusak (lasd `PUBLIC_PROBE_ENDPOINTS` fent).
|
|
28
|
+
*
|
|
29
|
+
* `getServerDiag` (2026-07-22): a `/diag` **EGYIK listaban sem szerepelt** — sem a publikus
|
|
30
|
+
* probak kozott, sem itt —, ezert **minden FDP-szolgaltatason NYITOTT volt**: elesben 200-at adott
|
|
31
|
+
* event-loop lag-history-val, aktiv handle-szammal, memoria-nyomassal es uptime-mal. Ez nem szandek
|
|
32
|
+
* volt, hanem kimaradas: az endpoint a BFR-OVERSEER-007-tel keszult, es a ket lista egyiket sem
|
|
33
|
+
* frissitettek hozza. A sajat doc-blockja "belso jel"-nek nevezi (amit a kivulrol-nezo health NEM lat),
|
|
34
|
+
* es `lazyPreProcessesFor`-ral kotott — vagyis SZANDEKOSAN gate-elheto, ellentetben a hard-publikus
|
|
35
|
+
* probakkal. Ezert a biztonsagos default: VEDETT.
|
|
36
|
+
*
|
|
37
|
+
* Kockazat: az operativ telemetria (mikor van a szolgaltatas nyomas alatt) tamado szamara
|
|
38
|
+
* idozites-informacio. Merve: a flottaban SEMMI nem fogyasztja (`fdp` CLI, webhook, compose-healthcheck,
|
|
39
|
+
* e2e-suite-ok — mind ures), tehat a gate-eles nem tor el semmit.
|
|
40
|
+
*
|
|
41
|
+
* ⚠️ A host `protectedEndpoints`-ja FELULIRJA ezt a listat — az explicit listat hasznalo appokban
|
|
42
|
+
* kulon fel kell venni a nevet (l. a projekt-szintu kovetes).
|
|
28
43
|
*/
|
|
29
44
|
const DEFAULT_PROTECTED_ENDPOINTS = [
|
|
30
45
|
'getErrorStatistics',
|
|
46
|
+
'getServerDiag',
|
|
31
47
|
];
|
|
32
48
|
/**
|
|
33
49
|
* Endpoints:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-status.controller.js","sourceRoot":"","sources":["../../../../src/_modules/server/server-status/server-status.controller.ts"],"names":[],"mappings":";;;AAGA,sDAAyH;AAEzH,oFAA+E;AAC/E,iHAAsG;AACtG,uFAAoF;AAGpF,6FAAsF;AACtF,uFAAiF;AA+BjF;;;;;;;;;;;GAWG;AACH,MAAM,sBAAsB,GAAa;IACvC,iBAAiB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,0BAA0B;CACvF,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"server-status.controller.js","sourceRoot":"","sources":["../../../../src/_modules/server/server-status/server-status.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.service.d.ts","sourceRoot":"","sources":["../../../src/_services/base/db.service.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,qBAAqB,EAGrB,aAAa,EAAuB,WAAW,EAI/C,aAAa,EAEd,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"db.service.d.ts","sourceRoot":"","sources":["../../../src/_services/base/db.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ const mongoose = tslib_1.__importStar(require("mongoose"));
|
|
|
6
6
|
const mongoose_1 = require("mongoose");
|
|
7
7
|
const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
|
|
8
8
|
const archive_util_1 = require("../../_collections/archive.util");
|
|
9
|
+
const field_encryption_util_1 = require("../../_collections/field-encryption.util");
|
|
9
10
|
const global_settings_const_1 = require("../../_collections/global-settings.const");
|
|
10
11
|
/**
|
|
11
12
|
* DB Service for MongoDB
|
|
@@ -73,7 +74,10 @@ class DyNTS_DBService {
|
|
|
73
74
|
data.__lastModified = new Date();
|
|
74
75
|
data.__createdBy = issuer;
|
|
75
76
|
data.__lastModifiedBy = issuer;
|
|
76
|
-
|
|
77
|
+
// AT-REST field-encryption (opt-in): az encrypt:true mezőket a persist ELŐTT titkosítjuk, egy
|
|
78
|
+
// KLÓNON (a hívó `data`-ja plaintext marad). NO-OP, ha nincs encrypt:true mező.
|
|
79
|
+
const encData = field_encryption_util_1.DyNTS_FieldEncryption_Util.encryptDoc(data, this.dataParams.properties);
|
|
80
|
+
const dataModel = new this.dataModel(encData);
|
|
77
81
|
const newData = await dataModel.save().then((res) => {
|
|
78
82
|
if (res) {
|
|
79
83
|
return res?.toObject();
|
|
@@ -119,12 +123,17 @@ class DyNTS_DBService {
|
|
|
119
123
|
data.__lastModified = new Date();
|
|
120
124
|
data.__lastModifiedBy = issuer;
|
|
121
125
|
}
|
|
126
|
+
// AT-REST field-encryption (opt-in): az encrypt:true mezőket a persist ELŐTT titkosítjuk, egy
|
|
127
|
+
// KLÓNON. KRITIKUS: a `findByIdAndUpdate` MEGKERÜLI a mongoose settereket/pre-save-hookokat, ezért
|
|
128
|
+
// a titkosítás itt, app-rétegben történik (nem mongoose-hookban). A hívó `data`-ja plaintext marad,
|
|
129
|
+
// így a `stringifyDataId(data)` alant no-op decrypttel a plaintextet adja vissza. NO-OP enc-mező nélkül.
|
|
130
|
+
const encData = field_encryption_util_1.DyNTS_FieldEncryption_Util.encryptDoc(data, this.dataParams.properties);
|
|
122
131
|
/**
|
|
123
132
|
* EZ A SZAR TELJESEN SZAR, nem friss, nem a db-be mentett adatokat ad vissza,
|
|
124
133
|
* átír random value-kat össze vissza, WTF
|
|
125
134
|
* */
|
|
126
135
|
/* let newData: T = */
|
|
127
|
-
await this.dataModel.findByIdAndUpdate(data._id,
|
|
136
|
+
await this.dataModel.findByIdAndUpdate(data._id, encData) /* .then((res) => {
|
|
128
137
|
if (res) {
|
|
129
138
|
//return res?.toObject() as T;
|
|
130
139
|
} else {
|
|
@@ -1029,6 +1038,10 @@ class DyNTS_DBService {
|
|
|
1029
1038
|
// ----------------------------------------------------------------------------------
|
|
1030
1039
|
// PRIVATE FUNCTIONS
|
|
1031
1040
|
stringifyDataId(data, fnName) {
|
|
1041
|
+
// AT-REST field-decryption (opt-in): ez a KÖZÖS read+write post-processor (minden read + a
|
|
1042
|
+
// create/modify EREDMÉNYE is átmegy rajta), ezért itt fejtjük vissza az encrypt:true envelope-
|
|
1043
|
+
// mezőket load után. NO-OP, ha nincs encrypt:true mező (ugyanaz a referencia — nulla változás).
|
|
1044
|
+
data = field_encryption_util_1.DyNTS_FieldEncryption_Util.decryptDoc(data, this.dataParams.properties);
|
|
1032
1045
|
if (data?._id && (typeof data._id !== 'string' || typeof data._id === 'object')) {
|
|
1033
1046
|
data._id = `${data._id}`;
|
|
1034
1047
|
if (typeof data._id !== 'string' || typeof data._id === 'object') {
|