@futdevpro/nts-dynamo 1.15.41 → 1.15.43
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 +2596 -0
- package/.dynamo/logs/cicd-pipeline/status.json +321 -0
- package/.github/workflows/main.yml +432 -432
- 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/_specifications/BACKLOG.md +92 -92
- package/_specifications/TODO.md +15 -15
- package/_specifications/agent.md +138 -138
- package/build/_models/control-models/endpoint-params.control-model.d.ts.map +1 -1
- package/build/_models/control-models/endpoint-params.control-model.js +20 -4
- package/build/_models/control-models/endpoint-params.control-model.js.map +1 -1
- package/eslint.config.js +3 -3
- package/nodemon.json +24 -24
- package/package.json +2 -2
- package/pnpm-workspace.yaml +8 -8
- 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/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 +578 -578
- package/src/_models/control-models/endpoint-params.control-model.ts +542 -526
- 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 +144 -144
- package/src/_models/interfaces/global-service-settings.interface.ts +47 -47
- 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-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-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 +28 -28
- 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.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/index.ts +13 -13
- 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/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/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-vector-pool.control-service.spec.ts +393 -393
- package/src/_modules/local-vector-search/_services/lvs-vector-pool.control-service.ts +220 -220
- package/src/_modules/local-vector-search/index.ts +11 -11
- 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/server/errors/errors.control-service.spec.ts +238 -238
- package/src/_modules/server/errors/errors.control-service.ts +85 -85
- package/src/_modules/server/errors/errors.controller.spec.ts +241 -241
- package/src/_modules/server/errors/errors.controller.ts +431 -431
- package/src/_modules/server/errors/errors.data-service.spec.ts +355 -355
- 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 +524 -524
- package/src/_modules/server/server-status/server-status.control-service.ts +336 -336
- package/src/_modules/server/server-status/server-status.controller.spec.ts +162 -162
- package/src/_modules/server/server-status/server-status.controller.ts +131 -131
- 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 +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/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 +275 -275
- package/src/_services/core/global.service.ts +461 -461
- 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/shared.static-service.spec.ts +99 -99
- package/src/_services/shared.static-service.ts +78 -78
- package/src/index.ts +95 -95
- package/tsconfig.app.json +12 -12
- package/tsconfig.json +42 -42
|
@@ -1,85 +1,85 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import { DyNTS_global_settings } from '../../../_collections/global-settings.const';
|
|
6
|
-
import { DyNTS_DBUpdate } from '../../../_models/types/db-update.type';
|
|
7
|
-
import { DyNTS_DataService } from '../../../_services/base/data.service';
|
|
8
|
-
|
|
9
|
-
import {
|
|
10
|
-
DyFM_AnyError,
|
|
11
|
-
DyFM_DBFilter,
|
|
12
|
-
DyFM_DataModel_Params, DyFM_Error, DyFM_ErrorLevel, DyFM_Error_Settings,
|
|
13
|
-
DyFM_Log, DyFM_Object, DyFM_errorFlag, DyFM_Errors,
|
|
14
|
-
DyFM_RelativeDate,
|
|
15
|
-
DyFM_Paged,
|
|
16
|
-
DyFM_SearchQuery,
|
|
17
|
-
DyFM_SearchResult,
|
|
18
|
-
DyFM_Errors_FixAttempt
|
|
19
|
-
} from '@futdevpro/fsm-dynamo';
|
|
20
|
-
|
|
21
|
-
export abstract class DyNTS_Errors_ControlService<
|
|
22
|
-
T_Error extends DyFM_Error,
|
|
23
|
-
T_Errors extends DyFM_Errors<T_Error>
|
|
24
|
-
> {
|
|
25
|
-
debugLog: boolean = false;
|
|
26
|
-
readonly version: string = DyNTS_global_settings.systemVersion;
|
|
27
|
-
duplicationCounter: number;
|
|
28
|
-
|
|
29
|
-
abstract recordError(data: T_Errors, issuer: string, alwaysRecord?: boolean): Promise<void>;
|
|
30
|
-
|
|
31
|
-
abstract handleInternalError(
|
|
32
|
-
error: DyFM_AnyError | any,
|
|
33
|
-
issuer: string,
|
|
34
|
-
alwaysRecord?: boolean,
|
|
35
|
-
): Promise<void>;
|
|
36
|
-
|
|
37
|
-
abstract checkErrorIsStringifyableOrResolvable(error: T_Error, issuer: string): T_Error | 'UNRESOLVABLE';
|
|
38
|
-
|
|
39
|
-
abstract getPriorityMultiplierByLevel(level: DyFM_ErrorLevel, issuer: string): number;
|
|
40
|
-
|
|
41
|
-
abstract getErrorsFromDate(
|
|
42
|
-
date: Date,
|
|
43
|
-
issuer: string,
|
|
44
|
-
): Promise<DyFM_Paged<T_Errors>>;
|
|
45
|
-
|
|
46
|
-
abstract deleteError(errorId: string, issuer: string, alwaysDelete?: boolean): Promise<void>;
|
|
47
|
-
|
|
48
|
-
abstract deleteAllErrors(issuer: string, alwaysDelete?: boolean): Promise<void>;
|
|
49
|
-
|
|
50
|
-
abstract recordFixAttempt(
|
|
51
|
-
errorId: string,
|
|
52
|
-
version: string,
|
|
53
|
-
hypothesis: string,
|
|
54
|
-
issuer: string,
|
|
55
|
-
): Promise<DyFM_Errors_FixAttempt>;
|
|
56
|
-
|
|
57
|
-
abstract getErrorsInRange(range: DyFM_RelativeDate, issuer: string): Promise<DyFM_Paged<T_Errors>>;
|
|
58
|
-
|
|
59
|
-
abstract getErrorsPaged(
|
|
60
|
-
range: DyFM_RelativeDate,
|
|
61
|
-
pageSize: number,
|
|
62
|
-
pageIndex: number,
|
|
63
|
-
issuer: string,
|
|
64
|
-
): Promise<DyFM_Paged<T_Errors>>;
|
|
65
|
-
|
|
66
|
-
abstract getErrorsByCategoryPaged(
|
|
67
|
-
category: string,
|
|
68
|
-
range: DyFM_RelativeDate,
|
|
69
|
-
pageSize: number,
|
|
70
|
-
pageIndex: number,
|
|
71
|
-
issuer: string,
|
|
72
|
-
): Promise<DyFM_Paged<T_Errors>>;
|
|
73
|
-
|
|
74
|
-
abstract getLastErrors(
|
|
75
|
-
range: DyFM_RelativeDate,
|
|
76
|
-
pageSize: number,
|
|
77
|
-
pageIndex: number,
|
|
78
|
-
issuer: string,
|
|
79
|
-
): Promise<DyFM_Paged<T_Errors>>;
|
|
80
|
-
|
|
81
|
-
abstract searchErrors(
|
|
82
|
-
searchQuery: DyFM_SearchQuery<T_Errors>,
|
|
83
|
-
issuer: string,
|
|
84
|
-
): Promise<DyFM_SearchResult<T_Errors>>;
|
|
85
|
-
}
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
import { DyNTS_global_settings } from '../../../_collections/global-settings.const';
|
|
6
|
+
import { DyNTS_DBUpdate } from '../../../_models/types/db-update.type';
|
|
7
|
+
import { DyNTS_DataService } from '../../../_services/base/data.service';
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
DyFM_AnyError,
|
|
11
|
+
DyFM_DBFilter,
|
|
12
|
+
DyFM_DataModel_Params, DyFM_Error, DyFM_ErrorLevel, DyFM_Error_Settings,
|
|
13
|
+
DyFM_Log, DyFM_Object, DyFM_errorFlag, DyFM_Errors,
|
|
14
|
+
DyFM_RelativeDate,
|
|
15
|
+
DyFM_Paged,
|
|
16
|
+
DyFM_SearchQuery,
|
|
17
|
+
DyFM_SearchResult,
|
|
18
|
+
DyFM_Errors_FixAttempt
|
|
19
|
+
} from '@futdevpro/fsm-dynamo';
|
|
20
|
+
|
|
21
|
+
export abstract class DyNTS_Errors_ControlService<
|
|
22
|
+
T_Error extends DyFM_Error,
|
|
23
|
+
T_Errors extends DyFM_Errors<T_Error>
|
|
24
|
+
> {
|
|
25
|
+
debugLog: boolean = false;
|
|
26
|
+
readonly version: string = DyNTS_global_settings.systemVersion;
|
|
27
|
+
duplicationCounter: number;
|
|
28
|
+
|
|
29
|
+
abstract recordError(data: T_Errors, issuer: string, alwaysRecord?: boolean): Promise<void>;
|
|
30
|
+
|
|
31
|
+
abstract handleInternalError(
|
|
32
|
+
error: DyFM_AnyError | any,
|
|
33
|
+
issuer: string,
|
|
34
|
+
alwaysRecord?: boolean,
|
|
35
|
+
): Promise<void>;
|
|
36
|
+
|
|
37
|
+
abstract checkErrorIsStringifyableOrResolvable(error: T_Error, issuer: string): T_Error | 'UNRESOLVABLE';
|
|
38
|
+
|
|
39
|
+
abstract getPriorityMultiplierByLevel(level: DyFM_ErrorLevel, issuer: string): number;
|
|
40
|
+
|
|
41
|
+
abstract getErrorsFromDate(
|
|
42
|
+
date: Date,
|
|
43
|
+
issuer: string,
|
|
44
|
+
): Promise<DyFM_Paged<T_Errors>>;
|
|
45
|
+
|
|
46
|
+
abstract deleteError(errorId: string, issuer: string, alwaysDelete?: boolean): Promise<void>;
|
|
47
|
+
|
|
48
|
+
abstract deleteAllErrors(issuer: string, alwaysDelete?: boolean): Promise<void>;
|
|
49
|
+
|
|
50
|
+
abstract recordFixAttempt(
|
|
51
|
+
errorId: string,
|
|
52
|
+
version: string,
|
|
53
|
+
hypothesis: string,
|
|
54
|
+
issuer: string,
|
|
55
|
+
): Promise<DyFM_Errors_FixAttempt>;
|
|
56
|
+
|
|
57
|
+
abstract getErrorsInRange(range: DyFM_RelativeDate, issuer: string): Promise<DyFM_Paged<T_Errors>>;
|
|
58
|
+
|
|
59
|
+
abstract getErrorsPaged(
|
|
60
|
+
range: DyFM_RelativeDate,
|
|
61
|
+
pageSize: number,
|
|
62
|
+
pageIndex: number,
|
|
63
|
+
issuer: string,
|
|
64
|
+
): Promise<DyFM_Paged<T_Errors>>;
|
|
65
|
+
|
|
66
|
+
abstract getErrorsByCategoryPaged(
|
|
67
|
+
category: string,
|
|
68
|
+
range: DyFM_RelativeDate,
|
|
69
|
+
pageSize: number,
|
|
70
|
+
pageIndex: number,
|
|
71
|
+
issuer: string,
|
|
72
|
+
): Promise<DyFM_Paged<T_Errors>>;
|
|
73
|
+
|
|
74
|
+
abstract getLastErrors(
|
|
75
|
+
range: DyFM_RelativeDate,
|
|
76
|
+
pageSize: number,
|
|
77
|
+
pageIndex: number,
|
|
78
|
+
issuer: string,
|
|
79
|
+
): Promise<DyFM_Paged<T_Errors>>;
|
|
80
|
+
|
|
81
|
+
abstract searchErrors(
|
|
82
|
+
searchQuery: DyFM_SearchQuery<T_Errors>,
|
|
83
|
+
issuer: string,
|
|
84
|
+
): Promise<DyFM_SearchResult<T_Errors>>;
|
|
85
|
+
}
|
|
@@ -1,241 +1,241 @@
|
|
|
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
|
-
async getErrorsInRange(range: DyFM_RelativeDate, issuer: string): Promise<any> { return { results: [] }; }
|
|
30
|
-
async getErrorsPaged(range: DyFM_RelativeDate, pageSize: number, pageIndex: number, issuer: string): Promise<any> { return { results: [] }; }
|
|
31
|
-
async getLastErrors(range: DyFM_RelativeDate, pageSize: number, pageIndex: number, issuer: string): Promise<any> { return { results: [] }; }
|
|
32
|
-
async searchErrors(searchQuery: any, issuer: string): Promise<any> { return { results: [] }; }
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
class TestErrorsController extends DyNTS_Errors_Controller<TestError, TestErrors, TestErrorsControlService> {
|
|
36
|
-
protected getError_ControlService(set: { data?: TestError, issuer: string }): TestErrorsControlService {
|
|
37
|
-
return new TestErrorsControlService();
|
|
38
|
-
}
|
|
39
|
-
protected override readonly additionalEndpoints: DyNTS_Endpoint_Params[] = [];
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
describe('| DyNTS_Errors_Controller', () => {
|
|
43
|
-
let controller: TestErrorsController;
|
|
44
|
-
|
|
45
|
-
beforeEach(() => {
|
|
46
|
-
controller = new (TestErrorsController as any)();
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
describe('| setupEndpoints', () => {
|
|
50
|
-
it('| should setup all error endpoints', () => {
|
|
51
|
-
controller.setupEndpoints();
|
|
52
|
-
|
|
53
|
-
expect(controller.endpoints).toBeDefined();
|
|
54
|
-
expect(controller.endpoints.length).toBeGreaterThanOrEqual(6);
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
it('| should setup logError endpoint', () => {
|
|
58
|
-
controller.setupEndpoints();
|
|
59
|
-
|
|
60
|
-
const logErrorEndpoint = controller.endpoints.find(ep => ep.name === 'logError');
|
|
61
|
-
expect(logErrorEndpoint).toBeDefined();
|
|
62
|
-
expect(logErrorEndpoint?.type).toBe(DyFM_HttpCallType.post);
|
|
63
|
-
expect(logErrorEndpoint?.endpoint).toBe('/error/log');
|
|
64
|
-
expect((logErrorEndpoint as any)?.tasks).toBeDefined();
|
|
65
|
-
expect((logErrorEndpoint as any)?.tasks?.length).toBe(1);
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
it('| should setup newError endpoint', () => {
|
|
69
|
-
controller.setupEndpoints();
|
|
70
|
-
|
|
71
|
-
const newErrorEndpoint = controller.endpoints.find(ep => ep.name === 'newError');
|
|
72
|
-
expect(newErrorEndpoint).toBeDefined();
|
|
73
|
-
expect(newErrorEndpoint?.type).toBe(DyFM_HttpCallType.post);
|
|
74
|
-
expect(newErrorEndpoint?.endpoint).toBe('/error/new');
|
|
75
|
-
expect((newErrorEndpoint as any)?.tasks).toBeDefined();
|
|
76
|
-
expect((newErrorEndpoint as any)?.tasks?.length).toBe(1);
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
it('| should setup markErrorDone endpoint', () => {
|
|
80
|
-
controller.setupEndpoints();
|
|
81
|
-
|
|
82
|
-
const markErrorDoneEndpoint = controller.endpoints.find(ep => ep.name === 'markErrorDone');
|
|
83
|
-
expect(markErrorDoneEndpoint).toBeDefined();
|
|
84
|
-
expect(markErrorDoneEndpoint?.type).toBe(DyFM_HttpCallType.get);
|
|
85
|
-
expect(markErrorDoneEndpoint?.endpoint).toBe('/error/mark-done/:errorId');
|
|
86
|
-
expect((markErrorDoneEndpoint as any)?.tasks).toBeDefined();
|
|
87
|
-
expect((markErrorDoneEndpoint as any)?.tasks?.length).toBe(1);
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
it('| should setup markAllErrorDone endpoint', () => {
|
|
91
|
-
controller.setupEndpoints();
|
|
92
|
-
|
|
93
|
-
const markAllErrorDoneEndpoint = controller.endpoints.find(ep => ep.name === 'markAllErrorDone');
|
|
94
|
-
expect(markAllErrorDoneEndpoint).toBeDefined();
|
|
95
|
-
expect(markAllErrorDoneEndpoint?.type).toBe(DyFM_HttpCallType.get);
|
|
96
|
-
expect(markAllErrorDoneEndpoint?.endpoint).toBe('/error/mark-all-done');
|
|
97
|
-
expect((markAllErrorDoneEndpoint as any)?.tasks).toBeDefined();
|
|
98
|
-
expect((markAllErrorDoneEndpoint as any)?.tasks?.length).toBe(1);
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
it('| should setup getErrors endpoint', () => {
|
|
102
|
-
controller.setupEndpoints();
|
|
103
|
-
|
|
104
|
-
const getErrorsEndpoint = controller.endpoints.find(ep => ep.name === 'getErrors');
|
|
105
|
-
expect(getErrorsEndpoint).toBeDefined();
|
|
106
|
-
expect(getErrorsEndpoint?.type).toBe(DyFM_HttpCallType.get);
|
|
107
|
-
expect(getErrorsEndpoint?.endpoint).toBe('/error/get-range/:range');
|
|
108
|
-
expect((getErrorsEndpoint as any)?.tasks).toBeDefined();
|
|
109
|
-
expect((getErrorsEndpoint as any)?.tasks?.length).toBe(1);
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
it('| should setup getErrorsPaged endpoint', () => {
|
|
113
|
-
controller.setupEndpoints();
|
|
114
|
-
|
|
115
|
-
const getErrorsPagedEndpoint = controller.endpoints.find(ep => ep.name === 'getErrorsPaged');
|
|
116
|
-
expect(getErrorsPagedEndpoint).toBeDefined();
|
|
117
|
-
expect(getErrorsPagedEndpoint?.type).toBe(DyFM_HttpCallType.get);
|
|
118
|
-
expect(getErrorsPagedEndpoint?.endpoint).toBe('/error/get-paged/:range/:pageSize/:pageIndex');
|
|
119
|
-
expect((getErrorsPagedEndpoint as any)?.tasks).toBeDefined();
|
|
120
|
-
expect((getErrorsPagedEndpoint as any)?.tasks?.length).toBe(1);
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
it('| should setup getLastErrors endpoint', () => {
|
|
124
|
-
controller.setupEndpoints();
|
|
125
|
-
|
|
126
|
-
const getLastErrorsEndpoint = controller.endpoints.find(ep => ep.name === 'getLastErrors');
|
|
127
|
-
expect(getLastErrorsEndpoint).toBeDefined();
|
|
128
|
-
expect(getLastErrorsEndpoint?.type).toBe(DyFM_HttpCallType.get);
|
|
129
|
-
expect(getLastErrorsEndpoint?.endpoint).toBe('/error/get-last-paged/:range/:pageSize/:pageIndex');
|
|
130
|
-
expect((getLastErrorsEndpoint as any)?.tasks).toBeDefined();
|
|
131
|
-
expect((getLastErrorsEndpoint as any)?.tasks?.length).toBe(1);
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
it('| should setup searchErrors endpoint', () => {
|
|
135
|
-
controller.setupEndpoints();
|
|
136
|
-
|
|
137
|
-
const searchErrorsEndpoint = controller.endpoints.find(ep => ep.name === 'searchErrors');
|
|
138
|
-
expect(searchErrorsEndpoint).toBeDefined();
|
|
139
|
-
expect(searchErrorsEndpoint?.type).toBe(DyFM_HttpCallType.get);
|
|
140
|
-
expect(searchErrorsEndpoint?.endpoint).toBe('/error/search');
|
|
141
|
-
expect((searchErrorsEndpoint as any)?.tasks).toBeDefined();
|
|
142
|
-
expect((searchErrorsEndpoint as any)?.tasks?.length).toBe(1);
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
it('| should include additionalEndpoints', () => {
|
|
146
|
-
const additionalEndpoint = new DyNTS_Endpoint_Params({
|
|
147
|
-
name: 'customEndpoint',
|
|
148
|
-
type: DyFM_HttpCallType.get,
|
|
149
|
-
endpoint: '/error/custom',
|
|
150
|
-
tasks: [],
|
|
151
|
-
});
|
|
152
|
-
(controller as any).additionalEndpoints.push(additionalEndpoint);
|
|
153
|
-
|
|
154
|
-
controller.setupEndpoints();
|
|
155
|
-
|
|
156
|
-
const customEndpoint = controller.endpoints.find(ep => ep.name === 'customEndpoint');
|
|
157
|
-
expect(customEndpoint).toBeDefined();
|
|
158
|
-
});
|
|
159
|
-
|
|
160
|
-
it('| should throw error when additionalEndpoints is not defined', () => {
|
|
161
|
-
const controllerWithoutEndpoints = new (class extends TestErrorsController {
|
|
162
|
-
protected override readonly additionalEndpoints: DyNTS_Endpoint_Params[] = undefined as any;
|
|
163
|
-
} as any)();
|
|
164
|
-
|
|
165
|
-
expect(() => {
|
|
166
|
-
controllerWithoutEndpoints.setupEndpoints();
|
|
167
|
-
}).toThrow();
|
|
168
|
-
});
|
|
169
|
-
});
|
|
170
|
-
|
|
171
|
-
describe('| opt-in admin auth retrofit (BL-20260420-004)', (): void => {
|
|
172
|
-
afterEach((): void => {
|
|
173
|
-
DyNTS_Errors_Controller._resetAuthConfigForTesting();
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
it('| default: NO preProcesses on any endpoint (backwards compatible)', (): void => {
|
|
177
|
-
controller.setupEndpoints();
|
|
178
|
-
for (const ep of controller.endpoints) {
|
|
179
|
-
const pre: any = (ep as any).preProcesses;
|
|
180
|
-
// Ures array vagy undefined elfogadhato — fontos hogy NE legyen auth
|
|
181
|
-
expect(pre === undefined || pre.length === 0).toBe(true);
|
|
182
|
-
}
|
|
183
|
-
});
|
|
184
|
-
|
|
185
|
-
it('| configure({ authPreProcess }) → mind a 8 endpoint kap preProcesses-t', (): void => {
|
|
186
|
-
const fakeAuth = async (): Promise<void> => { /* noop */ };
|
|
187
|
-
DyNTS_Errors_Controller.configure({ authPreProcess: fakeAuth });
|
|
188
|
-
// Uj controller instance kell — a setupEndpoints olvassa a static config-ot
|
|
189
|
-
const c = new (TestErrorsController as any)();
|
|
190
|
-
c.setupEndpoints();
|
|
191
|
-
|
|
192
|
-
const builtIn: string[] = [
|
|
193
|
-
'logError', 'newError',
|
|
194
|
-
'markErrorDone', 'markAllErrorDone',
|
|
195
|
-
'getErrors', 'getErrorsPaged', 'getLastErrors',
|
|
196
|
-
'searchErrors',
|
|
197
|
-
];
|
|
198
|
-
for (const name of builtIn) {
|
|
199
|
-
const ep: any = c.endpoints.find((e: any) => e.name === name);
|
|
200
|
-
expect(ep).withContext(`endpoint ${name} missing`).toBeDefined();
|
|
201
|
-
const pre: any = (ep as any).preProcesses;
|
|
202
|
-
expect(pre.length).withContext(`endpoint ${name} preProcesses`).toBe(1);
|
|
203
|
-
expect(pre[0]).toBe(fakeAuth);
|
|
204
|
-
}
|
|
205
|
-
});
|
|
206
|
-
|
|
207
|
-
it('| configure({ authPreProcess, protectedEndpoints: subset }) → csak a megadott neveken aktiv', (): void => {
|
|
208
|
-
const fakeAuth = async (): Promise<void> => { /* noop */ };
|
|
209
|
-
DyNTS_Errors_Controller.configure({
|
|
210
|
-
authPreProcess: fakeAuth,
|
|
211
|
-
protectedEndpoints: ['markAllErrorDone', 'logError'],
|
|
212
|
-
});
|
|
213
|
-
const c = new (TestErrorsController as any)();
|
|
214
|
-
c.setupEndpoints();
|
|
215
|
-
|
|
216
|
-
const markAll: any = c.endpoints.find((e: any) => e.name === 'markAllErrorDone');
|
|
217
|
-
const log: any = c.endpoints.find((e: any) => e.name === 'logError');
|
|
218
|
-
const getErrors: any = c.endpoints.find((e: any) => e.name === 'getErrors');
|
|
219
|
-
|
|
220
|
-
expect((markAll as any).preProcesses.length).toBe(1);
|
|
221
|
-
expect((log as any).preProcesses.length).toBe(1);
|
|
222
|
-
expect((getErrors as any).preProcesses?.length ?? 0).toBe(0);
|
|
223
|
-
});
|
|
224
|
-
|
|
225
|
-
it('| getAuthConfig() returns the active config', (): void => {
|
|
226
|
-
const fakeAuth = async (): Promise<void> => { /* noop */ };
|
|
227
|
-
DyNTS_Errors_Controller.configure({ authPreProcess: fakeAuth, protectedEndpoints: ['logError'] });
|
|
228
|
-
const cfg = DyNTS_Errors_Controller.getAuthConfig();
|
|
229
|
-
expect(cfg.authPreProcess).toBe(fakeAuth);
|
|
230
|
-
expect(cfg.protectedEndpoints).toEqual(['logError']);
|
|
231
|
-
});
|
|
232
|
-
|
|
233
|
-
it('| _resetAuthConfigForTesting() clears the config', (): void => {
|
|
234
|
-
DyNTS_Errors_Controller.configure({ authPreProcess: async (): Promise<void> => { /* noop */ } });
|
|
235
|
-
DyNTS_Errors_Controller._resetAuthConfigForTesting();
|
|
236
|
-
const cfg = DyNTS_Errors_Controller.getAuthConfig();
|
|
237
|
-
expect(cfg.authPreProcess).toBeUndefined();
|
|
238
|
-
});
|
|
239
|
-
});
|
|
240
|
-
});
|
|
241
|
-
|
|
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
|
+
async getErrorsInRange(range: DyFM_RelativeDate, issuer: string): Promise<any> { return { results: [] }; }
|
|
30
|
+
async getErrorsPaged(range: DyFM_RelativeDate, pageSize: number, pageIndex: number, issuer: string): Promise<any> { return { results: [] }; }
|
|
31
|
+
async getLastErrors(range: DyFM_RelativeDate, pageSize: number, pageIndex: number, issuer: string): Promise<any> { return { results: [] }; }
|
|
32
|
+
async searchErrors(searchQuery: any, issuer: string): Promise<any> { return { results: [] }; }
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
class TestErrorsController extends DyNTS_Errors_Controller<TestError, TestErrors, TestErrorsControlService> {
|
|
36
|
+
protected getError_ControlService(set: { data?: TestError, issuer: string }): TestErrorsControlService {
|
|
37
|
+
return new TestErrorsControlService();
|
|
38
|
+
}
|
|
39
|
+
protected override readonly additionalEndpoints: DyNTS_Endpoint_Params[] = [];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
describe('| DyNTS_Errors_Controller', () => {
|
|
43
|
+
let controller: TestErrorsController;
|
|
44
|
+
|
|
45
|
+
beforeEach(() => {
|
|
46
|
+
controller = new (TestErrorsController as any)();
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
describe('| setupEndpoints', () => {
|
|
50
|
+
it('| should setup all error endpoints', () => {
|
|
51
|
+
controller.setupEndpoints();
|
|
52
|
+
|
|
53
|
+
expect(controller.endpoints).toBeDefined();
|
|
54
|
+
expect(controller.endpoints.length).toBeGreaterThanOrEqual(6);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it('| should setup logError endpoint', () => {
|
|
58
|
+
controller.setupEndpoints();
|
|
59
|
+
|
|
60
|
+
const logErrorEndpoint = controller.endpoints.find(ep => ep.name === 'logError');
|
|
61
|
+
expect(logErrorEndpoint).toBeDefined();
|
|
62
|
+
expect(logErrorEndpoint?.type).toBe(DyFM_HttpCallType.post);
|
|
63
|
+
expect(logErrorEndpoint?.endpoint).toBe('/error/log');
|
|
64
|
+
expect((logErrorEndpoint as any)?.tasks).toBeDefined();
|
|
65
|
+
expect((logErrorEndpoint as any)?.tasks?.length).toBe(1);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it('| should setup newError endpoint', () => {
|
|
69
|
+
controller.setupEndpoints();
|
|
70
|
+
|
|
71
|
+
const newErrorEndpoint = controller.endpoints.find(ep => ep.name === 'newError');
|
|
72
|
+
expect(newErrorEndpoint).toBeDefined();
|
|
73
|
+
expect(newErrorEndpoint?.type).toBe(DyFM_HttpCallType.post);
|
|
74
|
+
expect(newErrorEndpoint?.endpoint).toBe('/error/new');
|
|
75
|
+
expect((newErrorEndpoint as any)?.tasks).toBeDefined();
|
|
76
|
+
expect((newErrorEndpoint as any)?.tasks?.length).toBe(1);
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it('| should setup markErrorDone endpoint', () => {
|
|
80
|
+
controller.setupEndpoints();
|
|
81
|
+
|
|
82
|
+
const markErrorDoneEndpoint = controller.endpoints.find(ep => ep.name === 'markErrorDone');
|
|
83
|
+
expect(markErrorDoneEndpoint).toBeDefined();
|
|
84
|
+
expect(markErrorDoneEndpoint?.type).toBe(DyFM_HttpCallType.get);
|
|
85
|
+
expect(markErrorDoneEndpoint?.endpoint).toBe('/error/mark-done/:errorId');
|
|
86
|
+
expect((markErrorDoneEndpoint as any)?.tasks).toBeDefined();
|
|
87
|
+
expect((markErrorDoneEndpoint as any)?.tasks?.length).toBe(1);
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it('| should setup markAllErrorDone endpoint', () => {
|
|
91
|
+
controller.setupEndpoints();
|
|
92
|
+
|
|
93
|
+
const markAllErrorDoneEndpoint = controller.endpoints.find(ep => ep.name === 'markAllErrorDone');
|
|
94
|
+
expect(markAllErrorDoneEndpoint).toBeDefined();
|
|
95
|
+
expect(markAllErrorDoneEndpoint?.type).toBe(DyFM_HttpCallType.get);
|
|
96
|
+
expect(markAllErrorDoneEndpoint?.endpoint).toBe('/error/mark-all-done');
|
|
97
|
+
expect((markAllErrorDoneEndpoint as any)?.tasks).toBeDefined();
|
|
98
|
+
expect((markAllErrorDoneEndpoint as any)?.tasks?.length).toBe(1);
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
it('| should setup getErrors endpoint', () => {
|
|
102
|
+
controller.setupEndpoints();
|
|
103
|
+
|
|
104
|
+
const getErrorsEndpoint = controller.endpoints.find(ep => ep.name === 'getErrors');
|
|
105
|
+
expect(getErrorsEndpoint).toBeDefined();
|
|
106
|
+
expect(getErrorsEndpoint?.type).toBe(DyFM_HttpCallType.get);
|
|
107
|
+
expect(getErrorsEndpoint?.endpoint).toBe('/error/get-range/:range');
|
|
108
|
+
expect((getErrorsEndpoint as any)?.tasks).toBeDefined();
|
|
109
|
+
expect((getErrorsEndpoint as any)?.tasks?.length).toBe(1);
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
it('| should setup getErrorsPaged endpoint', () => {
|
|
113
|
+
controller.setupEndpoints();
|
|
114
|
+
|
|
115
|
+
const getErrorsPagedEndpoint = controller.endpoints.find(ep => ep.name === 'getErrorsPaged');
|
|
116
|
+
expect(getErrorsPagedEndpoint).toBeDefined();
|
|
117
|
+
expect(getErrorsPagedEndpoint?.type).toBe(DyFM_HttpCallType.get);
|
|
118
|
+
expect(getErrorsPagedEndpoint?.endpoint).toBe('/error/get-paged/:range/:pageSize/:pageIndex');
|
|
119
|
+
expect((getErrorsPagedEndpoint as any)?.tasks).toBeDefined();
|
|
120
|
+
expect((getErrorsPagedEndpoint as any)?.tasks?.length).toBe(1);
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
it('| should setup getLastErrors endpoint', () => {
|
|
124
|
+
controller.setupEndpoints();
|
|
125
|
+
|
|
126
|
+
const getLastErrorsEndpoint = controller.endpoints.find(ep => ep.name === 'getLastErrors');
|
|
127
|
+
expect(getLastErrorsEndpoint).toBeDefined();
|
|
128
|
+
expect(getLastErrorsEndpoint?.type).toBe(DyFM_HttpCallType.get);
|
|
129
|
+
expect(getLastErrorsEndpoint?.endpoint).toBe('/error/get-last-paged/:range/:pageSize/:pageIndex');
|
|
130
|
+
expect((getLastErrorsEndpoint as any)?.tasks).toBeDefined();
|
|
131
|
+
expect((getLastErrorsEndpoint as any)?.tasks?.length).toBe(1);
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
it('| should setup searchErrors endpoint', () => {
|
|
135
|
+
controller.setupEndpoints();
|
|
136
|
+
|
|
137
|
+
const searchErrorsEndpoint = controller.endpoints.find(ep => ep.name === 'searchErrors');
|
|
138
|
+
expect(searchErrorsEndpoint).toBeDefined();
|
|
139
|
+
expect(searchErrorsEndpoint?.type).toBe(DyFM_HttpCallType.get);
|
|
140
|
+
expect(searchErrorsEndpoint?.endpoint).toBe('/error/search');
|
|
141
|
+
expect((searchErrorsEndpoint as any)?.tasks).toBeDefined();
|
|
142
|
+
expect((searchErrorsEndpoint as any)?.tasks?.length).toBe(1);
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
it('| should include additionalEndpoints', () => {
|
|
146
|
+
const additionalEndpoint = new DyNTS_Endpoint_Params({
|
|
147
|
+
name: 'customEndpoint',
|
|
148
|
+
type: DyFM_HttpCallType.get,
|
|
149
|
+
endpoint: '/error/custom',
|
|
150
|
+
tasks: [],
|
|
151
|
+
});
|
|
152
|
+
(controller as any).additionalEndpoints.push(additionalEndpoint);
|
|
153
|
+
|
|
154
|
+
controller.setupEndpoints();
|
|
155
|
+
|
|
156
|
+
const customEndpoint = controller.endpoints.find(ep => ep.name === 'customEndpoint');
|
|
157
|
+
expect(customEndpoint).toBeDefined();
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
it('| should throw error when additionalEndpoints is not defined', () => {
|
|
161
|
+
const controllerWithoutEndpoints = new (class extends TestErrorsController {
|
|
162
|
+
protected override readonly additionalEndpoints: DyNTS_Endpoint_Params[] = undefined as any;
|
|
163
|
+
} as any)();
|
|
164
|
+
|
|
165
|
+
expect(() => {
|
|
166
|
+
controllerWithoutEndpoints.setupEndpoints();
|
|
167
|
+
}).toThrow();
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
describe('| opt-in admin auth retrofit (BL-20260420-004)', (): void => {
|
|
172
|
+
afterEach((): void => {
|
|
173
|
+
DyNTS_Errors_Controller._resetAuthConfigForTesting();
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
it('| default: NO preProcesses on any endpoint (backwards compatible)', (): void => {
|
|
177
|
+
controller.setupEndpoints();
|
|
178
|
+
for (const ep of controller.endpoints) {
|
|
179
|
+
const pre: any = (ep as any).preProcesses;
|
|
180
|
+
// Ures array vagy undefined elfogadhato — fontos hogy NE legyen auth
|
|
181
|
+
expect(pre === undefined || pre.length === 0).toBe(true);
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
it('| configure({ authPreProcess }) → mind a 8 endpoint kap preProcesses-t', (): void => {
|
|
186
|
+
const fakeAuth = async (): Promise<void> => { /* noop */ };
|
|
187
|
+
DyNTS_Errors_Controller.configure({ authPreProcess: fakeAuth });
|
|
188
|
+
// Uj controller instance kell — a setupEndpoints olvassa a static config-ot
|
|
189
|
+
const c = new (TestErrorsController as any)();
|
|
190
|
+
c.setupEndpoints();
|
|
191
|
+
|
|
192
|
+
const builtIn: string[] = [
|
|
193
|
+
'logError', 'newError',
|
|
194
|
+
'markErrorDone', 'markAllErrorDone',
|
|
195
|
+
'getErrors', 'getErrorsPaged', 'getLastErrors',
|
|
196
|
+
'searchErrors',
|
|
197
|
+
];
|
|
198
|
+
for (const name of builtIn) {
|
|
199
|
+
const ep: any = c.endpoints.find((e: any) => e.name === name);
|
|
200
|
+
expect(ep).withContext(`endpoint ${name} missing`).toBeDefined();
|
|
201
|
+
const pre: any = (ep as any).preProcesses;
|
|
202
|
+
expect(pre.length).withContext(`endpoint ${name} preProcesses`).toBe(1);
|
|
203
|
+
expect(pre[0]).toBe(fakeAuth);
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
it('| configure({ authPreProcess, protectedEndpoints: subset }) → csak a megadott neveken aktiv', (): void => {
|
|
208
|
+
const fakeAuth = async (): Promise<void> => { /* noop */ };
|
|
209
|
+
DyNTS_Errors_Controller.configure({
|
|
210
|
+
authPreProcess: fakeAuth,
|
|
211
|
+
protectedEndpoints: ['markAllErrorDone', 'logError'],
|
|
212
|
+
});
|
|
213
|
+
const c = new (TestErrorsController as any)();
|
|
214
|
+
c.setupEndpoints();
|
|
215
|
+
|
|
216
|
+
const markAll: any = c.endpoints.find((e: any) => e.name === 'markAllErrorDone');
|
|
217
|
+
const log: any = c.endpoints.find((e: any) => e.name === 'logError');
|
|
218
|
+
const getErrors: any = c.endpoints.find((e: any) => e.name === 'getErrors');
|
|
219
|
+
|
|
220
|
+
expect((markAll as any).preProcesses.length).toBe(1);
|
|
221
|
+
expect((log as any).preProcesses.length).toBe(1);
|
|
222
|
+
expect((getErrors as any).preProcesses?.length ?? 0).toBe(0);
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
it('| getAuthConfig() returns the active config', (): void => {
|
|
226
|
+
const fakeAuth = async (): Promise<void> => { /* noop */ };
|
|
227
|
+
DyNTS_Errors_Controller.configure({ authPreProcess: fakeAuth, protectedEndpoints: ['logError'] });
|
|
228
|
+
const cfg = DyNTS_Errors_Controller.getAuthConfig();
|
|
229
|
+
expect(cfg.authPreProcess).toBe(fakeAuth);
|
|
230
|
+
expect(cfg.protectedEndpoints).toEqual(['logError']);
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
it('| _resetAuthConfigForTesting() clears the config', (): void => {
|
|
234
|
+
DyNTS_Errors_Controller.configure({ authPreProcess: async (): Promise<void> => { /* noop */ } });
|
|
235
|
+
DyNTS_Errors_Controller._resetAuthConfigForTesting();
|
|
236
|
+
const cfg = DyNTS_Errors_Controller.getAuthConfig();
|
|
237
|
+
expect(cfg.authPreProcess).toBeUndefined();
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
|