@futdevpro/nts-dynamo 1.15.195 → 1.15.196

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.
@@ -0,0 +1,101 @@
1
+ import { URL } from 'url';
2
+ /**
3
+ * BFR-FSMED-013 — SSRF-safe, KORLÁTOS remote-metadata kliens.
4
+ *
5
+ * Egy nyilvános felületről érkező URL letöltése a klasszikus SSRF-felület: a szerver a saját
6
+ * hálózati pozíciójából kér le tetszőleges címet. A védelemnek ezért **minden DNS-válaszra és
7
+ * minden redirect-hopra** érvényesnek kell lennie, nem csak az első URL-re — különben egy
8
+ * **DNS-rebinding** vagy egy belső címre mutató redirect átviszi a kérést a privát hálózatba.
9
+ *
10
+ * Amit kikényszerít:
11
+ * - URL-normalizálás, credential-es URL (`user:pass@`) TILTVA;
12
+ * - protokoll-policy (alapból csak `https:`);
13
+ * - **minden** feloldott IP ellenőrzése (privát / loopback / link-local / reserved / CGNAT),
14
+ * IPv4-in-IPv6 és vegyes jelölés kezelésével;
15
+ * - redirect-limit, és **hopokként újra-ellenőrzött** cél;
16
+ * - timeout, maximális válasz-méret (bounded stream — a body sosem olvasható korlátlanul),
17
+ * engedélyezett content-type lista;
18
+ * - stabil `reason` kódok és REDAKTÁLT diagnosztika (a hibába nem kerül credential).
19
+ */
20
+ /** Stabil, gépileg feldolgozható elutasítási okok. */
21
+ export declare enum DyNTS_SafeFetchReason_Type {
22
+ invalidUrl = "invalid-url",
23
+ credentialsInUrl = "credentials-in-url",
24
+ protocolNotAllowed = "protocol-not-allowed",
25
+ hostNotResolvable = "host-not-resolvable",
26
+ blockedAddress = "blocked-address",
27
+ tooManyRedirects = "too-many-redirects",
28
+ contentTypeNotAllowed = "content-type-not-allowed",
29
+ responseTooLarge = "response-too-large",
30
+ timeout = "timeout",
31
+ requestFailed = "request-failed"
32
+ }
33
+ /** A kliens beállításai — minden korlát explicit, alapértelmezés a szigorúbb. */
34
+ export interface DyNTS_SafeFetch_Options_Interface {
35
+ allowedProtocols?: string[];
36
+ maxRedirects?: number;
37
+ timeoutMs?: number;
38
+ maxResponseBytes?: number;
39
+ allowedContentTypes?: string[];
40
+ /** Injektálható DNS-feloldó — teszthez és a rebinding-mátrixhoz. */
41
+ resolve?: (hostname: string) => Promise<string[]>;
42
+ /** Injektálható transport — teszthez, illetve saját HTTP-réteghez (proxy, mTLS). */
43
+ transport?: DyNTS_SafeFetch_Transport;
44
+ }
45
+ /** Egyetlen HTTP-hop kimenete — a body itt MÁR korlátos. */
46
+ export interface DyNTS_SafeFetch_TransportResult_Interface {
47
+ status: number;
48
+ headers: Record<string, string | string[] | undefined>;
49
+ body: string;
50
+ bytes: number;
51
+ truncated: boolean;
52
+ }
53
+ /** Injektálható transport-szignatúra. */
54
+ export type DyNTS_SafeFetch_Transport = (url: URL, options: DyNTS_SafeFetch_Options_Interface) => Promise<DyNTS_SafeFetch_TransportResult_Interface>;
55
+ /** Sikeres letöltés eredménye — a body KORLÁTOS. */
56
+ export interface DyNTS_SafeFetch_Result_Interface {
57
+ finalUrl: string;
58
+ /** A bejárt hopok, az eredeti URL-lel kezdve — auditálható redirect-lánc. */
59
+ redirectChain: string[];
60
+ status: number;
61
+ contentType: string;
62
+ bytes: number;
63
+ body: string;
64
+ truncated: boolean;
65
+ }
66
+ /** Elutasítás — stabil kóddal és redaktált diagnosztikával. */
67
+ export declare class DyNTS_SafeFetch_Error extends Error {
68
+ readonly reason: DyNTS_SafeFetchReason_Type;
69
+ readonly diagnostic?: Record<string, unknown>;
70
+ constructor(reason: DyNTS_SafeFetchReason_Type, message: string, diagnostic?: Record<string, unknown>);
71
+ }
72
+ export declare class DyNTS_SafeRemoteFetch_Util {
73
+ private static readonly defaults;
74
+ /**
75
+ * IP-cím blokkolandó-e. IPv4 és IPv6 (a **IPv4-in-IPv6** alakkal együtt: `::ffff:10.0.0.1`).
76
+ *
77
+ * ⚠️ Ez a döntő pont: a hostnév ártalmatlan lehet, miközben egy KÜLSŐ DNS-szerver privát címre
78
+ * oldja fel (DNS-rebinding). Ezért a szűrés a FELOLDOTT CÍMEN történik, nem a néven.
79
+ */
80
+ static isBlockedAddress(address: string): boolean;
81
+ /** Privát / loopback / link-local / reserved / CGNAT IPv4. */
82
+ private static isBlockedIpv4;
83
+ /** Loopback / link-local / unique-local / unspecified IPv6. */
84
+ private static isBlockedIpv6;
85
+ /** URL-normalizálás + protokoll- és credential-ellenőrzés. */
86
+ static assertUrlIsAllowed(rawUrl: string, options?: DyNTS_SafeFetch_Options_Interface): URL;
87
+ /** A host MINDEN feloldott címét ellenőrzi — egyetlen blokkolt cím is elutasít. */
88
+ static assertHostResolvesToPublicAddress(hostname: string, options?: DyNTS_SafeFetch_Options_Interface): Promise<string[]>;
89
+ /** Content-type engedélyezett-e (a paramétereket levágva). */
90
+ static isContentTypeAllowed(contentType: string, options?: DyNTS_SafeFetch_Options_Interface): boolean;
91
+ /**
92
+ * KORLÁTOS letöltés: minden hopon újra-ellenőrzött cél, bounded body, timeout.
93
+ *
94
+ * A body-t soha nem olvassuk korlátlanul: a `maxResponseBytes` fölött a kapcsolatot elvágjuk
95
+ * (a `Content-Length` HIÁNYA nem mentesít — a stream-limit a valódi védelem).
96
+ */
97
+ static fetchMetadata(rawUrl: string, options?: DyNTS_SafeFetch_Options_Interface): Promise<DyNTS_SafeFetch_Result_Interface>;
98
+ /** Egyetlen HTTP-hívás bounded stream-olvasással és timeouttal (az alapértelmezett transport). */
99
+ static request(url: URL, options?: DyNTS_SafeFetch_Options_Interface): Promise<DyNTS_SafeFetch_TransportResult_Interface>;
100
+ }
101
+ //# sourceMappingURL=safe-remote-fetch.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-remote-fetch.util.d.ts","sourceRoot":"","sources":["../../src/_collections/safe-remote-fetch.util.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,250 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DyNTS_SafeRemoteFetch_Util = exports.DyNTS_SafeFetch_Error = exports.DyNTS_SafeFetchReason_Type = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const dns = tslib_1.__importStar(require("dns"));
6
+ const http = tslib_1.__importStar(require("http"));
7
+ const https = tslib_1.__importStar(require("https"));
8
+ const url_1 = require("url");
9
+ /**
10
+ * BFR-FSMED-013 — SSRF-safe, KORLÁTOS remote-metadata kliens.
11
+ *
12
+ * Egy nyilvános felületről érkező URL letöltése a klasszikus SSRF-felület: a szerver a saját
13
+ * hálózati pozíciójából kér le tetszőleges címet. A védelemnek ezért **minden DNS-válaszra és
14
+ * minden redirect-hopra** érvényesnek kell lennie, nem csak az első URL-re — különben egy
15
+ * **DNS-rebinding** vagy egy belső címre mutató redirect átviszi a kérést a privát hálózatba.
16
+ *
17
+ * Amit kikényszerít:
18
+ * - URL-normalizálás, credential-es URL (`user:pass@`) TILTVA;
19
+ * - protokoll-policy (alapból csak `https:`);
20
+ * - **minden** feloldott IP ellenőrzése (privát / loopback / link-local / reserved / CGNAT),
21
+ * IPv4-in-IPv6 és vegyes jelölés kezelésével;
22
+ * - redirect-limit, és **hopokként újra-ellenőrzött** cél;
23
+ * - timeout, maximális válasz-méret (bounded stream — a body sosem olvasható korlátlanul),
24
+ * engedélyezett content-type lista;
25
+ * - stabil `reason` kódok és REDAKTÁLT diagnosztika (a hibába nem kerül credential).
26
+ */
27
+ /** Stabil, gépileg feldolgozható elutasítási okok. */
28
+ var DyNTS_SafeFetchReason_Type;
29
+ (function (DyNTS_SafeFetchReason_Type) {
30
+ DyNTS_SafeFetchReason_Type["invalidUrl"] = "invalid-url";
31
+ DyNTS_SafeFetchReason_Type["credentialsInUrl"] = "credentials-in-url";
32
+ DyNTS_SafeFetchReason_Type["protocolNotAllowed"] = "protocol-not-allowed";
33
+ DyNTS_SafeFetchReason_Type["hostNotResolvable"] = "host-not-resolvable";
34
+ DyNTS_SafeFetchReason_Type["blockedAddress"] = "blocked-address";
35
+ DyNTS_SafeFetchReason_Type["tooManyRedirects"] = "too-many-redirects";
36
+ DyNTS_SafeFetchReason_Type["contentTypeNotAllowed"] = "content-type-not-allowed";
37
+ DyNTS_SafeFetchReason_Type["responseTooLarge"] = "response-too-large";
38
+ DyNTS_SafeFetchReason_Type["timeout"] = "timeout";
39
+ DyNTS_SafeFetchReason_Type["requestFailed"] = "request-failed";
40
+ })(DyNTS_SafeFetchReason_Type || (exports.DyNTS_SafeFetchReason_Type = DyNTS_SafeFetchReason_Type = {}));
41
+ /** Elutasítás — stabil kóddal és redaktált diagnosztikával. */
42
+ class DyNTS_SafeFetch_Error extends Error {
43
+ reason;
44
+ diagnostic;
45
+ constructor(reason, message, diagnostic) {
46
+ super(message);
47
+ this.reason = reason;
48
+ this.diagnostic = diagnostic;
49
+ this.name = 'DyNTS_SafeFetch_Error';
50
+ }
51
+ }
52
+ exports.DyNTS_SafeFetch_Error = DyNTS_SafeFetch_Error;
53
+ class DyNTS_SafeRemoteFetch_Util {
54
+ static defaults = {
55
+ allowedProtocols: ['https:'],
56
+ maxRedirects: 3,
57
+ timeoutMs: 5_000,
58
+ maxResponseBytes: 256 * 1024,
59
+ allowedContentTypes: ['text/html', 'application/json', 'text/plain', 'application/xml', 'text/xml'],
60
+ };
61
+ /**
62
+ * IP-cím blokkolandó-e. IPv4 és IPv6 (a **IPv4-in-IPv6** alakkal együtt: `::ffff:10.0.0.1`).
63
+ *
64
+ * ⚠️ Ez a döntő pont: a hostnév ártalmatlan lehet, miközben egy KÜLSŐ DNS-szerver privát címre
65
+ * oldja fel (DNS-rebinding). Ezért a szűrés a FELOLDOTT CÍMEN történik, nem a néven.
66
+ */
67
+ static isBlockedAddress(address) {
68
+ const value = `${address ?? ''}`.trim().toLowerCase().replace(/^\[|\]$/g, '');
69
+ if (!value.length) {
70
+ return true;
71
+ }
72
+ // IPv4-in-IPv6 (`::ffff:10.0.0.1`) és a `::ffff:0a00:0001` hexa-alak → az IPv4-re vezetjük vissza
73
+ const mappedIpv4 = value.match(/^::ffff:(\d{1,3}(?:\.\d{1,3}){3})$/);
74
+ if (mappedIpv4) {
75
+ return DyNTS_SafeRemoteFetch_Util.isBlockedIpv4(mappedIpv4[1]);
76
+ }
77
+ if (value.includes(':')) {
78
+ return DyNTS_SafeRemoteFetch_Util.isBlockedIpv6(value);
79
+ }
80
+ return DyNTS_SafeRemoteFetch_Util.isBlockedIpv4(value);
81
+ }
82
+ /** Privát / loopback / link-local / reserved / CGNAT IPv4. */
83
+ static isBlockedIpv4(address) {
84
+ const parts = address.split('.').map((p) => Number(p));
85
+ if (parts.length !== 4 || parts.some((n) => !Number.isInteger(n) || n < 0 || n > 255)) {
86
+ return true;
87
+ }
88
+ const [a, b] = parts;
89
+ return a === 0 // "this network"
90
+ || a === 10 // privát
91
+ || a === 127 // loopback
92
+ || (a === 169 && b === 254) // link-local
93
+ || (a === 172 && b >= 16 && b <= 31) // privát
94
+ || (a === 192 && b === 168) // privát
95
+ || (a === 100 && b >= 64 && b <= 127) // CGNAT
96
+ || (a === 192 && b === 0) // IETF protocol assignments / TEST-NET-1
97
+ || a === 198 && (b === 18 || b === 19) // benchmark
98
+ || a >= 224; // multicast + reserved
99
+ }
100
+ /** Loopback / link-local / unique-local / unspecified IPv6. */
101
+ static isBlockedIpv6(address) {
102
+ if (address === '::' || address === '::1') {
103
+ return true;
104
+ }
105
+ return /^fe[89ab]/.test(address) // link-local
106
+ || /^f[cd]/.test(address) // unique-local
107
+ || /^ff/.test(address); // multicast
108
+ }
109
+ /** URL-normalizálás + protokoll- és credential-ellenőrzés. */
110
+ static assertUrlIsAllowed(rawUrl, options) {
111
+ let url;
112
+ try {
113
+ url = new url_1.URL(`${rawUrl}`);
114
+ }
115
+ catch {
116
+ throw new DyNTS_SafeFetch_Error(DyNTS_SafeFetchReason_Type.invalidUrl, 'The URL could not be parsed.');
117
+ }
118
+ // A credential a REDIRECT-en is átöröklődhetne, és a naplóba is beszivárogna — tiltva.
119
+ if (url.username.length || url.password.length) {
120
+ throw new DyNTS_SafeFetch_Error(DyNTS_SafeFetchReason_Type.credentialsInUrl, 'A URL carrying credentials is not allowed.', { host: url.hostname });
121
+ }
122
+ const allowed = options?.allowedProtocols ?? DyNTS_SafeRemoteFetch_Util.defaults.allowedProtocols;
123
+ if (!allowed.includes(url.protocol)) {
124
+ throw new DyNTS_SafeFetch_Error(DyNTS_SafeFetchReason_Type.protocolNotAllowed, `The '${url.protocol}' protocol is not allowed.`, { protocol: url.protocol, allowed: allowed });
125
+ }
126
+ return url;
127
+ }
128
+ /** A host MINDEN feloldott címét ellenőrzi — egyetlen blokkolt cím is elutasít. */
129
+ static async assertHostResolvesToPublicAddress(hostname, options) {
130
+ const resolver = options?.resolve
131
+ ?? (async (host) => {
132
+ const records = await dns.promises.lookup(host, { all: true });
133
+ return records.map((r) => r.address);
134
+ });
135
+ let addresses;
136
+ try {
137
+ addresses = await resolver(hostname);
138
+ }
139
+ catch {
140
+ throw new DyNTS_SafeFetch_Error(DyNTS_SafeFetchReason_Type.hostNotResolvable, 'The host could not be resolved.', { host: hostname });
141
+ }
142
+ if (!addresses?.length) {
143
+ throw new DyNTS_SafeFetch_Error(DyNTS_SafeFetchReason_Type.hostNotResolvable, 'The host resolved to no address.', { host: hostname });
144
+ }
145
+ const blocked = addresses.filter((address) => DyNTS_SafeRemoteFetch_Util.isBlockedAddress(address));
146
+ if (blocked.length) {
147
+ throw new DyNTS_SafeFetch_Error(DyNTS_SafeFetchReason_Type.blockedAddress, 'The host resolves to a non-public address.', { host: hostname, blockedCount: blocked.length });
148
+ }
149
+ return addresses;
150
+ }
151
+ /** Content-type engedélyezett-e (a paramétereket levágva). */
152
+ static isContentTypeAllowed(contentType, options) {
153
+ const allowed = options?.allowedContentTypes
154
+ ?? DyNTS_SafeRemoteFetch_Util.defaults.allowedContentTypes;
155
+ const value = `${contentType ?? ''}`.split(';')[0].trim().toLowerCase();
156
+ return allowed.includes(value);
157
+ }
158
+ /**
159
+ * KORLÁTOS letöltés: minden hopon újra-ellenőrzött cél, bounded body, timeout.
160
+ *
161
+ * A body-t soha nem olvassuk korlátlanul: a `maxResponseBytes` fölött a kapcsolatot elvágjuk
162
+ * (a `Content-Length` HIÁNYA nem mentesít — a stream-limit a valódi védelem).
163
+ */
164
+ static async fetchMetadata(rawUrl, options) {
165
+ const maxRedirects = options?.maxRedirects ?? DyNTS_SafeRemoteFetch_Util.defaults.maxRedirects;
166
+ const transport = options?.transport ?? DyNTS_SafeRemoteFetch_Util.request;
167
+ const redirectChain = [];
168
+ let currentUrl = rawUrl;
169
+ for (let hop = 0; hop <= maxRedirects; hop++) {
170
+ const url = DyNTS_SafeRemoteFetch_Util.assertUrlIsAllowed(currentUrl, options);
171
+ await DyNTS_SafeRemoteFetch_Util.assertHostResolvesToPublicAddress(url.hostname, options);
172
+ redirectChain.push(url.toString());
173
+ const response = await transport(url, options ?? {});
174
+ const location = `${response.headers.location ?? ''}` || undefined;
175
+ if (response.status >= 300 && response.status < 400 && location) {
176
+ // A redirect celja UJRA vegigmegy a teljes ellenorzesen: URL-policy, credential-tiltas ES
177
+ // DNS-feloldas. Ez zarja a "publikus elso hop, privat masodik hop" utat.
178
+ currentUrl = new url_1.URL(location, url).toString();
179
+ continue;
180
+ }
181
+ const contentType = `${response.headers['content-type'] ?? ''}`;
182
+ if (!DyNTS_SafeRemoteFetch_Util.isContentTypeAllowed(contentType, options)) {
183
+ throw new DyNTS_SafeFetch_Error(DyNTS_SafeFetchReason_Type.contentTypeNotAllowed, 'The response content-type is not allowed.', { contentType: contentType.split(';')[0], finalUrl: url.toString() });
184
+ }
185
+ return {
186
+ finalUrl: url.toString(),
187
+ redirectChain: redirectChain,
188
+ status: response.status,
189
+ contentType: contentType,
190
+ bytes: response.bytes,
191
+ body: response.body,
192
+ truncated: response.truncated,
193
+ };
194
+ }
195
+ throw new DyNTS_SafeFetch_Error(DyNTS_SafeFetchReason_Type.tooManyRedirects, 'The redirect limit was exceeded.', { maxRedirects: maxRedirects, hops: redirectChain.length });
196
+ }
197
+ /** Egyetlen HTTP-hívás bounded stream-olvasással és timeouttal (az alapértelmezett transport). */
198
+ static request(url, options) {
199
+ const timeoutMs = options?.timeoutMs ?? DyNTS_SafeRemoteFetch_Util.defaults.timeoutMs;
200
+ const maxBytes = options?.maxResponseBytes ?? DyNTS_SafeRemoteFetch_Util.defaults.maxResponseBytes;
201
+ const lib = url.protocol === 'http:' ? http : https;
202
+ return new Promise((resolve, reject) => {
203
+ const request = lib.request(url, { method: 'GET', timeout: timeoutMs }, (response) => {
204
+ let size = 0;
205
+ let truncated = false;
206
+ const chunks = [];
207
+ response.on('data', (chunk) => {
208
+ size += chunk.length;
209
+ if (size > maxBytes) {
210
+ truncated = true;
211
+ response.destroy();
212
+ return;
213
+ }
214
+ chunks.push(chunk);
215
+ });
216
+ response.on('end', () => {
217
+ resolve({
218
+ status: response.statusCode ?? 0,
219
+ headers: response.headers,
220
+ body: Buffer.concat(chunks).toString('utf8'),
221
+ bytes: size,
222
+ truncated: truncated,
223
+ });
224
+ });
225
+ response.on('close', () => {
226
+ if (truncated) {
227
+ resolve({
228
+ status: response.statusCode ?? 0,
229
+ headers: response.headers,
230
+ body: Buffer.concat(chunks).toString('utf8'),
231
+ bytes: size,
232
+ truncated: true,
233
+ });
234
+ }
235
+ });
236
+ });
237
+ request.on('timeout', () => {
238
+ request.destroy();
239
+ reject(new DyNTS_SafeFetch_Error(DyNTS_SafeFetchReason_Type.timeout, 'The request timed out.'));
240
+ });
241
+ request.on('error', (error) => {
242
+ // A hibaüzenet a HOSTOT tartalmazhatja, credentialt nem (azt már fentebb kizártuk).
243
+ reject(new DyNTS_SafeFetch_Error(DyNTS_SafeFetchReason_Type.requestFailed, 'The request failed.', { host: url.hostname, cause: error.name }));
244
+ });
245
+ request.end();
246
+ });
247
+ }
248
+ }
249
+ exports.DyNTS_SafeRemoteFetch_Util = DyNTS_SafeRemoteFetch_Util;
250
+ //# sourceMappingURL=safe-remote-fetch.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-remote-fetch.util.js","sourceRoot":"","sources":["../../src/_collections/safe-remote-fetch.util.ts"],"names":[],"mappings":"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"}
package/build/index.d.ts CHANGED
@@ -32,6 +32,9 @@ export * from './_collections/signed-url.util';
32
32
  export * from './_collections/client-safe-error.util';
