@futdevpro/fsm-dynamo 1.16.38 → 1.16.40
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/.cursor/rules/__assistant_guide.mdc +30 -30
- package/.cursor/rules/__main.mdc +64 -64
- package/.cursor/rules/_ag_backend-structure.mdc +85 -85
- package/.cursor/rules/_ag_backend.mdc +16 -16
- package/.cursor/rules/_ag_debug.mdc +7 -7
- package/.cursor/rules/_ag_documentation_writing_rules.mdc +372 -372
- package/.cursor/rules/_ag_file-refactoring.mdc +113 -113
- package/.cursor/rules/_ag_fixes_rules.mdc +5 -5
- package/.cursor/rules/_ag_frontend-structure.mdc +86 -86
- package/.cursor/rules/_ag_frontend.mdc +39 -39
- package/.cursor/rules/_ag_import-rules.mdc +44 -44
- package/.cursor/rules/_ag_naming.mdc +115 -115
- package/.cursor/rules/_ag_running_commands.mdc +4 -4
- package/.cursor/rules/_ag_server-controller.mdc +5 -5
- package/.cursor/rules/_ag_should-be.mdc +6 -6
- package/.cursor/rules/_ag_swearing.mdc +47 -47
- package/.cursor/rules/ai_development_guide.md +60 -60
- package/.cursor/rules/ai_directives.md +114 -114
- package/.cursor/rules/cursor-rules.md +160 -160
- package/.cursor/rules/default-command.mdc +464 -464
- package/.cursor/rules/error_code_pattern.md +39 -39
- package/.cursor/rules/saved rule mcp server use.md +15 -15
- package/.dynamo/pipeline.cicd.config.json +157 -157
- package/.dynamo/version-bump.config.json +5 -5
- package/.github/workflows/main.yml +439 -439
- package/.husky/pre-commit +2 -2
- package/.vscode/settings.json +11 -11
- package/LICENSE +21 -21
- package/README.md +701 -693
- package/__documentations/2026-05-17-oai-compatible-providers-howto.md +282 -282
- package/__documentations/2026-06-01-fr047-fc-foundation.md +48 -48
- package/__documentations/2026-06-01-fr047-fr048-code-review.md +153 -153
- package/__documentations/2026-06-01-fr047-p1-function-calling-vocabulary.md +75 -75
- package/__documentations/2026-06-05-secret-mask-url-cred-any-scheme.md +37 -37
- package/__documentations/2026-06-06-ngx-models-merge-completion.md +100 -100
- package/__documentations/2026-06-22-dyfm-error-extends-error.md +109 -109
- package/__documentations/plans/00-MASTER-ngx-models-fsm-merge.md +75 -75
- package/__documentations/plans/01-naming-convention-DyNM-to-DyFM.md +103 -103
- package/__documentations/plans/02-consumer-rollout.md +84 -84
- package/_specifications/BACKLOG.md +43 -43
- package/build/_modules/crypto/_models/artifact-signature.interface.d.ts +37 -0
- package/build/_modules/crypto/_models/artifact-signature.interface.d.ts.map +1 -0
- package/build/_modules/crypto/_models/artifact-signature.interface.js +3 -0
- package/build/_modules/crypto/_models/artifact-signature.interface.js.map +1 -0
- package/build/_modules/crypto/_services/artifact-signature.control-service.d.ts +24 -0
- package/build/_modules/crypto/_services/artifact-signature.control-service.d.ts.map +1 -0
- package/build/_modules/crypto/_services/artifact-signature.control-service.js +281 -0
- package/build/_modules/crypto/_services/artifact-signature.control-service.js.map +1 -0
- package/build/_modules/crypto/index.d.ts +2 -0
- package/build/_modules/crypto/index.d.ts.map +1 -1
- package/build/_modules/crypto/index.js +2 -0
- package/build/_modules/crypto/index.js.map +1 -1
- package/build/_modules/socket/_models/sck-socket-event.control-model.d.ts +4 -6
- package/build/_modules/socket/_models/sck-socket-event.control-model.d.ts.map +1 -1
- package/build/_modules/socket/_models/sck-socket-event.control-model.js +9 -7
- package/build/_modules/socket/_models/sck-socket-event.control-model.js.map +1 -1
- package/eslint.config.js +4 -4
- package/nodemon.json +22 -22
- package/package.json +306 -306
- package/pnpm-workspace.yaml +2 -2
- package/scripts/_capture-out/ai-error-capture.json +398 -398
- package/scripts/ai-error-capture.js +171 -171
- package/scripts/ai-model-registry-check.js +132 -132
- package/scripts/crypto/CRYPTO-STABILITY-SOLUTION.md +196 -196
- package/scripts/crypto/README.md +113 -113
- package/scripts/crypto/demo-crypto-stability.js +120 -120
- package/scripts/crypto/stress-test-crypto.js +379 -379
- package/scripts/run-coverage-tests.js +24 -24
- package/scripts/verify-build-completeness.js +62 -62
- package/spec/support/helpers/ts-node-helper.js +9 -9
- package/spec/support/jasmine.coverage.json +23 -23
- package/spec/support/jasmine.json +24 -24
- package/src/_collections/constants/data-sizes.const.ts +40 -40
- package/src/_collections/constants/error-defaults.const.ts +20 -20
- package/src/_collections/constants/global-settings.const.spec.ts +32 -32
- package/src/_collections/constants/global-settings.const.ts +29 -29
- package/src/_collections/constants/numbers.const.ts +40 -40
- package/src/_collections/constants/times.const.ts +45 -45
- package/src/_collections/utils/array.util.spec.ts +306 -306
- package/src/_collections/utils/array.util.ts +813 -813
- package/src/_collections/utils/async.util.spec.ts +398 -398
- package/src/_collections/utils/async.util.ts +208 -208
- package/src/_collections/utils/data.util.spec.ts +345 -345
- package/src/_collections/utils/data.util.ts +226 -226
- package/src/_collections/utils/extract-error-message.util.spec.ts +204 -204
- package/src/_collections/utils/extract-error-message.util.ts +223 -223
- package/src/_collections/utils/json-error-helper.util.spec.ts +521 -521
- package/src/_collections/utils/json-error-helper.util.ts +301 -301
- package/src/_collections/utils/log.util.spec.ts +975 -975
- package/src/_collections/utils/log.util.ts +667 -667
- package/src/_collections/utils/math/box-bounds.spec.ts +73 -73
- package/src/_collections/utils/math/box-bounds.util.ts +183 -183
- package/src/_collections/utils/math/math.util.spec.ts +94 -94
- package/src/_collections/utils/math/math.util.ts +141 -141
- package/src/_collections/utils/math/random.util.spec.ts +82 -82
- package/src/_collections/utils/math/random.util.ts +139 -139
- package/src/_collections/utils/math/trigonometry.util.spec.ts +57 -57
- package/src/_collections/utils/math/trigonometry.util.ts +102 -102
- package/src/_collections/utils/math/vector2.util.spec.ts +94 -94
- package/src/_collections/utils/math/vector2.util.ts +653 -653
- package/src/_collections/utils/object.util.spec.ts +646 -646
- package/src/_collections/utils/object.util.ts +739 -739
- package/src/_collections/utils/regex/password-regex.util.spec.ts +51 -51
- package/src/_collections/utils/regex/password-regex.util.ts +65 -65
- package/src/_collections/utils/regex/regex.util.spec.ts +42 -42
- package/src/_collections/utils/regex/regex.util.ts +6 -6
- package/src/_collections/utils/regex/username-regex.util.spec.ts +61 -61
- package/src/_collections/utils/regex/username-regex.util.ts +35 -35
- package/src/_collections/utils/require-env.util.spec.ts +231 -231
- package/src/_collections/utils/require-env.util.ts +138 -138
- package/src/_collections/utils/round-list.util.spec.ts +79 -79
- package/src/_collections/utils/round-list.util.ts +162 -162
- package/src/_collections/utils/secret-mask.util.spec.ts +66 -66
- package/src/_collections/utils/secret-mask.util.ts +262 -262
- package/src/_collections/utils/stack.util.spec.ts +372 -372
- package/src/_collections/utils/stack.util.ts +164 -164
- package/src/_collections/utils/string-case.util.spec.ts +441 -441
- package/src/_collections/utils/string-case.util.ts +362 -362
- package/src/_collections/utils/string.util.spec.ts +975 -975
- package/src/_collections/utils/string.util.ts +449 -449
- package/src/_collections/utils/time.util.spec.ts +50 -50
- package/src/_collections/utils/time.util.ts +481 -481
- package/src/_collections/utils/type-cloning-facility.util.spec.ts +51 -51
- package/src/_collections/utils/type-cloning-facility.util.ts +168 -168
- package/src/_collections/utils/utilities.util.spec.ts +201 -201
- package/src/_collections/utils/utilities.util.ts +68 -68
- package/src/_collections/utils/uuid.util.spec.ts +30 -30
- package/src/_collections/utils/uuid.util.ts +50 -50
- package/src/_enums/basic-property-type.enum.ts +20 -20
- package/src/_enums/data-model-type.enum.ts +29 -29
- package/src/_enums/environment-flag.enum.ts +28 -28
- package/src/_enums/error-level.enum.ts +43 -43
- package/src/_enums/error-status.enum.ts +30 -30
- package/src/_enums/http/http-call-type.enum.ts +43 -43
- package/src/_enums/http/http-event-type.enum.ts +40 -40
- package/src/_enums/http/http-response-type.enum.ts +18 -18
- package/src/_enums/log-style.enum.ts +44 -44
- package/src/_enums/server-connection-status.enum.ts +6 -6
- package/src/_enums/time/day-of-week.enum.ts +55 -55
- package/src/_enums/time/month.enum.ts +25 -25
- package/src/_enums/time/relative-date.enum.ts +24 -24
- package/src/_models/control-models/data-model-params.control-model.spec.ts +156 -156
- package/src/_models/control-models/data-model-params.control-model.ts +362 -362
- package/src/_models/control-models/data-property-params.control-model.spec.ts +93 -93
- package/src/_models/control-models/data-property-params.control-model.ts +210 -210
- package/src/_models/control-models/error.control-model.spec.ts +975 -975
- package/src/_models/control-models/error.control-model.ts +1280 -1280
- package/src/_models/control-models/http/http-error-response.control-model.spec.ts +116 -116
- package/src/_models/control-models/http/http-error-response.control-model.ts +52 -52
- package/src/_models/control-models/http/http-headers.control-model.spec.ts +25 -25
- package/src/_models/control-models/http/http-headers.control-model.ts +124 -124
- package/src/_models/control-models/http/http-response.model-base.spec.ts +46 -46
- package/src/_models/control-models/http/http-response.model-base.ts +57 -57
- package/src/_models/control-models/poll.control-model.spec.ts +63 -63
- package/src/_models/control-models/poll.control-model.ts +151 -151
- package/src/_models/control-models/range-value.control-model.spec.ts +187 -187
- package/src/_models/control-models/range-value.control-model.ts +289 -289
- package/src/_models/control-models/server-status.control-model.spec.ts +66 -66
- package/src/_models/control-models/server-status.control-model.ts +94 -94
- package/src/_models/control-models/service-endpoint-settings-base.control-model.spec.ts +145 -145
- package/src/_models/control-models/service-endpoint-settings-base.control-model.ts +186 -186
- package/src/_models/data-models/errors.data-model.spec.ts +71 -71
- package/src/_models/data-models/errors.data-model.ts +200 -200
- package/src/_models/data-models/metadata.data-model.spec.ts +184 -184
- package/src/_models/data-models/metadata.data-model.ts +153 -153
- package/src/_models/interfaces/box-bounds.interface.ts +7 -7
- package/src/_models/interfaces/environment/global-log-settings.interface.ts +86 -86
- package/src/_models/interfaces/environment/global-settings.interface.ts +69 -69
- package/src/_models/interfaces/error-defaults.interface.ts +18 -18
- package/src/_models/interfaces/paged.interface.ts +12 -12
- package/src/_models/interfaces/random-weight.interface.ts +7 -7
- package/src/_models/interfaces/route-settings.interface.ts +15 -15
- package/src/_models/interfaces/search-query.interface.ts +23 -23
- package/src/_models/interfaces/search-result.interface.ts +5 -5
- package/src/_models/interfaces/server-error-statistics.interface.ts +24 -24
- package/src/_models/interfaces/vector2.interface.ts +20 -20
- package/src/_models/types/db-filter.type.ts +110 -110
- package/src/_models/types/db-sort.type.ts +4 -4
- package/src/_models/types/ds-filter.type.ts +68 -68
- package/src/_models/types/ds-sort.type.ts +21 -21
- package/src/_modules/ai/_collections/ai-model-ref.util.ts +88 -88
- package/src/_modules/ai/_collections/ai-model-registry.util.spec.ts +37 -37
- package/src/_modules/ai/_collections/ai-model-registry.util.ts +30 -30
- package/src/_modules/ai/_enums/ai-message-role.enum.ts +7 -7
- package/src/_modules/ai/_enums/ai-model-type.enum.ts +7 -7
- package/src/_modules/ai/_enums/ai-provider.enum.ts +7 -7
- package/src/_modules/ai/_models/ai-call-settings.interface.ts +84 -84
- package/src/_modules/ai/_models/ai-config.interface.ts +14 -14
- package/src/_modules/ai/_models/ai-embedding-request.interface.ts +20 -20
- package/src/_modules/ai/_models/ai-embedding-response.interface.ts +26 -26
- package/src/_modules/ai/_models/ai-llm-request.interface.ts +24 -24
- package/src/_modules/ai/_models/ai-llm-response.interface.ts +30 -30
- package/src/_modules/ai/_models/ai-message.interface.ts +12 -12
- package/src/_modules/ai/_models/ai-model-capabilities.interface.ts +35 -35
- package/src/_modules/ai/_models/ai-model-info.interface.ts +63 -63
- package/src/_modules/ai/_models/ai-model-settings-schema.interface.ts +52 -52
- package/src/_modules/ai/_models/ai-provider-capabilities.interface.ts +28 -28
- package/src/_modules/ai/_models/ai-settings.interface.ts +17 -17
- package/src/_modules/ai/_models/ai-tool-call.interface.ts +18 -18
- package/src/_modules/ai/_models/ai-tool-handler.type.ts +11 -11
- package/src/_modules/ai/_models/ai-tool-result.interface.ts +16 -16
- package/src/_modules/ai/_models/ai-tool.interface.ts +16 -16
- package/src/_modules/ai/_models/ai-user-provider-config.control-model.ts +29 -29
- package/src/_modules/ai/_modules/anthropic/_collections/aai-models.const.ts +135 -135
- package/src/_modules/ai/_modules/anthropic/_enums/aai-model.enum.ts +19 -19
- package/src/_modules/ai/_modules/anthropic/_models/aai-call-settings.control-model.spec.ts +28 -28
- package/src/_modules/ai/_modules/anthropic/_models/aai-call-settings.control-model.ts +23 -23
- package/src/_modules/ai/_modules/anthropic/_models/aai-client-options.interface.ts +10 -10
- package/src/_modules/ai/_modules/anthropic/_models/aai-settings.control-model.spec.ts +22 -22
- package/src/_modules/ai/_modules/anthropic/_models/aai-settings.control-model.ts +27 -27
- package/src/_modules/ai/_modules/anthropic/_models/aai-user-provider-config.control-model.ts +20 -20
- package/src/_modules/ai/_modules/anthropic/index.ts +14 -14
- package/src/_modules/ai/_modules/document-ai/_models/dai-embedding-info.interface.ts +12 -12
- package/src/_modules/ai/_modules/document-ai/_models/dai-vector-search-params.interface.ts +22 -22
- package/src/_modules/ai/_modules/document-ai/index.ts +4 -4
- package/src/_modules/ai/_modules/fdp-ai/_collections/fdpai-models.const.ts +40 -40
- package/src/_modules/ai/_modules/fdp-ai/_enums/fdpai-model.enum.ts +6 -6
- package/src/_modules/ai/_modules/fdp-ai/_models/fdpai-call-settings.control-model.ts +19 -19
- package/src/_modules/ai/_modules/fdp-ai/_models/fdpai-client-options.interface.ts +11 -11
- package/src/_modules/ai/_modules/fdp-ai/_models/fdpai-settings.control-model.ts +24 -24
- package/src/_modules/ai/_modules/fdp-ai/_models/fdpai-user-provider-config.control-model.ts +20 -20
- package/src/_modules/ai/_modules/fdp-ai/index.ts +11 -11
- package/src/_modules/ai/_modules/google-ai/_collections/gai-models.const.ts +161 -161
- package/src/_modules/ai/_modules/google-ai/_enums/gai-model.enum.ts +16 -16
- package/src/_modules/ai/_modules/google-ai/_models/gai-call-settings.control-model.spec.ts +28 -28
- package/src/_modules/ai/_modules/google-ai/_models/gai-call-settings.control-model.ts +21 -21
- package/src/_modules/ai/_modules/google-ai/_models/gai-client-options.interface.ts +8 -8
- package/src/_modules/ai/_modules/google-ai/_models/gai-settings.control-model.spec.ts +22 -22
- package/src/_modules/ai/_modules/google-ai/_models/gai-settings.control-model.ts +25 -25
- package/src/_modules/ai/_modules/google-ai/_models/gai-user-provider-config.control-model.ts +20 -20
- package/src/_modules/ai/_modules/google-ai/index.ts +14 -14
- package/src/_modules/ai/_modules/local-ai/_collections/lai-models.const.ts +59 -59
- package/src/_modules/ai/_modules/local-ai/_enums/lai-model.enum.ts +6 -6
- package/src/_modules/ai/_modules/local-ai/_models/lai-call-settings.control-model.spec.ts +28 -28
- package/src/_modules/ai/_modules/local-ai/_models/lai-call-settings.control-model.ts +18 -18
- package/src/_modules/ai/_modules/local-ai/_models/lai-client-options.interface.ts +9 -9
- package/src/_modules/ai/_modules/local-ai/_models/lai-settings.control-model.spec.ts +22 -22
- package/src/_modules/ai/_modules/local-ai/_models/lai-settings.control-model.ts +23 -23
- package/src/_modules/ai/_modules/local-ai/index.ts +14 -14
- package/src/_modules/ai/_modules/open-ai/_collections/oai-embedding-model-dimensions.const.ts +7 -7
- package/src/_modules/ai/_modules/open-ai/_collections/oai-models.const.ts +404 -404
- package/src/_modules/ai/_modules/open-ai/_enums/oai-model.enum.ts +179 -179
- package/src/_modules/ai/_modules/open-ai/_models/oai-call-settings.control-model.spec.ts +28 -28
- package/src/_modules/ai/_modules/open-ai/_models/oai-call-settings.control-model.ts +21 -21
- package/src/_modules/ai/_modules/open-ai/_models/oai-client-options.interface.ts +81 -81
- package/src/_modules/ai/_modules/open-ai/_models/oai-embedding-info.interface.ts +13 -13
- package/src/_modules/ai/_modules/open-ai/_models/oai-settings.control-model.spec.ts +22 -22
- package/src/_modules/ai/_modules/open-ai/_models/oai-settings.control-model.ts +25 -25
- package/src/_modules/ai/_modules/open-ai/_models/oai-user-provider-config.control-model.ts +21 -21
- package/src/_modules/ai/_modules/open-ai/index.ts +28 -28
- package/src/_modules/ai/index.ts +27 -27
- package/src/_modules/ci-tools/_enums/cit-ci-result-code.enum.ts +11 -11
- package/src/_modules/ci-tools/_enums/cit-ci-step-result-code.enum.ts +9 -9
- package/src/_modules/ci-tools/_models/cit-ci-result-info.data-models.spec.ts +58 -58
- package/src/_modules/ci-tools/_models/cit-ci-result-info.data-models.ts +77 -77
- package/src/_modules/ci-tools/_models/cit-ci-step-result.interface.ts +12 -12
- package/src/_modules/ci-tools/index.ts +8 -8
- package/src/_modules/crypto/_collections/crypto-v1.util.ts +225 -225
- package/src/_modules/crypto/_collections/crypto-v2.util.ts +331 -331
- package/src/_modules/crypto/_collections/crypto-v4.util.ts +702 -702
- package/src/_modules/crypto/_collections/crypto.util.db-envelope.spec.ts +51 -51
- package/src/_modules/crypto/_collections/crypto.util.edge.spec.ts +605 -605
- package/src/_modules/crypto/_collections/crypto.util.extra.spec.ts +642 -642
- package/src/_modules/crypto/_collections/crypto.util.simple.spec.ts +512 -512
- package/src/_modules/crypto/_collections/crypto.util.ts +748 -748
- package/src/_modules/crypto/_models/artifact-signature.interface.ts +39 -0
- package/src/_modules/crypto/_services/artifact-signature.control-service.spec.ts +223 -0
- package/src/_modules/crypto/_services/artifact-signature.control-service.ts +395 -0
- package/src/_modules/crypto/index.ts +16 -14
- package/src/_modules/custom-data/_collections/cud-module-settings.const.ts +21 -21
- package/src/_modules/custom-data/_models/cud.data-model.spec.ts +38 -38
- package/src/_modules/custom-data/_models/cud.data-model.ts +39 -39
- package/src/_modules/custom-data/index.ts +10 -10
- package/src/_modules/data-handler/_models/data-handler-settings.control-model.spec.ts +110 -110
- package/src/_modules/data-handler/_models/data-handler-settings.control-model.ts +110 -110
- package/src/_modules/data-handler/_models/data-handler.control-model.spec.ts +473 -473
- package/src/_modules/data-handler/_models/data-handler.control-model.ts +486 -486
- package/src/_modules/data-handler/_models/data-list-handler.control-model.spec.ts +263 -263
- package/src/_modules/data-handler/_models/data-list-handler.control-model.ts +252 -252
- package/src/_modules/data-handler/_models/data-search-handler.control-model.spec.ts +417 -417
- package/src/_modules/data-handler/_models/data-search-handler.control-model.ts +390 -390
- package/src/_modules/data-handler/_models/list-collector-data-handler.control-model.spec.ts +374 -374
- package/src/_modules/data-handler/_models/list-collector-data-handler.control-model.ts +274 -274
- package/src/_modules/data-handler/index.ts +6 -6
- package/src/_modules/game/_collections/audio-mixer.util.spec.ts +198 -198
- package/src/_modules/game/_collections/audio-mixer.util.ts +143 -143
- package/src/_modules/game/_collections/audio-scale.util.spec.ts +140 -140
- package/src/_modules/game/_collections/audio-scale.util.ts +129 -129
- package/src/_modules/game/_enums/audio-channel.enum.ts +22 -22
- package/src/_modules/game/_models/audio-mixer-config.interface.ts +53 -53
- package/src/_modules/game/_models/audio-mixer-settings.interface.ts +38 -38
- package/src/_modules/game/_models/audio-mixer-state.interface.ts +36 -36
- package/src/_modules/game/_models/audio-mixer.control-model.spec.ts +376 -376
- package/src/_modules/game/_models/audio-mixer.control-model.ts +419 -419
- package/src/_modules/game/_models/audio-scale.interface.ts +21 -21
- package/src/_modules/game/_models/seeded-random-state.interface.ts +21 -21
- package/src/_modules/game/_models/seeded-random.control-model.spec.ts +290 -290
- package/src/_modules/game/_models/seeded-random.control-model.ts +311 -311
- package/src/_modules/game/index.ts +15 -15
- package/src/_modules/location/_collections/assets/country-codes-ISO-3166.json +3239 -3239
- package/src/_modules/location/_collections/assets/country-divisions-ISO-3166-all-list.json +19035 -19035
- package/src/_modules/location/_collections/assets/country-divisions-ISO-3166.json +4993 -4993
- package/src/_modules/location/_collections/assets/country-phone-codes.json +1203 -1203
- package/src/_modules/location/_collections/assets/country-subdivisions/afghanistan.json +137 -137
- package/src/_modules/location/_collections/assets/country-subdivisions/albania.json +49 -49
- package/src/_modules/location/_collections/assets/country-subdivisions/algeria.json +193 -193
- package/src/_modules/location/_collections/assets/country-subdivisions/andorra.json +29 -29
- package/src/_modules/location/_collections/assets/country-subdivisions/angola.json +73 -73
- package/src/_modules/location/_collections/assets/country-subdivisions/antigua-and-barbuda.json +33 -33
- package/src/_modules/location/_collections/assets/country-subdivisions/argentina.json +97 -97
- package/src/_modules/location/_collections/assets/country-subdivisions/armenia.json +45 -45
- package/src/_modules/location/_collections/assets/country-subdivisions/australia.json +33 -33
- package/src/_modules/location/_collections/assets/country-subdivisions/austria.json +37 -37
- package/src/_modules/location/_collections/assets/country-subdivisions/azerbaijan.json +5 -5
- package/src/_modules/location/_collections/assets/country-subdivisions/bahamas.json +125 -125
- package/src/_modules/location/_collections/assets/country-subdivisions/bahrain.json +21 -21
- package/src/_modules/location/_collections/assets/country-subdivisions/bangladesh.json +29 -29
- package/src/_modules/location/_collections/assets/country-subdivisions/barbados.json +45 -45
- package/src/_modules/location/_collections/assets/country-subdivisions/belarus.json +29 -29
- package/src/_modules/location/_collections/assets/country-subdivisions/belgium.json +13 -13
- package/src/_modules/location/_collections/assets/country-subdivisions/belize.json +25 -25
- package/src/_modules/location/_collections/assets/country-subdivisions/benin.json +49 -49
- package/src/_modules/location/_collections/assets/country-subdivisions/bhutan.json +81 -81
- package/src/_modules/location/_collections/assets/country-subdivisions/bolivia.json +37 -37
- package/src/_modules/location/_collections/assets/country-subdivisions/bosnia-and-herzegovina.json +13 -13
- package/src/_modules/location/_collections/assets/country-subdivisions/botswana.json +65 -65
- package/src/_modules/location/_collections/assets/country-subdivisions/brazil.json +109 -109
- package/src/_modules/location/_collections/assets/country-subdivisions/brunei-darussalam.json +17 -17
- package/src/_modules/location/_collections/assets/country-subdivisions/bulgaria.json +113 -113
- package/src/_modules/location/_collections/assets/country-subdivisions/burkina-faso.json +53 -53
- package/src/_modules/location/_collections/assets/country-subdivisions/burundi.json +69 -69
- package/src/_modules/location/_collections/assets/country-subdivisions/cambodia.json +97 -97
- package/src/_modules/location/_collections/assets/country-subdivisions/cameroon.json +41 -41
- package/src/_modules/location/_collections/assets/country-subdivisions/canada.json +79 -79
- package/src/_modules/location/_collections/assets/country-subdivisions/cape-verde.json +9 -9
- package/src/_modules/location/_collections/assets/country-subdivisions/central-african-republic.json +69 -69
- package/src/_modules/location/_collections/assets/country-subdivisions/chad.json +89 -89
- package/src/_modules/location/_collections/assets/country-subdivisions/chile.json +61 -61
- package/src/_modules/location/_collections/assets/country-subdivisions/china.json +205 -205
- package/src/_modules/location/_collections/assets/country-subdivisions/colombia.json +133 -133
- package/src/_modules/location/_collections/assets/country-subdivisions/comoros.json +13 -13
- package/src/_modules/location/_collections/assets/country-subdivisions/congo-the-democratic-republic-of-the.json +45 -45
- package/src/_modules/location/_collections/assets/country-subdivisions/congo.json +49 -49
- package/src/_modules/location/_collections/assets/country-subdivisions/costa-rica.json +29 -29
- package/src/_modules/location/_collections/assets/country-subdivisions/cote-d-ivoire-republic-of.json +77 -77
- package/src/_modules/location/_collections/assets/country-subdivisions/croatia.json +85 -85
- package/src/_modules/location/_collections/assets/country-subdivisions/cuba.json +65 -65
- package/src/_modules/location/_collections/assets/country-subdivisions/cyprus.json +25 -25
- package/src/_modules/location/_collections/assets/country-subdivisions/czech-republic.json +57 -57
- package/src/_modules/location/_collections/assets/country-subdivisions/denmark.json +21 -21
- package/src/_modules/location/_collections/assets/country-subdivisions/djibouti.json +25 -25
- package/src/_modules/location/_collections/assets/country-subdivisions/dominica.json +41 -41
- package/src/_modules/location/_collections/assets/country-subdivisions/dominican-republic.json +41 -41
- package/src/_modules/location/_collections/assets/country-subdivisions/ecuador.json +97 -97
- package/src/_modules/location/_collections/assets/country-subdivisions/egypt.json +117 -117
- package/src/_modules/location/_collections/assets/country-subdivisions/el-salvador.json +57 -57
- package/src/_modules/location/_collections/assets/country-subdivisions/equatorial-guinea.json +9 -9
- package/src/_modules/location/_collections/assets/country-subdivisions/eritrea.json +25 -25
- package/src/_modules/location/_collections/assets/country-subdivisions/estonia.json +61 -61
- package/src/_modules/location/_collections/assets/country-subdivisions/ethiopia.json +45 -45
- package/src/_modules/location/_collections/assets/country-subdivisions/fiji.json +21 -21
- package/src/_modules/location/_collections/assets/country-subdivisions/finland.json +77 -77
- package/src/_modules/location/_collections/assets/country-subdivisions/france.json +133 -133
- package/src/_modules/location/_collections/assets/country-subdivisions/gabon.json +37 -37
- package/src/_modules/location/_collections/assets/country-subdivisions/gambia.json +25 -25
- package/src/_modules/location/_collections/assets/country-subdivisions/georgia.json +49 -49
- package/src/_modules/location/_collections/assets/country-subdivisions/germany.json +65 -65
- package/src/_modules/location/_collections/assets/country-subdivisions/ghana.json +41 -41
- package/src/_modules/location/_collections/assets/country-subdivisions/greece.json +53 -53
- package/src/_modules/location/_collections/assets/country-subdivisions/greenland.json +17 -17
- package/src/_modules/location/_collections/assets/country-subdivisions/grenada.json +29 -29
- package/src/_modules/location/_collections/assets/country-subdivisions/guatemala.json +89 -89
- package/src/_modules/location/_collections/assets/country-subdivisions/guinea-bissau.json +13 -13
- package/src/_modules/location/_collections/assets/country-subdivisions/guinea.json +33 -33
- package/src/_modules/location/_collections/assets/country-subdivisions/guyana.json +41 -41
- package/src/_modules/location/_collections/assets/country-subdivisions/haiti.json +41 -41
- package/src/_modules/location/_collections/assets/country-subdivisions/honduras.json +73 -73
- package/src/_modules/location/_collections/assets/country-subdivisions/hong-kong.json +4 -4
- package/src/_modules/location/_collections/assets/country-subdivisions/hungary.json +173 -173
- package/src/_modules/location/_collections/assets/country-subdivisions/iceland.json +37 -37
- package/src/_modules/location/_collections/assets/country-subdivisions/india.json +181 -181
- package/src/_modules/location/_collections/assets/country-subdivisions/indonesia.json +29 -29
- package/src/_modules/location/_collections/assets/country-subdivisions/iran-islamic-republic-of.json +125 -125
- package/src/_modules/location/_collections/assets/country-subdivisions/iraq.json +73 -73
- package/src/_modules/location/_collections/assets/country-subdivisions/ireland.json +17 -17
- package/src/_modules/location/_collections/assets/country-subdivisions/israel.json +25 -25
- package/src/_modules/location/_collections/assets/country-subdivisions/italy.json +81 -81
- package/src/_modules/location/_collections/assets/country-subdivisions/jamaica.json +57 -57
- package/src/_modules/location/_collections/assets/country-subdivisions/japan.json +189 -189
- package/src/_modules/location/_collections/assets/country-subdivisions/jordan.json +49 -49
- package/src/_modules/location/_collections/assets/country-subdivisions/kazakhstan.json +65 -65
- package/src/_modules/location/_collections/assets/country-subdivisions/kenya.json +33 -33
- package/src/_modules/location/_collections/assets/country-subdivisions/kiribati.json +13 -13
- package/src/_modules/location/_collections/assets/country-subdivisions/korea-democratic-people-s-republic-of.json +45 -45
- package/src/_modules/location/_collections/assets/country-subdivisions/korea-republic-of.json +69 -69
- package/src/_modules/location/_collections/assets/country-subdivisions/kuwait.json +25 -25
- package/src/_modules/location/_collections/assets/country-subdivisions/kyrgyzstan.json +33 -33
- package/src/_modules/location/_collections/assets/country-subdivisions/lao-people-s-democratic-republic.json +73 -73
- package/src/_modules/location/_collections/assets/country-subdivisions/latvia.json +477 -477
- package/src/_modules/location/_collections/assets/country-subdivisions/lebanon.json +33 -33
- package/src/_modules/location/_collections/assets/country-subdivisions/lesotho.json +41 -41
- package/src/_modules/location/_collections/assets/country-subdivisions/liberia.json +61 -61
- package/src/_modules/location/_collections/assets/country-subdivisions/libyan-arab-jamahiriya.json +89 -89
- package/src/_modules/location/_collections/assets/country-subdivisions/liechtenstein.json +45 -45
- package/src/_modules/location/_collections/assets/country-subdivisions/lithuania.json +41 -41
- package/src/_modules/location/_collections/assets/country-subdivisions/luxembourg.json +13 -13
- package/src/_modules/location/_collections/assets/country-subdivisions/macedonia-the-former-yugoslav-republic-of.json +337 -337
- package/src/_modules/location/_collections/assets/country-subdivisions/madagascar.json +25 -25
- package/src/_modules/location/_collections/assets/country-subdivisions/malawi.json +13 -13
- package/src/_modules/location/_collections/assets/country-subdivisions/malaysia.json +81 -81
- package/src/_modules/location/_collections/assets/country-subdivisions/maldives.json +33 -33
- package/src/_modules/location/_collections/assets/country-subdivisions/mali.json +37 -37
- package/src/_modules/location/_collections/assets/country-subdivisions/malta.json +273 -273
- package/src/_modules/location/_collections/assets/country-subdivisions/marshall-islands.json +9 -9
- package/src/_modules/location/_collections/assets/country-subdivisions/mauritania.json +53 -53
- package/src/_modules/location/_collections/assets/country-subdivisions/mauritius.json +69 -69
- package/src/_modules/location/_collections/assets/country-subdivisions/mexico.json +161 -161
- package/src/_modules/location/_collections/assets/country-subdivisions/micronesia-federated-states-of.json +17 -17
- package/src/_modules/location/_collections/assets/country-subdivisions/moldova-republic-of.json +149 -149
- package/src/_modules/location/_collections/assets/country-subdivisions/monaco.json +69 -69
- package/src/_modules/location/_collections/assets/country-subdivisions/mongolia.json +89 -89
- package/src/_modules/location/_collections/assets/country-subdivisions/montenegro.json +93 -93
- package/src/_modules/location/_collections/assets/country-subdivisions/morocco.json +65 -65
- package/src/_modules/location/_collections/assets/country-subdivisions/mozambique.json +45 -45
- package/src/_modules/location/_collections/assets/country-subdivisions/myanmar.json +57 -57
- package/src/_modules/location/_collections/assets/country-subdivisions/namibia.json +57 -57
- package/src/_modules/location/_collections/assets/country-subdivisions/nauru.json +57 -57
- package/src/_modules/location/_collections/assets/country-subdivisions/nepal.json +21 -21
- package/src/_modules/location/_collections/assets/country-subdivisions/netherlands.json +91 -91
- package/src/_modules/location/_collections/assets/country-subdivisions/new-zealand.json +111 -111
- package/src/_modules/location/_collections/assets/country-subdivisions/nicaragua.json +69 -69
- package/src/_modules/location/_collections/assets/country-subdivisions/niger.json +33 -33
- package/src/_modules/location/_collections/assets/country-subdivisions/nigeria.json +149 -149
- package/src/_modules/location/_collections/assets/country-subdivisions/norway.json +85 -85
- package/src/_modules/location/_collections/assets/country-subdivisions/oman.json +37 -37
- package/src/_modules/location/_collections/assets/country-subdivisions/pakistan.json +33 -33
- package/src/_modules/location/_collections/assets/country-subdivisions/palau.json +65 -65
- package/src/_modules/location/_collections/assets/country-subdivisions/palestinian-territory-occupied.json +65 -65
- package/src/_modules/location/_collections/assets/country-subdivisions/panama.json +53 -53
- package/src/_modules/location/_collections/assets/country-subdivisions/papua-new-guinea.json +81 -81
- package/src/_modules/location/_collections/assets/country-subdivisions/paraguay.json +73 -73
- package/src/_modules/location/_collections/assets/country-subdivisions/peru.json +105 -105
- package/src/_modules/location/_collections/assets/country-subdivisions/philippines.json +69 -69
- package/src/_modules/location/_collections/assets/country-subdivisions/poland.json +65 -65
- package/src/_modules/location/_collections/assets/country-subdivisions/portugal.json +81 -81
- package/src/_modules/location/_collections/assets/country-subdivisions/qatar.json +29 -29
- package/src/_modules/location/_collections/assets/country-subdivisions/romania.json +169 -169
- package/src/_modules/location/_collections/assets/country-subdivisions/russian-federation.json +499 -499
- package/src/_modules/location/_collections/assets/country-subdivisions/rwanda.json +21 -21
- package/src/_modules/location/_collections/assets/country-subdivisions/saint-helena-ascension-and-tristan-da-cunha.json +13 -13
- package/src/_modules/location/_collections/assets/country-subdivisions/saint-kitts-and-nevis.json +9 -9
- package/src/_modules/location/_collections/assets/country-subdivisions/saint-lucia.json +45 -45
- package/src/_modules/location/_collections/assets/country-subdivisions/saint-vincent-and-the-grenadines.json +25 -25
- package/src/_modules/location/_collections/assets/country-subdivisions/samoa.json +45 -45
- package/src/_modules/location/_collections/assets/country-subdivisions/san-marino.json +37 -37
- package/src/_modules/location/_collections/assets/country-subdivisions/sao-tome-and-principe.json +9 -9
- package/src/_modules/location/_collections/assets/country-subdivisions/saudi-arabia.json +53 -53
- package/src/_modules/location/_collections/assets/country-subdivisions/senegal.json +57 -57
- package/src/_modules/location/_collections/assets/country-subdivisions/serbia.json +9 -9
- package/src/_modules/location/_collections/assets/country-subdivisions/seychelles.json +101 -101
- package/src/_modules/location/_collections/assets/country-subdivisions/sierra-leone.json +17 -17
- package/src/_modules/location/_collections/assets/country-subdivisions/singapore.json +21 -21
- package/src/_modules/location/_collections/assets/country-subdivisions/slovakia.json +33 -33
- package/src/_modules/location/_collections/assets/country-subdivisions/slovenia.json +841 -841
- package/src/_modules/location/_collections/assets/country-subdivisions/solomon-islands.json +41 -41
- package/src/_modules/location/_collections/assets/country-subdivisions/somalia.json +73 -73
- package/src/_modules/location/_collections/assets/country-subdivisions/south-africa.json +37 -37
- package/src/_modules/location/_collections/assets/country-subdivisions/south-sudan.json +41 -41
- package/src/_modules/location/_collections/assets/country-subdivisions/spain.json +346 -346
- package/src/_modules/location/_collections/assets/country-subdivisions/sri-lanka.json +37 -37
- package/src/_modules/location/_collections/assets/country-subdivisions/sudan.json +69 -69
- package/src/_modules/location/_collections/assets/country-subdivisions/suriname.json +41 -41
- package/src/_modules/location/_collections/assets/country-subdivisions/swaziland.json +17 -17
- package/src/_modules/location/_collections/assets/country-subdivisions/sweden.json +85 -85
- package/src/_modules/location/_collections/assets/country-subdivisions/switzerland.json +105 -105
- package/src/_modules/location/_collections/assets/country-subdivisions/syrian-arab-republic.json +57 -57
- package/src/_modules/location/_collections/assets/country-subdivisions/taiwan-province-of-china.json +93 -93
- package/src/_modules/location/_collections/assets/country-subdivisions/tajikistan.json +17 -17
- package/src/_modules/location/_collections/assets/country-subdivisions/tanzania-united-republic-of.json +105 -105
- package/src/_modules/location/_collections/assets/country-subdivisions/thailand.json +313 -313
- package/src/_modules/location/_collections/assets/country-subdivisions/timor-leste.json +53 -53
- package/src/_modules/location/_collections/assets/country-subdivisions/togo.json +21 -21
- package/src/_modules/location/_collections/assets/country-subdivisions/tonga.json +21 -21
- package/src/_modules/location/_collections/assets/country-subdivisions/trinidad-and-tobago.json +65 -65
- package/src/_modules/location/_collections/assets/country-subdivisions/tunisia.json +97 -97
- package/src/_modules/location/_collections/assets/country-subdivisions/turkey.json +325 -325
- package/src/_modules/location/_collections/assets/country-subdivisions/turkmenistan.json +25 -25
- package/src/_modules/location/_collections/assets/country-subdivisions/tuvalu.json +33 -33
- package/src/_modules/location/_collections/assets/country-subdivisions/uganda.json +17 -17
- package/src/_modules/location/_collections/assets/country-subdivisions/ukraine.json +109 -109
- package/src/_modules/location/_collections/assets/country-subdivisions/united-arab-emirates.json +29 -29
- package/src/_modules/location/_collections/assets/country-subdivisions/united-kingdom.json +1196 -1196
- package/src/_modules/location/_collections/assets/country-subdivisions/united-states-minor-outlying-islands.json +37 -37
- package/src/_modules/location/_collections/assets/country-subdivisions/united-states.json +286 -286
- package/src/_modules/location/_collections/assets/country-subdivisions/uruguay.json +77 -77
- package/src/_modules/location/_collections/assets/country-subdivisions/uzbekistan.json +57 -57
- package/src/_modules/location/_collections/assets/country-subdivisions/vanuatu.json +25 -25
- package/src/_modules/location/_collections/assets/country-subdivisions/venezuela.json +101 -101
- package/src/_modules/location/_collections/assets/country-subdivisions/viet-nam.json +257 -257
- package/src/_modules/location/_collections/assets/country-subdivisions/yemen.json +85 -85
- package/src/_modules/location/_collections/assets/country-subdivisions/zambia.json +37 -37
- package/src/_modules/location/_collections/assets/country-subdivisions/zimbabwe.json +41 -41
- package/src/_modules/location/_collections/loc-country-divisions.const.ts +10 -10
- package/src/_modules/location/_collections/loc-country-isos.const.ts +8 -8
- package/src/_modules/location/_collections/loc-regions.util.spec.ts +61 -61
- package/src/_modules/location/_collections/loc-regions.util.ts +137 -137
- package/src/_modules/location/_collections/loc.util.spec.ts +52 -52
- package/src/_modules/location/_collections/loc.util.ts +74 -74
- package/src/_modules/location/_enums/loc-region.enum.ts +14 -14
- package/src/_modules/location/_enums/loc-sub-region.enum.ts +31 -31
- package/src/_modules/location/_enums/loc-subdivision-region-type.enum.ts +47 -47
- package/src/_modules/location/_models/loc-coordinates.interface.ts +7 -7
- package/src/_modules/location/_models/loc-country-division.interface.ts +8 -8
- package/src/_modules/location/_models/loc-country-iso.interface.ts +23 -23
- package/src/_modules/location/_models/loc-country-phone-code.interface.ts +9 -9
- package/src/_modules/location/_models/loc-division-collection.interface.ts +12 -12
- package/src/_modules/location/_models/loc-division-region-data.interface.ts +9 -9
- package/src/_modules/location/_models/loc-geo-ip-location.interface.ts +27 -27
- package/src/_modules/location/index.ts +22 -22
- package/src/_modules/messaging/README.md +279 -279
- package/src/_modules/messaging/_collections/msg-module-settings.const.ts +46 -46
- package/src/_modules/messaging/_enums/msg-attachment-type.enum.ts +26 -26
- package/src/_modules/messaging/_enums/msg-conversation-type.enum.ts +20 -20
- package/src/_modules/messaging/_enums/msg-delivery-status.enum.ts +17 -17
- package/src/_modules/messaging/_enums/msg-event-key.enum.ts +31 -31
- package/src/_modules/messaging/_enums/msg-participant-role.enum.ts +20 -20
- package/src/_modules/messaging/_enums/msg-provider-type.enum.ts +7 -7
- package/src/_modules/messaging/_enums/msg-status.enum.ts +26 -26
- package/src/_modules/messaging/_enums/msg-type.enum.ts +23 -23
- package/src/_modules/messaging/_models/msg-attachment.interface.ts +46 -46
- package/src/_modules/messaging/_models/msg-conversation.data-model.spec.ts +69 -69
- package/src/_modules/messaging/_models/msg-conversation.data-model.ts +96 -96
- package/src/_modules/messaging/_models/msg-mention.interface.ts +29 -29
- package/src/_modules/messaging/_models/msg-message.data-model.spec.ts +79 -79
- package/src/_modules/messaging/_models/msg-message.data-model.ts +127 -127
- package/src/_modules/messaging/_models/msg-participant.interface.ts +46 -46
- package/src/_modules/messaging/_models/msg-reaction.interface.ts +20 -20
- package/src/_modules/messaging/_models/msg-thread-info.interface.ts +35 -35
- package/src/_modules/messaging/_modules/agent/_enums/agt-process-step-type.enum.ts +35 -35
- package/src/_modules/messaging/_modules/agent/_enums/agt-tool-status.enum.ts +23 -23
- package/src/_modules/messaging/_modules/agent/_models/agt-process-step.interface.ts +55 -55
- package/src/_modules/messaging/_modules/agent/_models/agt-reasoning-info.interface.ts +26 -26
- package/src/_modules/messaging/_modules/agent/_models/agt-tool-usage.interface.ts +37 -37
- package/src/_modules/messaging/_modules/agent/index.ts +8 -8
- package/src/_modules/messaging/index.ts +28 -28
- package/src/_modules/ngx-models/_collections/angular-placeholders.ts +34 -34
- package/src/_modules/ngx-models/_collections/button-new-style-settings-presets.const.ts +181 -181
- package/src/_modules/ngx-models/_collections/dynamo-global.settings.spec.ts +74 -74
- package/src/_modules/ngx-models/_collections/dynamo-global.settings.ts +103 -103
- package/src/_modules/ngx-models/_enums/button-new/button-new-border-radius.enum.ts +16 -16
- package/src/_modules/ngx-models/_enums/button-new/button-new-icon-style-type.enum.ts +14 -14
- package/src/_modules/ngx-models/_enums/button-new/button-new-size.enum.ts +16 -16
- package/src/_modules/ngx-models/_enums/button-new/button-new-style-type.enum.ts +18 -18
- package/src/_modules/ngx-models/_enums/button-type.enum.ts +36 -36
- package/src/_modules/ngx-models/_enums/checkbox-label-position.enum.ts +8 -8
- package/src/_modules/ngx-models/_enums/container-type.enum.ts +11 -11
- package/src/_modules/ngx-models/_enums/errors/error-level.enum.ts +13 -13
- package/src/_modules/ngx-models/_enums/errors/error-notification-color.enum.ts +13 -13
- package/src/_modules/ngx-models/_enums/errors/error-ui-mode.enum.ts +13 -13
- package/src/_modules/ngx-models/_enums/field-appearance.enum.ts +14 -14
- package/src/_modules/ngx-models/_enums/field-type.enum.ts +52 -52
- package/src/_modules/ngx-models/_enums/file-type.enum.ts +12 -12
- package/src/_modules/ngx-models/_enums/flex/flex-layout-align.enum.ts +21 -21
- package/src/_modules/ngx-models/_enums/flex/flex-layout.enum.ts +5 -5
- package/src/_modules/ngx-models/_enums/form-access.enum.ts +9 -9
- package/src/_modules/ngx-models/_enums/form-reset-data.enum.ts +12 -12
- package/src/_modules/ngx-models/_enums/form-store-on.enum.ts +9 -9
- package/src/_modules/ngx-models/_enums/forms-new/field-new-validator-type.enum.ts +20 -20
- package/src/_modules/ngx-models/_enums/frames/header-item-type.enum.ts +15 -15
- package/src/_modules/ngx-models/_enums/frames/header-position.enum.ts +10 -10
- package/src/_modules/ngx-models/_enums/frames/side-nav-badge-color.enum.ts +13 -13
- package/src/_modules/ngx-models/_enums/html/input-types.enum.ts +27 -27
- package/src/_modules/ngx-models/_enums/material-color.enum.ts +16 -16
- package/src/_modules/ngx-models/_enums/material-tooltip-position.enum.ts +16 -16
- package/src/_modules/ngx-models/_enums/preconfigured-field-type.enum.ts +8 -8
- package/src/_modules/ngx-models/_enums/storage-type.enum.ts +15 -15
- package/src/_modules/ngx-models/_enums/validator-type.enum.ts +9 -9
- package/src/_modules/ngx-models/_enums/voice/audio-mime-type.enum.ts +14 -14
- package/src/_modules/ngx-models/_enums/voice/voice-provider-type.enum.ts +26 -26
- package/src/_modules/ngx-models/_enums/voice/voice-recorder-state.enum.ts +20 -20
- package/src/_modules/ngx-models/_models/control-models/button-new-style-settings.control-model.ts +37 -37
- package/src/_modules/ngx-models/_models/control-models/button-params.control-model.spec.ts +70 -70
- package/src/_modules/ngx-models/_models/control-models/button-params.control-model.ts +332 -332
- package/src/_modules/ngx-models/_models/control-models/chat/chat-column-layout-settings.control-model.ts +28 -28
- package/src/_modules/ngx-models/_models/control-models/data-handler-settings.control-model.spec.ts +90 -90
- package/src/_modules/ngx-models/_models/control-models/data-handler-settings.control-model.ts +134 -134
- package/src/_modules/ngx-models/_models/control-models/data-handler.control-model.ts +529 -529
- package/src/_modules/ngx-models/_models/control-models/errors/error-notification.control-model.ts +52 -52
- package/src/_modules/ngx-models/_models/control-models/errors/error-settings.control-model.ts +34 -34
- package/src/_modules/ngx-models/_models/control-models/errors/errors-pojo.spec.ts +86 -86
- package/src/_modules/ngx-models/_models/control-models/errors/errors-settings.control-model.ts +52 -52
- package/src/_modules/ngx-models/_models/control-models/field-settings.control-model.spec.ts +109 -109
- package/src/_modules/ngx-models/_models/control-models/field-settings.control-model.ts +133 -133
- package/src/_modules/ngx-models/_models/control-models/form-settings.control-model.spec.ts +109 -109
- package/src/_modules/ngx-models/_models/control-models/form-settings.control-model.ts +160 -160
- package/src/_modules/ngx-models/_models/control-models/forms-new/checkbox-field-new-settings.control-model.ts +25 -25
- package/src/_modules/ngx-models/_models/control-models/forms-new/date-field-new-settings.control-model.ts +26 -26
- package/src/_modules/ngx-models/_models/control-models/forms-new/date-range-field-new-settings.control-model.ts +42 -42
- package/src/_modules/ngx-models/_models/control-models/forms-new/datetime-field-new-settings.control-model.ts +35 -35
- package/src/_modules/ngx-models/_models/control-models/forms-new/datetime-range-field-new-settings.control-model.ts +35 -35
- package/src/_modules/ngx-models/_models/control-models/forms-new/field-new-settings.control-model.ts +85 -85
- package/src/_modules/ngx-models/_models/control-models/forms-new/field-new-types.ts +42 -42
- package/src/_modules/ngx-models/_models/control-models/forms-new/form-new-settings.control-model.ts +40 -40
- package/src/_modules/ngx-models/_models/control-models/forms-new/forms-new.spec.ts +179 -179
- package/src/_modules/ngx-models/_models/control-models/forms-new/index.ts +20 -20
- package/src/_modules/ngx-models/_models/control-models/forms-new/multiselect-field-new-settings.control-model.ts +27 -27
- package/src/_modules/ngx-models/_models/control-models/forms-new/number-field-new-settings.control-model.ts +24 -24
- package/src/_modules/ngx-models/_models/control-models/forms-new/password-field-new-settings.control-model.ts +35 -35
- package/src/_modules/ngx-models/_models/control-models/forms-new/radio-select-field-new-settings.control-model.ts +35 -35
- package/src/_modules/ngx-models/_models/control-models/forms-new/select-field-new-settings.control-model.ts +46 -46
- package/src/_modules/ngx-models/_models/control-models/forms-new/slider-field-new-settings.control-model.ts +37 -37
- package/src/_modules/ngx-models/_models/control-models/forms-new/slider-range-field-new-settings.control-model.ts +45 -45
- package/src/_modules/ngx-models/_models/control-models/forms-new/text-field-new-settings.control-model.ts +30 -30
- package/src/_modules/ngx-models/_models/control-models/forms-new/textarea-field-new-settings.control-model.ts +22 -22
- package/src/_modules/ngx-models/_models/control-models/frames/frames-pojo.spec.ts +108 -108
- package/src/_modules/ngx-models/_models/control-models/frames/header-item-settings.control-model.ts +52 -52
- package/src/_modules/ngx-models/_models/control-models/frames/main-frame-settings.control-model.ts +40 -40
- package/src/_modules/ngx-models/_models/control-models/frames/side-nav-item-settings.control-model.ts +55 -55
- package/src/_modules/ngx-models/_models/control-models/frames/side-nav-settings.control-model.ts +30 -30
- package/src/_modules/ngx-models/_models/control-models/select.control-model.spec.ts +45 -45
- package/src/_modules/ngx-models/_models/control-models/select.control-model.ts +28 -28
- package/src/_modules/ngx-models/_models/control-models/voice/voice-pojo.spec.ts +111 -111
- package/src/_modules/ngx-models/_models/control-models/voice/voice-providers-settings.control-model.ts +74 -74
- package/src/_modules/ngx-models/_models/control-models/voice/voice-record-button-settings.control-model.ts +42 -42
- package/src/_modules/ngx-models/_models/control-models/voice/voice-recorder-settings.control-model.ts +37 -37
- package/src/_modules/ngx-models/_models/interfaces/button-new-settings.interface.ts +74 -74
- package/src/_modules/ngx-models/_models/interfaces/confirm-settings.interface.ts +20 -20
- package/src/_modules/ngx-models/_models/interfaces/global-settings.interface.ts +67 -67
- package/src/_modules/ngx-models/_models/interfaces/select-options-custom-constructor.interface.ts +40 -40
- package/src/_modules/ngx-models/_models/interfaces/storage.service.spec.ts +18 -18
- package/src/_modules/ngx-models/_models/interfaces/storage.service.ts +40 -40
- package/src/_modules/ngx-models/_models/interfaces/voice/speak-options.interface.ts +19 -19
- package/src/_modules/ngx-models/_models/interfaces/voice/speak-result.interface.ts +14 -14
- package/src/_modules/ngx-models/_models/interfaces/voice/transcribe-options.interface.ts +14 -14
- package/src/_modules/ngx-models/_models/interfaces/voice/transcribe-result.interface.ts +15 -15
- package/src/_modules/ngx-models/_models/interfaces/voice/voice-profile.interface.ts +18 -18
- package/src/_modules/ngx-models/_models/interfaces/voice/voice-provider-init.interface.ts +21 -21
- package/src/_modules/ngx-models/_utils/shared.service.spec.ts +7 -7
- package/src/_modules/ngx-models/_utils/shared.service.ts +541 -541
- package/src/_modules/ngx-models/index.ts +110 -110
- package/src/_modules/pipe/_collections/pip-transforms.const.ts +42 -42
- package/src/_modules/pipe/_collections/utils/pip-country-pipe.util.spec.ts +47 -47
- package/src/_modules/pipe/_collections/utils/pip-country-pipe.util.ts +41 -41
- package/src/_modules/pipe/_collections/utils/pip-custom-pipe.util.spec.ts +39 -39
- package/src/_modules/pipe/_collections/utils/pip-custom-pipe.util.ts +30 -30
- package/src/_modules/pipe/_collections/utils/pip-division-pipe.util.spec.ts +41 -41
- package/src/_modules/pipe/_collections/utils/pip-division-pipe.util.ts +36 -36
- package/src/_modules/pipe/_collections/utils/pip-json-pipe.util.spec.ts +62 -62
- package/src/_modules/pipe/_collections/utils/pip-json-pipe.util.ts +17 -17
- package/src/_modules/pipe/_collections/utils/pip-list-pipe.util.spec.ts +34 -34
- package/src/_modules/pipe/_collections/utils/pip-list-pipe.util.ts +25 -25
- package/src/_modules/pipe/_collections/utils/pip-multi-pipe-pipe.util.spec.ts +67 -67
- package/src/_modules/pipe/_collections/utils/pip-multi-pipe-pipe.util.ts +226 -226
- package/src/_modules/pipe/_collections/utils/pip-obj-key-pipe.util.spec.ts +28 -28
- package/src/_modules/pipe/_collections/utils/pip-obj-key-pipe.util.ts +21 -21
- package/src/_modules/pipe/_collections/utils/pip-range-pipe.util.spec.ts +59 -59
- package/src/_modules/pipe/_collections/utils/pip-range-pipe.util.ts +106 -106
- package/src/_modules/pipe/_collections/utils/pip-region-pipe.util.spec.ts +31 -31
- package/src/_modules/pipe/_collections/utils/pip-region-pipe.util.ts +35 -35
- package/src/_modules/pipe/_collections/utils/pip-replace-pipe.util.spec.ts +44 -44
- package/src/_modules/pipe/_collections/utils/pip-replace-pipe.util.ts +23 -23
- package/src/_modules/pipe/_collections/utils/pip-slider-pipe.util.spec.ts +21 -21
- package/src/_modules/pipe/_collections/utils/pip-slider-pipe.util.ts +33 -33
- package/src/_modules/pipe/_collections/utils/pip-smart-replace-pipe.util.spec.ts +62 -62
- package/src/_modules/pipe/_collections/utils/pip-smart-replace-pipe.util.ts +80 -80
- package/src/_modules/pipe/_enums/pip-range-pipe-setting.enum.ts +15 -15
- package/src/_modules/pipe/_enums/pip.enum.ts +65 -65
- package/src/_modules/pipe/_models/pip-multi-pipe-settings.type.ts +8 -8
- package/src/_modules/pipe/_models/pip-transforms.interface.ts +30 -30
- package/src/_modules/pipe/index.ts +30 -30
- package/src/_modules/security/_collections/stored-secret.util.spec.ts +81 -81
- package/src/_modules/security/_collections/stored-secret.util.ts +96 -96
- package/src/_modules/security/_models/stored-secret.control-model.ts +55 -55
- package/src/_modules/security/index.ts +9 -9
- package/src/_modules/socket/_enums/sck-event-key.enum.ts +21 -21
- package/src/_modules/socket/_models/sck-client-params.control-model.spec.ts +67 -67
- package/src/_modules/socket/_models/sck-client-params.control-model.ts +50 -50
- package/src/_modules/socket/_models/sck-socket-event.control-model.spec.ts +89 -66
- package/src/_modules/socket/_models/sck-socket-event.control-model.ts +185 -172
- package/src/_modules/socket/_services/sck-client.service-base.spec.ts +99 -99
- package/src/_modules/socket/_services/sck-client.service-base.ts +353 -353
- package/src/_modules/socket/index.ts +14 -14
- package/src/_modules/state-machine/_models/state-machine-config.interface.ts +19 -19
- package/src/_modules/state-machine/_models/state-machine-event.interface.ts +25 -25
- package/src/_modules/state-machine/_models/state-machine.control-model.spec.ts +314 -314
- package/src/_modules/state-machine/_models/state-machine.control-model.ts +298 -298
- package/src/_modules/state-machine/_models/state-transition-result.interface.ts +53 -53
- package/src/_modules/state-machine/_models/state-transition.interface.ts +30 -30
- package/src/_modules/state-machine/index.ts +6 -6
- package/src/_modules/test/_collections/tst-module-settings.const.ts +67 -67
- package/src/_modules/test/index.ts +5 -5
- package/src/_modules/usage/_collections/usg-module-settings.const.ts +33 -33
- package/src/_modules/usage/_models/usg-action.control-model.spec.ts +27 -27
- package/src/_modules/usage/_models/usg-action.control-model.ts +28 -28
- package/src/_modules/usage/_models/usg-daily-usage-data.control-model.spec.ts +36 -36
- package/src/_modules/usage/_models/usg-daily-usage-data.control-model.ts +35 -35
- package/src/_modules/usage/_models/usg-data.control-model.spec.ts +41 -41
- package/src/_modules/usage/_models/usg-data.control-model.ts +35 -35
- package/src/_modules/usage/_models/usg-session.data-model.spec.ts +97 -97
- package/src/_modules/usage/_models/usg-session.data-model.ts +72 -72
- package/src/_modules/usage/index.ts +11 -11
- package/src/index.ts +104 -104
- package/tsconfig.app.json +12 -12
- package/tsconfig.json +31 -31
- package/tsconfig.test.json +16 -16
- package/tslint.json +153 -153
|
@@ -1,331 +1,331 @@
|
|
|
1
|
-
import * as CryptoJS from 'crypto-js';
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
DyFM_Error,
|
|
5
|
-
DyFM_Error_Settings
|
|
6
|
-
} from '../../../_models/control-models/error.control-model';
|
|
7
|
-
import { DyFM_Object } from '../../../_collections/utils/object.util';
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Configuration options for encryption/decryption
|
|
12
|
-
*/
|
|
13
|
-
export interface CryptoConfig {
|
|
14
|
-
ivLength?: number;
|
|
15
|
-
saltLength?: number;
|
|
16
|
-
keyIterations?: number;
|
|
17
|
-
keySize?: number;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
// Compact: about 60–80 character tokens, not 200+
|
|
21
|
-
// Non-standard: hard to reverse-engineer
|
|
22
|
-
// Usable in cookies, headers, URLs
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* A utility class for stable encryption and decryption of data
|
|
26
|
-
* Uses AES-256-CBC with deterministic IV and salt for consistent results across systems
|
|
27
|
-
* Prioritizes reliability and cross-platform compatibility over security
|
|
28
|
-
*
|
|
29
|
-
* @important DETERMINISTIC ENCRYPTION: This implementation produces identical encrypted
|
|
30
|
-
* output for identical input data and key across different systems and multiple calls.
|
|
31
|
-
* The same input will ALWAYS generate the same encrypted string on any platform.
|
|
32
|
-
*
|
|
33
|
-
* @warning SECURITY NOTICE: This deterministic behavior is intentional for cross-platform
|
|
34
|
-
* compatibility but reduces security. Identical inputs produce identical outputs, which
|
|
35
|
-
* can be exploited for pattern analysis attacks. Use only when consistency across
|
|
36
|
-
* systems is more important than cryptographic security.
|
|
37
|
-
*/
|
|
38
|
-
export class DyFM_Crypto {
|
|
39
|
-
private static readonly DEFAULT_CONFIG: Required<CryptoConfig> = {
|
|
40
|
-
ivLength: 16, // 128 bits
|
|
41
|
-
saltLength: 16, // 128 bits
|
|
42
|
-
keyIterations: 1000, // Reduced for better performance and stability
|
|
43
|
-
keySize: 8, // 256 bits (8 * 32)
|
|
44
|
-
};
|
|
45
|
-
private static readonly defaultErrorUserMsg =
|
|
46
|
-
`We encountered an unhandled Authentication Error, ` +
|
|
47
|
-
`\nplease contact the responsible development team.`;
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Validates the input data and key
|
|
51
|
-
* @throws {DyFM_Error} if validation fails
|
|
52
|
-
*/
|
|
53
|
-
private static validateInput(data: any, key: string): void {
|
|
54
|
-
if (!key || typeof key !== 'string' || key.trim().length === 0) {
|
|
55
|
-
throw new DyFM_Error({
|
|
56
|
-
...this.getDefaultErrorSettings('validateInput'),
|
|
57
|
-
errorCode: 'DyFM-CRY-IKY',
|
|
58
|
-
message: 'Invalid encryption key',
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// Allow null values but not undefined
|
|
63
|
-
if (data === undefined) {
|
|
64
|
-
throw new DyFM_Error({
|
|
65
|
-
...this.getDefaultErrorSettings('validateInput'),
|
|
66
|
-
errorCode: 'DyFM-CRY-IDT',
|
|
67
|
-
message: `Invalid data to encrypt/decrypt (is "${data}")`,
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Generates a deterministic IV based on the input data and key
|
|
74
|
-
* Uses MD5 for better stability across different CryptoJS versions
|
|
75
|
-
*
|
|
76
|
-
* @important DETERMINISTIC: Same data + key will ALWAYS produce the same IV
|
|
77
|
-
* across all systems and CryptoJS versions for consistent encryption results
|
|
78
|
-
*/
|
|
79
|
-
private static generateIV(data: string, key: string, config: Required<CryptoConfig>): CryptoJS.lib.WordArray {
|
|
80
|
-
// Use MD5 for better stability - simpler hash algorithm, more consistent across versions
|
|
81
|
-
const combined = data + key;
|
|
82
|
-
const hash = CryptoJS.MD5(combined);
|
|
83
|
-
|
|
84
|
-
// Use slice(0, 4) for 16 bytes - more stable than division operations
|
|
85
|
-
return CryptoJS.lib.WordArray.create(hash.words.slice(0, 4));
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Generates a deterministic salt based on the input data and key
|
|
90
|
-
* Uses MD5 for better stability across different CryptoJS versions
|
|
91
|
-
*
|
|
92
|
-
* @important DETERMINISTIC: Same data + key will ALWAYS produce the same salt
|
|
93
|
-
* across all systems and CryptoJS versions for consistent encryption results
|
|
94
|
-
*/
|
|
95
|
-
private static generateSalt(data: string, key: string, config: Required<CryptoConfig>): CryptoJS.lib.WordArray {
|
|
96
|
-
// Use MD5 for better stability - simpler hash algorithm, more consistent across versions
|
|
97
|
-
const combined = key + data;
|
|
98
|
-
const hash = CryptoJS.MD5(combined);
|
|
99
|
-
|
|
100
|
-
// Use slice(0, 4) for 16 bytes - more stable than division operations
|
|
101
|
-
return CryptoJS.lib.WordArray.create(hash.words.slice(0, 4));
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* Derives a key using PBKDF2 with reduced iterations for stability
|
|
106
|
-
*/
|
|
107
|
-
private static deriveKey(key: string, salt: CryptoJS.lib.WordArray, config: Required<CryptoConfig>): CryptoJS.lib.WordArray {
|
|
108
|
-
return CryptoJS.PBKDF2(key, salt, {
|
|
109
|
-
keySize: config.keySize,
|
|
110
|
-
iterations: config.keyIterations,
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* Safely serializes data to JSON
|
|
116
|
-
*/
|
|
117
|
-
private static safeSerialize<T>(data: T): string {
|
|
118
|
-
try {
|
|
119
|
-
// Always use JSON.stringify to ensure proper serialization/deserialization
|
|
120
|
-
return JSON.stringify(data);
|
|
121
|
-
} catch (error) {
|
|
122
|
-
throw new DyFM_Error({
|
|
123
|
-
...this.getDefaultErrorSettings('safeSerialize', error),
|
|
124
|
-
errorCode: 'DyFM-CRY-SER',
|
|
125
|
-
message: 'Failed to serialize data',
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* Safely deserializes JSON data
|
|
132
|
-
*/
|
|
133
|
-
private static safeDeserialize<T>(data: string): T {
|
|
134
|
-
try {
|
|
135
|
-
//let parsed = JSON.parse(data);
|
|
136
|
-
let parsed = DyFM_Object.failableSafeParseJSON(data);
|
|
137
|
-
|
|
138
|
-
// Handle double-stringified JSON (or more levels of stringification)
|
|
139
|
-
let maxAttempts = 3; // Prevent infinite loops
|
|
140
|
-
|
|
141
|
-
while (typeof parsed === 'string' && maxAttempts > 0) {
|
|
142
|
-
try {
|
|
143
|
-
//const nextParsed = JSON.parse(parsed);
|
|
144
|
-
const nextParsed = DyFM_Object.failableSafeParseJSON(parsed);
|
|
145
|
-
|
|
146
|
-
// Only continue if parsing actually changed the result
|
|
147
|
-
if (nextParsed !== parsed) {
|
|
148
|
-
parsed = nextParsed;
|
|
149
|
-
maxAttempts--;
|
|
150
|
-
} else {
|
|
151
|
-
break;
|
|
152
|
-
}
|
|
153
|
-
} catch {
|
|
154
|
-
// If parse fails, return current state
|
|
155
|
-
break;
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
// Handle primitive values
|
|
160
|
-
/* if (typeof parsed === 'string' || typeof parsed === 'number' || typeof parsed === 'boolean') {
|
|
161
|
-
return parsed as T;
|
|
162
|
-
} */
|
|
163
|
-
|
|
164
|
-
return parsed as T;
|
|
165
|
-
} catch (error) {
|
|
166
|
-
throw new DyFM_Error({
|
|
167
|
-
...this.getDefaultErrorSettings('safeDeserialize', error),
|
|
168
|
-
errorCode: 'DyFM-CRY-DES',
|
|
169
|
-
message: 'Failed to deserialize data',
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
/**
|
|
175
|
-
* Encrypts data using AES-256-CBC with deterministic IV and salt
|
|
176
|
-
*
|
|
177
|
-
* @important DETERMINISTIC BEHAVIOR: This method will produce identical encrypted
|
|
178
|
-
* output for identical input parameters across different systems, Node.js versions,
|
|
179
|
-
* and multiple function calls. The same data + key combination will ALWAYS generate
|
|
180
|
-
* the same encrypted string.
|
|
181
|
-
*
|
|
182
|
-
* @param data The data to encrypt
|
|
183
|
-
* @param key The encryption key
|
|
184
|
-
* @param config Optional configuration
|
|
185
|
-
* @returns URL-safe encrypted string that is identical across systems for same input
|
|
186
|
-
* @throws {DyFM_Error} if encryption fails
|
|
187
|
-
*
|
|
188
|
-
* @example
|
|
189
|
-
* // These will produce identical results on any system:
|
|
190
|
-
* const result1 = DyFM_Crypto.encrypt({id: 1}, "mykey");
|
|
191
|
-
* const result2 = DyFM_Crypto.encrypt({id: 1}, "mykey");
|
|
192
|
-
* console.log(result1 === result2); // Always true
|
|
193
|
-
*/
|
|
194
|
-
static encrypt<T>(data: T, key: string, config?: CryptoConfig): string {
|
|
195
|
-
try {
|
|
196
|
-
this.validateInput(data, key);
|
|
197
|
-
const finalConfig = { ...this.DEFAULT_CONFIG, ...config };
|
|
198
|
-
|
|
199
|
-
// Convert data to string
|
|
200
|
-
const dataStr = this.safeSerialize(data);
|
|
201
|
-
|
|
202
|
-
// Generate deterministic IV and salt based on data and key
|
|
203
|
-
const iv = this.generateIV(dataStr, key, finalConfig);
|
|
204
|
-
const salt = this.generateSalt(dataStr, key, finalConfig);
|
|
205
|
-
|
|
206
|
-
// Derive key using PBKDF2
|
|
207
|
-
const derivedKey = this.deriveKey(key, salt, finalConfig);
|
|
208
|
-
|
|
209
|
-
// Encrypt the data
|
|
210
|
-
const encrypted = CryptoJS.AES.encrypt(dataStr, derivedKey, {
|
|
211
|
-
iv: iv,
|
|
212
|
-
mode: CryptoJS.mode.CBC,
|
|
213
|
-
padding: CryptoJS.pad.Pkcs7,
|
|
214
|
-
});
|
|
215
|
-
|
|
216
|
-
// Combine IV + Salt + Ciphertext
|
|
217
|
-
const combined = iv.concat(salt).concat(encrypted.ciphertext);
|
|
218
|
-
|
|
219
|
-
// Convert to URL-safe base64
|
|
220
|
-
return CryptoJS.enc.Base64.stringify(combined)
|
|
221
|
-
.replace(/\+/g, '-')
|
|
222
|
-
.replace(/\//g, '_')
|
|
223
|
-
.replace(/=+$/, '');
|
|
224
|
-
} catch (error) {
|
|
225
|
-
throw new DyFM_Error({
|
|
226
|
-
...this.getDefaultErrorSettings('encrypt', error),
|
|
227
|
-
errorCode: 'DyFM-CRY-ENC',
|
|
228
|
-
});
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
/**
|
|
233
|
-
* Decrypts data that was encrypted using encrypt()
|
|
234
|
-
* @param encryptedData The encrypted data
|
|
235
|
-
* @param key The decryption key
|
|
236
|
-
* @param config Optional configuration
|
|
237
|
-
* @returns The decrypted data
|
|
238
|
-
* @throws {DyFM_Error} if decryption fails
|
|
239
|
-
*/
|
|
240
|
-
static decrypt<T>(encryptedData: string, key: string, config?: CryptoConfig): T {
|
|
241
|
-
try {
|
|
242
|
-
this.validateInput(encryptedData, key);
|
|
243
|
-
const finalConfig = { ...this.DEFAULT_CONFIG, ...config };
|
|
244
|
-
|
|
245
|
-
// Convert from URL-safe base64
|
|
246
|
-
const base64 = encryptedData
|
|
247
|
-
.replace(/-/g, '+')
|
|
248
|
-
.replace(/_/g, '/');
|
|
249
|
-
|
|
250
|
-
// Parse the combined data
|
|
251
|
-
const combined = CryptoJS.enc.Base64.parse(base64);
|
|
252
|
-
|
|
253
|
-
// Validate minimum length (IV + Salt + minimum ciphertext)
|
|
254
|
-
const minLength = (finalConfig.ivLength + finalConfig.saltLength + 16) / 4; // 16 bytes minimum for ciphertext
|
|
255
|
-
|
|
256
|
-
if (combined.words.length < minLength) {
|
|
257
|
-
throw new Error('Invalid encrypted data length');
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
// Extract IV, salt, and ciphertext
|
|
261
|
-
const iv = CryptoJS.lib.WordArray.create(combined.words.slice(0, finalConfig.ivLength / 4));
|
|
262
|
-
const salt = CryptoJS.lib.WordArray.create(
|
|
263
|
-
combined.words.slice(
|
|
264
|
-
finalConfig.ivLength / 4,
|
|
265
|
-
(finalConfig.ivLength + finalConfig.saltLength) / 4
|
|
266
|
-
)
|
|
267
|
-
);
|
|
268
|
-
const ciphertext = CryptoJS.lib.WordArray.create(
|
|
269
|
-
combined.words.slice((finalConfig.ivLength + finalConfig.saltLength) / 4)
|
|
270
|
-
);
|
|
271
|
-
|
|
272
|
-
// Derive key using PBKDF2
|
|
273
|
-
const derivedKey = this.deriveKey(key, salt, finalConfig);
|
|
274
|
-
|
|
275
|
-
// Decrypt the data
|
|
276
|
-
const decrypted = CryptoJS.AES.decrypt(
|
|
277
|
-
{ ciphertext: ciphertext },
|
|
278
|
-
derivedKey,
|
|
279
|
-
{
|
|
280
|
-
iv: iv,
|
|
281
|
-
mode: CryptoJS.mode.CBC,
|
|
282
|
-
padding: CryptoJS.pad.Pkcs7,
|
|
283
|
-
}
|
|
284
|
-
);
|
|
285
|
-
|
|
286
|
-
// Parse JSON
|
|
287
|
-
const decryptedStr = decrypted.toString(CryptoJS.enc.Utf8);
|
|
288
|
-
|
|
289
|
-
return this.safeDeserialize<T>(decryptedStr);
|
|
290
|
-
} catch (error) {
|
|
291
|
-
throw new DyFM_Error({
|
|
292
|
-
...this.getDefaultErrorSettings('decrypt', error),
|
|
293
|
-
errorCode: 'DyFM-CRY-DRY',
|
|
294
|
-
});
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
/**
|
|
299
|
-
* Generates a secure random key
|
|
300
|
-
* @param length Length of the key in bytes (default: 32)
|
|
301
|
-
* @returns A secure random key
|
|
302
|
-
*/
|
|
303
|
-
static generateKey(length: number = 32): string {
|
|
304
|
-
return CryptoJS.lib.WordArray.random(length).toString();
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
/**
|
|
308
|
-
* Validates if a string is a valid encrypted data
|
|
309
|
-
* @param encryptedData The data to validate
|
|
310
|
-
* @returns true if the data appears to be valid encrypted data
|
|
311
|
-
*/
|
|
312
|
-
static isValidEncryptedData(encryptedData: string): boolean {
|
|
313
|
-
if (!encryptedData || typeof encryptedData !== 'string') {
|
|
314
|
-
return false;
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
return /^[A-Za-z0-9\-_]+$/.test(encryptedData);
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
/**
|
|
321
|
-
* Gets default error settings
|
|
322
|
-
*/
|
|
323
|
-
private static getDefaultErrorSettings(operation: string, error?: any): DyFM_Error_Settings {
|
|
324
|
-
return {
|
|
325
|
-
status: (error as DyFM_Error)?.___status ?? (error as any)?.status ?? 401,
|
|
326
|
-
message: `Crypto operation "${operation}" failed`,
|
|
327
|
-
error: error,
|
|
328
|
-
errorCode: 'DyFM-CRY-ERR',
|
|
329
|
-
};
|
|
330
|
-
}
|
|
331
|
-
}
|
|
1
|
+
import * as CryptoJS from 'crypto-js';
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
DyFM_Error,
|
|
5
|
+
DyFM_Error_Settings
|
|
6
|
+
} from '../../../_models/control-models/error.control-model';
|
|
7
|
+
import { DyFM_Object } from '../../../_collections/utils/object.util';
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Configuration options for encryption/decryption
|
|
12
|
+
*/
|
|
13
|
+
export interface CryptoConfig {
|
|
14
|
+
ivLength?: number;
|
|
15
|
+
saltLength?: number;
|
|
16
|
+
keyIterations?: number;
|
|
17
|
+
keySize?: number;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// Compact: about 60–80 character tokens, not 200+
|
|
21
|
+
// Non-standard: hard to reverse-engineer
|
|
22
|
+
// Usable in cookies, headers, URLs
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* A utility class for stable encryption and decryption of data
|
|
26
|
+
* Uses AES-256-CBC with deterministic IV and salt for consistent results across systems
|
|
27
|
+
* Prioritizes reliability and cross-platform compatibility over security
|
|
28
|
+
*
|
|
29
|
+
* @important DETERMINISTIC ENCRYPTION: This implementation produces identical encrypted
|
|
30
|
+
* output for identical input data and key across different systems and multiple calls.
|
|
31
|
+
* The same input will ALWAYS generate the same encrypted string on any platform.
|
|
32
|
+
*
|
|
33
|
+
* @warning SECURITY NOTICE: This deterministic behavior is intentional for cross-platform
|
|
34
|
+
* compatibility but reduces security. Identical inputs produce identical outputs, which
|
|
35
|
+
* can be exploited for pattern analysis attacks. Use only when consistency across
|
|
36
|
+
* systems is more important than cryptographic security.
|
|
37
|
+
*/
|
|
38
|
+
export class DyFM_Crypto {
|
|
39
|
+
private static readonly DEFAULT_CONFIG: Required<CryptoConfig> = {
|
|
40
|
+
ivLength: 16, // 128 bits
|
|
41
|
+
saltLength: 16, // 128 bits
|
|
42
|
+
keyIterations: 1000, // Reduced for better performance and stability
|
|
43
|
+
keySize: 8, // 256 bits (8 * 32)
|
|
44
|
+
};
|
|
45
|
+
private static readonly defaultErrorUserMsg =
|
|
46
|
+
`We encountered an unhandled Authentication Error, ` +
|
|
47
|
+
`\nplease contact the responsible development team.`;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Validates the input data and key
|
|
51
|
+
* @throws {DyFM_Error} if validation fails
|
|
52
|
+
*/
|
|
53
|
+
private static validateInput(data: any, key: string): void {
|
|
54
|
+
if (!key || typeof key !== 'string' || key.trim().length === 0) {
|
|
55
|
+
throw new DyFM_Error({
|
|
56
|
+
...this.getDefaultErrorSettings('validateInput'),
|
|
57
|
+
errorCode: 'DyFM-CRY-IKY',
|
|
58
|
+
message: 'Invalid encryption key',
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Allow null values but not undefined
|
|
63
|
+
if (data === undefined) {
|
|
64
|
+
throw new DyFM_Error({
|
|
65
|
+
...this.getDefaultErrorSettings('validateInput'),
|
|
66
|
+
errorCode: 'DyFM-CRY-IDT',
|
|
67
|
+
message: `Invalid data to encrypt/decrypt (is "${data}")`,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Generates a deterministic IV based on the input data and key
|
|
74
|
+
* Uses MD5 for better stability across different CryptoJS versions
|
|
75
|
+
*
|
|
76
|
+
* @important DETERMINISTIC: Same data + key will ALWAYS produce the same IV
|
|
77
|
+
* across all systems and CryptoJS versions for consistent encryption results
|
|
78
|
+
*/
|
|
79
|
+
private static generateIV(data: string, key: string, config: Required<CryptoConfig>): CryptoJS.lib.WordArray {
|
|
80
|
+
// Use MD5 for better stability - simpler hash algorithm, more consistent across versions
|
|
81
|
+
const combined = data + key;
|
|
82
|
+
const hash = CryptoJS.MD5(combined);
|
|
83
|
+
|
|
84
|
+
// Use slice(0, 4) for 16 bytes - more stable than division operations
|
|
85
|
+
return CryptoJS.lib.WordArray.create(hash.words.slice(0, 4));
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Generates a deterministic salt based on the input data and key
|
|
90
|
+
* Uses MD5 for better stability across different CryptoJS versions
|
|
91
|
+
*
|
|
92
|
+
* @important DETERMINISTIC: Same data + key will ALWAYS produce the same salt
|
|
93
|
+
* across all systems and CryptoJS versions for consistent encryption results
|
|
94
|
+
*/
|
|
95
|
+
private static generateSalt(data: string, key: string, config: Required<CryptoConfig>): CryptoJS.lib.WordArray {
|
|
96
|
+
// Use MD5 for better stability - simpler hash algorithm, more consistent across versions
|
|
97
|
+
const combined = key + data;
|
|
98
|
+
const hash = CryptoJS.MD5(combined);
|
|
99
|
+
|
|
100
|
+
// Use slice(0, 4) for 16 bytes - more stable than division operations
|
|
101
|
+
return CryptoJS.lib.WordArray.create(hash.words.slice(0, 4));
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Derives a key using PBKDF2 with reduced iterations for stability
|
|
106
|
+
*/
|
|
107
|
+
private static deriveKey(key: string, salt: CryptoJS.lib.WordArray, config: Required<CryptoConfig>): CryptoJS.lib.WordArray {
|
|
108
|
+
return CryptoJS.PBKDF2(key, salt, {
|
|
109
|
+
keySize: config.keySize,
|
|
110
|
+
iterations: config.keyIterations,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Safely serializes data to JSON
|
|
116
|
+
*/
|
|
117
|
+
private static safeSerialize<T>(data: T): string {
|
|
118
|
+
try {
|
|
119
|
+
// Always use JSON.stringify to ensure proper serialization/deserialization
|
|
120
|
+
return JSON.stringify(data);
|
|
121
|
+
} catch (error) {
|
|
122
|
+
throw new DyFM_Error({
|
|
123
|
+
...this.getDefaultErrorSettings('safeSerialize', error),
|
|
124
|
+
errorCode: 'DyFM-CRY-SER',
|
|
125
|
+
message: 'Failed to serialize data',
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Safely deserializes JSON data
|
|
132
|
+
*/
|
|
133
|
+
private static safeDeserialize<T>(data: string): T {
|
|
134
|
+
try {
|
|
135
|
+
//let parsed = JSON.parse(data);
|
|
136
|
+
let parsed = DyFM_Object.failableSafeParseJSON(data);
|
|
137
|
+
|
|
138
|
+
// Handle double-stringified JSON (or more levels of stringification)
|
|
139
|
+
let maxAttempts = 3; // Prevent infinite loops
|
|
140
|
+
|
|
141
|
+
while (typeof parsed === 'string' && maxAttempts > 0) {
|
|
142
|
+
try {
|
|
143
|
+
//const nextParsed = JSON.parse(parsed);
|
|
144
|
+
const nextParsed = DyFM_Object.failableSafeParseJSON(parsed);
|
|
145
|
+
|
|
146
|
+
// Only continue if parsing actually changed the result
|
|
147
|
+
if (nextParsed !== parsed) {
|
|
148
|
+
parsed = nextParsed;
|
|
149
|
+
maxAttempts--;
|
|
150
|
+
} else {
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
} catch {
|
|
154
|
+
// If parse fails, return current state
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// Handle primitive values
|
|
160
|
+
/* if (typeof parsed === 'string' || typeof parsed === 'number' || typeof parsed === 'boolean') {
|
|
161
|
+
return parsed as T;
|
|
162
|
+
} */
|
|
163
|
+
|
|
164
|
+
return parsed as T;
|
|
165
|
+
} catch (error) {
|
|
166
|
+
throw new DyFM_Error({
|
|
167
|
+
...this.getDefaultErrorSettings('safeDeserialize', error),
|
|
168
|
+
errorCode: 'DyFM-CRY-DES',
|
|
169
|
+
message: 'Failed to deserialize data',
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Encrypts data using AES-256-CBC with deterministic IV and salt
|
|
176
|
+
*
|
|
177
|
+
* @important DETERMINISTIC BEHAVIOR: This method will produce identical encrypted
|
|
178
|
+
* output for identical input parameters across different systems, Node.js versions,
|
|
179
|
+
* and multiple function calls. The same data + key combination will ALWAYS generate
|
|
180
|
+
* the same encrypted string.
|
|
181
|
+
*
|
|
182
|
+
* @param data The data to encrypt
|
|
183
|
+
* @param key The encryption key
|
|
184
|
+
* @param config Optional configuration
|
|
185
|
+
* @returns URL-safe encrypted string that is identical across systems for same input
|
|
186
|
+
* @throws {DyFM_Error} if encryption fails
|
|
187
|
+
*
|
|
188
|
+
* @example
|
|
189
|
+
* // These will produce identical results on any system:
|
|
190
|
+
* const result1 = DyFM_Crypto.encrypt({id: 1}, "mykey");
|
|
191
|
+
* const result2 = DyFM_Crypto.encrypt({id: 1}, "mykey");
|
|
192
|
+
* console.log(result1 === result2); // Always true
|
|
193
|
+
*/
|
|
194
|
+
static encrypt<T>(data: T, key: string, config?: CryptoConfig): string {
|
|
195
|
+
try {
|
|
196
|
+
this.validateInput(data, key);
|
|
197
|
+
const finalConfig = { ...this.DEFAULT_CONFIG, ...config };
|
|
198
|
+
|
|
199
|
+
// Convert data to string
|
|
200
|
+
const dataStr = this.safeSerialize(data);
|
|
201
|
+
|
|
202
|
+
// Generate deterministic IV and salt based on data and key
|
|
203
|
+
const iv = this.generateIV(dataStr, key, finalConfig);
|
|
204
|
+
const salt = this.generateSalt(dataStr, key, finalConfig);
|
|
205
|
+
|
|
206
|
+
// Derive key using PBKDF2
|
|
207
|
+
const derivedKey = this.deriveKey(key, salt, finalConfig);
|
|
208
|
+
|
|
209
|
+
// Encrypt the data
|
|
210
|
+
const encrypted = CryptoJS.AES.encrypt(dataStr, derivedKey, {
|
|
211
|
+
iv: iv,
|
|
212
|
+
mode: CryptoJS.mode.CBC,
|
|
213
|
+
padding: CryptoJS.pad.Pkcs7,
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
// Combine IV + Salt + Ciphertext
|
|
217
|
+
const combined = iv.concat(salt).concat(encrypted.ciphertext);
|
|
218
|
+
|
|
219
|
+
// Convert to URL-safe base64
|
|
220
|
+
return CryptoJS.enc.Base64.stringify(combined)
|
|
221
|
+
.replace(/\+/g, '-')
|
|
222
|
+
.replace(/\//g, '_')
|
|
223
|
+
.replace(/=+$/, '');
|
|
224
|
+
} catch (error) {
|
|
225
|
+
throw new DyFM_Error({
|
|
226
|
+
...this.getDefaultErrorSettings('encrypt', error),
|
|
227
|
+
errorCode: 'DyFM-CRY-ENC',
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Decrypts data that was encrypted using encrypt()
|
|
234
|
+
* @param encryptedData The encrypted data
|
|
235
|
+
* @param key The decryption key
|
|
236
|
+
* @param config Optional configuration
|
|
237
|
+
* @returns The decrypted data
|
|
238
|
+
* @throws {DyFM_Error} if decryption fails
|
|
239
|
+
*/
|
|
240
|
+
static decrypt<T>(encryptedData: string, key: string, config?: CryptoConfig): T {
|
|
241
|
+
try {
|
|
242
|
+
this.validateInput(encryptedData, key);
|
|
243
|
+
const finalConfig = { ...this.DEFAULT_CONFIG, ...config };
|
|
244
|
+
|
|
245
|
+
// Convert from URL-safe base64
|
|
246
|
+
const base64 = encryptedData
|
|
247
|
+
.replace(/-/g, '+')
|
|
248
|
+
.replace(/_/g, '/');
|
|
249
|
+
|
|
250
|
+
// Parse the combined data
|
|
251
|
+
const combined = CryptoJS.enc.Base64.parse(base64);
|
|
252
|
+
|
|
253
|
+
// Validate minimum length (IV + Salt + minimum ciphertext)
|
|
254
|
+
const minLength = (finalConfig.ivLength + finalConfig.saltLength + 16) / 4; // 16 bytes minimum for ciphertext
|
|
255
|
+
|
|
256
|
+
if (combined.words.length < minLength) {
|
|
257
|
+
throw new Error('Invalid encrypted data length');
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// Extract IV, salt, and ciphertext
|
|
261
|
+
const iv = CryptoJS.lib.WordArray.create(combined.words.slice(0, finalConfig.ivLength / 4));
|
|
262
|
+
const salt = CryptoJS.lib.WordArray.create(
|
|
263
|
+
combined.words.slice(
|
|
264
|
+
finalConfig.ivLength / 4,
|
|
265
|
+
(finalConfig.ivLength + finalConfig.saltLength) / 4
|
|
266
|
+
)
|
|
267
|
+
);
|
|
268
|
+
const ciphertext = CryptoJS.lib.WordArray.create(
|
|
269
|
+
combined.words.slice((finalConfig.ivLength + finalConfig.saltLength) / 4)
|
|
270
|
+
);
|
|
271
|
+
|
|
272
|
+
// Derive key using PBKDF2
|
|
273
|
+
const derivedKey = this.deriveKey(key, salt, finalConfig);
|
|
274
|
+
|
|
275
|
+
// Decrypt the data
|
|
276
|
+
const decrypted = CryptoJS.AES.decrypt(
|
|
277
|
+
{ ciphertext: ciphertext },
|
|
278
|
+
derivedKey,
|
|
279
|
+
{
|
|
280
|
+
iv: iv,
|
|
281
|
+
mode: CryptoJS.mode.CBC,
|
|
282
|
+
padding: CryptoJS.pad.Pkcs7,
|
|
283
|
+
}
|
|
284
|
+
);
|
|
285
|
+
|
|
286
|
+
// Parse JSON
|
|
287
|
+
const decryptedStr = decrypted.toString(CryptoJS.enc.Utf8);
|
|
288
|
+
|
|
289
|
+
return this.safeDeserialize<T>(decryptedStr);
|
|
290
|
+
} catch (error) {
|
|
291
|
+
throw new DyFM_Error({
|
|
292
|
+
...this.getDefaultErrorSettings('decrypt', error),
|
|
293
|
+
errorCode: 'DyFM-CRY-DRY',
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* Generates a secure random key
|
|
300
|
+
* @param length Length of the key in bytes (default: 32)
|
|
301
|
+
* @returns A secure random key
|
|
302
|
+
*/
|
|
303
|
+
static generateKey(length: number = 32): string {
|
|
304
|
+
return CryptoJS.lib.WordArray.random(length).toString();
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* Validates if a string is a valid encrypted data
|
|
309
|
+
* @param encryptedData The data to validate
|
|
310
|
+
* @returns true if the data appears to be valid encrypted data
|
|
311
|
+
*/
|
|
312
|
+
static isValidEncryptedData(encryptedData: string): boolean {
|
|
313
|
+
if (!encryptedData || typeof encryptedData !== 'string') {
|
|
314
|
+
return false;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
return /^[A-Za-z0-9\-_]+$/.test(encryptedData);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Gets default error settings
|
|
322
|
+
*/
|
|
323
|
+
private static getDefaultErrorSettings(operation: string, error?: any): DyFM_Error_Settings {
|
|
324
|
+
return {
|
|
325
|
+
status: (error as DyFM_Error)?.___status ?? (error as any)?.status ?? 401,
|
|
326
|
+
message: `Crypto operation "${operation}" failed`,
|
|
327
|
+
error: error,
|
|
328
|
+
errorCode: 'DyFM-CRY-ERR',
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
}
|