@futdevpro/nts-dynamo 1.15.192 → 1.15.194
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/build/_collections/dependency-host-guard.util.d.ts +46 -0
- package/build/_collections/dependency-host-guard.util.d.ts.map +1 -0
- package/build/_collections/dependency-host-guard.util.js +69 -0
- package/build/_collections/dependency-host-guard.util.js.map +1 -0
- package/build/_collections/global-settings.const.d.ts.map +1 -1
- package/build/_collections/global-settings.const.js +2 -0
- package/build/_collections/global-settings.const.js.map +1 -1
- package/build/_collections/secret-redaction.util.d.ts +51 -0
- package/build/_collections/secret-redaction.util.d.ts.map +1 -0
- package/build/_collections/secret-redaction.util.js +100 -0
- package/build/_collections/secret-redaction.util.js.map +1 -0
- package/build/_models/interfaces/global-log-settings.interface.d.ts +14 -0
- package/build/_models/interfaces/global-log-settings.interface.d.ts.map +1 -1
- package/build/_modules/server/safe-diagnostic/safe-diagnostic.control-service.d.ts +20 -1
- package/build/_modules/server/safe-diagnostic/safe-diagnostic.control-service.d.ts.map +1 -1
- package/build/_modules/server/safe-diagnostic/safe-diagnostic.control-service.js +30 -1
- package/build/_modules/server/safe-diagnostic/safe-diagnostic.control-service.js.map +1 -1
- package/build/_services/base/api.service-base.d.ts +17 -0
- package/build/_services/base/api.service-base.d.ts.map +1 -1
- package/build/_services/base/api.service-base.js +59 -0
- package/build/_services/base/api.service-base.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BFR-FSMED-008 — NEM-LOKÁLIS dependency-host guard.
|
|
3
|
+
*
|
|
4
|
+
* A mért incidens: a Social Media test-környezetben az auth-target `http://0.0.0.0:39005/api` lett.
|
|
5
|
+
* Ez `local`-ban helyes, `test`/`prod`-ban viszont azt jelenti, hogy a szolgáltatás **önmagához**
|
|
6
|
+
* próbál csatlakozni — és a hiba csak az ELSŐ tényleges login-kísérletnél derült ki, akkor is egy
|
|
7
|
+
* általános „server is not available" üzenettel, amiből nem látszott sem a függőség neve, sem az,
|
|
8
|
+
* hogy a **konfiguráció** a hibás, nem a távoli szerver.
|
|
9
|
+
*
|
|
10
|
+
* A guard ezért **konfigurációs hibát** jelez, nem elérhetőségit — és a diagnózishoz szükséges
|
|
11
|
+
* minden mezőt STRUKTURÁLTAN ad vissza, hogy a hívó ne szövegből parse-oljon.
|
|
12
|
+
*/
|
|
13
|
+
export interface DyNTS_DependencyHostViolation_Interface {
|
|
14
|
+
/** A függőség neve (pl. az auth-szolgáltatás) — melyik downstream targetről van szó. */
|
|
15
|
+
dependency: string;
|
|
16
|
+
/** A ténylegesen konfigurált URL. */
|
|
17
|
+
targetUrl: string;
|
|
18
|
+
/** A futó környezet, amiben ez tiltott. */
|
|
19
|
+
environment: string;
|
|
20
|
+
/** Az env-var, aminek a helyes értéket hordoznia kellene (ha a fogyasztó megadja). */
|
|
21
|
+
requiredEnvironmentVariable?: string;
|
|
22
|
+
/** Konkrét teendő — nem általános tanács. */
|
|
23
|
+
remediation: string;
|
|
24
|
+
/** A konkrét ok (hiányzó / lokális / malformed host). */
|
|
25
|
+
reason: 'missing' | 'malformed' | 'local-host';
|
|
26
|
+
}
|
|
27
|
+
export declare class DyNTS_DependencyHostGuard_Util {
|
|
28
|
+
/** Lokális hostok — `test`/`prod` környezetben ezek downstream-targetként hibák. */
|
|
29
|
+
private static readonly localHosts;
|
|
30
|
+
/** Azok a környezetek, ahol a lokális host TILOS. */
|
|
31
|
+
private static readonly strictEnvironments;
|
|
32
|
+
/**
|
|
33
|
+
* Megvizsgál egy downstream URL-t. `null`, ha rendben van — különben a strukturált sértés.
|
|
34
|
+
*
|
|
35
|
+
* ⚠️ `local` (és minden nem-strict) környezetben SOHA nem jelez: ott a `localhost` a helyes érték.
|
|
36
|
+
*/
|
|
37
|
+
static inspect(params: {
|
|
38
|
+
dependency: string;
|
|
39
|
+
targetUrl: string | undefined;
|
|
40
|
+
environment: string;
|
|
41
|
+
requiredEnvironmentVariable?: string;
|
|
42
|
+
}): DyNTS_DependencyHostViolation_Interface | null;
|
|
43
|
+
/** Ember-olvasható egysoros összefoglaló a naplóhoz / hibaüzenethez. */
|
|
44
|
+
static describe(violation: DyNTS_DependencyHostViolation_Interface): string;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=dependency-host-guard.util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-host-guard.util.d.ts","sourceRoot":"","sources":["../../src/_collections/dependency-host-guard.util.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,uCAAuC;IACtD,wFAAwF;IACxF,UAAU,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,sFAAsF;IACtF,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,YAAY,CAAC;CAChD;AAED,qBAAa,8BAA8B;IAEzC,oFAAoF;IACpF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAE/B;IAEH,qDAAqD;IACrD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAEvC;IAEH;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;QAC9B,WAAW,EAAE,MAAM,CAAC;QACpB,2BAA2B,CAAC,EAAE,MAAM,CAAC;KACtC,GAAG,uCAAuC,GAAG,IAAI;IAkDlD,wEAAwE;IACxE,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,uCAAuC,GAAG,MAAM;CAI5E"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DyNTS_DependencyHostGuard_Util = void 0;
|
|
4
|
+
const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
|
|
5
|
+
class DyNTS_DependencyHostGuard_Util {
|
|
6
|
+
/** Lokális hostok — `test`/`prod` környezetben ezek downstream-targetként hibák. */
|
|
7
|
+
static localHosts = new Set([
|
|
8
|
+
'0.0.0.0', '127.0.0.1', 'localhost', '::1', '[::1]',
|
|
9
|
+
]);
|
|
10
|
+
/** Azok a környezetek, ahol a lokális host TILOS. */
|
|
11
|
+
static strictEnvironments = new Set([
|
|
12
|
+
`${fsm_dynamo_1.DyFM_EnvironmentFlag.test}`, `${fsm_dynamo_1.DyFM_EnvironmentFlag.prod}`,
|
|
13
|
+
]);
|
|
14
|
+
/**
|
|
15
|
+
* Megvizsgál egy downstream URL-t. `null`, ha rendben van — különben a strukturált sértés.
|
|
16
|
+
*
|
|
17
|
+
* ⚠️ `local` (és minden nem-strict) környezetben SOHA nem jelez: ott a `localhost` a helyes érték.
|
|
18
|
+
*/
|
|
19
|
+
static inspect(params) {
|
|
20
|
+
const { dependency, targetUrl, environment, requiredEnvironmentVariable } = params;
|
|
21
|
+
if (!DyNTS_DependencyHostGuard_Util.strictEnvironments.has(environment)) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
const base = {
|
|
25
|
+
dependency: dependency,
|
|
26
|
+
targetUrl: `${targetUrl ?? ''}`,
|
|
27
|
+
environment: environment,
|
|
28
|
+
requiredEnvironmentVariable: requiredEnvironmentVariable,
|
|
29
|
+
};
|
|
30
|
+
if (!targetUrl || !`${targetUrl}`.trim().length) {
|
|
31
|
+
return {
|
|
32
|
+
...base,
|
|
33
|
+
reason: 'missing',
|
|
34
|
+
remediation: requiredEnvironmentVariable
|
|
35
|
+
? `Set '${requiredEnvironmentVariable}' to the public URL of '${dependency}' and redeploy.`
|
|
36
|
+
: `Configure the base URL of '${dependency}' and redeploy.`,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
let hostname;
|
|
40
|
+
try {
|
|
41
|
+
hostname = new URL(`${targetUrl}`).hostname.toLowerCase();
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return {
|
|
45
|
+
...base,
|
|
46
|
+
reason: 'malformed',
|
|
47
|
+
remediation: `'${targetUrl}' is not a valid absolute URL. Use the 'https://host[:port]/path' form`
|
|
48
|
+
+ `${requiredEnvironmentVariable ? ` in '${requiredEnvironmentVariable}'` : ''} and redeploy.`,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
if (DyNTS_DependencyHostGuard_Util.localHosts.has(hostname)) {
|
|
52
|
+
return {
|
|
53
|
+
...base,
|
|
54
|
+
reason: 'local-host',
|
|
55
|
+
remediation: `In '${environment}' the '${dependency}' target must NOT be a local host ('${hostname}') — `
|
|
56
|
+
+ `that makes the service call ITSELF. Point it at the deployed '${dependency}' host`
|
|
57
|
+
+ `${requiredEnvironmentVariable ? ` via '${requiredEnvironmentVariable}'` : ''} and redeploy.`,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
/** Ember-olvasható egysoros összefoglaló a naplóhoz / hibaüzenethez. */
|
|
63
|
+
static describe(violation) {
|
|
64
|
+
return `Dependency '${violation.dependency}' is misconfigured in '${violation.environment}' `
|
|
65
|
+
+ `(${violation.reason}): '${violation.targetUrl}'. ${violation.remediation}`;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.DyNTS_DependencyHostGuard_Util = DyNTS_DependencyHostGuard_Util;
|
|
69
|
+
//# sourceMappingURL=dependency-host-guard.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-host-guard.util.js","sourceRoot":"","sources":["../../src/_collections/dependency-host-guard.util.ts"],"names":[],"mappings":";;;AAAA,sDAA6D;AA6B7D,MAAa,8BAA8B;IAEzC,oFAAoF;IAC5E,MAAM,CAAU,UAAU,GAAgB,IAAI,GAAG,CAAS;QAChE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO;KACpD,CAAC,CAAC;IAEH,qDAAqD;IAC7C,MAAM,CAAU,kBAAkB,GAAgB,IAAI,GAAG,CAAS;QACxE,GAAG,iCAAoB,CAAC,IAAI,EAAE,EAAE,GAAG,iCAAoB,CAAC,IAAI,EAAE;KAC/D,CAAC,CAAC;IAEH;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,MAKd;QACC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,2BAA2B,EAAE,GAAG,MAAM,CAAC;QAEnF,IAAI,CAAC,8BAA8B,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YACxE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAA4E;YACpF,UAAU,EAAE,UAAU;YACtB,SAAS,EAAE,GAAG,SAAS,IAAI,EAAE,EAAE;YAC/B,WAAW,EAAE,WAAW;YACxB,2BAA2B,EAAE,2BAA2B;SACzD,CAAC;QAEF,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;YAChD,OAAO;gBACL,GAAG,IAAI;gBACP,MAAM,EAAE,SAAS;gBACjB,WAAW,EAAE,2BAA2B;oBACtC,CAAC,CAAC,QAAQ,2BAA2B,2BAA2B,UAAU,iBAAiB;oBAC3F,CAAC,CAAC,8BAA8B,UAAU,iBAAiB;aAC9D,CAAC;QACJ,CAAC;QAED,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;gBACL,GAAG,IAAI;gBACP,MAAM,EAAE,WAAW;gBACnB,WAAW,EAAE,IAAI,SAAS,wEAAwE;sBAC9F,GAAG,2BAA2B,CAAC,CAAC,CAAC,QAAQ,2BAA2B,GAAG,CAAC,CAAC,CAAC,EAAE,gBAAgB;aACjG,CAAC;QACJ,CAAC;QAED,IAAI,8BAA8B,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5D,OAAO;gBACL,GAAG,IAAI;gBACP,MAAM,EAAE,YAAY;gBACpB,WAAW,EACT,OAAO,WAAW,UAAU,UAAU,uCAAuC,QAAQ,OAAO;sBAC1F,iEAAiE,UAAU,QAAQ;sBACnF,GAAG,2BAA2B,CAAC,CAAC,CAAC,SAAS,2BAA2B,GAAG,CAAC,CAAC,CAAC,EAAE,gBAAgB;aAClG,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wEAAwE;IACxE,MAAM,CAAC,QAAQ,CAAC,SAAkD;QAChE,OAAO,eAAe,SAAS,CAAC,UAAU,0BAA0B,SAAS,CAAC,WAAW,IAAI;cACzF,IAAI,SAAS,CAAC,MAAM,OAAO,SAAS,CAAC,SAAS,MAAM,SAAS,CAAC,WAAW,EAAE,CAAC;IAClF,CAAC;;AA5EH,wEA6EC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-settings.const.d.ts","sourceRoot":"","sources":["../../src/_collections/global-settings.const.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iDAAiD,CAAC;AAIxF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"global-settings.const.d.ts","sourceRoot":"","sources":["../../src/_collections/global-settings.const.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,iDAAiD,CAAC;AAIxF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,qBAmHnC,CAAC"}
|
|
@@ -24,6 +24,8 @@ exports.DyNTS_global_settings = {
|
|
|
24
24
|
request: true,
|
|
25
25
|
requestsContent: false,
|
|
26
26
|
responseContent: false,
|
|
27
|
+
// BFR-MASTERPROMPTER-046 / BFR-CTM-018: alapbol NEM naplozzuk az okot (content-free kontraktus).
|
|
28
|
+
safeDiagnosticCause: false,
|
|
27
29
|
requestStackLocation: false,
|
|
28
30
|
socket_allEvents: true,
|
|
29
31
|
socket_mainEvents: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-settings.const.js","sourceRoot":"","sources":["../../src/_collections/global-settings.const.ts"],"names":[],"mappings":";;;AAEA,uEAAoE;AAEpE,yFAAsF;AACtF,mFAAgF;AAEhF;;;GAGG;AACU,QAAA,qBAAqB,GAA0B;IAC1D,OAAO,EAAE,MAAM;IACf,aAAa,EAAE,iBAAiB;IAChC,oBAAoB,EAAE,yCAAmB,CAAC,IAAI;IAC9C,qBAAqB,EAAE,2CAAoB,CAAC,IAAI;IAEhD,eAAe,EAAE,EAAE;IACnB,gBAAgB,EAAE,GAAG;IACrB,YAAY,EAAE,IAAA,6DAA6B,GAAE;IAE7C,oCAAoC,EAAE,IAAI;IAC1C,oBAAoB,EAAE,IAAI;IAE1B,YAAY,EAAE;QACZ,gBAAgB,EAAE,KAAK;QAEvB,KAAK,EAAE,KAAK;QAEZ,OAAO,EAAE,IAAI;QACb,eAAe,EAAE,KAAK;QACtB,eAAe,EAAE,KAAK;QACtB,oBAAoB,EAAE,KAAK;QAE3B,gBAAgB,EAAE,IAAI;QACtB,iBAAiB,EAAE,IAAI;QACvB,mBAAmB,EAAE,KAAK;QAE1B,UAAU,EAAE,IAAI;QAChB,mBAAmB,EAAE,KAAK;QAC1B,mBAAmB,EAAE,KAAK;QAC1B,oBAAoB,EAAE,KAAK;QAC3B,UAAU,EAAE,IAAI;QAEhB,cAAc,EAAE,KAAK;QAErB,YAAY,EAAE,KAAK;QAEnB,aAAa,EAAE;YACb,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,IAAI;SACjB;KACF;IAED,kBAAkB,EAAE,IAAI;IAExB,iFAAiF;IACjF,oFAAoF;IACpF,kEAAkE;IAClE,aAAa,EAAE;QACb,QAAQ,EAAE,KAAK;KAChB;IAED,YAAY,EAAE,IAAI;IAElB,eAAe,EAAE,IAAI;IAErB,aAAa,EAAE,IAAI;IAEnB,kBAAkB,EAAE,IAAI;IAExB,WAAW,EAAE;QACX,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,IAAI;KACpB;IAED,6FAA6F;IAC7F,0FAA0F;IAC1F,+FAA+F;IAC/F,eAAe,EAAE;QACf,OAAO,EAAE,IAAI;QACb,eAAe,EAAE,IAAI;KACtB;IAED,yFAAyF;IACzF,yFAAyF;IACzF,uFAAuF;IACvF,WAAW,EAAE;QACX,OAAO,EAAE,IAAI;QACb,cAAc,EAAE,KAAK;QACrB,oBAAoB,EAAE,EAAE;QACxB,qBAAqB,EAAE,EAAE;QACzB,cAAc,EAAE,EAAE;QAClB,eAAe,EAAE,GAAG;QACpB,kHAAkH;QAClH,iBAAiB,EAAE,IAAI;QACvB,kBAAkB,EAAE,IAAI;QACxB,oBAAoB,EAAE,IAAI;QAC1B,uBAAuB,EAAE,KAAK;QAC9B,sBAAsB,EAAE,CAAC;QACzB,QAAQ,EAAE,GAAG;QACb,WAAW,EAAE,KAAK;QAClB,8FAA8F;QAC9F,eAAe,EAAE,KAAK;QACtB,uBAAuB,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC;KACvE;IACD,+FAA+F;IAC/F,aAAa,EAAE;QACb,OAAO,EAAE,IAAI;QACb,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,GAAG;KACrB;IAED,+FAA+F;IAC/F,iGAAiG;IACjG,iGAAiG;IACjG,gGAAgG;IAChG,uBAAuB,EAAE;QACvB,OAAO,EAAE,IAAI;QACb,cAAc,EAAE,MAAM;QACtB,qBAAqB,EAAE,MAAM;QAC7B,sBAAsB,EAAE,EAAE;QAC1B,iBAAiB,EAAE,OAAO;KAC3B;CACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"global-settings.const.js","sourceRoot":"","sources":["../../src/_collections/global-settings.const.ts"],"names":[],"mappings":";;;AAEA,uEAAoE;AAEpE,yFAAsF;AACtF,mFAAgF;AAEhF;;;GAGG;AACU,QAAA,qBAAqB,GAA0B;IAC1D,OAAO,EAAE,MAAM;IACf,aAAa,EAAE,iBAAiB;IAChC,oBAAoB,EAAE,yCAAmB,CAAC,IAAI;IAC9C,qBAAqB,EAAE,2CAAoB,CAAC,IAAI;IAEhD,eAAe,EAAE,EAAE;IACnB,gBAAgB,EAAE,GAAG;IACrB,YAAY,EAAE,IAAA,6DAA6B,GAAE;IAE7C,oCAAoC,EAAE,IAAI;IAC1C,oBAAoB,EAAE,IAAI;IAE1B,YAAY,EAAE;QACZ,gBAAgB,EAAE,KAAK;QAEvB,KAAK,EAAE,KAAK;QAEZ,OAAO,EAAE,IAAI;QACb,eAAe,EAAE,KAAK;QACtB,eAAe,EAAE,KAAK;QACtB,iGAAiG;QACjG,mBAAmB,EAAE,KAAK;QAC1B,oBAAoB,EAAE,KAAK;QAE3B,gBAAgB,EAAE,IAAI;QACtB,iBAAiB,EAAE,IAAI;QACvB,mBAAmB,EAAE,KAAK;QAE1B,UAAU,EAAE,IAAI;QAChB,mBAAmB,EAAE,KAAK;QAC1B,mBAAmB,EAAE,KAAK;QAC1B,oBAAoB,EAAE,KAAK;QAC3B,UAAU,EAAE,IAAI;QAEhB,cAAc,EAAE,KAAK;QAErB,YAAY,EAAE,KAAK;QAEnB,aAAa,EAAE;YACb,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,IAAI;SACjB;KACF;IAED,kBAAkB,EAAE,IAAI;IAExB,iFAAiF;IACjF,oFAAoF;IACpF,kEAAkE;IAClE,aAAa,EAAE;QACb,QAAQ,EAAE,KAAK;KAChB;IAED,YAAY,EAAE,IAAI;IAElB,eAAe,EAAE,IAAI;IAErB,aAAa,EAAE,IAAI;IAEnB,kBAAkB,EAAE,IAAI;IAExB,WAAW,EAAE;QACX,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,IAAI;KACpB;IAED,6FAA6F;IAC7F,0FAA0F;IAC1F,+FAA+F;IAC/F,eAAe,EAAE;QACf,OAAO,EAAE,IAAI;QACb,eAAe,EAAE,IAAI;KACtB;IAED,yFAAyF;IACzF,yFAAyF;IACzF,uFAAuF;IACvF,WAAW,EAAE;QACX,OAAO,EAAE,IAAI;QACb,cAAc,EAAE,KAAK;QACrB,oBAAoB,EAAE,EAAE;QACxB,qBAAqB,EAAE,EAAE;QACzB,cAAc,EAAE,EAAE;QAClB,eAAe,EAAE,GAAG;QACpB,kHAAkH;QAClH,iBAAiB,EAAE,IAAI;QACvB,kBAAkB,EAAE,IAAI;QACxB,oBAAoB,EAAE,IAAI;QAC1B,uBAAuB,EAAE,KAAK;QAC9B,sBAAsB,EAAE,CAAC;QACzB,QAAQ,EAAE,GAAG;QACb,WAAW,EAAE,KAAK;QAClB,8FAA8F;QAC9F,eAAe,EAAE,KAAK;QACtB,uBAAuB,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC;KACvE;IACD,+FAA+F;IAC/F,aAAa,EAAE;QACb,OAAO,EAAE,IAAI;QACb,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,GAAG;KACrB;IAED,+FAA+F;IAC/F,iGAAiG;IACjG,iGAAiG;IACjG,gGAAgG;IAChG,uBAAuB,EAAE;QACvB,OAAO,EAAE,IAAI;QACb,cAAc,EAAE,MAAM;QACtB,qBAAqB,EAAE,MAAM;QAC7B,sBAAsB,EAAE,EAAE;QAC1B,iBAAiB,EAAE,OAAO;KAC3B;CACF,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BFR-OLDLIGHTSITE-005 + BFR-MASTERPROMPTER-046 — VALUE-PATTERN based secret redaction.
|
|
3
|
+
*
|
|
4
|
+
* Two measured needs meet here:
|
|
5
|
+
*
|
|
6
|
+
* 1. **Connection URIs must never be logged with credentials** (`mongodb://user:secret@host/db`).
|
|
7
|
+
* The startup / connection-error paths logged the full `dbUri`, which is a direct secret
|
|
8
|
+
* disclosure, and a consumer-side logger config cannot safely work around it.
|
|
9
|
+
*
|
|
10
|
+
* 2. **A framework failure must stay diagnosable.** The safe-diagnostic reporter used the raw
|
|
11
|
+
* error only to derive a 4-value `causeType` and then dropped it, so a bootstrap failure was
|
|
12
|
+
* undiagnosable even in principle — colliding with the `core-error-debuggable` hard rule.
|
|
13
|
+
*
|
|
14
|
+
* The resolution is the same util: keep the diagnostic content, remove the credential.
|
|
15
|
+
*
|
|
16
|
+
* ⚠️ Deliberately VALUE-PATTERN based, not field-name based: name-based redaction is measurably
|
|
17
|
+
* leaky (a `key` field with an innocent name, a snake_case variant, or a credential embedded in a
|
|
18
|
+
* free-text message all slip through). Here we match the SHAPE of the secret wherever it appears —
|
|
19
|
+
* including inside an error message or a stack trace.
|
|
20
|
+
*/
|
|
21
|
+
export declare class DyNTS_SecretRedaction_Util {
|
|
22
|
+
/** Ami a maszkolt érték helyére kerül. */
|
|
23
|
+
private static readonly mask;
|
|
24
|
+
/**
|
|
25
|
+
* Connection-URI userinfo maszkolása: `scheme://user:secret@host/db` → `scheme://***@host/db`.
|
|
26
|
+
* A séma, a host, a port és az adatbázis-név MEGMARAD — ezek a diagnosztika hordozói.
|
|
27
|
+
* SRV-alak (`mongodb+srv://`) és percent-encode-olt userinfo is kezelt.
|
|
28
|
+
*/
|
|
29
|
+
static redactConnectionUri(value: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* Ismert token-alakok maszkolása szabad szövegben (npm / GitHub / OpenAI-Anthropic / AWS /
|
|
32
|
+
* Google / Slack / Stripe / Google OAuth client secret), valamint a `key=value` alakú
|
|
33
|
+
* query-paraméterek, ahol a kulcs titok-jellegű.
|
|
34
|
+
*/
|
|
35
|
+
static redactKnownTokens(value: string): string;
|
|
36
|
+
/** A teljes szöveg-szintű redakció (URI userinfo + ismert token-alakok). */
|
|
37
|
+
static redactText(value: string): string;
|
|
38
|
+
/**
|
|
39
|
+
* Egy hiba diagnosztikai alakja NAPLÓZÁSRA — a tartalom megmarad, a credential nem.
|
|
40
|
+
*
|
|
41
|
+
* Azért nem a nyers hibát adjuk tovább: a mért fixtúra szerint a nyers ok tartalmazhat teljes
|
|
42
|
+
* `mongodb://user:secret@host/db` URI-t. Így a bootstrap-bukás oka (üzenet + stack + név)
|
|
43
|
+
* megmarad a szerver-naplóban, a jelszó viszont nem.
|
|
44
|
+
*/
|
|
45
|
+
static redactErrorForLog(error: unknown): {
|
|
46
|
+
name?: string;
|
|
47
|
+
message: string;
|
|
48
|
+
stack?: string;
|
|
49
|
+
} | unknown;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=secret-redaction.util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-redaction.util.d.ts","sourceRoot":"","sources":["../../src/_collections/secret-redaction.util.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,0BAA0B;IAErC,0CAA0C;IAC1C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAiB;IAE7C;;;;OAIG;IACH,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAWjD;;;;OAIG;IACH,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IA+B/C,4EAA4E;IAC5E,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAMxC;;;;;;OAMG;IACH,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO;CAuBvG"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DyNTS_SecretRedaction_Util = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* BFR-OLDLIGHTSITE-005 + BFR-MASTERPROMPTER-046 — VALUE-PATTERN based secret redaction.
|
|
6
|
+
*
|
|
7
|
+
* Two measured needs meet here:
|
|
8
|
+
*
|
|
9
|
+
* 1. **Connection URIs must never be logged with credentials** (`mongodb://user:secret@host/db`).
|
|
10
|
+
* The startup / connection-error paths logged the full `dbUri`, which is a direct secret
|
|
11
|
+
* disclosure, and a consumer-side logger config cannot safely work around it.
|
|
12
|
+
*
|
|
13
|
+
* 2. **A framework failure must stay diagnosable.** The safe-diagnostic reporter used the raw
|
|
14
|
+
* error only to derive a 4-value `causeType` and then dropped it, so a bootstrap failure was
|
|
15
|
+
* undiagnosable even in principle — colliding with the `core-error-debuggable` hard rule.
|
|
16
|
+
*
|
|
17
|
+
* The resolution is the same util: keep the diagnostic content, remove the credential.
|
|
18
|
+
*
|
|
19
|
+
* ⚠️ Deliberately VALUE-PATTERN based, not field-name based: name-based redaction is measurably
|
|
20
|
+
* leaky (a `key` field with an innocent name, a snake_case variant, or a credential embedded in a
|
|
21
|
+
* free-text message all slip through). Here we match the SHAPE of the secret wherever it appears —
|
|
22
|
+
* including inside an error message or a stack trace.
|
|
23
|
+
*/
|
|
24
|
+
class DyNTS_SecretRedaction_Util {
|
|
25
|
+
/** Ami a maszkolt érték helyére kerül. */
|
|
26
|
+
static mask = '***';
|
|
27
|
+
/**
|
|
28
|
+
* Connection-URI userinfo maszkolása: `scheme://user:secret@host/db` → `scheme://***@host/db`.
|
|
29
|
+
* A séma, a host, a port és az adatbázis-név MEGMARAD — ezek a diagnosztika hordozói.
|
|
30
|
+
* SRV-alak (`mongodb+srv://`) és percent-encode-olt userinfo is kezelt.
|
|
31
|
+
*/
|
|
32
|
+
static redactConnectionUri(value) {
|
|
33
|
+
if (typeof value !== 'string' || !value.length) {
|
|
34
|
+
return value;
|
|
35
|
+
}
|
|
36
|
+
return value.replace(/\b([a-zA-Z][a-zA-Z0-9+.-]*:\/\/)([^\s/@]+)@/g, (_match, scheme) => `${scheme}${DyNTS_SecretRedaction_Util.mask}@`);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Ismert token-alakok maszkolása szabad szövegben (npm / GitHub / OpenAI-Anthropic / AWS /
|
|
40
|
+
* Google / Slack / Stripe / Google OAuth client secret), valamint a `key=value` alakú
|
|
41
|
+
* query-paraméterek, ahol a kulcs titok-jellegű.
|
|
42
|
+
*/
|
|
43
|
+
static redactKnownTokens(value) {
|
|
44
|
+
if (typeof value !== 'string' || !value.length) {
|
|
45
|
+
return value;
|
|
46
|
+
}
|
|
47
|
+
const patterns = [
|
|
48
|
+
/\bnpm_[A-Za-z0-9]{36}\b/g,
|
|
49
|
+
/\bgh[posur]_[A-Za-z0-9]{36,}\b/g,
|
|
50
|
+
/\bgithub_pat_[A-Za-z0-9_]{22,}\b/g,
|
|
51
|
+
/\bsk-(?:ant-|proj-)?[A-Za-z0-9_-]{20,}\b/g,
|
|
52
|
+
/\bAKIA[0-9A-Z]{16}\b/g,
|
|
53
|
+
/\bAIza[0-9A-Za-z_-]{35}\b/g,
|
|
54
|
+
/\bGOCSPX-[A-Za-z0-9_-]{20,}\b/g,
|
|
55
|
+
/\bxox[baprs]-[A-Za-z0-9-]{10,}\b/g,
|
|
56
|
+
/\b[sr]k_live_[A-Za-z0-9]{20,}\b/g,
|
|
57
|
+
];
|
|
58
|
+
let redacted = value;
|
|
59
|
+
for (const pattern of patterns) {
|
|
60
|
+
redacted = redacted.replace(pattern, DyNTS_SecretRedaction_Util.mask);
|
|
61
|
+
}
|
|
62
|
+
// `?token=…` / `&apiKey=…` alakú query-paraméterek értéke
|
|
63
|
+
redacted = redacted.replace(/([?&](?:[A-Za-z0-9_-]*(?:token|secret|password|passwd|key|passphrase)[A-Za-z0-9_-]*)=)[^&\s]+/gi, (_match, prefix) => `${prefix}${DyNTS_SecretRedaction_Util.mask}`);
|
|
64
|
+
return redacted;
|
|
65
|
+
}
|
|
66
|
+
/** A teljes szöveg-szintű redakció (URI userinfo + ismert token-alakok). */
|
|
67
|
+
static redactText(value) {
|
|
68
|
+
return DyNTS_SecretRedaction_Util.redactKnownTokens(DyNTS_SecretRedaction_Util.redactConnectionUri(value));
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Egy hiba diagnosztikai alakja NAPLÓZÁSRA — a tartalom megmarad, a credential nem.
|
|
72
|
+
*
|
|
73
|
+
* Azért nem a nyers hibát adjuk tovább: a mért fixtúra szerint a nyers ok tartalmazhat teljes
|
|
74
|
+
* `mongodb://user:secret@host/db` URI-t. Így a bootstrap-bukás oka (üzenet + stack + név)
|
|
75
|
+
* megmarad a szerver-naplóban, a jelszó viszont nem.
|
|
76
|
+
*/
|
|
77
|
+
static redactErrorForLog(error) {
|
|
78
|
+
if (error === null || error === undefined) {
|
|
79
|
+
return error;
|
|
80
|
+
}
|
|
81
|
+
if (typeof error === 'string') {
|
|
82
|
+
return DyNTS_SecretRedaction_Util.redactText(error);
|
|
83
|
+
}
|
|
84
|
+
if (error instanceof Error) {
|
|
85
|
+
return {
|
|
86
|
+
name: error.name,
|
|
87
|
+
message: DyNTS_SecretRedaction_Util.redactText(error.message),
|
|
88
|
+
stack: error.stack ? DyNTS_SecretRedaction_Util.redactText(error.stack) : undefined,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
try {
|
|
92
|
+
return JSON.parse(DyNTS_SecretRedaction_Util.redactText(JSON.stringify(error)));
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return { message: DyNTS_SecretRedaction_Util.redactText(String(error)) };
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
exports.DyNTS_SecretRedaction_Util = DyNTS_SecretRedaction_Util;
|
|
100
|
+
//# sourceMappingURL=secret-redaction.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-redaction.util.js","sourceRoot":"","sources":["../../src/_collections/secret-redaction.util.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAa,0BAA0B;IAErC,0CAA0C;IAClC,MAAM,CAAU,IAAI,GAAW,KAAK,CAAC;IAE7C;;;;OAIG;IACH,MAAM,CAAC,mBAAmB,CAAC,KAAa;QACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC/C,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,KAAK,CAAC,OAAO,CAClB,8CAA8C,EAC9C,CAAC,MAAc,EAAE,MAAc,EAAU,EAAE,CAAC,GAAG,MAAM,GAAG,0BAA0B,CAAC,IAAI,GAAG,CAC3F,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,iBAAiB,CAAC,KAAa;QACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC/C,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,QAAQ,GAAa;YACzB,0BAA0B;YAC1B,iCAAiC;YACjC,mCAAmC;YACnC,2CAA2C;YAC3C,uBAAuB;YACvB,4BAA4B;YAC5B,gCAAgC;YAChC,mCAAmC;YACnC,kCAAkC;SACnC,CAAC;QAEF,IAAI,QAAQ,GAAW,KAAK,CAAC;QAC7B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,0BAA0B,CAAC,IAAI,CAAC,CAAC;QACxE,CAAC;QAED,0DAA0D;QAC1D,QAAQ,GAAG,QAAQ,CAAC,OAAO,CACzB,iGAAiG,EACjG,CAAC,MAAc,EAAE,MAAc,EAAU,EAAE,CAAC,GAAG,MAAM,GAAG,0BAA0B,CAAC,IAAI,EAAE,CAC1F,CAAC;QAEF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,4EAA4E;IAC5E,MAAM,CAAC,UAAU,CAAC,KAAa;QAC7B,OAAO,0BAA0B,CAAC,iBAAiB,CACjD,0BAA0B,CAAC,mBAAmB,CAAC,KAAK,CAAC,CACtD,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,iBAAiB,CAAC,KAAc;QACrC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,0BAA0B,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO;gBACL,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,0BAA0B,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC;gBAC7D,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,0BAA0B,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;aACpF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClF,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,OAAO,EAAE,0BAA0B,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAC3E,CAAC;IACH,CAAC;;AA7FH,gEA8FC"}
|
|
@@ -29,6 +29,20 @@ export interface DyNTS_GlobalLog_Settings {
|
|
|
29
29
|
* this is an application wide default setting for route debug logs
|
|
30
30
|
*/
|
|
31
31
|
responseContent?: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* BFR-MASTERPROMPTER-046 — log the REDACTED cause of a safe-diagnostic failure to the SERVER log.
|
|
34
|
+
*
|
|
35
|
+
* Default: **false** — the `dynts-safe-diagnostic/1` contract (BFR-CTM-018) is content-free by
|
|
36
|
+
* design, and that default is NOT changed here: a framework failure never emits raw content on
|
|
37
|
+
* its own. Turning this on is an explicit operator decision for environments where a bootstrap
|
|
38
|
+
* failure would otherwise be undiagnosable (the measured master-prompter case: the whole evidence
|
|
39
|
+
* was a code, a stage and a fingerprint, which collides with `core-error-debuggable`).
|
|
40
|
+
*
|
|
41
|
+
* Even when enabled, the cause goes through `DyNTS_SecretRedaction_Util` first (connection-URI
|
|
42
|
+
* userinfo and known token shapes masked), so the diagnostic content survives but the credential
|
|
43
|
+
* does not. The OUTGOING response is unaffected in either case.
|
|
44
|
+
*/
|
|
45
|
+
safeDiagnosticCause?: boolean;
|
|
32
46
|
/**
|
|
33
47
|
* this is an application wide default setting for route debug logs
|
|
34
48
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-log-settings.interface.d.ts","sourceRoot":"","sources":["../../../src/_models/interfaces/global-log-settings.interface.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAG/B;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAG9B;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;OAEG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAGrB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;OAIG;IACH,aAAa,CAAC,EAAE;QACd,2DAA2D;QAC3D,OAAO,EAAE,OAAO,CAAC;QACjB,kDAAkD;QAClD,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB;;;;;;;;;;;;;;;WAeG;QACH,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB;;;;;;WAMG;QACH,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KACrE,CAAC;IAEF;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,EAAE;QACT,+DAA+D;QAC/D,OAAO,EAAE,OAAO,CAAC;QACjB,yEAAyE;QACzE,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,sDAAsD;QACtD,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,4CAA4C;QAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,sEAAsE;QACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,0EAA0E;QAC1E,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,mEAAmE;QACnE,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,4CAA4C;QAC5C,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,4CAA4C;QAC5C,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC;CACH"}
|
|
1
|
+
{"version":3,"file":"global-log-settings.interface.d.ts","sourceRoot":"","sources":["../../../src/_models/interfaces/global-log-settings.interface.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;;;;;;;;;;OAYG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;OAEG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAG/B;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAG9B;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;OAEG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAGrB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;OAIG;IACH,aAAa,CAAC,EAAE;QACd,2DAA2D;QAC3D,OAAO,EAAE,OAAO,CAAC;QACjB,kDAAkD;QAClD,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB;;;;;;;;;;;;;;;WAeG;QACH,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB;;;;;;WAMG;QACH,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KACrE,CAAC;IAEF;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,EAAE;QACT,+DAA+D;QAC/D,OAAO,EAAE,OAAO,CAAC;QACjB,yEAAyE;QACzE,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,sDAAsD;QACtD,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,4CAA4C;QAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,sEAAsE;QACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,0EAA0E;QAC1E,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,mEAAmE;QACnE,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,4CAA4C;QAC5C,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,4CAA4C;QAC5C,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC;CACH"}
|
|
@@ -7,7 +7,26 @@ export declare class DyNTS_SafeDiagnostic_ControlService {
|
|
|
7
7
|
private static readonly defaultStatus;
|
|
8
8
|
/** Returns an immutable exact allowlist and never reflects raw failure content. */
|
|
9
9
|
static project(input: DyNTS_SafeDiagnosticInput_Interface): DyNTS_SafeDiagnostic_Interface;
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Logs the projected allowlist for correlation AND the RAW cause for server-side debugging,
|
|
12
|
+
* then returns the same immutable diagnostic.
|
|
13
|
+
*
|
|
14
|
+
* BFR-MASTERPROMPTER-046 — the redaction is right for the OUTGOING response, but it was also
|
|
15
|
+
* applied to the SERVER-SIDE LOG: `report()` used the raw error only to derive a 4-value
|
|
16
|
+
* `causeType` and then dropped it. A bootstrap failure therefore became undiagnosable even in
|
|
17
|
+
* principle — the whole evidence was a code, a stage and a fingerprint. That collides with the
|
|
18
|
+
* `core-error-debuggable` global hard rule ("errors carry debug-level detail") and it made a
|
|
19
|
+
* measured CI failure unresolvable (master-prompter 01.15.990, 2026-09-01).
|
|
20
|
+
*
|
|
21
|
+
* The two logs are deliberately SEPARATE lines: the projection line stays content-free (safe to
|
|
22
|
+
* forward anywhere), while the cause line is explicitly marked server-only and never leaves the
|
|
23
|
+
* process. They share the fingerprint, so the public correlation id still leads to the cause.
|
|
24
|
+
*
|
|
25
|
+
* ⚠️ The cause is REDACTED before logging (BFR-OLDLIGHTSITE-005): a raw failure can carry a full
|
|
26
|
+
* `mongodb://user:secret@host/db` connection URI — the measured spec fixture is exactly that.
|
|
27
|
+
* `DyNTS_SecretRedaction_Util` keeps the diagnostic content (name, message, stack) and removes
|
|
28
|
+
* the credential, so neither requirement has to lose to the other.
|
|
29
|
+
*/
|
|
11
30
|
static report(input: DyNTS_SafeDiagnosticInput_Interface): DyNTS_SafeDiagnostic_Interface;
|
|
12
31
|
/** Creates a framework error that carries only the safe diagnostic allowlist. */
|
|
13
32
|
static toError(diagnostic: DyNTS_SafeDiagnostic_Interface): DyFM_Error;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safe-diagnostic.control-service.d.ts","sourceRoot":"","sources":["../../../../src/_modules/server/safe-diagnostic/safe-diagnostic.control-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAY,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"safe-diagnostic.control-service.d.ts","sourceRoot":"","sources":["../../../../src/_modules/server/safe-diagnostic/safe-diagnostic.control-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAY,MAAM,uBAAuB,CAAC;AAM7D,OAAO,EACL,mCAAmC,EACnC,8BAA8B,EAC/B,MAAM,6BAA6B,CAAC;AAErC,kFAAkF;AAClF,qBAAa,mCAAmC;IAC9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAwD;IAC/F,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAgD;IACnF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAe;IAEpD,mFAAmF;IACnF,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,mCAAmC,GAAG,8BAA8B;IAsB1F;;;;;;;;;;;;;;;;;;;OAmBG;IACH,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,mCAAmC,GAAG,8BAA8B;IAsBzF,iFAAiF;IACjF,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,8BAA8B,GAAG,UAAU;IAUtE,OAAO,CAAC,MAAM,CAAC,OAAO;IAItB,OAAO,CAAC,MAAM,CAAC,YAAY;IAwB3B,OAAO,CAAC,MAAM,CAAC,SAAS;IAQxB,OAAO,CAAC,MAAM,CAAC,cAAc;CAG9B"}
|
|
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DyNTS_SafeDiagnostic_ControlService = void 0;
|
|
4
4
|
const crypto_1 = require("crypto");
|
|
5
5
|
const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
|
|
6
|
+
const secret_redaction_util_1 = require("../../../_collections/secret-redaction.util");
|
|
7
|
+
const global_settings_const_1 = require("../../../_collections/global-settings.const");
|
|
6
8
|
const safe_diagnostic_cause_type_enum_1 = require("./safe-diagnostic-cause.type-enum");
|
|
7
9
|
/** Projects arbitrary failures to a versioned, content-free public diagnostic. */
|
|
8
10
|
class DyNTS_SafeDiagnostic_ControlService {
|
|
@@ -30,10 +32,37 @@ class DyNTS_SafeDiagnostic_ControlService {
|
|
|
30
32
|
status: status,
|
|
31
33
|
});
|
|
32
34
|
}
|
|
33
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
* Logs the projected allowlist for correlation AND the RAW cause for server-side debugging,
|
|
37
|
+
* then returns the same immutable diagnostic.
|
|
38
|
+
*
|
|
39
|
+
* BFR-MASTERPROMPTER-046 — the redaction is right for the OUTGOING response, but it was also
|
|
40
|
+
* applied to the SERVER-SIDE LOG: `report()` used the raw error only to derive a 4-value
|
|
41
|
+
* `causeType` and then dropped it. A bootstrap failure therefore became undiagnosable even in
|
|
42
|
+
* principle — the whole evidence was a code, a stage and a fingerprint. That collides with the
|
|
43
|
+
* `core-error-debuggable` global hard rule ("errors carry debug-level detail") and it made a
|
|
44
|
+
* measured CI failure unresolvable (master-prompter 01.15.990, 2026-09-01).
|
|
45
|
+
*
|
|
46
|
+
* The two logs are deliberately SEPARATE lines: the projection line stays content-free (safe to
|
|
47
|
+
* forward anywhere), while the cause line is explicitly marked server-only and never leaves the
|
|
48
|
+
* process. They share the fingerprint, so the public correlation id still leads to the cause.
|
|
49
|
+
*
|
|
50
|
+
* ⚠️ The cause is REDACTED before logging (BFR-OLDLIGHTSITE-005): a raw failure can carry a full
|
|
51
|
+
* `mongodb://user:secret@host/db` connection URI — the measured spec fixture is exactly that.
|
|
52
|
+
* `DyNTS_SecretRedaction_Util` keeps the diagnostic content (name, message, stack) and removes
|
|
53
|
+
* the credential, so neither requirement has to lose to the other.
|
|
54
|
+
*/
|
|
34
55
|
static report(input) {
|
|
35
56
|
const diagnostic = this.project(input);
|
|
36
57
|
fsm_dynamo_1.DyFM_Log.error('[DyNTS safe diagnostic]', diagnostic);
|
|
58
|
+
// A content-free kontraktus (BFR-CTM-018) a DEFAULT: az ok-naplozas OPT-IN, es akkor is
|
|
59
|
+
// redaktalva megy ki. Igy a ket bejelentes (MP-046 diagnosztizalhatosag vs. CTM-018
|
|
60
|
+
// content-free) egyszerre teljesul, es a meglevo szerzodest nem irjuk felul egyoldaluan.
|
|
61
|
+
if (global_settings_const_1.DyNTS_global_settings.log_settings?.safeDiagnosticCause === true
|
|
62
|
+
&& input.error !== undefined && input.error !== null) {
|
|
63
|
+
fsm_dynamo_1.DyFM_Log.error(`[DyNTS safe diagnostic] SERVER-ONLY cause (fingerprint ${diagnostic.fingerprint}, `
|
|
64
|
+
+ `stage ${diagnostic.stage}) - never sent to a client:`, secret_redaction_util_1.DyNTS_SecretRedaction_Util.redactErrorForLog(input.error));
|
|
65
|
+
}
|
|
37
66
|
return diagnostic;
|
|
38
67
|
}
|
|
39
68
|
/** Creates a framework error that carries only the safe diagnostic allowlist. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safe-diagnostic.control-service.js","sourceRoot":"","sources":["../../../../src/_modules/server/safe-diagnostic/safe-diagnostic.control-service.ts"],"names":[],"mappings":";;;AAAA,mCAAoC;AAEpC,sDAA6D;AAE7D,uFAAmF;AAMnF,kFAAkF;AAClF,MAAa,mCAAmC;IACtC,MAAM,CAAU,eAAe,GAA8B,yBAAyB,CAAC;IACvF,MAAM,CAAU,WAAW,GAAW,oCAAoC,CAAC;IAC3E,MAAM,CAAU,aAAa,GAAW,GAAG,CAAC;IAEpD,mFAAmF;IACnF,MAAM,CAAC,OAAO,CAAC,KAA0C;QACvD,MAAM,IAAI,GAAW,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAmC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjF,MAAM,MAAM,GAAW,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,WAAW,GAAW,IAAI,CAAC,cAAc,CAAC;YAC9C,IAAI,CAAC,eAAe;YACpB,IAAI;YACJ,KAAK,CAAC,KAAK;YACX,SAAS;YACT,MAAM,CAAC,QAAQ,EAAE;SAClB,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,SAAS,EAAE,SAAS;YACpB,WAAW,EAAE,WAAW;YACxB,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;IACL,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"safe-diagnostic.control-service.js","sourceRoot":"","sources":["../../../../src/_modules/server/safe-diagnostic/safe-diagnostic.control-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,23 @@ export declare abstract class DyNTS_ApiService_Base extends DyNTS_SingletonServi
|
|
|
4
4
|
abstract get testEndpoint(): string;
|
|
5
5
|
abstract get connectingSystemName(): string;
|
|
6
6
|
runApiCallWithAvailabilityCheck<T>(apiCall: () => Promise<T>, issuer: string): Promise<T>;
|
|
7
|
+
/**
|
|
8
|
+
* BFR-FSMED-008 — az az env-var, aminek ennek a fuggosegnek a base URL-jet hordoznia kell.
|
|
9
|
+
* A fogyaszto felulirhatja; a guard ezt teszi a remediation-be, hogy az uzenet KONKRET legyen.
|
|
10
|
+
*/
|
|
11
|
+
get requiredBaseUrlEnvVar(): string | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* BFR-FSMED-008 — BOOTSTRAP/PREFLIGHT: a downstream target nem lehet lokalis host `test`/`prod`
|
|
14
|
+
* kornyezetben, es nem lehet hianyzo vagy malformed.
|
|
15
|
+
*
|
|
16
|
+
* A mert incidens: az auth-target `http://0.0.0.0:39005/api` lett a test-kornyezetben — a
|
|
17
|
+
* szolgaltatas ONMAGAHOZ probalt csatlakozni —, es ez csak az ELSO valos login-kiserletnel derult
|
|
18
|
+
* ki, akkor is egy altalanos "server is not available" uzenettel, amibol nem latszott, hogy a
|
|
19
|
+
* KONFIGURACIO a hibas. Bootstrapben hivva ez mar indulaskor kimondja a bajt.
|
|
20
|
+
*
|
|
21
|
+
* @throws {DyFM_Error} `DyNTS-ASB-DEP0` (503) — strukturalt `additionalContent`-tel.
|
|
22
|
+
*/
|
|
23
|
+
assertDependencyHostIsValid(issuer?: string): void;
|
|
7
24
|
checkServerAvailability(issuer: string): Promise<void>;
|
|
8
25
|
testGet(issuer: string): Promise<void>;
|
|
9
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.service-base.d.ts","sourceRoot":"","sources":["../../../src/_services/base/api.service-base.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"api.service-base.d.ts","sourceRoot":"","sources":["../../../src/_services/base/api.service-base.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAO7D,8BAAsB,qBAAsB,SAAQ,sBAAsB;IAOxE,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC;IAC/B,QAAQ,KAAK,YAAY,IAAI,MAAM,CAAC;IACpC,QAAQ,KAAK,oBAAoB,IAAI,MAAM,CAAC;IAEtC,+BAA+B,CAAC,CAAC,EACrC,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,CAAC,CAAC;IAUb;;;OAGG;IACH,IAAI,qBAAqB,IAAI,MAAM,GAAG,SAAS,CAE9C;IAED;;;;;;;;;;OAUG;IACH,2BAA2B,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IA0B5C,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4CtD,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAsB7C"}
|
|
@@ -5,6 +5,7 @@ const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
|
|
|
5
5
|
const singleton_service_1 = require("./singleton.service");
|
|
6
6
|
const api_service_1 = require("../core/api.service");
|
|
7
7
|
const __1 = require("../..");
|
|
8
|
+
const dependency_host_guard_util_1 = require("../../_collections/dependency-host-guard.util");
|
|
8
9
|
class DyNTS_ApiService_Base extends singleton_service_1.DyNTS_SingletonService {
|
|
9
10
|
async runApiCallWithAvailabilityCheck(apiCall, issuer) {
|
|
10
11
|
try {
|
|
@@ -15,16 +16,74 @@ class DyNTS_ApiService_Base extends singleton_service_1.DyNTS_SingletonService {
|
|
|
15
16
|
throw error;
|
|
16
17
|
}
|
|
17
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* BFR-FSMED-008 — az az env-var, aminek ennek a fuggosegnek a base URL-jet hordoznia kell.
|
|
21
|
+
* A fogyaszto felulirhatja; a guard ezt teszi a remediation-be, hogy az uzenet KONKRET legyen.
|
|
22
|
+
*/
|
|
23
|
+
get requiredBaseUrlEnvVar() {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* BFR-FSMED-008 — BOOTSTRAP/PREFLIGHT: a downstream target nem lehet lokalis host `test`/`prod`
|
|
28
|
+
* kornyezetben, es nem lehet hianyzo vagy malformed.
|
|
29
|
+
*
|
|
30
|
+
* A mert incidens: az auth-target `http://0.0.0.0:39005/api` lett a test-kornyezetben — a
|
|
31
|
+
* szolgaltatas ONMAGAHOZ probalt csatlakozni —, es ez csak az ELSO valos login-kiserletnel derult
|
|
32
|
+
* ki, akkor is egy altalanos "server is not available" uzenettel, amibol nem latszott, hogy a
|
|
33
|
+
* KONFIGURACIO a hibas. Bootstrapben hivva ez mar indulaskor kimondja a bajt.
|
|
34
|
+
*
|
|
35
|
+
* @throws {DyFM_Error} `DyNTS-ASB-DEP0` (503) — strukturalt `additionalContent`-tel.
|
|
36
|
+
*/
|
|
37
|
+
assertDependencyHostIsValid(issuer) {
|
|
38
|
+
const violation = dependency_host_guard_util_1.DyNTS_DependencyHostGuard_Util.inspect({
|
|
39
|
+
dependency: this.connectingSystemName,
|
|
40
|
+
targetUrl: this.baseUrl,
|
|
41
|
+
environment: `${__1.DyNTS_global_settings.env_settings?.environment ?? ''}`,
|
|
42
|
+
requiredEnvironmentVariable: this.requiredBaseUrlEnvVar,
|
|
43
|
+
});
|
|
44
|
+
if (!violation) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
throw new fsm_dynamo_1.DyFM_Error({
|
|
48
|
+
...this.getDefaultErrorSettings('assertDependencyHostIsValid', new Error(dependency_host_guard_util_1.DyNTS_DependencyHostGuard_Util.describe(violation)), issuer),
|
|
49
|
+
status: 503,
|
|
50
|
+
userMessage: `${this.connectingSystemName} is not configured correctly for this environment.`,
|
|
51
|
+
errorCode: `${__1.DyNTS_global_settings.systemShortCodeName}|DyNTS-ASB-DEP0`,
|
|
52
|
+
additionalContent: { ...violation },
|
|
53
|
+
});
|
|
54
|
+
}
|
|
18
55
|
async checkServerAvailability(issuer) {
|
|
56
|
+
// BFR-FSMED-008: ELOSZOR a konfiguraciot merjuk. Ha a target lokalis hostra mutat `test`/`prod`-ban,
|
|
57
|
+
// az NEM elerhetosegi hiba — es a "server is not available" uzenet ilyenkor FELREVEZET: a tavoli
|
|
58
|
+
// szervert kuldi keresni, holott a sajat konfiguracio a hibas.
|
|
59
|
+
this.assertDependencyHostIsValid(issuer);
|
|
19
60
|
try {
|
|
20
61
|
await this.testGet(issuer);
|
|
21
62
|
}
|
|
22
63
|
catch (error) {
|
|
64
|
+
const violation = dependency_host_guard_util_1.DyNTS_DependencyHostGuard_Util.inspect({
|
|
65
|
+
dependency: this.connectingSystemName,
|
|
66
|
+
targetUrl: this.baseUrl,
|
|
67
|
+
environment: `${__1.DyNTS_global_settings.env_settings?.environment ?? ''}`,
|
|
68
|
+
requiredEnvironmentVariable: this.requiredBaseUrlEnvVar,
|
|
69
|
+
});
|
|
23
70
|
throw new fsm_dynamo_1.DyFM_Error({
|
|
24
71
|
...this.getDefaultErrorSettings('checkServerAvailability', new Error(`${this.connectingSystemName} server is not available` +
|
|
25
72
|
`\n baseUrl: ${this.baseUrl}`), issuer),
|
|
26
73
|
userMessage: `${this.connectingSystemName} server is not available`,
|
|
27
74
|
errorCode: `${__1.DyNTS_global_settings.systemShortCodeName}|DyNTS-ASB-CSA0`,
|
|
75
|
+
// BFR-FSMED-008: a strukturalt kontextus a RUNTIME hibaba is bekerul — eddig csak a felso
|
|
76
|
+
// endpoint-wrapper formazott `endpointInfo` SZOVEGEBEN volt, amibol gepileg nem lehetett
|
|
77
|
+
// kiolvasni, melyik fuggoseg, milyen URL-lel, milyen kornyezetben bukott.
|
|
78
|
+
additionalContent: {
|
|
79
|
+
dependency: this.connectingSystemName,
|
|
80
|
+
targetUrl: this.baseUrl,
|
|
81
|
+
environment: `${__1.DyNTS_global_settings.env_settings?.environment ?? ''}`,
|
|
82
|
+
requiredEnvironmentVariable: this.requiredBaseUrlEnvVar,
|
|
83
|
+
remediation: violation
|
|
84
|
+
? violation.remediation
|
|
85
|
+
: `Verify that '${this.connectingSystemName}' is deployed and reachable at the target URL.`,
|
|
86
|
+
},
|
|
28
87
|
});
|
|
29
88
|
}
|
|
30
89
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.service-base.js","sourceRoot":"","sources":["../../../src/_services/base/api.service-base.ts"],"names":[],"mappings":";;;AAAA,sDAG+B;AAE/B,2DAA6D;AAC7D,qDAAuD;AACvD,6BAAoE;
|
|
1
|
+
{"version":3,"file":"api.service-base.js","sourceRoot":"","sources":["../../../src/_services/base/api.service-base.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@futdevpro/nts-dynamo",
|
|
3
|
-
"version": "01.15.
|
|
3
|
+
"version": "01.15.194",
|
|
4
4
|
"description": "Dynamic NodeTS (NodeJS-Typescript), MongoDB Backend System Framework by Future Development Program Ltd.",
|
|
5
5
|
"DyBu_settings": {
|
|
6
6
|
"packageType": "server-package",
|