@futdevpro/fsm-dynamo 1.15.13 → 1.15.15

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,71 @@
1
+ import { DyFM_AnyError } from '../../_models/control-models/error.control-model';
2
+ /**
3
+ * Options for `DyFM_extractErrorMessage`.
4
+ */
5
+ export interface DyFM_ExtractErrorMessage_Options {
6
+ /**
7
+ * Optional prefix prepended to the result with ': '. e.g. `prefix: 'Login'`
8
+ * → `'Login: <message>'`. Useful for distinguishing the UI surface.
9
+ */
10
+ prefix?: string;
11
+ /**
12
+ * Fallback string when no usable message can be extracted. Defaults to
13
+ * a human-readable diagnostic that mentions checking server logs.
14
+ */
15
+ fallback?: string;
16
+ /**
17
+ * When `true`, the returned string includes HTTP status + statusText after
18
+ * the main message (in parens) for HTTP errors. Default: `true`.
19
+ */
20
+ includeHttpStatus?: boolean;
21
+ }
22
+ /**
23
+ * Universal error → human-readable string extractor. **Never** returns the
24
+ * literal string `'undefined'` (or `'undefined undefined'`), `'[object Object]'`,
25
+ * or any other JS-rendering artifact. Walks the full DyFM_Error pipeline plus
26
+ * common Angular HttpErrorResponse + plain Error shapes, falling back to a
27
+ * meaningful diagnostic string when the input is malformed.
28
+ *
29
+ * Order of attempts (first non-empty wins):
30
+ * 1. `err.__userMessage` (DyFM_Error admin-actionable user message)
31
+ * 2. `err._message` (DyFM_Error aggregated debug message)
32
+ * 3. `err.message` (plain Error.message)
33
+ * 4. `err.userMessage` (deprecated DyFM_Error_Settings field, still seen
34
+ * on some payloads)
35
+ * 5. `err.error.__userMessage` (HttpErrorResponse wrapping a DyFM_Error in
36
+ * its body)
37
+ * 6. `err.error._message`
38
+ * 7. `err.error.message`
39
+ * 8. `err.error.userMessage`
40
+ * 9. If `err` itself is a string, use as-is
41
+ * 10. JSON-stringified payload (circular-safe; first 200 chars) as a last
42
+ * resort, prefixed with 'Malformed error: '
43
+ * 11. `options.fallback` (or its default)
44
+ *
45
+ * When `includeHttpStatus` is true (default) and the input looks like a
46
+ * HttpErrorResponse, the status + statusText are appended in parens: e.g.
47
+ * `'Bad credentials (HTTP 401 Unauthorized)'`.
48
+ *
49
+ * @example
50
+ * ```ts
51
+ * try {
52
+ * await auth_CS.login(account);
53
+ * } catch (err) {
54
+ * this.formError = DyFM_extractErrorMessage(err, { prefix: 'Login' });
55
+ * // → 'Login: Bad credentials (HTTP 401 Unauthorized)'
56
+ * // OR
57
+ * // → 'Login: Network unreachable — check connection. Server logs may have detail.'
58
+ * // never 'Login: undefined undefined'
59
+ * }
60
+ * ```
61
+ */
62
+ export declare function DyFM_extractErrorMessage(err: DyFM_AnyError | unknown, options?: DyFM_ExtractErrorMessage_Options): string;
63
+ /**
64
+ * Convenience: same as DyFM_extractErrorMessage but always includes a default
65
+ * prefix derived from the calling context, useful for adding diagnostic
66
+ * breadcrumbs without per-call boilerplate.
67
+ */
68
+ export declare function DyFM_formatError(err: DyFM_AnyError | unknown, prefix: string): string;
69
+ export declare function DyFM_registerMalformedErrorSink(fn: (err: unknown, context?: string) => void): void;
70
+ export declare function DyFM_reportMalformedError(err: unknown, context?: string): void;
71
+ //# sourceMappingURL=extract-error-message.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-error-message.util.d.ts","sourceRoot":"","sources":["../../../src/_collections/utils/extract-error-message.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAc,MAAM,kDAAkD,CAAC;AAG7F;;GAEG;AACH,MAAM,WAAW,gCAAgC;IAC/C;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAGD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,aAAa,GAAG,OAAO,EAC5B,OAAO,CAAC,EAAE,gCAAgC,GACzC,MAAM,CA2DR;AAqCD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,aAAa,GAAG,OAAO,EAC5B,MAAM,EAAE,MAAM,GACb,MAAM,CAER;AAiBD,wBAAgB,+BAA+B,CAC7C,EAAE,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,GAC3C,IAAI,CAEN;AAED,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,OAAO,EACZ,OAAO,CAAC,EAAE,MAAM,GACf,IAAI,CAoBN"}
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DyFM_extractErrorMessage = DyFM_extractErrorMessage;
4
+ exports.DyFM_formatError = DyFM_formatError;
5
+ exports.DyFM_registerMalformedErrorSink = DyFM_registerMalformedErrorSink;
6
+ exports.DyFM_reportMalformedError = DyFM_reportMalformedError;
7
+ /**
8
+ * Universal error → human-readable string extractor. **Never** returns the
9
+ * literal string `'undefined'` (or `'undefined undefined'`), `'[object Object]'`,
10
+ * or any other JS-rendering artifact. Walks the full DyFM_Error pipeline plus
11
+ * common Angular HttpErrorResponse + plain Error shapes, falling back to a
12
+ * meaningful diagnostic string when the input is malformed.
13
+ *
14
+ * Order of attempts (first non-empty wins):
15
+ * 1. `err.__userMessage` (DyFM_Error admin-actionable user message)
16
+ * 2. `err._message` (DyFM_Error aggregated debug message)
17
+ * 3. `err.message` (plain Error.message)
18
+ * 4. `err.userMessage` (deprecated DyFM_Error_Settings field, still seen
19
+ * on some payloads)
20
+ * 5. `err.error.__userMessage` (HttpErrorResponse wrapping a DyFM_Error in
21
+ * its body)
22
+ * 6. `err.error._message`
23
+ * 7. `err.error.message`
24
+ * 8. `err.error.userMessage`
25
+ * 9. If `err` itself is a string, use as-is
26
+ * 10. JSON-stringified payload (circular-safe; first 200 chars) as a last
27
+ * resort, prefixed with 'Malformed error: '
28
+ * 11. `options.fallback` (or its default)
29
+ *
30
+ * When `includeHttpStatus` is true (default) and the input looks like a
31
+ * HttpErrorResponse, the status + statusText are appended in parens: e.g.
32
+ * `'Bad credentials (HTTP 401 Unauthorized)'`.
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * try {
37
+ * await auth_CS.login(account);
38
+ * } catch (err) {
39
+ * this.formError = DyFM_extractErrorMessage(err, { prefix: 'Login' });
40
+ * // → 'Login: Bad credentials (HTTP 401 Unauthorized)'
41
+ * // OR
42
+ * // → 'Login: Network unreachable — check connection. Server logs may have detail.'
43
+ * // never 'Login: undefined undefined'
44
+ * }
45
+ * ```
46
+ */
47
+ function DyFM_extractErrorMessage(err, options) {
48
+ const includeHttpStatus = options?.includeHttpStatus !== false;
49
+ const fallback = options?.fallback
50
+ ?? 'Unexpected error (no detail in payload — check server logs).';
51
+ const prefix = options?.prefix ? `${options.prefix}: ` : '';
52
+ // Null/undefined/empty
53
+ if (err === null || err === undefined) {
54
+ return `${prefix}${fallback}`;
55
+ }
56
+ // String → use as-is
57
+ if (typeof err === 'string') {
58
+ return `${prefix}${err}`;
59
+ }
60
+ // Walk the candidate fields in order. Cast to any to access optional
61
+ // properties without forcing each branch into a separate type guard.
62
+ const e = err;
63
+ const innerError = e?.error;
64
+ const candidate = _nonEmptyString(e?.__userMessage)
65
+ ?? _nonEmptyString(e?._message)
66
+ ?? _nonEmptyString(e?.message)
67
+ ?? _nonEmptyString(e?.userMessage)
68
+ ?? _nonEmptyString(innerError?.__userMessage)
69
+ ?? _nonEmptyString(innerError?._message)
70
+ ?? _nonEmptyString(innerError?.message)
71
+ ?? _nonEmptyString(innerError?.userMessage);
72
+ // HTTP status suffix (always-on by default)
73
+ const status = e?.___status
74
+ ?? e?.status
75
+ ?? innerError?.___status
76
+ ?? innerError?.status;
77
+ const statusText = _nonEmptyString(e?.statusText)
78
+ ?? _nonEmptyString(innerError?.statusText);
79
+ const httpSuffix = (includeHttpStatus && (status !== undefined || statusText !== undefined))
80
+ ? ` (HTTP ${status ?? '?'}${statusText ? ' ' + statusText : ''})`
81
+ : '';
82
+ if (candidate !== undefined) {
83
+ return `${prefix}${candidate}${httpSuffix}`;
84
+ }
85
+ // No usable text field. Try a JSON-stringify of the raw payload (circular-safe).
86
+ const jsonAttempt = _safeJsonStringify(err);
87
+ if (jsonAttempt !== undefined && jsonAttempt !== '{}' && jsonAttempt !== '[]') {
88
+ const trimmed = jsonAttempt.length > 200
89
+ ? jsonAttempt.slice(0, 200) + '…'
90
+ : jsonAttempt;
91
+ return `${prefix}Malformed error: ${trimmed}${httpSuffix}`;
92
+ }
93
+ // Total fallback.
94
+ return `${prefix}${fallback}${httpSuffix}`;
95
+ }
96
+ /**
97
+ * Returns the value if it's a non-empty string, else undefined.
98
+ * Trims and treats whitespace-only as empty. Internal helper.
99
+ */
100
+ function _nonEmptyString(v) {
101
+ if (typeof v !== 'string') {
102
+ return undefined;
103
+ }
104
+ const trimmed = v.trim();
105
+ return trimmed.length > 0 ? trimmed : undefined;
106
+ }
107
+ /**
108
+ * JSON.stringify wrapper that survives circular references + non-serializable
109
+ * values. Returns undefined if even the safe fallback fails (e.g. a Proxy
110
+ * whose getter throws).
111
+ */
112
+ function _safeJsonStringify(v) {
113
+ try {
114
+ const seen = new WeakSet();
115
+ return JSON.stringify(v, (_key, value) => {
116
+ if (typeof value === 'object' && value !== null) {
117
+ if (seen.has(value)) {
118
+ return '[Circular]';
119
+ }
120
+ seen.add(value);
121
+ }
122
+ if (typeof value === 'function') {
123
+ return '[Function]';
124
+ }
125
+ if (typeof value === 'undefined') {
126
+ return '[undefined]';
127
+ }
128
+ return value;
129
+ });
130
+ }
131
+ catch {
132
+ try {
133
+ return String(v);
134
+ }
135
+ catch {
136
+ return undefined;
137
+ }
138
+ }
139
+ }
140
+ /**
141
+ * Convenience: same as DyFM_extractErrorMessage but always includes a default
142
+ * prefix derived from the calling context, useful for adding diagnostic
143
+ * breadcrumbs without per-call boilerplate.
144
+ */
145
+ function DyFM_formatError(err, prefix) {
146
+ return DyFM_extractErrorMessage(err, { prefix: prefix });
147
+ }
148
+ /**
149
+ * Reports a raw error payload via the universal client-error capture system
150
+ * (FR-029-style). Implementation is delegated to a consumer-registered
151
+ * handler so dynamo-fsm stays Angular-agnostic; if no handler is registered
152
+ * the error is logged via `DyFM_Log.error` (which is the default no-op-safe
153
+ * sink). Consumers (e.g. A_ErrorHandler_ControlService) call
154
+ * `DyFM_registerMalformedErrorSink(fn)` once at bootstrap.
155
+ *
156
+ * The intent: when DyFM_extractErrorMessage falls back to 'Malformed error:'
157
+ * or the generic fallback, the raw payload should also be captured for
158
+ * post-mortem analysis (server error-log via FR-029 pipeline).
159
+ */
160
+ let _malformedErrorSink;
161
+ function DyFM_registerMalformedErrorSink(fn) {
162
+ _malformedErrorSink = fn;
163
+ }
164
+ function DyFM_reportMalformedError(err, context) {
165
+ if (_malformedErrorSink !== undefined) {
166
+ try {
167
+ _malformedErrorSink(err, context);
168
+ return;
169
+ }
170
+ catch {
171
+ /* sink threw — fall through to default */
172
+ }
173
+ }
174
+ // Default: best-effort console.error wrapped in DyFM_Error for stack capture.
175
+ try {
176
+ // Lazy require to avoid a hard cycle through error.control-model -> log.util.
177
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
178
+ const { DyFM_Log } = require('./log.util');
179
+ DyFM_Log.error(`[DyFM_reportMalformedError] ${context ?? 'unknown context'}`, err);
180
+ }
181
+ catch {
182
+ // Last-ditch — should never happen since log.util has no further deps.
183
+ /* swallow */
184
+ }
185
+ }
186
+ //# sourceMappingURL=extract-error-message.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-error-message.util.js","sourceRoot":"","sources":["../../../src/_collections/utils/extract-error-message.util.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Options for `DyFM_requireEnv`. See the helper's JSDoc for usage.
3
+ */
4
+ export interface DyFM_RequireEnv_Options {
5
+ /**
6
+ * Stable error code emitted on the DyFM_Error when the env-var is missing
7
+ * and no fallback is configured. Convention: `<PACKAGE>-ENV-MISSING-<KEY>`,
8
+ * e.g. `DyNM-ENV-MISSING-STORAGE-KEY`, `FDP-ENV-MISSING-AUTH-KEY`.
9
+ */
10
+ errorCode: string;
11
+ /**
12
+ * Short-code name of the package responsible for the env-var. Used as the
13
+ * DyFM_Error `___issuerService` for downstream filtering / dashboards.
14
+ */
15
+ issuerService: string;
16
+ /**
17
+ * Transition fallback. When set, returned if BOTH `process.env[name]` AND
18
+ * `DyFM_global_settings.envOverrides[name]` are missing.
19
+ *
20
+ * Use only during the additive phase of an env-var migration to keep the
21
+ * package backward-compatible while every deploy target rolls the new
22
+ * env-var out. Remove the `fallback` argument once the rollout is verified
23
+ * everywhere — then a missing env-var fail-fast crashes the consumer at
24
+ * first access with a structured DyFM_Error.
25
+ */
26
+ fallback?: string;
27
+ /**
28
+ * Admin-actionable user-facing message attached to the DyFM_Error. Defaults
29
+ * to a generic config-missing string referencing the env-var name.
30
+ */
31
+ userMessage?: string;
32
+ }
33
+ /**
34
+ * FR-015 Phase 2 — isomorphic env-var requirement helper.
35
+ *
36
+ * Universal source of truth for "read this configuration key from an env-var
37
+ * across Node and browser". Replaces per-package `requireEnv` helpers (the
38
+ * Phase 1 local implementation in fdp-templates-nts is being refactored to
39
+ * delegate here).
40
+ *
41
+ * Lookup order:
42
+ * 1. `process.env[envVarName]` — Node-side (server const files at module load).
43
+ * 2. `DyFM_global_settings.envOverrides[envVarName]` — browser-side, populated
44
+ * by the consumer at app bootstrap from its `environment.ts`. See
45
+ * DyFM_Global_Settings.envOverrides docs for the pattern.
46
+ * 3. `options.fallback` if provided — used during migration's additive phase.
47
+ * 4. throw a structured DyFM_Error with the full deploy-target checklist.
48
+ *
49
+ * The throw shape is rich on purpose (per the rich-error rule):
50
+ * - `___status` = 500 (configuration error)
51
+ * - `_errorCode` = caller-supplied stable code
52
+ * - `_message` = debug-level description with the env-var name + deploy-target
53
+ * checklist (host .env, docker-compose env-block, Overseer secrets-store,
54
+ * client environment.ts → bootstrap envOverrides)
55
+ * - `__userMessage` = admin-actionable message
56
+ * - `___issuerService` = caller-supplied package short-code
57
+ *
58
+ * @example Node server const file (module load):
59
+ * ```ts
60
+ * import { DyFM_requireEnv } from '@futdevpro/fsm-dynamo';
61
+ *
62
+ * export const FDP_keysEnv_settingsBase = {
63
+ * authKey: DyFM_requireEnv('FDP_AUTH_KEY', {
64
+ * errorCode: 'FDP-ENV-MISSING-AUTH-KEY',
65
+ * issuerService: 'fdp-templates',
66
+ * fallback: '<inherit literal>', // remove for Wave 3
67
+ * }),
68
+ * };
69
+ * ```
70
+ *
71
+ * @example Browser-side lazy getter (deferred to first access, after consumer
72
+ * bootstrap has populated DyFM_global_settings.envOverrides):
73
+ * ```ts
74
+ * let _cached: string | undefined;
75
+ * function _resolveKey(): string {
76
+ * if (_cached !== undefined) return _cached;
77
+ * _cached = DyFM_requireEnv('DyNM_STORAGE_ENCRYPTION_KEY', { ... });
78
+ * return _cached;
79
+ * }
80
+ * export const DyNM_global_settings = {
81
+ * get storageEncryptionKey(): string { return _resolveKey(); },
82
+ * };
83
+ * ```
84
+ */
85
+ export declare function DyFM_requireEnv(envVarName: string, options: DyFM_RequireEnv_Options): string;
86
+ //# sourceMappingURL=require-env.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"require-env.util.d.ts","sourceRoot":"","sources":["../../../src/_collections/utils/require-env.util.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAGD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,uBAAuB,GAC/B,MAAM,CAyCR"}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DyFM_requireEnv = DyFM_requireEnv;
4
+ const error_control_model_1 = require("../../_models/control-models/error.control-model");
5
+ const global_settings_const_1 = require("../constants/global-settings.const");
6
+ /**
7
+ * FR-015 Phase 2 — isomorphic env-var requirement helper.
8
+ *
9
+ * Universal source of truth for "read this configuration key from an env-var
10
+ * across Node and browser". Replaces per-package `requireEnv` helpers (the
11
+ * Phase 1 local implementation in fdp-templates-nts is being refactored to
12
+ * delegate here).
13
+ *
14
+ * Lookup order:
15
+ * 1. `process.env[envVarName]` — Node-side (server const files at module load).
16
+ * 2. `DyFM_global_settings.envOverrides[envVarName]` — browser-side, populated
17
+ * by the consumer at app bootstrap from its `environment.ts`. See
18
+ * DyFM_Global_Settings.envOverrides docs for the pattern.
19
+ * 3. `options.fallback` if provided — used during migration's additive phase.
20
+ * 4. throw a structured DyFM_Error with the full deploy-target checklist.
21
+ *
22
+ * The throw shape is rich on purpose (per the rich-error rule):
23
+ * - `___status` = 500 (configuration error)
24
+ * - `_errorCode` = caller-supplied stable code
25
+ * - `_message` = debug-level description with the env-var name + deploy-target
26
+ * checklist (host .env, docker-compose env-block, Overseer secrets-store,
27
+ * client environment.ts → bootstrap envOverrides)
28
+ * - `__userMessage` = admin-actionable message
29
+ * - `___issuerService` = caller-supplied package short-code
30
+ *
31
+ * @example Node server const file (module load):
32
+ * ```ts
33
+ * import { DyFM_requireEnv } from '@futdevpro/fsm-dynamo';
34
+ *
35
+ * export const FDP_keysEnv_settingsBase = {
36
+ * authKey: DyFM_requireEnv('FDP_AUTH_KEY', {
37
+ * errorCode: 'FDP-ENV-MISSING-AUTH-KEY',
38
+ * issuerService: 'fdp-templates',
39
+ * fallback: '<inherit literal>', // remove for Wave 3
40
+ * }),
41
+ * };
42
+ * ```
43
+ *
44
+ * @example Browser-side lazy getter (deferred to first access, after consumer
45
+ * bootstrap has populated DyFM_global_settings.envOverrides):
46
+ * ```ts
47
+ * let _cached: string | undefined;
48
+ * function _resolveKey(): string {
49
+ * if (_cached !== undefined) return _cached;
50
+ * _cached = DyFM_requireEnv('DyNM_STORAGE_ENCRYPTION_KEY', { ... });
51
+ * return _cached;
52
+ * }
53
+ * export const DyNM_global_settings = {
54
+ * get storageEncryptionKey(): string { return _resolveKey(); },
55
+ * };
56
+ * ```
57
+ */
58
+ function DyFM_requireEnv(envVarName, options) {
59
+ // Node path: process.env at module-load time. Guarded for browser bundles
60
+ // where `process` may be undefined or shimmed without runtime values.
61
+ if (typeof process !== 'undefined' && process.env && process.env[envVarName]) {
62
+ return process.env[envVarName];
63
+ }
64
+ // Browser path: consumer-populated envOverrides map. Populated at app
65
+ // bootstrap from environment.ts — see DyFM_Global_Settings.envOverrides.
66
+ const override = global_settings_const_1.DyFM_global_settings.envOverrides?.[envVarName];
67
+ if (override) {
68
+ return override;
69
+ }
70
+ // Transition fallback (Wave 1 of an FR-015-style migration).
71
+ if (options.fallback !== undefined) {
72
+ return options.fallback;
73
+ }
74
+ // Missing — fail fast with a rich, debug-friendly DyFM_Error.
75
+ throw new error_control_model_1.DyFM_Error({
76
+ status: 500,
77
+ errorCode: options.errorCode,
78
+ message: `Environment variable '${envVarName}' is required but was not found. ` +
79
+ `Checked: process.env.${envVarName} (Node) and ` +
80
+ `DyFM_global_settings.envOverrides['${envVarName}'] (browser). ` +
81
+ `Both unset, and no transition fallback configured. ` +
82
+ `Set '${envVarName}' on every deploy target before deploying this ` +
83
+ `package version: (1) host .env on every host running a backend, ` +
84
+ `(2) docker-compose env-block on every consumer service, ` +
85
+ `(3) Overseer secrets-store entry for CI builds, ` +
86
+ `(4) client environment.ts plus app-bootstrap copy into ` +
87
+ `DyFM_global_settings.envOverrides for any browser consumer.`,
88
+ userMessage: options.userMessage
89
+ ?? `Configuration error — environment variable '${envVarName}' is missing. `
90
+ + `Contact the responsible operator to set it on this deploy target.`,
91
+ issuerService: options.issuerService,
92
+ });
93
+ }
94
+ //# sourceMappingURL=require-env.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"require-env.util.js","sourceRoot":"","sources":["../../../src/_collections/utils/require-env.util.ts"],"names":[],"mappings":";;AA6FA,0CA4CC;AAzID,0FAA8E;AAC9E,8EAA0E;AAwC1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,SAAgB,eAAe,CAC7B,UAAkB,EAClB,OAAgC;IAEhC,0EAA0E;IAC1E,sEAAsE;IACtE,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7E,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAW,CAAC;IAC3C,CAAC;IAED,sEAAsE;IACtE,yEAAyE;IACzE,MAAM,QAAQ,GACZ,4CAAoB,CAAC,YAAY,EAAE,CAAC,UAAU,CAAC,CAAC;IAClD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,6DAA6D;IAC7D,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,OAAO,CAAC,QAAQ,CAAC;IAC1B,CAAC;IAED,8DAA8D;IAC9D,MAAM,IAAI,gCAAU,CAAC;QACnB,MAAM,EAAE,GAAG;QACX,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,OAAO,EACL,yBAAyB,UAAU,mCAAmC;YACtE,wBAAwB,UAAU,cAAc;YAChD,sCAAsC,UAAU,gBAAgB;YAChE,qDAAqD;YACrD,QAAQ,UAAU,iDAAiD;YACnE,kEAAkE;YAClE,0DAA0D;YAC1D,kDAAkD;YAClD,yDAAyD;YACzD,6DAA6D;QAC/D,WAAW,EACT,OAAO,CAAC,WAAW;eAChB,+CAA+C,UAAU,gBAAgB;kBACvE,mEAAmE;QAC1E,aAAa,EAAE,OAAO,CAAC,aAAa;KACrC,CAAC,CAAC;AACL,CAAC"}
@@ -17,5 +17,27 @@ export interface DyFM_Global_Settings {
17
17
  * this setting will set which logs will be shown
18
18
  */
19
19
  log_settings: DyFM_GlobalLog_Settings;
20
+ /**
21
+ * FR-015 Phase 2 — isomorphic env-var overrides surface.
22
+ *
23
+ * On Node, `DyFM_requireEnv(name, ...)` reads `process.env[name]` directly.
24
+ * On browser there is no `process.env` at runtime, so consumers populate
25
+ * this map at app bootstrap from `environment.ts`:
26
+ *
27
+ * ```ts
28
+ * import { DyFM_global_settings } from '@futdevpro/fsm-dynamo';
29
+ * import { environment } from './environments/environment';
30
+ *
31
+ * DyFM_global_settings.envOverrides = {
32
+ * FDP_AUTH_KEY: environment.authKey,
33
+ * FDP_EXTRA_AUTH_STORAGE_KEY: environment.extraAuthStorageKey,
34
+ * DyNM_STORAGE_ENCRYPTION_KEY: environment.storageEncryptionKey,
35
+ * };
36
+ * ```
37
+ *
38
+ * `DyFM_requireEnv` checks `process.env` first, then this map, then
39
+ * the caller's optional `fallback`, then throws a structured DyFM_Error.
40
+ */
41
+ envOverrides?: Record<string, string>;
20
42
  }
