@futdevpro/nts-dynamo 1.15.13 → 1.15.15
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/.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 +50 -22
- package/_specifications/TODO.md +15 -15
- package/_specifications/agent.md +138 -138
- package/build/_collections/global-settings.const.d.ts.map +1 -1
- package/build/_collections/global-settings.const.js +4 -0
- package/build/_collections/global-settings.const.js.map +1 -1
- package/build/_models/interfaces/global-log-settings.interface.d.ts +11 -0
- package/build/_models/interfaces/global-log-settings.interface.d.ts.map +1 -1
- package/build/_modules/logs/get-logs-routing-module.util.d.ts +19 -0
- package/build/_modules/logs/get-logs-routing-module.util.d.ts.map +1 -0
- package/build/_modules/logs/get-logs-routing-module.util.js +32 -0
- package/build/_modules/logs/get-logs-routing-module.util.js.map +1 -0
- package/build/_modules/logs/index.d.ts +4 -0
- package/build/_modules/logs/index.d.ts.map +1 -0
- package/build/_modules/logs/index.js +10 -0
- package/build/_modules/logs/index.js.map +1 -0
- package/build/_modules/logs/log-buffer.service.d.ts +38 -0
- package/build/_modules/logs/log-buffer.service.d.ts.map +1 -0
- package/build/_modules/logs/log-buffer.service.js +97 -0
- package/build/_modules/logs/log-buffer.service.js.map +1 -0
- package/build/_modules/logs/logs.controller.d.ts +27 -0
- package/build/_modules/logs/logs.controller.d.ts.map +1 -0
- package/build/_modules/logs/logs.controller.js +90 -0
- package/build/_modules/logs/logs.controller.js.map +1 -0
- package/build/_modules/logs/logs.service.d.ts +40 -0
- package/build/_modules/logs/logs.service.d.ts.map +1 -0
- package/build/_modules/logs/logs.service.js +97 -0
- package/build/_modules/logs/logs.service.js.map +1 -0
- package/build/_modules/server/errors/errors.data-service.d.ts.map +1 -1
- package/build/_modules/server/errors/errors.data-service.js +2 -1
- package/build/_modules/server/errors/errors.data-service.js.map +1 -1
- package/eslint.config.js +3 -3
- package/nodemon.json +24 -24
- package/package.json +362 -353
- 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 +5 -0
- 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 +526 -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 +108 -96
- 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 +240 -240
- package/src/_modules/ai/_modules/open-ai/_services/oai-embedding.control-service.ts +98 -98
- 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 +615 -615
- package/src/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.spec.ts +437 -437
- package/src/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.ts +833 -833
- 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 +332 -332
- package/src/_modules/ai/_services/ai-provider.service-base.spec.ts +79 -79
- package/src/_modules/ai/_services/ai-provider.service-base.ts +29 -29
- 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 +19 -19
- 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 +345 -345
- package/src/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.ts +330 -330
- 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/logs/get-logs-routing-module.util.ts +36 -0
- package/src/_modules/logs/index.ts +3 -0
- package/src/_modules/logs/log-buffer.service.ts +101 -0
- package/src/_modules/logs/logs.controller.ts +109 -0
- package/src/_modules/logs/logs.service.ts +100 -0
- 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 +230 -230
- package/src/_modules/server/errors/errors.control-service.ts +69 -69
- package/src/_modules/server/errors/errors.controller.spec.ts +165 -165
- package/src/_modules/server/errors/errors.controller.ts +270 -270
- package/src/_modules/server/errors/errors.data-service.spec.ts +355 -355
- package/src/_modules/server/errors/errors.data-service.ts +2 -1
- 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 +516 -516
- package/src/_modules/server/server-status/server-status.control-service.ts +336 -336
- package/src/_modules/server/server-status/server-status.controller.spec.ts +156 -156
- 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 +493 -493
- package/src/_services/base/data.service.ts +2525 -2525
- 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 +94 -94
- package/tsconfig.app.json +12 -12
- package/tsconfig.json +42 -42
|
@@ -1,174 +1,174 @@
|
|
|
1
|
-
|
|
2
|
-
import { Request, Response } from 'express';
|
|
3
|
-
|
|
4
|
-
import { DyFM_Error } from '@futdevpro/fsm-dynamo';
|
|
5
|
-
|
|
6
|
-
import { DyNTS_SingletonService } from '../base/singleton.service';
|
|
7
|
-
import { DyNTS_global_settings } from '../../_collections/global-settings.const';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Extend this class as an Auth Service implementation
|
|
11
|
-
*
|
|
12
|
-
* You should use singleton instance getting function by implementing a
|
|
13
|
-
* static getInstance() function
|
|
14
|
-
* @example
|
|
15
|
-
* export class AuthService extends DyNTS_AuthService {
|
|
16
|
-
*
|
|
17
|
-
* static getInstance(): AuthService {
|
|
18
|
-
* return AuthService.getSingletonInstance();
|
|
19
|
-
* }
|
|
20
|
-
* ...
|
|
21
|
-
*/
|
|
22
|
-
export abstract class DyNTS_AuthService extends DyNTS_SingletonService {
|
|
23
|
-
|
|
24
|
-
readonly serviceName: string = 'AuthService';
|
|
25
|
-
|
|
26
|
-
override readonly defaultErrorUserMsg =
|
|
27
|
-
`We encountered an unhandled Auth Error, ` +
|
|
28
|
-
`\nplease contact the responsible development team.`;
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* this function returns the 'authorization' header from the Request,
|
|
32
|
-
* or throws error, if its missing
|
|
33
|
-
*
|
|
34
|
-
* @param req
|
|
35
|
-
* @returns
|
|
36
|
-
*/
|
|
37
|
-
getTokenFromRequest(req: Request): string {
|
|
38
|
-
const authHeader = req?.headers?.['authorization'];
|
|
39
|
-
|
|
40
|
-
if (!authHeader) {
|
|
41
|
-
throw new DyFM_Error({
|
|
42
|
-
status: 401,
|
|
43
|
-
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-AS0-GT0`,
|
|
44
|
-
addECToUserMsg: true,
|
|
45
|
-
message: 'AuthHeader missing!',
|
|
46
|
-
userMessage: this.defaultErrorUserMsg,
|
|
47
|
-
issuerService: this.serviceName,
|
|
48
|
-
confidentialContent: { headers: req?.headers },
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const token = authHeader.split(' ')[1];
|
|
53
|
-
|
|
54
|
-
if (!token) {
|
|
55
|
-
throw new DyFM_Error({
|
|
56
|
-
status: 401,
|
|
57
|
-
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-AS0-GT1`,
|
|
58
|
-
addECToUserMsg: true,
|
|
59
|
-
message: 'Token missing!',
|
|
60
|
-
userMessage: this.defaultErrorUserMsg,
|
|
61
|
-
issuerService: this.serviceName,
|
|
62
|
-
confidentialContent: { headers: req?.headers },
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
return token;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* You need to implement a token validation logic,
|
|
71
|
-
* when if the token is invalid, or the authentication fails, it sends or throws an error
|
|
72
|
-
*
|
|
73
|
-
* @example
|
|
74
|
-
*
|
|
75
|
-
* async authenticateToken(req: Request, res: Response, next: NextFunction) {
|
|
76
|
-
* try {
|
|
77
|
-
* let token = AuthService.getTokenFromRequest(req);
|
|
78
|
-
* token = await AuthService.verifyToken(token);
|
|
79
|
-
*
|
|
80
|
-
* DyFM_Log.success('token authenticated');
|
|
81
|
-
* res.setHeader('authorization', `Bearer ${token}`);
|
|
82
|
-
* next();
|
|
83
|
-
* } catch (error) {
|
|
84
|
-
* error = new DyFM_Error({
|
|
85
|
-
* status: 401,
|
|
86
|
-
* message: `authenticateToken (WB-ERROR)`,
|
|
87
|
-
* addECToUserMsg: true,
|
|
88
|
-
* userMessage: `Authorization failed.`,
|
|
89
|
-
* error
|
|
90
|
-
* });
|
|
91
|
-
* DyFM_Log.error(error?.message, error);
|
|
92
|
-
*
|
|
93
|
-
* res.status(error.status);
|
|
94
|
-
* res.send(error);
|
|
95
|
-
* }
|
|
96
|
-
* }
|
|
97
|
-
* */
|
|
98
|
-
abstract authenticate_token: (req: Request, res: Response) => Promise<void>;
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* You need to implement a token validation logic,
|
|
102
|
-
* when if the token is invalid, or the authentication fails, it sends or throws an error
|
|
103
|
-
*
|
|
104
|
-
* @param req
|
|
105
|
-
* @param res
|
|
106
|
-
* @param next
|
|
107
|
-
*
|
|
108
|
-
* @example
|
|
109
|
-
*
|
|
110
|
-
* async authenticate_tokenSelf(req: Request, res: Response, next: NextFunction): Promise<void> {
|
|
111
|
-
* try {
|
|
112
|
-
* let token = AuthService.getTokenFromRequest(req);
|
|
113
|
-
* token = await AuthService.verifyTokenSelf(token, req?.params?.userId);
|
|
114
|
-
* DyFM_Log.success('selftoken authenticated');
|
|
115
|
-
*
|
|
116
|
-
* res.setHeader('authorization', `Bearer ${token}`);
|
|
117
|
-
* next();
|
|
118
|
-
* } catch (error) {
|
|
119
|
-
* error = new DyFM_Error({
|
|
120
|
-
* status: 401,
|
|
121
|
-
* message: `authenticate_tokenSelf (WB-ERROR)`,
|
|
122
|
-
* addECToUserMsg: true,
|
|
123
|
-
* userMessage: `Authorization failed.`,
|
|
124
|
-
* error
|
|
125
|
-
* });
|
|
126
|
-
* DyFM_Log.error(error?.message, error);
|
|
127
|
-
*
|
|
128
|
-
* res.status(error.status);
|
|
129
|
-
* res.send(error);
|
|
130
|
-
* }
|
|
131
|
-
* }
|
|
132
|
-
*
|
|
133
|
-
*/
|
|
134
|
-
abstract authenticate_tokenSelf: (req: Request, res: Response) => Promise<void>;
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Authenticate Token for Permission to Access UsageData
|
|
138
|
-
* @param req
|
|
139
|
-
* @param res
|
|
140
|
-
* @param next
|
|
141
|
-
*
|
|
142
|
-
* @example
|
|
143
|
-
* You need to implement a token validation logic,
|
|
144
|
-
* when if the token is invalid, or the authentication fails, it sends or throws an error
|
|
145
|
-
*
|
|
146
|
-
* async authTokenPermAccUsageData(req: Request, res: Response, next: NextFunction): Promise<void> {
|
|
147
|
-
* AuthService.authTokenAndPerm(req, res, next, Permission.accessUsageData);
|
|
148
|
-
* }
|
|
149
|
-
*/
|
|
150
|
-
abstract authenticate_tokenPerm_accUsageData: (req: Request, res: Response) => Promise<void>;
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* The DynamoNTS System is using this to get issuer, that will be set on DBServices
|
|
154
|
-
* Don't throw error in this function, since it will be used in every request
|
|
155
|
-
* @param req
|
|
156
|
-
*
|
|
157
|
-
* @example
|
|
158
|
-
* getAccountIdFromRequest(req: Request): string {
|
|
159
|
-
* try {
|
|
160
|
-
* const authHeader = req.headers['authorization'];
|
|
161
|
-
* const token = authHeader.split(' ')[1];
|
|
162
|
-
* return this.getAccountIdFromToken(token);
|
|
163
|
-
* } catch {
|
|
164
|
-
* return undefined;
|
|
165
|
-
* }
|
|
166
|
-
* }
|
|
167
|
-
*/
|
|
168
|
-
abstract getIssuerFromRequest(req: Request): string;
|
|
169
|
-
/**
|
|
170
|
-
* Basic Module: UsageModule uses this function
|
|
171
|
-
* @param req
|
|
172
|
-
*/
|
|
173
|
-
abstract getUsernameFromRequest(req: Request): string;
|
|
174
|
-
}
|
|
1
|
+
|
|
2
|
+
import { Request, Response } from 'express';
|
|
3
|
+
|
|
4
|
+
import { DyFM_Error } from '@futdevpro/fsm-dynamo';
|
|
5
|
+
|
|
6
|
+
import { DyNTS_SingletonService } from '../base/singleton.service';
|
|
7
|
+
import { DyNTS_global_settings } from '../../_collections/global-settings.const';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Extend this class as an Auth Service implementation
|
|
11
|
+
*
|
|
12
|
+
* You should use singleton instance getting function by implementing a
|
|
13
|
+
* static getInstance() function
|
|
14
|
+
* @example
|
|
15
|
+
* export class AuthService extends DyNTS_AuthService {
|
|
16
|
+
*
|
|
17
|
+
* static getInstance(): AuthService {
|
|
18
|
+
* return AuthService.getSingletonInstance();
|
|
19
|
+
* }
|
|
20
|
+
* ...
|
|
21
|
+
*/
|
|
22
|
+
export abstract class DyNTS_AuthService extends DyNTS_SingletonService {
|
|
23
|
+
|
|
24
|
+
readonly serviceName: string = 'AuthService';
|
|
25
|
+
|
|
26
|
+
override readonly defaultErrorUserMsg =
|
|
27
|
+
`We encountered an unhandled Auth Error, ` +
|
|
28
|
+
`\nplease contact the responsible development team.`;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* this function returns the 'authorization' header from the Request,
|
|
32
|
+
* or throws error, if its missing
|
|
33
|
+
*
|
|
34
|
+
* @param req
|
|
35
|
+
* @returns
|
|
36
|
+
*/
|
|
37
|
+
getTokenFromRequest(req: Request): string {
|
|
38
|
+
const authHeader = req?.headers?.['authorization'];
|
|
39
|
+
|
|
40
|
+
if (!authHeader) {
|
|
41
|
+
throw new DyFM_Error({
|
|
42
|
+
status: 401,
|
|
43
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-AS0-GT0`,
|
|
44
|
+
addECToUserMsg: true,
|
|
45
|
+
message: 'AuthHeader missing!',
|
|
46
|
+
userMessage: this.defaultErrorUserMsg,
|
|
47
|
+
issuerService: this.serviceName,
|
|
48
|
+
confidentialContent: { headers: req?.headers },
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const token = authHeader.split(' ')[1];
|
|
53
|
+
|
|
54
|
+
if (!token) {
|
|
55
|
+
throw new DyFM_Error({
|
|
56
|
+
status: 401,
|
|
57
|
+
errorCode: `${DyNTS_global_settings.systemShortCodeName}|DyNTS-AS0-GT1`,
|
|
58
|
+
addECToUserMsg: true,
|
|
59
|
+
message: 'Token missing!',
|
|
60
|
+
userMessage: this.defaultErrorUserMsg,
|
|
61
|
+
issuerService: this.serviceName,
|
|
62
|
+
confidentialContent: { headers: req?.headers },
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return token;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* You need to implement a token validation logic,
|
|
71
|
+
* when if the token is invalid, or the authentication fails, it sends or throws an error
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
*
|
|
75
|
+
* async authenticateToken(req: Request, res: Response, next: NextFunction) {
|
|
76
|
+
* try {
|
|
77
|
+
* let token = AuthService.getTokenFromRequest(req);
|
|
78
|
+
* token = await AuthService.verifyToken(token);
|
|
79
|
+
*
|
|
80
|
+
* DyFM_Log.success('token authenticated');
|
|
81
|
+
* res.setHeader('authorization', `Bearer ${token}`);
|
|
82
|
+
* next();
|
|
83
|
+
* } catch (error) {
|
|
84
|
+
* error = new DyFM_Error({
|
|
85
|
+
* status: 401,
|
|
86
|
+
* message: `authenticateToken (WB-ERROR)`,
|
|
87
|
+
* addECToUserMsg: true,
|
|
88
|
+
* userMessage: `Authorization failed.`,
|
|
89
|
+
* error
|
|
90
|
+
* });
|
|
91
|
+
* DyFM_Log.error(error?.message, error);
|
|
92
|
+
*
|
|
93
|
+
* res.status(error.status);
|
|
94
|
+
* res.send(error);
|
|
95
|
+
* }
|
|
96
|
+
* }
|
|
97
|
+
* */
|
|
98
|
+
abstract authenticate_token: (req: Request, res: Response) => Promise<void>;
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* You need to implement a token validation logic,
|
|
102
|
+
* when if the token is invalid, or the authentication fails, it sends or throws an error
|
|
103
|
+
*
|
|
104
|
+
* @param req
|
|
105
|
+
* @param res
|
|
106
|
+
* @param next
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
*
|
|
110
|
+
* async authenticate_tokenSelf(req: Request, res: Response, next: NextFunction): Promise<void> {
|
|
111
|
+
* try {
|
|
112
|
+
* let token = AuthService.getTokenFromRequest(req);
|
|
113
|
+
* token = await AuthService.verifyTokenSelf(token, req?.params?.userId);
|
|
114
|
+
* DyFM_Log.success('selftoken authenticated');
|
|
115
|
+
*
|
|
116
|
+
* res.setHeader('authorization', `Bearer ${token}`);
|
|
117
|
+
* next();
|
|
118
|
+
* } catch (error) {
|
|
119
|
+
* error = new DyFM_Error({
|
|
120
|
+
* status: 401,
|
|
121
|
+
* message: `authenticate_tokenSelf (WB-ERROR)`,
|
|
122
|
+
* addECToUserMsg: true,
|
|
123
|
+
* userMessage: `Authorization failed.`,
|
|
124
|
+
* error
|
|
125
|
+
* });
|
|
126
|
+
* DyFM_Log.error(error?.message, error);
|
|
127
|
+
*
|
|
128
|
+
* res.status(error.status);
|
|
129
|
+
* res.send(error);
|
|
130
|
+
* }
|
|
131
|
+
* }
|
|
132
|
+
*
|
|
133
|
+
*/
|
|
134
|
+
abstract authenticate_tokenSelf: (req: Request, res: Response) => Promise<void>;
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Authenticate Token for Permission to Access UsageData
|
|
138
|
+
* @param req
|
|
139
|
+
* @param res
|
|
140
|
+
* @param next
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* You need to implement a token validation logic,
|
|
144
|
+
* when if the token is invalid, or the authentication fails, it sends or throws an error
|
|
145
|
+
*
|
|
146
|
+
* async authTokenPermAccUsageData(req: Request, res: Response, next: NextFunction): Promise<void> {
|
|
147
|
+
* AuthService.authTokenAndPerm(req, res, next, Permission.accessUsageData);
|
|
148
|
+
* }
|
|
149
|
+
*/
|
|
150
|
+
abstract authenticate_tokenPerm_accUsageData: (req: Request, res: Response) => Promise<void>;
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* The DynamoNTS System is using this to get issuer, that will be set on DBServices
|
|
154
|
+
* Don't throw error in this function, since it will be used in every request
|
|
155
|
+
* @param req
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* getAccountIdFromRequest(req: Request): string {
|
|
159
|
+
* try {
|
|
160
|
+
* const authHeader = req.headers['authorization'];
|
|
161
|
+
* const token = authHeader.split(' ')[1];
|
|
162
|
+
* return this.getAccountIdFromToken(token);
|
|
163
|
+
* } catch {
|
|
164
|
+
* return undefined;
|
|
165
|
+
* }
|
|
166
|
+
* }
|
|
167
|
+
*/
|
|
168
|
+
abstract getIssuerFromRequest(req: Request): string;
|
|
169
|
+
/**
|
|
170
|
+
* Basic Module: UsageModule uses this function
|
|
171
|
+
* @param req
|
|
172
|
+
*/
|
|
173
|
+
abstract getUsernameFromRequest(req: Request): string;
|
|
174
|
+
}
|
|
@@ -1,85 +1,85 @@
|
|
|
1
|
-
|
|
2
|
-
import { DyFM_Error, DyFM_EnvironmentFlag } from '@futdevpro/fsm-dynamo';
|
|
3
|
-
import { DyNTS_EmailService, DyNTS_EmailService_Settings, DyNTS_EmailTemplateComponent, DyNTS_SendEmail_Settings } from './email.service';
|
|
4
|
-
import { DyNTS_global_settings } from '../../_collections/global-settings.const';
|
|
5
|
-
|
|
6
|
-
describe('| DyNTS_EmailService', () => {
|
|
7
|
-
let emailService: DyNTS_EmailService;
|
|
8
|
-
const settings: DyNTS_EmailService_Settings = {
|
|
9
|
-
host: 'smtp.example.com',
|
|
10
|
-
port: 587,
|
|
11
|
-
email: 'test@example.com',
|
|
12
|
-
pass: 'password',
|
|
13
|
-
senderName: 'Test Sender',
|
|
14
|
-
rootPath: '/path/to/templates',
|
|
15
|
-
templateComponents: [
|
|
16
|
-
new DyNTS_EmailTemplateComponent({
|
|
17
|
-
name: 'testComponent',
|
|
18
|
-
selector: 'test-selector',
|
|
19
|
-
template: '<div>{{property}}</div>',
|
|
20
|
-
properties: [ 'property' ],
|
|
21
|
-
}),
|
|
22
|
-
],
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
beforeAll(() => {
|
|
26
|
-
if (!DyNTS_global_settings.systemShortCodeName) (DyNTS_global_settings as { systemShortCodeName?: string }).systemShortCodeName = 'TEST';
|
|
27
|
-
if (!DyNTS_global_settings.env_settings) (DyNTS_global_settings as { env_settings?: unknown }).env_settings = { environment: DyFM_EnvironmentFlag.local };
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
beforeEach(() => {
|
|
31
|
-
(DyNTS_global_settings as { env_settings: unknown }).env_settings = {
|
|
32
|
-
environment: DyFM_EnvironmentFlag.local,
|
|
33
|
-
mongoUri: 'mongodb://localhost:27017/test',
|
|
34
|
-
discord: undefined,
|
|
35
|
-
openAi: undefined,
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
emailService = new DyNTS_EmailService(settings);
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
it('| should initialize with correct settings', () => {
|
|
42
|
-
expect(emailService.serviceName).toBe('DyNTS_EmailService');
|
|
43
|
-
expect(emailService['senderName']).toBe(settings.senderName);
|
|
44
|
-
expect(emailService['senderNEmail']).toBe(`${settings.senderName} <${settings.email}>`);
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
it('| should load email template components', async () => {
|
|
48
|
-
await emailService.asyncPostConstruct();
|
|
49
|
-
expect(emailService['componentsByName']['testComponent']).toBeDefined();
|
|
50
|
-
expect(emailService['componentsBySelector']['test-selector']).toBeDefined();
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
it('| should throw error if no template component name is provided', async () => {
|
|
54
|
-
const sendEmailSettings: DyNTS_SendEmail_Settings = {
|
|
55
|
-
to: 'recipient@example.com',
|
|
56
|
-
subject: 'Test Subject',
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
await expectAsync(emailService.sendEmail(sendEmailSettings, 'testIssuer'))
|
|
60
|
-
.toBeRejectedWith(jasmine.any(DyFM_Error));
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
it('| should throw error if template component is not found', async () => {
|
|
64
|
-
const sendEmailSettings: DyNTS_SendEmail_Settings = {
|
|
65
|
-
to: 'recipient@example.com',
|
|
66
|
-
subject: 'Test Subject',
|
|
67
|
-
templateComponentName: 'nonExistentComponent',
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
await expectAsync(emailService.sendEmail(sendEmailSettings, 'testIssuer'))
|
|
71
|
-
.toBeRejectedWith(jasmine.any(DyFM_Error));
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
it('| should throw error if template property is missing', async () => {
|
|
75
|
-
const component = new DyNTS_EmailTemplateComponent({
|
|
76
|
-
name: 'testComponent',
|
|
77
|
-
selector: 'test-selector',
|
|
78
|
-
template: '<div>{{missingProperty}}</div>',
|
|
79
|
-
properties: [ 'missingProperty' ],
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
await expectAsync(emailService['compileComponentProperties'](component, {}, '', 'testIssuer'))
|
|
83
|
-
.toBeRejectedWith(jasmine.any(DyFM_Error));
|
|
84
|
-
});
|
|
85
|
-
});
|
|
1
|
+
|
|
2
|
+
import { DyFM_Error, DyFM_EnvironmentFlag } from '@futdevpro/fsm-dynamo';
|
|
3
|
+
import { DyNTS_EmailService, DyNTS_EmailService_Settings, DyNTS_EmailTemplateComponent, DyNTS_SendEmail_Settings } from './email.service';
|
|
4
|
+
import { DyNTS_global_settings } from '../../_collections/global-settings.const';
|
|
5
|
+
|
|
6
|
+
describe('| DyNTS_EmailService', () => {
|
|
7
|
+
let emailService: DyNTS_EmailService;
|
|
8
|
+
const settings: DyNTS_EmailService_Settings = {
|
|
9
|
+
host: 'smtp.example.com',
|
|
10
|
+
port: 587,
|
|
11
|
+
email: 'test@example.com',
|
|
12
|
+
pass: 'password',
|
|
13
|
+
senderName: 'Test Sender',
|
|
14
|
+
rootPath: '/path/to/templates',
|
|
15
|
+
templateComponents: [
|
|
16
|
+
new DyNTS_EmailTemplateComponent({
|
|
17
|
+
name: 'testComponent',
|
|
18
|
+
selector: 'test-selector',
|
|
19
|
+
template: '<div>{{property}}</div>',
|
|
20
|
+
properties: [ 'property' ],
|
|
21
|
+
}),
|
|
22
|
+
],
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
beforeAll(() => {
|
|
26
|
+
if (!DyNTS_global_settings.systemShortCodeName) (DyNTS_global_settings as { systemShortCodeName?: string }).systemShortCodeName = 'TEST';
|
|
27
|
+
if (!DyNTS_global_settings.env_settings) (DyNTS_global_settings as { env_settings?: unknown }).env_settings = { environment: DyFM_EnvironmentFlag.local };
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
beforeEach(() => {
|
|
31
|
+
(DyNTS_global_settings as { env_settings: unknown }).env_settings = {
|
|
32
|
+
environment: DyFM_EnvironmentFlag.local,
|
|
33
|
+
mongoUri: 'mongodb://localhost:27017/test',
|
|
34
|
+
discord: undefined,
|
|
35
|
+
openAi: undefined,
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
emailService = new DyNTS_EmailService(settings);
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it('| should initialize with correct settings', () => {
|
|
42
|
+
expect(emailService.serviceName).toBe('DyNTS_EmailService');
|
|
43
|
+
expect(emailService['senderName']).toBe(settings.senderName);
|
|
44
|
+
expect(emailService['senderNEmail']).toBe(`${settings.senderName} <${settings.email}>`);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it('| should load email template components', async () => {
|
|
48
|
+
await emailService.asyncPostConstruct();
|
|
49
|
+
expect(emailService['componentsByName']['testComponent']).toBeDefined();
|
|
50
|
+
expect(emailService['componentsBySelector']['test-selector']).toBeDefined();
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('| should throw error if no template component name is provided', async () => {
|
|
54
|
+
const sendEmailSettings: DyNTS_SendEmail_Settings = {
|
|
55
|
+
to: 'recipient@example.com',
|
|
56
|
+
subject: 'Test Subject',
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
await expectAsync(emailService.sendEmail(sendEmailSettings, 'testIssuer'))
|
|
60
|
+
.toBeRejectedWith(jasmine.any(DyFM_Error));
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it('| should throw error if template component is not found', async () => {
|
|
64
|
+
const sendEmailSettings: DyNTS_SendEmail_Settings = {
|
|
65
|
+
to: 'recipient@example.com',
|
|
66
|
+
subject: 'Test Subject',
|
|
67
|
+
templateComponentName: 'nonExistentComponent',
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
await expectAsync(emailService.sendEmail(sendEmailSettings, 'testIssuer'))
|
|
71
|
+
.toBeRejectedWith(jasmine.any(DyFM_Error));
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it('| should throw error if template property is missing', async () => {
|
|
75
|
+
const component = new DyNTS_EmailTemplateComponent({
|
|
76
|
+
name: 'testComponent',
|
|
77
|
+
selector: 'test-selector',
|
|
78
|
+
template: '<div>{{missingProperty}}</div>',
|
|
79
|
+
properties: [ 'missingProperty' ],
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
await expectAsync(emailService['compileComponentProperties'](component, {}, '', 'testIssuer'))
|
|
83
|
+
.toBeRejectedWith(jasmine.any(DyFM_Error));
|
|
84
|
+
});
|
|
85
|
+
});
|