@futdevpro/nts-dynamo 1.15.134 → 1.15.136

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.
@@ -1,7 +1,7 @@
1
1
  {
2
- "pid": 25148,
3
- "startedAt": "2026-08-12T04:56:26.634Z",
4
- "startedAtMs": 1786510586634,
2
+ "pid": 10907,
3
+ "startedAt": "2026-08-14T03:44:08.561Z",
4
+ "startedAtMs": 1786679048561,
5
5
  "phase": "npm-publish",
6
6
  "pipelineComplete": false,
7
7
  "serverRunning": false,
@@ -10,63 +10,63 @@
10
10
  "steps": {
11
11
  "validate-secrets": {
12
12
  "status": "ok",
13
- "startedAt": "2026-08-12T04:56:26.683Z",
13
+ "startedAt": "2026-08-14T03:44:08.862Z",
14
14
  "logLineStart": 2,
15
15
  "logLineEnd": 8,
16
- "durationSec": 0.2
16
+ "durationSec": 0.3
17
17
  },
18
18
  "discord-start": {
19
19
  "status": "ok",
20
- "startedAt": "2026-08-12T04:56:27.918Z",
20
+ "startedAt": "2026-08-14T03:44:10.157Z",
21
21
  "logLineStart": 9,
22
22
  "logLineEnd": 14,
23
- "durationSec": 3.3
23
+ "durationSec": 3.5
24
24
  },
25
25
  "pre-flight": {
26
26
  "status": "ok",
27
- "startedAt": "2026-08-12T04:56:32.209Z",
27
+ "startedAt": "2026-08-14T03:44:14.662Z",
28
28
  "logLineStart": 15,
29
29
  "logLineEnd": 17,
30
30
  "durationSec": 0.2
31
31
  },
32
32
  "install": {
33
33
  "status": "ok",
34
- "startedAt": "2026-08-12T04:56:33.678Z",
34
+ "startedAt": "2026-08-14T03:44:15.872Z",
35
35
  "logLineStart": 18,
36
- "logLineEnd": 215,
37
- "durationSec": 165
36
+ "logLineEnd": 102,
37
+ "durationSec": 29.3
38
38
  },
39
39
  "check-dev-leftovers": {
40
40
  "status": "ok",
41
- "startedAt": "2026-08-12T04:59:19.639Z",
42
- "logLineStart": 216,
43
- "logLineEnd": 225,
44
- "durationSec": 10.4
41
+ "startedAt": "2026-08-14T03:44:46.167Z",
42
+ "logLineStart": 103,
43
+ "logLineEnd": 110,
44
+ "durationSec": 5.5
45
45
  },
46
46
  "build": {
47
47
  "status": "ok",
48
- "startedAt": "2026-08-12T04:59:31.056Z",
49
- "logLineStart": 226,
50
- "logLineEnd": 227,
51
- "durationSec": 72.9
48
+ "startedAt": "2026-08-14T03:44:52.653Z",
49
+ "logLineStart": 111,
50
+ "logLineEnd": 112,
51
+ "durationSec": 26.6
52
52
  },
53
53
  "test": {
54
54
  "status": "ok",
55
- "startedAt": "2026-08-12T05:00:44.988Z",
56
- "logLineStart": 228,
57
- "logLineEnd": 2966,
58
- "durationSec": 126.2,
55
+ "startedAt": "2026-08-14T03:45:20.233Z",
56
+ "logLineStart": 113,
57
+ "logLineEnd": 2856,
58
+ "durationSec": 32.1,
59
59
  "testSummary": {
60
- "totalSpecs": 1639,
60
+ "totalSpecs": 1644,
61
61
  "failures": 0,
62
- "passed": 1639,
63
- "testDurationSec": 18.804
62
+ "passed": 1644,
63
+ "testDurationSec": 11.563
64
64
  }
65
65
  },
66
66
  "npm-publish": {
67
67
  "status": "running",
68
- "startedAt": "2026-08-12T05:02:52.273Z",
69
- "logLineStart": 2967,
68
+ "startedAt": "2026-08-14T03:45:53.429Z",
69
+ "logLineStart": 2857,
70
70
  "logLineEnd": null,
71
71
  "durationSec": null
72
72
  }
@@ -0,0 +1,124 @@
1
+ # 🔴 `DyNTS_FieldEncryption_Util._transform` spread-elte a Mongoose-Documentet — a lista-endpointok burkot adtak vissza
2
+
3
+ **Dátum:** 2026-08-14 · **Kérő:** `BFR-MASTERPROMPTER-027` · **Súlyosság:** high (funkcionálisan törött lista-UI)
4
+
5
+ ---
6
+
7
+ ## 1. A hiba
8
+
9
+ ```ts
10
+ // field-encryption.util.ts — ELŐTTE
11
+ const result: any = Array.isArray(value) ? [ ...(value as any[]) ] : { ...(value as any) };
12
+ ```
13
+
14
+ Egy mongoose-**Document** adatai **nem saját mezők** — a belső `_doc`-ban ülnek. Ezért a `{ ...doc }`
15
+ a **belső burkot** másolja (`$__`, `$isNew`, `_doc`), és az eredmény **már nem Document**, tehát a
16
+ `JSON.stringify` sem hívja a `toJSON()`-ját. A kliens így ezt kapja:
17
+
18
+ ```json
19
+ [{ "$__": {...}, "$isNew": false, "_doc": { "_id": "…", "name": "…" } }]
20
+ ```
21
+
22
+ `_id` a legfelső szinten **nincs** → a fogyasztó minden id-alapú művelete elhasal.
23
+
24
+ ### Élesben mért bizonyíték (`test.master-prompter.hu`, 2026-08-14)
25
+
26
+ | endpoint | státusz | első elem KULCSAI | `_id` |
27
+ |---|---|---|---|
28
+ | `GET /api/flow/flow/get/:userId/:flowId` (egyedi) | 200 | `_id`, `userId`, `ownerId`, `name`, … | ✅ |
29
+ | `GET /api/flow/flow/get-all-my/:userId` (**lista**) | 200 | **`$__`, `$isNew`, `_doc`** | ❌ **undefined** |
30
+
31
+ Kliens-oldali tünet: a lista-kártyák linkje `/editor/undefined`, a törlés
32
+ `DyNX_ApiService call "deleteFlow" ERROR: missing pathParam: "flowId"` dialógussal állt meg.
33
+
34
+ ---
35
+
36
+ ## 2. Miért CSAK a lista tört el — a mért aszimmetria
37
+
38
+ A `DyNTS_DBService` **egyedi** olvasásai már ma is `toObject()`-tel adnak vissza sima objektumot
39
+ (`getDataById`, `getDataByDependencyId`, `findByIdAndUpdate`, `findOneAndUpdate`, `createData`).
40
+ A **lista/find metódusok NYERS Documentet** adnak tovább — kimérve **11 db**:
41
+
42
+ `getDataListByIds` · `getDataListByDependencyId` · `getDataListByDependencyIds` · `getAll` ·
43
+ `getDeletedDataList` · `trueDeleteAllData` · `searchData` · `findOne` · `find` · `findWithPaging` ·
44
+ (`findLeanBatched` — ez `.lean()`-nel már sima objektumot ad)
45
+
46
+ Titkosítás **nélkül** ez ártalmatlan: a nyers Document a `res.send`-en át a `toJSON()`-nal helyesen
47
+ szerializálódik. `encrypt: true` mező esetén viszont a read-post-processor (`stringifyDataId` →
48
+ `decryptDoc` → `_transform`) **spread-eli** a Documentet, és ezzel elrontja.
49
+
50
+ ---
51
+
52
+ ## 3. A javítás
53
+
54
+ ```ts
55
+ // UTÁNA
56
+ const plain: any = this._toPlainIfDocument(value);
57
+ const result: any = Array.isArray(plain) ? [ ...(plain as any[]) ] : { ...(plain as any) };
58
+ ```
59
+
60
+ `_toPlainIfDocument` a `$__` **saját mező** + `toJSON` függvény kettősével azonosít egy Documentet
61
+ (pontosan az, ami a hibás payloadba kiszivárgott — mongoose-import nélküli, pontos diszkriminátor),
62
+ és `toJSON()`-t hív rá.
63
+
64
+ **Miért itt, és nem a 11 DB-metódusban:**
65
+ 1. Ez az **egy pont** mind a 11 utat rendezi.
66
+ 2. A 11 metódus visszatérési **típusát** megváltoztatni (Document → sima objektum) **minden modell
67
+ minden fogyasztóját** érintené. Az itteni javítás viszont **csak az `encrypt: true` modelleket**
68
+ érinti — ahol a `_transform` amúgy is **már ma is** sima (csak **rossz**) objektumot ad vissza.
69
+ ⇒ **a változás nem tud elrontani olyat, ami ma működik.**
70
+ 3. `toJSON()` (nem `toObject()`): a titkosítás bevezetése ELŐTT a nyers Document a `res.send`-en át a
71
+ `JSON.stringify` → `toJSON()` úton szerializálódott — ez adja vissza **ugyanazt a kimeneti alakot**
72
+ (schema-transzformok, virtuals, `__v` együtt).
73
+
74
+ ---
75
+
76
+ ## 4. 🔴 BLAST-RADIUS — a flotta érintettsége
77
+
78
+ A defekt akkor él, ha **mind a három** teljesül: (a) a modellnek van `encrypt: true` mezője ·
79
+ (b) a `FDP_CORE_DBCONTENT_CRYPT_KEY` be van állítva (kulcs nélkül a `decryptDoc` korán visszatér) ·
80
+ (c) az olvasás **lista-metóduson** megy.
81
+
82
+ | Projekt | Modell | Titkosított mezők | Állapot |
83
+ |---|---|---|---|
84
+ | **master-prompter** | `flow` | `flowSteps.prompt` | 🔴 **élesben igazoltan törött** |
85
+ | **master-prompter** | `flow-run` | `results`, `sourceFlow`, `flowRunValues.value` | 🔴 ugyanaz az osztály |
86
+ | **adventor** | `campaign` | `storyState`, `memory`, `epilogue` | ⚠️ ugyanaz az osztály — élesben nem mérve |
87
+ | **adventor** | `generation` | `content`, `prompt` | ⚠️ ugyanaz az osztály — élesben nem mérve |
88
+ | **fdp-token-service** | `token-purchase` | `requestIp`, `euVatNumber` (PII) | ⚠️ ugyanaz az osztály — élesben nem mérve |
89
+ | **fdp-token-service** | `manual-invoice` | `realID`, `title`, `fullName`, `companyName`, … | ⚠️ ugyanaz az osztály — élesben nem mérve |
90
+
91
+ ⇒ **6 modell, 3 projekt.** A master-prompteren kívül egyik sincs élesben visszamérve — ezeket a
92
+ projektek `nts-dynamo`-bumpja után kell ellenőrizni (a lista-endpointjaik `_id`-t adnak-e).
93
+ A `manual-invoice` és a `token-purchase` külön figyelmet érdemel: számlázási/PII adat.
94
+
95
+ > **Miért nem tűnt fel eddig:** a szerver **200**-at ad, a válasz JSON-ként **érvényes** — csak épp a
96
+ > burkot tartalmazza. A UI „üresnek"/működésképtelennek látszik, de sehol nincs hibajelzés.
97
+ > Az MP-ben azért derült ki, mert az `e2e-feature` step (a 30m→60m timeout-emelés után) **most futott
98
+ > le először végig**.
99
+
100
+ ---
101
+
102
+ ## 5. Kontroll-mérés — VALÓDI mongoose-Documenttel
103
+
104
+ A regresszió-őr **szándékosan nem mockkal** dolgozik: a hiba pont abból eredt, hogy a Document adatai
105
+ nem saját mezők — egy kézzel gyártott mock ezt a jellemzőt nem hordozza, tehát a mock-alapú teszt
106
+ **akkor is zöld maradna**, ha a hiba visszakerülne. DB-kapcsolat nem kell: a `new Model({...})`
107
+ offline is valódi Documentet ad.
108
+
109
+ | Eset | A fix nélkül |
110
+ |---|---|
111
+ | a visszafejtett eredmény sima objektum (nincs `$__`/`$isNew`/`_doc`) | ❌ `Expected [ '$__', '_doc' ] not to contain '$__'` |
112
+ | az `_id` megmarad | ❌ `az _id elveszett a transzform során: Expected undefined to be defined` |
113
+ | a JSON-szerializált alak a valódi adatot adja | ❌ `… not to contain '_doc'` |
114
+ | Document-**tömb** (lista-alak) minden eleme sima objektum, `_id`-vel | ❌ `… not to contain '_doc'` |
115
+ | **összesen** | ❌ **4 FAILED** → javítva: ✅ **1644 specs, 0 failures** |
116
+
117
+ A mezők helyes visszafejtését is asszertáljuk Documenten (top-level + beágyazott tömb-elem).
118
+
119
+ ---
120
+
121
+ ## 6. Adopció
122
+
123
+ `@futdevpro/nts-dynamo` bump minden érintett szerver-projektben (master-prompter, adventor,
124
+ fdp-token-service), majd a lista-endpointok visszamérése (`_id` jelen van-e a válaszban).
@@ -42,10 +42,44 @@ export declare class DyNTS_FieldEncryption_Util {
42
42
  * (a read ne törjön el) — az envelope-értékek visszafejtetlenül maradnak (a hívó látja + a hiba loggolt).
43
43
  */
44
44
  static decryptDoc<T>(data: T, properties?: DyFM_DataProperties<any>): T;
45
+ /**
46
+ * Egy mongoose-**Document** sima objektummá alakítása (más érték változatlanul jön vissza).
47
+ *
48
+ * @description 🔴 **MIÉRT KELL** (BFR-MASTERPROMPTER-027, 2026-08-14): a `_transform` sekély spreaddel
49
+ * klónoz. Egy mongoose-Documentnek viszont az adatok NEM saját mezői — azok a belső `_doc`-ban
50
+ * ülnek —, ezért a `{ ...doc }` a **belső burkot** másolja (`$__`, `$isNew`, `_doc`), és az eredmény
51
+ * **már nem Document**, tehát a `JSON.stringify` sem hívja a `toJSON()`-ját. A kliens így
52
+ * `{"$__":…,"$isNew":…,"_doc":{…}}`-t kap `_id` nélkül.
53
+ *
54
+ * **Élesben mérve** (`test.master-prompter.hu`, 2026-08-14): a `flow` lista-endpoint válaszának
55
+ * első elemén a kulcsok `["$__","$isNew","_doc"]`, `_id: undefined` → a kliens-oldali linkek
56
+ * `/editor/undefined`-ra mutattak, a törlés `missing pathParam: "flowId"`-vel állt meg. Az EGYEDI
57
+ * get ugyanakkor ép volt — mert a `DyNTS_DBService` az egyedi olvasásoknál **már `toObject()`-et**
58
+ * hív (`db.service.ts` getDataById / getDataByDependencyId / findByIdAndUpdate / findOneAndUpdate),
59
+ * a **lista-metódusok (11 db) viszont NYERS Documentet adnak tovább**. Titkosítás nélküli
60
+ * modelleknél ez ártalmatlan (a `res.send` a `toJSON()`-on át szerializál), `encrypt:true` mező
61
+ * esetén viszont a spread elrontja.
62
+ *
63
+ * **Miért ITT javítjuk, és nem a 11 DB-metódusban:** (1) ez az EGY pont mind a 11 utat rendezi;
64
+ * (2) a 11 metódus visszatérési TÍPUSÁT megváltoztatni (Document → sima objektum) minden modell
65
+ * minden fogyasztóját érintené — az itteni javítás viszont **csak az `encrypt:true` modelleket**
66
+ * érinti, ahol a `_transform` amúgy is **már ma is** sima (csak ROSSZ) objektumot ad vissza.
67
+ * Vagyis a változás nem tud elrontani olyat, ami ma működik.
68
+ *
69
+ * `toJSON()`-t használunk (nem `toObject()`-et): a titkosítás bevezetése ELŐTT a nyers Document a
70
+ * `res.send`-en át a `JSON.stringify` → `toJSON()` úton szerializálódott, tehát ez adja vissza
71
+ * **bitre ugyanazt a kimeneti alakot** (schema-transzformok, virtuals, `__v`-kezelés együtt).
72
+ *
73
+ * @param value tetszőleges érték
74
+ * @returns a Document sima alakja, vagy az eredeti érték
75
+ */
76
+ private static _toPlainIfDocument;
45
77
  /**
46
78
  * Rekurzív per-field walk: az `encrypt:true` mezőket titkosítja/visszafejti, a `subObjectParams`-os
47
79
  * mezőkbe (objektum VAGY objektum-tömb) leszáll. Immutábilis: minden érintett konténert sekélyen
48
80
  * klónoz (az eredetit nem mutálja); a nem-érintett ágakat referencia szerint megosztja (read-only).
81
+ *
82
+ * ⚠️ A klónozás ELŐTT a mongoose-Documentek sima objektummá alakulnak — lásd {@link _toPlainIfDocument}.
49
83
  */
50
84
  private static _transform;
51
85
  }
@@ -1 +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"}
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAejC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;CAmD1B"}
@@ -99,16 +99,61 @@ class DyNTS_FieldEncryption_Util {
99
99
  }
100
100
  return this._transform(data, properties, 'decrypt', key, this.getKeyVersion());
101
101
  }
102
+ /**
103
+ * Egy mongoose-**Document** sima objektummá alakítása (más érték változatlanul jön vissza).
104
+ *
105
+ * @description 🔴 **MIÉRT KELL** (BFR-MASTERPROMPTER-027, 2026-08-14): a `_transform` sekély spreaddel
106
+ * klónoz. Egy mongoose-Documentnek viszont az adatok NEM saját mezői — azok a belső `_doc`-ban
107
+ * ülnek —, ezért a `{ ...doc }` a **belső burkot** másolja (`$__`, `$isNew`, `_doc`), és az eredmény
108
+ * **már nem Document**, tehát a `JSON.stringify` sem hívja a `toJSON()`-ját. A kliens így
109
+ * `{"$__":…,"$isNew":…,"_doc":{…}}`-t kap `_id` nélkül.
110
+ *
111
+ * **Élesben mérve** (`test.master-prompter.hu`, 2026-08-14): a `flow` lista-endpoint válaszának
112
+ * első elemén a kulcsok `["$__","$isNew","_doc"]`, `_id: undefined` → a kliens-oldali linkek
113
+ * `/editor/undefined`-ra mutattak, a törlés `missing pathParam: "flowId"`-vel állt meg. Az EGYEDI
114
+ * get ugyanakkor ép volt — mert a `DyNTS_DBService` az egyedi olvasásoknál **már `toObject()`-et**
115
+ * hív (`db.service.ts` getDataById / getDataByDependencyId / findByIdAndUpdate / findOneAndUpdate),
116
+ * a **lista-metódusok (11 db) viszont NYERS Documentet adnak tovább**. Titkosítás nélküli
117
+ * modelleknél ez ártalmatlan (a `res.send` a `toJSON()`-on át szerializál), `encrypt:true` mező
118
+ * esetén viszont a spread elrontja.
119
+ *
120
+ * **Miért ITT javítjuk, és nem a 11 DB-metódusban:** (1) ez az EGY pont mind a 11 utat rendezi;
121
+ * (2) a 11 metódus visszatérési TÍPUSÁT megváltoztatni (Document → sima objektum) minden modell
122
+ * minden fogyasztóját érintené — az itteni javítás viszont **csak az `encrypt:true` modelleket**
123
+ * érinti, ahol a `_transform` amúgy is **már ma is** sima (csak ROSSZ) objektumot ad vissza.
124
+ * Vagyis a változás nem tud elrontani olyat, ami ma működik.
125
+ *
126
+ * `toJSON()`-t használunk (nem `toObject()`-et): a titkosítás bevezetése ELŐTT a nyers Document a
127
+ * `res.send`-en át a `JSON.stringify` → `toJSON()` úton szerializálódott, tehát ez adja vissza
128
+ * **bitre ugyanazt a kimeneti alakot** (schema-transzformok, virtuals, `__v`-kezelés együtt).
129
+ *
130
+ * @param value tetszőleges érték
131
+ * @returns a Document sima alakja, vagy az eredeti érték
132
+ */
133
+ static _toPlainIfDocument(value) {
134
+ // A `$__` a mongoose-Document SAJÁT mezője — pontosan ez szivárgott ki a hibás payloadba,
135
+ // ezért ez a legpontosabb (és mongoose-import nélküli) diszkriminátor.
136
+ if (value != null
137
+ && typeof value === 'object'
138
+ && typeof value.toJSON === 'function'
139
+ && Object.prototype.hasOwnProperty.call(value, '$__')) {
140
+ return value.toJSON();
141
+ }
142
+ return value;
143
+ }
102
144
  /**
103
145
  * Rekurzív per-field walk: az `encrypt:true` mezőket titkosítja/visszafejti, a `subObjectParams`-os
104
146
  * mezőkbe (objektum VAGY objektum-tömb) leszáll. Immutábilis: minden érintett konténert sekélyen
105
147
  * klónoz (az eredetit nem mutálja); a nem-érintett ágakat referencia szerint megosztja (read-only).
148
+ *
149
+ * ⚠️ A klónozás ELŐTT a mongoose-Documentek sima objektummá alakulnak — lásd {@link _toPlainIfDocument}.
106
150
  */
107
151
  static _transform(value, properties, mode, key, keyVersion) {
108
152
  if (value == null || typeof value !== 'object') {
109
153
  return value;
110
154
  }
111
- const result = Array.isArray(value) ? [...value] : { ...value }; // ccap-review-disable-line no-any-type
155
+ const plain = this._toPlainIfDocument(value); // ccap-review-disable-line no-any-type
156
+ const result = Array.isArray(plain) ? [...plain] : { ...plain }; // ccap-review-disable-line no-any-type
112
157
  for (const propKey in properties) {
113
158
  const prop = properties[propKey]; // ccap-review-disable-line no-any-type
114
159
  if (!prop) {
@@ -1 +1 @@
1
- {"version":3,"file":"field-encryption.util.js","sourceRoot":"","sources":["../../src/_collections/field-encryption.util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"field-encryption.util.js","sourceRoot":"","sources":["../../src/_collections/field-encryption.util.ts"],"names":[],"mappings":"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"}
@@ -283,6 +283,17 @@ export declare class DyNTS_DataService<T extends DyFM_Metadata> {
283
283
  * Search the data list based on the search query
284
284
  * Sorts and filters the data list based on the search query
285
285
  *
286
+ * ⚠️ **BFR-OVERSEER-011 — a lapozás MEMÓRIÁBAN történik, a `pageSize` NEM DB-limit!**
287
+ * A metódus a TELJES (elő-szűrt) kollekciót betölti (`findDataList`/`getAll` limit nélkül),
288
+ * memóriában rendez/szűr, és CSAK UTÁNA `slice`-ol — egy `searchData({ pageSize: 1 })` is a
289
+ * teljes kollekciót húzza a heap-be (mért incidens: GC-thrash + event-loop-megállás nagy
290
+ * kollekción). **Mikor MIT használj:**
291
+ * - lapozott lekérdezés nagy kollekción → `DyNTS_DBService.findWithPaging(filter, page, pageSize, sort)`
292
+ * (DB-szintű `.skip().limit()`);
293
+ * - „legfrissebb N" → `findDataList(filter, undefined, { projection, sort, limit })`;
294
+ * - `searchData` CSAK kis/korlátos kollekcióra vagy már memóriában lévő `dataList`-re való
295
+ * (komplex, memóriabeli szűrés/rendezés).
296
+ *
286
297
  * NOTE: For more simple and with better performance and if you don't need sorting, use findDataList instead.
287
298
  *
288
299
  * @example
@@ -1 +1 @@
1
- {"version":3,"file":"data.service.d.ts","sourceRoot":"","sources":["../../../src/_services/base/data.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data.service.d.ts","sourceRoot":"","sources":["../../../src/_services/base/data.service.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,12 @@ const archive_service_registry_const_1 = require("../../_collections/archive-ser
14
14
  *
15
15
  * Explicit `fields: ['_id']`-vel meg vizsgaltathato, ha valamiert kell.
16
16
  */
17
+ /**
18
+ * BFR-OVERSEER-011 (b): e dokumentum-szám fölött a searchData memóriabeli lapozása warn-t ad —
19
+ * a teljes-kollekció-betöltés hívóhelyei incidens ELŐTT láthatóvá válnak (mérve: 5 hívóhely,
20
+ * GC-thrash, ~11 óra akadozó CI).
21
+ */
22
+ const DyNTS_SEARCHDATA_INMEMORY_WARN_THRESHOLD = 1000;
17
23
  const COMPARE_DATA_METADATA_SKIP_FIELDS = new Set([
18
24
  '_id',
19
25
  '__created',
@@ -1345,6 +1351,17 @@ class DyNTS_DataService {
1345
1351
  * Search the data list based on the search query
1346
1352
  * Sorts and filters the data list based on the search query
1347
1353
  *
1354
+ * ⚠️ **BFR-OVERSEER-011 — a lapozás MEMÓRIÁBAN történik, a `pageSize` NEM DB-limit!**
1355
+ * A metódus a TELJES (elő-szűrt) kollekciót betölti (`findDataList`/`getAll` limit nélkül),
1356
+ * memóriában rendez/szűr, és CSAK UTÁNA `slice`-ol — egy `searchData({ pageSize: 1 })` is a
1357
+ * teljes kollekciót húzza a heap-be (mért incidens: GC-thrash + event-loop-megállás nagy
1358
+ * kollekción). **Mikor MIT használj:**
1359
+ * - lapozott lekérdezés nagy kollekción → `DyNTS_DBService.findWithPaging(filter, page, pageSize, sort)`
1360
+ * (DB-szintű `.skip().limit()`);
1361
+ * - „legfrissebb N" → `findDataList(filter, undefined, { projection, sort, limit })`;
1362
+ * - `searchData` CSAK kis/korlátos kollekcióra vagy már memóriában lévő `dataList`-re való
1363
+ * (komplex, memóriabeli szűrés/rendezés).
1364
+ *
1348
1365
  * NOTE: For more simple and with better performance and if you don't need sorting, use findDataList instead.
1349
1366
  *
1350
1367
  * @example
@@ -1407,6 +1424,15 @@ class DyNTS_DataService {
1407
1424
  else {
1408
1425
  dataList = await this.getAll();
1409
1426
  }
1427
+ // BFR-OVERSEER-011 (b) runtime-guard: a memóriabeli lapozás a TELJES kollekciót húzza be —
1428
+ // nagy halmazon ez GC-thrash-t okoz (mért incidens: ~43k dok/host, event-loop-megállás).
1429
+ // A warn a hívóhelyet AZONNAL felszínre hozza, incidens előtt.
1430
+ if (dataList.length > DyNTS_SEARCHDATA_INMEMORY_WARN_THRESHOLD) {
1431
+ fsm_dynamo_1.DyFM_Log.warn(`searchData('${this.dataParams.dataName}'): ${dataList.length} docs loaded INTO MEMORY for ` +
1432
+ `in-memory paging (pageSize is NOT a DB-limit!). For paged queries use ` +
1433
+ `DyNTS_DBService.findWithPaging(); for "latest N" use findDataList(filter, undefined, ` +
1434
+ `{ projection, sort, limit }).`);
1435
+ }
1410
1436
  }
1411
1437
  else {
1412
1438
  if (Object.keys(preFilter).length) {