@futdevpro/nts-dynamo 1.15.89 → 1.15.90
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/_ag_backend-structure.mdc +85 -85
- package/.cursor/rules/_ag_backend.mdc +16 -16
- 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_should-be.mdc +6 -6
- package/.cursor/rules/ai_development_guide.md +60 -60
- 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 +2816 -0
- package/.dynamo/logs/cicd-pipeline/status.json +94 -0
- package/.vscode/settings.json +10 -10
- package/HOWTO.md +15 -15
- package/LICENSE +21 -21
- package/__documentations/nts-integration-tests-2026-03-17.md +26 -26
- package/__documentations/plans/BEDROCK-HYPERPLAN.md +95 -95
- package/_specifications/BACKLOG.md +92 -92
- package/_specifications/TODO.md +15 -15
- package/_specifications/agent.md +138 -138
- package/build/_modules/scheduler/_models/scheduler-job.interface.d.ts +34 -0
- package/build/_modules/scheduler/_models/scheduler-job.interface.d.ts.map +1 -0
- package/build/_modules/scheduler/_models/scheduler-job.interface.js +3 -0
- package/build/_modules/scheduler/_models/scheduler-job.interface.js.map +1 -0
- package/build/_modules/scheduler/get-scheduler-routing-module.util.d.ts +18 -0
- package/build/_modules/scheduler/get-scheduler-routing-module.util.d.ts.map +1 -0
- package/build/_modules/scheduler/get-scheduler-routing-module.util.js +31 -0
- package/build/_modules/scheduler/get-scheduler-routing-module.util.js.map +1 -0
- package/build/_modules/scheduler/index.d.ts +5 -0
- package/build/_modules/scheduler/index.d.ts.map +1 -0
- package/build/_modules/scheduler/index.js +10 -0
- package/build/_modules/scheduler/index.js.map +1 -0
- package/build/_modules/scheduler/scheduler.controller.d.ts +25 -0
- package/build/_modules/scheduler/scheduler.controller.d.ts.map +1 -0
- package/build/_modules/scheduler/scheduler.controller.js +54 -0
- package/build/_modules/scheduler/scheduler.controller.js.map +1 -0
- package/build/_modules/scheduler/scheduler.service.d.ts +54 -0
- package/build/_modules/scheduler/scheduler.service.d.ts.map +1 -0
- package/build/_modules/scheduler/scheduler.service.js +164 -0
- package/build/_modules/scheduler/scheduler.service.js.map +1 -0
- package/eslint.config.js +3 -3
- package/nodemon.json +24 -24
- package/package.json +10 -1
- 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 +109 -109
- 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/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 +244 -244
- 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/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/_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 +518 -518
- 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-document.data-service.spec.ts +342 -342
- 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-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/_services/ai-embedding-mock.service.spec.ts +115 -115
- package/src/_modules/ai/_services/ai-embedding-mock.service.ts +212 -212
- package/src/_modules/ai/_services/ai-embedding-provider.registry.spec.ts +110 -110
- package/src/_modules/ai/_services/ai-embedding-provider.registry.ts +110 -110
- 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-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 +371 -371
- 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-main.control-service.spec.ts +192 -192
- package/src/_modules/assistant/_services/ass-main.control-service.ts +107 -107
- 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-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/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/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/_services/bot-commands.control-service.spec.ts +116 -116
- package/src/_modules/bot/_services/bot-io.control-service.spec.ts +285 -285
- package/src/_modules/bot/_services/bot-main.control-service.spec.ts +208 -208
- package/src/_modules/bot/_services/bot-messaging-provider.service-base.spec.ts +349 -349
- package/src/_modules/bot/_services/bot-routines.control-service.spec.ts +111 -111
- 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 +161 -161
- 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/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 +59 -59
- package/src/_modules/local-vector-search/_models/lvs-search-result.interface.ts +17 -17
- 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 +146 -146
- 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 +106 -106
- package/src/_modules/local-vector-search/_services/lvs-vector-pool.control-service.spec.ts +507 -507
- package/src/_modules/local-vector-search/_services/lvs-vector-pool.control-service.ts +272 -272
- package/src/_modules/local-vector-search/index.ts +16 -16
- package/src/_modules/logs/index.ts +11 -11
- package/src/_modules/mcp/_models/interfaces/dynts-mcp.interface.ts +111 -111
- package/src/_modules/mcp/_services/dynts-mcp-server.service-base.spec.ts +142 -142
- package/src/_modules/mcp/_services/dynts-mcp-server.service-base.ts +120 -120
- 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/_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/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/scheduler/_models/scheduler-job.interface.ts +35 -0
- package/src/_modules/scheduler/get-scheduler-routing-module.util.ts +33 -0
- package/src/_modules/scheduler/index.ts +8 -0
- package/src/_modules/scheduler/scheduler.controller.spec.ts +42 -0
- package/src/_modules/scheduler/scheduler.controller.ts +69 -0
- package/src/_modules/scheduler/scheduler.service.spec.ts +141 -0
- package/src/_modules/scheduler/scheduler.service.ts +176 -0
- 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 +81 -81
- 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 +306 -306
- package/src/_modules/scoped-config/_services/dynts-scoped-config.control-service.ts +295 -295
- package/src/_modules/scoped-config/_services/dynts-scoped-config.data-service.spec.ts +118 -118
- package/src/_modules/scoped-config/_services/dynts-scoped-config.data-service.ts +105 -105
- package/src/_modules/scoped-config/index.ts +17 -17
- package/src/_modules/server/errors/errors.control-service.spec.ts +238 -238
- package/src/_modules/server/errors/errors.control-service.ts +100 -100
- package/src/_modules/server/errors/errors.controller.spec.ts +268 -268
- package/src/_modules/server/errors/errors.controller.ts +515 -515
- package/src/_modules/server/errors/errors.data-service.spec.ts +480 -480
- 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 +576 -576
- package/src/_modules/server/server-status/server-status.control-service.ts +396 -396
- package/src/_modules/server/server-status/server-status.controller.spec.ts +255 -255
- package/src/_modules/server/server-status/server-status.controller.ts +272 -272
- 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/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 +209 -209
- package/src/_services/base/archive-data.service.ts +224 -224
- package/src/_services/base/data.service.spec.ts +729 -729
- package/src/_services/base/data.service.ts +2740 -2740
- 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/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 +487 -487
- package/src/_services/core/memory-guard.service.spec.ts +245 -245
- package/src/_services/core/memory-guard.service.ts +481 -481
- package/src/_services/core/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 +1941 -1941
- package/src/_services/shared.static-service.spec.ts +99 -99
- package/src/_services/shared.static-service.ts +78 -78
- package/src/index.ts +97 -97
- package/tsconfig.app.json +12 -12
- package/tsconfig.json +42 -42
|
@@ -1,268 +1,268 @@
|
|
|
1
|
-
|
|
2
|
-
import { DyNTS_Errors_Controller } from './errors.controller';
|
|
3
|
-
import { DyFM_Error, DyFM_Errors, DyFM_HttpCallType, DyFM_RelativeDate } from '@futdevpro/fsm-dynamo';
|
|
4
|
-
import { DyNTS_Errors_ControlService } from './errors.control-service';
|
|
5
|
-
import { DyNTS_Endpoint_Params } from '../../../_models/control-models/endpoint-params.control-model';
|
|
6
|
-
|
|
7
|
-
class TestError extends DyFM_Error {
|
|
8
|
-
testProperty?: string;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
class TestErrors extends DyFM_Errors<TestError> {
|
|
12
|
-
testProperty?: string;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
class TestErrorsControlService extends DyNTS_Errors_ControlService<TestError, TestErrors> {
|
|
16
|
-
async recordError(data: TestErrors, issuer: string, alwaysRecord?: boolean): Promise<void> {}
|
|
17
|
-
async handleInternalError(error: any, issuer: string, alwaysRecord?: boolean): Promise<void> {}
|
|
18
|
-
checkErrorIsStringifyableOrResolvable(error: TestError, issuer: string): TestError | 'UNRESOLVABLE' { return error; }
|
|
19
|
-
getPriorityMultiplierByLevel(level: any, issuer: string): number { return 0; }
|
|
20
|
-
async getErrorsFromDate(date: Date, issuer: string): Promise<any> { return { results: [] }; }
|
|
21
|
-
async deleteError(errorId: string, issuer: string, alwaysDelete?: boolean): Promise<void> {}
|
|
22
|
-
async deleteAllErrors(issuer: string, alwaysDelete?: boolean): Promise<void> {}
|
|
23
|
-
async recordFixAttempt(errorId: string, version: string, hypothesis: string, issuer: string): Promise<any> {
|
|
24
|
-
return { at: new Date(), by: issuer, version, hypothesis };
|
|
25
|
-
}
|
|
26
|
-
async getErrorsByCategoryPaged(category: string, range: any, pageSize: number, pageIndex: number, issuer: string): Promise<any> {
|
|
27
|
-
return { items: [], total: 0, pageIndex, pageSize };
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
async resolveError(errorId: string, issuer: string, notes?: string): Promise<void> {
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
async getErrorsByStatusPaged(status: string, range: any, pageSize: number, pageIndex: number, issuer: string): Promise<any> {
|
|
35
|
-
return { items: [], total: 0, pageIndex, pageSize };
|
|
36
|
-
}
|
|
37
|
-
async getErrorsInRange(range: DyFM_RelativeDate, issuer: string): Promise<any> { return { results: [] }; }
|
|
38
|
-
async getErrorsPaged(range: DyFM_RelativeDate, pageSize: number, pageIndex: number, issuer: string): Promise<any> { return { results: [] }; }
|
|
39
|
-
async getLastErrors(range: DyFM_RelativeDate, pageSize: number, pageIndex: number, issuer: string): Promise<any> { return { results: [] }; }
|
|
40
|
-
async searchErrors(searchQuery: any, issuer: string): Promise<any> { return { results: [] }; }
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
class TestErrorsController extends DyNTS_Errors_Controller<TestError, TestErrors, TestErrorsControlService> {
|
|
44
|
-
protected getError_ControlService(set: { data?: TestError, issuer: string }): TestErrorsControlService {
|
|
45
|
-
return new TestErrorsControlService();
|
|
46
|
-
}
|
|
47
|
-
protected override readonly additionalEndpoints: DyNTS_Endpoint_Params[] = [];
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
describe('| DyNTS_Errors_Controller', () => {
|
|
51
|
-
let controller: TestErrorsController;
|
|
52
|
-
|
|
53
|
-
beforeEach(() => {
|
|
54
|
-
controller = new (TestErrorsController as any)();
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
describe('| setupEndpoints', () => {
|
|
58
|
-
it('| should setup all error endpoints', () => {
|
|
59
|
-
controller.setupEndpoints();
|
|
60
|
-
|
|
61
|
-
expect(controller.endpoints).toBeDefined();
|
|
62
|
-
expect(controller.endpoints.length).toBeGreaterThanOrEqual(6);
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
it('| should setup logError endpoint', () => {
|
|
66
|
-
controller.setupEndpoints();
|
|
67
|
-
|
|
68
|
-
const logErrorEndpoint = controller.endpoints.find(ep => ep.name === 'logError');
|
|
69
|
-
expect(logErrorEndpoint).toBeDefined();
|
|
70
|
-
expect(logErrorEndpoint?.type).toBe(DyFM_HttpCallType.post);
|
|
71
|
-
expect(logErrorEndpoint?.endpoint).toBe('/error/log');
|
|
72
|
-
expect((logErrorEndpoint as any)?.tasks).toBeDefined();
|
|
73
|
-
expect((logErrorEndpoint as any)?.tasks?.length).toBe(1);
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
it('| should setup newError endpoint', () => {
|
|
77
|
-
controller.setupEndpoints();
|
|
78
|
-
|
|
79
|
-
const newErrorEndpoint = controller.endpoints.find(ep => ep.name === 'newError');
|
|
80
|
-
expect(newErrorEndpoint).toBeDefined();
|
|
81
|
-
expect(newErrorEndpoint?.type).toBe(DyFM_HttpCallType.post);
|
|
82
|
-
expect(newErrorEndpoint?.endpoint).toBe('/error/new');
|
|
83
|
-
expect((newErrorEndpoint as any)?.tasks).toBeDefined();
|
|
84
|
-
expect((newErrorEndpoint as any)?.tasks?.length).toBe(1);
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
it('| should setup markErrorDone endpoint', () => {
|
|
88
|
-
controller.setupEndpoints();
|
|
89
|
-
|
|
90
|
-
const markErrorDoneEndpoint = controller.endpoints.find(ep => ep.name === 'markErrorDone');
|
|
91
|
-
expect(markErrorDoneEndpoint).toBeDefined();
|
|
92
|
-
expect(markErrorDoneEndpoint?.type).toBe(DyFM_HttpCallType.get);
|
|
93
|
-
expect(markErrorDoneEndpoint?.endpoint).toBe('/error/mark-done/:errorId');
|
|
94
|
-
expect((markErrorDoneEndpoint as any)?.tasks).toBeDefined();
|
|
95
|
-
expect((markErrorDoneEndpoint as any)?.tasks?.length).toBe(1);
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
it('| should setup markAllErrorDone endpoint', () => {
|
|
99
|
-
controller.setupEndpoints();
|
|
100
|
-
|
|
101
|
-
const markAllErrorDoneEndpoint = controller.endpoints.find(ep => ep.name === 'markAllErrorDone');
|
|
102
|
-
expect(markAllErrorDoneEndpoint).toBeDefined();
|
|
103
|
-
expect(markAllErrorDoneEndpoint?.type).toBe(DyFM_HttpCallType.get);
|
|
104
|
-
expect(markAllErrorDoneEndpoint?.endpoint).toBe('/error/mark-all-done');
|
|
105
|
-
expect((markAllErrorDoneEndpoint as any)?.tasks).toBeDefined();
|
|
106
|
-
expect((markAllErrorDoneEndpoint as any)?.tasks?.length).toBe(1);
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
it('| should setup getErrors endpoint', () => {
|
|
110
|
-
controller.setupEndpoints();
|
|
111
|
-
|
|
112
|
-
const getErrorsEndpoint = controller.endpoints.find(ep => ep.name === 'getErrors');
|
|
113
|
-
expect(getErrorsEndpoint).toBeDefined();
|
|
114
|
-
expect(getErrorsEndpoint?.type).toBe(DyFM_HttpCallType.get);
|
|
115
|
-
expect(getErrorsEndpoint?.endpoint).toBe('/error/get-range/:range');
|
|
116
|
-
expect((getErrorsEndpoint as any)?.tasks).toBeDefined();
|
|
117
|
-
expect((getErrorsEndpoint as any)?.tasks?.length).toBe(1);
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
it('| should setup getErrorsPaged endpoint', () => {
|
|
121
|
-
controller.setupEndpoints();
|
|
122
|
-
|
|
123
|
-
const getErrorsPagedEndpoint = controller.endpoints.find(ep => ep.name === 'getErrorsPaged');
|
|
124
|
-
expect(getErrorsPagedEndpoint).toBeDefined();
|
|
125
|
-
expect(getErrorsPagedEndpoint?.type).toBe(DyFM_HttpCallType.get);
|
|
126
|
-
expect(getErrorsPagedEndpoint?.endpoint).toBe('/error/get-paged/:range/:pageSize/:pageIndex');
|
|
127
|
-
expect((getErrorsPagedEndpoint as any)?.tasks).toBeDefined();
|
|
128
|
-
expect((getErrorsPagedEndpoint as any)?.tasks?.length).toBe(1);
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
it('| should setup getLastErrors endpoint', () => {
|
|
132
|
-
controller.setupEndpoints();
|
|
133
|
-
|
|
134
|
-
const getLastErrorsEndpoint = controller.endpoints.find(ep => ep.name === 'getLastErrors');
|
|
135
|
-
expect(getLastErrorsEndpoint).toBeDefined();
|
|
136
|
-
expect(getLastErrorsEndpoint?.type).toBe(DyFM_HttpCallType.get);
|
|
137
|
-
expect(getLastErrorsEndpoint?.endpoint).toBe('/error/get-last-paged/:range/:pageSize/:pageIndex');
|
|
138
|
-
expect((getLastErrorsEndpoint as any)?.tasks).toBeDefined();
|
|
139
|
-
expect((getLastErrorsEndpoint as any)?.tasks?.length).toBe(1);
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
it('| should setup searchErrors endpoint', () => {
|
|
143
|
-
controller.setupEndpoints();
|
|
144
|
-
|
|
145
|
-
const searchErrorsEndpoint = controller.endpoints.find(ep => ep.name === 'searchErrors');
|
|
146
|
-
expect(searchErrorsEndpoint).toBeDefined();
|
|
147
|
-
expect(searchErrorsEndpoint?.type).toBe(DyFM_HttpCallType.get);
|
|
148
|
-
expect(searchErrorsEndpoint?.endpoint).toBe('/error/search');
|
|
149
|
-
expect((searchErrorsEndpoint as any)?.tasks).toBeDefined();
|
|
150
|
-
expect((searchErrorsEndpoint as any)?.tasks?.length).toBe(1);
|
|
151
|
-
});
|
|
152
|
-
|
|
153
|
-
it('| should include additionalEndpoints', () => {
|
|
154
|
-
const additionalEndpoint = new DyNTS_Endpoint_Params({
|
|
155
|
-
name: 'customEndpoint',
|
|
156
|
-
type: DyFM_HttpCallType.get,
|
|
157
|
-
endpoint: '/error/custom',
|
|
158
|
-
tasks: [],
|
|
159
|
-
});
|
|
160
|
-
(controller as any).additionalEndpoints.push(additionalEndpoint);
|
|
161
|
-
|
|
162
|
-
controller.setupEndpoints();
|
|
163
|
-
|
|
164
|
-
const customEndpoint = controller.endpoints.find(ep => ep.name === 'customEndpoint');
|
|
165
|
-
expect(customEndpoint).toBeDefined();
|
|
166
|
-
});
|
|
167
|
-
|
|
168
|
-
it('| should throw error when additionalEndpoints is not defined', () => {
|
|
169
|
-
const controllerWithoutEndpoints = new (class extends TestErrorsController {
|
|
170
|
-
protected override readonly additionalEndpoints: DyNTS_Endpoint_Params[] = undefined as any;
|
|
171
|
-
} as any)();
|
|
172
|
-
|
|
173
|
-
expect(() => {
|
|
174
|
-
controllerWithoutEndpoints.setupEndpoints();
|
|
175
|
-
}).toThrow();
|
|
176
|
-
});
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
describe('| opt-in admin auth retrofit (BL-20260420-004)', (): void => {
|
|
180
|
-
afterEach((): void => {
|
|
181
|
-
DyNTS_Errors_Controller._resetAuthConfigForTesting();
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
// FR-263 — a guard mostantol REQUEST-IDOBEN fut (lazy wrapper); igy MINDEN endpoint-on pontosan
|
|
185
|
-
// 1 preProcess (a wrapper) van, a tenyleges guard-logikat a wrapper MEGHIVASAVAL teszteljuk.
|
|
186
|
-
const lazyWrapperOf = (c: any, name: string): ((req: any, res: any) => Promise<void>) | undefined => {
|
|
187
|
-
const ep: any = c.endpoints.find((e: any) => e.name === name);
|
|
188
|
-
return ep?.preProcesses?.[0];
|
|
189
|
-
};
|
|
190
|
-
const mockReqRes = (): { req: any; res: any } => ({ req: {} as any, res: { headersSent: false } as any });
|
|
191
|
-
|
|
192
|
-
it('| default (no config): a lazy wrapper jelen van, de egy keres NEM hiv guardot (nyitva marad)', async (): Promise<void> => {
|
|
193
|
-
controller.setupEndpoints();
|
|
194
|
-
for (const name of ['logError', 'getErrors', 'searchErrors']) {
|
|
195
|
-
const w = lazyWrapperOf(controller, name);
|
|
196
|
-
expect(w).withContext(`${name} wrapper`).toBeDefined();
|
|
197
|
-
const { req, res } = mockReqRes();
|
|
198
|
-
await w!(req, res); // nincs config → no-op, nem dob, nem blokkol
|
|
199
|
-
}
|
|
200
|
-
});
|
|
201
|
-
|
|
202
|
-
it('| configure({ authPreProcess }) → egy keres MINDEN built-in endpoint-on meghivja a guardot', async (): Promise<void> => {
|
|
203
|
-
let calls: number = 0;
|
|
204
|
-
DyNTS_Errors_Controller.configure({ authPreProcess: async (): Promise<void> => { calls++; } });
|
|
205
|
-
const c = new (TestErrorsController as any)();
|
|
206
|
-
c.setupEndpoints();
|
|
207
|
-
const builtIn: string[] = [
|
|
208
|
-
'logError', 'newError', 'markErrorDone', 'markAllErrorDone',
|
|
209
|
-
'getErrors', 'getErrorsPaged', 'getLastErrors', 'searchErrors',
|
|
210
|
-
];
|
|
211
|
-
for (const name of builtIn) {
|
|
212
|
-
const w = lazyWrapperOf(c, name);
|
|
213
|
-
expect(w).withContext(`endpoint ${name} missing`).toBeDefined();
|
|
214
|
-
const { req, res } = mockReqRes();
|
|
215
|
-
await w!(req, res);
|
|
216
|
-
}
|
|
217
|
-
expect(calls).toBe(builtIn.length);
|
|
218
|
-
});
|
|
219
|
-
|
|
220
|
-
it('| configure({ protectedEndpoints: subset }) → a guard CSAK a listazott endpoint-okon fut', async (): Promise<void> => {
|
|
221
|
-
let calls: number = 0;
|
|
222
|
-
DyNTS_Errors_Controller.configure({
|
|
223
|
-
authPreProcess: async (): Promise<void> => { calls++; },
|
|
224
|
-
protectedEndpoints: ['markAllErrorDone', 'logError'],
|
|
225
|
-
});
|
|
226
|
-
const c = new (TestErrorsController as any)();
|
|
227
|
-
c.setupEndpoints();
|
|
228
|
-
for (const name of ['markAllErrorDone', 'logError']) {
|
|
229
|
-
const { req, res } = mockReqRes();
|
|
230
|
-
await lazyWrapperOf(c, name)!(req, res);
|
|
231
|
-
}
|
|
232
|
-
expect(calls).withContext('protected → guard runs').toBe(2);
|
|
233
|
-
calls = 0;
|
|
234
|
-
const { req, res } = mockReqRes();
|
|
235
|
-
await lazyWrapperOf(c, 'getErrors')!(req, res);
|
|
236
|
-
expect(calls).withContext('non-protected getErrors → guard does NOT run').toBe(0);
|
|
237
|
-
});
|
|
238
|
-
|
|
239
|
-
it('| FR-263 ORDER-INDEPENDENCE: setupEndpoints() ELOTT epitett endpoint is enforce-olja a guardot (a fix lenyege)', async (): Promise<void> => {
|
|
240
|
-
// A framework korai singleton-konstrukcioja: az endpoints config NELKUL epul fel...
|
|
241
|
-
const c = new (TestErrorsController as any)();
|
|
242
|
-
c.setupEndpoints();
|
|
243
|
-
// ...es a configure() KESOBB fut (ez volt a fals-200 info-disclosure bug). A lazy wrapper
|
|
244
|
-
// request-idoben olvassa a configot → a guard MEGIS lefut. Ez az FR-263 regresszio-guard.
|
|
245
|
-
let calls: number = 0;
|
|
246
|
-
DyNTS_Errors_Controller.configure({ authPreProcess: async (): Promise<void> => { calls++; } });
|
|
247
|
-
const { req, res } = mockReqRes();
|
|
248
|
-
await lazyWrapperOf(c, 'getErrors')!(req, res);
|
|
249
|
-
expect(calls).withContext('guard must run despite configure() AFTER setupEndpoints').toBe(1);
|
|
250
|
-
});
|
|
251
|
-
|
|
252
|
-
it('| getAuthConfig() returns the active config', (): void => {
|
|
253
|
-
const fakeAuth = async (): Promise<void> => { /* noop */ };
|
|
254
|
-
DyNTS_Errors_Controller.configure({ authPreProcess: fakeAuth, protectedEndpoints: ['logError'] });
|
|
255
|
-
const cfg = DyNTS_Errors_Controller.getAuthConfig();
|
|
256
|
-
expect(cfg.authPreProcess).toBe(fakeAuth);
|
|
257
|
-
expect(cfg.protectedEndpoints).toEqual(['logError']);
|
|
258
|
-
});
|
|
259
|
-
|
|
260
|
-
it('| _resetAuthConfigForTesting() clears the config', (): void => {
|
|
261
|
-
DyNTS_Errors_Controller.configure({ authPreProcess: async (): Promise<void> => { /* noop */ } });
|
|
262
|
-
DyNTS_Errors_Controller._resetAuthConfigForTesting();
|
|
263
|
-
const cfg = DyNTS_Errors_Controller.getAuthConfig();
|
|
264
|
-
expect(cfg.authPreProcess).toBeUndefined();
|
|
265
|
-
});
|
|
266
|
-
});
|
|
267
|
-
});
|
|
268
|
-
|
|
1
|
+
|
|
2
|
+
import { DyNTS_Errors_Controller } from './errors.controller';
|
|
3
|
+
import { DyFM_Error, DyFM_Errors, DyFM_HttpCallType, DyFM_RelativeDate } from '@futdevpro/fsm-dynamo';
|
|
4
|
+
import { DyNTS_Errors_ControlService } from './errors.control-service';
|
|
5
|
+
import { DyNTS_Endpoint_Params } from '../../../_models/control-models/endpoint-params.control-model';
|
|
6
|
+
|
|
7
|
+
class TestError extends DyFM_Error {
|
|
8
|
+
testProperty?: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
class TestErrors extends DyFM_Errors<TestError> {
|
|
12
|
+
testProperty?: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
class TestErrorsControlService extends DyNTS_Errors_ControlService<TestError, TestErrors> {
|
|
16
|
+
async recordError(data: TestErrors, issuer: string, alwaysRecord?: boolean): Promise<void> {}
|
|
17
|
+
async handleInternalError(error: any, issuer: string, alwaysRecord?: boolean): Promise<void> {}
|
|
18
|
+
checkErrorIsStringifyableOrResolvable(error: TestError, issuer: string): TestError | 'UNRESOLVABLE' { return error; }
|
|
19
|
+
getPriorityMultiplierByLevel(level: any, issuer: string): number { return 0; }
|
|
20
|
+
async getErrorsFromDate(date: Date, issuer: string): Promise<any> { return { results: [] }; }
|
|
21
|
+
async deleteError(errorId: string, issuer: string, alwaysDelete?: boolean): Promise<void> {}
|
|
22
|
+
async deleteAllErrors(issuer: string, alwaysDelete?: boolean): Promise<void> {}
|
|
23
|
+
async recordFixAttempt(errorId: string, version: string, hypothesis: string, issuer: string): Promise<any> {
|
|
24
|
+
return { at: new Date(), by: issuer, version, hypothesis };
|
|
25
|
+
}
|
|
26
|
+
async getErrorsByCategoryPaged(category: string, range: any, pageSize: number, pageIndex: number, issuer: string): Promise<any> {
|
|
27
|
+
return { items: [], total: 0, pageIndex, pageSize };
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
async resolveError(errorId: string, issuer: string, notes?: string): Promise<void> {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async getErrorsByStatusPaged(status: string, range: any, pageSize: number, pageIndex: number, issuer: string): Promise<any> {
|
|
35
|
+
return { items: [], total: 0, pageIndex, pageSize };
|
|
36
|
+
}
|
|
37
|
+
async getErrorsInRange(range: DyFM_RelativeDate, issuer: string): Promise<any> { return { results: [] }; }
|
|
38
|
+
async getErrorsPaged(range: DyFM_RelativeDate, pageSize: number, pageIndex: number, issuer: string): Promise<any> { return { results: [] }; }
|
|
39
|
+
async getLastErrors(range: DyFM_RelativeDate, pageSize: number, pageIndex: number, issuer: string): Promise<any> { return { results: [] }; }
|
|
40
|
+
async searchErrors(searchQuery: any, issuer: string): Promise<any> { return { results: [] }; }
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
class TestErrorsController extends DyNTS_Errors_Controller<TestError, TestErrors, TestErrorsControlService> {
|
|
44
|
+
protected getError_ControlService(set: { data?: TestError, issuer: string }): TestErrorsControlService {
|
|
45
|
+
return new TestErrorsControlService();
|
|
46
|
+
}
|
|
47
|
+
protected override readonly additionalEndpoints: DyNTS_Endpoint_Params[] = [];
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
describe('| DyNTS_Errors_Controller', () => {
|
|
51
|
+
let controller: TestErrorsController;
|
|
52
|
+
|
|
53
|
+
beforeEach(() => {
|
|
54
|
+
controller = new (TestErrorsController as any)();
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
describe('| setupEndpoints', () => {
|
|
58
|
+
it('| should setup all error endpoints', () => {
|
|
59
|
+
controller.setupEndpoints();
|
|
60
|
+
|
|
61
|
+
expect(controller.endpoints).toBeDefined();
|
|
62
|
+
expect(controller.endpoints.length).toBeGreaterThanOrEqual(6);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
it('| should setup logError endpoint', () => {
|
|
66
|
+
controller.setupEndpoints();
|
|
67
|
+
|
|
68
|
+
const logErrorEndpoint = controller.endpoints.find(ep => ep.name === 'logError');
|
|
69
|
+
expect(logErrorEndpoint).toBeDefined();
|
|
70
|
+
expect(logErrorEndpoint?.type).toBe(DyFM_HttpCallType.post);
|
|
71
|
+
expect(logErrorEndpoint?.endpoint).toBe('/error/log');
|
|
72
|
+
expect((logErrorEndpoint as any)?.tasks).toBeDefined();
|
|
73
|
+
expect((logErrorEndpoint as any)?.tasks?.length).toBe(1);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it('| should setup newError endpoint', () => {
|
|
77
|
+
controller.setupEndpoints();
|
|
78
|
+
|
|
79
|
+
const newErrorEndpoint = controller.endpoints.find(ep => ep.name === 'newError');
|
|
80
|
+
expect(newErrorEndpoint).toBeDefined();
|
|
81
|
+
expect(newErrorEndpoint?.type).toBe(DyFM_HttpCallType.post);
|
|
82
|
+
expect(newErrorEndpoint?.endpoint).toBe('/error/new');
|
|
83
|
+
expect((newErrorEndpoint as any)?.tasks).toBeDefined();
|
|
84
|
+
expect((newErrorEndpoint as any)?.tasks?.length).toBe(1);
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
it('| should setup markErrorDone endpoint', () => {
|
|
88
|
+
controller.setupEndpoints();
|
|
89
|
+
|
|
90
|
+
const markErrorDoneEndpoint = controller.endpoints.find(ep => ep.name === 'markErrorDone');
|
|
91
|
+
expect(markErrorDoneEndpoint).toBeDefined();
|
|
92
|
+
expect(markErrorDoneEndpoint?.type).toBe(DyFM_HttpCallType.get);
|
|
93
|
+
expect(markErrorDoneEndpoint?.endpoint).toBe('/error/mark-done/:errorId');
|
|
94
|
+
expect((markErrorDoneEndpoint as any)?.tasks).toBeDefined();
|
|
95
|
+
expect((markErrorDoneEndpoint as any)?.tasks?.length).toBe(1);
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
it('| should setup markAllErrorDone endpoint', () => {
|
|
99
|
+
controller.setupEndpoints();
|
|
100
|
+
|
|
101
|
+
const markAllErrorDoneEndpoint = controller.endpoints.find(ep => ep.name === 'markAllErrorDone');
|
|
102
|
+
expect(markAllErrorDoneEndpoint).toBeDefined();
|
|
103
|
+
expect(markAllErrorDoneEndpoint?.type).toBe(DyFM_HttpCallType.get);
|
|
104
|
+
expect(markAllErrorDoneEndpoint?.endpoint).toBe('/error/mark-all-done');
|
|
105
|
+
expect((markAllErrorDoneEndpoint as any)?.tasks).toBeDefined();
|
|
106
|
+
expect((markAllErrorDoneEndpoint as any)?.tasks?.length).toBe(1);
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
it('| should setup getErrors endpoint', () => {
|
|
110
|
+
controller.setupEndpoints();
|
|
111
|
+
|
|
112
|
+
const getErrorsEndpoint = controller.endpoints.find(ep => ep.name === 'getErrors');
|
|
113
|
+
expect(getErrorsEndpoint).toBeDefined();
|
|
114
|
+
expect(getErrorsEndpoint?.type).toBe(DyFM_HttpCallType.get);
|
|
115
|
+
expect(getErrorsEndpoint?.endpoint).toBe('/error/get-range/:range');
|
|
116
|
+
expect((getErrorsEndpoint as any)?.tasks).toBeDefined();
|
|
117
|
+
expect((getErrorsEndpoint as any)?.tasks?.length).toBe(1);
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
it('| should setup getErrorsPaged endpoint', () => {
|
|
121
|
+
controller.setupEndpoints();
|
|
122
|
+
|
|
123
|
+
const getErrorsPagedEndpoint = controller.endpoints.find(ep => ep.name === 'getErrorsPaged');
|
|
124
|
+
expect(getErrorsPagedEndpoint).toBeDefined();
|
|
125
|
+
expect(getErrorsPagedEndpoint?.type).toBe(DyFM_HttpCallType.get);
|
|
126
|
+
expect(getErrorsPagedEndpoint?.endpoint).toBe('/error/get-paged/:range/:pageSize/:pageIndex');
|
|
127
|
+
expect((getErrorsPagedEndpoint as any)?.tasks).toBeDefined();
|
|
128
|
+
expect((getErrorsPagedEndpoint as any)?.tasks?.length).toBe(1);
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
it('| should setup getLastErrors endpoint', () => {
|
|
132
|
+
controller.setupEndpoints();
|
|
133
|
+
|
|
134
|
+
const getLastErrorsEndpoint = controller.endpoints.find(ep => ep.name === 'getLastErrors');
|
|
135
|
+
expect(getLastErrorsEndpoint).toBeDefined();
|
|
136
|
+
expect(getLastErrorsEndpoint?.type).toBe(DyFM_HttpCallType.get);
|
|
137
|
+
expect(getLastErrorsEndpoint?.endpoint).toBe('/error/get-last-paged/:range/:pageSize/:pageIndex');
|
|
138
|
+
expect((getLastErrorsEndpoint as any)?.tasks).toBeDefined();
|
|
139
|
+
expect((getLastErrorsEndpoint as any)?.tasks?.length).toBe(1);
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
it('| should setup searchErrors endpoint', () => {
|
|
143
|
+
controller.setupEndpoints();
|
|
144
|
+
|
|
145
|
+
const searchErrorsEndpoint = controller.endpoints.find(ep => ep.name === 'searchErrors');
|
|
146
|
+
expect(searchErrorsEndpoint).toBeDefined();
|
|
147
|
+
expect(searchErrorsEndpoint?.type).toBe(DyFM_HttpCallType.get);
|
|
148
|
+
expect(searchErrorsEndpoint?.endpoint).toBe('/error/search');
|
|
149
|
+
expect((searchErrorsEndpoint as any)?.tasks).toBeDefined();
|
|
150
|
+
expect((searchErrorsEndpoint as any)?.tasks?.length).toBe(1);
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
it('| should include additionalEndpoints', () => {
|
|
154
|
+
const additionalEndpoint = new DyNTS_Endpoint_Params({
|
|
155
|
+
name: 'customEndpoint',
|
|
156
|
+
type: DyFM_HttpCallType.get,
|
|
157
|
+
endpoint: '/error/custom',
|
|
158
|
+
tasks: [],
|
|
159
|
+
});
|
|
160
|
+
(controller as any).additionalEndpoints.push(additionalEndpoint);
|
|
161
|
+
|
|
162
|
+
controller.setupEndpoints();
|
|
163
|
+
|
|
164
|
+
const customEndpoint = controller.endpoints.find(ep => ep.name === 'customEndpoint');
|
|
165
|
+
expect(customEndpoint).toBeDefined();
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
it('| should throw error when additionalEndpoints is not defined', () => {
|
|
169
|
+
const controllerWithoutEndpoints = new (class extends TestErrorsController {
|
|
170
|
+
protected override readonly additionalEndpoints: DyNTS_Endpoint_Params[] = undefined as any;
|
|
171
|
+
} as any)();
|
|
172
|
+
|
|
173
|
+
expect(() => {
|
|
174
|
+
controllerWithoutEndpoints.setupEndpoints();
|
|
175
|
+
}).toThrow();
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
describe('| opt-in admin auth retrofit (BL-20260420-004)', (): void => {
|
|
180
|
+
afterEach((): void => {
|
|
181
|
+
DyNTS_Errors_Controller._resetAuthConfigForTesting();
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
// FR-263 — a guard mostantol REQUEST-IDOBEN fut (lazy wrapper); igy MINDEN endpoint-on pontosan
|
|
185
|
+
// 1 preProcess (a wrapper) van, a tenyleges guard-logikat a wrapper MEGHIVASAVAL teszteljuk.
|
|
186
|
+
const lazyWrapperOf = (c: any, name: string): ((req: any, res: any) => Promise<void>) | undefined => {
|
|
187
|
+
const ep: any = c.endpoints.find((e: any) => e.name === name);
|
|
188
|
+
return ep?.preProcesses?.[0];
|
|
189
|
+
};
|
|
190
|
+
const mockReqRes = (): { req: any; res: any } => ({ req: {} as any, res: { headersSent: false } as any });
|
|
191
|
+
|
|
192
|
+
it('| default (no config): a lazy wrapper jelen van, de egy keres NEM hiv guardot (nyitva marad)', async (): Promise<void> => {
|
|
193
|
+
controller.setupEndpoints();
|
|
194
|
+
for (const name of ['logError', 'getErrors', 'searchErrors']) {
|
|
195
|
+
const w = lazyWrapperOf(controller, name);
|
|
196
|
+
expect(w).withContext(`${name} wrapper`).toBeDefined();
|
|
197
|
+
const { req, res } = mockReqRes();
|
|
198
|
+
await w!(req, res); // nincs config → no-op, nem dob, nem blokkol
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
it('| configure({ authPreProcess }) → egy keres MINDEN built-in endpoint-on meghivja a guardot', async (): Promise<void> => {
|
|
203
|
+
let calls: number = 0;
|
|
204
|
+
DyNTS_Errors_Controller.configure({ authPreProcess: async (): Promise<void> => { calls++; } });
|
|
205
|
+
const c = new (TestErrorsController as any)();
|
|
206
|
+
c.setupEndpoints();
|
|
207
|
+
const builtIn: string[] = [
|
|
208
|
+
'logError', 'newError', 'markErrorDone', 'markAllErrorDone',
|
|
209
|
+
'getErrors', 'getErrorsPaged', 'getLastErrors', 'searchErrors',
|
|
210
|
+
];
|
|
211
|
+
for (const name of builtIn) {
|
|
212
|
+
const w = lazyWrapperOf(c, name);
|
|
213
|
+
expect(w).withContext(`endpoint ${name} missing`).toBeDefined();
|
|
214
|
+
const { req, res } = mockReqRes();
|
|
215
|
+
await w!(req, res);
|
|
216
|
+
}
|
|
217
|
+
expect(calls).toBe(builtIn.length);
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
it('| configure({ protectedEndpoints: subset }) → a guard CSAK a listazott endpoint-okon fut', async (): Promise<void> => {
|
|
221
|
+
let calls: number = 0;
|
|
222
|
+
DyNTS_Errors_Controller.configure({
|
|
223
|
+
authPreProcess: async (): Promise<void> => { calls++; },
|
|
224
|
+
protectedEndpoints: ['markAllErrorDone', 'logError'],
|
|
225
|
+
});
|
|
226
|
+
const c = new (TestErrorsController as any)();
|
|
227
|
+
c.setupEndpoints();
|
|
228
|
+
for (const name of ['markAllErrorDone', 'logError']) {
|
|
229
|
+
const { req, res } = mockReqRes();
|
|
230
|
+
await lazyWrapperOf(c, name)!(req, res);
|
|
231
|
+
}
|
|
232
|
+
expect(calls).withContext('protected → guard runs').toBe(2);
|
|
233
|
+
calls = 0;
|
|
234
|
+
const { req, res } = mockReqRes();
|
|
235
|
+
await lazyWrapperOf(c, 'getErrors')!(req, res);
|
|
236
|
+
expect(calls).withContext('non-protected getErrors → guard does NOT run').toBe(0);
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
it('| FR-263 ORDER-INDEPENDENCE: setupEndpoints() ELOTT epitett endpoint is enforce-olja a guardot (a fix lenyege)', async (): Promise<void> => {
|
|
240
|
+
// A framework korai singleton-konstrukcioja: az endpoints config NELKUL epul fel...
|
|
241
|
+
const c = new (TestErrorsController as any)();
|
|
242
|
+
c.setupEndpoints();
|
|
243
|
+
// ...es a configure() KESOBB fut (ez volt a fals-200 info-disclosure bug). A lazy wrapper
|
|
244
|
+
// request-idoben olvassa a configot → a guard MEGIS lefut. Ez az FR-263 regresszio-guard.
|
|
245
|
+
let calls: number = 0;
|
|
246
|
+
DyNTS_Errors_Controller.configure({ authPreProcess: async (): Promise<void> => { calls++; } });
|
|
247
|
+
const { req, res } = mockReqRes();
|
|
248
|
+
await lazyWrapperOf(c, 'getErrors')!(req, res);
|
|
249
|
+
expect(calls).withContext('guard must run despite configure() AFTER setupEndpoints').toBe(1);
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
it('| getAuthConfig() returns the active config', (): void => {
|
|
253
|
+
const fakeAuth = async (): Promise<void> => { /* noop */ };
|
|
254
|
+
DyNTS_Errors_Controller.configure({ authPreProcess: fakeAuth, protectedEndpoints: ['logError'] });
|
|
255
|
+
const cfg = DyNTS_Errors_Controller.getAuthConfig();
|
|
256
|
+
expect(cfg.authPreProcess).toBe(fakeAuth);
|
|
257
|
+
expect(cfg.protectedEndpoints).toEqual(['logError']);
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
it('| _resetAuthConfigForTesting() clears the config', (): void => {
|
|
261
|
+
DyNTS_Errors_Controller.configure({ authPreProcess: async (): Promise<void> => { /* noop */ } });
|
|
262
|
+
DyNTS_Errors_Controller._resetAuthConfigForTesting();
|
|
263
|
+
const cfg = DyNTS_Errors_Controller.getAuthConfig();
|
|
264
|
+
expect(cfg.authPreProcess).toBeUndefined();
|
|
265
|
+
});
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
|