@futdevpro/nts-dynamo 1.15.151 → 1.15.154
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/.c8rc.json +26 -26
- package/.copilot/patterns.json +7 -7
- package/.cursor/rules/__assistant_guide.mdc +30 -30
- package/.cursor/rules/__main.mdc +64 -64
- package/.cursor/rules/_ag_backend-structure.mdc +85 -85
- package/.cursor/rules/_ag_backend.mdc +16 -16
- package/.cursor/rules/_ag_debug.mdc +7 -7
- package/.cursor/rules/_ag_documentation_writing_rules.mdc +372 -372
- package/.cursor/rules/_ag_file-refactoring.mdc +113 -113
- package/.cursor/rules/_ag_fixes_rules.mdc +5 -5
- package/.cursor/rules/_ag_frontend-structure.mdc +86 -86
- package/.cursor/rules/_ag_frontend.mdc +39 -39
- package/.cursor/rules/_ag_import-rules.mdc +44 -44
- package/.cursor/rules/_ag_naming.mdc +115 -115
- package/.cursor/rules/_ag_running_commands.mdc +4 -4
- package/.cursor/rules/_ag_server-controller.mdc +5 -5
- package/.cursor/rules/_ag_should-be.mdc +6 -6
- package/.cursor/rules/_ag_swearing.mdc +47 -47
- package/.cursor/rules/ai_development_guide.md +60 -60
- package/.cursor/rules/ai_directives.md +114 -114
- package/.cursor/rules/cursor-rules.md +160 -160
- package/.cursor/rules/default-command.mdc +464 -464
- package/.cursor/rules/error_code_pattern.md +39 -39
- package/.cursor/rules/saved rule mcp server use.md +15 -15
- package/.dynamo/pipeline.cicd.config.json +190 -190
- package/.dynamo/version-bump.config.json +5 -5
- package/.github/workflows/main.yml +438 -438
- package/.husky/pre-commit +3 -3
- package/.vscode/settings.json +10 -10
- package/HOWTO.md +15 -15
- package/LICENSE +21 -21
- package/README.md +790 -749
- package/__documentations/2026-04-28-logs-module.md +49 -49
- package/__documentations/2026-05-17-oai-compatible-providers.md +229 -229
- package/__documentations/2026-05-17-static-client-serving-howto.md +144 -144
- package/__documentations/2026-06-01-fr041-cors-middleware.md +96 -96
- package/__documentations/2026-06-01-fr047-p2p3-function-calling.md +81 -81
- package/__documentations/2026-06-15-fr193-memory-guard.md +73 -73
- package/__documentations/2026-08-08-fr292-app-version-header.md +38 -38
- package/__documentations/2026-08-14-field-encryption-mongoose-document-spread.md +124 -124
- package/__documentations/2026-08-18-artifact-compiler.md +46 -46
- package/__documentations/2026-08-18-mongo-transaction-control-service.md +82 -82
- package/__documentations/2026-08-18-standalone-account-security-and-privacy-bedrock.md +132 -132
- package/__documentations/2026-08-21-distributed-rate-limit-bfr-ctm-010.md +59 -59
- package/__documentations/2026-08-22-content-free-process-error-boundary.md +91 -0
- package/__documentations/2026-08-22-npm-token-state-classifier.md +92 -92
- package/__documentations/nts-integration-tests-2026-03-17.md +26 -26
- package/__documentations/plans/BEDROCK-HYPERPLAN.md +95 -95
- package/_specifications/BACKLOG.md +92 -92
- package/_specifications/TODO.md +15 -15
- package/_specifications/agent.md +138 -138
- package/build/_models/control-models/app-params.control-model.d.ts.map +1 -1
- package/build/_models/control-models/app-params.control-model.js +1 -2
- package/build/_models/control-models/app-params.control-model.js.map +1 -1
- package/build/_modules/server/index.d.ts +8 -0
- package/build/_modules/server/index.d.ts.map +1 -1
- package/build/_modules/server/index.js +9 -0
- package/build/_modules/server/index.js.map +1 -1
- package/build/_modules/server/safe-diagnostic/safe-diagnostic-cause.type-enum.d.ts +9 -0
- package/build/_modules/server/safe-diagnostic/safe-diagnostic-cause.type-enum.d.ts.map +1 -0
- package/build/_modules/server/safe-diagnostic/safe-diagnostic-cause.type-enum.js +13 -0
- package/build/_modules/server/safe-diagnostic/safe-diagnostic-cause.type-enum.js.map +1 -0
- package/build/_modules/server/safe-diagnostic/safe-diagnostic-stage.type-enum.d.ts +20 -0
- package/build/_modules/server/safe-diagnostic/safe-diagnostic-stage.type-enum.d.ts.map +1 -0
- package/build/_modules/server/safe-diagnostic/safe-diagnostic-stage.type-enum.js +24 -0
- package/build/_modules/server/safe-diagnostic/safe-diagnostic-stage.type-enum.js.map +1 -0
- package/build/_modules/server/safe-diagnostic/safe-diagnostic.control-service.d.ts +19 -0
- package/build/_modules/server/safe-diagnostic/safe-diagnostic.control-service.d.ts.map +1 -0
- package/build/_modules/server/safe-diagnostic/safe-diagnostic.control-service.js +83 -0
- package/build/_modules/server/safe-diagnostic/safe-diagnostic.control-service.js.map +1 -0
- package/build/_modules/server/safe-diagnostic/safe-diagnostic.interface.d.ts +19 -0
- package/build/_modules/server/safe-diagnostic/safe-diagnostic.interface.d.ts.map +1 -0
- package/build/_modules/server/safe-diagnostic/safe-diagnostic.interface.js +3 -0
- package/build/_modules/server/safe-diagnostic/safe-diagnostic.interface.js.map +1 -0
- package/build/_modules/server/server-status/db-readiness-probe-code.type-enum.d.ts +14 -0
- package/build/_modules/server/server-status/db-readiness-probe-code.type-enum.d.ts.map +1 -0
- package/build/_modules/server/server-status/db-readiness-probe-code.type-enum.js +18 -0
- package/build/_modules/server/server-status/db-readiness-probe-code.type-enum.js.map +1 -0
- package/build/_modules/server/server-status/db-readiness-probe-stage.type-enum.d.ts +8 -0
- package/build/_modules/server/server-status/db-readiness-probe-stage.type-enum.d.ts.map +1 -0
- package/build/_modules/server/server-status/db-readiness-probe-stage.type-enum.js +12 -0
- package/build/_modules/server/server-status/db-readiness-probe-stage.type-enum.js.map +1 -0
- package/build/_modules/server/server-status/db-readiness-probe.control-service.d.ts +14 -0
- package/build/_modules/server/server-status/db-readiness-probe.control-service.d.ts.map +1 -0
- package/build/_modules/server/server-status/db-readiness-probe.control-service.js +126 -0
- package/build/_modules/server/server-status/db-readiness-probe.control-service.js.map +1 -0
- package/build/_modules/server/server-status/db-readiness-probe.interface.d.ts +18 -0
- package/build/_modules/server/server-status/db-readiness-probe.interface.d.ts.map +1 -0
- package/build/_modules/server/server-status/db-readiness-probe.interface.js +3 -0
- package/build/_modules/server/server-status/db-readiness-probe.interface.js.map +1 -0
- package/build/_services/core/global.service.d.ts +3 -3
- package/build/_services/core/global.service.d.ts.map +1 -1
- package/build/_services/core/global.service.js +24 -18
- package/build/_services/core/global.service.js.map +1 -1
- package/build/_services/server/app.server.d.ts +2 -0
- package/build/_services/server/app.server.d.ts.map +1 -1
- package/build/_services/server/app.server.js +71 -199
- package/build/_services/server/app.server.js.map +1 -1
- package/eslint.config.js +3 -3
- package/nodemon.json +24 -24
- package/package.json +1 -1
- package/pnpm-workspace.yaml +6 -6
- package/scripts/_seed-out/aim-seed.fixtures.ts +161 -161
- package/scripts/_seed-out/llm-expand-raw.json +59 -59
- package/scripts/_seed-out/seed-raw.json +152 -152
- package/scripts/ai-fixture-seed.js +126 -126
- package/scripts/run-coverage-tests.js +28 -28
- package/spec/support/helpers/spec-reporter-loader.js +359 -359
- package/spec/support/helpers/ts-node-helper.js +93 -93
- package/spec/support/jasmine.coverage.json +24 -24
- package/spec/support/jasmine.json +24 -24
- package/src/_collections/app-version-header.util.spec.ts +108 -108
- package/src/_collections/app-version-header.util.ts +74 -74
- package/src/_collections/archive-service-registry.const.ts +21 -21
- package/src/_collections/archive.util.spec.ts +57 -57
- package/src/_collections/archive.util.ts +18 -18
- package/src/_collections/atlas-default-db-options.const.ts +9 -9
- package/src/_collections/client-safe-error.util.spec.ts +151 -151
- package/src/_collections/client-safe-error.util.ts +107 -107
- package/src/_collections/default-fallback-cache-max-age.const.spec.ts +11 -11
- package/src/_collections/default-fallback-cache-max-age.const.ts +2 -2
- package/src/_collections/default-not-found-page.const.spec.ts +19 -19
- package/src/_collections/default-not-found-page.const.ts +22 -22
- package/src/_collections/default-socket-path.const.spec.ts +12 -12
- package/src/_collections/default-socket-path.const.ts +2 -2
- package/src/_collections/field-encryption.util.spec.ts +195 -195
- package/src/_collections/field-encryption.util.ts +222 -222
- package/src/_collections/get-environment-settings.util.spec.ts +210 -210
- package/src/_collections/get-environment-settings.util.ts +48 -48
- package/src/_collections/global-settings.const.ts +126 -126
- package/src/_collections/load-shed.util.spec.ts +62 -62
- package/src/_collections/load-shed.util.ts +51 -51
- package/src/_collections/mongo-reconnect-guard.util.spec.ts +52 -52
- package/src/_collections/mongo-reconnect-guard.util.ts +172 -172
- package/src/_collections/npm-token-check.util.spec.ts +218 -218
- package/src/_collections/npm-token-check.util.ts +327 -327
- package/src/_collections/sample.env +21 -21
- package/src/_collections/security-headers.util.spec.ts +98 -98
- package/src/_collections/security-headers.util.ts +96 -96
- package/src/_collections/signed-url.util.spec.ts +198 -198
- package/src/_collections/signed-url.util.ts +170 -170
- package/src/_collections/star.controller.spec.ts +224 -224
- package/src/_collections/star.controller.ts +129 -129
- package/src/_collections/static-cache-control.util.spec.ts +47 -47
- package/src/_collections/static-cache-control.util.ts +25 -25
- package/src/_enums/data-model-type.enum.ts +14 -14
- package/src/_enums/data-service-function.enum.ts +24 -24
- package/src/_enums/predefined-data-types.enum.ts +16 -16
- package/src/_enums/route-security.enum.ts +12 -12
- package/src/_models/control-models/api-call-params.control-model.spec.ts +152 -152
- package/src/_models/control-models/api-call-params.control-model.ts +142 -142
- package/src/_models/control-models/app-ext-system-controls.control-model.spec.ts +52 -52
- package/src/_models/control-models/app-ext-system-controls.control-model.ts +9 -9
- package/src/_models/control-models/app-params.control-model.spec.ts +213 -209
- package/src/_models/control-models/app-params.control-model.ts +130 -129
- package/src/_models/control-models/app-system-controls.control-model.spec.ts +31 -31
- package/src/_models/control-models/app-system-controls.control-model.ts +9 -9
- package/src/_models/control-models/endpoint-params.control-model.spec.ts +669 -669
- package/src/_models/control-models/endpoint-params.control-model.ts +664 -664
- package/src/_models/control-models/http-settings.control-model.spec.ts +77 -77
- package/src/_models/control-models/http-settings.control-model.ts +37 -37
- package/src/_models/control-models/system-control.control-model.spec.ts +27 -27
- package/src/_models/control-models/system-control.control-model.ts +12 -12
- package/src/_models/data-models/schema-migration.data-model.ts +50 -50
- package/src/_models/interfaces/app-version-header-settings.interface.ts +17 -17
- package/src/_models/interfaces/certification-settings.interface.ts +7 -7
- package/src/_models/interfaces/compare-data-options.interface.ts +27 -27
- package/src/_models/interfaces/compare-data-result.interface.ts +12 -12
- package/src/_models/interfaces/cors-settings.interface.spec.ts +52 -52
- package/src/_models/interfaces/cors-settings.interface.ts +56 -56
- package/src/_models/interfaces/db-query-options.interface.ts +33 -33
- package/src/_models/interfaces/environment-settings.interface.ts +59 -59
- package/src/_models/interfaces/global-log-settings.interface.ts +171 -171
- package/src/_models/interfaces/global-service-settings.interface.ts +47 -47
- package/src/_models/interfaces/global-settings.interface.ts +294 -294
- package/src/_models/interfaces/migration-entry.interface.ts +19 -19
- package/src/_models/interfaces/mongo-transaction-settings.interface.ts +9 -9
- package/src/_models/interfaces/routing-module-settings.interface.ts +21 -21
- package/src/_models/interfaces/security-headers-settings.interface.ts +50 -50
- package/src/_models/interfaces/signed-url-verify-result.interface.ts +13 -13
- package/src/_models/interfaces/static-client-settings.interface.spec.ts +29 -29
- package/src/_models/interfaces/static-client-settings.interface.ts +36 -36
- package/src/_models/types/db-update.type.ts +100 -100
- package/src/_modules/account-security/_enums/account-challenge-purpose.type-enum.ts +5 -5
- package/src/_modules/account-security/_enums/account-refresh-token-state.type-enum.ts +6 -6
- package/src/_modules/account-security/_enums/account-session-state.type-enum.ts +6 -6
- package/src/_modules/account-security/_models/account-challenge-adapter.interface.ts +17 -17
- package/src/_modules/account-security/_models/account-challenge-issued.interface.ts +6 -6
- package/src/_modules/account-security/_models/account-challenge-record.interface.ts +13 -13
- package/src/_modules/account-security/_models/account-challenge-result.interface.ts +8 -8
- package/src/_modules/account-security/_models/account-challenge-settings.interface.ts +9 -9
- package/src/_modules/account-security/_models/account-password-policy.interface.ts +11 -11
- package/src/_modules/account-security/_models/account-password-verification.interface.ts +5 -5
- package/src/_modules/account-security/_models/account-refresh-token-record.interface.ts +13 -13
- package/src/_modules/account-security/_models/account-session-adapter.interface.ts +19 -19
- package/src/_modules/account-security/_models/account-session-claims.interface.ts +7 -7
- package/src/_modules/account-security/_models/account-session-context.interface.ts +6 -6
- package/src/_modules/account-security/_models/account-session-create.interface.ts +8 -8
- package/src/_modules/account-security/_models/account-session-record.interface.ts +21 -21
- package/src/_modules/account-security/_models/account-session-rotate.interface.ts +11 -11
- package/src/_modules/account-security/_models/account-session-settings.interface.ts +11 -11
- package/src/_modules/account-security/_models/account-session-token-pair.interface.ts +8 -8
- package/src/_modules/account-security/_models/account-session-view.interface.ts +13 -13
- package/src/_modules/account-security/account-challenge.control-service.spec.ts +195 -195
- package/src/_modules/account-security/account-challenge.control-service.ts +164 -164
- package/src/_modules/account-security/account-password.control-service.spec.ts +96 -96
- package/src/_modules/account-security/account-password.control-service.ts +288 -288
- package/src/_modules/account-security/account-session.control-service.spec.ts +294 -294
- package/src/_modules/account-security/account-session.control-service.ts +376 -376
- package/src/_modules/account-security/index.ts +31 -31
- package/src/_modules/admin-auth/_models/admin-api-key-config.interface.ts +33 -33
- package/src/_modules/admin-auth/admin-api-key.auth-service.spec.ts +200 -200
- package/src/_modules/admin-auth/admin-api-key.auth-service.ts +220 -220
- package/src/_modules/admin-auth/index.ts +2 -2
- package/src/_modules/ai/_collections/ai-model-config-validator.util.spec.ts +150 -150
- package/src/_modules/ai/_collections/ai-model-config-validator.util.ts +131 -131
- package/src/_modules/ai/_collections/ai-provider-error.util.ts +144 -144
- package/src/_modules/ai/_models/ai-input-interfaces.ts +117 -117
- package/src/_modules/ai/_models/ai-test-generation-result.interface.ts +16 -16
- package/src/_modules/ai/_models/interfaces/dynts-ai-cost-event-callback.interface.ts +14 -14
- package/src/_modules/ai/_models/interfaces/dynts-ai-cost-event.interface.ts +56 -56
- package/src/_modules/ai/_models/interfaces/dynts-ai-provider-error.interface.ts +16 -16
- package/src/_modules/ai/_modules/ai-mock/_collections/aim-default-collection.util.spec.ts +72 -72
- package/src/_modules/ai/_modules/ai-mock/_collections/aim-default-collection.util.ts +71 -71
- package/src/_modules/ai/_modules/ai-mock/_collections/aim-fixture-match.util.spec.ts +57 -57
- package/src/_modules/ai/_modules/ai-mock/_collections/aim-fixture-match.util.ts +60 -60
- package/src/_modules/ai/_modules/ai-mock/_collections/aim-fixture-serializer.util.spec.ts +56 -56
- package/src/_modules/ai/_modules/ai-mock/_collections/aim-fixture-serializer.util.ts +117 -117
- package/src/_modules/ai/_modules/ai-mock/_enums/aim-modality.enum.ts +28 -28
- package/src/_modules/ai/_modules/ai-mock/_models/interfaces/aim-call-input.interface.ts +14 -14
- package/src/_modules/ai/_modules/ai-mock/_models/interfaces/aim-error.interface.ts +11 -11
- package/src/_modules/ai/_modules/ai-mock/_models/interfaces/aim-fixture.interface.ts +30 -30
- package/src/_modules/ai/_modules/ai-mock/_models/interfaces/aim-request.interface.ts +19 -19
- package/src/_modules/ai/_modules/ai-mock/_models/interfaces/aim-service-collection.interface.ts +20 -20
- package/src/_modules/ai/_modules/ai-mock/_services/ai-embedding-mock.service.spec.ts +115 -115
- package/src/_modules/ai/_modules/ai-mock/_services/ai-embedding-mock.service.ts +233 -233
- package/src/_modules/ai/_modules/ai-mock/_services/aim-fixture-harness.service.spec.ts +134 -134
- package/src/_modules/ai/_modules/ai-mock/_services/aim-fixture-harness.service.ts +127 -127
- package/src/_modules/ai/_modules/ai-mock/_services/aim-fixture-pipeline.spec.ts +105 -105
- package/src/_modules/ai/_modules/ai-mock/_services/aim-fixture-store.service.spec.ts +50 -50
- package/src/_modules/ai/_modules/ai-mock/_services/aim-fixture-store.service.ts +65 -65
- package/src/_modules/ai/_modules/ai-mock/_services/aim-integration-proof.spec.ts +92 -92
- package/src/_modules/ai/_modules/ai-mock/_services/aim-mock.service.spec.ts +112 -112
- package/src/_modules/ai/_modules/ai-mock/_services/aim-mock.service.ts +155 -155
- package/src/_modules/ai/_modules/ai-mock/fixtures/aim-text.fixtures.ts +649 -649
- package/src/_modules/ai/_modules/ai-mock/index.ts +47 -47
- package/src/_modules/ai/_modules/anthropic/_services/aai-user-key.control-service.ts +138 -138
- package/src/_modules/ai/_modules/anthropic/index.ts +5 -5
- package/src/_modules/ai/_modules/document-ai/_collections/dai-chunking.util.spec.ts +242 -242
- package/src/_modules/ai/_modules/document-ai/_collections/dai-chunking.util.ts +639 -639
- package/src/_modules/ai/_modules/document-ai/_collections/dai-code-chunking.util.spec.ts +295 -295
- package/src/_modules/ai/_modules/document-ai/_collections/dai-code-chunking.util.ts +552 -552
- package/src/_modules/ai/_modules/document-ai/_collections/dai-document.util.spec.ts +209 -209
- package/src/_modules/ai/_modules/document-ai/_collections/dai-document.util.ts +85 -85
- package/src/_modules/ai/_modules/document-ai/_enums/dai-compare-result-type.enum.ts +7 -7
- package/src/_modules/ai/_modules/document-ai/_models/data-models/dai-doc-chunk.data-model.ts +146 -146
- package/src/_modules/ai/_modules/document-ai/_models/data-models/dai-doc-page.data-model.ts +162 -162
- package/src/_modules/ai/_modules/document-ai/_models/data-models/dai-document.data-model.ts +99 -99
- package/src/_modules/ai/_modules/document-ai/_models/interfaces/dai-code-chunk.interface.ts +68 -68
- package/src/_modules/ai/_modules/document-ai/_models/interfaces/dai-doc-chunk-compare-result.interface.ts +18 -18
- package/src/_modules/ai/_modules/document-ai/_models/interfaces/dai-doc-page-compare-result.interface.ts +19 -19
- package/src/_modules/ai/_modules/document-ai/_models/interfaces/dai-document-compare-result.interface.ts +25 -25
- package/src/_modules/ai/_modules/document-ai/index.ts +30 -30
- package/src/_modules/ai/_modules/fdp-ai/_services/fdpai-user-key.control-service.ts +189 -189
- package/src/_modules/ai/_modules/fdp-ai/index.ts +5 -5
- package/src/_modules/ai/_modules/open-ai/_collections/oai-global-settings.const.ts +9 -9
- package/src/_modules/ai/_modules/open-ai/_collections/oai-llm-predefined-requests-hu.conts.ts +82 -82
- package/src/_modules/ai/_modules/open-ai/_collections/oai-llm-predefined-requests.conts.ts +75 -75
- package/src/_modules/ai/_modules/open-ai/_enums/oai-gpt-message-role.enum.ts +45 -45
- package/src/_modules/ai/_modules/open-ai/_models/interfaces/oai-global-settings.interface.ts +7 -7
- package/src/_modules/ai/_modules/open-ai/_models/interfaces/oai-gpt-message.interface.ts +7 -7
- package/src/_modules/ai/_modules/open-ai/_models/interfaces/oai-llm-predefined-requests.interface.ts +57 -57
- package/src/_modules/ai/_modules/open-ai/_services/data-services/oai-doc-chunk-data.service.ts +292 -292
- package/src/_modules/ai/_modules/open-ai/_services/data-services/oai-doc-page.data-service.ts +572 -572
- package/src/_modules/ai/_modules/open-ai/_services/data-services/oai-document.data-service.spec.ts +342 -342
- package/src/_modules/ai/_modules/open-ai/_services/data-services/oai-document.data-service.ts +435 -435
- package/src/_modules/ai/_modules/open-ai/_services/data-services/oai-vector-data.service.spec.ts +550 -550
- package/src/_modules/ai/_modules/open-ai/_services/data-services/oai-vector-data.service.ts +630 -630
- package/src/_modules/ai/_modules/open-ai/_services/oai-embedding.control-service.spec.ts +332 -332
- package/src/_modules/ai/_modules/open-ai/_services/oai-embedding.control-service.ts +132 -132
- package/src/_modules/ai/_modules/open-ai/_services/oai-llm-chat.service-base.spec.ts +462 -462
- package/src/_modules/ai/_modules/open-ai/_services/oai-llm-chat.service-base.ts +634 -634
- package/src/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.spec.ts +489 -489
- package/src/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.tools.spec.ts +173 -173
- package/src/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.ts +1085 -1085
- package/src/_modules/ai/_modules/open-ai/_services/oai-user-key.control-service.ts +157 -157
- package/src/_modules/ai/_modules/open-ai/index.ts +74 -74
- package/src/_modules/ai/_services/ai-embedding-provider.registry.spec.ts +110 -110
- package/src/_modules/ai/_services/ai-embedding-provider.registry.ts +114 -114
- package/src/_modules/ai/_services/ai-embedding.service-base.spec.ts +98 -98
- package/src/_modules/ai/_services/ai-embedding.service-base.ts +48 -48
- package/src/_modules/ai/_services/ai-llm-chat.service-base.spec.ts +229 -229
- package/src/_modules/ai/_services/ai-llm-chat.service-base.ts +68 -68
- package/src/_modules/ai/_services/ai-llm.service-base.reconciler.spec.ts +133 -133
- package/src/_modules/ai/_services/ai-llm.service-base.spec.ts +250 -250
- package/src/_modules/ai/_services/ai-llm.service-base.ts +599 -599
- package/src/_modules/ai/_services/ai-provider.service-base.spec.ts +158 -158
- package/src/_modules/ai/_services/ai-provider.service-base.ts +67 -67
- package/src/_modules/ai/_services/ai-user-key.service-base.ts +59 -59
- package/src/_modules/ai/_services/lmstudio-embedding.control-service.spec.ts +197 -197
- package/src/_modules/ai/_services/lmstudio-embedding.control-service.ts +399 -399
- package/src/_modules/ai/index.ts +33 -33
- package/src/_modules/artifact-compiler/_enums/artifact-compile-outcome.type-enum.ts +5 -5
- package/src/_modules/artifact-compiler/_enums/artifact-compile-stage.type-enum.ts +8 -8
- package/src/_modules/artifact-compiler/_enums/artifact-retry-class.type-enum.ts +6 -6
- package/src/_modules/artifact-compiler/_models/artifact-compile.interface.ts +35 -35
- package/src/_modules/artifact-compiler/artifact-compiler.control-service.spec.ts +151 -151
- package/src/_modules/artifact-compiler/artifact-compiler.control-service.ts +356 -356
- package/src/_modules/artifact-compiler/index.ts +9 -9
- package/src/_modules/assistant/_collections/ass-global-settings.const.ts +13 -13
- package/src/_modules/assistant/_collections/ass.util.spec.ts +176 -176
- package/src/_modules/assistant/_collections/ass.util.ts +50 -50
- package/src/_modules/assistant/_models/ass-global-settings.interface.ts +15 -15
- package/src/_modules/assistant/_services/ass-io.control-service.spec.ts +140 -140
- package/src/_modules/assistant/_services/ass-io.control-service.ts +74 -74
- package/src/_modules/assistant/_services/ass-main.control-service.spec.ts +192 -192
- package/src/_modules/assistant/_services/ass-main.control-service.ts +107 -107
- package/src/_modules/assistant/index.ts +19 -19
- package/src/_modules/bot/_collections/bot-default-commands.const.ts +12 -12
- package/src/_modules/bot/_collections/bot-global-settings.const.ts +39 -39
- package/src/_modules/bot/_models/bot-channel-wrapper.interface.ts +62 -62
- package/src/_modules/bot/_models/bot-command.interface.ts +8 -8
- package/src/_modules/bot/_models/bot-global-settings.interface.ts +96 -96
- package/src/_modules/bot/_models/bot-last-mention-date.interface.ts +6 -6
- package/src/_modules/bot/_models/bot-last-message-date.interface.ts +5 -5
- package/src/_modules/bot/_models/bot-message-wrapper.interface.ts +90 -90
- package/src/_modules/bot/_models/bot-user-wrapper.interface.ts +41 -41
- package/src/_modules/bot/_modules/discord-bot/_models/dib-platform.types.ts +9 -9
- package/src/_modules/bot/_modules/discord-bot/_services/dib-messaging-provider.control-service.spec.ts +431 -431
- package/src/_modules/bot/_modules/discord-bot/_services/dib-messaging-provider.control-service.ts +641 -641
- package/src/_modules/bot/_modules/discord-bot/index.ts +12 -12
- package/src/_modules/bot/_modules/dynamo-bot/_collections/dyb-operations.util.spec.ts +160 -160
- package/src/_modules/bot/_modules/dynamo-bot/_collections/dyb-operations.util.ts +55 -55
- package/src/_modules/bot/_modules/dynamo-bot/_models/dyb-platform.types.ts +15 -15
- package/src/_modules/bot/_modules/dynamo-bot/_services/dyb-messaging-provider.control-service.spec.ts +374 -374
- package/src/_modules/bot/_modules/dynamo-bot/_services/dyb-messaging-provider.control-service.ts +447 -447
- package/src/_modules/bot/_modules/dynamo-bot/index.ts +15 -15
- package/src/_modules/bot/_modules/slack-bot/_models/slb-platform.types.ts +9 -9
- package/src/_modules/bot/_modules/slack-bot/_services/slb-messaging-provider.control-service.spec.ts +344 -344
- package/src/_modules/bot/_modules/slack-bot/_services/slb-messaging-provider.control-service.ts +197 -197
- package/src/_modules/bot/_modules/slack-bot/index.ts +12 -12
- package/src/_modules/bot/_modules/teams-bot/_models/teb-platform.types.ts +9 -9
- package/src/_modules/bot/_modules/teams-bot/_services/teb-messaging-provider.control-service.spec.ts +345 -345
- package/src/_modules/bot/_modules/teams-bot/_services/teb-messaging-provider.control-service.ts +197 -197
- package/src/_modules/bot/_modules/teams-bot/index.ts +11 -11
- package/src/_modules/bot/_services/bot-commands.control-service.spec.ts +116 -116
- package/src/_modules/bot/_services/bot-commands.control-service.ts +158 -158
- package/src/_modules/bot/_services/bot-io.control-service.spec.ts +285 -285
- package/src/_modules/bot/_services/bot-io.control-service.ts +329 -329
- package/src/_modules/bot/_services/bot-main.control-service.spec.ts +208 -208
- package/src/_modules/bot/_services/bot-main.control-service.ts +489 -489
- package/src/_modules/bot/_services/bot-messaging-provider.service-base.spec.ts +349 -349
- package/src/_modules/bot/_services/bot-messaging-provider.service-base.ts +158 -158
- package/src/_modules/bot/_services/bot-routines.control-service.spec.ts +111 -111
- package/src/_modules/bot/_services/bot-routines.control-service.ts +78 -78
- package/src/_modules/bot/index.ts +37 -37
- package/src/_modules/custom-data/custom-data.controller.spec.ts +49 -49
- package/src/_modules/custom-data/custom-data.controller.ts +67 -67
- package/src/_modules/custom-data/custom-data.data-service.spec.ts +54 -54
- package/src/_modules/custom-data/custom-data.data-service.ts +21 -21
- package/src/_modules/custom-data/get-custom-data-routing-module.util.spec.ts +28 -28
- package/src/_modules/custom-data/get-custom-data-routing-module.util.ts +24 -24
- package/src/_modules/custom-data/index.ts +9 -9
- package/src/_modules/data-readers/_collections/dynts-sqlite-reader.util.spec.ts +176 -176
- package/src/_modules/data-readers/_collections/dynts-sqlite-reader.util.ts +203 -203
- package/src/_modules/data-readers/_models/interfaces/dynts-sqlite-reader.interface.ts +33 -33
- package/src/_modules/data-readers/index.ts +11 -11
- package/src/_modules/defaults/_collections/default-endpoints.util.ts +487 -487
- package/src/_modules/defaults/_models/default-user.data-model.ts +72 -72
- package/src/_modules/defaults/_services/default-auth.service.spec.ts +269 -269
- package/src/_modules/defaults/_services/default-auth.service.ts +177 -177
- package/src/_modules/defaults/_services/default-socket-events.service.spec.ts +42 -42
- package/src/_modules/defaults/_services/default-socket-events.service.ts +61 -61
- package/src/_modules/defaults/_services/default-user.data-service.spec.ts +187 -187
- package/src/_modules/defaults/_services/default-user.data-service.ts +98 -98
- package/src/_modules/defaults/index.ts +17 -17
- package/src/_modules/discord-assistant/_collections/dias-global-settings.const.ts +19 -19
- package/src/_modules/discord-assistant/_collections/dias.util.spec.ts +366 -366
- package/src/_modules/discord-assistant/_collections/dias.util.ts +132 -132
- package/src/_modules/discord-assistant/_models/dias-global-settings.interface.ts +19 -19
- package/src/_modules/discord-assistant/_models/dias-knowledge.data-model.ts +52 -52
- package/src/_modules/discord-assistant/_services/dias-chunk.data-service.ts +177 -177
- package/src/_modules/discord-assistant/_services/dias-io.control-service.spec.ts +108 -108
- package/src/_modules/discord-assistant/_services/dias-io.control-service.ts +69 -69
- package/src/_modules/discord-assistant/_services/dias-main.control-service.spec.ts +22 -22
- package/src/_modules/discord-assistant/_services/dias-main.control-service.ts +27 -27
- package/src/_modules/discord-assistant/_services/dias.service-base.spec.ts +195 -195
- package/src/_modules/discord-assistant/_services/dias.service-base.ts +76 -76
- package/src/_modules/discord-assistant/index.ts +38 -38
- package/src/_modules/discord-assistant-voiced/_services/dias-discord-bot.control-service.spec.ts +34 -34
- package/src/_modules/discord-assistant-voiced/_services/dias-discord-bot.control-service.ts +11 -11
- package/src/_modules/discord-assistant-voiced/index.ts +36 -36
- package/src/_modules/discord-bot/_collections/dibo-default-commands.const.ts +16 -16
- package/src/_modules/discord-bot/_collections/dibo-global-settings.conts.ts +55 -55
- package/src/_modules/discord-bot/_collections/dibo-operations.util.spec.ts +214 -214
- package/src/_modules/discord-bot/_collections/dibo-operations.util.ts +387 -387
- package/src/_modules/discord-bot/_models/dibo-command.interface.ts +12 -12
- package/src/_modules/discord-bot/_models/dibo-global-settings.interface.ts +98 -98
- package/src/_modules/discord-bot/_models/dibo-last-mention-date.inteface.ts +7 -7
- package/src/_modules/discord-bot/_models/dibo-last-message-date.interface.ts +6 -6
- package/src/_modules/discord-bot/_services/dibo-commands.control-service.spec.ts +154 -154
- package/src/_modules/discord-bot/_services/dibo-commands.control-service.ts +153 -153
- package/src/_modules/discord-bot/_services/dibo-io.control-service.spec.ts +264 -264
- package/src/_modules/discord-bot/_services/dibo-io.control-service.ts +306 -306
- package/src/_modules/discord-bot/_services/dibo-main.control-service.spec.ts +408 -408
- package/src/_modules/discord-bot/_services/dibo-main.control-service.ts +487 -487
- package/src/_modules/discord-bot/_services/dibo-routines.control-service.spec.ts +105 -105
- package/src/_modules/discord-bot/_services/dibo-routines.control-service.ts +97 -97
- package/src/_modules/discord-bot/index.ts +36 -36
- package/src/_modules/local-vector-search/_enums/lvs-search-mode.enum.ts +35 -35
- package/src/_modules/local-vector-search/_models/data-models/lvs-vector-persist.data-model.ts +60 -60
- package/src/_modules/local-vector-search/_models/lvs-search-result.interface.ts +17 -17
- package/src/_modules/local-vector-search/_services/lvs-bm25.util.spec.ts +159 -159
- package/src/_modules/local-vector-search/_services/lvs-bm25.util.ts +206 -206
- package/src/_modules/local-vector-search/_services/lvs-doc-chunk-data.service.spec.ts +418 -418
- package/src/_modules/local-vector-search/_services/lvs-doc-chunk-data.service.ts +276 -276
- package/src/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.spec.ts +480 -480
- package/src/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.ts +416 -416
- package/src/_modules/local-vector-search/_services/lvs-persistent-vector-pool.control-service.spec.ts +214 -214
- package/src/_modules/local-vector-search/_services/lvs-persistent-vector-pool.control-service.ts +186 -186
- package/src/_modules/local-vector-search/_services/lvs-vector-persist.data-service.spec.ts +167 -167
- package/src/_modules/local-vector-search/_services/lvs-vector-persist.data-service.ts +130 -130
- package/src/_modules/local-vector-search/_services/lvs-vector-pool.control-service.spec.ts +509 -509
- package/src/_modules/local-vector-search/_services/lvs-vector-pool.control-service.ts +323 -323
- package/src/_modules/local-vector-search/index.ts +16 -16
- package/src/_modules/logs/_models/file-log-entry.interface.ts +13 -13
- package/src/_modules/logs/_models/file-log-read-result.interface.ts +37 -37
- package/src/_modules/logs/file-log.service.spec.ts +341 -341
- package/src/_modules/logs/file-log.service.ts +466 -466
- package/src/_modules/logs/file-logs.controller.spec.ts +245 -245
- package/src/_modules/logs/file-logs.controller.ts +165 -165
- package/src/_modules/logs/get-file-logs-routing-module.util.ts +51 -51
- package/src/_modules/logs/get-logs-routing-module.util.ts +36 -36
- package/src/_modules/logs/index.ts +11 -11
- package/src/_modules/logs/log-buffer.service.ts +101 -101
- package/src/_modules/logs/logs.controller.ts +109 -109
- package/src/_modules/logs/logs.service.ts +100 -100
- package/src/_modules/mcp/_models/interfaces/dynts-mcp.interface.ts +111 -111
- package/src/_modules/mcp/_services/dynts-mcp-server.service-base.spec.ts +151 -151
- package/src/_modules/mcp/_services/dynts-mcp-server.service-base.ts +125 -125
- package/src/_modules/mcp/_services/dynts-mcp.adapter.ts +168 -168
- package/src/_modules/mcp/index.ts +13 -13
- package/src/_modules/messaging/README.md +354 -354
- package/src/_modules/messaging/_collections/get-messaging-routing-module.util.ts +26 -26
- package/src/_modules/messaging/_collections/msg-global-settings.const.ts +22 -22
- package/src/_modules/messaging/_collections/msg.util.spec.ts +226 -226
- package/src/_modules/messaging/_collections/msg.util.ts +83 -83
- package/src/_modules/messaging/_models/msg-global-settings.interface.ts +37 -37
- package/src/_modules/messaging/_services/msg-conversation.data-service.ts +146 -146
- package/src/_modules/messaging/_services/msg-events.service.spec.ts +219 -219
- package/src/_modules/messaging/_services/msg-events.service.ts +267 -267
- package/src/_modules/messaging/_services/msg-integration.control-service.ts +179 -179
- package/src/_modules/messaging/_services/msg-main.control-service.spec.ts +147 -147
- package/src/_modules/messaging/_services/msg-main.control-service.ts +571 -571
- package/src/_modules/messaging/_services/msg-message.data-service.ts +129 -129
- package/src/_modules/messaging/_services/msg.controller.spec.ts +201 -201
- package/src/_modules/messaging/_services/msg.controller.ts +370 -370
- package/src/_modules/messaging/index.ts +30 -30
- package/src/_modules/mock/app-extended-server.mock.ts +201 -201
- package/src/_modules/mock/app-integration-test.mock.ts +51 -51
- package/src/_modules/mock/app-params.mock.spec.ts +21 -21
- package/src/_modules/mock/app-params.mock.ts +9 -9
- package/src/_modules/mock/app-server.mock.ts +188 -188
- package/src/_modules/mock/auth-service.mock.spec.ts +47 -47
- package/src/_modules/mock/auth-service.mock.ts +28 -28
- package/src/_modules/mock/controller.mock.spec.ts +26 -26
- package/src/_modules/mock/controller.mock.ts +16 -16
- package/src/_modules/mock/data-model.mock.spec.ts +111 -111
- package/src/_modules/mock/data-model.mock.ts +82 -82
- package/src/_modules/mock/email-service-collection.mock.spec.ts +24 -24
- package/src/_modules/mock/email-service-collection.mock.ts +15 -15
- package/src/_modules/mock/email-service.mock.spec.ts +17 -17
- package/src/_modules/mock/email-service.mock.ts +20 -20
- package/src/_modules/mock/email-template.mock.html +14 -14
- package/src/_modules/mock/endpoint.mock.ts +91 -91
- package/src/_modules/mock/socket-client.mock.spec.ts +40 -40
- package/src/_modules/mock/socket-client.mock.ts +45 -45
- package/src/_modules/mock/socket-server.mock.spec.ts +44 -44
- package/src/_modules/mock/socket-server.mock.ts +46 -46
- package/src/_modules/oauth2/_routes/oauth2.controller.spec.ts +107 -107
- package/src/_modules/oauth2/_routes/oauth2.controller.ts +98 -98
- package/src/_modules/oauth2/_services/oauth2.auth-service.spec.ts +254 -254
- package/src/_modules/oauth2/_services/oauth2.auth-service.ts +232 -232
- package/src/_modules/oauth2/_services/oauth2.control-service.spec.ts +585 -585
- package/src/_modules/oauth2/_services/oauth2.control-service.ts +653 -653
- package/src/_modules/oauth2/index.ts +17 -17
- package/src/_modules/privacy-lifecycle/_enums/privacy-consent-decision.type-enum.ts +5 -5
- package/src/_modules/privacy-lifecycle/_enums/privacy-contributor-action.type-enum.ts +10 -10
- package/src/_modules/privacy-lifecycle/_enums/privacy-contributor-outcome.type-enum.ts +7 -7
- package/src/_modules/privacy-lifecycle/_enums/privacy-request-state.type-enum.ts +15 -15
- package/src/_modules/privacy-lifecycle/_enums/privacy-request.type-enum.ts +9 -9
- package/src/_modules/privacy-lifecycle/_models/privacy-consent-input.interface.ts +12 -12
- package/src/_modules/privacy-lifecycle/_models/privacy-consent-persistence-result.interface.ts +7 -7
- package/src/_modules/privacy-lifecycle/_models/privacy-consent-record.interface.ts +15 -15
- package/src/_modules/privacy-lifecycle/_models/privacy-consent-result.interface.ts +7 -7
- package/src/_modules/privacy-lifecycle/_models/privacy-consent-view.interface.ts +13 -13
- package/src/_modules/privacy-lifecycle/_models/privacy-contributor-context.interface.ts +9 -9
- package/src/_modules/privacy-lifecycle/_models/privacy-contributor-outcome.interface.ts +14 -14
- package/src/_modules/privacy-lifecycle/_models/privacy-contributor-plan.interface.ts +8 -8
- package/src/_modules/privacy-lifecycle/_models/privacy-contributor.interface.ts +17 -17
- package/src/_modules/privacy-lifecycle/_models/privacy-ledger-adapter.interface.ts +21 -21
- package/src/_modules/privacy-lifecycle/_models/privacy-ledger-result.interface.ts +9 -9
- package/src/_modules/privacy-lifecycle/_models/privacy-ledger-settings.interface.ts +7 -7
- package/src/_modules/privacy-lifecycle/_models/privacy-legal-acceptance-input.interface.ts +10 -10
- package/src/_modules/privacy-lifecycle/_models/privacy-legal-acceptance-persistence-result.interface.ts +7 -7
- package/src/_modules/privacy-lifecycle/_models/privacy-legal-acceptance-result.interface.ts +7 -7
- package/src/_modules/privacy-lifecycle/_models/privacy-legal-acceptance-view.interface.ts +11 -11
- package/src/_modules/privacy-lifecycle/_models/privacy-legal-acceptance.interface.ts +13 -13
- package/src/_modules/privacy-lifecycle/_models/privacy-lifecycle-adapter.interface.ts +19 -19
- package/src/_modules/privacy-lifecycle/_models/privacy-lifecycle-settings.interface.ts +9 -9
- package/src/_modules/privacy-lifecycle/_models/privacy-request-create-result.interface.ts +7 -7
- package/src/_modules/privacy-lifecycle/_models/privacy-request-open.interface.ts +10 -10
- package/src/_modules/privacy-lifecycle/_models/privacy-request-persistence-create-result.interface.ts +7 -7
- package/src/_modules/privacy-lifecycle/_models/privacy-request-record.interface.ts +21 -21
- package/src/_modules/privacy-lifecycle/_models/privacy-request-result.interface.ts +8 -8
- package/src/_modules/privacy-lifecycle/_models/privacy-request-view.interface.ts +20 -20
- package/src/_modules/privacy-lifecycle/index.ts +40 -40
- package/src/_modules/privacy-lifecycle/privacy-ledger.control-service.spec.ts +206 -206
- package/src/_modules/privacy-lifecycle/privacy-ledger.control-service.ts +253 -253
- package/src/_modules/privacy-lifecycle/privacy-lifecycle.control-service.spec.ts +353 -353
- package/src/_modules/privacy-lifecycle/privacy-lifecycle.control-service.ts +586 -586
- package/src/_modules/rate-limit/_enums/rate-limit-store-kind.type-enum.ts +5 -5
- package/src/_modules/rate-limit/_models/rate-limit-config.interface.ts +82 -82
- package/src/_modules/rate-limit/_models/rate-limit-consume-request.interface.ts +9 -9
- package/src/_modules/rate-limit/_models/rate-limit-consume-result.interface.ts +6 -6
- package/src/_modules/rate-limit/_models/rate-limit-policy.interface.ts +16 -16
- package/src/_modules/rate-limit/_models/rate-limit-store.interface.ts +9 -9
- package/src/_modules/rate-limit/index.ts +8 -8
- package/src/_modules/rate-limit/rate-limit-in-memory.store.ts +91 -91
- package/src/_modules/rate-limit/rate-limit.middleware.spec.ts +488 -488
- package/src/_modules/rate-limit/rate-limit.middleware.ts +504 -504
- package/src/_modules/scheduler/_models/scheduler-job.interface.ts +35 -35
- package/src/_modules/scheduler/get-scheduler-routing-module.util.ts +33 -33
- package/src/_modules/scheduler/index.ts +8 -8
- package/src/_modules/scheduler/scheduler.controller.spec.ts +42 -42
- package/src/_modules/scheduler/scheduler.controller.ts +69 -69
- package/src/_modules/scheduler/scheduler.service.spec.ts +141 -141
- package/src/_modules/scheduler/scheduler.service.ts +176 -176
- package/src/_modules/scoped-config/_enums/dynts-scoped-config-level.enum.ts +22 -22
- package/src/_modules/scoped-config/_models/data-models/dynts-scoped-config.data-model.ts +82 -82
- package/src/_modules/scoped-config/_models/interfaces/dynts-scoped-config.interface.ts +107 -107
- package/src/_modules/scoped-config/_services/dynts-scoped-config.control-service.spec.ts +312 -312
- package/src/_modules/scoped-config/_services/dynts-scoped-config.control-service.ts +311 -311
- package/src/_modules/scoped-config/_services/dynts-scoped-config.data-service.spec.ts +123 -123
- package/src/_modules/scoped-config/_services/dynts-scoped-config.data-service.ts +108 -108
- package/src/_modules/scoped-config/index.ts +17 -17
- package/src/_modules/server/errors/errors.control-service.spec.ts +246 -246
- package/src/_modules/server/errors/errors.control-service.ts +100 -100
- package/src/_modules/server/errors/errors.controller.spec.ts +340 -340
- package/src/_modules/server/errors/errors.controller.ts +559 -559
- package/src/_modules/server/errors/errors.data-service.spec.ts +480 -480
- package/src/_modules/server/errors/errors.data-service.ts +867 -867
- package/src/_modules/server/index.ts +37 -27
- package/src/_modules/server/safe-diagnostic/safe-diagnostic-cause.type-enum.ts +8 -0
- package/src/_modules/server/safe-diagnostic/safe-diagnostic-stage.type-enum.ts +19 -0
- package/src/_modules/server/safe-diagnostic/safe-diagnostic.control-service.spec.ts +124 -0
- package/src/_modules/server/safe-diagnostic/safe-diagnostic.control-service.ts +99 -0
- package/src/_modules/server/safe-diagnostic/safe-diagnostic.interface.ts +20 -0
- package/src/_modules/server/server-status/db-readiness-probe-code.type-enum.ts +13 -0
- package/src/_modules/server/server-status/db-readiness-probe-stage.type-enum.ts +7 -0
- package/src/_modules/server/server-status/db-readiness-probe.control-service.spec.ts +235 -0
- package/src/_modules/server/server-status/db-readiness-probe.control-service.ts +158 -0
- package/src/_modules/server/server-status/db-readiness-probe.interface.ts +20 -0
- package/src/_modules/server/server-status/server-status-snapshot.control-service.spec.ts +70 -70
- package/src/_modules/server/server-status/server-status-snapshot.control-service.ts +17 -17
- package/src/_modules/server/server-status/server-status-snapshot.data-service.spec.ts +77 -77
- package/src/_modules/server/server-status/server-status-snapshot.data-service.ts +37 -37
- package/src/_modules/server/server-status/server-status.control-service.spec.ts +672 -672
- package/src/_modules/server/server-status/server-status.control-service.ts +490 -490
- package/src/_modules/server/server-status/server-status.controller.spec.ts +276 -276
- package/src/_modules/server/server-status/server-status.controller.ts +336 -336
- package/src/_modules/socket/_enums/socket-security.enum.ts +11 -11
- package/src/_modules/socket/_models/socket-client-service-params.control-model.spec.ts +32 -32
- package/src/_modules/socket/_models/socket-client-service-params.control-model.ts +22 -22
- package/src/_modules/socket/_models/socket-presence.control-model.spec.ts +165 -165
- package/src/_modules/socket/_models/socket-presence.control-model.ts +211 -211
- package/src/_modules/socket/_models/socket-server-service-params.control-model.spec.ts +69 -69
- package/src/_modules/socket/_models/socket-server-service-params.control-model.ts +33 -33
- package/src/_modules/socket/_services/socket-client.service.spec.ts +15 -15
- package/src/_modules/socket/_services/socket-client.service.ts +260 -260
- package/src/_modules/socket/_services/socket-server.service.spec.ts +272 -272
- package/src/_modules/socket/_services/socket-server.service.ts +1037 -1037
- package/src/_modules/socket/app-extended.integration.spec.ts +85 -85
- package/src/_modules/socket/app-extended.server.ts +648 -648
- package/src/_modules/socket/index.ts +42 -42
- package/src/_modules/test/get-test-routing-module.util.spec.ts +28 -28
- package/src/_modules/test/get-test-routing-module.util.ts +23 -23
- package/src/_modules/test/index.ts +11 -11
- package/src/_modules/test/test.controller.spec.ts +72 -72
- package/src/_modules/test/test.controller.ts +115 -115
- package/src/_modules/test-email-sink/_collections/test-email-pattern.const.ts +10 -10
- package/src/_modules/test-email-sink/_models/data-models/dynts-sent-test-mail.data-model.ts +41 -41
- package/src/_modules/test-email-sink/_services/dynts-test-email-sink.service.spec.ts +112 -112
- package/src/_modules/test-email-sink/_services/dynts-test-email-sink.service.ts +141 -141
- package/src/_modules/test-email-sink/get-sent-mail-routing-module.util.ts +29 -29
- package/src/_modules/test-email-sink/index.ts +11 -11
- package/src/_modules/test-email-sink/test-email-sink.controller.ts +83 -83
- package/src/_modules/usage/get-usage-routing-module.util.ts +22 -22
- package/src/_modules/usage/index.ts +15 -15
- package/src/_modules/usage/usage.controller.spec.ts +106 -106
- package/src/_modules/usage/usage.controller.ts +140 -140
- package/src/_modules/usage/usage.data-service.spec.ts +332 -332
- package/src/_modules/usage/usage.data-service.ts +185 -185
- package/src/_services/base/api.service-base.spec.ts +125 -125
- package/src/_services/base/api.service-base.ts +74 -74
- package/src/_services/base/archive-data.service.spec.ts +209 -209
- package/src/_services/base/archive-data.service.ts +228 -228
- package/src/_services/base/data.service.spec.ts +784 -784
- package/src/_services/base/data.service.ts +2792 -2792
- package/src/_services/base/db.service.encryption.spec.ts +76 -76
- package/src/_services/base/db.service.spec.ts +160 -160
- package/src/_services/base/db.service.ts +1698 -1698
- package/src/_services/base/singleton.service-base.spec.ts +28 -28
- package/src/_services/base/singleton.service-base.ts +24 -24
- package/src/_services/base/singleton.service.spec.ts +114 -114
- package/src/_services/base/singleton.service.ts +38 -38
- package/src/_services/core/api.service.spec.ts +187 -187
- package/src/_services/core/api.service.ts +627 -627
- package/src/_services/core/auth.service.spec.ts +159 -159
- package/src/_services/core/auth.service.ts +174 -174
- package/src/_services/core/collection-growth-monitor.service.spec.ts +119 -119
- package/src/_services/core/collection-growth-monitor.service.ts +234 -234
- package/src/_services/core/db-stats.service.ts +104 -104
- package/src/_services/core/diagnostics.service.spec.ts +44 -44
- package/src/_services/core/diagnostics.service.ts +158 -158
- package/src/_services/core/email.service.spec.ts +85 -85
- package/src/_services/core/email.service.ts +757 -757
- package/src/_services/core/event-loop-diag.service.spec.ts +22 -22
- package/src/_services/core/event-loop-diag.service.ts +144 -144
- package/src/_services/core/global.service.spec.ts +292 -292
- package/src/_services/core/global.service.ts +466 -465
- package/src/_services/core/memory-guard.service.spec.ts +245 -245
- package/src/_services/core/memory-guard.service.ts +481 -481
- package/src/_services/core/migration-runner.service.spec.ts +91 -91
- package/src/_services/core/migration-runner.service.ts +106 -106
- package/src/_services/core/mongo-transaction.control-service.spec.ts +165 -165
- package/src/_services/core/mongo-transaction.control-service.ts +148 -148
- package/src/_services/core/request-hunter.service.spec.ts +124 -124
- package/src/_services/core/request-hunter.service.ts +157 -157
- package/src/_services/core/service-collection.service.spec.ts +46 -46
- package/src/_services/core/service-collection.service.ts +6 -6
- package/src/_services/route/controller.service.spec.ts +53 -53
- package/src/_services/route/controller.service.ts +148 -148
- package/src/_services/route/routing-module.service.spec.ts +98 -98
- package/src/_services/route/routing-module.service.ts +330 -330
- package/src/_services/server/app-safe-diagnostic.spec.ts +124 -0
- package/src/_services/server/app.server-retention.spec.ts +106 -106
- package/src/_services/server/app.server.ts +1865 -1918
- package/src/_services/shared.static-service.spec.ts +99 -99
- package/src/_services/shared.static-service.ts +78 -78
- package/src/index.ts +117 -117
- package/tsconfig.app.json +12 -12
- package/tsconfig.json +42 -42
- package/.dynamo/logs/cicd-pipeline/output.log +0 -2883
- package/.dynamo/logs/cicd-pipeline/status.json +0 -74
|
@@ -1,81 +1,81 @@
|
|
|
1
|
-
# FR-047 P2+P3 — Function-calling agent-loop + OpenAI-wire translator (2026-06-01)
|
|
2
|
-
|
|
3
|
-
**Commits**: `de6f79e` — v01.15.36 → v01.15.37 (agent-loop + OpenAI translator)
|
|
4
|
-
`514153f` — → v01.15.40 (critical reasoning-model fix; see below)
|
|
5
|
-
**Parent**: `__agent/feature-requests/FR-047-phase-2-agent-loop-service-base.md` + `FR-047-phase-3-openai-fdpai-local.md`
|
|
6
|
-
**Pattern**: `fdp-documentations/guidelines/development/ai-function-calling.md`
|
|
7
|
-
**Depends on**: `@futdevpro/fsm-dynamo` ≥ 1.15.17 (tool vocabulary + registry; bumped to 1.15.18 here)
|
|
8
|
-
|
|
9
|
-
## What
|
|
10
|
-
|
|
11
|
-
Implements the provider-agnostic function-calling agent-loop in `DyNTS_AI_LLM_ServiceBase` and the
|
|
12
|
-
first concrete provider translator in `DyNTS_OAI_LLM_ServiceBase`. After this, OpenAI tool calling
|
|
13
|
-
works end-to-end through the strategic agnostic layer.
|
|
14
|
-
|
|
15
|
-
## Why
|
|
16
|
-
|
|
17
|
-
FR-047 P1 (fsm) shipped the vocabulary; the execution layer had the explicit TODO comment in
|
|
18
|
-
`getMessageCreateInput` ("'llm-tool-use' categoria a tools bevezetésekor — jövőbeli FR"). This is that FR.
|
|
19
|
-
The proven loop logic is ported from the legacy `FDPNTS_GPT_ControlService.getAnswerWithTools`.
|
|
20
|
-
|
|
21
|
-
## Design
|
|
22
|
-
|
|
23
|
-
### Agent-loop in `DyNTS_AI_LLM_ServiceBase` (written ONCE, concrete)
|
|
24
|
-
- `requestWithTools({ conversation, tools, toolHandlers, settings?, issuer, maxIterations? })` — public entry.
|
|
25
|
-
Tools are a **request parameter** (not on settings). Resolves model → capability pre-check → `runToolLoop`.
|
|
26
|
-
- `runToolLoop` — the loop: `callModelWithTools` → if `toolCalls`, push assistant-tool-call message,
|
|
27
|
-
run each handler (`runToolCall`), push `role:'tool'` result messages, repeat; exit on no-tool-call
|
|
28
|
-
final answer or `maxIterations` (default 8 → `DyFM_Error` `DyNTS-AILSB-TL0`).
|
|
29
|
-
- `runToolCall` — **never throws**; missing/throwing handler → `ERROR …` string with `isError:true` (no `[object Object]`).
|
|
30
|
-
- `assertToolsSupported(modelId)` — uses `DyFM_AI_ModelRegistry_Util.modelSupportsTools(getModelRegistry(), id)`;
|
|
31
|
-
rejects BEFORE any API call if unsupported (critical for Local).
|
|
32
|
-
- `callModelWithTools` + `getModelRegistry` — **non-abstract safe defaults** (throw / `[]`); providers override.
|
|
33
|
-
Chosen over `abstract` so NO existing concrete subclass breaks (incremental rollout).
|
|
34
|
-
|
|
35
|
-
### OpenAI translator in `DyNTS_OAI_LLM_ServiceBase`
|
|
36
|
-
- `getModelRegistry()` → `DyFM_OAI_Models`.
|
|
37
|
-
- `callModelWithTools` — builds the native request (system + `toOpenAIMessage`-mapped conversation incl.
|
|
38
|
-
tool-call/tool-result messages + `toOpenAITool`), calls the SDK, normalizes the response (`toolCalls`
|
|
39
|
-
from `message.tool_calls`, args JSON-parsed), emits `'llm-tool-use'` cost-event.
|
|
40
|
-
- `toOpenAIMessage` — maps `role:'tool'` → `{role:'tool',tool_call_id,content}`, assistant-with-toolCalls →
|
|
41
|
-
`{role:'assistant',content|null,tool_calls:[…]}`.
|
|
42
|
-
|
|
43
|
-
### Refinement vs the FR plan
|
|
44
|
-
The registry lookup util takes the **registry array as a param** (`(models, id)`), not `(provider, id)` —
|
|
45
|
-
so the fsm core never imports a provider submodule. The provider service supplies its own registry.
|
|
46
|
-
|
|
47
|
-
## CRITICAL fix (`514153f`, v01.15.40) — found in code review
|
|
48
|
-
|
|
49
|
-
The registry's tool-capable models (gpt-5.5, gpt-5.4-mini, o3-pro) are **reasoning models** that reject
|
|
50
|
-
`temperature`/`top_p`/`frequency_penalty`/`presence_penalty` with HTTP 400. `callModelWithTools` sent them
|
|
51
|
-
unconditionally (default temperature=0) → **every tool call 400'd on the flagship models**. Fix:
|
|
52
|
-
- `isReasoningModel(modelId)` = `/^gpt-5/ || /^o[0-9]/`; reasoning → omit the 4 sampling params.
|
|
53
|
-
- Omit `tools`/`tool_choice` when the tool array is empty (empty `[]` → 400).
|
|
54
|
-
- Clear error when no model is configured.
|
|
55
|
-
This is the local OpenAI-specific application of the FR-048 per-model-settings principle.
|
|
56
|
-
See `[[reference_oai_reasoning_models_reject_sampling_params]]`.
|
|
57
|
-
|
|
58
|
-
## Spec coverage
|
|
59
|
-
|
|
60
|
-
`oai-llm.service-base.tools.spec.ts` (mocked OpenAI client, no network) — 6 specs:
|
|
61
|
-
loop converges / never-throw on handler error / capability-reject for embedding model /
|
|
62
|
-
reasoning omits sampling params / non-reasoning sends them / empty-tools omitted.
|
|
63
|
-
`npx jasmine`: **1256/0** (146 pending pre-existing).
|
|
64
|
-
|
|
65
|
-
## What's NOT in this commit
|
|
66
|
-
|
|
67
|
-
- Anthropic / Google / FdpAI / Local LLM bases + translators (FR-047 P4/P5).
|
|
68
|
-
- The NON-tool path (`getMessageCreateInput`/`resolveMessage`) still forwards sampling params → reasoning
|
|
69
|
-
completions would 400 (pre-existing; FR-048 / separate fix).
|
|
70
|
-
- Adventor migration (FR-047 P6).
|
|
71
|
-
- FR-048 general per-model settings reconciler.
|
|
72
|
-
|
|
73
|
-
## Consumer pattern
|
|
74
|
-
|
|
75
|
-
See `fdp-documentations/guidelines/development/ai-function-calling.md` ("How to USE it").
|
|
76
|
-
|
|
77
|
-
## Cross-references
|
|
78
|
-
|
|
79
|
-
- `fdp-documentations/guidelines/development/ai-function-calling.md` (pattern + provider-translator how-to)
|
|
80
|
-
- `NPM-packages/dynamo-fsm/__documentations/2026-06-01-fr047-p1-function-calling-vocabulary.md` (vocabulary)
|
|
81
|
-
- legacy `NPM-packages/fdp-templates-nts/src/_modules/gpt/_services/gpt-handler.control-service.ts` (logic source)
|
|
1
|
+
# FR-047 P2+P3 — Function-calling agent-loop + OpenAI-wire translator (2026-06-01)
|
|
2
|
+
|
|
3
|
+
**Commits**: `de6f79e` — v01.15.36 → v01.15.37 (agent-loop + OpenAI translator)
|
|
4
|
+
`514153f` — → v01.15.40 (critical reasoning-model fix; see below)
|
|
5
|
+
**Parent**: `__agent/feature-requests/FR-047-phase-2-agent-loop-service-base.md` + `FR-047-phase-3-openai-fdpai-local.md`
|
|
6
|
+
**Pattern**: `fdp-documentations/guidelines/development/ai-function-calling.md`
|
|
7
|
+
**Depends on**: `@futdevpro/fsm-dynamo` ≥ 1.15.17 (tool vocabulary + registry; bumped to 1.15.18 here)
|
|
8
|
+
|
|
9
|
+
## What
|
|
10
|
+
|
|
11
|
+
Implements the provider-agnostic function-calling agent-loop in `DyNTS_AI_LLM_ServiceBase` and the
|
|
12
|
+
first concrete provider translator in `DyNTS_OAI_LLM_ServiceBase`. After this, OpenAI tool calling
|
|
13
|
+
works end-to-end through the strategic agnostic layer.
|
|
14
|
+
|
|
15
|
+
## Why
|
|
16
|
+
|
|
17
|
+
FR-047 P1 (fsm) shipped the vocabulary; the execution layer had the explicit TODO comment in
|
|
18
|
+
`getMessageCreateInput` ("'llm-tool-use' categoria a tools bevezetésekor — jövőbeli FR"). This is that FR.
|
|
19
|
+
The proven loop logic is ported from the legacy `FDPNTS_GPT_ControlService.getAnswerWithTools`.
|
|
20
|
+
|
|
21
|
+
## Design
|
|
22
|
+
|
|
23
|
+
### Agent-loop in `DyNTS_AI_LLM_ServiceBase` (written ONCE, concrete)
|
|
24
|
+
- `requestWithTools({ conversation, tools, toolHandlers, settings?, issuer, maxIterations? })` — public entry.
|
|
25
|
+
Tools are a **request parameter** (not on settings). Resolves model → capability pre-check → `runToolLoop`.
|
|
26
|
+
- `runToolLoop` — the loop: `callModelWithTools` → if `toolCalls`, push assistant-tool-call message,
|
|
27
|
+
run each handler (`runToolCall`), push `role:'tool'` result messages, repeat; exit on no-tool-call
|
|
28
|
+
final answer or `maxIterations` (default 8 → `DyFM_Error` `DyNTS-AILSB-TL0`).
|
|
29
|
+
- `runToolCall` — **never throws**; missing/throwing handler → `ERROR …` string with `isError:true` (no `[object Object]`).
|
|
30
|
+
- `assertToolsSupported(modelId)` — uses `DyFM_AI_ModelRegistry_Util.modelSupportsTools(getModelRegistry(), id)`;
|
|
31
|
+
rejects BEFORE any API call if unsupported (critical for Local).
|
|
32
|
+
- `callModelWithTools` + `getModelRegistry` — **non-abstract safe defaults** (throw / `[]`); providers override.
|
|
33
|
+
Chosen over `abstract` so NO existing concrete subclass breaks (incremental rollout).
|
|
34
|
+
|
|
35
|
+
### OpenAI translator in `DyNTS_OAI_LLM_ServiceBase`
|
|
36
|
+
- `getModelRegistry()` → `DyFM_OAI_Models`.
|
|
37
|
+
- `callModelWithTools` — builds the native request (system + `toOpenAIMessage`-mapped conversation incl.
|
|
38
|
+
tool-call/tool-result messages + `toOpenAITool`), calls the SDK, normalizes the response (`toolCalls`
|
|
39
|
+
from `message.tool_calls`, args JSON-parsed), emits `'llm-tool-use'` cost-event.
|
|
40
|
+
- `toOpenAIMessage` — maps `role:'tool'` → `{role:'tool',tool_call_id,content}`, assistant-with-toolCalls →
|
|
41
|
+
`{role:'assistant',content|null,tool_calls:[…]}`.
|
|
42
|
+
|
|
43
|
+
### Refinement vs the FR plan
|
|
44
|
+
The registry lookup util takes the **registry array as a param** (`(models, id)`), not `(provider, id)` —
|
|
45
|
+
so the fsm core never imports a provider submodule. The provider service supplies its own registry.
|
|
46
|
+
|
|
47
|
+
## CRITICAL fix (`514153f`, v01.15.40) — found in code review
|
|
48
|
+
|
|
49
|
+
The registry's tool-capable models (gpt-5.5, gpt-5.4-mini, o3-pro) are **reasoning models** that reject
|
|
50
|
+
`temperature`/`top_p`/`frequency_penalty`/`presence_penalty` with HTTP 400. `callModelWithTools` sent them
|
|
51
|
+
unconditionally (default temperature=0) → **every tool call 400'd on the flagship models**. Fix:
|
|
52
|
+
- `isReasoningModel(modelId)` = `/^gpt-5/ || /^o[0-9]/`; reasoning → omit the 4 sampling params.
|
|
53
|
+
- Omit `tools`/`tool_choice` when the tool array is empty (empty `[]` → 400).
|
|
54
|
+
- Clear error when no model is configured.
|
|
55
|
+
This is the local OpenAI-specific application of the FR-048 per-model-settings principle.
|
|
56
|
+
See `[[reference_oai_reasoning_models_reject_sampling_params]]`.
|
|
57
|
+
|
|
58
|
+
## Spec coverage
|
|
59
|
+
|
|
60
|
+
`oai-llm.service-base.tools.spec.ts` (mocked OpenAI client, no network) — 6 specs:
|
|
61
|
+
loop converges / never-throw on handler error / capability-reject for embedding model /
|
|
62
|
+
reasoning omits sampling params / non-reasoning sends them / empty-tools omitted.
|
|
63
|
+
`npx jasmine`: **1256/0** (146 pending pre-existing).
|
|
64
|
+
|
|
65
|
+
## What's NOT in this commit
|
|
66
|
+
|
|
67
|
+
- Anthropic / Google / FdpAI / Local LLM bases + translators (FR-047 P4/P5).
|
|
68
|
+
- The NON-tool path (`getMessageCreateInput`/`resolveMessage`) still forwards sampling params → reasoning
|
|
69
|
+
completions would 400 (pre-existing; FR-048 / separate fix).
|
|
70
|
+
- Adventor migration (FR-047 P6).
|
|
71
|
+
- FR-048 general per-model settings reconciler.
|
|
72
|
+
|
|
73
|
+
## Consumer pattern
|
|
74
|
+
|
|
75
|
+
See `fdp-documentations/guidelines/development/ai-function-calling.md` ("How to USE it").
|
|
76
|
+
|
|
77
|
+
## Cross-references
|
|
78
|
+
|
|
79
|
+
- `fdp-documentations/guidelines/development/ai-function-calling.md` (pattern + provider-translator how-to)
|
|
80
|
+
- `NPM-packages/dynamo-fsm/__documentations/2026-06-01-fr047-p1-function-calling-vocabulary.md` (vocabulary)
|
|
81
|
+
- legacy `NPM-packages/fdp-templates-nts/src/_modules/gpt/_services/gpt-handler.control-service.ts` (logic source)
|
|
@@ -1,73 +1,73 @@
|
|
|
1
|
-
# FR-193 — `DyNTS_MemoryGuard` (bedrock OOM korai-figyelmeztetés)
|
|
2
|
-
|
|
3
|
-
**Csomag:** `@futdevpro/nts-dynamo` · **Dátum:** 2026-06-15
|
|
4
|
-
|
|
5
|
-
## Probléma
|
|
6
|
-
|
|
7
|
-
A Node heap-OOM (`--max-old-space-size` túllépés — pl. egy óriási `JSON.parse`, mint az
|
|
8
|
-
Overseernél a CCAP több-tíz-MB-os `cdpReport`-ja) a process-t **azonnal megöli**. A
|
|
9
|
-
`process.on('uncaughtException')` NEM kapja el — a crash pillanatában már **nincs mód a
|
|
10
|
-
hibát rögzíteni**. Eredmény: a szerver „csak eltűnik", nyom nélkül, és a kézi diagnózis
|
|
11
|
-
nehéz. Az EGYETLEN megbízható idő a rögzítésre a crash **ELŐTT** van.
|
|
12
|
-
|
|
13
|
-
## Megoldás — `DyNTS_MemoryGuard`
|
|
14
|
-
|
|
15
|
-
Bedrock, self-installing heap-watchdog **minden nts-szerverhez**. Periodikusan figyeli a
|
|
16
|
-
heap-kihasználtságot, és a `--max-old-space-size` plafonhoz közeledve **tartós rekordot**
|
|
17
|
-
hagy — mielőtt a fatal OOM bekövetkezne.
|
|
18
|
-
|
|
19
|
-
- **Megfigyel:** `v8.getHeapStatistics().heap_size_limit` (a valódi plafon) vs
|
|
20
|
-
`process.memoryUsage().heapUsed`, default 10s-enként.
|
|
21
|
-
- **Rögzít:** küszöb-átlépéskor `DyFM_Log` + `DyNTS_GlobalService.globalErrorHandler`
|
|
22
|
-
(az Errors-rendszer + Discord, ha bekötve). `warning` → `DyFM_ErrorLevel.warning`,
|
|
23
|
-
`critical` → `.critical`. Plusz egy in-memory ring-buffer (`getHistory()`) +
|
|
24
|
-
`getStatus()` (állapot + csúcsok) egy esetleges status-endpointhoz.
|
|
25
|
-
- **Hiszterézis:** eseményt CSAK állapot-váltáskor jelez (normal→warning→critical), és a
|
|
26
|
-
`recoveryMargin`-nyit a warning alá esve jelez `recovered`-et → nincs küszöb-körüli spam.
|
|
27
|
-
- **NEM csinál:** nem állítja le/újraindítja a process-t (az a konténer `restart:` policy
|
|
28
|
-
dolga), és nem próbálja elkapni a fatal OOM-ot (nem lehet). Tisztán megfigyelés +
|
|
29
|
-
rögzítés + opcionális `onCritical` hook (amivel a fogyasztó terhet dobhat).
|
|
30
|
-
- **Biztonság:** minden út `try/catch`-elt — egy figyelő-réteg SOHA nem dönthet be egy
|
|
31
|
-
szervert. A timer `unref()`-elt (nem tartja életben a process-t).
|
|
32
|
-
|
|
33
|
-
## Használat
|
|
34
|
-
|
|
35
|
-
**Automatikus (default-on):** a base `App` startup feltelepíti, ha
|
|
36
|
-
`DyNTS_global_settings.memoryGuard.enabled === true` (alapértelmezés szerint igen). Tehát
|
|
37
|
-
**minden nts-szerver megkapja** az nts-dynamo bump után — kód nélkül.
|
|
38
|
-
|
|
39
|
-
**Explicit / testreszabott:**
|
|
40
|
-
```ts
|
|
41
|
-
import { DyNTS_MemoryGuard } from '@futdevpro/nts-dynamo';
|
|
42
|
-
|
|
43
|
-
DyNTS_MemoryGuard.getInstance().install({
|
|
44
|
-
heapWarningThreshold: 80,
|
|
45
|
-
heapCriticalThreshold: 92,
|
|
46
|
-
onCritical: (e) => { /* pl. terhelés-dobás / külső riasztás */ },
|
|
47
|
-
});
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
**Konfiguráció** (`DyNTS_global_settings.memoryGuard`, defaultok):
|
|
51
|
-
| mező | default | jelentés |
|
|
52
|
-
|------|---------|----------|
|
|
53
|
-
| `enabled` | `true` | a base App feltelepíti |
|
|
54
|
-
| `pollIntervalMs` | `10000` | poll-gyakoriság |
|
|
55
|
-
| `heapWarningThreshold` | `85` | warning a heap-plafon %-ában |
|
|
56
|
-
| `heapCriticalThreshold` | `95` | critical % |
|
|
57
|
-
| `recoveryMargin` | `10` | a warning alatti margó a `recovered`-hez |
|
|
58
|
-
| `maxHistoryCount` | `100` | megőrzött események |
|
|
59
|
-
|
|
60
|
-
## Az OOM-self-healing nagyobb képe
|
|
61
|
-
|
|
62
|
-
Ez a **„rögzítés" rétege** (record). A **„restart" rétege** a konténer-szintű
|
|
63
|
-
`restart: on-failure:N` + `mem_limit` (compose, fdp-devops) — együtt adják a teljes
|
|
64
|
-
self-healinget: a guard nyomot hagy a near-OOM-ról, a restart-policy auto-helyreállít a
|
|
65
|
-
crash után. A **forrás-prevenció** (a túl nagy payload parse-olásának elkerülése) külön
|
|
66
|
-
réteg (runner-oldali report-cap / body-limit).
|
|
67
|
-
|
|
68
|
-
## Fájlok
|
|
69
|
-
- `src/_services/core/memory-guard.service.ts` + `.spec.ts` (11 spec)
|
|
70
|
-
- `src/_models/interfaces/global-settings.interface.ts` (`memoryGuard` mező)
|
|
71
|
-
- `src/_collections/global-settings.const.ts` (defaultok, enabled:true)
|
|
72
|
-
- `src/_services/server/app.server.ts` (guarded auto-install a startup-ban)
|
|
73
|
-
- `src/index.ts` (fő-export)
|
|
1
|
+
# FR-193 — `DyNTS_MemoryGuard` (bedrock OOM korai-figyelmeztetés)
|
|
2
|
+
|
|
3
|
+
**Csomag:** `@futdevpro/nts-dynamo` · **Dátum:** 2026-06-15
|
|
4
|
+
|
|
5
|
+
## Probléma
|
|
6
|
+
|
|
7
|
+
A Node heap-OOM (`--max-old-space-size` túllépés — pl. egy óriási `JSON.parse`, mint az
|
|
8
|
+
Overseernél a CCAP több-tíz-MB-os `cdpReport`-ja) a process-t **azonnal megöli**. A
|
|
9
|
+
`process.on('uncaughtException')` NEM kapja el — a crash pillanatában már **nincs mód a
|
|
10
|
+
hibát rögzíteni**. Eredmény: a szerver „csak eltűnik", nyom nélkül, és a kézi diagnózis
|
|
11
|
+
nehéz. Az EGYETLEN megbízható idő a rögzítésre a crash **ELŐTT** van.
|
|
12
|
+
|
|
13
|
+
## Megoldás — `DyNTS_MemoryGuard`
|
|
14
|
+
|
|
15
|
+
Bedrock, self-installing heap-watchdog **minden nts-szerverhez**. Periodikusan figyeli a
|
|
16
|
+
heap-kihasználtságot, és a `--max-old-space-size` plafonhoz közeledve **tartós rekordot**
|
|
17
|
+
hagy — mielőtt a fatal OOM bekövetkezne.
|
|
18
|
+
|
|
19
|
+
- **Megfigyel:** `v8.getHeapStatistics().heap_size_limit` (a valódi plafon) vs
|
|
20
|
+
`process.memoryUsage().heapUsed`, default 10s-enként.
|
|
21
|
+
- **Rögzít:** küszöb-átlépéskor `DyFM_Log` + `DyNTS_GlobalService.globalErrorHandler`
|
|
22
|
+
(az Errors-rendszer + Discord, ha bekötve). `warning` → `DyFM_ErrorLevel.warning`,
|
|
23
|
+
`critical` → `.critical`. Plusz egy in-memory ring-buffer (`getHistory()`) +
|
|
24
|
+
`getStatus()` (állapot + csúcsok) egy esetleges status-endpointhoz.
|
|
25
|
+
- **Hiszterézis:** eseményt CSAK állapot-váltáskor jelez (normal→warning→critical), és a
|
|
26
|
+
`recoveryMargin`-nyit a warning alá esve jelez `recovered`-et → nincs küszöb-körüli spam.
|
|
27
|
+
- **NEM csinál:** nem állítja le/újraindítja a process-t (az a konténer `restart:` policy
|
|
28
|
+
dolga), és nem próbálja elkapni a fatal OOM-ot (nem lehet). Tisztán megfigyelés +
|
|
29
|
+
rögzítés + opcionális `onCritical` hook (amivel a fogyasztó terhet dobhat).
|
|
30
|
+
- **Biztonság:** minden út `try/catch`-elt — egy figyelő-réteg SOHA nem dönthet be egy
|
|
31
|
+
szervert. A timer `unref()`-elt (nem tartja életben a process-t).
|
|
32
|
+
|
|
33
|
+
## Használat
|
|
34
|
+
|
|
35
|
+
**Automatikus (default-on):** a base `App` startup feltelepíti, ha
|
|
36
|
+
`DyNTS_global_settings.memoryGuard.enabled === true` (alapértelmezés szerint igen). Tehát
|
|
37
|
+
**minden nts-szerver megkapja** az nts-dynamo bump után — kód nélkül.
|
|
38
|
+
|
|
39
|
+
**Explicit / testreszabott:**
|
|
40
|
+
```ts
|
|
41
|
+
import { DyNTS_MemoryGuard } from '@futdevpro/nts-dynamo';
|
|
42
|
+
|
|
43
|
+
DyNTS_MemoryGuard.getInstance().install({
|
|
44
|
+
heapWarningThreshold: 80,
|
|
45
|
+
heapCriticalThreshold: 92,
|
|
46
|
+
onCritical: (e) => { /* pl. terhelés-dobás / külső riasztás */ },
|
|
47
|
+
});
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Konfiguráció** (`DyNTS_global_settings.memoryGuard`, defaultok):
|
|
51
|
+
| mező | default | jelentés |
|
|
52
|
+
|------|---------|----------|
|
|
53
|
+
| `enabled` | `true` | a base App feltelepíti |
|
|
54
|
+
| `pollIntervalMs` | `10000` | poll-gyakoriság |
|
|
55
|
+
| `heapWarningThreshold` | `85` | warning a heap-plafon %-ában |
|
|
56
|
+
| `heapCriticalThreshold` | `95` | critical % |
|
|
57
|
+
| `recoveryMargin` | `10` | a warning alatti margó a `recovered`-hez |
|
|
58
|
+
| `maxHistoryCount` | `100` | megőrzött események |
|
|
59
|
+
|
|
60
|
+
## Az OOM-self-healing nagyobb képe
|
|
61
|
+
|
|
62
|
+
Ez a **„rögzítés" rétege** (record). A **„restart" rétege** a konténer-szintű
|
|
63
|
+
`restart: on-failure:N` + `mem_limit` (compose, fdp-devops) — együtt adják a teljes
|
|
64
|
+
self-healinget: a guard nyomot hagy a near-OOM-ról, a restart-policy auto-helyreállít a
|
|
65
|
+
crash után. A **forrás-prevenció** (a túl nagy payload parse-olásának elkerülése) külön
|
|
66
|
+
réteg (runner-oldali report-cap / body-limit).
|
|
67
|
+
|
|
68
|
+
## Fájlok
|
|
69
|
+
- `src/_services/core/memory-guard.service.ts` + `.spec.ts` (11 spec)
|
|
70
|
+
- `src/_models/interfaces/global-settings.interface.ts` (`memoryGuard` mező)
|
|
71
|
+
- `src/_collections/global-settings.const.ts` (defaultok, enabled:true)
|
|
72
|
+
- `src/_services/server/app.server.ts` (guarded auto-install a startup-ban)
|
|
73
|
+
- `src/index.ts` (fő-export)
|
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
# FR-292 (szerver-fél) — a deployolt app-verzió minden válasz headerében
|
|
2
|
-
|
|
3
|
-
**Dátum:** 2026-08-08 · **Csomag:** `@futdevpro/nts-dynamo`
|
|
4
|
-
|
|
5
|
-
> A teljes (kliens+szerver) leírás a kliens-oldalon:
|
|
6
|
-
> `NPM-packages/dynamo-ngx/__documentations/2026-08-08-fr292-app-update-watch.md`.
|
|
7
|
-
> Ez a lap csak a szerver-fél szerződését rögzíti.
|
|
8
|
-
|
|
9
|
-
## Mit csinál
|
|
10
|
-
|
|
11
|
-
Minden HTTP-válaszra rákerül a deployolt **app-verzió**:
|
|
12
|
-
|
|
13
|
-
```
|
|
14
|
-
X-App-Version: 01.15.460
|
|
15
|
-
Access-Control-Expose-Headers: Content-Length, Content-Type, X-App-Version
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
A kliens (ngx-dynamo `DyNX_AppVersion_Interceptor`) ebből veszi észre, hogy a böngészőben
|
|
19
|
-
**betöltött bundle elavult** — anélkül, hogy bárki pollingolna: a jelzés a már menő
|
|
20
|
-
API-forgalmon utazik.
|
|
21
|
-
|
|
22
|
-
## Szerződés / döntések
|
|
23
|
-
|
|
24
|
-
- **Default: BEKAPCSOLVA.** Informatív header, se PII, se belső részlet. Kikapcsolás:
|
|
25
|
-
`DyNTS_global_settings.appVersionHeader = { enabled: false }`.
|
|
26
|
-
- **A verzió hívásonként olvasódik** (getter, nem befagyasztott érték): a `systemVersion` az
|
|
27
|
-
app-params betöltésekor áll be, ami a middleware felszerelése UTÁN történik. Befagyasztva
|
|
28
|
-
örökre `unknown-version` maradna — pont a friss deployon hiányozna a jelzés.
|
|
29
|
-
- **`unknown-version` esetén NINCS header.** Egy bizonytalan jelzés hamis „új verzió elérhető"
|
|
30
|
-
riasztást szülne a kliensen; inkább hallgatunk.
|
|
31
|
-
- **A CORS expose-listához hozzáfűz, nem felülír** (idempotensen). Enélkül a cross-origin
|
|
32
|
-
kliens JS-e nem olvashatná ki a headert. Ezért a middleware a **CORS-mount UTÁN** települ
|
|
33
|
-
— `initOpenExpress` és `initSecureExpress` egyaránt.
|
|
34
|
-
|
|
35
|
-
## Verifikáció
|
|
36
|
-
|
|
37
|
-
`tsc` ✅ 0 hiba · unit ✅ **1634 spec, 0 failure** (ebből 8 új: expose-lista bővítés/idempotencia,
|
|
38
|
-
ismeretlen verzió → nincs header de a lánc továbbmegy, hívásonkénti verzió-olvasás, egyedi header-név).
|
|
1
|
+
# FR-292 (szerver-fél) — a deployolt app-verzió minden válasz headerében
|
|
2
|
+
|
|
3
|
+
**Dátum:** 2026-08-08 · **Csomag:** `@futdevpro/nts-dynamo`
|
|
4
|
+
|
|
5
|
+
> A teljes (kliens+szerver) leírás a kliens-oldalon:
|
|
6
|
+
> `NPM-packages/dynamo-ngx/__documentations/2026-08-08-fr292-app-update-watch.md`.
|
|
7
|
+
> Ez a lap csak a szerver-fél szerződését rögzíti.
|
|
8
|
+
|
|
9
|
+
## Mit csinál
|
|
10
|
+
|
|
11
|
+
Minden HTTP-válaszra rákerül a deployolt **app-verzió**:
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
X-App-Version: 01.15.460
|
|
15
|
+
Access-Control-Expose-Headers: Content-Length, Content-Type, X-App-Version
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
A kliens (ngx-dynamo `DyNX_AppVersion_Interceptor`) ebből veszi észre, hogy a böngészőben
|
|
19
|
+
**betöltött bundle elavult** — anélkül, hogy bárki pollingolna: a jelzés a már menő
|
|
20
|
+
API-forgalmon utazik.
|
|
21
|
+
|
|
22
|
+
## Szerződés / döntések
|
|
23
|
+
|
|
24
|
+
- **Default: BEKAPCSOLVA.** Informatív header, se PII, se belső részlet. Kikapcsolás:
|
|
25
|
+
`DyNTS_global_settings.appVersionHeader = { enabled: false }`.
|
|
26
|
+
- **A verzió hívásonként olvasódik** (getter, nem befagyasztott érték): a `systemVersion` az
|
|
27
|
+
app-params betöltésekor áll be, ami a middleware felszerelése UTÁN történik. Befagyasztva
|
|
28
|
+
örökre `unknown-version` maradna — pont a friss deployon hiányozna a jelzés.
|
|
29
|
+
- **`unknown-version` esetén NINCS header.** Egy bizonytalan jelzés hamis „új verzió elérhető"
|
|
30
|
+
riasztást szülne a kliensen; inkább hallgatunk.
|
|
31
|
+
- **A CORS expose-listához hozzáfűz, nem felülír** (idempotensen). Enélkül a cross-origin
|
|
32
|
+
kliens JS-e nem olvashatná ki a headert. Ezért a middleware a **CORS-mount UTÁN** települ
|
|
33
|
+
— `initOpenExpress` és `initSecureExpress` egyaránt.
|
|
34
|
+
|
|
35
|
+
## Verifikáció
|
|
36
|
+
|
|
37
|
+
`tsc` ✅ 0 hiba · unit ✅ **1634 spec, 0 failure** (ebből 8 új: expose-lista bővítés/idempotencia,
|
|
38
|
+
ismeretlen verzió → nincs header de a lánc továbbmegy, hívásonkénti verzió-olvasás, egyedi header-név).
|
|
@@ -1,124 +1,124 @@
|
|
|
1
|
-
# 🔴 `DyNTS_FieldEncryption_Util._transform` spread-elte a Mongoose-Documentet — a lista-endpointok burkot adtak vissza
|
|
2
|
-
|
|
3
|
-
**Dátum:** 2026-08-14 · **Kérő:** `BFR-MASTERPROMPTER-027` · **Súlyosság:** high (funkcionálisan törött lista-UI)
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## 1. A hiba
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
// field-encryption.util.ts — ELŐTTE
|
|
11
|
-
const result: any = Array.isArray(value) ? [ ...(value as any[]) ] : { ...(value as any) };
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
Egy mongoose-**Document** adatai **nem saját mezők** — a belső `_doc`-ban ülnek. Ezért a `{ ...doc }`
|
|
15
|
-
a **belső burkot** másolja (`$__`, `$isNew`, `_doc`), és az eredmény **már nem Document**, tehát a
|
|
16
|
-
`JSON.stringify` sem hívja a `toJSON()`-ját. A kliens így ezt kapja:
|
|
17
|
-
|
|
18
|
-
```json
|
|
19
|
-
[{ "$__": {...}, "$isNew": false, "_doc": { "_id": "…", "name": "…" } }]
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
`_id` a legfelső szinten **nincs** → a fogyasztó minden id-alapú művelete elhasal.
|
|
23
|
-
|
|
24
|
-
### Élesben mért bizonyíték (`test.master-prompter.hu`, 2026-08-14)
|
|
25
|
-
|
|
26
|
-
| endpoint | státusz | első elem KULCSAI | `_id` |
|
|
27
|
-
|---|---|---|---|
|
|
28
|
-
| `GET /api/flow/flow/get/:userId/:flowId` (egyedi) | 200 | `_id`, `userId`, `ownerId`, `name`, … | ✅ |
|
|
29
|
-
| `GET /api/flow/flow/get-all-my/:userId` (**lista**) | 200 | **`$__`, `$isNew`, `_doc`** | ❌ **undefined** |
|
|
30
|
-
|
|
31
|
-
Kliens-oldali tünet: a lista-kártyák linkje `/editor/undefined`, a törlés
|
|
32
|
-
`DyNX_ApiService call "deleteFlow" ERROR: missing pathParam: "flowId"` dialógussal állt meg.
|
|
33
|
-
|
|
34
|
-
---
|
|
35
|
-
|
|
36
|
-
## 2. Miért CSAK a lista tört el — a mért aszimmetria
|
|
37
|
-
|
|
38
|
-
A `DyNTS_DBService` **egyedi** olvasásai már ma is `toObject()`-tel adnak vissza sima objektumot
|
|
39
|
-
(`getDataById`, `getDataByDependencyId`, `findByIdAndUpdate`, `findOneAndUpdate`, `createData`).
|
|
40
|
-
A **lista/find metódusok NYERS Documentet** adnak tovább — kimérve **11 db**:
|
|
41
|
-
|
|
42
|
-
`getDataListByIds` · `getDataListByDependencyId` · `getDataListByDependencyIds` · `getAll` ·
|
|
43
|
-
`getDeletedDataList` · `trueDeleteAllData` · `searchData` · `findOne` · `find` · `findWithPaging` ·
|
|
44
|
-
(`findLeanBatched` — ez `.lean()`-nel már sima objektumot ad)
|
|
45
|
-
|
|
46
|
-
Titkosítás **nélkül** ez ártalmatlan: a nyers Document a `res.send`-en át a `toJSON()`-nal helyesen
|
|
47
|
-
szerializálódik. `encrypt: true` mező esetén viszont a read-post-processor (`stringifyDataId` →
|
|
48
|
-
`decryptDoc` → `_transform`) **spread-eli** a Documentet, és ezzel elrontja.
|
|
49
|
-
|
|
50
|
-
---
|
|
51
|
-
|
|
52
|
-
## 3. A javítás
|
|
53
|
-
|
|
54
|
-
```ts
|
|
55
|
-
// UTÁNA
|
|
56
|
-
const plain: any = this._toPlainIfDocument(value);
|
|
57
|
-
const result: any = Array.isArray(plain) ? [ ...(plain as any[]) ] : { ...(plain as any) };
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
`_toPlainIfDocument` a `$__` **saját mező** + `toJSON` függvény kettősével azonosít egy Documentet
|
|
61
|
-
(pontosan az, ami a hibás payloadba kiszivárgott — mongoose-import nélküli, pontos diszkriminátor),
|
|
62
|
-
és `toJSON()`-t hív rá.
|
|
63
|
-
|
|
64
|
-
**Miért itt, és nem a 11 DB-metódusban:**
|
|
65
|
-
1. Ez az **egy pont** mind a 11 utat rendezi.
|
|
66
|
-
2. A 11 metódus visszatérési **típusát** megváltoztatni (Document → sima objektum) **minden modell
|
|
67
|
-
minden fogyasztóját** érintené. Az itteni javítás viszont **csak az `encrypt: true` modelleket**
|
|
68
|
-
érinti — ahol a `_transform` amúgy is **már ma is** sima (csak **rossz**) objektumot ad vissza.
|
|
69
|
-
⇒ **a változás nem tud elrontani olyat, ami ma működik.**
|
|
70
|
-
3. `toJSON()` (nem `toObject()`): a titkosítás bevezetése ELŐTT a nyers Document a `res.send`-en át a
|
|
71
|
-
`JSON.stringify` → `toJSON()` úton szerializálódott — ez adja vissza **ugyanazt a kimeneti alakot**
|
|
72
|
-
(schema-transzformok, virtuals, `__v` együtt).
|
|
73
|
-
|
|
74
|
-
---
|
|
75
|
-
|
|
76
|
-
## 4. 🔴 BLAST-RADIUS — a flotta érintettsége
|
|
77
|
-
|
|
78
|
-
A defekt akkor él, ha **mind a három** teljesül: (a) a modellnek van `encrypt: true` mezője ·
|
|
79
|
-
(b) a `FDP_CORE_DBCONTENT_CRYPT_KEY` be van állítva (kulcs nélkül a `decryptDoc` korán visszatér) ·
|
|
80
|
-
(c) az olvasás **lista-metóduson** megy.
|
|
81
|
-
|
|
82
|
-
| Projekt | Modell | Titkosított mezők | Állapot |
|
|
83
|
-
|---|---|---|---|
|
|
84
|
-
| **master-prompter** | `flow` | `flowSteps.prompt` | 🔴 **élesben igazoltan törött** |
|
|
85
|
-
| **master-prompter** | `flow-run` | `results`, `sourceFlow`, `flowRunValues.value` | 🔴 ugyanaz az osztály |
|
|
86
|
-
| **adventor** | `campaign` | `storyState`, `memory`, `epilogue` | ⚠️ ugyanaz az osztály — élesben nem mérve |
|
|
87
|
-
| **adventor** | `generation` | `content`, `prompt` | ⚠️ ugyanaz az osztály — élesben nem mérve |
|
|
88
|
-
| **fdp-token-service** | `token-purchase` | `requestIp`, `euVatNumber` (PII) | ⚠️ ugyanaz az osztály — élesben nem mérve |
|
|
89
|
-
| **fdp-token-service** | `manual-invoice` | `realID`, `title`, `fullName`, `companyName`, … | ⚠️ ugyanaz az osztály — élesben nem mérve |
|
|
90
|
-
|
|
91
|
-
⇒ **6 modell, 3 projekt.** A master-prompteren kívül egyik sincs élesben visszamérve — ezeket a
|
|
92
|
-
projektek `nts-dynamo`-bumpja után kell ellenőrizni (a lista-endpointjaik `_id`-t adnak-e).
|
|
93
|
-
A `manual-invoice` és a `token-purchase` külön figyelmet érdemel: számlázási/PII adat.
|
|
94
|
-
|
|
95
|
-
> **Miért nem tűnt fel eddig:** a szerver **200**-at ad, a válasz JSON-ként **érvényes** — csak épp a
|
|
96
|
-
> burkot tartalmazza. A UI „üresnek"/működésképtelennek látszik, de sehol nincs hibajelzés.
|
|
97
|
-
> Az MP-ben azért derült ki, mert az `e2e-feature` step (a 30m→60m timeout-emelés után) **most futott
|
|
98
|
-
> le először végig**.
|
|
99
|
-
|
|
100
|
-
---
|
|
101
|
-
|
|
102
|
-
## 5. Kontroll-mérés — VALÓDI mongoose-Documenttel
|
|
103
|
-
|
|
104
|
-
A regresszió-őr **szándékosan nem mockkal** dolgozik: a hiba pont abból eredt, hogy a Document adatai
|
|
105
|
-
nem saját mezők — egy kézzel gyártott mock ezt a jellemzőt nem hordozza, tehát a mock-alapú teszt
|
|
106
|
-
**akkor is zöld maradna**, ha a hiba visszakerülne. DB-kapcsolat nem kell: a `new Model({...})`
|
|
107
|
-
offline is valódi Documentet ad.
|
|
108
|
-
|
|
109
|
-
| Eset | A fix nélkül |
|
|
110
|
-
|---|---|
|
|
111
|
-
| a visszafejtett eredmény sima objektum (nincs `$__`/`$isNew`/`_doc`) | ❌ `Expected [ '$__', '_doc' ] not to contain '$__'` |
|
|
112
|
-
| az `_id` megmarad | ❌ `az _id elveszett a transzform során: Expected undefined to be defined` |
|
|
113
|
-
| a JSON-szerializált alak a valódi adatot adja | ❌ `… not to contain '_doc'` |
|
|
114
|
-
| Document-**tömb** (lista-alak) minden eleme sima objektum, `_id`-vel | ❌ `… not to contain '_doc'` |
|
|
115
|
-
| **összesen** | ❌ **4 FAILED** → javítva: ✅ **1644 specs, 0 failures** |
|
|
116
|
-
|
|
117
|
-
A mezők helyes visszafejtését is asszertáljuk Documenten (top-level + beágyazott tömb-elem).
|
|
118
|
-
|
|
119
|
-
---
|
|
120
|
-
|
|
121
|
-
## 6. Adopció
|
|
122
|
-
|
|
123
|
-
`@futdevpro/nts-dynamo` bump minden érintett szerver-projektben (master-prompter, adventor,
|
|
124
|
-
fdp-token-service), majd a lista-endpointok visszamérése (`_id` jelen van-e a válaszban).
|
|
1
|
+
# 🔴 `DyNTS_FieldEncryption_Util._transform` spread-elte a Mongoose-Documentet — a lista-endpointok burkot adtak vissza
|
|
2
|
+
|
|
3
|
+
**Dátum:** 2026-08-14 · **Kérő:** `BFR-MASTERPROMPTER-027` · **Súlyosság:** high (funkcionálisan törött lista-UI)
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. A hiba
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
// field-encryption.util.ts — ELŐTTE
|
|
11
|
+
const result: any = Array.isArray(value) ? [ ...(value as any[]) ] : { ...(value as any) };
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Egy mongoose-**Document** adatai **nem saját mezők** — a belső `_doc`-ban ülnek. Ezért a `{ ...doc }`
|
|
15
|
+
a **belső burkot** másolja (`$__`, `$isNew`, `_doc`), és az eredmény **már nem Document**, tehát a
|
|
16
|
+
`JSON.stringify` sem hívja a `toJSON()`-ját. A kliens így ezt kapja:
|
|
17
|
+
|
|
18
|
+
```json
|
|
19
|
+
[{ "$__": {...}, "$isNew": false, "_doc": { "_id": "…", "name": "…" } }]
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
`_id` a legfelső szinten **nincs** → a fogyasztó minden id-alapú művelete elhasal.
|
|
23
|
+
|
|
24
|
+
### Élesben mért bizonyíték (`test.master-prompter.hu`, 2026-08-14)
|
|
25
|
+
|
|
26
|
+
| endpoint | státusz | első elem KULCSAI | `_id` |
|
|
27
|
+
|---|---|---|---|
|
|
28
|
+
| `GET /api/flow/flow/get/:userId/:flowId` (egyedi) | 200 | `_id`, `userId`, `ownerId`, `name`, … | ✅ |
|
|
29
|
+
| `GET /api/flow/flow/get-all-my/:userId` (**lista**) | 200 | **`$__`, `$isNew`, `_doc`** | ❌ **undefined** |
|
|
30
|
+
|
|
31
|
+
Kliens-oldali tünet: a lista-kártyák linkje `/editor/undefined`, a törlés
|
|
32
|
+
`DyNX_ApiService call "deleteFlow" ERROR: missing pathParam: "flowId"` dialógussal állt meg.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 2. Miért CSAK a lista tört el — a mért aszimmetria
|
|
37
|
+
|
|
38
|
+
A `DyNTS_DBService` **egyedi** olvasásai már ma is `toObject()`-tel adnak vissza sima objektumot
|
|
39
|
+
(`getDataById`, `getDataByDependencyId`, `findByIdAndUpdate`, `findOneAndUpdate`, `createData`).
|
|
40
|
+
A **lista/find metódusok NYERS Documentet** adnak tovább — kimérve **11 db**:
|
|
41
|
+
|
|
42
|
+
`getDataListByIds` · `getDataListByDependencyId` · `getDataListByDependencyIds` · `getAll` ·
|
|
43
|
+
`getDeletedDataList` · `trueDeleteAllData` · `searchData` · `findOne` · `find` · `findWithPaging` ·
|
|
44
|
+
(`findLeanBatched` — ez `.lean()`-nel már sima objektumot ad)
|
|
45
|
+
|
|
46
|
+
Titkosítás **nélkül** ez ártalmatlan: a nyers Document a `res.send`-en át a `toJSON()`-nal helyesen
|
|
47
|
+
szerializálódik. `encrypt: true` mező esetén viszont a read-post-processor (`stringifyDataId` →
|
|
48
|
+
`decryptDoc` → `_transform`) **spread-eli** a Documentet, és ezzel elrontja.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## 3. A javítás
|
|
53
|
+
|
|
54
|
+
```ts
|
|
55
|
+
// UTÁNA
|
|
56
|
+
const plain: any = this._toPlainIfDocument(value);
|
|
57
|
+
const result: any = Array.isArray(plain) ? [ ...(plain as any[]) ] : { ...(plain as any) };
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
`_toPlainIfDocument` a `$__` **saját mező** + `toJSON` függvény kettősével azonosít egy Documentet
|
|
61
|
+
(pontosan az, ami a hibás payloadba kiszivárgott — mongoose-import nélküli, pontos diszkriminátor),
|
|
62
|
+
és `toJSON()`-t hív rá.
|
|
63
|
+
|
|
64
|
+
**Miért itt, és nem a 11 DB-metódusban:**
|
|
65
|
+
1. Ez az **egy pont** mind a 11 utat rendezi.
|
|
66
|
+
2. A 11 metódus visszatérési **típusát** megváltoztatni (Document → sima objektum) **minden modell
|
|
67
|
+
minden fogyasztóját** érintené. Az itteni javítás viszont **csak az `encrypt: true` modelleket**
|
|
68
|
+
érinti — ahol a `_transform` amúgy is **már ma is** sima (csak **rossz**) objektumot ad vissza.
|
|
69
|
+
⇒ **a változás nem tud elrontani olyat, ami ma működik.**
|
|
70
|
+
3. `toJSON()` (nem `toObject()`): a titkosítás bevezetése ELŐTT a nyers Document a `res.send`-en át a
|
|
71
|
+
`JSON.stringify` → `toJSON()` úton szerializálódott — ez adja vissza **ugyanazt a kimeneti alakot**
|
|
72
|
+
(schema-transzformok, virtuals, `__v` együtt).
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 4. 🔴 BLAST-RADIUS — a flotta érintettsége
|
|
77
|
+
|
|
78
|
+
A defekt akkor él, ha **mind a három** teljesül: (a) a modellnek van `encrypt: true` mezője ·
|
|
79
|
+
(b) a `FDP_CORE_DBCONTENT_CRYPT_KEY` be van állítva (kulcs nélkül a `decryptDoc` korán visszatér) ·
|
|
80
|
+
(c) az olvasás **lista-metóduson** megy.
|
|
81
|
+
|
|
82
|
+
| Projekt | Modell | Titkosított mezők | Állapot |
|
|
83
|
+
|---|---|---|---|
|
|
84
|
+
| **master-prompter** | `flow` | `flowSteps.prompt` | 🔴 **élesben igazoltan törött** |
|
|
85
|
+
| **master-prompter** | `flow-run` | `results`, `sourceFlow`, `flowRunValues.value` | 🔴 ugyanaz az osztály |
|
|
86
|
+
| **adventor** | `campaign` | `storyState`, `memory`, `epilogue` | ⚠️ ugyanaz az osztály — élesben nem mérve |
|
|
87
|
+
| **adventor** | `generation` | `content`, `prompt` | ⚠️ ugyanaz az osztály — élesben nem mérve |
|
|
88
|
+
| **fdp-token-service** | `token-purchase` | `requestIp`, `euVatNumber` (PII) | ⚠️ ugyanaz az osztály — élesben nem mérve |
|
|
89
|
+
| **fdp-token-service** | `manual-invoice` | `realID`, `title`, `fullName`, `companyName`, … | ⚠️ ugyanaz az osztály — élesben nem mérve |
|
|
90
|
+
|
|
91
|
+
⇒ **6 modell, 3 projekt.** A master-prompteren kívül egyik sincs élesben visszamérve — ezeket a
|
|
92
|
+
projektek `nts-dynamo`-bumpja után kell ellenőrizni (a lista-endpointjaik `_id`-t adnak-e).
|
|
93
|
+
A `manual-invoice` és a `token-purchase` külön figyelmet érdemel: számlázási/PII adat.
|
|
94
|
+
|
|
95
|
+
> **Miért nem tűnt fel eddig:** a szerver **200**-at ad, a válasz JSON-ként **érvényes** — csak épp a
|
|
96
|
+
> burkot tartalmazza. A UI „üresnek"/működésképtelennek látszik, de sehol nincs hibajelzés.
|
|
97
|
+
> Az MP-ben azért derült ki, mert az `e2e-feature` step (a 30m→60m timeout-emelés után) **most futott
|
|
98
|
+
> le először végig**.
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## 5. Kontroll-mérés — VALÓDI mongoose-Documenttel
|
|
103
|
+
|
|
104
|
+
A regresszió-őr **szándékosan nem mockkal** dolgozik: a hiba pont abból eredt, hogy a Document adatai
|
|
105
|
+
nem saját mezők — egy kézzel gyártott mock ezt a jellemzőt nem hordozza, tehát a mock-alapú teszt
|
|
106
|
+
**akkor is zöld maradna**, ha a hiba visszakerülne. DB-kapcsolat nem kell: a `new Model({...})`
|
|
107
|
+
offline is valódi Documentet ad.
|
|
108
|
+
|
|
109
|
+
| Eset | A fix nélkül |
|
|
110
|
+
|---|---|
|
|
111
|
+
| a visszafejtett eredmény sima objektum (nincs `$__`/`$isNew`/`_doc`) | ❌ `Expected [ '$__', '_doc' ] not to contain '$__'` |
|
|
112
|
+
| az `_id` megmarad | ❌ `az _id elveszett a transzform során: Expected undefined to be defined` |
|
|
113
|
+
| a JSON-szerializált alak a valódi adatot adja | ❌ `… not to contain '_doc'` |
|
|
114
|
+
| Document-**tömb** (lista-alak) minden eleme sima objektum, `_id`-vel | ❌ `… not to contain '_doc'` |
|
|
115
|
+
| **összesen** | ❌ **4 FAILED** → javítva: ✅ **1644 specs, 0 failures** |
|
|
116
|
+
|
|
117
|
+
A mezők helyes visszafejtését is asszertáljuk Documenten (top-level + beágyazott tömb-elem).
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## 6. Adopció
|
|
122
|
+
|
|
123
|
+
`@futdevpro/nts-dynamo` bump minden érintett szerver-projektben (master-prompter, adventor,
|
|
124
|
+
fdp-token-service), majd a lista-endpointok visszamérése (`_id` jelen van-e a válaszban).
|