@lenne.tech/nest-server 11.31.2 → 11.32.0
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/.claude/rules/architecture.md +2 -0
- package/.claude/rules/configurable-features.md +2 -0
- package/.claude/rules/versioning.md +5 -8
- package/CLAUDE.md +31 -4
- package/FRAMEWORK-API.md +7 -2
- package/README.md +1 -0
- package/dist/config.env.d.ts +4 -0
- package/dist/config.env.js +32 -2
- package/dist/config.env.js.map +1 -1
- package/dist/core/common/helpers/logging.helper.d.ts +1 -0
- package/dist/core/common/helpers/logging.helper.js +12 -0
- package/dist/core/common/helpers/logging.helper.js.map +1 -1
- package/dist/core/common/helpers/meta.helper.d.ts +1 -0
- package/dist/core/common/helpers/meta.helper.js +32 -1
- package/dist/core/common/helpers/meta.helper.js.map +1 -1
- package/dist/core/common/helpers/process-diagnostics.helper.d.ts +18 -0
- package/dist/core/common/helpers/process-diagnostics.helper.js +88 -0
- package/dist/core/common/helpers/process-diagnostics.helper.js.map +1 -0
- package/dist/core/common/interfaces/server-options.interface.d.ts +12 -0
- package/dist/core/common/services/brevo.service.d.ts +7 -1
- package/dist/core/common/services/brevo.service.js +37 -16
- package/dist/core/common/services/brevo.service.js.map +1 -1
- package/dist/core/common/services/email.service.d.ts +3 -1
- package/dist/core/common/services/email.service.js +33 -2
- package/dist/core/common/services/email.service.js.map +1 -1
- package/dist/core/common/services/template.service.js +9 -4
- package/dist/core/common/services/template.service.js.map +1 -1
- package/dist/core/modules/better-auth/core-better-auth-email-verification.service.js +9 -4
- package/dist/core/modules/better-auth/core-better-auth-email-verification.service.js.map +1 -1
- package/dist/core/modules/hub/core-hub-actions.controller.d.ts +22 -0
- package/dist/core/modules/hub/core-hub-actions.controller.js +141 -0
- package/dist/core/modules/hub/core-hub-actions.controller.js.map +1 -0
- package/dist/core/modules/hub/core-hub-html.service.d.ts +8 -0
- package/dist/core/modules/hub/core-hub-html.service.js +123 -0
- package/dist/core/modules/hub/core-hub-html.service.js.map +1 -0
- package/dist/core/modules/hub/core-hub.controller.d.ts +56 -0
- package/dist/core/modules/hub/core-hub.controller.js +398 -0
- package/dist/core/modules/hub/core-hub.controller.js.map +1 -0
- package/dist/core/modules/hub/core-hub.module.d.ts +17 -0
- package/dist/core/modules/hub/core-hub.module.js +109 -0
- package/dist/core/modules/hub/core-hub.module.js.map +1 -0
- package/dist/core/modules/hub/core-hub.service.d.ts +18 -0
- package/dist/core/modules/hub/core-hub.service.js +153 -0
- package/dist/core/modules/hub/core-hub.service.js.map +1 -0
- package/dist/core/modules/hub/helpers/hub-client-js.helper.d.ts +1 -0
- package/dist/core/modules/hub/helpers/hub-client-js.helper.js +755 -0
- package/dist/core/modules/hub/helpers/hub-client-js.helper.js.map +1 -0
- package/dist/core/modules/hub/helpers/hub-command-shape.helper.d.ts +1 -0
- package/dist/core/modules/hub/helpers/hub-command-shape.helper.js +33 -0
- package/dist/core/modules/hub/helpers/hub-command-shape.helper.js.map +1 -0
- package/dist/core/modules/hub/helpers/hub-mask.helper.d.ts +1 -0
- package/dist/core/modules/hub/helpers/hub-mask.helper.js +46 -0
- package/dist/core/modules/hub/helpers/hub-mask.helper.js.map +1 -0
- package/dist/core/modules/hub/helpers/hub-mermaid.helper.d.ts +10 -0
- package/dist/core/modules/hub/helpers/hub-mermaid.helper.js +35 -0
- package/dist/core/modules/hub/helpers/hub-mermaid.helper.js.map +1 -0
- package/dist/core/modules/hub/helpers/hub-shell.helper.d.ts +9 -0
- package/dist/core/modules/hub/helpers/hub-shell.helper.js +62 -0
- package/dist/core/modules/hub/helpers/hub-shell.helper.js.map +1 -0
- package/dist/core/modules/hub/hub-action-messages.d.ts +17 -0
- package/dist/core/modules/hub/hub-action-messages.js +21 -0
- package/dist/core/modules/hub/hub-action-messages.js.map +1 -0
- package/dist/core/modules/hub/hub-config.helper.d.ts +11 -0
- package/dist/core/modules/hub/hub-config.helper.js +164 -0
- package/dist/core/modules/hub/hub-config.helper.js.map +1 -0
- package/dist/core/modules/hub/hub-nav.d.ts +12 -0
- package/dist/core/modules/hub/hub-nav.js +43 -0
- package/dist/core/modules/hub/hub-nav.js.map +1 -0
- package/dist/core/modules/hub/hub-ring-buffer.d.ts +22 -0
- package/dist/core/modules/hub/hub-ring-buffer.js +59 -0
- package/dist/core/modules/hub/hub-ring-buffer.js.map +1 -0
- package/dist/core/modules/hub/hub.constants.d.ts +18 -0
- package/dist/core/modules/hub/hub.constants.js +22 -0
- package/dist/core/modules/hub/hub.constants.js.map +1 -0
- package/dist/core/modules/hub/index.d.ts +25 -0
- package/dist/core/modules/hub/index.js +42 -0
- package/dist/core/modules/hub/index.js.map +1 -0
- package/dist/core/modules/hub/interfaces/hub-config.interface.d.ts +115 -0
- package/dist/core/modules/hub/interfaces/hub-config.interface.js +3 -0
- package/dist/core/modules/hub/interfaces/hub-config.interface.js.map +1 -0
- package/dist/core/modules/hub/interfaces/hub-panels.interface.d.ts +231 -0
- package/dist/core/modules/hub/interfaces/hub-panels.interface.js +3 -0
- package/dist/core/modules/hub/interfaces/hub-panels.interface.js.map +1 -0
- package/dist/core/modules/hub/middleware/hub-trace.middleware.d.ts +8 -0
- package/dist/core/modules/hub/middleware/hub-trace.middleware.js +50 -0
- package/dist/core/modules/hub/middleware/hub-trace.middleware.js.map +1 -0
- package/dist/core/modules/hub/services/core-hub-actions.service.d.ts +48 -0
- package/dist/core/modules/hub/services/core-hub-actions.service.js +136 -0
- package/dist/core/modules/hub/services/core-hub-actions.service.js.map +1 -0
- package/dist/core/modules/hub/services/core-hub-db.service.d.ts +19 -0
- package/dist/core/modules/hub/services/core-hub-db.service.js +180 -0
- package/dist/core/modules/hub/services/core-hub-db.service.js.map +1 -0
- package/dist/core/modules/hub/services/core-hub-email.service.d.ts +24 -0
- package/dist/core/modules/hub/services/core-hub-email.service.js +148 -0
- package/dist/core/modules/hub/services/core-hub-email.service.js.map +1 -0
- package/dist/core/modules/hub/services/core-hub-mailbox.service.d.ts +20 -0
- package/dist/core/modules/hub/services/core-hub-mailbox.service.js +103 -0
- package/dist/core/modules/hub/services/core-hub-mailbox.service.js.map +1 -0
- package/dist/core/modules/hub/services/core-hub-migrations.service.d.ts +25 -0
- package/dist/core/modules/hub/services/core-hub-migrations.service.js +115 -0
- package/dist/core/modules/hub/services/core-hub-migrations.service.js.map +1 -0
- package/dist/core/modules/hub/services/core-hub-sources.service.d.ts +28 -0
- package/dist/core/modules/hub/services/core-hub-sources.service.js +187 -0
- package/dist/core/modules/hub/services/core-hub-sources.service.js.map +1 -0
- package/dist/core/modules/hub/services/hub-log-buffer.service.d.ts +24 -0
- package/dist/core/modules/hub/services/hub-log-buffer.service.js +210 -0
- package/dist/core/modules/hub/services/hub-log-buffer.service.js.map +1 -0
- package/dist/core/modules/hub/services/hub-query-profiler.service.d.ts +38 -0
- package/dist/core/modules/hub/services/hub-query-profiler.service.js +235 -0
- package/dist/core/modules/hub/services/hub-query-profiler.service.js.map +1 -0
- package/dist/core/modules/hub/services/hub-trace-buffer.service.d.ts +18 -0
- package/dist/core/modules/hub/services/hub-trace-buffer.service.js +123 -0
- package/dist/core/modules/hub/services/hub-trace-buffer.service.js.map +1 -0
- package/dist/core.module.js +42 -1
- package/dist/core.module.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/main.js +5 -2
- package/dist/main.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/docs/REQUEST-LIFECYCLE.md +2 -0
- package/docs/brevo-manual-test.md +166 -0
- package/docs/security-overrides.md +90 -0
- package/migration-guides/11.31.2-to-11.31.3.md +135 -0
- package/migration-guides/11.31.3-to-11.32.0.md +254 -0
- package/package.json +16 -14
- package/src/config.env.ts +75 -2
- package/src/core/common/helpers/logging.helper.spec.ts +61 -0
- package/src/core/common/helpers/logging.helper.ts +48 -0
- package/src/core/common/helpers/meta.helper.ts +46 -1
- package/src/core/common/helpers/process-diagnostics.helper.spec.ts +310 -0
- package/src/core/common/helpers/process-diagnostics.helper.ts +321 -0
- package/src/core/common/interfaces/server-options.interface.ts +78 -0
- package/src/core/common/services/brevo.service.spec.ts +266 -0
- package/src/core/common/services/brevo.service.ts +100 -17
- package/src/core/common/services/email.service.ts +33 -1
- package/src/core/common/services/template.service.ts +21 -16
- package/src/core/modules/better-auth/core-better-auth-email-verification.service.ts +14 -4
- package/src/core/modules/hub/INTEGRATION-CHECKLIST.md +64 -0
- package/src/core/modules/hub/README.md +159 -0
- package/src/core/modules/hub/core-hub-actions.controller.ts +137 -0
- package/src/core/modules/hub/core-hub-html.service.ts +135 -0
- package/src/core/modules/hub/core-hub.controller.ts +286 -0
- package/src/core/modules/hub/core-hub.module.spec.ts +108 -0
- package/src/core/modules/hub/core-hub.module.ts +159 -0
- package/src/core/modules/hub/core-hub.service.ts +169 -0
- package/src/core/modules/hub/helpers/hub-client-js.helper.ts +768 -0
- package/src/core/modules/hub/helpers/hub-command-shape.helper.spec.ts +48 -0
- package/src/core/modules/hub/helpers/hub-command-shape.helper.ts +47 -0
- package/src/core/modules/hub/helpers/hub-mask.helper.spec.ts +67 -0
- package/src/core/modules/hub/helpers/hub-mask.helper.ts +78 -0
- package/src/core/modules/hub/helpers/hub-mermaid.helper.spec.ts +54 -0
- package/src/core/modules/hub/helpers/hub-mermaid.helper.ts +62 -0
- package/src/core/modules/hub/helpers/hub-shell.helper.spec.ts +106 -0
- package/src/core/modules/hub/helpers/hub-shell.helper.ts +90 -0
- package/src/core/modules/hub/hub-action-messages.ts +47 -0
- package/src/core/modules/hub/hub-config.helper.spec.ts +108 -0
- package/src/core/modules/hub/hub-config.helper.ts +233 -0
- package/src/core/modules/hub/hub-nav.ts +66 -0
- package/src/core/modules/hub/hub-ring-buffer.spec.ts +95 -0
- package/src/core/modules/hub/hub-ring-buffer.ts +101 -0
- package/src/core/modules/hub/hub.constants.ts +84 -0
- package/src/core/modules/hub/index.ts +25 -0
- package/src/core/modules/hub/interfaces/hub-config.interface.ts +265 -0
- package/src/core/modules/hub/interfaces/hub-panels.interface.ts +186 -0
- package/src/core/modules/hub/middleware/hub-trace.middleware.ts +45 -0
- package/src/core/modules/hub/services/core-hub-actions.service.ts +133 -0
- package/src/core/modules/hub/services/core-hub-db.service.ts +185 -0
- package/src/core/modules/hub/services/core-hub-email.service.ts +158 -0
- package/src/core/modules/hub/services/core-hub-mailbox.service.spec.ts +116 -0
- package/src/core/modules/hub/services/core-hub-mailbox.service.ts +121 -0
- package/src/core/modules/hub/services/core-hub-migrations.service.ts +112 -0
- package/src/core/modules/hub/services/core-hub-sources.service.ts +194 -0
- package/src/core/modules/hub/services/hub-log-buffer.service.ts +252 -0
- package/src/core/modules/hub/services/hub-query-profiler.service.ts +274 -0
- package/src/core/modules/hub/services/hub-trace-buffer.service.spec.ts +112 -0
- package/src/core/modules/hub/services/hub-trace-buffer.service.ts +134 -0
- package/src/core.module.ts +61 -1
- package/src/index.ts +7 -0
- package/src/main.ts +22 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hub-client-js.helper.js","sourceRoot":"","sources":["../../../../../src/core/modules/hub/helpers/hub-client-js.helper.ts"],"names":[],"mappings":";;AAiBA,wCA8uBC;AA9uBD,SAAgB,cAAc;IAC5B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4uBR,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function normalizeCommandShape(value: unknown, depth?: number): unknown;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeCommandShape = normalizeCommandShape;
|
|
4
|
+
const MAX_DEPTH = 5;
|
|
5
|
+
const MAX_KEYS = 32;
|
|
6
|
+
const MAX_ARRAY_ITEMS = 8;
|
|
7
|
+
const DEPTH_SENTINEL = '…';
|
|
8
|
+
const PLACEHOLDER = '?';
|
|
9
|
+
function normalizeCommandShape(value, depth = 0) {
|
|
10
|
+
if (depth >= MAX_DEPTH) {
|
|
11
|
+
return DEPTH_SENTINEL;
|
|
12
|
+
}
|
|
13
|
+
if (Array.isArray(value)) {
|
|
14
|
+
if (value.length > 0 && typeof value[0] === 'object' && value[0] !== null) {
|
|
15
|
+
return value.slice(0, MAX_ARRAY_ITEMS).map((item) => normalizeCommandShape(item, depth + 1));
|
|
16
|
+
}
|
|
17
|
+
return [PLACEHOLDER];
|
|
18
|
+
}
|
|
19
|
+
if (value !== null && typeof value === 'object') {
|
|
20
|
+
const out = {};
|
|
21
|
+
let count = 0;
|
|
22
|
+
for (const key of Object.keys(value)) {
|
|
23
|
+
if (++count > MAX_KEYS) {
|
|
24
|
+
out[DEPTH_SENTINEL] = DEPTH_SENTINEL;
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
out[key] = normalizeCommandShape(value[key], depth + 1);
|
|
28
|
+
}
|
|
29
|
+
return out;
|
|
30
|
+
}
|
|
31
|
+
return PLACEHOLDER;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=hub-command-shape.helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hub-command-shape.helper.js","sourceRoot":"","sources":["../../../../../src/core/modules/hub/helpers/hub-command-shape.helper.ts"],"names":[],"mappings":";;AAmBA,sDA2BC;AAjCD,MAAM,SAAS,GAAG,CAAC,CAAC;AACpB,MAAM,QAAQ,GAAG,EAAE,CAAC;AACpB,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB,SAAgB,qBAAqB,CAAC,KAAc,EAAE,KAAK,GAAG,CAAC;IAC7D,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;QACvB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAEzB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC1E,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/F,CAAC;QACD,OAAO,CAAC,WAAW,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAgC,CAAC,EAAE,CAAC;YAChE,IAAI,EAAE,KAAK,GAAG,QAAQ,EAAE,CAAC;gBACvB,GAAG,CAAC,cAAc,CAAC,GAAG,cAAc,CAAC;gBACrC,MAAM;YACR,CAAC;YACD,GAAG,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAE,KAAiC,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACvF,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function maskConfigDeep<T>(value: T, extraSecretKeys?: string[]): T;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.maskConfigDeep = maskConfigDeep;
|
|
4
|
+
const SECRET_KEY_PATTERN = /secret|passwd|password|passphrase|credential|api[-_]?key|access[-_]?token|refresh[-_]?token|private[-_]?key|encryption|\btoken\b|\bpass\b|(^|[^a-z])key([^a-z]|$)/i;
|
|
5
|
+
const URI_CREDENTIAL_PATTERN = /^([a-z][a-z0-9+.-]*:\/\/[^/@:\s]+:)([^@/\s]+)(@)/i;
|
|
6
|
+
const MASK = '***';
|
|
7
|
+
function maskConfigDeep(value, extraSecretKeys = []) {
|
|
8
|
+
const extra = new Set(extraSecretKeys.map((k) => k.toLowerCase()));
|
|
9
|
+
return maskValue(value, false, extra);
|
|
10
|
+
}
|
|
11
|
+
function isSecretKey(key, extra) {
|
|
12
|
+
return extra.has(key.toLowerCase()) || SECRET_KEY_PATTERN.test(key);
|
|
13
|
+
}
|
|
14
|
+
function maskString(value) {
|
|
15
|
+
const uriMatch = value.match(URI_CREDENTIAL_PATTERN);
|
|
16
|
+
if (uriMatch) {
|
|
17
|
+
return value.replace(URI_CREDENTIAL_PATTERN, `$1${MASK}$3`);
|
|
18
|
+
}
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
function maskValue(value, keyIsSecret, extra) {
|
|
22
|
+
if (value === null || value === undefined) {
|
|
23
|
+
return value;
|
|
24
|
+
}
|
|
25
|
+
if (typeof value !== 'object') {
|
|
26
|
+
if (keyIsSecret) {
|
|
27
|
+
return MASK;
|
|
28
|
+
}
|
|
29
|
+
return typeof value === 'string' ? maskString(value) : value;
|
|
30
|
+
}
|
|
31
|
+
if (keyIsSecret) {
|
|
32
|
+
return MASK;
|
|
33
|
+
}
|
|
34
|
+
if (value instanceof Date || Buffer.isBuffer(value)) {
|
|
35
|
+
return value;
|
|
36
|
+
}
|
|
37
|
+
if (Array.isArray(value)) {
|
|
38
|
+
return value.map((item) => maskValue(item, false, extra));
|
|
39
|
+
}
|
|
40
|
+
const out = {};
|
|
41
|
+
for (const [key, val] of Object.entries(value)) {
|
|
42
|
+
out[key] = maskValue(val, isSecretKey(key, extra), extra);
|
|
43
|
+
}
|
|
44
|
+
return out;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=hub-mask.helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hub-mask.helper.js","sourceRoot":"","sources":["../../../../../src/core/modules/hub/helpers/hub-mask.helper.ts"],"names":[],"mappings":";;AA2BA,wCAGC;AArBD,MAAM,kBAAkB,GACtB,oKAAoK,CAAC;AAGvK,MAAM,sBAAsB,GAAG,mDAAmD,CAAC;AAEnF,MAAM,IAAI,GAAG,KAAK,CAAC;AAYnB,SAAgB,cAAc,CAAI,KAAQ,EAAE,kBAA4B,EAAE;IACxE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACnE,OAAO,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAM,CAAC;AAC7C,CAAC;AAED,SAAS,WAAW,CAAC,GAAW,EAAE,KAAkB;IAClD,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACrD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,KAAK,CAAC,OAAO,CAAC,sBAAsB,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CAAC,KAAc,EAAE,WAAoB,EAAE,KAAkB;IACzE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IAGD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/D,CAAC;IAGD,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAID,IAAI,KAAK,YAAY,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;QAC1E,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildErDiagram = buildErDiagram;
|
|
4
|
+
function sanitizeIdentifier(value) {
|
|
5
|
+
const cleaned = String(value ?? '').replace(/[^A-Za-z0-9_]/g, '_');
|
|
6
|
+
return /^[A-Za-z_]/.test(cleaned) ? cleaned : `_${cleaned}`;
|
|
7
|
+
}
|
|
8
|
+
function buildErDiagram(models) {
|
|
9
|
+
if (!models || models.length === 0) {
|
|
10
|
+
return 'erDiagram';
|
|
11
|
+
}
|
|
12
|
+
const present = new Set(models.map((m) => m.name));
|
|
13
|
+
const lines = ['erDiagram'];
|
|
14
|
+
for (const model of models) {
|
|
15
|
+
const entity = sanitizeIdentifier(model.name);
|
|
16
|
+
lines.push(` ${entity} {`);
|
|
17
|
+
for (const field of model.fields) {
|
|
18
|
+
const type = sanitizeIdentifier(field.type || 'Mixed');
|
|
19
|
+
const name = sanitizeIdentifier(field.name);
|
|
20
|
+
lines.push(` ${type} ${name}`);
|
|
21
|
+
}
|
|
22
|
+
lines.push(' }');
|
|
23
|
+
}
|
|
24
|
+
for (const model of models) {
|
|
25
|
+
const from = sanitizeIdentifier(model.name);
|
|
26
|
+
for (const field of model.fields) {
|
|
27
|
+
if (field.ref && present.has(field.ref)) {
|
|
28
|
+
const to = sanitizeIdentifier(field.ref);
|
|
29
|
+
lines.push(` ${from} ||--o{ ${to} : ${sanitizeIdentifier(field.name)}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return lines.join('\n');
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=hub-mermaid.helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hub-mermaid.helper.js","sourceRoot":"","sources":["../../../../../src/core/modules/hub/helpers/hub-mermaid.helper.ts"],"names":[],"mappings":";;AA+BA,wCA8BC;AAvCD,SAAS,kBAAkB,CAAC,KAAa;IACvC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;IACnE,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;AAC9D,CAAC;AAMD,SAAgB,cAAc,CAAC,MAA4B;IACzD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,MAAM,KAAK,GAAa,CAAC,WAAW,CAAC,CAAC;IAEtC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC;QAC5B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC;YACvD,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;QACpC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjC,IAAI,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxC,MAAM,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACzC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const HUB_NONCE_PLACEHOLDER = "__CSP_NONCE__";
|
|
2
|
+
export declare function escapeHtml(value: string): string;
|
|
3
|
+
export declare function escapeJsString(value: string): string;
|
|
4
|
+
export declare function generateNonce(): string;
|
|
5
|
+
export declare function injectNonce(html: string, nonce: string): string;
|
|
6
|
+
export declare function buildHubCsp(nonce: string): string;
|
|
7
|
+
export declare function buildHubSecurityHeaders(nonce: string, opts?: {
|
|
8
|
+
cacheable?: boolean;
|
|
9
|
+
}): Record<string, string>;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HUB_NONCE_PLACEHOLDER = void 0;
|
|
4
|
+
exports.escapeHtml = escapeHtml;
|
|
5
|
+
exports.escapeJsString = escapeJsString;
|
|
6
|
+
exports.generateNonce = generateNonce;
|
|
7
|
+
exports.injectNonce = injectNonce;
|
|
8
|
+
exports.buildHubCsp = buildHubCsp;
|
|
9
|
+
exports.buildHubSecurityHeaders = buildHubSecurityHeaders;
|
|
10
|
+
const crypto_1 = require("crypto");
|
|
11
|
+
exports.HUB_NONCE_PLACEHOLDER = '__CSP_NONCE__';
|
|
12
|
+
const LINE_SEPARATOR = String.fromCharCode(0x2028);
|
|
13
|
+
const PARAGRAPH_SEPARATOR = String.fromCharCode(0x2029);
|
|
14
|
+
function escapeHtml(value) {
|
|
15
|
+
return String(value ?? '')
|
|
16
|
+
.replace(/&/g, '&')
|
|
17
|
+
.replace(/</g, '<')
|
|
18
|
+
.replace(/>/g, '>')
|
|
19
|
+
.replace(/"/g, '"')
|
|
20
|
+
.replace(/'/g, ''');
|
|
21
|
+
}
|
|
22
|
+
function escapeJsString(value) {
|
|
23
|
+
return String(value ?? '')
|
|
24
|
+
.replace(/\\/g, '\\\\')
|
|
25
|
+
.replace(/'/g, "\\'")
|
|
26
|
+
.replace(/</g, '\\u003c')
|
|
27
|
+
.replace(/\r/g, '\\r')
|
|
28
|
+
.replace(/\n/g, '\\n')
|
|
29
|
+
.split(LINE_SEPARATOR)
|
|
30
|
+
.join('\\u2028')
|
|
31
|
+
.split(PARAGRAPH_SEPARATOR)
|
|
32
|
+
.join('\\u2029');
|
|
33
|
+
}
|
|
34
|
+
function generateNonce() {
|
|
35
|
+
return (0, crypto_1.randomBytes)(16).toString('base64');
|
|
36
|
+
}
|
|
37
|
+
function injectNonce(html, nonce) {
|
|
38
|
+
return html.split(exports.HUB_NONCE_PLACEHOLDER).join(nonce);
|
|
39
|
+
}
|
|
40
|
+
function buildHubCsp(nonce) {
|
|
41
|
+
return [
|
|
42
|
+
"default-src 'none'",
|
|
43
|
+
`script-src 'nonce-${nonce}' 'self'`,
|
|
44
|
+
`style-src 'nonce-${nonce}'`,
|
|
45
|
+
"img-src 'self' data:",
|
|
46
|
+
"connect-src 'self'",
|
|
47
|
+
"frame-src 'self'",
|
|
48
|
+
"frame-ancestors 'none'",
|
|
49
|
+
"base-uri 'none'",
|
|
50
|
+
"form-action 'self'",
|
|
51
|
+
].join('; ');
|
|
52
|
+
}
|
|
53
|
+
function buildHubSecurityHeaders(nonce, opts) {
|
|
54
|
+
return {
|
|
55
|
+
'Cache-Control': opts?.cacheable ? 'private, max-age=86400, immutable' : 'no-store',
|
|
56
|
+
'Content-Security-Policy': buildHubCsp(nonce),
|
|
57
|
+
'Referrer-Policy': 'no-referrer',
|
|
58
|
+
'X-Content-Type-Options': 'nosniff',
|
|
59
|
+
'X-Frame-Options': 'DENY',
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=hub-shell.helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hub-shell.helper.js","sourceRoot":"","sources":["../../../../../src/core/modules/hub/helpers/hub-shell.helper.ts"],"names":[],"mappings":";;;AAiBA,gCAOC;AAQD,wCAWC;AAGD,sCAEC;AAGD,kCAEC;AAOD,kCAYC;AASD,0DAQC;AAzFD,mCAAqC;AASxB,QAAA,qBAAqB,GAAG,eAAe,CAAC;AAIrD,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AACnD,MAAM,mBAAmB,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAGxD,SAAgB,UAAU,CAAC,KAAa;IACtC,OAAO,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5B,CAAC;AAQD,SAAgB,cAAc,CAAC,KAAa;IAC1C,OAAO,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;SACvB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC;SACxB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,KAAK,CAAC,cAAc,CAAC;SACrB,IAAI,CAAC,SAAS,CAAC;SACf,KAAK,CAAC,mBAAmB,CAAC;SAC1B,IAAI,CAAC,SAAS,CAAC,CAAC;AACrB,CAAC;AAGD,SAAgB,aAAa;IAC3B,OAAO,IAAA,oBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAGD,SAAgB,WAAW,CAAC,IAAY,EAAE,KAAa;IACrD,OAAO,IAAI,CAAC,KAAK,CAAC,6BAAqB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvD,CAAC;AAOD,SAAgB,WAAW,CAAC,KAAa;IACvC,OAAO;QACL,oBAAoB;QACpB,qBAAqB,KAAK,UAAU;QACpC,oBAAoB,KAAK,GAAG;QAC5B,sBAAsB;QACtB,oBAAoB;QACpB,kBAAkB;QAClB,wBAAwB;QACxB,iBAAiB;QACjB,oBAAoB;KACrB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AASD,SAAgB,uBAAuB,CAAC,KAAa,EAAE,IAA8B;IACnF,OAAO;QACL,eAAe,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,UAAU;QACnF,yBAAyB,EAAE,WAAW,CAAC,KAAK,CAAC;QAC7C,iBAAiB,EAAE,aAAa;QAChC,wBAAwB,EAAE,SAAS;QACnC,iBAAiB,EAAE,MAAM;KAC1B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare const HubActionMessage: {
|
|
2
|
+
readonly actionFailed: "Action failed.";
|
|
3
|
+
readonly confirmationFilenameMismatch: "Confirmation filename does not match.";
|
|
4
|
+
readonly confirmationFilenameRequired: "Confirmation filename required.";
|
|
5
|
+
readonly emailServiceUnavailable: "EmailService is not available.";
|
|
6
|
+
readonly fileNotFound: "File not found.";
|
|
7
|
+
readonly invalidFileId: "Invalid file id.";
|
|
8
|
+
readonly migrationsDisabled: "The migrations panel is disabled.";
|
|
9
|
+
readonly missingHubRequestHeader: "Missing X-Hub-Request header.";
|
|
10
|
+
readonly mongoUnavailable: "No MongoDB connection is available.";
|
|
11
|
+
readonly mongoUriMissing: "No MongoDB URI is configured.";
|
|
12
|
+
readonly recipientRequired: "Recipient (to) required.";
|
|
13
|
+
readonly unknownCollector: "Unknown collector.";
|
|
14
|
+
readonly unknownCronAction: "Unknown cron action.";
|
|
15
|
+
readonly confirmationKeywordMismatch: (expected: string) => string;
|
|
16
|
+
readonly unknownEmailTemplate: (name: string) => string;
|
|
17
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HubActionMessage = void 0;
|
|
4
|
+
exports.HubActionMessage = {
|
|
5
|
+
actionFailed: 'Action failed.',
|
|
6
|
+
confirmationFilenameMismatch: 'Confirmation filename does not match.',
|
|
7
|
+
confirmationFilenameRequired: 'Confirmation filename required.',
|
|
8
|
+
emailServiceUnavailable: 'EmailService is not available.',
|
|
9
|
+
fileNotFound: 'File not found.',
|
|
10
|
+
invalidFileId: 'Invalid file id.',
|
|
11
|
+
migrationsDisabled: 'The migrations panel is disabled.',
|
|
12
|
+
missingHubRequestHeader: 'Missing X-Hub-Request header.',
|
|
13
|
+
mongoUnavailable: 'No MongoDB connection is available.',
|
|
14
|
+
mongoUriMissing: 'No MongoDB URI is configured.',
|
|
15
|
+
recipientRequired: 'Recipient (to) required.',
|
|
16
|
+
unknownCollector: 'Unknown collector.',
|
|
17
|
+
unknownCronAction: 'Unknown cron action.',
|
|
18
|
+
confirmationKeywordMismatch: (expected) => `Confirmation keyword mismatch (expected "${expected}").`,
|
|
19
|
+
unknownEmailTemplate: (name) => `Unknown email template "${name}".`,
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=hub-action-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hub-action-messages.js","sourceRoot":"","sources":["../../../../src/core/modules/hub/hub-action-messages.ts"],"names":[],"mappings":";;;AAca,QAAA,gBAAgB,GAAG;IAE9B,YAAY,EAAE,gBAAgB;IAE9B,4BAA4B,EAAE,uCAAuC;IAErE,4BAA4B,EAAE,iCAAiC;IAE/D,uBAAuB,EAAE,gCAAgC;IAEzD,YAAY,EAAE,iBAAiB;IAE/B,aAAa,EAAE,kBAAkB;IAEjC,kBAAkB,EAAE,mCAAmC;IAEvD,uBAAuB,EAAE,+BAA+B;IAExD,gBAAgB,EAAE,qCAAqC;IAEvD,eAAe,EAAE,+BAA+B;IAEhD,iBAAiB,EAAE,0BAA0B;IAE7C,gBAAgB,EAAE,oBAAoB;IAEtC,iBAAiB,EAAE,sBAAsB;IAGzC,2BAA2B,EAAE,CAAC,QAAgB,EAAU,EAAE,CAAC,4CAA4C,QAAQ,KAAK;IAEpH,oBAAoB,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,2BAA2B,IAAI,IAAI;CAC3E,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { IHubConfig, ResolvedHubConfig } from './interfaces/hub-config.interface';
|
|
2
|
+
export interface HubConfigContext {
|
|
3
|
+
env: string;
|
|
4
|
+
graphQlEnabled?: boolean;
|
|
5
|
+
permissionsPath?: string;
|
|
6
|
+
version: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function isReachableEnv(env: string | undefined): boolean;
|
|
9
|
+
export declare function isHubEnabled(config: boolean | IHubConfig | undefined): boolean;
|
|
10
|
+
export declare function isHubQueriesEnabled(config: boolean | IHubConfig | undefined): boolean;
|
|
11
|
+
export declare function normalizeHubConfig(config: boolean | IHubConfig, ctx: HubConfigContext): ResolvedHubConfig;
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isReachableEnv = isReachableEnv;
|
|
4
|
+
exports.isHubEnabled = isHubEnabled;
|
|
5
|
+
exports.isHubQueriesEnabled = isHubQueriesEnabled;
|
|
6
|
+
exports.normalizeHubConfig = normalizeHubConfig;
|
|
7
|
+
const role_enum_1 = require("../../common/enums/role.enum");
|
|
8
|
+
const meta_helper_1 = require("../../common/helpers/meta.helper");
|
|
9
|
+
const hub_constants_1 = require("./hub.constants");
|
|
10
|
+
const NON_REACHABLE_ENVS = new Set(['ci', 'development', 'e2e', 'local', 'test']);
|
|
11
|
+
function isReachableEnv(env) {
|
|
12
|
+
return !NON_REACHABLE_ENVS.has((env ?? '').toLowerCase());
|
|
13
|
+
}
|
|
14
|
+
function isHubEnabled(config) {
|
|
15
|
+
if (config === true) {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
if (config === false || config === undefined || config === null) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
return config.enabled !== false;
|
|
22
|
+
}
|
|
23
|
+
function isHubQueriesEnabled(config) {
|
|
24
|
+
if (!isHubEnabled(config) || typeof config !== 'object') {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
return isCollectorEnabled(config.collectors?.queries);
|
|
28
|
+
}
|
|
29
|
+
function normalizeHubConfig(config, ctx) {
|
|
30
|
+
const cfg = typeof config === 'object' && config !== null ? config : {};
|
|
31
|
+
return {
|
|
32
|
+
actions: cfg.actions !== false,
|
|
33
|
+
allowPublicAccessInProduction: cfg.allowPublicAccessInProduction === true,
|
|
34
|
+
collectors: {
|
|
35
|
+
logs: resolveLogsCollector(cfg.collectors?.logs, true),
|
|
36
|
+
queries: resolveQueriesCollector(cfg.collectors?.queries, false),
|
|
37
|
+
traces: resolveTracesCollector(cfg.collectors?.traces, true),
|
|
38
|
+
},
|
|
39
|
+
db: cfg.db === false
|
|
40
|
+
? false
|
|
41
|
+
: { includeIndexes: typeof cfg.db === 'object' ? cfg.db.includeIndexes === true : false },
|
|
42
|
+
emailPreview: cfg.emailPreview !== false,
|
|
43
|
+
env: ctx.env,
|
|
44
|
+
links: resolveLinks(cfg.links, ctx),
|
|
45
|
+
loginEndpoint: cfg.loginEndpoint ?? '/iam/sign-in/email',
|
|
46
|
+
logoutEndpoint: cfg.logoutEndpoint ?? '/iam/sign-out',
|
|
47
|
+
mailbox: resolveMailbox(cfg.mailbox),
|
|
48
|
+
migrations: resolveMigrations(cfg.migrations),
|
|
49
|
+
path: sanitizePath(cfg.path) || hub_constants_1.HUB_DEFAULT_PATH,
|
|
50
|
+
pollIntervalMs: Math.max(hub_constants_1.HUB_MIN_POLL_INTERVAL_MS, cfg.pollIntervalMs ?? hub_constants_1.HUB_DEFAULT_POLL_INTERVAL_MS),
|
|
51
|
+
roles: resolveRoles(cfg.roles),
|
|
52
|
+
version: ctx.version && ctx.version !== 'unknown' ? ctx.version : (0, meta_helper_1.getVersion)(),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function isCollectorEnabled(value, defaultOn = false) {
|
|
56
|
+
if (value === undefined) {
|
|
57
|
+
return defaultOn;
|
|
58
|
+
}
|
|
59
|
+
if (typeof value === 'boolean') {
|
|
60
|
+
return value;
|
|
61
|
+
}
|
|
62
|
+
return value.enabled !== false;
|
|
63
|
+
}
|
|
64
|
+
function resolveLinks(links, ctx) {
|
|
65
|
+
const out = {};
|
|
66
|
+
const swagger = links?.swagger;
|
|
67
|
+
if (swagger !== false) {
|
|
68
|
+
out.swagger = typeof swagger === 'string' ? swagger : '/swagger';
|
|
69
|
+
}
|
|
70
|
+
const graphql = links?.graphql;
|
|
71
|
+
if (graphql === false) {
|
|
72
|
+
}
|
|
73
|
+
else if (typeof graphql === 'string') {
|
|
74
|
+
out.graphql = graphql;
|
|
75
|
+
}
|
|
76
|
+
else if (ctx.graphQlEnabled !== false) {
|
|
77
|
+
out.graphql = '/graphql';
|
|
78
|
+
}
|
|
79
|
+
const permissions = links?.permissions;
|
|
80
|
+
if (permissions === false) {
|
|
81
|
+
}
|
|
82
|
+
else if (typeof permissions === 'string') {
|
|
83
|
+
out.permissions = permissions;
|
|
84
|
+
}
|
|
85
|
+
else if (ctx.permissionsPath) {
|
|
86
|
+
out.permissions = '/' + ctx.permissionsPath.replace(/^\/+/, '');
|
|
87
|
+
}
|
|
88
|
+
if (links?.mailpit) {
|
|
89
|
+
out.mailpit = links.mailpit;
|
|
90
|
+
}
|
|
91
|
+
return out;
|
|
92
|
+
}
|
|
93
|
+
function resolveLogsCollector(value, defaultOn) {
|
|
94
|
+
if (!isCollectorEnabled(value, defaultOn)) {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
const obj = typeof value === 'object' ? value : {};
|
|
98
|
+
return {
|
|
99
|
+
capacity: obj.capacity ?? hub_constants_1.HUB_DEFAULT_LOG_CAPACITY,
|
|
100
|
+
excludeContexts: obj.excludeContexts ?? [],
|
|
101
|
+
levels: obj.levels ?? ['log', 'warn', 'error', 'fatal'],
|
|
102
|
+
maxMessageLength: obj.maxMessageLength ?? hub_constants_1.HUB_DEFAULT_LOG_MAX_MESSAGE_LENGTH,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
function resolveMailbox(value) {
|
|
106
|
+
if (!isCollectorEnabled(value, false)) {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
const obj = typeof value === 'object' ? value : {};
|
|
110
|
+
return {
|
|
111
|
+
capacity: obj.capacity ?? hub_constants_1.HUB_DEFAULT_MAILBOX_CAPACITY,
|
|
112
|
+
maxMailSize: obj.maxMailSize ?? hub_constants_1.HUB_DEFAULT_MAILBOX_MAX_MAIL_SIZE,
|
|
113
|
+
mode: obj.mode === 'copy' ? 'copy' : 'capture',
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
function resolveMigrations(value) {
|
|
117
|
+
if (value === false) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
const obj = typeof value === 'object' && value ? value : {};
|
|
121
|
+
return {
|
|
122
|
+
collectionName: obj.collectionName ?? hub_constants_1.HUB_DEFAULT_MIGRATIONS_COLLECTION,
|
|
123
|
+
dir: obj.dir ?? hub_constants_1.HUB_DEFAULT_MIGRATIONS_DIR,
|
|
124
|
+
lockCollectionName: obj.lockCollectionName,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
function resolveQueriesCollector(value, defaultOn) {
|
|
128
|
+
if (!isCollectorEnabled(value, defaultOn)) {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
const obj = typeof value === 'object' ? value : {};
|
|
132
|
+
return {
|
|
133
|
+
capacity: obj.capacity ?? hub_constants_1.HUB_DEFAULT_QUERY_CAPACITY,
|
|
134
|
+
criticalMs: obj.criticalMs ?? hub_constants_1.HUB_DEFAULT_QUERY_CRITICAL_MS,
|
|
135
|
+
ignoreCommands: obj.ignoreCommands,
|
|
136
|
+
maxShapeLength: obj.maxShapeLength ?? hub_constants_1.HUB_DEFAULT_QUERY_MAX_SHAPE_LENGTH,
|
|
137
|
+
warnMs: obj.warnMs ?? hub_constants_1.HUB_DEFAULT_QUERY_WARN_MS,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
function resolveRoles(roles) {
|
|
141
|
+
if (roles === false) {
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
if (roles === undefined) {
|
|
145
|
+
return [role_enum_1.RoleEnum.ADMIN];
|
|
146
|
+
}
|
|
147
|
+
return Array.isArray(roles) ? roles : [roles];
|
|
148
|
+
}
|
|
149
|
+
function resolveTracesCollector(value, defaultOn) {
|
|
150
|
+
if (!isCollectorEnabled(value, defaultOn)) {
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
const obj = typeof value === 'object' ? value : {};
|
|
154
|
+
return {
|
|
155
|
+
capacity: obj.capacity ?? hub_constants_1.HUB_DEFAULT_TRACE_CAPACITY,
|
|
156
|
+
captureGraphQlOperation: obj.captureGraphQlOperation !== false,
|
|
157
|
+
excludePaths: obj.excludePaths ?? ['/hub'],
|
|
158
|
+
slowMs: obj.slowMs ?? hub_constants_1.HUB_DEFAULT_TRACE_SLOW_MS,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
function sanitizePath(path) {
|
|
162
|
+
return (path ?? '').replace(/^\/+|\/+$/g, '');
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=hub-config.helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hub-config.helper.js","sourceRoot":"","sources":["../../../../src/core/modules/hub/hub-config.helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type HubPanelGroup = 'Overview' | 'Runtime' | 'Data' | 'API & Docs';
|
|
2
|
+
export interface HubPanel {
|
|
3
|
+
readonly group: HubPanelGroup;
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly json: string;
|
|
6
|
+
readonly optional?: boolean;
|
|
7
|
+
readonly path: string;
|
|
8
|
+
readonly title: string;
|
|
9
|
+
}
|
|
10
|
+
export declare const HUB_PANELS: readonly HubPanel[];
|
|
11
|
+
export declare const HUB_PANEL_GROUPS: readonly HubPanelGroup[];
|
|
12
|
+
export declare function findHubPanelByPath(subPath: string): HubPanel | undefined;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HUB_PANEL_GROUPS = exports.HUB_PANELS = void 0;
|
|
4
|
+
exports.findHubPanelByPath = findHubPanelByPath;
|
|
5
|
+
exports.HUB_PANELS = [
|
|
6
|
+
{ group: 'Overview', id: 'dashboard', json: 'dashboard.json', path: '', title: 'Dashboard' },
|
|
7
|
+
{ group: 'Overview', id: 'diagnostics', json: 'diagnostics.json', path: 'diagnostics', title: 'Diagnostics' },
|
|
8
|
+
{ group: 'Runtime', id: 'logs', json: 'logs.json', path: 'logs', title: 'Logs' },
|
|
9
|
+
{ group: 'Runtime', id: 'traces', json: 'traces.json', path: 'traces', title: 'Request Traces' },
|
|
10
|
+
{ group: 'Runtime', id: 'queries', json: 'queries.json', path: 'queries', title: 'Query Performance' },
|
|
11
|
+
{ group: 'Runtime', id: 'cron', json: 'cron.json', optional: true, path: 'cron', title: 'Cron Jobs' },
|
|
12
|
+
{ group: 'Data', id: 'db', json: 'db.json', path: 'db', title: 'Database' },
|
|
13
|
+
{ group: 'Data', id: 'models', json: 'models.json', path: 'models', title: 'Models / ERD' },
|
|
14
|
+
{ group: 'Data', id: 'migrations', json: 'migrations.json', path: 'migrations', title: 'Migrations' },
|
|
15
|
+
{ group: 'Data', id: 'files', json: 'files.json', path: 'files', title: 'Files' },
|
|
16
|
+
{ group: 'Data', id: 'config', json: 'config.json', path: 'config', title: 'Config' },
|
|
17
|
+
{
|
|
18
|
+
group: 'Data',
|
|
19
|
+
id: 'auth-migration',
|
|
20
|
+
json: 'auth-migration.json',
|
|
21
|
+
optional: true,
|
|
22
|
+
path: 'auth-migration',
|
|
23
|
+
title: 'Auth Migration',
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
group: 'API & Docs',
|
|
27
|
+
id: 'routes',
|
|
28
|
+
json: 'routes.json',
|
|
29
|
+
optional: true,
|
|
30
|
+
path: 'routes',
|
|
31
|
+
title: 'Routes / Permissions',
|
|
32
|
+
},
|
|
33
|
+
{ group: 'API & Docs', id: 'error-codes', json: 'error-codes.json', path: 'error-codes', title: 'Error Codes' },
|
|
34
|
+
{ group: 'API & Docs', id: 'emails', json: 'emails.json', path: 'emails', title: 'Email Preview' },
|
|
35
|
+
{ group: 'API & Docs', id: 'mailbox', json: 'mailbox.json', optional: true, path: 'mailbox', title: 'Mailbox' },
|
|
36
|
+
{ group: 'API & Docs', id: 'ai', json: 'ai.json', optional: true, path: 'ai', title: 'AI' },
|
|
37
|
+
];
|
|
38
|
+
exports.HUB_PANEL_GROUPS = ['Overview', 'Runtime', 'Data', 'API & Docs'];
|
|
39
|
+
function findHubPanelByPath(subPath) {
|
|
40
|
+
const normalized = subPath.replace(/^\/+|\/+$/g, '');
|
|
41
|
+
return exports.HUB_PANELS.find((panel) => panel.path === normalized);
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=hub-nav.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hub-nav.js","sourceRoot":"","sources":["../../../../src/core/modules/hub/hub-nav.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface HubBufferEntry {
|
|
2
|
+
seq: number;
|
|
3
|
+
timestamp: number;
|
|
4
|
+
}
|
|
5
|
+
export declare class HubRingBuffer<T extends HubBufferEntry> {
|
|
6
|
+
readonly capacity: number;
|
|
7
|
+
private minValidSeq;
|
|
8
|
+
private nextSeq;
|
|
9
|
+
private readonly slots;
|
|
10
|
+
constructor(capacity: number);
|
|
11
|
+
get firstRetainedSeq(): number;
|
|
12
|
+
get lastSeq(): number;
|
|
13
|
+
get size(): number;
|
|
14
|
+
private get oldestSeq();
|
|
15
|
+
add(entry: Omit<T, 'seq' | 'timestamp'> & {
|
|
16
|
+
timestamp?: number;
|
|
17
|
+
}): T;
|
|
18
|
+
clear(): void;
|
|
19
|
+
recent(limit?: number): T[];
|
|
20
|
+
since(sinceSeq: number, limit?: number): T[];
|
|
21
|
+
private collect;
|
|
22
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HubRingBuffer = void 0;
|
|
4
|
+
class HubRingBuffer {
|
|
5
|
+
capacity;
|
|
6
|
+
minValidSeq = 0;
|
|
7
|
+
nextSeq = 0;
|
|
8
|
+
slots;
|
|
9
|
+
constructor(capacity) {
|
|
10
|
+
this.capacity = Math.max(1, Math.floor(capacity));
|
|
11
|
+
this.slots = Array.from({ length: this.capacity });
|
|
12
|
+
}
|
|
13
|
+
get firstRetainedSeq() {
|
|
14
|
+
return this.size === 0 ? -1 : this.oldestSeq;
|
|
15
|
+
}
|
|
16
|
+
get lastSeq() {
|
|
17
|
+
return this.nextSeq - 1;
|
|
18
|
+
}
|
|
19
|
+
get size() {
|
|
20
|
+
return this.nextSeq - this.oldestSeq;
|
|
21
|
+
}
|
|
22
|
+
get oldestSeq() {
|
|
23
|
+
return Math.max(this.nextSeq - this.capacity, this.minValidSeq);
|
|
24
|
+
}
|
|
25
|
+
add(entry) {
|
|
26
|
+
const full = {
|
|
27
|
+
...entry,
|
|
28
|
+
seq: this.nextSeq,
|
|
29
|
+
timestamp: entry.timestamp ?? Date.now(),
|
|
30
|
+
};
|
|
31
|
+
this.slots[this.nextSeq % this.capacity] = full;
|
|
32
|
+
this.nextSeq++;
|
|
33
|
+
return full;
|
|
34
|
+
}
|
|
35
|
+
clear() {
|
|
36
|
+
this.slots.fill(undefined);
|
|
37
|
+
this.minValidSeq = this.nextSeq;
|
|
38
|
+
}
|
|
39
|
+
recent(limit = this.capacity) {
|
|
40
|
+
return this.collect(this.nextSeq - Math.max(0, limit));
|
|
41
|
+
}
|
|
42
|
+
since(sinceSeq, limit = this.capacity) {
|
|
43
|
+
const start = Math.max(sinceSeq + 1, this.nextSeq - Math.max(0, limit));
|
|
44
|
+
return this.collect(start);
|
|
45
|
+
}
|
|
46
|
+
collect(startSeq) {
|
|
47
|
+
const from = Math.max(startSeq, this.oldestSeq, 0);
|
|
48
|
+
const result = [];
|
|
49
|
+
for (let seq = from; seq < this.nextSeq; seq++) {
|
|
50
|
+
const entry = this.slots[seq % this.capacity];
|
|
51
|
+
if (entry !== undefined && entry.seq === seq) {
|
|
52
|
+
result.push(entry);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.HubRingBuffer = HubRingBuffer;
|
|
59
|
+
//# sourceMappingURL=hub-ring-buffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hub-ring-buffer.js","sourceRoot":"","sources":["../../../../src/core/modules/hub/hub-ring-buffer.ts"],"names":[],"mappings":";;;AAuBA,MAAa,aAAa;IAER,QAAQ,CAAS;IAGzB,WAAW,GAAG,CAAC,CAAC;IAChB,OAAO,GAAG,CAAC,CAAC;IACH,KAAK,CAAoB;IAE1C,YAAY,QAAgB;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAgB,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpE,CAAC;IAGD,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;IAC/C,CAAC;IAGD,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IAC1B,CAAC;IAGD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;IACvC,CAAC;IAGD,IAAY,SAAS;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAClE,CAAC;IAMD,GAAG,CAAC,KAA4D;QAC9D,MAAM,IAAI,GAAG;YACX,GAAG,KAAK;YACR,GAAG,EAAE,IAAI,CAAC,OAAO;YACjB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;SACpC,CAAC;QACP,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;QAChD,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;IAClC,CAAC;IAGD,MAAM,CAAC,QAAgB,IAAI,CAAC,QAAQ;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACzD,CAAC;IAGD,KAAK,CAAC,QAAgB,EAAE,QAAgB,IAAI,CAAC,QAAQ;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAEO,OAAO,CAAC,QAAgB;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACnD,MAAM,MAAM,GAAQ,EAAE,CAAC;QACvB,KAAK,IAAI,GAAG,GAAG,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;gBAC7C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AA7ED,sCA6EC"}
|