33
33
  export * from './_collections/client-safe-error-response.interface';
34
34
  export * from './_collections/load-shed.util';
35
+ export * from './_collections/secret-redaction.util';
36
+ export * from './_collections/dependency-host-guard.util';
37
+ export * from './_collections/safe-remote-fetch.util';
35
38
  export * from './_services/core/event-loop-diag.service';
36
39
  export * from './_services/core/request-hunter.service';
37
40
  export * from './_services/core/db-stats.service';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA2BA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,qDAAqD,CAAC;AACpE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,0CAA0C,CAAC;AACzD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,sCAAsC,CAAC;AAIrD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,qCAAqC,CAAC;AACpD,cAAc,8BAA8B,CAAC;AAK7C,mEAAmE;AACnE,cAAc,uDAAuD,CAAC;AACtE,cAAc,qDAAqD,CAAC;AACpE,cAAc,wDAAwD,CAAC;AACvE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,wDAAwD,CAAC;AACvE,cAAc,yDAAyD,CAAC;AACxE,cAAc,uDAAuD,CAAC;AACtE,cAAc,8CAA8C,CAAC;AAC7D,cAAc,0DAA0D,CAAC;AACzE,cAAc,4DAA4D,CAAC;AAC3E,cAAc,2DAA2D,CAAC;AAC1E,cAAc,2DAA2D,CAAC;AAC1E,cAAc,iDAAiD,CAAC;AAChE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,2DAA2D,CAAC;AAC1E,cAAc,sCAAsC,CAAC;AACrD,cAAc,wCAAwC,CAAC;AACvD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uCAAuC,CAAC;AACtD,cAAc,qDAAqD,CAAC;AACpE,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0CAA0C,CAAC;AACzD,cAAc,yCAAyC,CAAC;AACxD,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC;AAGrD,cAAc,wDAAwD,CAAC;AACvE,cAAc,gEAAgE,CAAA;AAC9E,cAAc,mDAAmD,CAAC;AAClE,cAAc,4DAA4D,CAAC;AAC3E,cAAc,wDAAwD,CAAC;AACvE,cAAc,sDAAsD,CAAC;AACrE,cAAc,uDAAuD,CAAC;AAGtE,cAAc,gCAAgC,CAAC;AAG/C,cAAc,mDAAmD,CAAC;AAKlE,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAE9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oDAAoD,CAAC;AACnE,cAAc,iCAAiC,CAAC;AAChD,cAAc,uCAAuC,CAAC;AACtD,cAAc,oDAAoD,CAAC;AAEnE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,oDAAoD,CAAC;AAGnE,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC;AACtD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yCAAyC,CAAC;AACxD,cAAc,oCAAoC,CAAC;AAGnD,cAAc,+BAA+B,CAAC;AAG9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,0CAA0C,CAAC;AAGzD,cAAc,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA2BA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,qDAAqD,CAAC;AACpE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,0CAA0C,CAAC;AACzD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,sCAAsC,CAAC;AAIrD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,qCAAqC,CAAC;AACpD,cAAc,8BAA8B,CAAC;AAK7C,mEAAmE;AACnE,cAAc,uDAAuD,CAAC;AACtE,cAAc,qDAAqD,CAAC;AACpE,cAAc,wDAAwD,CAAC;AACvE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,wDAAwD,CAAC;AACvE,cAAc,yDAAyD,CAAC;AACxE,cAAc,uDAAuD,CAAC;AACtE,cAAc,8CAA8C,CAAC;AAC7D,cAAc,0DAA0D,CAAC;AACzE,cAAc,4DAA4D,CAAC;AAC3E,cAAc,2DAA2D,CAAC;AAC1E,cAAc,2DAA2D,CAAC;AAC1E,cAAc,iDAAiD,CAAC;AAChE,cAAc,gDAAgD,CAAC;AAC/D,cAAc,2DAA2D,CAAC;AAC1E,cAAc,sCAAsC,CAAC;AACrD,cAAc,wCAAwC,CAAC;AACvD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uCAAuC,CAAC;AACtD,cAAc,qDAAqD,CAAC;AACpE,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,uCAAuC,CAAC;AACtD,cAAc,0CAA0C,CAAC;AACzD,cAAc,yCAAyC,CAAC;AACxD,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC;AAGrD,cAAc,wDAAwD,CAAC;AACvE,cAAc,gEAAgE,CAAA;AAC9E,cAAc,mDAAmD,CAAC;AAClE,cAAc,4DAA4D,CAAC;AAC3E,cAAc,wDAAwD,CAAC;AACvE,cAAc,sDAAsD,CAAC;AACrE,cAAc,uDAAuD,CAAC;AAGtE,cAAc,gCAAgC,CAAC;AAG/C,cAAc,mDAAmD,CAAC;AAKlE,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAE9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oDAAoD,CAAC;AACnE,cAAc,iCAAiC,CAAC;AAChD,cAAc,uCAAuC,CAAC;AACtD,cAAc,oDAAoD,CAAC;AAEnE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,oDAAoD,CAAC;AAGnE,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC;AACtD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yCAAyC,CAAC;AACxD,cAAc,oCAAoC,CAAC;AAGnD,cAAc,+BAA+B,CAAC;AAG9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,0CAA0C,CAAC;AAGzD,cAAc,mCAAmC,CAAC"}
