@futdevpro/fsm-dynamo 1.16.11 → 1.16.12

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.
@@ -2,16 +2,15 @@ import { DyFM_SecretMask_PartialReveal_Interface } from '../../../_collections/u
2
2
  import { DyFM_StoredSecret } from '../_models/stored-secret.control-model';
3
3
  /** A levezetett, decrypt-nelkul megjelenitheto resz (a DyFM_StoredSecret masked-mezoi). */
4
4
  export interface DyFM_StoredSecret_Preview_Interface {
5
- keyPrefix: string;
6
- keySuffix: string;
7
5
  maskedPreview: string;
6
+ keyLength: number;
8
7
  kind: string | undefined;
9
8
  }
10
9
  /**
11
- * A DyFM_StoredSecret masked-reszenek levezetese egy nyers secret-bol — ENCRYPT/DECRYPT NELKUL
12
- * megjelenitheto azonosito-reszt allit elo (`<prefix>...<suffix>` + a detektalt `kind`). A nyers
13
- * ertek titkositasa NEM itt tortenik (a host adja a kulcsot); ez a util csak a lathato reszt
14
- * szamolja, hogy a UI / a fogyasztok visszafejtes nelkul azonositsak a kulcsot.
10
+ * A DyFM_StoredSecret masked-reszenek levezetese egy USER-SAJAT nyers secret-bol — ENCRYPT/DECRYPT
11
+ * NELKUL megjelenitheto azonosito-reszt allit elo (`<prefix>...<suffix>` + a detektalt `kind` +
12
+ * a `keyLength`). A nyers ertek titkositasa NEM itt tortenik (a host/auth adja a kulcsot); ez a
13
+ * util csak a lathato reszt szamolja, hogy a UI / a fogyasztok visszafejtes nelkul azonositsanak.
15
14
  */
