@futdevpro/nts-dynamo 1.15.68 → 1.15.70
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/logs/cicd-pipeline/output.log +2805 -0
- package/.dynamo/logs/cicd-pipeline/status.json +94 -0
- package/.dynamo/pipeline.cicd.config.json +180 -180
- 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 +678 -678
- 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/nts-integration-tests-2026-03-17.md +26 -26
- package/_specifications/BACKLOG.md +92 -92
- package/_specifications/TODO.md +15 -15
- package/_specifications/agent.md +138 -138
- package/build/_collections/archive.util.d.ts +12 -12
- package/build/_collections/archive.util.js +18 -18
- package/build/_collections/atlas-default-db-options.const.d.ts +2 -2
- package/build/_collections/atlas-default-db-options.const.js +9 -9
- package/build/_collections/default-fallback-cache-max-age.const.d.ts +2 -2
- package/build/_collections/default-fallback-cache-max-age.const.js +5 -5
- package/build/_collections/default-not-found-page.const.d.ts +5 -5
- package/build/_collections/default-not-found-page.const.js +24 -24
- package/build/_collections/default-socket-path.const.d.ts +2 -2
- package/build/_collections/default-socket-path.const.js +5 -5
- package/build/_collections/get-environment-settings.util.d.ts +2 -2
- package/build/_collections/get-environment-settings.util.js +43 -43
- package/build/_collections/global-settings.const.d.ts +6 -6
- package/build/_collections/global-settings.const.js +69 -69
- package/build/_collections/mongo-reconnect-guard.util.d.ts +73 -73
- package/build/_collections/mongo-reconnect-guard.util.js +110 -110
- package/build/_collections/star.controller.d.ts +7 -7
- package/build/_collections/star.controller.js +97 -97
- package/build/_enums/data-model-type.enum.d.ts +13 -13
- package/build/_enums/data-model-type.enum.js +17 -17
- package/build/_enums/data-service-function.enum.d.ts +18 -18
- package/build/_enums/data-service-function.enum.js +24 -24
- package/build/_enums/predefined-data-types.enum.d.ts +15 -15
- package/build/_enums/predefined-data-types.enum.js +19 -19
- package/build/_enums/route-security.enum.d.ts +11 -11
- package/build/_enums/route-security.enum.js +15 -15
- package/build/_models/control-models/api-call-params.control-model.d.ts +79 -79
- package/build/_models/control-models/api-call-params.control-model.js +101 -101
- package/build/_models/control-models/app-ext-system-controls.control-model.d.ts +6 -6
- package/build/_models/control-models/app-ext-system-controls.control-model.js +10 -10
- package/build/_models/control-models/app-params.control-model.d.ts +51 -51
- package/build/_models/control-models/app-params.control-model.js +119 -119
- package/build/_models/control-models/app-system-controls.control-model.d.ts +7 -7
- package/build/_models/control-models/app-system-controls.control-model.js +11 -11
- package/build/_models/control-models/endpoint-params.control-model.d.ts +114 -114
- package/build/_models/control-models/endpoint-params.control-model.js +442 -442
- package/build/_models/control-models/http-settings.control-model.d.ts +17 -17
- package/build/_models/control-models/http-settings.control-model.js +34 -34
- package/build/_models/control-models/system-control.control-model.d.ts +5 -5
- package/build/_models/control-models/system-control.control-model.js +11 -11
- package/build/_models/interfaces/certification-settings.interface.d.ts +5 -5
- package/build/_models/interfaces/certification-settings.interface.js +2 -2
- package/build/_models/interfaces/compare-data-options.interface.d.ts +26 -26
- package/build/_models/interfaces/compare-data-options.interface.js +2 -2
- package/build/_models/interfaces/compare-data-result.interface.d.ts +12 -12
- package/build/_models/interfaces/compare-data-result.interface.js +2 -2
- package/build/_models/interfaces/cors-settings.interface.d.ts +51 -51
- package/build/_models/interfaces/cors-settings.interface.js +2 -2
- package/build/_models/interfaces/environment-settings.interface.d.ts +34 -34
- package/build/_models/interfaces/environment-settings.interface.js +2 -2
- package/build/_models/interfaces/global-log-settings.interface.d.ts +145 -145
- package/build/_models/interfaces/global-log-settings.interface.js +2 -2
- package/build/_models/interfaces/global-service-settings.interface.d.ts +30 -30
- package/build/_models/interfaces/global-service-settings.interface.js +2 -2
- package/build/_models/interfaces/global-settings.interface.d.ts +161 -161
- package/build/_models/interfaces/global-settings.interface.js +2 -2
- package/build/_models/interfaces/routing-module-settings.interface.d.ts +19 -19
- package/build/_models/interfaces/routing-module-settings.interface.js +2 -2
- package/build/_models/interfaces/static-client-settings.interface.d.ts +28 -28
- package/build/_models/interfaces/static-client-settings.interface.js +2 -2
- package/build/_models/types/db-update.type.d.ts +129 -129
- package/build/_models/types/db-update.type.js +2 -2
- package/build/_modules/admin-auth/_models/admin-api-key-config.interface.d.ts +31 -31
- package/build/_modules/admin-auth/_models/admin-api-key-config.interface.js +2 -2
- package/build/_modules/admin-auth/admin-api-key.auth-service.d.ts +89 -89
- package/build/_modules/admin-auth/admin-api-key.auth-service.js +194 -194
- package/build/_modules/admin-auth/index.d.ts +2 -2
- package/build/_modules/admin-auth/index.js +5 -5
- package/build/_modules/ai/_models/ai-input-interfaces.d.ts +53 -53
- package/build/_modules/ai/_models/ai-input-interfaces.js +5 -5
- package/build/_modules/ai/_models/ai-test-generation-result.interface.d.ts +16 -16
- package/build/_modules/ai/_models/ai-test-generation-result.interface.js +2 -2
- package/build/_modules/ai/_models/interfaces/dynts-ai-cost-event-callback.interface.d.ts +13 -13
- package/build/_modules/ai/_models/interfaces/dynts-ai-cost-event-callback.interface.js +2 -2
- package/build/_modules/ai/_models/interfaces/dynts-ai-cost-event.interface.d.ts +49 -49
- package/build/_modules/ai/_models/interfaces/dynts-ai-cost-event.interface.js +2 -2
- package/build/_modules/ai/_modules/anthropic/_services/aai-user-key.control-service.d.ts +35 -35
- package/build/_modules/ai/_modules/anthropic/_services/aai-user-key.control-service.js +117 -117
- package/build/_modules/ai/_modules/anthropic/index.d.ts +2 -2
- package/build/_modules/ai/_modules/anthropic/index.js +7 -7
- package/build/_modules/ai/_modules/document-ai/_collections/dai-chunking.util.d.ts +84 -84
- package/build/_modules/ai/_modules/document-ai/_collections/dai-chunking.util.js +467 -467
- package/build/_modules/ai/_modules/document-ai/_collections/dai-code-chunking.util.d.ts +109 -109
- package/build/_modules/ai/_modules/document-ai/_collections/dai-code-chunking.util.js +418 -418
- package/build/_modules/ai/_modules/document-ai/_collections/dai-document.util.d.ts +28 -28
- package/build/_modules/ai/_modules/document-ai/_collections/dai-document.util.js +73 -73
- package/build/_modules/ai/_modules/document-ai/_enums/dai-compare-result-type.enum.d.ts +6 -6
- package/build/_modules/ai/_modules/document-ai/_enums/dai-compare-result-type.enum.js +10 -10
- package/build/_modules/ai/_modules/document-ai/_models/data-models/dai-doc-chunk.data-model.d.ts +51 -51
- package/build/_modules/ai/_modules/document-ai/_models/data-models/dai-doc-chunk.data-model.js +132 -132
- package/build/_modules/ai/_modules/document-ai/_models/data-models/dai-doc-page.data-model.d.ts +47 -47
- package/build/_modules/ai/_modules/document-ai/_models/data-models/dai-doc-page.data-model.js +136 -136
- package/build/_modules/ai/_modules/document-ai/_models/data-models/dai-document.data-model.d.ts +17 -17
- package/build/_modules/ai/_modules/document-ai/_models/data-models/dai-document.data-model.js +76 -76
- package/build/_modules/ai/_modules/document-ai/_models/interfaces/dai-code-chunk.interface.d.ts +49 -49
- package/build/_modules/ai/_modules/document-ai/_models/interfaces/dai-code-chunk.interface.js +2 -2
- package/build/_modules/ai/_modules/document-ai/_models/interfaces/dai-doc-chunk-compare-result.interface.d.ts +8 -8
- package/build/_modules/ai/_modules/document-ai/_models/interfaces/dai-doc-chunk-compare-result.interface.js +2 -2
- package/build/_modules/ai/_modules/document-ai/_models/interfaces/dai-doc-page-compare-result.interface.d.ts +11 -11
- package/build/_modules/ai/_modules/document-ai/_models/interfaces/dai-doc-page-compare-result.interface.js +2 -2
- package/build/_modules/ai/_modules/document-ai/_models/interfaces/dai-document-compare-result.interface.d.ts +12 -12
- package/build/_modules/ai/_modules/document-ai/_models/interfaces/dai-document-compare-result.interface.js +2 -2
- package/build/_modules/ai/_modules/document-ai/index.d.ts +12 -12
- package/build/_modules/ai/_modules/document-ai/index.js +27 -27
- package/build/_modules/ai/_modules/fdp-ai/_services/fdpai-user-key.control-service.d.ts +34 -34
- package/build/_modules/ai/_modules/fdp-ai/_services/fdpai-user-key.control-service.js +128 -128
- package/build/_modules/ai/_modules/fdp-ai/index.d.ts +2 -2
- package/build/_modules/ai/_modules/fdp-ai/index.js +7 -7
- package/build/_modules/ai/_modules/open-ai/_collections/oai-global-settings.const.d.ts +2 -2
- package/build/_modules/ai/_modules/open-ai/_collections/oai-global-settings.const.js +8 -8
- package/build/_modules/ai/_modules/open-ai/_collections/oai-llm-predefined-requests-hu.conts.d.ts +2 -2
- package/build/_modules/ai/_modules/open-ai/_collections/oai-llm-predefined-requests-hu.conts.js +74 -74
- package/build/_modules/ai/_modules/open-ai/_collections/oai-llm-predefined-requests.conts.d.ts +2 -2
- package/build/_modules/ai/_modules/open-ai/_collections/oai-llm-predefined-requests.conts.js +67 -67
- package/build/_modules/ai/_modules/open-ai/_enums/oai-gpt-message-role.enum.js +42 -42
- package/build/_modules/ai/_modules/open-ai/_models/interfaces/oai-global-settings.interface.d.ts +5 -5
- package/build/_modules/ai/_modules/open-ai/_models/interfaces/oai-global-settings.interface.js +2 -2
- package/build/_modules/ai/_modules/open-ai/_models/interfaces/oai-gpt-message.interface.js +6 -6
- package/build/_modules/ai/_modules/open-ai/_models/interfaces/oai-llm-predefined-requests.interface.d.ts +51 -51
- package/build/_modules/ai/_modules/open-ai/_models/interfaces/oai-llm-predefined-requests.interface.js +2 -2
- package/build/_modules/ai/_modules/open-ai/_services/data-services/oai-doc-chunk-data.service.d.ts +21 -21
- package/build/_modules/ai/_modules/open-ai/_services/data-services/oai-doc-chunk-data.service.js +187 -187
- package/build/_modules/ai/_modules/open-ai/_services/data-services/oai-doc-page.data-service.d.ts +26 -26
- package/build/_modules/ai/_modules/open-ai/_services/data-services/oai-doc-page.data-service.js +278 -278
- package/build/_modules/ai/_modules/open-ai/_services/data-services/oai-document.data-service.d.ts +22 -22
- package/build/_modules/ai/_modules/open-ai/_services/data-services/oai-document.data-service.js +322 -322
- package/build/_modules/ai/_modules/open-ai/_services/data-services/oai-vector-data.service.d.ts +119 -119
- package/build/_modules/ai/_modules/open-ai/_services/data-services/oai-vector-data.service.js +480 -480
- package/build/_modules/ai/_modules/open-ai/_services/oai-embedding.control-service.d.ts +25 -25
- package/build/_modules/ai/_modules/open-ai/_services/oai-embedding.control-service.js +103 -103
- package/build/_modules/ai/_modules/open-ai/_services/oai-llm-chat.service-base.d.ts +169 -169
- package/build/_modules/ai/_modules/open-ai/_services/oai-llm-chat.service-base.js +479 -479
- package/build/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.d.ts +201 -201
- package/build/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.js +579 -579
- package/build/_modules/ai/_modules/open-ai/_services/oai-user-key.control-service.d.ts +39 -39
- package/build/_modules/ai/_modules/open-ai/_services/oai-user-key.control-service.js +110 -110
- package/build/_modules/ai/_modules/open-ai/index.d.ts +14 -14
- package/build/_modules/ai/_modules/open-ai/index.js +55 -55
- package/build/_modules/ai/_services/ai-embedding-mock.service.d.ts +80 -80
- package/build/_modules/ai/_services/ai-embedding-mock.service.js +166 -166
- package/build/_modules/ai/_services/ai-embedding-provider.registry.d.ts +51 -51
- package/build/_modules/ai/_services/ai-embedding-provider.registry.js +78 -78
- package/build/_modules/ai/_services/ai-embedding.service-base.d.ts +41 -41
- package/build/_modules/ai/_services/ai-embedding.service-base.js +11 -11
- package/build/_modules/ai/_services/ai-llm-chat.service-base.d.ts +39 -39
- package/build/_modules/ai/_services/ai-llm-chat.service-base.js +11 -11
- package/build/_modules/ai/_services/ai-llm.service-base.d.ts +132 -132
- package/build/_modules/ai/_services/ai-llm.service-base.js +313 -313
- package/build/_modules/ai/_services/ai-provider.service-base.d.ts +46 -46
- package/build/_modules/ai/_services/ai-provider.service-base.js +43 -43
- package/build/_modules/ai/_services/ai-user-key.service-base.d.ts +44 -44
- package/build/_modules/ai/_services/ai-user-key.service-base.js +14 -14
- package/build/_modules/ai/_services/lmstudio-embedding.control-service.d.ts +110 -110
- package/build/_modules/ai/_services/lmstudio-embedding.control-service.js +297 -297
- package/build/_modules/ai/index.d.ts +13 -13
- package/build/_modules/ai/index.js +22 -22
- package/build/_modules/assistant/_collections/ass-global-settings.const.d.ts +2 -2
- package/build/_modules/assistant/_collections/ass-global-settings.const.js +14 -14
- package/build/_modules/assistant/_collections/ass.util.d.ts +15 -15
- package/build/_modules/assistant/_collections/ass.util.js +42 -42
- package/build/_modules/assistant/_models/ass-global-settings.interface.d.ts +13 -13
- package/build/_modules/assistant/_models/ass-global-settings.interface.js +2 -2
- package/build/_modules/assistant/_services/ass-io.control-service.d.ts +19 -19
- package/build/_modules/assistant/_services/ass-io.control-service.js +57 -57
- package/build/_modules/assistant/_services/ass-main.control-service.d.ts +32 -32
- package/build/_modules/assistant/_services/ass-main.control-service.js +65 -65
- package/build/_modules/assistant/index.d.ts +6 -6
- package/build/_modules/assistant/index.js +18 -18
- package/build/_modules/bot/_collections/bot-default-commands.const.d.ts +2 -2
- package/build/_modules/bot/_collections/bot-default-commands.const.js +13 -13
- package/build/_modules/bot/_collections/bot-global-settings.const.d.ts +2 -2
- package/build/_modules/bot/_collections/bot-global-settings.const.js +31 -31
- package/build/_modules/bot/_models/bot-channel-wrapper.interface.d.ts +25 -25
- package/build/_modules/bot/_models/bot-channel-wrapper.interface.js +38 -38
- package/build/_modules/bot/_models/bot-command.interface.d.ts +7 -7
- package/build/_modules/bot/_models/bot-command.interface.js +2 -2
- package/build/_modules/bot/_models/bot-global-settings.interface.d.ts +85 -85
- package/build/_modules/bot/_models/bot-global-settings.interface.js +2 -2
- package/build/_modules/bot/_models/bot-last-mention-date.interface.d.ts +6 -6
- package/build/_modules/bot/_models/bot-last-mention-date.interface.js +2 -2
- package/build/_modules/bot/_models/bot-last-message-date.interface.d.ts +5 -5
- package/build/_modules/bot/_models/bot-last-message-date.interface.js +2 -2
- package/build/_modules/bot/_models/bot-message-wrapper.interface.d.ts +37 -37
- package/build/_modules/bot/_models/bot-message-wrapper.interface.js +54 -54
- package/build/_modules/bot/_models/bot-user-wrapper.interface.d.ts +23 -23
- package/build/_modules/bot/_models/bot-user-wrapper.interface.js +28 -28
- package/build/_modules/bot/_modules/discord-bot/_models/dib-platform.types.js +10 -10
- package/build/_modules/bot/_modules/discord-bot/_services/dib-messaging-provider.control-service.d.ts +69 -69
- package/build/_modules/bot/_modules/discord-bot/_services/dib-messaging-provider.control-service.js +497 -497
- package/build/_modules/bot/_modules/discord-bot/index.d.ts +1 -1
- package/build/_modules/bot/_modules/discord-bot/index.js +12 -12
- package/build/_modules/bot/_modules/dynamo-bot/_collections/dyb-operations.util.d.ts +16 -16
- package/build/_modules/bot/_modules/dynamo-bot/_collections/dyb-operations.util.js +42 -42
- package/build/_modules/bot/_modules/dynamo-bot/_models/dyb-platform.types.d.ts +9 -9
- package/build/_modules/bot/_modules/dynamo-bot/_models/dyb-platform.types.js +2 -2
- package/build/_modules/bot/_modules/dynamo-bot/_services/dyb-messaging-provider.control-service.d.ts +59 -59
- package/build/_modules/bot/_modules/dynamo-bot/_services/dyb-messaging-provider.control-service.js +349 -349
- package/build/_modules/bot/_modules/dynamo-bot/index.d.ts +3 -3
- package/build/_modules/bot/_modules/dynamo-bot/index.js +15 -15
- package/build/_modules/bot/_modules/slack-bot/_models/slb-platform.types.d.ts +6 -6
- package/build/_modules/bot/_modules/slack-bot/_models/slb-platform.types.js +2 -2
- package/build/_modules/bot/_modules/slack-bot/_services/slb-messaging-provider.control-service.d.ts +56 -56
- package/build/_modules/bot/_modules/slack-bot/_services/slb-messaging-provider.control-service.js +137 -137
- package/build/_modules/bot/_modules/slack-bot/index.d.ts +2 -2
- package/build/_modules/bot/_modules/slack-bot/index.js +12 -12
- package/build/_modules/bot/_modules/teams-bot/_models/teb-platform.types.d.ts +6 -6
- package/build/_modules/bot/_modules/teams-bot/_models/teb-platform.types.js +2 -2
- package/build/_modules/bot/_modules/teams-bot/_services/teb-messaging-provider.control-service.d.ts +56 -56
- package/build/_modules/bot/_modules/teams-bot/_services/teb-messaging-provider.control-service.js +137 -137
- package/build/_modules/bot/_modules/teams-bot/index.d.ts +2 -2
- package/build/_modules/bot/_modules/teams-bot/index.js +12 -12
- package/build/_modules/bot/_services/bot-commands.control-service.d.ts +12 -12
- package/build/_modules/bot/_services/bot-commands.control-service.js +117 -117
- package/build/_modules/bot/_services/bot-io.control-service.d.ts +23 -23
- package/build/_modules/bot/_services/bot-io.control-service.js +226 -226
- package/build/_modules/bot/_services/bot-main.control-service.d.ts +35 -35
- package/build/_modules/bot/_services/bot-main.control-service.js +195 -195
- package/build/_modules/bot/_services/bot-messaging-provider.service-base.d.ts +71 -71
- package/build/_modules/bot/_services/bot-messaging-provider.service-base.js +15 -15
- package/build/_modules/bot/_services/bot-routines.control-service.d.ts +13 -13
- package/build/_modules/bot/_services/bot-routines.control-service.js +59 -59
- package/build/_modules/bot/index.d.ts +17 -17
- package/build/_modules/bot/index.js +36 -36
- package/build/_modules/custom-data/custom-data.controller.d.ts +5 -5
- package/build/_modules/custom-data/custom-data.controller.js +56 -56
- package/build/_modules/custom-data/custom-data.data-service.d.ts +5 -5
- package/build/_modules/custom-data/custom-data.data-service.js +11 -11
- package/build/_modules/custom-data/get-custom-data-routing-module.util.d.ts +3 -3
- package/build/_modules/custom-data/get-custom-data-routing-module.util.js +16 -16
- package/build/_modules/custom-data/index.d.ts +4 -4
- package/build/_modules/custom-data/index.js +9 -9
- package/build/_modules/data-readers/_collections/dynts-sqlite-reader.util.d.ts +58 -58
- package/build/_modules/data-readers/_collections/dynts-sqlite-reader.util.js +168 -168
- package/build/_modules/data-readers/_models/interfaces/dynts-sqlite-reader.interface.d.ts +31 -31
- package/build/_modules/data-readers/_models/interfaces/dynts-sqlite-reader.interface.js +7 -7
- package/build/_modules/data-readers/index.d.ts +2 -2
- package/build/_modules/data-readers/index.js +10 -10
- package/build/_modules/defaults/_collections/default-endpoints.util.d.ts +248 -248
- package/build/_modules/defaults/_collections/default-endpoints.util.js +386 -386
- package/build/_modules/defaults/_models/default-user.data-model.d.ts +19 -19
- package/build/_modules/defaults/_models/default-user.data-model.js +72 -72
- package/build/_modules/defaults/_services/default-auth.service.d.ts +50 -50
- package/build/_modules/defaults/_services/default-auth.service.js +158 -158
- package/build/_modules/defaults/_services/default-socket-events.service.d.ts +23 -23
- package/build/_modules/defaults/_services/default-socket-events.service.js +60 -60
- package/build/_modules/defaults/_services/default-user.data-service.d.ts +24 -24
- package/build/_modules/defaults/_services/default-user.data-service.js +87 -87
- package/build/_modules/defaults/index.d.ts +5 -5
- package/build/_modules/defaults/index.js +17 -17
- package/build/_modules/discord-assistant/_collections/dias-global-settings.const.d.ts +2 -2
- package/build/_modules/discord-assistant/_collections/dias-global-settings.const.js +16 -16
- package/build/_modules/discord-assistant/_collections/dias.util.d.ts +31 -31
- package/build/_modules/discord-assistant/_collections/dias.util.js +85 -85
- package/build/_modules/discord-assistant/_models/dias-global-settings.interface.d.ts +17 -17
- package/build/_modules/discord-assistant/_models/dias-global-settings.interface.js +2 -2
- package/build/_modules/discord-assistant/_models/dias-knowledge.data-model.d.ts +8 -8
- package/build/_modules/discord-assistant/_models/dias-knowledge.data-model.js +46 -46
- package/build/_modules/discord-assistant/_services/dias-chunk.data-service.d.ts +17 -17
- package/build/_modules/discord-assistant/_services/dias-chunk.data-service.js +123 -123
- package/build/_modules/discord-assistant/_services/dias-io.control-service.d.ts +10 -10
- package/build/_modules/discord-assistant/_services/dias-io.control-service.js +49 -49
- package/build/_modules/discord-assistant/_services/dias-main.control-service.d.ts +3 -3
- package/build/_modules/discord-assistant/_services/dias-main.control-service.js +7 -7
- package/build/_modules/discord-assistant/_services/dias.service-base.d.ts +18 -18
- package/build/_modules/discord-assistant/_services/dias.service-base.js +46 -46
- package/build/_modules/discord-assistant/index.d.ts +11 -11
- package/build/_modules/discord-assistant/index.js +24 -24
- package/build/_modules/discord-assistant-voiced/_services/dias-discord-bot.control-service.d.ts +3 -3
- package/build/_modules/discord-assistant-voiced/_services/dias-discord-bot.control-service.js +7 -7
- package/build/_modules/discord-assistant-voiced/index.d.ts +2 -2
- package/build/_modules/discord-assistant-voiced/index.js +28 -28
- package/build/_modules/discord-bot/_collections/dibo-default-commands.const.d.ts +2 -2
- package/build/_modules/discord-bot/_collections/dibo-default-commands.const.js +12 -12
- package/build/_modules/discord-bot/_collections/dibo-global-settings.conts.d.ts +2 -2
- package/build/_modules/discord-bot/_collections/dibo-global-settings.conts.js +43 -43
- package/build/_modules/discord-bot/_collections/dibo-operations.util.d.ts +22 -22
- package/build/_modules/discord-bot/_collections/dibo-operations.util.js +275 -275
- package/build/_modules/discord-bot/_models/dibo-command.interface.d.ts +7 -7
- package/build/_modules/discord-bot/_models/dibo-command.interface.js +2 -2
- package/build/_modules/discord-bot/_models/dibo-global-settings.interface.d.ts +87 -87
- package/build/_modules/discord-bot/_models/dibo-global-settings.interface.js +2 -2
- package/build/_modules/discord-bot/_models/dibo-last-mention-date.inteface.d.ts +6 -6
- package/build/_modules/discord-bot/_models/dibo-last-mention-date.inteface.js +2 -2
- package/build/_modules/discord-bot/_models/dibo-last-message-date.interface.d.ts +5 -5
- package/build/_modules/discord-bot/_models/dibo-last-message-date.interface.js +2 -2
- package/build/_modules/discord-bot/_services/dibo-commands.control-service.d.ts +11 -11
- package/build/_modules/discord-bot/_services/dibo-commands.control-service.js +109 -109
- package/build/_modules/discord-bot/_services/dibo-io.control-service.d.ts +21 -21
- package/build/_modules/discord-bot/_services/dibo-io.control-service.js +218 -218
- package/build/_modules/discord-bot/_services/dibo-main.control-service.d.ts +89 -89
- package/build/_modules/discord-bot/_services/dibo-main.control-service.js +363 -363
- package/build/_modules/discord-bot/_services/dibo-routines.control-service.d.ts +13 -13
- package/build/_modules/discord-bot/_services/dibo-routines.control-service.js +73 -73
- package/build/_modules/discord-bot/index.d.ts +11 -11
- package/build/_modules/discord-bot/index.js +30 -30
- package/build/_modules/local-vector-search/_enums/lvs-search-mode.enum.d.ts +34 -34
- package/build/_modules/local-vector-search/_enums/lvs-search-mode.enum.js +38 -38
- package/build/_modules/local-vector-search/_models/data-models/lvs-vector-persist.data-model.d.ts +35 -35
- package/build/_modules/local-vector-search/_models/data-models/lvs-vector-persist.data-model.js +53 -53
- package/build/_modules/local-vector-search/_models/lvs-search-result.interface.d.ts +16 -16
- package/build/_modules/local-vector-search/_models/lvs-search-result.interface.js +2 -2
- package/build/_modules/local-vector-search/_services/lvs-bm25.util.d.ts +88 -88
- package/build/_modules/local-vector-search/_services/lvs-bm25.util.js +189 -189
- package/build/_modules/local-vector-search/_services/lvs-doc-chunk-data.service.d.ts +26 -26
- package/build/_modules/local-vector-search/_services/lvs-doc-chunk-data.service.js +197 -197
- package/build/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.d.ts +145 -145
- package/build/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.js +294 -294
- package/build/_modules/local-vector-search/_services/lvs-persistent-vector-pool.control-service.d.ts +69 -69
- package/build/_modules/local-vector-search/_services/lvs-persistent-vector-pool.control-service.js +122 -122
- package/build/_modules/local-vector-search/_services/lvs-vector-persist.data-service.d.ts +42 -42
- package/build/_modules/local-vector-search/_services/lvs-vector-persist.data-service.js +71 -71
- package/build/_modules/local-vector-search/_services/lvs-vector-pool.control-service.d.ts +70 -70
- package/build/_modules/local-vector-search/_services/lvs-vector-pool.control-service.d.ts.map +1 -1
- package/build/_modules/local-vector-search/_services/lvs-vector-pool.control-service.js +187 -181
- package/build/_modules/local-vector-search/_services/lvs-vector-pool.control-service.js.map +1 -1
- package/build/_modules/local-vector-search/index.d.ts +8 -8
- package/build/_modules/local-vector-search/index.js +15 -15
- package/build/_modules/logs/_models/file-log-entry.interface.d.ts +13 -13
- package/build/_modules/logs/_models/file-log-entry.interface.js +2 -2
- package/build/_modules/logs/_models/file-log-read-result.interface.d.ts +35 -35
- package/build/_modules/logs/_models/file-log-read-result.interface.js +2 -2
- package/build/_modules/logs/file-log.service.d.ts +132 -132
- package/build/_modules/logs/file-log.service.js +444 -444
- package/build/_modules/logs/file-logs.controller.d.ts +40 -40
- package/build/_modules/logs/file-logs.controller.js +138 -138
- package/build/_modules/logs/get-file-logs-routing-module.util.d.ts +31 -31
- package/build/_modules/logs/get-file-logs-routing-module.util.js +37 -37
- package/build/_modules/logs/get-logs-routing-module.util.d.ts +18 -18
- package/build/_modules/logs/get-logs-routing-module.util.js +31 -31
- package/build/_modules/logs/index.d.ts +8 -8
- package/build/_modules/logs/index.js +15 -15
- package/build/_modules/logs/log-buffer.service.d.ts +37 -37
- package/build/_modules/logs/log-buffer.service.js +96 -96
- package/build/_modules/logs/logs.controller.d.ts +26 -26
- package/build/_modules/logs/logs.controller.js +89 -89
- package/build/_modules/logs/logs.service.d.ts +39 -39
- package/build/_modules/logs/logs.service.js +96 -96
- package/build/_modules/mcp/_models/interfaces/dynts-mcp.interface.d.ts +108 -108
- package/build/_modules/mcp/_models/interfaces/dynts-mcp.interface.js +13 -13
- package/build/_modules/mcp/_services/dynts-mcp-server.service-base.d.ts +70 -70
- package/build/_modules/mcp/_services/dynts-mcp-server.service-base.js +98 -98
- package/build/_modules/mcp/_services/dynts-mcp.adapter.d.ts +56 -56
- package/build/_modules/mcp/_services/dynts-mcp.adapter.js +138 -138
- package/build/_modules/mcp/index.d.ts +3 -3
- package/build/_modules/mcp/index.js +12 -12
- package/build/_modules/messaging/_collections/get-messaging-routing-module.util.d.ts +7 -7
- package/build/_modules/messaging/_collections/get-messaging-routing-module.util.js +20 -20
- package/build/_modules/messaging/_collections/msg-global-settings.const.d.ts +5 -5
- package/build/_modules/messaging/_collections/msg-global-settings.const.js +22 -22
- package/build/_modules/messaging/_collections/msg.util.d.ts +24 -24
- package/build/_modules/messaging/_collections/msg.util.js +62 -62
- package/build/_modules/messaging/_models/msg-global-settings.interface.d.ts +28 -28
- package/build/_modules/messaging/_models/msg-global-settings.interface.js +2 -2
- package/build/_modules/messaging/_services/msg-conversation.data-service.d.ts +28 -28
- package/build/_modules/messaging/_services/msg-conversation.data-service.js +109 -109
- package/build/_modules/messaging/_services/msg-events.service.d.ts +61 -61
- package/build/_modules/messaging/_services/msg-events.service.js +203 -203
- package/build/_modules/messaging/_services/msg-integration.control-service.js +180 -180
- package/build/_modules/messaging/_services/msg-main.control-service.d.ts +62 -62
- package/build/_modules/messaging/_services/msg-main.control-service.js +428 -428
- package/build/_modules/messaging/_services/msg-message.data-service.d.ts +28 -28
- package/build/_modules/messaging/_services/msg-message.data-service.js +103 -103
- package/build/_modules/messaging/_services/msg.controller.d.ts +12 -12
- package/build/_modules/messaging/_services/msg.controller.js +256 -256
- package/build/_modules/messaging/index.d.ts +10 -10
- package/build/_modules/messaging/index.js +27 -27
- package/build/_modules/mock/app-extended-server.mock.d.ts +41 -41
- package/build/_modules/mock/app-extended-server.mock.js +169 -169
- package/build/_modules/mock/app-integration-test.mock.d.ts +19 -19
- package/build/_modules/mock/app-integration-test.mock.js +45 -45
- package/build/_modules/mock/app-params.mock.d.ts +2 -2
- package/build/_modules/mock/app-params.mock.js +9 -9
- package/build/_modules/mock/app-server.mock.d.ts +41 -41
- package/build/_modules/mock/app-server.mock.js +148 -148
- package/build/_modules/mock/auth-service.mock.d.ts +10 -10
- package/build/_modules/mock/auth-service.mock.js +19 -19
- package/build/_modules/mock/controller.mock.d.ts +5 -5
- package/build/_modules/mock/controller.mock.js +14 -14
- package/build/_modules/mock/data-model.mock.d.ts +26 -26
- package/build/_modules/mock/data-model.mock.js +72 -72
- package/build/_modules/mock/email-service-collection.mock.d.ts +7 -7
- package/build/_modules/mock/email-service-collection.mock.js +12 -12
- package/build/_modules/mock/email-service.mock.d.ts +4 -4
- package/build/_modules/mock/email-service.mock.js +20 -20
- package/build/_modules/mock/endpoint.mock.d.ts +8 -8
- package/build/_modules/mock/endpoint.mock.js +79 -79
- package/build/_modules/mock/socket-client.mock.d.ts +9 -9
- package/build/_modules/mock/socket-client.mock.js +38 -38
- package/build/_modules/mock/socket-server.mock.d.ts +15 -15
- package/build/_modules/mock/socket-server.mock.js +32 -32
- package/build/_modules/oauth2/_routes/oauth2.controller.d.ts +16 -16
- package/build/_modules/oauth2/_routes/oauth2.controller.js +96 -96
- package/build/_modules/oauth2/_services/oauth2.auth-service.d.ts +30 -30
- package/build/_modules/oauth2/_services/oauth2.auth-service.js +215 -215
- package/build/_modules/oauth2/_services/oauth2.control-service.d.ts +132 -132
- package/build/_modules/oauth2/_services/oauth2.control-service.js +576 -576
- package/build/_modules/oauth2/index.d.ts +3 -3
- package/build/_modules/oauth2/index.js +14 -14
- package/build/_modules/rate-limit/_models/rate-limit-config.interface.d.ts +61 -61
- package/build/_modules/rate-limit/_models/rate-limit-config.interface.js +2 -2
- package/build/_modules/rate-limit/_models/rate-limit-policy.interface.d.ts +15 -15
- package/build/_modules/rate-limit/_models/rate-limit-policy.interface.js +2 -2
- package/build/_modules/rate-limit/index.d.ts +3 -3
- package/build/_modules/rate-limit/index.js +5 -5
- package/build/_modules/rate-limit/rate-limit.middleware.d.ts +132 -132
- package/build/_modules/rate-limit/rate-limit.middleware.js +289 -289
- package/build/_modules/scoped-config/_enums/dynts-scoped-config-level.enum.d.ts +18 -18
- package/build/_modules/scoped-config/_enums/dynts-scoped-config-level.enum.js +22 -22
- package/build/_modules/scoped-config/_models/data-models/dynts-scoped-config.data-model.d.ts +43 -43
- package/build/_modules/scoped-config/_models/data-models/dynts-scoped-config.data-model.js +67 -67
- package/build/_modules/scoped-config/_models/interfaces/dynts-scoped-config.interface.d.ts +88 -88
- package/build/_modules/scoped-config/_models/interfaces/dynts-scoped-config.interface.js +11 -11
- package/build/_modules/scoped-config/_services/dynts-scoped-config.control-service.d.ts +83 -83
- package/build/_modules/scoped-config/_services/dynts-scoped-config.control-service.js +219 -219
- package/build/_modules/scoped-config/_services/dynts-scoped-config.data-service.d.ts +53 -53
- package/build/_modules/scoped-config/_services/dynts-scoped-config.data-service.js +75 -75
- package/build/_modules/scoped-config/index.d.ts +5 -5
- package/build/_modules/scoped-config/index.js +14 -14
- package/build/_modules/server/errors/errors.control-service.d.ts +21 -21
- package/build/_modules/server/errors/errors.control-service.js +10 -10
- package/build/_modules/server/errors/errors.controller.d.ts +100 -100
- package/build/_modules/server/errors/errors.controller.js +355 -355
- package/build/_modules/server/errors/errors.data-service.d.ts +64 -64
- package/build/_modules/server/errors/errors.data-service.js +628 -628
- package/build/_modules/server/index.d.ts +7 -7
- package/build/_modules/server/index.js +26 -26
- package/build/_modules/server/server-status/server-status-snapshot.control-service.d.ts +4 -4
- package/build/_modules/server/server-status/server-status-snapshot.control-service.js +7 -7
- package/build/_modules/server/server-status/server-status-snapshot.data-service.d.ts +6 -6
- package/build/_modules/server/server-status/server-status-snapshot.data-service.js +22 -22
- package/build/_modules/server/server-status/server-status.control-service.d.ts +74 -74
- package/build/_modules/server/server-status/server-status.control-service.js +234 -234
- package/build/_modules/server/server-status/server-status.controller.d.ts +84 -84
- package/build/_modules/server/server-status/server-status.controller.js +172 -172
- package/build/_modules/socket/_enums/socket-security.enum.d.ts +10 -10
- package/build/_modules/socket/_enums/socket-security.enum.js +14 -14
- package/build/_modules/socket/_models/socket-client-service-params.control-model.d.ts +8 -8
- package/build/_modules/socket/_models/socket-client-service-params.control-model.js +16 -16
- package/build/_modules/socket/_models/socket-presence.control-model.d.ts +25 -25
- package/build/_modules/socket/_models/socket-presence.control-model.js +139 -139
- package/build/_modules/socket/_models/socket-server-service-params.control-model.d.ts +12 -12
- package/build/_modules/socket/_models/socket-server-service-params.control-model.js +20 -20
- package/build/_modules/socket/_services/socket-client.service.d.ts +37 -37
- package/build/_modules/socket/_services/socket-client.service.js +196 -196
- package/build/_modules/socket/_services/socket-server.service.d.ts +94 -94
- package/build/_modules/socket/_services/socket-server.service.js +689 -689
- package/build/_modules/socket/app-extended.server.d.ts +145 -145
- package/build/_modules/socket/app-extended.server.js +506 -506
- package/build/_modules/socket/index.d.ts +8 -8
- package/build/_modules/socket/index.js +35 -35
- package/build/_modules/test/get-test-routing-module.util.d.ts +3 -3
- package/build/_modules/test/get-test-routing-module.util.js +16 -16
- package/build/_modules/test/index.d.ts +3 -3
- package/build/_modules/test/index.js +11 -11
- package/build/_modules/test/test.controller.d.ts +5 -5
- package/build/_modules/test/test.controller.js +103 -103
- package/build/_modules/usage/get-usage-routing-module.util.d.ts +3 -3
- package/build/_modules/usage/get-usage-routing-module.util.js +16 -16
- package/build/_modules/usage/index.d.ts +4 -4
- package/build/_modules/usage/index.js +13 -13
- package/build/_modules/usage/usage.controller.d.ts +6 -6
- package/build/_modules/usage/usage.controller.js +95 -95
- package/build/_modules/usage/usage.data-service.d.ts +17 -17
- package/build/_modules/usage/usage.data-service.js +135 -135
- package/build/_services/base/api.service-base.d.ts +9 -9
- package/build/_services/base/api.service-base.js +46 -46
- package/build/_services/base/archive-data.service.d.ts +25 -25
- package/build/_services/base/archive-data.service.js +140 -140
- package/build/_services/base/data.service.d.ts +381 -381
- package/build/_services/base/data.service.js +2068 -2068
- package/build/_services/base/db.service.d.ts +393 -393
- package/build/_services/base/db.service.js +1256 -1256
- package/build/_services/base/singleton.service-base.d.ts +8 -8
- package/build/_services/base/singleton.service-base.js +21 -21
- package/build/_services/base/singleton.service.d.ts +11 -11
- package/build/_services/base/singleton.service.js +31 -31
- package/build/_services/core/api.service.d.ts +45 -45
- package/build/_services/core/api.service.js +436 -436
- package/build/_services/core/auth.service.d.ts +129 -129
- package/build/_services/core/auth.service.js +59 -59
- package/build/_services/core/email.service.d.ts +77 -77
- package/build/_services/core/email.service.js +489 -489
- package/build/_services/core/global.service.d.ts +76 -76
- package/build/_services/core/global.service.js +370 -370
- package/build/_services/core/memory-guard.service.d.ts +110 -110
- package/build/_services/core/memory-guard.service.js +197 -197
- package/build/_services/core/service-collection.service.d.ts +4 -4
- package/build/_services/core/service-collection.service.js +7 -7
- package/build/_services/route/controller.service.d.ts +124 -124
- package/build/_services/route/controller.service.js +95 -95
- package/build/_services/route/routing-module.service.d.ts +80 -80
- package/build/_services/route/routing-module.service.js +250 -250
- package/build/_services/server/app.server.d.ts +352 -352
- package/build/_services/server/app.server.js +1323 -1323
- package/build/_services/shared.static-service.d.ts +36 -36
- package/build/_services/shared.static-service.js +72 -72
- package/build/index.d.ts +43 -43
- package/build/index.js +80 -80
- package/eslint.config.js +3 -3
- package/nodemon.json +24 -24
- package/package.json +417 -416
- package/pnpm-workspace.yaml +5 -5
- 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/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/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/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 +89 -89
- package/src/_collections/mongo-reconnect-guard.util.spec.ts +52 -52
- package/src/_collections/mongo-reconnect-guard.util.ts +172 -172
- package/src/_collections/sample.env +21 -21
- package/src/_collections/star.controller.spec.ts +224 -224
- package/src/_collections/star.controller.ts +129 -129
- 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 +225 -225
- package/src/_models/control-models/app-params.control-model.ts +136 -136
- 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 +627 -627
- package/src/_models/control-models/endpoint-params.control-model.ts +627 -627
- 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/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/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 +185 -185
- package/src/_models/interfaces/routing-module-settings.interface.ts +21 -21
- package/src/_models/interfaces/static-client-settings.interface.spec.ts +29 -29
- package/src/_models/interfaces/static-client-settings.interface.ts +28 -28
- package/src/_models/types/db-update.type.ts +100 -100
- 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/_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/_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 +1033 -1033
- 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-mock.service.spec.ts +115 -115
- package/src/_modules/ai/_services/ai-embedding-mock.service.ts +233 -233
- 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.spec.ts +250 -250
- package/src/_modules/ai/_services/ai-llm.service-base.ts +519 -519
- 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 +23 -23
- 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 +198 -198
- package/src/_modules/local-vector-search/_services/lvs-persistent-vector-pool.control-service.ts +150 -150
- 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 +108 -108
- package/src/_modules/local-vector-search/_services/lvs-vector-pool.control-service.spec.ts +409 -393
- package/src/_modules/local-vector-search/_services/lvs-vector-pool.control-service.ts +224 -220
- 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/rate-limit/_models/rate-limit-config.interface.ts +69 -69
- package/src/_modules/rate-limit/_models/rate-limit-policy.interface.ts +16 -16
- package/src/_modules/rate-limit/index.ts +3 -3
- package/src/_modules/rate-limit/rate-limit.middleware.spec.ts +264 -264
- package/src/_modules/rate-limit/rate-limit.middleware.ts +343 -343
- 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 +249 -249
- package/src/_modules/server/errors/errors.controller.ts +489 -489
- package/src/_modules/server/errors/errors.data-service.spec.ts +480 -480
- package/src/_modules/server/errors/errors.data-service.ts +816 -816
- package/src/_modules/server/index.ts +30 -30
- 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 +584 -584
- package/src/_modules/server/server-status/server-status.control-service.ts +396 -396
- package/src/_modules/server/server-status/server-status.controller.spec.ts +248 -248
- package/src/_modules/server/server-status/server-status.controller.ts +253 -253
- 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 +164 -164
- package/src/_modules/socket/_models/socket-presence.control-model.ts +210 -210
- package/src/_modules/socket/_models/socket-server-service-params.control-model.spec.ts +46 -46
- package/src/_modules/socket/_models/socket-server-service-params.control-model.ts +22 -22
- 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 +11 -11
- package/src/_modules/socket/_services/socket-server.service.ts +1068 -1068
- package/src/_modules/socket/app-extended.integration.spec.ts +85 -85
- package/src/_modules/socket/app-extended.server.ts +630 -630
- 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/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 +81 -81
- package/src/_modules/usage/usage.controller.ts +126 -126
- 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 +196 -196
- package/src/_services/base/archive-data.service.ts +216 -216
- package/src/_services/base/data.service.spec.ts +674 -674
- package/src/_services/base/data.service.ts +2719 -2719
- package/src/_services/base/db.service.spec.ts +73 -73
- package/src/_services/base/db.service.ts +1575 -1575
- 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 +140 -140
- package/src/_services/core/api.service.ts +607 -607
- package/src/_services/core/auth.service.spec.ts +159 -159
- package/src/_services/core/auth.service.ts +174 -174
- package/src/_services/core/email.service.spec.ts +85 -85
- package/src/_services/core/email.service.ts +742 -742
- package/src/_services/core/global.service.spec.ts +292 -292
- package/src/_services/core/global.service.ts +475 -475
- package/src/_services/core/memory-guard.service.spec.ts +165 -165
- package/src/_services/core/memory-guard.service.ts +281 -281
- 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.server.ts +1747 -1747
- package/src/_services/shared.static-service.spec.ts +99 -99
- package/src/_services/shared.static-service.ts +78 -78
- package/src/index.ts +96 -96
- package/tsconfig.app.json +12 -12
- package/tsconfig.json +42 -42
|
@@ -1,466 +1,466 @@
|
|
|
1
|
-
import * as fs from 'fs';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
|
|
4
|
-
import { DyNTS_SingletonServiceBase } from '../../_services/base/singleton.service-base';
|
|
5
|
-
import { DyNTS_global_settings } from '../../_collections/global-settings.const';
|
|
6
|
-
import { DyNTS_FileLog_Entry } from './_models/file-log-entry.interface';
|
|
7
|
-
import { DyNTS_FileLog_ReadOptions, DyNTS_FileLog_ReadResult } from './_models/file-log-read-result.interface';
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Default ertekek a file-log config mezokhez. A `file_log` config nelkul
|
|
12
|
-
* az install() no-op (enabled === false).
|
|
13
|
-
*/
|
|
14
|
-
const DEFAULT_LOG_DIR: string = './logs/server';
|
|
15
|
-
const DEFAULT_FILENAME_PREFIX: string = 'server-';
|
|
16
|
-
const DEFAULT_FILENAME_SUFFIX: string = '.log';
|
|
17
|
-
const DEFAULT_MAX_FILE_SIZE_MB: number = 50;
|
|
18
|
-
const DEFAULT_MAX_FILES: number = 10;
|
|
19
|
-
const DEFAULT_RETENTION_DAYS: number = 30;
|
|
20
|
-
const DEFAULT_STRIP_ANSI: boolean = true;
|
|
21
|
-
const DEFAULT_INCLUDE_STDOUT: boolean = true;
|
|
22
|
-
const DEFAULT_INCLUDE_STDERR: boolean = true;
|
|
23
|
-
|
|
24
|
-
/** ANSI escape code regex (szin/formazas kodok). */
|
|
25
|
-
const ANSI_ESCAPE_REGEX: RegExp = /\x1b\[[0-9;]*[a-zA-Z]/g;
|
|
26
|
-
|
|
27
|
-
/** Max sor szam egy `readLogFile()` hivasra — vedi a memory-t nagy fajloknal. */
|
|
28
|
-
const MAX_READ_LINES: number = 10000;
|
|
29
|
-
|
|
30
|
-
/** Default tail sor szam (ha semmi mas mod nincs megadva). */
|
|
31
|
-
const DEFAULT_READ_TAIL: number = 200;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* File-based szerver log service — duplikalja a stdout/stderr-t per-session
|
|
36
|
-
* log fajl(ok)ba, miközben a console kimenet erintetlenul marad. Az
|
|
37
|
-
* in-memory ring buffer (`DyNTS_Logs_Service`) MELLETT mukodik, NEM
|
|
38
|
-
* helyette.
|
|
39
|
-
*
|
|
40
|
-
* Architecture:
|
|
41
|
-
* - `process.stdout.write` es `process.stderr.write` monkey-patch (NEM
|
|
42
|
-
* `console.*` — azt mar a `DyNTS_Logs_Service` patch-elheti)
|
|
43
|
-
* - Per-session fajl: `{logDir}/{prefix}YYYY-MM-DD_HH-MM-SS.log`
|
|
44
|
-
* - Sync `appendFileSync` iras — crash-safe, azonnali flush
|
|
45
|
-
* - Rotation: `maxFileSizeMb` atlepesenel uj session fajl
|
|
46
|
-
* - Retention: `maxFiles` (count) ES `retentionDays` (age) — ami elobb
|
|
47
|
-
* teljesul; install-kor + minden rotation utan futtatva
|
|
48
|
-
* - Silent failure: file IO hibak ELNYELODNEK (a file logger SOHASEM
|
|
49
|
-
* buktathatja el a szervert)
|
|
50
|
-
*
|
|
51
|
-
* Idempotens: tobbszori install() hivas no-op (a masodiktol).
|
|
52
|
-
*
|
|
53
|
-
* Hasznalat:
|
|
54
|
-
* DyNTS_global_settings.log_settings.file_log = { enabled: true, ... };
|
|
55
|
-
* DyNTS_FileLog_Service.getInstance().install(); // szerver startup
|
|
56
|
-
*/
|
|
57
|
-
export class DyNTS_FileLog_Service extends DyNTS_SingletonServiceBase {
|
|
58
|
-
|
|
59
|
-
static getInstance(): DyNTS_FileLog_Service {
|
|
60
|
-
return DyNTS_FileLog_Service.getSingletonInstance() as DyNTS_FileLog_Service;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
private installed: boolean = false;
|
|
64
|
-
private activeLogDir: string = '';
|
|
65
|
-
private filenamePrefix: string = DEFAULT_FILENAME_PREFIX;
|
|
66
|
-
private maxFileSizeBytes: number = DEFAULT_MAX_FILE_SIZE_MB * 1024 * 1024;
|
|
67
|
-
private maxFiles: number = DEFAULT_MAX_FILES;
|
|
68
|
-
private retentionDays: number = DEFAULT_RETENTION_DAYS;
|
|
69
|
-
private stripAnsiEnabled: boolean = DEFAULT_STRIP_ANSI;
|
|
70
|
-
private currentLogPath: string = '';
|
|
71
|
-
private currentLogSizeBytes: number = 0;
|
|
72
|
-
|
|
73
|
-
private originalStdoutWrite: typeof process.stdout.write | null = null;
|
|
74
|
-
private originalStderrWrite: typeof process.stderr.write | null = null;
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Telepiti a file logger-t a `DyNTS_global_settings.log_settings.file_log`
|
|
79
|
-
* config alapjan. Ha `enabled === false` vagy hianyzik a config → no-op.
|
|
80
|
-
*
|
|
81
|
-
* Idempotens — masodszori hivas no-op (akkor is, ha kozben a config
|
|
82
|
-
* valtozott; a service uj install-jara teardownFor Testing() + install()).
|
|
83
|
-
*/
|
|
84
|
-
install(): void {
|
|
85
|
-
if (this.installed) { return; }
|
|
86
|
-
|
|
87
|
-
const config = DyNTS_global_settings.log_settings?.file_log;
|
|
88
|
-
if (!config || !config.enabled) { return; }
|
|
89
|
-
|
|
90
|
-
// Config feldolgozas + default-ok
|
|
91
|
-
this.activeLogDir = config.logDir ?? DEFAULT_LOG_DIR;
|
|
92
|
-
this.filenamePrefix = config.filenamePrefix ?? DEFAULT_FILENAME_PREFIX;
|
|
93
|
-
this.maxFileSizeBytes = (config.maxFileSizeMb ?? DEFAULT_MAX_FILE_SIZE_MB) * 1024 * 1024;
|
|
94
|
-
this.maxFiles = config.maxFiles ?? DEFAULT_MAX_FILES;
|
|
95
|
-
this.retentionDays = config.retentionDays ?? DEFAULT_RETENTION_DAYS;
|
|
96
|
-
this.stripAnsiEnabled = config.stripAnsi ?? DEFAULT_STRIP_ANSI;
|
|
97
|
-
const includeStdout: boolean = config.includeStdout ?? DEFAULT_INCLUDE_STDOUT;
|
|
98
|
-
const includeStderr: boolean = config.includeStderr ?? DEFAULT_INCLUDE_STDERR;
|
|
99
|
-
|
|
100
|
-
// Log dir letrehozasa silently
|
|
101
|
-
try {
|
|
102
|
-
if (!fs.existsSync(this.activeLogDir)) {
|
|
103
|
-
fs.mkdirSync(this.activeLogDir, { recursive: true });
|
|
104
|
-
}
|
|
105
|
-
} catch {
|
|
106
|
-
// Ha a mkdir bukik (pl. permission denied), no-op — silent failure
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
// Retention cleanup MIELOTT az uj session fajl letrejon (hogy a takaritas
|
|
111
|
-
// log uzenete ne keruljon a most induló fajlba)
|
|
112
|
-
this.cleanupOldLogs();
|
|
113
|
-
|
|
114
|
-
// Uj session fajl path + size init
|
|
115
|
-
this.currentLogPath = path.join(this.activeLogDir, this.buildSessionFilename());
|
|
116
|
-
this.currentLogSizeBytes = 0;
|
|
117
|
-
|
|
118
|
-
// Monkey-patch — az originalokat elmentjük (teardown miatt)
|
|
119
|
-
if (includeStdout) {
|
|
120
|
-
this.originalStdoutWrite = process.stdout.write.bind(process.stdout);
|
|
121
|
-
const self: DyNTS_FileLog_Service = this;
|
|
122
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
123
|
-
process.stdout.write = function patchedStdoutWrite(...args: any[]): boolean {
|
|
124
|
-
self.teeWrite(args[0]);
|
|
125
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
126
|
-
return (self.originalStdoutWrite as any)(...args);
|
|
127
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
128
|
-
} as any;
|
|
129
|
-
}
|
|
130
|
-
if (includeStderr) {
|
|
131
|
-
this.originalStderrWrite = process.stderr.write.bind(process.stderr);
|
|
132
|
-
const self: DyNTS_FileLog_Service = this;
|
|
133
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
134
|
-
process.stderr.write = function patchedStderrWrite(...args: any[]): boolean {
|
|
135
|
-
self.teeWrite(args[0]);
|
|
136
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
137
|
-
return (self.originalStderrWrite as any)(...args);
|
|
138
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
139
|
-
} as any;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
this.installed = true;
|
|
143
|
-
|
|
144
|
-
// Session header — kulcs info egy helyen a fajl tetejen
|
|
145
|
-
this.teeWrite(
|
|
146
|
-
`===== DyNTS server log session started at ${new Date().toISOString()} =====\n` +
|
|
147
|
-
`===== PID: ${process.pid}, Node: ${process.version} =====\n` +
|
|
148
|
-
`===== Retention: ${this.retentionDays} days, max files: ${this.maxFiles}, max size: ${config.maxFileSizeMb ?? DEFAULT_MAX_FILE_SIZE_MB}MB =====\n\n`,
|
|
149
|
-
);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* Visszaadja az aktualis log fajl abszolut path-jat (csak akkor letezo,
|
|
154
|
-
* ha az install() sikeresen lefutott; egyebkent ures string).
|
|
155
|
-
*/
|
|
156
|
-
getCurrentLogPath(): string {
|
|
157
|
-
return this.currentLogPath;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* Az aktualis aktiv log fajl basename-je (NEM teljes path). Csak akkor
|
|
162
|
-
* nem-ures, ha az install() sikeresen lefutott.
|
|
163
|
-
*/
|
|
164
|
-
getCurrentLogFilename(): string {
|
|
165
|
-
if (!this.currentLogPath) { return ''; }
|
|
166
|
-
return path.basename(this.currentLogPath);
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* Aktiv log dir abszolut path-ja. Csak akkor nem-ures, ha az install()
|
|
171
|
-
* sikeresen lefutott.
|
|
172
|
-
*/
|
|
173
|
-
getActiveLogDir(): string {
|
|
174
|
-
return this.activeLogDir;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* Aktiv filename prefix (a service config-jabol). Hasznalja a controller
|
|
179
|
-
* a request-fajlnev whitelist regex epitesehez.
|
|
180
|
-
*/
|
|
181
|
-
getFilenamePrefix(): string {
|
|
182
|
-
return this.filenamePrefix;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* Osszes log fajl listazasa az aktiv log dir-bol. Csak a service prefix-evel
|
|
187
|
-
* matchelo fajlokat veszi (`{prefix}*.log`).
|
|
188
|
-
*
|
|
189
|
-
* Rendezes: mtime DESC (legujabb elol). Hibakat csendben elnyel — ha a dir
|
|
190
|
-
* nem letezik vagy nem olvashato, ures array-t ad vissza.
|
|
191
|
-
*/
|
|
192
|
-
listLogFiles(): DyNTS_FileLog_Entry[] {
|
|
193
|
-
if (!this.activeLogDir || !this.installed) { return []; }
|
|
194
|
-
const currentBasename: string = this.getCurrentLogFilename();
|
|
195
|
-
const entries: DyNTS_FileLog_Entry[] = [];
|
|
196
|
-
|
|
197
|
-
try {
|
|
198
|
-
const dirContents: string[] = fs.readdirSync(this.activeLogDir);
|
|
199
|
-
for (const name of dirContents) {
|
|
200
|
-
if (!name.startsWith(this.filenamePrefix) || !name.endsWith(DEFAULT_FILENAME_SUFFIX)) { continue; }
|
|
201
|
-
const fullPath: string = path.join(this.activeLogDir, name);
|
|
202
|
-
try {
|
|
203
|
-
const stats: fs.Stats = fs.statSync(fullPath);
|
|
204
|
-
if (!stats.isFile()) { continue; }
|
|
205
|
-
entries.push({
|
|
206
|
-
name: name,
|
|
207
|
-
sizeBytes: stats.size,
|
|
208
|
-
mtimeMs: stats.mtimeMs,
|
|
209
|
-
isCurrent: name === currentBasename,
|
|
210
|
-
});
|
|
211
|
-
} catch {
|
|
212
|
-
// egy fajlonkenti hiba ne szakitsa meg a listat
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
} catch {
|
|
216
|
-
// dir read hiba → ures listat adunk vissza
|
|
217
|
-
return [];
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
// Legujabb elol
|
|
221
|
-
entries.sort((a: DyNTS_FileLog_Entry, b: DyNTS_FileLog_Entry): number => b.mtimeMs - a.mtimeMs);
|
|
222
|
-
return entries;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
/**
|
|
226
|
-
* Egy konkret log fajl olvasasa, line-based mode-ban (tail / head / range).
|
|
227
|
-
*
|
|
228
|
-
* **Biztonsagi safeguards:**
|
|
229
|
-
* - Filename whitelist: `{prefix}*.log` mintara matchelo nev kotelezo
|
|
230
|
-
* - Path resolution `path.resolve(activeLogDir, name)` + `startsWith(activeLogDir)` (path traversal vedelem)
|
|
231
|
-
* - Sor szam cap: `MAX_READ_LINES` (10000)
|
|
232
|
-
*
|
|
233
|
-
* **Hibak:**
|
|
234
|
-
* - Throw `Error('not installed')` ha a service nincs install-olva
|
|
235
|
-
* - Throw `Error('invalid filename')` ha a name nem matchel a whitelist-re VAGY kilep az activeLogDir-bol
|
|
236
|
-
* - Throw `Error('file not found')` ha a fajl nem letezik
|
|
237
|
-
*
|
|
238
|
-
* A hivot kell vigyaznia hogy ezeket HTTP status code-okra forditja.
|
|
239
|
-
*/
|
|
240
|
-
readLogFile(name: string, options: DyNTS_FileLog_ReadOptions = {}): DyNTS_FileLog_ReadResult {
|
|
241
|
-
if (!this.installed || !this.activeLogDir) {
|
|
242
|
-
throw new Error('FileLog service not installed');
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
// Whitelist regex: csak a service prefix-evel matchelo fajlnev
|
|
246
|
-
if (!this.isValidFilename(name)) {
|
|
247
|
-
throw new Error('invalid filename');
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
// Path resolve + traversal check
|
|
251
|
-
const resolvedPath: string = path.resolve(this.activeLogDir, name);
|
|
252
|
-
const resolvedDir: string = path.resolve(this.activeLogDir);
|
|
253
|
-
// path.sep + sufix ellenőrzéssel megelőzzük a hasonló prefixű dir átverést
|
|
254
|
-
// (pl. '/logs' vs '/logs-other'); a resolvedPath az activeLogDir-en BELUL
|
|
255
|
-
// kell legyen.
|
|
256
|
-
if (!resolvedPath.startsWith(resolvedDir + path.sep) && resolvedPath !== resolvedDir) {
|
|
257
|
-
throw new Error('invalid filename');
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
if (!fs.existsSync(resolvedPath)) {
|
|
261
|
-
throw new Error('file not found');
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
const stats: fs.Stats = fs.statSync(resolvedPath);
|
|
265
|
-
if (!stats.isFile()) {
|
|
266
|
-
throw new Error('file not found');
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
// Olvass + split soroka. UTF-8 encoding alapertelmezett. Nagy fajloknal a
|
|
270
|
-
// teljes betoltes nem ideal, de a 10000-soros cap es a Stream-based
|
|
271
|
-
// optimization egy kesobbi iteracio lehet ha kell.
|
|
272
|
-
const fullContent: string = fs.readFileSync(resolvedPath, 'utf-8');
|
|
273
|
-
// Split a sorvegekre — utolso ures stringet kivagjuk ha a fajl
|
|
274
|
-
// sorvégzodessel zarult (regenerált sor szám hibakerulest celozzuk meg)
|
|
275
|
-
const allLines: string[] = fullContent.split(/\r?\n/);
|
|
276
|
-
if (allLines.length > 0 && allLines[allLines.length - 1] === '') {
|
|
277
|
-
allLines.pop();
|
|
278
|
-
}
|
|
279
|
-
const totalLines: number = allLines.length;
|
|
280
|
-
|
|
281
|
-
// Mod meghatarozasa: range > head > tail
|
|
282
|
-
let mode: 'tail' | 'head' | 'range';
|
|
283
|
-
let startIdx: number;
|
|
284
|
-
let endIdx: number; // exclusive
|
|
285
|
-
|
|
286
|
-
if (options.rangeStart !== undefined && options.rangeEnd !== undefined) {
|
|
287
|
-
mode = 'range';
|
|
288
|
-
const start1: number = Math.max(1, Math.floor(options.rangeStart));
|
|
289
|
-
const end1: number = Math.max(start1, Math.floor(options.rangeEnd));
|
|
290
|
-
startIdx = Math.max(0, Math.min(totalLines, start1 - 1));
|
|
291
|
-
endIdx = Math.max(startIdx, Math.min(totalLines, end1));
|
|
292
|
-
// Cap
|
|
293
|
-
if (endIdx - startIdx > MAX_READ_LINES) {
|
|
294
|
-
endIdx = startIdx + MAX_READ_LINES;
|
|
295
|
-
}
|
|
296
|
-
} else if (options.head !== undefined) {
|
|
297
|
-
mode = 'head';
|
|
298
|
-
const headN: number = Math.min(Math.max(1, Math.floor(options.head)), MAX_READ_LINES);
|
|
299
|
-
startIdx = 0;
|
|
300
|
-
endIdx = Math.min(totalLines, headN);
|
|
301
|
-
} else {
|
|
302
|
-
mode = 'tail';
|
|
303
|
-
const tailN: number = Math.min(Math.max(1, Math.floor(options.tail ?? DEFAULT_READ_TAIL)), MAX_READ_LINES);
|
|
304
|
-
startIdx = Math.max(0, totalLines - tailN);
|
|
305
|
-
endIdx = totalLines;
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
const lines: string[] = allLines.slice(startIdx, endIdx);
|
|
309
|
-
|
|
310
|
-
return {
|
|
311
|
-
name: path.basename(resolvedPath),
|
|
312
|
-
sizeBytes: stats.size,
|
|
313
|
-
totalLines: totalLines,
|
|
314
|
-
lines: lines,
|
|
315
|
-
mode: mode,
|
|
316
|
-
rangeStart: startIdx + 1, // 1-based, inclusive
|
|
317
|
-
rangeEnd: Math.max(startIdx, endIdx), // 1-based, inclusive ha lines van; egyebkent 0-szeru
|
|
318
|
-
};
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
/**
|
|
322
|
-
* Filename whitelist ellenorzes. Csak a service prefix-evel matchelo,
|
|
323
|
-
* biztonsagos karakterkeszletu fajlnev megengedett.
|
|
324
|
-
*/
|
|
325
|
-
private isValidFilename(name: string): boolean {
|
|
326
|
-
if (typeof name !== 'string' || name.length === 0 || name.length > 256) { return false; }
|
|
327
|
-
// Path-szeparatorokat kifejezetten tiltjuk (mar a regex is, de gyors check)
|
|
328
|
-
if (name.includes('/') || name.includes('\\') || name.includes('..')) { return false; }
|
|
329
|
-
// `{prefix}[\w\-.]+\.log` — szigoru ASCII set
|
|
330
|
-
const escapedPrefix: string = this.filenamePrefix.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
331
|
-
const regex: RegExp = new RegExp(`^${escapedPrefix}[\\w\\-.]+\\.log$`);
|
|
332
|
-
return regex.test(name);
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
/**
|
|
336
|
-
* Telepitve van-e (csak akkor true, ha az enabled === true es a setup nem bukott).
|
|
337
|
-
*/
|
|
338
|
-
isInstalled(): boolean {
|
|
339
|
-
return this.installed;
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
/**
|
|
343
|
-
* Test-only: visszallitja az eredeti stdout/stderr.write-okat, hogy a
|
|
344
|
-
* specfajlok egymas utan tisztán futhassanak. Production code NE hivja.
|
|
345
|
-
*/
|
|
346
|
-
_teardownForTesting(): void {
|
|
347
|
-
if (this.originalStdoutWrite) {
|
|
348
|
-
process.stdout.write = this.originalStdoutWrite;
|
|
349
|
-
this.originalStdoutWrite = null;
|
|
350
|
-
}
|
|
351
|
-
if (this.originalStderrWrite) {
|
|
352
|
-
process.stderr.write = this.originalStderrWrite;
|
|
353
|
-
this.originalStderrWrite = null;
|
|
354
|
-
}
|
|
355
|
-
this.installed = false;
|
|
356
|
-
this.activeLogDir = '';
|
|
357
|
-
this.currentLogPath = '';
|
|
358
|
-
this.currentLogSizeBytes = 0;
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
/**
|
|
363
|
-
* Session fajl nev: `{prefix}YYYY-MM-DD_HH-MM-SS_RANDOM.log`. Az RANDOM
|
|
364
|
-
* suffix biztositja a unique nevet ha ugyanazon a masodpercen tobb fajl jon letre
|
|
365
|
-
* (pl. rotation kozvetlenul install utan, vagy specfajlok gyors egymas utan).
|
|
366
|
-
*/
|
|
367
|
-
private buildSessionFilename(): string {
|
|
368
|
-
const now: Date = new Date();
|
|
369
|
-
const year: string = String(now.getFullYear());
|
|
370
|
-
const month: string = String(now.getMonth() + 1).padStart(2, '0');
|
|
371
|
-
const day: string = String(now.getDate()).padStart(2, '0');
|
|
372
|
-
const hour: string = String(now.getHours()).padStart(2, '0');
|
|
373
|
-
const minute: string = String(now.getMinutes()).padStart(2, '0');
|
|
374
|
-
const second: string = String(now.getSeconds()).padStart(2, '0');
|
|
375
|
-
const rand: string = Math.floor(Math.random() * 100000).toString(36);
|
|
376
|
-
return `${this.filenamePrefix}${year}-${month}-${day}_${hour}-${minute}-${second}_${rand}${DEFAULT_FILENAME_SUFFIX}`;
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
/**
|
|
381
|
-
* Egyetlen stdout/stderr iras tee-zese az aktualis log fajlba.
|
|
382
|
-
* Hibakat csendben elnyeli — a file logger SOHASEM blokkolja a szervert.
|
|
383
|
-
* Size-trackeli az aktualis fajlt es szukseg szerint rotalja.
|
|
384
|
-
*/
|
|
385
|
-
private teeWrite(data: string | Uint8Array): void {
|
|
386
|
-
try {
|
|
387
|
-
if (!this.currentLogPath) { return; }
|
|
388
|
-
|
|
389
|
-
const asString: string = typeof data === 'string'
|
|
390
|
-
? data
|
|
391
|
-
: Buffer.from(data).toString('utf-8');
|
|
392
|
-
const cleaned: string = this.stripAnsiEnabled ? asString.replace(ANSI_ESCAPE_REGEX, '') : asString;
|
|
393
|
-
const writeBytes: number = Buffer.byteLength(cleaned, 'utf-8');
|
|
394
|
-
|
|
395
|
-
fs.appendFileSync(this.currentLogPath, cleaned, 'utf-8');
|
|
396
|
-
this.currentLogSizeBytes += writeBytes;
|
|
397
|
-
|
|
398
|
-
// Rotation trigger
|
|
399
|
-
if (this.currentLogSizeBytes >= this.maxFileSizeBytes) {
|
|
400
|
-
this.rotate();
|
|
401
|
-
}
|
|
402
|
-
} catch {
|
|
403
|
-
// szandekosan elnyelve — silent failure
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
/**
|
|
408
|
-
* Uj session fajl letrehozasa (az aktualis lezarodik). Retention cleanup-ot is
|
|
409
|
-
* vegrehajt, hogy a rotation termeszetesen tisztan tarttsa a log dir-t.
|
|
410
|
-
*/
|
|
411
|
-
private rotate(): void {
|
|
412
|
-
try {
|
|
413
|
-
this.cleanupOldLogs();
|
|
414
|
-
this.currentLogPath = path.join(this.activeLogDir, this.buildSessionFilename());
|
|
415
|
-
this.currentLogSizeBytes = 0;
|
|
416
|
-
} catch {
|
|
417
|
-
// szandekosan elnyelve
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
/**
|
|
423
|
-
* Retention takaritas: ket szabaly ami ami elobb teljesul:
|
|
424
|
-
* 1) maxFiles — ha tobb mint N log fajl van, a legregebbieket torli
|
|
425
|
-
* 2) retentionDays — `retentionDays`-nel idosebb fajlokat torli
|
|
426
|
-
*
|
|
427
|
-
* Hibakat csendben elnyel. A torolt fajlokat es az okot NEM logoljuk, hogy
|
|
428
|
-
* ne kerüljön extra szennyezes a most induló session fajlba.
|
|
429
|
-
*/
|
|
430
|
-
private cleanupOldLogs(): void {
|
|
431
|
-
try {
|
|
432
|
-
if (!fs.existsSync(this.activeLogDir)) { return; }
|
|
433
|
-
|
|
434
|
-
const cutoffMs: number = Date.now() - this.retentionDays * 24 * 60 * 60 * 1000;
|
|
435
|
-
const entries: string[] = fs.readdirSync(this.activeLogDir);
|
|
436
|
-
|
|
437
|
-
type FileInfo = { fullPath: string; mtimeMs: number };
|
|
438
|
-
const matchingFiles: FileInfo[] = [];
|
|
439
|
-
|
|
440
|
-
for (const entry of entries) {
|
|
441
|
-
if (!entry.startsWith(this.filenamePrefix) || !entry.endsWith(DEFAULT_FILENAME_SUFFIX)) { continue; }
|
|
442
|
-
const fullPath: string = path.join(this.activeLogDir, entry);
|
|
443
|
-
try {
|
|
444
|
-
const stats: fs.Stats = fs.statSync(fullPath);
|
|
445
|
-
matchingFiles.push({ fullPath: fullPath, mtimeMs: stats.mtimeMs });
|
|
446
|
-
} catch {
|
|
447
|
-
// fajlonkent elnyelve
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
// Sort: legujabb elol -> legregebbi hatul (csokkeno mtime)
|
|
452
|
-
matchingFiles.sort((a: FileInfo, b: FileInfo): number => b.mtimeMs - a.mtimeMs);
|
|
453
|
-
|
|
454
|
-
for (let i: number = 0; i < matchingFiles.length; i++) {
|
|
455
|
-
const file: FileInfo = matchingFiles[i];
|
|
456
|
-
const tooOldByAge: boolean = file.mtimeMs < cutoffMs;
|
|
457
|
-
const tooManyByCount: boolean = i >= this.maxFiles;
|
|
458
|
-
if (tooOldByAge || tooManyByCount) {
|
|
459
|
-
try { fs.unlinkSync(file.fullPath); } catch { /* fajlonkent elnyelve */ }
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
} catch {
|
|
463
|
-
// szandekosan elnyelve
|
|
464
|
-
}
|
|
465
|
-
}
|
|
466
|
-
}
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
|
|
4
|
+
import { DyNTS_SingletonServiceBase } from '../../_services/base/singleton.service-base';
|
|
5
|
+
import { DyNTS_global_settings } from '../../_collections/global-settings.const';
|
|
6
|
+
import { DyNTS_FileLog_Entry } from './_models/file-log-entry.interface';
|
|
7
|
+
import { DyNTS_FileLog_ReadOptions, DyNTS_FileLog_ReadResult } from './_models/file-log-read-result.interface';
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Default ertekek a file-log config mezokhez. A `file_log` config nelkul
|
|
12
|
+
* az install() no-op (enabled === false).
|
|
13
|
+
*/
|
|
14
|
+
const DEFAULT_LOG_DIR: string = './logs/server';
|
|
15
|
+
const DEFAULT_FILENAME_PREFIX: string = 'server-';
|
|
16
|
+
const DEFAULT_FILENAME_SUFFIX: string = '.log';
|
|
17
|
+
const DEFAULT_MAX_FILE_SIZE_MB: number = 50;
|
|
18
|
+
const DEFAULT_MAX_FILES: number = 10;
|
|
19
|
+
const DEFAULT_RETENTION_DAYS: number = 30;
|
|
20
|
+
const DEFAULT_STRIP_ANSI: boolean = true;
|
|
21
|
+
const DEFAULT_INCLUDE_STDOUT: boolean = true;
|
|
22
|
+
const DEFAULT_INCLUDE_STDERR: boolean = true;
|
|
23
|
+
|
|
24
|
+
/** ANSI escape code regex (szin/formazas kodok). */
|
|
25
|
+
const ANSI_ESCAPE_REGEX: RegExp = /\x1b\[[0-9;]*[a-zA-Z]/g;
|
|
26
|
+
|
|
27
|
+
/** Max sor szam egy `readLogFile()` hivasra — vedi a memory-t nagy fajloknal. */
|
|
28
|
+
const MAX_READ_LINES: number = 10000;
|
|
29
|
+
|
|
30
|
+
/** Default tail sor szam (ha semmi mas mod nincs megadva). */
|
|
31
|
+
const DEFAULT_READ_TAIL: number = 200;
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* File-based szerver log service — duplikalja a stdout/stderr-t per-session
|
|
36
|
+
* log fajl(ok)ba, miközben a console kimenet erintetlenul marad. Az
|
|
37
|
+
* in-memory ring buffer (`DyNTS_Logs_Service`) MELLETT mukodik, NEM
|
|
38
|
+
* helyette.
|
|
39
|
+
*
|
|
40
|
+
* Architecture:
|
|
41
|
+
* - `process.stdout.write` es `process.stderr.write` monkey-patch (NEM
|
|
42
|
+
* `console.*` — azt mar a `DyNTS_Logs_Service` patch-elheti)
|
|
43
|
+
* - Per-session fajl: `{logDir}/{prefix}YYYY-MM-DD_HH-MM-SS.log`
|
|
44
|
+
* - Sync `appendFileSync` iras — crash-safe, azonnali flush
|
|
45
|
+
* - Rotation: `maxFileSizeMb` atlepesenel uj session fajl
|
|
46
|
+
* - Retention: `maxFiles` (count) ES `retentionDays` (age) — ami elobb
|
|
47
|
+
* teljesul; install-kor + minden rotation utan futtatva
|
|
48
|
+
* - Silent failure: file IO hibak ELNYELODNEK (a file logger SOHASEM
|
|
49
|
+
* buktathatja el a szervert)
|
|
50
|
+
*
|
|
51
|
+
* Idempotens: tobbszori install() hivas no-op (a masodiktol).
|
|
52
|
+
*
|
|
53
|
+
* Hasznalat:
|
|
54
|
+
* DyNTS_global_settings.log_settings.file_log = { enabled: true, ... };
|
|
55
|
+
* DyNTS_FileLog_Service.getInstance().install(); // szerver startup
|
|
56
|
+
*/
|
|
57
|
+
export class DyNTS_FileLog_Service extends DyNTS_SingletonServiceBase {
|
|
58
|
+
|
|
59
|
+
static getInstance(): DyNTS_FileLog_Service {
|
|
60
|
+
return DyNTS_FileLog_Service.getSingletonInstance() as DyNTS_FileLog_Service;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
private installed: boolean = false;
|
|
64
|
+
private activeLogDir: string = '';
|
|
65
|
+
private filenamePrefix: string = DEFAULT_FILENAME_PREFIX;
|
|
66
|
+
private maxFileSizeBytes: number = DEFAULT_MAX_FILE_SIZE_MB * 1024 * 1024;
|
|
67
|
+
private maxFiles: number = DEFAULT_MAX_FILES;
|
|
68
|
+
private retentionDays: number = DEFAULT_RETENTION_DAYS;
|
|
69
|
+
private stripAnsiEnabled: boolean = DEFAULT_STRIP_ANSI;
|
|
70
|
+
private currentLogPath: string = '';
|
|
71
|
+
private currentLogSizeBytes: number = 0;
|
|
72
|
+
|
|
73
|
+
private originalStdoutWrite: typeof process.stdout.write | null = null;
|
|
74
|
+
private originalStderrWrite: typeof process.stderr.write | null = null;
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Telepiti a file logger-t a `DyNTS_global_settings.log_settings.file_log`
|
|
79
|
+
* config alapjan. Ha `enabled === false` vagy hianyzik a config → no-op.
|
|
80
|
+
*
|
|
81
|
+
* Idempotens — masodszori hivas no-op (akkor is, ha kozben a config
|
|
82
|
+
* valtozott; a service uj install-jara teardownFor Testing() + install()).
|
|
83
|
+
*/
|
|
84
|
+
install(): void {
|
|
85
|
+
if (this.installed) { return; }
|
|
86
|
+
|
|
87
|
+
const config = DyNTS_global_settings.log_settings?.file_log;
|
|
88
|
+
if (!config || !config.enabled) { return; }
|
|
89
|
+
|
|
90
|
+
// Config feldolgozas + default-ok
|
|
91
|
+
this.activeLogDir = config.logDir ?? DEFAULT_LOG_DIR;
|
|
92
|
+
this.filenamePrefix = config.filenamePrefix ?? DEFAULT_FILENAME_PREFIX;
|
|
93
|
+
this.maxFileSizeBytes = (config.maxFileSizeMb ?? DEFAULT_MAX_FILE_SIZE_MB) * 1024 * 1024;
|
|
94
|
+
this.maxFiles = config.maxFiles ?? DEFAULT_MAX_FILES;
|
|
95
|
+
this.retentionDays = config.retentionDays ?? DEFAULT_RETENTION_DAYS;
|
|
96
|
+
this.stripAnsiEnabled = config.stripAnsi ?? DEFAULT_STRIP_ANSI;
|
|
97
|
+
const includeStdout: boolean = config.includeStdout ?? DEFAULT_INCLUDE_STDOUT;
|
|
98
|
+
const includeStderr: boolean = config.includeStderr ?? DEFAULT_INCLUDE_STDERR;
|
|
99
|
+
|
|
100
|
+
// Log dir letrehozasa silently
|
|
101
|
+
try {
|
|
102
|
+
if (!fs.existsSync(this.activeLogDir)) {
|
|
103
|
+
fs.mkdirSync(this.activeLogDir, { recursive: true });
|
|
104
|
+
}
|
|
105
|
+
} catch {
|
|
106
|
+
// Ha a mkdir bukik (pl. permission denied), no-op — silent failure
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Retention cleanup MIELOTT az uj session fajl letrejon (hogy a takaritas
|
|
111
|
+
// log uzenete ne keruljon a most induló fajlba)
|
|
112
|
+
this.cleanupOldLogs();
|
|
113
|
+
|
|
114
|
+
// Uj session fajl path + size init
|
|
115
|
+
this.currentLogPath = path.join(this.activeLogDir, this.buildSessionFilename());
|
|
116
|
+
this.currentLogSizeBytes = 0;
|
|
117
|
+
|
|
118
|
+
// Monkey-patch — az originalokat elmentjük (teardown miatt)
|
|
119
|
+
if (includeStdout) {
|
|
120
|
+
this.originalStdoutWrite = process.stdout.write.bind(process.stdout);
|
|
121
|
+
const self: DyNTS_FileLog_Service = this;
|
|
122
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
123
|
+
process.stdout.write = function patchedStdoutWrite(...args: any[]): boolean {
|
|
124
|
+
self.teeWrite(args[0]);
|
|
125
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
126
|
+
return (self.originalStdoutWrite as any)(...args);
|
|
127
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
128
|
+
} as any;
|
|
129
|
+
}
|
|
130
|
+
if (includeStderr) {
|
|
131
|
+
this.originalStderrWrite = process.stderr.write.bind(process.stderr);
|
|
132
|
+
const self: DyNTS_FileLog_Service = this;
|
|
133
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
134
|
+
process.stderr.write = function patchedStderrWrite(...args: any[]): boolean {
|
|
135
|
+
self.teeWrite(args[0]);
|
|
136
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
137
|
+
return (self.originalStderrWrite as any)(...args);
|
|
138
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
139
|
+
} as any;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
this.installed = true;
|
|
143
|
+
|
|
144
|
+
// Session header — kulcs info egy helyen a fajl tetejen
|
|
145
|
+
this.teeWrite(
|
|
146
|
+
`===== DyNTS server log session started at ${new Date().toISOString()} =====\n` +
|
|
147
|
+
`===== PID: ${process.pid}, Node: ${process.version} =====\n` +
|
|
148
|
+
`===== Retention: ${this.retentionDays} days, max files: ${this.maxFiles}, max size: ${config.maxFileSizeMb ?? DEFAULT_MAX_FILE_SIZE_MB}MB =====\n\n`,
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Visszaadja az aktualis log fajl abszolut path-jat (csak akkor letezo,
|
|
154
|
+
* ha az install() sikeresen lefutott; egyebkent ures string).
|
|
155
|
+
*/
|
|
156
|
+
getCurrentLogPath(): string {
|
|
157
|
+
return this.currentLogPath;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Az aktualis aktiv log fajl basename-je (NEM teljes path). Csak akkor
|
|
162
|
+
* nem-ures, ha az install() sikeresen lefutott.
|
|
163
|
+
*/
|
|
164
|
+
getCurrentLogFilename(): string {
|
|
165
|
+
if (!this.currentLogPath) { return ''; }
|
|
166
|
+
return path.basename(this.currentLogPath);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Aktiv log dir abszolut path-ja. Csak akkor nem-ures, ha az install()
|
|
171
|
+
* sikeresen lefutott.
|
|
172
|
+
*/
|
|
173
|
+
getActiveLogDir(): string {
|
|
174
|
+
return this.activeLogDir;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Aktiv filename prefix (a service config-jabol). Hasznalja a controller
|
|
179
|
+
* a request-fajlnev whitelist regex epitesehez.
|
|
180
|
+
*/
|
|
181
|
+
getFilenamePrefix(): string {
|
|
182
|
+
return this.filenamePrefix;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Osszes log fajl listazasa az aktiv log dir-bol. Csak a service prefix-evel
|
|
187
|
+
* matchelo fajlokat veszi (`{prefix}*.log`).
|
|
188
|
+
*
|
|
189
|
+
* Rendezes: mtime DESC (legujabb elol). Hibakat csendben elnyel — ha a dir
|
|
190
|
+
* nem letezik vagy nem olvashato, ures array-t ad vissza.
|
|
191
|
+
*/
|
|
192
|
+
listLogFiles(): DyNTS_FileLog_Entry[] {
|
|
193
|
+
if (!this.activeLogDir || !this.installed) { return []; }
|
|
194
|
+
const currentBasename: string = this.getCurrentLogFilename();
|
|
195
|
+
const entries: DyNTS_FileLog_Entry[] = [];
|
|
196
|
+
|
|
197
|
+
try {
|
|
198
|
+
const dirContents: string[] = fs.readdirSync(this.activeLogDir);
|
|
199
|
+
for (const name of dirContents) {
|
|
200
|
+
if (!name.startsWith(this.filenamePrefix) || !name.endsWith(DEFAULT_FILENAME_SUFFIX)) { continue; }
|
|
201
|
+
const fullPath: string = path.join(this.activeLogDir, name);
|
|
202
|
+
try {
|
|
203
|
+
const stats: fs.Stats = fs.statSync(fullPath);
|
|
204
|
+
if (!stats.isFile()) { continue; }
|
|
205
|
+
entries.push({
|
|
206
|
+
name: name,
|
|
207
|
+
sizeBytes: stats.size,
|
|
208
|
+
mtimeMs: stats.mtimeMs,
|
|
209
|
+
isCurrent: name === currentBasename,
|
|
210
|
+
});
|
|
211
|
+
} catch {
|
|
212
|
+
// egy fajlonkenti hiba ne szakitsa meg a listat
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
} catch {
|
|
216
|
+
// dir read hiba → ures listat adunk vissza
|
|
217
|
+
return [];
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// Legujabb elol
|
|
221
|
+
entries.sort((a: DyNTS_FileLog_Entry, b: DyNTS_FileLog_Entry): number => b.mtimeMs - a.mtimeMs);
|
|
222
|
+
return entries;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Egy konkret log fajl olvasasa, line-based mode-ban (tail / head / range).
|
|
227
|
+
*
|
|
228
|
+
* **Biztonsagi safeguards:**
|
|
229
|
+
* - Filename whitelist: `{prefix}*.log` mintara matchelo nev kotelezo
|
|
230
|
+
* - Path resolution `path.resolve(activeLogDir, name)` + `startsWith(activeLogDir)` (path traversal vedelem)
|
|
231
|
+
* - Sor szam cap: `MAX_READ_LINES` (10000)
|
|
232
|
+
*
|
|
233
|
+
* **Hibak:**
|
|
234
|
+
* - Throw `Error('not installed')` ha a service nincs install-olva
|
|
235
|
+
* - Throw `Error('invalid filename')` ha a name nem matchel a whitelist-re VAGY kilep az activeLogDir-bol
|
|
236
|
+
* - Throw `Error('file not found')` ha a fajl nem letezik
|
|
237
|
+
*
|
|
238
|
+
* A hivot kell vigyaznia hogy ezeket HTTP status code-okra forditja.
|
|
239
|
+
*/
|
|
240
|
+
readLogFile(name: string, options: DyNTS_FileLog_ReadOptions = {}): DyNTS_FileLog_ReadResult {
|
|
241
|
+
if (!this.installed || !this.activeLogDir) {
|
|
242
|
+
throw new Error('FileLog service not installed');
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// Whitelist regex: csak a service prefix-evel matchelo fajlnev
|
|
246
|
+
if (!this.isValidFilename(name)) {
|
|
247
|
+
throw new Error('invalid filename');
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// Path resolve + traversal check
|
|
251
|
+
const resolvedPath: string = path.resolve(this.activeLogDir, name);
|
|
252
|
+
const resolvedDir: string = path.resolve(this.activeLogDir);
|
|
253
|
+
// path.sep + sufix ellenőrzéssel megelőzzük a hasonló prefixű dir átverést
|
|
254
|
+
// (pl. '/logs' vs '/logs-other'); a resolvedPath az activeLogDir-en BELUL
|
|
255
|
+
// kell legyen.
|
|
256
|
+
if (!resolvedPath.startsWith(resolvedDir + path.sep) && resolvedPath !== resolvedDir) {
|
|
257
|
+
throw new Error('invalid filename');
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
if (!fs.existsSync(resolvedPath)) {
|
|
261
|
+
throw new Error('file not found');
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
const stats: fs.Stats = fs.statSync(resolvedPath);
|
|
265
|
+
if (!stats.isFile()) {
|
|
266
|
+
throw new Error('file not found');
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// Olvass + split soroka. UTF-8 encoding alapertelmezett. Nagy fajloknal a
|
|
270
|
+
// teljes betoltes nem ideal, de a 10000-soros cap es a Stream-based
|
|
271
|
+
// optimization egy kesobbi iteracio lehet ha kell.
|
|
272
|
+
const fullContent: string = fs.readFileSync(resolvedPath, 'utf-8');
|
|
273
|
+
// Split a sorvegekre — utolso ures stringet kivagjuk ha a fajl
|
|
274
|
+
// sorvégzodessel zarult (regenerált sor szám hibakerulest celozzuk meg)
|
|
275
|
+
const allLines: string[] = fullContent.split(/\r?\n/);
|
|
276
|
+
if (allLines.length > 0 && allLines[allLines.length - 1] === '') {
|
|
277
|
+
allLines.pop();
|
|
278
|
+
}
|
|
279
|
+
const totalLines: number = allLines.length;
|
|
280
|
+
|
|
281
|
+
// Mod meghatarozasa: range > head > tail
|
|
282
|
+
let mode: 'tail' | 'head' | 'range';
|
|
283
|
+
let startIdx: number;
|
|
284
|
+
let endIdx: number; // exclusive
|
|
285
|
+
|
|
286
|
+
if (options.rangeStart !== undefined && options.rangeEnd !== undefined) {
|
|
287
|
+
mode = 'range';
|
|
288
|
+
const start1: number = Math.max(1, Math.floor(options.rangeStart));
|
|
289
|
+
const end1: number = Math.max(start1, Math.floor(options.rangeEnd));
|
|
290
|
+
startIdx = Math.max(0, Math.min(totalLines, start1 - 1));
|
|
291
|
+
endIdx = Math.max(startIdx, Math.min(totalLines, end1));
|
|
292
|
+
// Cap
|
|
293
|
+
if (endIdx - startIdx > MAX_READ_LINES) {
|
|
294
|
+
endIdx = startIdx + MAX_READ_LINES;
|
|
295
|
+
}
|
|
296
|
+
} else if (options.head !== undefined) {
|
|
297
|
+
mode = 'head';
|
|
298
|
+
const headN: number = Math.min(Math.max(1, Math.floor(options.head)), MAX_READ_LINES);
|
|
299
|
+
startIdx = 0;
|
|
300
|
+
endIdx = Math.min(totalLines, headN);
|
|
301
|
+
} else {
|
|
302
|
+
mode = 'tail';
|
|
303
|
+
const tailN: number = Math.min(Math.max(1, Math.floor(options.tail ?? DEFAULT_READ_TAIL)), MAX_READ_LINES);
|
|
304
|
+
startIdx = Math.max(0, totalLines - tailN);
|
|
305
|
+
endIdx = totalLines;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
const lines: string[] = allLines.slice(startIdx, endIdx);
|
|
309
|
+
|
|
310
|
+
return {
|
|
311
|
+
name: path.basename(resolvedPath),
|
|
312
|
+
sizeBytes: stats.size,
|
|
313
|
+
totalLines: totalLines,
|
|
314
|
+
lines: lines,
|
|
315
|
+
mode: mode,
|
|
316
|
+
rangeStart: startIdx + 1, // 1-based, inclusive
|
|
317
|
+
rangeEnd: Math.max(startIdx, endIdx), // 1-based, inclusive ha lines van; egyebkent 0-szeru
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Filename whitelist ellenorzes. Csak a service prefix-evel matchelo,
|
|
323
|
+
* biztonsagos karakterkeszletu fajlnev megengedett.
|
|
324
|
+
*/
|
|
325
|
+
private isValidFilename(name: string): boolean {
|
|
326
|
+
if (typeof name !== 'string' || name.length === 0 || name.length > 256) { return false; }
|
|
327
|
+
// Path-szeparatorokat kifejezetten tiltjuk (mar a regex is, de gyors check)
|
|
328
|
+
if (name.includes('/') || name.includes('\\') || name.includes('..')) { return false; }
|
|
329
|
+
// `{prefix}[\w\-.]+\.log` — szigoru ASCII set
|
|
330
|
+
const escapedPrefix: string = this.filenamePrefix.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
331
|
+
const regex: RegExp = new RegExp(`^${escapedPrefix}[\\w\\-.]+\\.log$`);
|
|
332
|
+
return regex.test(name);
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
/**
|
|
336
|
+
* Telepitve van-e (csak akkor true, ha az enabled === true es a setup nem bukott).
|
|
337
|
+
*/
|
|
338
|
+
isInstalled(): boolean {
|
|
339
|
+
return this.installed;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Test-only: visszallitja az eredeti stdout/stderr.write-okat, hogy a
|
|
344
|
+
* specfajlok egymas utan tisztán futhassanak. Production code NE hivja.
|
|
345
|
+
*/
|
|
346
|
+
_teardownForTesting(): void {
|
|
347
|
+
if (this.originalStdoutWrite) {
|
|
348
|
+
process.stdout.write = this.originalStdoutWrite;
|
|
349
|
+
this.originalStdoutWrite = null;
|
|
350
|
+
}
|
|
351
|
+
if (this.originalStderrWrite) {
|
|
352
|
+
process.stderr.write = this.originalStderrWrite;
|
|
353
|
+
this.originalStderrWrite = null;
|
|
354
|
+
}
|
|
355
|
+
this.installed = false;
|
|
356
|
+
this.activeLogDir = '';
|
|
357
|
+
this.currentLogPath = '';
|
|
358
|
+
this.currentLogSizeBytes = 0;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* Session fajl nev: `{prefix}YYYY-MM-DD_HH-MM-SS_RANDOM.log`. Az RANDOM
|
|
364
|
+
* suffix biztositja a unique nevet ha ugyanazon a masodpercen tobb fajl jon letre
|
|
365
|
+
* (pl. rotation kozvetlenul install utan, vagy specfajlok gyors egymas utan).
|
|
366
|
+
*/
|
|
367
|
+
private buildSessionFilename(): string {
|
|
368
|
+
const now: Date = new Date();
|
|
369
|
+
const year: string = String(now.getFullYear());
|
|
370
|
+
const month: string = String(now.getMonth() + 1).padStart(2, '0');
|
|
371
|
+
const day: string = String(now.getDate()).padStart(2, '0');
|
|
372
|
+
const hour: string = String(now.getHours()).padStart(2, '0');
|
|
373
|
+
const minute: string = String(now.getMinutes()).padStart(2, '0');
|
|
374
|
+
const second: string = String(now.getSeconds()).padStart(2, '0');
|
|
375
|
+
const rand: string = Math.floor(Math.random() * 100000).toString(36);
|
|
376
|
+
return `${this.filenamePrefix}${year}-${month}-${day}_${hour}-${minute}-${second}_${rand}${DEFAULT_FILENAME_SUFFIX}`;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
/**
|
|
381
|
+
* Egyetlen stdout/stderr iras tee-zese az aktualis log fajlba.
|
|
382
|
+
* Hibakat csendben elnyeli — a file logger SOHASEM blokkolja a szervert.
|
|
383
|
+
* Size-trackeli az aktualis fajlt es szukseg szerint rotalja.
|
|
384
|
+
*/
|
|
385
|
+
private teeWrite(data: string | Uint8Array): void {
|
|
386
|
+
try {
|
|
387
|
+
if (!this.currentLogPath) { return; }
|
|
388
|
+
|
|
389
|
+
const asString: string = typeof data === 'string'
|
|
390
|
+
? data
|
|
391
|
+
: Buffer.from(data).toString('utf-8');
|
|
392
|
+
const cleaned: string = this.stripAnsiEnabled ? asString.replace(ANSI_ESCAPE_REGEX, '') : asString;
|
|
393
|
+
const writeBytes: number = Buffer.byteLength(cleaned, 'utf-8');
|
|
394
|
+
|
|
395
|
+
fs.appendFileSync(this.currentLogPath, cleaned, 'utf-8');
|
|
396
|
+
this.currentLogSizeBytes += writeBytes;
|
|
397
|
+
|
|
398
|
+
// Rotation trigger
|
|
399
|
+
if (this.currentLogSizeBytes >= this.maxFileSizeBytes) {
|
|
400
|
+
this.rotate();
|
|
401
|
+
}
|
|
402
|
+
} catch {
|
|
403
|
+
// szandekosan elnyelve — silent failure
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* Uj session fajl letrehozasa (az aktualis lezarodik). Retention cleanup-ot is
|
|
409
|
+
* vegrehajt, hogy a rotation termeszetesen tisztan tarttsa a log dir-t.
|
|
410
|
+
*/
|
|
411
|
+
private rotate(): void {
|
|
412
|
+
try {
|
|
413
|
+
this.cleanupOldLogs();
|
|
414
|
+
this.currentLogPath = path.join(this.activeLogDir, this.buildSessionFilename());
|
|
415
|
+
this.currentLogSizeBytes = 0;
|
|
416
|
+
} catch {
|
|
417
|
+
// szandekosan elnyelve
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
|
|
422
|
+
/**
|
|
423
|
+
* Retention takaritas: ket szabaly ami ami elobb teljesul:
|
|
424
|
+
* 1) maxFiles — ha tobb mint N log fajl van, a legregebbieket torli
|
|
425
|
+
* 2) retentionDays — `retentionDays`-nel idosebb fajlokat torli
|
|
426
|
+
*
|
|
427
|
+
* Hibakat csendben elnyel. A torolt fajlokat es az okot NEM logoljuk, hogy
|
|
428
|
+
* ne kerüljön extra szennyezes a most induló session fajlba.
|
|
429
|
+
*/
|
|
430
|
+
private cleanupOldLogs(): void {
|
|
431
|
+
try {
|
|
432
|
+
if (!fs.existsSync(this.activeLogDir)) { return; }
|
|
433
|
+
|
|
434
|
+
const cutoffMs: number = Date.now() - this.retentionDays * 24 * 60 * 60 * 1000;
|
|
435
|
+
const entries: string[] = fs.readdirSync(this.activeLogDir);
|
|
436
|
+
|
|
437
|
+
type FileInfo = { fullPath: string; mtimeMs: number };
|
|
438
|
+
const matchingFiles: FileInfo[] = [];
|
|
439
|
+
|
|
440
|
+
for (const entry of entries) {
|
|
441
|
+
if (!entry.startsWith(this.filenamePrefix) || !entry.endsWith(DEFAULT_FILENAME_SUFFIX)) { continue; }
|
|
442
|
+
const fullPath: string = path.join(this.activeLogDir, entry);
|
|
443
|
+
try {
|
|
444
|
+
const stats: fs.Stats = fs.statSync(fullPath);
|
|
445
|
+
matchingFiles.push({ fullPath: fullPath, mtimeMs: stats.mtimeMs });
|
|
446
|
+
} catch {
|
|
447
|
+
// fajlonkent elnyelve
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
// Sort: legujabb elol -> legregebbi hatul (csokkeno mtime)
|
|
452
|
+
matchingFiles.sort((a: FileInfo, b: FileInfo): number => b.mtimeMs - a.mtimeMs);
|
|
453
|
+
|
|
454
|
+
for (let i: number = 0; i < matchingFiles.length; i++) {
|
|
455
|
+
const file: FileInfo = matchingFiles[i];
|
|
456
|
+
const tooOldByAge: boolean = file.mtimeMs < cutoffMs;
|
|
457
|
+
const tooManyByCount: boolean = i >= this.maxFiles;
|
|
458
|
+
if (tooOldByAge || tooManyByCount) {
|
|
459
|
+
try { fs.unlinkSync(file.fullPath); } catch { /* fajlonkent elnyelve */ }
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
} catch {
|
|
463
|
+
// szandekosan elnyelve
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
}
|