package/build/index.js CHANGED
@@ -61,6 +61,9 @@ tslib_1.__exportStar(require("./_collections/signed-url.util"), exports);
61
61
  tslib_1.__exportStar(require("./_collections/client-safe-error.util"), exports);
62
62
  tslib_1.__exportStar(require("./_collections/client-safe-error-response.interface"), exports);
63
63
  tslib_1.__exportStar(require("./_collections/load-shed.util"), exports);
64
+ tslib_1.__exportStar(require("./_collections/secret-redaction.util"), exports);
65
+ tslib_1.__exportStar(require("./_collections/dependency-host-guard.util"), exports);
66
+ tslib_1.__exportStar(require("./_collections/safe-remote-fetch.util"), exports);
64
67
  tslib_1.__exportStar(require("./_services/core/event-loop-diag.service"), exports);
65
68
  tslib_1.__exportStar(require("./_services/core/request-hunter.service"), exports);
66
69
  tslib_1.__exportStar(require("./_services/core/db-stats.service"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;IAsBI;;;AAEJ,cAAc;AACd,sEAA4C;AAC5C,8EAAoD;AACpD,wFAA8D;AAC9D,8FAAoE;AACpE,sFAA4D;AAC5D,mFAAyD;AACzD,uFAA6D;AAC7D,+EAAqD;AAGrD,QAAQ;AACR,wEAA8C;AAC9C,8EAAoD;AACpD,8EAAoD;AACpD,uEAA6C;AAG7C,6CAA6C;AAE7C,mEAAmE;AACnE,gGAAsE;AACtE,8FAAoE;AACpE,iGAAuE;AACvE,yFAA+D;AAC/D,iGAAuE;AACvE,kGAAwE;AACxE,gGAAsE;AACtE,uFAA6D;AAC7D,mGAAyE;AACzE,qGAA2E;AAC3E,oGAA0E;AAC1E,oGAA0E;AAC1E,0FAAgE;AAChE,yFAA+D;AAC/D,oGAA0E;AAC1E,+EAAqD;AACrD,iFAAuD;AACvD,yEAA+C;AAC/C,gFAAsD;AACtD,8FAAoE;AACpE,wEAA8C;AAC9C,mFAAyD;AACzD,kFAAwD;AACxD,4EAAkD;AAClD,+EAAqD;AAErD,wBAAwB;AACxB,iGAAuE;AACvE,yGAA8E;AAC9E,4FAAkE;AAClE,qGAA2E;AAC3E,iGAAuE;AACvE,+FAAqE;AACrE,gGAAsE;AAEtE,eAAe;AACf,yEAA+C;AAE/C,qBAAqB;AACrB,4FAAkE;AAGlE,WAAW;AACX,gBAAgB;AAChB,uEAA6C;AAC7C,wEAA8C;AAE9C,yEAA+C;AAC/C,6FAAmE;AACnE,0EAAgD;AAChD,gFAAsD;AACtD,6FAAmE;AAEnE,sFAA4D;AAC5D,oFAA0D;AAC1D,6FAAmE;AAEnE,gBAAgB;AAChB,4EAAkD;AAClD,gFAAsD;AACtD,wEAA8C;AAC9C,sEAA4C;AAC5C,kFAAwD;AACxD,6EAAmD;AAEnD,kBAAkB;AAClB,wEAA8C;AAE9C,iBAAiB;AACjB,+EAAqD;AACrD,mFAAyD;AAEzD,kBAAkB;AAClB,4EAAkD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;IAsBI;;;AAEJ,cAAc;AACd,sEAA4C;AAC5C,8EAAoD;AACpD,wFAA8D;AAC9D,8FAAoE;AACpE,sFAA4D;AAC5D,mFAAyD;AACzD,uFAA6D;AAC7D,+EAAqD;AAGrD,QAAQ;AACR,wEAA8C;AAC9C,8EAAoD;AACpD,8EAAoD;AACpD,uEAA6C;AAG7C,6CAA6C;AAE7C,mEAAmE;AACnE,gGAAsE;AACtE,8FAAoE;AACpE,iGAAuE;AACvE,yFAA+D;AAC/D,iGAAuE;AACvE,kGAAwE;AACxE,gGAAsE;AACtE,uFAA6D;AAC7D,mGAAyE;AACzE,qGAA2E;AAC3E,oGAA0E;AAC1E,oGAA0E;AAC1E,0FAAgE;AAChE,yFAA+D;AAC/D,oGAA0E;AAC1E,+EAAqD;AACrD,iFAAuD;AACvD,yEAA+C;AAC/C,gFAAsD;AACtD,8FAAoE;AACpE,wEAA8C;AAC9C,+EAAqD;AACrD,oFAA0D;AAC1D,gFAAsD;AACtD,mFAAyD;AACzD,kFAAwD;AACxD,4EAAkD;AAClD,+EAAqD;AAErD,wBAAwB;AACxB,iGAAuE;AACvE,yGAA8E;AAC9E,4FAAkE;AAClE,qGAA2E;AAC3E,iGAAuE;AACvE,+FAAqE;AACrE,gGAAsE;AAEtE,eAAe;AACf,yEAA+C;AAE/C,qBAAqB;AACrB,4FAAkE;AAGlE,WAAW;AACX,gBAAgB;AAChB,uEAA6C;AAC7C,wEAA8C;AAE9C,yEAA+C;AAC/C,6FAAmE;AACnE,0EAAgD;AAChD,gFAAsD;AACtD,6FAAmE;AAEnE,sFAA4D;AAC5D,oFAA0D;AAC1D,6FAAmE;AAEnE,gBAAgB;AAChB,4EAAkD;AAClD,gFAAsD;AACtD,wEAA8C;AAC9C,sEAA4C;AAC5C,kFAAwD;AACxD,6EAAmD;AAEnD,kBAAkB;AAClB,wEAA8C;AAE9C,iBAAiB;AACjB,+EAAqD;AACrD,mFAAyD;AAEzD,kBAAkB;AAClB,4EAAkD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@futdevpro/nts-dynamo",
3
- "version": "01.15.195",
3
+ "version": "01.15.196",
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",