16
15
  export declare class DyFM_StoredSecret_Util {
17
16
  /**
@@ -22,14 +21,14 @@ export declare class DyFM_StoredSecret_Util {
22
21
  static detectKind(rawSecret: string): string | undefined;
23
22
  /**
24
23
  * A decrypt-nelkul megjelenitheto preview levezetese. Tul rovid secret-nel (vagy 0/0 reveal-nel)
25
- * nem reveal-junk semmit (kulonben az egesz secret osszetapadhatna) — ilyenkor ures prefix/suffix
26
- * + tisztan opaque `...` preview.
24
+ * nem reveal-junk semmit (kulonben az egesz secret osszetapadhatna) — ilyenkor tisztan opaque
25
+ * `...` preview. A `keyLength` ettol fuggetlenul mindig a nyers hossz.
27
26
  */
28
27
  static derivePreview(rawSecret: string, reveal?: DyFM_SecretMask_PartialReveal_Interface): DyFM_StoredSecret_Preview_Interface;
29
28
  /**
30
- * Egy DyFM_StoredSecret osszeallitasa a nyers secret-bol — a masked-reszt levezeti, az
31
- * `encryptedValue`-t a HIVO adja (a host/auth titkositja a sajat kulcsaval; a nyers ertek
32
- * itt csak a preview-levezeteshez kell, NEM tarolodik el nyersen).
29
+ * Egy DyFM_StoredSecret osszeallitasa a USER-SAJAT nyers secret-bol — a masked-reszt levezeti,
30
+ * az `encryptedValue`-t a HIVO adja (a host/auth titkositja a `FDP_PRIVATE_API_KEY_CRYPT_KEY`-jel;
31
+ * a nyers ertek itt csak a preview-levezeteshez kell, NEM tarolodik el nyersen).
33
32
  */
34
33
  static build(set: {
35
34
  rawSecret: string;
@@ -1 +1 @@
1
- {"version":3,"file":"stored-secret.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/security/_collections/stored-secret.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,uCAAuC,EACxC,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAE3E,2FAA2F;AAC3F,MAAM,WAAW,mCAAmC;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B;AAKD;;;;;GAKG;AACH,qBAAa,sBAAsB;IAEjC;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAexD;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAClB,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,uCAAwD,GAC/D,mCAAmC;IAoBtC;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,uCAAuC,CAAC;KAClD,GAAG,iBAAiB;CActB"}
1
+ {"version":3,"file":"stored-secret.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/security/_collections/stored-secret.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,uCAAuC,EACxC,MAAM,8CAA8C,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAE3E,2FAA2F;AAC3F,MAAM,WAAW,mCAAmC;IAClD,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B;AAKD;;;;;GAKG;AACH,qBAAa,sBAAsB;IAEjC;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAexD;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAClB,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,uCAAwD,GAC/D,mCAAmC;IAoBtC;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,uCAAuC,CAAC;KAClD,GAAG,iBAAiB;CAatB"}
@@ -6,10 +6,10 @@ const stored_secret_control_model_1 = require("../_models/stored-secret.control-
6
6
  /** Default reveal — az elso 4 + utolso 4 karakter (egysegben a secret-mask util default-javal). */
7
7
  const DEFAULT_REVEAL = { prefix: 4, suffix: 4 };
8
8
  /**
9
- * A DyFM_StoredSecret masked-reszenek levezetese egy nyers secret-bol — ENCRYPT/DECRYPT NELKUL
10
- * megjelenitheto azonosito-reszt allit elo (`<prefix>...<suffix>` + a detektalt `kind`). A nyers
11
- * ertek titkositasa NEM itt tortenik (a host adja a kulcsot); ez a util csak a lathato reszt
12
- * szamolja, hogy a UI / a fogyasztok visszafejtes nelkul azonositsak a kulcsot.
9
+ * A DyFM_StoredSecret masked-reszenek levezetese egy USER-SAJAT nyers secret-bol — ENCRYPT/DECRYPT
10
+ * NELKUL megjelenitheto azonosito-reszt allit elo (`<prefix>...<suffix>` + a detektalt `kind` +
11
+ * a `keyLength`). A nyers ertek titkositasa NEM itt tortenik (a host/auth adja a kulcsot); ez a
12
+ * util csak a lathato reszt szamolja, hogy a UI / a fogyasztok visszafejtes nelkul azonositsanak.
13
13
  */
14
14
  class DyFM_StoredSecret_Util {
15
15
  /**
@@ -33,38 +33,37 @@ class DyFM_StoredSecret_Util {
33
33
  }
34
34
  /**
35
35
  * A decrypt-nelkul megjelenitheto preview levezetese. Tul rovid secret-nel (vagy 0/0 reveal-nel)
36
- * nem reveal-junk semmit (kulonben az egesz secret osszetapadhatna) — ilyenkor ures prefix/suffix
37
- * + tisztan opaque `...` preview.
36
+ * nem reveal-junk semmit (kulonben az egesz secret osszetapadhatna) — ilyenkor tisztan opaque
37
+ * `...` preview. A `keyLength` ettol fuggetlenul mindig a nyers hossz.
38
38
  */
39
39
  static derivePreview(rawSecret, reveal = DEFAULT_REVEAL) {
40
40
  const kind = this.detectKind(rawSecret);
41
+ const keyLength = rawSecret ? rawSecret.length : 0;
41
42
  const p = Math.max(0, reveal.prefix);
42
43
  const s = Math.max(0, reveal.suffix);
43
44
  if (!rawSecret || (p === 0 && s === 0) || rawSecret.length <= p + s + 4) {
44
- return { keyPrefix: '', keySuffix: '', maskedPreview: '...', kind: kind };
45
+ return { maskedPreview: '...', keyLength: keyLength, kind: kind };
45
46
  }
46
- const keyPrefix = rawSecret.slice(0, p);
47
- const keySuffix = rawSecret.slice(rawSecret.length - s);
47
+ const head = rawSecret.slice(0, p);
48
+ const tail = rawSecret.slice(rawSecret.length - s);
48
49
  return {
49
- keyPrefix: keyPrefix,
50
- keySuffix: keySuffix,
51
- maskedPreview: `${keyPrefix}...${keySuffix}`,
50
+ maskedPreview: `${head}...${tail}`,
51
+ keyLength: keyLength,
52
52
  kind: kind,
53
53
  };
54
54
  }
55
55
  /**
56
- * Egy DyFM_StoredSecret osszeallitasa a nyers secret-bol — a masked-reszt levezeti, az
57
- * `encryptedValue`-t a HIVO adja (a host/auth titkositja a sajat kulcsaval; a nyers ertek
58
- * itt csak a preview-levezeteshez kell, NEM tarolodik el nyersen).
56
+ * Egy DyFM_StoredSecret osszeallitasa a USER-SAJAT nyers secret-bol — a masked-reszt levezeti,
57
+ * az `encryptedValue`-t a HIVO adja (a host/auth titkositja a `FDP_PRIVATE_API_KEY_CRYPT_KEY`-jel;
58
+ * a nyers ertek itt csak a preview-levezeteshez kell, NEM tarolodik el nyersen).
59
59
  */
60
60
  static build(set) {
61
61
  const preview = this.derivePreview(set.rawSecret, set.reveal ?? DEFAULT_REVEAL);
62
62
  return new stored_secret_control_model_1.DyFM_StoredSecret({
63
63
  label: set.label,
64
64
  kind: preview.kind,
65
- keyPrefix: preview.keyPrefix,
66
- keySuffix: preview.keySuffix,
67
65
  maskedPreview: preview.maskedPreview,
66
+ keyLength: preview.keyLength,
68
67
  encryptedValue: set.encryptedValue,
69
68
  isActive: true,
70
69
  });
@@ -1 +1 @@
1
- {"version":3,"file":"stored-secret.util.js","sourceRoot":"","sources":["../../../../src/_modules/security/_collections/stored-secret.util.ts"],"names":[],"mappings":";;;AAAA,mFAGsD;AACtD,wFAA2E;AAU3E,mGAAmG;AACnG,MAAM,cAAc,GAA4C,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAEzF;;;;;GAKG;AACH,MAAa,sBAAsB;IAEjC;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,SAAiB;QACjC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,uCAAoB,EAAE,CAAC;YAC3C,mFAAmF;YACnF,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;YAC5B,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAClC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;gBAC5B,OAAO,OAAO,CAAC,IAAI,CAAC;YACtB,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAClB,SAAiB,EACjB,SAAkD,cAAc;QAEhE,MAAM,IAAI,GAAuB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC5D,MAAM,CAAC,GAAW,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,CAAC,GAAW,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAE7C,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACxE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC5E,CAAC;QAED,MAAM,SAAS,GAAW,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAChD,MAAM,SAAS,GAAW,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEhE,OAAO;YACL,SAAS,EAAE,SAAS;YACpB,SAAS,EAAE,SAAS;YACpB,aAAa,EAAE,GAAG,SAAS,MAAM,SAAS,EAAE;YAC5C,IAAI,EAAE,IAAI;SACX,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,GAKZ;QACC,MAAM,OAAO,GACX,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,IAAI,cAAc,CAAC,CAAC;QAElE,OAAO,IAAI,+CAAiB,CAAC;YAC3B,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,cAAc,EAAE,GAAG,CAAC,cAAc;YAClC,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;IACL,CAAC;CACF;AA1ED,wDA0EC"}
1
+ {"version":3,"file":"stored-secret.util.js","sourceRoot":"","sources":["../../../../src/_modules/security/_collections/stored-secret.util.ts"],"names":[],"mappings":";;;AAAA,mFAGsD;AACtD,wFAA2E;AAS3E,mGAAmG;AACnG,MAAM,cAAc,GAA4C,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAEzF;;;;;GAKG;AACH,MAAa,sBAAsB;IAEjC;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,SAAiB;QACjC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,uCAAoB,EAAE,CAAC;YAC3C,mFAAmF;YACnF,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;YAC5B,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAClC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;gBAC5B,OAAO,OAAO,CAAC,IAAI,CAAC;YACtB,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAClB,SAAiB,EACjB,SAAkD,cAAc;QAEhE,MAAM,IAAI,GAAuB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAW,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,GAAW,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,CAAC,GAAW,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAE7C,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACxE,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACpE,CAAC;QAED,MAAM,IAAI,GAAW,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAW,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE3D,OAAO;YACL,aAAa,EAAE,GAAG,IAAI,MAAM,IAAI,EAAE;YAClC,SAAS,EAAE,SAAS;YACpB,IAAI,EAAE,IAAI;SACX,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,GAKZ;QACC,MAAM,OAAO,GACX,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,IAAI,cAAc,CAAC,CAAC;QAElE,OAAO,IAAI,+CAAiB,CAAC;YAC3B,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,cAAc,EAAE,GAAG,CAAC,cAAc;YAClC,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;IACL,CAAC;CACF;AAzED,wDAyEC"}
@@ -1,34 +1,41 @@
1
1
  /**
2
- * Univerzalis tarolt-secret forma (bedrock SSOT) minden FDP-rendszer ugyanezt hasznalja
3
- * API-kulcs / token / barmilyen titkos ertek tarolasara.
2
+ * Univerzalis tarolt-secret forma (bedrock SSOT) a USER-SAJAT private API-kulcsok / titkos
3
+ * ertekek tarolasara — minden FDP-rendszer ugyanezt hasznalja, igy kozos eredetet kapnak
4
+ * (auth per-user AI-kulcs, Organizer user-kulcs, jovobeli).
4
5
  *
5
- * A lenyeg: a secret-bol a tarolaskor levezetheto egy ENCRYPT/DECRYPT NELKUL megjelenitheto
6
- * "lathato resz" — egy `label` (nev) + egy `maskedPreview` (`<prefix>...<suffix>`) + a `kind`
7
- * (a secret detektalt fajtaja). Igy a UI / a fogyasztok decrypt-kor nelkul tudjak azonositani
8
- * MELYIK kulcs ez, anelkul hogy a nyers ertek valaha kliensre / logba kerulne.
6
+ * FONTOS scope: ez a forma a USER altal megadott sajat kulcsokra valo (ezek titkositva
7
+ * tarolodnak a `FDP_PRIVATE_API_KEY_CRYPT_KEY`-jel). Az FDP SAJAT rendszer-api-kulcsai NEM
8
+ * ezen at mennek azok env-var-ok (nem titkositott DB-tarolas).
9
9
  *
10
- * Az `encryptedValue` a titkositott nyers secret KIZAROLAG szerver-oldalon tarolva/kezelve.
11
- * A masked-mezoket a `DyFM_StoredSecret_Util.derivePreview()` szamolja ki a nyers ertekbol
12
- * (a meglevo `DyFM_SECRET_PATTERNS` kind-detektorra epitve).
10
+ * A lenyeg: a secret-bol tarolaskor levezetheto egy ENCRYPT/DECRYPT NELKUL megjelenitheto
11
+ * azonosito-resz egy `label` (a user altal beallithato nev) + egy `maskedPreview`
12
+ * (`<prefix>...<suffix>`) + a `kind` (detektalt fajta) + a `keyLength`. Igy a UI / a fogyasztok
13
+ * visszafejtes nelkul azonositjak MELYIK kulcs ez, anelkul hogy a nyers ertek valaha
14
+ * kliensre / logba kerulne.
13
15
  *
14
- * Embeddable control-model (NEM extends DyFM_Metadata)provider-config-okba / kulcs-listakba
15
- * agyazhato (pl. DyFM_AI_UserProviderConfig, FDP user-api-key, Organizer MCP-kulcs).
16
+ * Az `encryptedValue` a titkositott nyers secret KIZAROLAG szerver-oldalon. A titkositas
17
+ * kulcsa NEM ennek a bedrock-modellnek a felelossege (a host/auth adja a kulcsot a DyFM_Crypto-nak);
18
+ * itt csak a mar titkositott string tarolodik. A masked-mezoket a `DyFM_StoredSecret_Util`
19
+ * szamolja a nyers ertekbol.
20
+ *
21
+ * Embeddable control-model (NEM extends DyFM_Metadata) — provider-config-okba / kulcs-listakba agyazhato.
16
22
  */
17
23
  export declare class DyFM_StoredSecret {
18
- /** Ember-olvashato cimke (pl. "OpenAI Production"). Decrypt nelkul megjelenitheto. */
24
+ /**
25
+ * A user altal BEALLITHATO megjelenitendo nev (settable feature; a host/UI allitja be, pl.
26
+ * "OpenAI Production"). Decrypt nelkul megjelenitheto; tisztan ember-baratti azonositas.
27
+ */
19
28
  label?: string;
20
29
  /** A secret detektalt fajtaja a masking-patternek alapjan (pl. 'openai-key', 'anthropic-key', 'github-pat'). */
21
30
  kind?: string;
22
- /** A nyers secret elso ~N karaktere — decrypt NELKUL megjelenitheto. */
23
- keyPrefix?: string;
24
- /** A nyers secret utolso ~N karaktere — decrypt NELKUL megjelenitheto. */
25
- keySuffix?: string;
26
- /** Teljes megjelenitheto elonezet: `<prefix>...<suffix>` (decrypt nelkul). */
31
+ /** Decrypt NELKUL megjelenitheto elonezet: `<prefix>...<suffix>` (pl. `sk-a...7890`). */
27
32
  maskedPreview?: string;
33
+ /** A nyers secret hossza karakterben — decrypt nelkul megjelenitheto / validalashoz hasznos. */
34
+ keyLength?: number;
28
35
  /**
29
36
  * A titkositott nyers secret — KIZAROLAG szerver-oldalon. SOHA nem kerul kliensre / logba.
30
- * A titkositas kulcsa NEM ennek a bedrock-modellnek a felelossege (a host-rendszer / auth
31
- * adja a kulcsot a DyFM_Crypto-nak); itt csak a mar titkositott string tarolodik.
37
+ * A titkositas kulcsa NEM ennek a bedrock-modellnek a felelossege (a host/auth adja); itt csak
38
+ * a mar titkositott string tarolodik.
32
39
  */
33
40
  encryptedValue?: string;
34
41
  isActive?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"stored-secret.control-model.d.ts","sourceRoot":"","sources":["../../../../src/_modules/security/_models/stored-secret.control-model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,iBAAiB;IAC5B,sFAAsF;IACtF,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,gHAAgH;IAChH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,8EAA8E;IAC9E,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,UAAU,CAAC,EAAE,IAAI,CAAC;gBAEN,GAAG,CAAC,EAAE,iBAAiB;CAKpC"}
1
+ {"version":3,"file":"stored-secret.control-model.d.ts","sourceRoot":"","sources":["../../../../src/_modules/security/_models/stored-secret.control-model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,iBAAiB;IAC5B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,gHAAgH;IAChH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,yFAAyF;IACzF,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,gGAAgG;IAChG,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,UAAU,CAAC,EAAE,IAAI,CAAC;gBAEN,GAAG,CAAC,EAAE,iBAAiB;CAKpC"}
@@ -2,36 +2,43 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DyFM_StoredSecret = void 0;
4
4
  /**
5
- * Univerzalis tarolt-secret forma (bedrock SSOT) minden FDP-rendszer ugyanezt hasznalja
6
- * API-kulcs / token / barmilyen titkos ertek tarolasara.
5
+ * Univerzalis tarolt-secret forma (bedrock SSOT) a USER-SAJAT private API-kulcsok / titkos
6
+ * ertekek tarolasara — minden FDP-rendszer ugyanezt hasznalja, igy kozos eredetet kapnak
7
+ * (auth per-user AI-kulcs, Organizer user-kulcs, jovobeli).
7
8
  *
8
- * A lenyeg: a secret-bol a tarolaskor levezetheto egy ENCRYPT/DECRYPT NELKUL megjelenitheto
9
- * "lathato resz" — egy `label` (nev) + egy `maskedPreview` (`<prefix>...<suffix>`) + a `kind`
10
- * (a secret detektalt fajtaja). Igy a UI / a fogyasztok decrypt-kor nelkul tudjak azonositani
11
- * MELYIK kulcs ez, anelkul hogy a nyers ertek valaha kliensre / logba kerulne.
9
+ * FONTOS scope: ez a forma a USER altal megadott sajat kulcsokra valo (ezek titkositva
10
+ * tarolodnak a `FDP_PRIVATE_API_KEY_CRYPT_KEY`-jel). Az FDP SAJAT rendszer-api-kulcsai NEM
11
+ * ezen at mennek azok env-var-ok (nem titkositott DB-tarolas).
12
12
  *
13
- * Az `encryptedValue` a titkositott nyers secret KIZAROLAG szerver-oldalon tarolva/kezelve.
14
- * A masked-mezoket a `DyFM_StoredSecret_Util.derivePreview()` szamolja ki a nyers ertekbol
15
- * (a meglevo `DyFM_SECRET_PATTERNS` kind-detektorra epitve).
13
+ * A lenyeg: a secret-bol tarolaskor levezetheto egy ENCRYPT/DECRYPT NELKUL megjelenitheto
14
+ * azonosito-resz egy `label` (a user altal beallithato nev) + egy `maskedPreview`
15
+ * (`<prefix>...<suffix>`) + a `kind` (detektalt fajta) + a `keyLength`. Igy a UI / a fogyasztok
16
+ * visszafejtes nelkul azonositjak MELYIK kulcs ez, anelkul hogy a nyers ertek valaha
17
+ * kliensre / logba kerulne.
16
18
  *
17
- * Embeddable control-model (NEM extends DyFM_Metadata)provider-config-okba / kulcs-listakba
18
- * agyazhato (pl. DyFM_AI_UserProviderConfig, FDP user-api-key, Organizer MCP-kulcs).
19
+ * Az `encryptedValue` a titkositott nyers secret KIZAROLAG szerver-oldalon. A titkositas
20
+ * kulcsa NEM ennek a bedrock-modellnek a felelossege (a host/auth adja a kulcsot a DyFM_Crypto-nak);
21
+ * itt csak a mar titkositott string tarolodik. A masked-mezoket a `DyFM_StoredSecret_Util`
22
+ * szamolja a nyers ertekbol.
23
+ *
24
+ * Embeddable control-model (NEM extends DyFM_Metadata) — provider-config-okba / kulcs-listakba agyazhato.
19
25
  */
20
26
  class DyFM_StoredSecret {
21
- /** Ember-olvashato cimke (pl. "OpenAI Production"). Decrypt nelkul megjelenitheto. */
27
+ /**
28
+ * A user altal BEALLITHATO megjelenitendo nev (settable feature; a host/UI allitja be, pl.
29
+ * "OpenAI Production"). Decrypt nelkul megjelenitheto; tisztan ember-baratti azonositas.
30
+ */
22
31
  label;
23
32
  /** A secret detektalt fajtaja a masking-patternek alapjan (pl. 'openai-key', 'anthropic-key', 'github-pat'). */
24
33
  kind;
25
- /** A nyers secret elso ~N karaktere — decrypt NELKUL megjelenitheto. */
26
- keyPrefix;
27
- /** A nyers secret utolso ~N karaktere — decrypt NELKUL megjelenitheto. */
28
- keySuffix;
29
- /** Teljes megjelenitheto elonezet: `<prefix>...<suffix>` (decrypt nelkul). */
34
+ /** Decrypt NELKUL megjelenitheto elonezet: `<prefix>...<suffix>` (pl. `sk-a...7890`). */
30
35
  maskedPreview;
36
+ /** A nyers secret hossza karakterben — decrypt nelkul megjelenitheto / validalashoz hasznos. */
37
+ keyLength;
31
38
  /**
32
39
  * A titkositott nyers secret — KIZAROLAG szerver-oldalon. SOHA nem kerul kliensre / logba.
33
- * A titkositas kulcsa NEM ennek a bedrock-modellnek a felelossege (a host-rendszer / auth
34
- * adja a kulcsot a DyFM_Crypto-nak); itt csak a mar titkositott string tarolodik.
40
+ * A titkositas kulcsa NEM ennek a bedrock-modellnek a felelossege (a host/auth adja); itt csak
41
+ * a mar titkositott string tarolodik.
35
42
  */
36
43
  encryptedValue;
37
44
  isActive;
@@ -1 +1 @@
1
- {"version":3,"file":"stored-secret.control-model.js","sourceRoot":"","sources":["../../../../src/_modules/security/_models/stored-secret.control-model.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAa,iBAAiB;IAC5B,sFAAsF;IACtF,KAAK,CAAU;IAEf,gHAAgH;IAChH,IAAI,CAAU;IAEd,wEAAwE;IACxE,SAAS,CAAU;IAEnB,0EAA0E;IAC1E,SAAS,CAAU;IAEnB,8EAA8E;IAC9E,aAAa,CAAU;IAEvB;;;;OAIG;IACH,cAAc,CAAU;IAExB,QAAQ,CAAW;IACnB,SAAS,CAAQ;IACjB,UAAU,CAAQ;IAElB,YAAY,GAAuB;QACjC,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;CACF;AAhCD,8CAgCC"}
1
+ {"version":3,"file":"stored-secret.control-model.js","sourceRoot":"","sources":["../../../../src/_modules/security/_models/stored-secret.control-model.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAa,iBAAiB;IAC5B;;;OAGG;IACH,KAAK,CAAU;IAEf,gHAAgH;IAChH,IAAI,CAAU;IAEd,yFAAyF;IACzF,aAAa,CAAU;IAEvB,gGAAgG;IAChG,SAAS,CAAU;IAEnB;;;;OAIG;IACH,cAAc,CAAU;IAExB,QAAQ,CAAW;IACnB,SAAS,CAAQ;IACjB,UAAU,CAAQ;IAElB,YAAY,GAAuB;QACjC,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;CACF;AAhCD,8CAgCC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@futdevpro/fsm-dynamo",
3
- "version": "01.16.11",
3
+ "version": "01.16.12",
4
4
  "description": "Full Stack Model Collection for Dynamic (NodeJS-Typescript) Framework called Dynamo, by Future Development Ltd.",
5
5
  "DyBu_settings": {
6
6
  "packageType": "full-stack-package",
@@ -31,27 +31,32 @@ describe('| DyFM_StoredSecret_Util', () => {
31
31
  });
32
32
 
33
33
  describe('| derivePreview', () => {
34
- it('| normal kulcsbol prefix/suffix/maskedPreview + kind', () => {
34
+ it('| normal kulcsbol maskedPreview + keyLength + kind', () => {
35
35
  const preview = DyFM_StoredSecret_Util.derivePreview(openAiKey);
36
- expect(preview.keyPrefix).toBe('sk-a');
37
- expect(preview.keySuffix).toBe('7890');
38
36
  expect(preview.maskedPreview).toBe('sk-a...7890');
37
+ expect(preview.keyLength).toBe(openAiKey.length);
39
38
  expect(preview.kind).toBe('openai-key');
40
39
  // a nyers kulcs SOHA nem jelenik meg teljes egeszeben a preview-ban
41
40
  expect(preview.maskedPreview).not.toContain('abcdefghij');
42
41
  });
43
42
 
44
- it('| tul rovid secret -> opaque (nincs reveal)', () => {
43
+ it('| tul rovid secret -> opaque preview, de keyLength megvan', () => {
45
44
  const preview = DyFM_StoredSecret_Util.derivePreview('short');
46
- expect(preview.keyPrefix).toBe('');
47
- expect(preview.keySuffix).toBe('');
48
45
  expect(preview.maskedPreview).toBe('...');
46
+ expect(preview.keyLength).toBe(5);
49
47
  });
50
48
 
51
49
  it('| 0/0 reveal -> opaque', () => {
52
50
  const preview = DyFM_StoredSecret_Util.derivePreview(openAiKey, { prefix: 0, suffix: 0 });
53
51
  expect(preview.maskedPreview).toBe('...');
54
52
  });
53
+
54
+ it('| ures input -> opaque + keyLength 0', () => {
55
+ const preview = DyFM_StoredSecret_Util.derivePreview('');
56
+ expect(preview.maskedPreview).toBe('...');
57
+ expect(preview.keyLength).toBe(0);
58
+ expect(preview.kind).toBeUndefined();
59
+ });
55
60
  });
56
61
 
57
62
  describe('| build', () => {
@@ -64,9 +69,8 @@ describe('| DyFM_StoredSecret_Util', () => {
64
69
 
65
70
  expect(secret.label).toBe('Anthropic Prod');
66
71
  expect(secret.kind).toBe('anthropic-key');
67
- expect(secret.keyPrefix).toBe('sk-a');
68
- expect(secret.keySuffix).toBe('7890');
69
72
  expect(secret.maskedPreview).toBe('sk-a...7890');
73
+ expect(secret.keyLength).toBe(anthropicKey.length);
70
74
  expect(secret.encryptedValue).toBe('ENCRYPTED-BLOB-xyz');
71
75
  expect(secret.isActive).toBe(true);
72
76
  // a nyers kulcs NINCS eltarolva a modellben (csak az encryptedValue + a masked-resz)
@@ -6,9 +6,8 @@ import { DyFM_StoredSecret } from '../_models/stored-secret.control-model';
6
6
 
7
7
  /** A levezetett, decrypt-nelkul megjelenitheto resz (a DyFM_StoredSecret masked-mezoi). */
8
8
  export interface DyFM_StoredSecret_Preview_Interface {
9
- keyPrefix: string;
10
- keySuffix: string;
11
9
  maskedPreview: string;
10
+ keyLength: number;
12
11
  kind: string | undefined;
13
12
  }
14
13
 
@@ -16,10 +15,10 @@ export interface DyFM_StoredSecret_Preview_Interface {
16
15
  const DEFAULT_REVEAL: DyFM_SecretMask_PartialReveal_Interface = { prefix: 4, suffix: 4 };
17
16
 
18
17
  /**
19
- * A DyFM_StoredSecret masked-reszenek levezetese egy nyers secret-bol — ENCRYPT/DECRYPT NELKUL
20
- * megjelenitheto azonosito-reszt allit elo (`<prefix>...<suffix>` + a detektalt `kind`). A nyers
21
- * ertek titkositasa NEM itt tortenik (a host adja a kulcsot); ez a util csak a lathato reszt
22
- * szamolja, hogy a UI / a fogyasztok visszafejtes nelkul azonositsak a kulcsot.
18
+ * A DyFM_StoredSecret masked-reszenek levezetese egy USER-SAJAT nyers secret-bol — ENCRYPT/DECRYPT
19
+ * NELKUL megjelenitheto azonosito-reszt allit elo (`<prefix>...<suffix>` + a detektalt `kind` +
20
+ * a `keyLength`). A nyers ertek titkositasa NEM itt tortenik (a host/auth adja a kulcsot); ez a
21
+ * util csak a lathato reszt szamolja, hogy a UI / a fogyasztok visszafejtes nelkul azonositsanak.
23
22
  */
24
23
  export class DyFM_StoredSecret_Util {
25
24
 
@@ -45,36 +44,36 @@ export class DyFM_StoredSecret_Util {
45
44
 
46
45
  /**
47
46
  * A decrypt-nelkul megjelenitheto preview levezetese. Tul rovid secret-nel (vagy 0/0 reveal-nel)
48
- * nem reveal-junk semmit (kulonben az egesz secret osszetapadhatna) — ilyenkor ures prefix/suffix
49
- * + tisztan opaque `...` preview.
47
+ * nem reveal-junk semmit (kulonben az egesz secret osszetapadhatna) — ilyenkor tisztan opaque
48
+ * `...` preview. A `keyLength` ettol fuggetlenul mindig a nyers hossz.
50
49
  */
51
50
  static derivePreview(
52
51
  rawSecret: string,
53
52
  reveal: DyFM_SecretMask_PartialReveal_Interface = DEFAULT_REVEAL,
54
53
  ): DyFM_StoredSecret_Preview_Interface {
55
54
  const kind: string | undefined = this.detectKind(rawSecret);
55
+ const keyLength: number = rawSecret ? rawSecret.length : 0;
56
56
  const p: number = Math.max(0, reveal.prefix);
57
57
  const s: number = Math.max(0, reveal.suffix);
58
58
 
59
59
  if (!rawSecret || (p === 0 && s === 0) || rawSecret.length <= p + s + 4) {
60
- return { keyPrefix: '', keySuffix: '', maskedPreview: '...', kind: kind };
60
+ return { maskedPreview: '...', keyLength: keyLength, kind: kind };
61
61
  }
62
62
 
63
- const keyPrefix: string = rawSecret.slice(0, p);
64
- const keySuffix: string = rawSecret.slice(rawSecret.length - s);
63
+ const head: string = rawSecret.slice(0, p);
64
+ const tail: string = rawSecret.slice(rawSecret.length - s);
65
65
 
66
66
  return {
67
- keyPrefix: keyPrefix,
68
- keySuffix: keySuffix,
69
- maskedPreview: `${keyPrefix}...${keySuffix}`,
67
+ maskedPreview: `${head}...${tail}`,
68
+ keyLength: keyLength,
70
69
  kind: kind,
71
70
  };
72
71
  }
73
72
 
74
73
  /**
75
- * Egy DyFM_StoredSecret osszeallitasa a nyers secret-bol — a masked-reszt levezeti, az
76
- * `encryptedValue`-t a HIVO adja (a host/auth titkositja a sajat kulcsaval; a nyers ertek
77
- * itt csak a preview-levezeteshez kell, NEM tarolodik el nyersen).
74
+ * Egy DyFM_StoredSecret osszeallitasa a USER-SAJAT nyers secret-bol — a masked-reszt levezeti,
75
+ * az `encryptedValue`-t a HIVO adja (a host/auth titkositja a `FDP_PRIVATE_API_KEY_CRYPT_KEY`-jel;
76
+ * a nyers ertek itt csak a preview-levezeteshez kell, NEM tarolodik el nyersen).
78
77
  */
79
78
  static build(set: {
80
79
  rawSecret: string,
@@ -88,9 +87,8 @@ export class DyFM_StoredSecret_Util {
88
87
  return new DyFM_StoredSecret({
89
88
  label: set.label,
90
89
  kind: preview.kind,
91
- keyPrefix: preview.keyPrefix,
92
- keySuffix: preview.keySuffix,
93
90
  maskedPreview: preview.maskedPreview,
91
+ keyLength: preview.keyLength,
94
92
  encryptedValue: set.encryptedValue,
95
93
  isActive: true,
96
94
  });
@@ -1,39 +1,45 @@
1
1
  /**
2
- * Univerzalis tarolt-secret forma (bedrock SSOT) minden FDP-rendszer ugyanezt hasznalja
3
- * API-kulcs / token / barmilyen titkos ertek tarolasara.
2
+ * Univerzalis tarolt-secret forma (bedrock SSOT) a USER-SAJAT private API-kulcsok / titkos
3
+ * ertekek tarolasara — minden FDP-rendszer ugyanezt hasznalja, igy kozos eredetet kapnak
4
+ * (auth per-user AI-kulcs, Organizer user-kulcs, jovobeli).
4
5
  *
5
- * A lenyeg: a secret-bol a tarolaskor levezetheto egy ENCRYPT/DECRYPT NELKUL megjelenitheto
6
- * "lathato resz" — egy `label` (nev) + egy `maskedPreview` (`<prefix>...<suffix>`) + a `kind`
7
- * (a secret detektalt fajtaja). Igy a UI / a fogyasztok decrypt-kor nelkul tudjak azonositani
8
- * MELYIK kulcs ez, anelkul hogy a nyers ertek valaha kliensre / logba kerulne.
6
+ * FONTOS scope: ez a forma a USER altal megadott sajat kulcsokra valo (ezek titkositva
7
+ * tarolodnak a `FDP_PRIVATE_API_KEY_CRYPT_KEY`-jel). Az FDP SAJAT rendszer-api-kulcsai NEM
8
+ * ezen at mennek azok env-var-ok (nem titkositott DB-tarolas).
9
9
  *
10
- * Az `encryptedValue` a titkositott nyers secret KIZAROLAG szerver-oldalon tarolva/kezelve.
11
- * A masked-mezoket a `DyFM_StoredSecret_Util.derivePreview()` szamolja ki a nyers ertekbol
12
- * (a meglevo `DyFM_SECRET_PATTERNS` kind-detektorra epitve).
10
+ * A lenyeg: a secret-bol tarolaskor levezetheto egy ENCRYPT/DECRYPT NELKUL megjelenitheto
11
+ * azonosito-resz egy `label` (a user altal beallithato nev) + egy `maskedPreview`
12
+ * (`<prefix>...<suffix>`) + a `kind` (detektalt fajta) + a `keyLength`. Igy a UI / a fogyasztok
13
+ * visszafejtes nelkul azonositjak MELYIK kulcs ez, anelkul hogy a nyers ertek valaha
14
+ * kliensre / logba kerulne.
13
15
  *
14
- * Embeddable control-model (NEM extends DyFM_Metadata)provider-config-okba / kulcs-listakba
15
- * agyazhato (pl. DyFM_AI_UserProviderConfig, FDP user-api-key, Organizer MCP-kulcs).
16
+ * Az `encryptedValue` a titkositott nyers secret KIZAROLAG szerver-oldalon. A titkositas
17
+ * kulcsa NEM ennek a bedrock-modellnek a felelossege (a host/auth adja a kulcsot a DyFM_Crypto-nak);
18
+ * itt csak a mar titkositott string tarolodik. A masked-mezoket a `DyFM_StoredSecret_Util`
19
+ * szamolja a nyers ertekbol.
20
+ *
21
+ * Embeddable control-model (NEM extends DyFM_Metadata) — provider-config-okba / kulcs-listakba agyazhato.
16
22
  */
17
23
  export class DyFM_StoredSecret {
18
- /** Ember-olvashato cimke (pl. "OpenAI Production"). Decrypt nelkul megjelenitheto. */
24
+ /**
25
+ * A user altal BEALLITHATO megjelenitendo nev (settable feature; a host/UI allitja be, pl.
26
+ * "OpenAI Production"). Decrypt nelkul megjelenitheto; tisztan ember-baratti azonositas.
27
+ */
19
28
  label?: string;
20
29
 
21
30
  /** A secret detektalt fajtaja a masking-patternek alapjan (pl. 'openai-key', 'anthropic-key', 'github-pat'). */
22
31
  kind?: string;
23
32
 
24
- /** A nyers secret elso ~N karaktere — decrypt NELKUL megjelenitheto. */
25
- keyPrefix?: string;
26
-
27
- /** A nyers secret utolso ~N karaktere — decrypt NELKUL megjelenitheto. */
28
- keySuffix?: string;
29
-
30
- /** Teljes megjelenitheto elonezet: `<prefix>...<suffix>` (decrypt nelkul). */
33
+ /** Decrypt NELKUL megjelenitheto elonezet: `<prefix>...<suffix>` (pl. `sk-a...7890`). */
31
34
  maskedPreview?: string;
32
35
 
36
+ /** A nyers secret hossza karakterben — decrypt nelkul megjelenitheto / validalashoz hasznos. */
37
+ keyLength?: number;
38
+
33
39
  /**
34
40
  * A titkositott nyers secret — KIZAROLAG szerver-oldalon. SOHA nem kerul kliensre / logba.
35
- * A titkositas kulcsa NEM ennek a bedrock-modellnek a felelossege (a host-rendszer / auth
36
- * adja a kulcsot a DyFM_Crypto-nak); itt csak a mar titkositott string tarolodik.
41
+ * A titkositas kulcsa NEM ennek a bedrock-modellnek a felelossege (a host/auth adja); itt csak
42
+ * a mar titkositott string tarolodik.
37
43
  */
38
44
  encryptedValue?: string;
39
45