21
43
  //# sourceMappingURL=global-settings.interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"global-settings.interface.d.ts","sourceRoot":"","sources":["../../../../src/_models/interfaces/environment/global-settings.interface.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAE1E;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,YAAY,EAAE,uBAAuB,CAAC;CACvC"}
1
+ {"version":3,"file":"global-settings.interface.d.ts","sourceRoot":"","sources":["../../../../src/_models/interfaces/environment/global-settings.interface.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAE1E;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,YAAY,EAAE,uBAAuB,CAAC;IAEtC;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC"}
package/build/index.d.ts CHANGED
@@ -6,10 +6,12 @@ export * from './_collections/constants/times.const';
6
6
  export * from './_collections/utils/array.util';
7
7
  export * from './_collections/utils/async.util';
8
8
  export * from './_collections/utils/data.util';
9
+ export * from './_collections/utils/extract-error-message.util';
9
10
  export * from './_collections/utils/json-error-helper.util';
10
11
  export * from './_collections/utils/log.util';
11
12
  export * from './_collections/utils/round-list.util';
12
13
  export * from './_collections/utils/object.util';
14
+ export * from './_collections/utils/require-env.util';
13
15
  export * from './_collections/utils/stack.util';
14
16
  export * from './_collections/utils/string.util';
15
17
  export * from './_collections/utils/string-case.util';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AAGrD,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6CAA6C,CAAC;AAC5D,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iDAAiD,CAAC;AAChE,cAAc,qCAAqC,CAAC;AACpD,cAAc,gCAAgC,CAAC;AAG/C,cAAc,2CAA2C,CAAC;AAC1D,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AACtD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,wCAAwC,CAAC;AAGvD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,uCAAuC,CAAC;AACtD,cAAc,gDAAgD,CAAC;AAI/D,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,wCAAwC,CAAC;AAGvD,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,uCAAuC,CAAC;AAGtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AAKjD,cAAc,0DAA0D,CAAC;AACzE,cAAc,6DAA6D,CAAC;AAC5E,cAAc,8CAA8C,CAAC;AAC7D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,oDAAoD,CAAC;AACnE,cAAc,sDAAsD,CAAC;AACrE,cAAc,uEAAuE,CAAC;AAGtF,cAAc,iEAAiE,CAAC;AAChF,cAAc,0DAA0D,CAAC;AACzE,cAAc,wDAAwD,CAAC;AAGvE,cAAc,yCAAyC,CAAC;AACxD,cAAc,2CAA2C,CAAC;AAG1D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,sCAAsC,CAAC;AACrD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,wDAAwD,CAAC;AACvE,cAAc,wCAAwC,CAAC;AAGvD,cAAc,gEAAgE,CAAC;AAC/E,cAAc,4DAA4D,CAAC;AAG3E,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AAGrD,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iDAAiD,CAAC;AAChE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iDAAiD,CAAC;AAChE,cAAc,qCAAqC,CAAC;AACpD,cAAc,gCAAgC,CAAC;AAG/C,cAAc,2CAA2C,CAAC;AAC1D,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AACtD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,wCAAwC,CAAC;AAGvD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,uCAAuC,CAAC;AACtD,cAAc,gDAAgD,CAAC;AAI/D,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,wCAAwC,CAAC;AAGvD,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,uCAAuC,CAAC;AAGtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AAKjD,cAAc,0DAA0D,CAAC;AACzE,cAAc,6DAA6D,CAAC;AAC5E,cAAc,8CAA8C,CAAC;AAC7D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,oDAAoD,CAAC;AACnE,cAAc,sDAAsD,CAAC;AACrE,cAAc,uEAAuE,CAAC;AAGtF,cAAc,iEAAiE,CAAC;AAChF,cAAc,0DAA0D,CAAC;AACzE,cAAc,wDAAwD,CAAC;AAGvE,cAAc,yCAAyC,CAAC;AACxD,cAAc,2CAA2C,CAAC;AAG1D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,sCAAsC,CAAC;AACrD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,wDAAwD,CAAC;AACvE,cAAc,wCAAwC,CAAC;AAGvD,cAAc,gEAAgE,CAAC;AAC/E,cAAc,4DAA4D,CAAC;AAG3E,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC"}
package/build/index.js CHANGED
@@ -12,10 +12,12 @@ tslib_1.__exportStar(require("./_collections/constants/times.const"), exports);
12
12
  tslib_1.__exportStar(require("./_collections/utils/array.util"), exports);
13
13
  tslib_1.__exportStar(require("./_collections/utils/async.util"), exports);
14
14
  tslib_1.__exportStar(require("./_collections/utils/data.util"), exports);
15
+ tslib_1.__exportStar(require("./_collections/utils/extract-error-message.util"), exports);
15
16
  tslib_1.__exportStar(require("./_collections/utils/json-error-helper.util"), exports);
16
17
  tslib_1.__exportStar(require("./_collections/utils/log.util"), exports);
17
18
  tslib_1.__exportStar(require("./_collections/utils/round-list.util"), exports);
18
19
  tslib_1.__exportStar(require("./_collections/utils/object.util"), exports);
20
+ tslib_1.__exportStar(require("./_collections/utils/require-env.util"), exports);
19
21
  tslib_1.__exportStar(require("./_collections/utils/stack.util"), exports);
20
22
  tslib_1.__exportStar(require("./_collections/utils/string.util"), exports);
21
23
  tslib_1.__exportStar(require("./_collections/utils/string-case.util"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,cAAc;AACd,wBAAwB;AACxB,oFAA0D;AAC1D,wFAA8D;AAC9D,yFAA+D;AAC/D,iFAAuD;AACvD,+EAAqD;AAErD,oBAAoB;AACpB,0EAAgD;AAChD,0EAAgD;AAChD,yEAA+C;AAC/C,sFAA4D;AAC5D,wEAA8C;AAC9C,+EAAqD;AACrD,2EAAiD;AACjD,0EAAgD;AAChD,2EAAiD;AACjD,gFAAsD;AACtD,yEAA+C;AAC/C,0FAAgE;AAChE,8EAAoD;AACpD,yEAA+C;AAE/C,yBAAyB;AACzB,oFAA0D;AAC1D,8EAAoD;AACpD,gFAAsD;AACtD,sFAA4D;AAC5D,iFAAuD;AAEvD,2BAA2B;AAC3B,yFAA+D;AAC/D,gFAAsD;AACtD,yFAA+D;AAG/D,QAAQ;AACR,4EAAkD;AAClD,wEAA8C;AAC9C,yEAA+C;AAC/C,oEAA0C;AAC1C,kEAAwC;AACxC,iFAAuD;AAEvD,aAAa;AACb,4EAAkD;AAClD,6EAAmD;AACnD,gFAAsD;AAEtD,aAAa;AACb,yEAA+C;AAC/C,mEAAyC;AACzC,2EAAiD;AAGjD,SAAS;AACT,wBAAwB;AACxB,mGAAyE;AACzE,sGAA4E;AAC5E,uFAA6D;AAC7D,sFAA4D;AAC5D,6FAAmE;AACnE,+FAAqE;AACrE,gHAAsF;AAEtF,6BAA6B;AAC7B,0GAAgF;AAChF,mGAAyE;AACzE,iGAAuE;AAEvE,qBAAqB;AACrB,kFAAwD;AACxD,oFAA0D;AAE1D,oBAAoB;AACpB,oFAA0D;AAC1D,wFAA8D;AAC9D,+EAAqD;AACrD,uFAA6D;AAC7D,wFAA8D;AAC9D,sFAA4D;AAC5D,uFAA6D;AAC7D,iGAAuE;AACvE,iFAAuD;AAEvD,gCAAgC;AAChC,yGAA+E;AAC/E,qGAA2E;AAE3E,eAAe;AACf,yEAA+C;AAC/C,uEAA6C;AAC7C,yEAA+C;AAC/C,uEAA6C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,cAAc;AACd,wBAAwB;AACxB,oFAA0D;AAC1D,wFAA8D;AAC9D,yFAA+D;AAC/D,iFAAuD;AACvD,+EAAqD;AAErD,oBAAoB;AACpB,0EAAgD;AAChD,0EAAgD;AAChD,yEAA+C;AAC/C,0FAAgE;AAChE,sFAA4D;AAC5D,wEAA8C;AAC9C,+EAAqD;AACrD,2EAAiD;AACjD,gFAAsD;AACtD,0EAAgD;AAChD,2EAAiD;AACjD,gFAAsD;AACtD,yEAA+C;AAC/C,0FAAgE;AAChE,8EAAoD;AACpD,yEAA+C;AAE/C,yBAAyB;AACzB,oFAA0D;AAC1D,8EAAoD;AACpD,gFAAsD;AACtD,sFAA4D;AAC5D,iFAAuD;AAEvD,2BAA2B;AAC3B,yFAA+D;AAC/D,gFAAsD;AACtD,yFAA+D;AAG/D,QAAQ;AACR,4EAAkD;AAClD,wEAA8C;AAC9C,yEAA+C;AAC/C,oEAA0C;AAC1C,kEAAwC;AACxC,iFAAuD;AAEvD,aAAa;AACb,4EAAkD;AAClD,6EAAmD;AACnD,gFAAsD;AAEtD,aAAa;AACb,yEAA+C;AAC/C,mEAAyC;AACzC,2EAAiD;AAGjD,SAAS;AACT,wBAAwB;AACxB,mGAAyE;AACzE,sGAA4E;AAC5E,uFAA6D;AAC7D,sFAA4D;AAC5D,6FAAmE;AACnE,+FAAqE;AACrE,gHAAsF;AAEtF,6BAA6B;AAC7B,0GAAgF;AAChF,mGAAyE;AACzE,iGAAuE;AAEvE,qBAAqB;AACrB,kFAAwD;AACxD,oFAA0D;AAE1D,oBAAoB;AACpB,oFAA0D;AAC1D,wFAA8D;AAC9D,+EAAqD;AACrD,uFAA6D;AAC7D,wFAA8D;AAC9D,sFAA4D;AAC5D,uFAA6D;AAC7D,iGAAuE;AACvE,iFAAuD;AAEvD,gCAAgC;AAChC,yGAA+E;AAC/E,qGAA2E;AAE3E,eAAe;AACf,yEAA+C;AAC/C,uEAA6C;AAC7C,yEAA+C;AAC/C,uEAA6C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@futdevpro/fsm-dynamo",
3
- "version": "01.15.13",
3
+ "version": "01.15.15",
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",
@@ -256,7 +256,7 @@
256
256
  "uuid": "11.1.0"
257
257
  },
258
258
  "devDependencies": {
259
- "@futdevpro/dynamo-eslint": "1.15.9",
259
+ "@futdevpro/dynamo-eslint": "1.15.10",
260
260
  "@types/jasmine": "~4.3.5",
261
261
  "@typescript-eslint/eslint-plugin": "^8.41.0",
262
262
  "@typescript-eslint/parser": "^8.41.0",