@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.
Files changed (707) hide show
  1. package/.c8rc.json +26 -26
  2. package/.cursor/rules/__assistant_guide.mdc +30 -30
  3. package/.cursor/rules/__main.mdc +64 -64
  4. package/.cursor/rules/_ag_backend-structure.mdc +85 -85
  5. package/.cursor/rules/_ag_backend.mdc +16 -16
  6. package/.cursor/rules/_ag_debug.mdc +7 -7
  7. package/.cursor/rules/_ag_documentation_writing_rules.mdc +372 -372
  8. package/.cursor/rules/_ag_file-refactoring.mdc +113 -113
  9. package/.cursor/rules/_ag_fixes_rules.mdc +5 -5
  10. package/.cursor/rules/_ag_frontend-structure.mdc +86 -86
  11. package/.cursor/rules/_ag_frontend.mdc +39 -39
  12. package/.cursor/rules/_ag_import-rules.mdc +44 -44
  13. package/.cursor/rules/_ag_naming.mdc +115 -115
  14. package/.cursor/rules/_ag_running_commands.mdc +4 -4
  15. package/.cursor/rules/_ag_server-controller.mdc +5 -5
  16. package/.cursor/rules/_ag_should-be.mdc +6 -6
  17. package/.cursor/rules/_ag_swearing.mdc +47 -47
  18. package/.cursor/rules/ai_development_guide.md +60 -60
  19. package/.cursor/rules/ai_directives.md +114 -114
  20. package/.cursor/rules/cursor-rules.md +160 -160
  21. package/.cursor/rules/default-command.mdc +464 -464
  22. package/.cursor/rules/error_code_pattern.md +39 -39
  23. package/.cursor/rules/saved rule mcp server use.md +15 -15
  24. package/.dynamo/pipeline.cicd.config.json +157 -157
  25. package/.dynamo/version-bump.config.json +5 -5
  26. package/.github/workflows/main.yml +439 -439
  27. package/.husky/pre-commit +2 -2
  28. package/.vscode/settings.json +11 -11
  29. package/LICENSE +21 -21
  30. package/README.md +701 -693
  31. package/__documentations/2026-05-17-oai-compatible-providers-howto.md +282 -282
  32. package/__documentations/2026-06-01-fr047-fc-foundation.md +48 -48
  33. package/__documentations/2026-06-01-fr047-fr048-code-review.md +153 -153
  34. package/__documentations/2026-06-01-fr047-p1-function-calling-vocabulary.md +75 -75
  35. package/__documentations/2026-06-05-secret-mask-url-cred-any-scheme.md +37 -37
  36. package/__documentations/2026-06-06-ngx-models-merge-completion.md +100 -100
  37. package/__documentations/2026-06-22-dyfm-error-extends-error.md +109 -109
  38. package/__documentations/plans/00-MASTER-ngx-models-fsm-merge.md +75 -75
  39. package/__documentations/plans/01-naming-convention-DyNM-to-DyFM.md +103 -103
  40. package/__documentations/plans/02-consumer-rollout.md +84 -84
  41. package/_specifications/BACKLOG.md +43 -43
  42. package/build/_modules/crypto/_models/artifact-signature.interface.d.ts +37 -0
  43. package/build/_modules/crypto/_models/artifact-signature.interface.d.ts.map +1 -0
  44. package/build/_modules/crypto/_models/artifact-signature.interface.js +3 -0
  45. package/build/_modules/crypto/_models/artifact-signature.interface.js.map +1 -0
  46. package/build/_modules/crypto/_services/artifact-signature.control-service.d.ts +24 -0
  47. package/build/_modules/crypto/_services/artifact-signature.control-service.d.ts.map +1 -0
  48. package/build/_modules/crypto/_services/artifact-signature.control-service.js +281 -0
  49. package/build/_modules/crypto/_services/artifact-signature.control-service.js.map +1 -0
  50. package/build/_modules/crypto/index.d.ts +2 -0
  51. package/build/_modules/crypto/index.d.ts.map +1 -1
  52. package/build/_modules/crypto/index.js +2 -0
  53. package/build/_modules/crypto/index.js.map +1 -1
  54. package/build/_modules/socket/_models/sck-socket-event.control-model.d.ts +4 -6
  55. package/build/_modules/socket/_models/sck-socket-event.control-model.d.ts.map +1 -1
  56. package/build/_modules/socket/_models/sck-socket-event.control-model.js +9 -7
  57. package/build/_modules/socket/_models/sck-socket-event.control-model.js.map +1 -1
  58. package/eslint.config.js +4 -4
  59. package/nodemon.json +22 -22
  60. package/package.json +306 -306
  61. package/pnpm-workspace.yaml +2 -2
  62. package/scripts/_capture-out/ai-error-capture.json +398 -398
  63. package/scripts/ai-error-capture.js +171 -171
  64. package/scripts/ai-model-registry-check.js +132 -132
  65. package/scripts/crypto/CRYPTO-STABILITY-SOLUTION.md +196 -196
  66. package/scripts/crypto/README.md +113 -113
  67. package/scripts/crypto/demo-crypto-stability.js +120 -120
  68. package/scripts/crypto/stress-test-crypto.js +379 -379
  69. package/scripts/run-coverage-tests.js +24 -24
  70. package/scripts/verify-build-completeness.js +62 -62
  71. package/spec/support/helpers/ts-node-helper.js +9 -9
  72. package/spec/support/jasmine.coverage.json +23 -23
  73. package/spec/support/jasmine.json +24 -24
  74. package/src/_collections/constants/data-sizes.const.ts +40 -40
  75. package/src/_collections/constants/error-defaults.const.ts +20 -20
  76. package/src/_collections/constants/global-settings.const.spec.ts +32 -32
  77. package/src/_collections/constants/global-settings.const.ts +29 -29
  78. package/src/_collections/constants/numbers.const.ts +40 -40
  79. package/src/_collections/constants/times.const.ts +45 -45
  80. package/src/_collections/utils/array.util.spec.ts +306 -306
  81. package/src/_collections/utils/array.util.ts +813 -813
  82. package/src/_collections/utils/async.util.spec.ts +398 -398
  83. package/src/_collections/utils/async.util.ts +208 -208
  84. package/src/_collections/utils/data.util.spec.ts +345 -345
  85. package/src/_collections/utils/data.util.ts +226 -226
  86. package/src/_collections/utils/extract-error-message.util.spec.ts +204 -204
  87. package/src/_collections/utils/extract-error-message.util.ts +223 -223
  88. package/src/_collections/utils/json-error-helper.util.spec.ts +521 -521
  89. package/src/_collections/utils/json-error-helper.util.ts +301 -301
  90. package/src/_collections/utils/log.util.spec.ts +975 -975
  91. package/src/_collections/utils/log.util.ts +667 -667
  92. package/src/_collections/utils/math/box-bounds.spec.ts +73 -73
  93. package/src/_collections/utils/math/box-bounds.util.ts +183 -183
  94. package/src/_collections/utils/math/math.util.spec.ts +94 -94
  95. package/src/_collections/utils/math/math.util.ts +141 -141
  96. package/src/_collections/utils/math/random.util.spec.ts +82 -82
  97. package/src/_collections/utils/math/random.util.ts +139 -139
  98. package/src/_collections/utils/math/trigonometry.util.spec.ts +57 -57
  99. package/src/_collections/utils/math/trigonometry.util.ts +102 -102
  100. package/src/_collections/utils/math/vector2.util.spec.ts +94 -94
  101. package/src/_collections/utils/math/vector2.util.ts +653 -653
  102. package/src/_collections/utils/object.util.spec.ts +646 -646
  103. package/src/_collections/utils/object.util.ts +739 -739
  104. package/src/_collections/utils/regex/password-regex.util.spec.ts +51 -51
  105. package/src/_collections/utils/regex/password-regex.util.ts +65 -65
  106. package/src/_collections/utils/regex/regex.util.spec.ts +42 -42
  107. package/src/_collections/utils/regex/regex.util.ts +6 -6
  108. package/src/_collections/utils/regex/username-regex.util.spec.ts +61 -61
  109. package/src/_collections/utils/regex/username-regex.util.ts +35 -35
  110. package/src/_collections/utils/require-env.util.spec.ts +231 -231
  111. package/src/_collections/utils/require-env.util.ts +138 -138
  112. package/src/_collections/utils/round-list.util.spec.ts +79 -79
  113. package/src/_collections/utils/round-list.util.ts +162 -162
  114. package/src/_collections/utils/secret-mask.util.spec.ts +66 -66
  115. package/src/_collections/utils/secret-mask.util.ts +262 -262
  116. package/src/_collections/utils/stack.util.spec.ts +372 -372
  117. package/src/_collections/utils/stack.util.ts +164 -164
  118. package/src/_collections/utils/string-case.util.spec.ts +441 -441
  119. package/src/_collections/utils/string-case.util.ts +362 -362
  120. package/src/_collections/utils/string.util.spec.ts +975 -975
  121. package/src/_collections/utils/string.util.ts +449 -449
  122. package/src/_collections/utils/time.util.spec.ts +50 -50
  123. package/src/_collections/utils/time.util.ts +481 -481
  124. package/src/_collections/utils/type-cloning-facility.util.spec.ts +51 -51
  125. package/src/_collections/utils/type-cloning-facility.util.ts +168 -168
  126. package/src/_collections/utils/utilities.util.spec.ts +201 -201
  127. package/src/_collections/utils/utilities.util.ts +68 -68
  128. package/src/_collections/utils/uuid.util.spec.ts +30 -30
  129. package/src/_collections/utils/uuid.util.ts +50 -50
  130. package/src/_enums/basic-property-type.enum.ts +20 -20
  131. package/src/_enums/data-model-type.enum.ts +29 -29
  132. package/src/_enums/environment-flag.enum.ts +28 -28
  133. package/src/_enums/error-level.enum.ts +43 -43
  134. package/src/_enums/error-status.enum.ts +30 -30
  135. package/src/_enums/http/http-call-type.enum.ts +43 -43
  136. package/src/_enums/http/http-event-type.enum.ts +40 -40
  137. package/src/_enums/http/http-response-type.enum.ts +18 -18
  138. package/src/_enums/log-style.enum.ts +44 -44
  139. package/src/_enums/server-connection-status.enum.ts +6 -6
  140. package/src/_enums/time/day-of-week.enum.ts +55 -55
  141. package/src/_enums/time/month.enum.ts +25 -25
  142. package/src/_enums/time/relative-date.enum.ts +24 -24
  143. package/src/_models/control-models/data-model-params.control-model.spec.ts +156 -156
  144. package/src/_models/control-models/data-model-params.control-model.ts +362 -362
  145. package/src/_models/control-models/data-property-params.control-model.spec.ts +93 -93
  146. package/src/_models/control-models/data-property-params.control-model.ts +210 -210
  147. package/src/_models/control-models/error.control-model.spec.ts +975 -975
  148. package/src/_models/control-models/error.control-model.ts +1280 -1280
  149. package/src/_models/control-models/http/http-error-response.control-model.spec.ts +116 -116
  150. package/src/_models/control-models/http/http-error-response.control-model.ts +52 -52
  151. package/src/_models/control-models/http/http-headers.control-model.spec.ts +25 -25
  152. package/src/_models/control-models/http/http-headers.control-model.ts +124 -124
  153. package/src/_models/control-models/http/http-response.model-base.spec.ts +46 -46
  154. package/src/_models/control-models/http/http-response.model-base.ts +57 -57
  155. package/src/_models/control-models/poll.control-model.spec.ts +63 -63
  156. package/src/_models/control-models/poll.control-model.ts +151 -151
  157. package/src/_models/control-models/range-value.control-model.spec.ts +187 -187
  158. package/src/_models/control-models/range-value.control-model.ts +289 -289
  159. package/src/_models/control-models/server-status.control-model.spec.ts +66 -66
  160. package/src/_models/control-models/server-status.control-model.ts +94 -94
  161. package/src/_models/control-models/service-endpoint-settings-base.control-model.spec.ts +145 -145
  162. package/src/_models/control-models/service-endpoint-settings-base.control-model.ts +186 -186
  163. package/src/_models/data-models/errors.data-model.spec.ts +71 -71
  164. package/src/_models/data-models/errors.data-model.ts +200 -200
  165. package/src/_models/data-models/metadata.data-model.spec.ts +184 -184
  166. package/src/_models/data-models/metadata.data-model.ts +153 -153
  167. package/src/_models/interfaces/box-bounds.interface.ts +7 -7
  168. package/src/_models/interfaces/environment/global-log-settings.interface.ts +86 -86
  169. package/src/_models/interfaces/environment/global-settings.interface.ts +69 -69
  170. package/src/_models/interfaces/error-defaults.interface.ts +18 -18
  171. package/src/_models/interfaces/paged.interface.ts +12 -12
  172. package/src/_models/interfaces/random-weight.interface.ts +7 -7
  173. package/src/_models/interfaces/route-settings.interface.ts +15 -15
  174. package/src/_models/interfaces/search-query.interface.ts +23 -23
  175. package/src/_models/interfaces/search-result.interface.ts +5 -5
  176. package/src/_models/interfaces/server-error-statistics.interface.ts +24 -24
  177. package/src/_models/interfaces/vector2.interface.ts +20 -20
  178. package/src/_models/types/db-filter.type.ts +110 -110
  179. package/src/_models/types/db-sort.type.ts +4 -4
  180. package/src/_models/types/ds-filter.type.ts +68 -68
  181. package/src/_models/types/ds-sort.type.ts +21 -21
  182. package/src/_modules/ai/_collections/ai-model-ref.util.ts +88 -88
  183. package/src/_modules/ai/_collections/ai-model-registry.util.spec.ts +37 -37
  184. package/src/_modules/ai/_collections/ai-model-registry.util.ts +30 -30
  185. package/src/_modules/ai/_enums/ai-message-role.enum.ts +7 -7
  186. package/src/_modules/ai/_enums/ai-model-type.enum.ts +7 -7
  187. package/src/_modules/ai/_enums/ai-provider.enum.ts +7 -7
  188. package/src/_modules/ai/_models/ai-call-settings.interface.ts +84 -84
  189. package/src/_modules/ai/_models/ai-config.interface.ts +14 -14
  190. package/src/_modules/ai/_models/ai-embedding-request.interface.ts +20 -20
  191. package/src/_modules/ai/_models/ai-embedding-response.interface.ts +26 -26
  192. package/src/_modules/ai/_models/ai-llm-request.interface.ts +24 -24
  193. package/src/_modules/ai/_models/ai-llm-response.interface.ts +30 -30
  194. package/src/_modules/ai/_models/ai-message.interface.ts +12 -12
  195. package/src/_modules/ai/_models/ai-model-capabilities.interface.ts +35 -35
  196. package/src/_modules/ai/_models/ai-model-info.interface.ts +63 -63
  197. package/src/_modules/ai/_models/ai-model-settings-schema.interface.ts +52 -52
  198. package/src/_modules/ai/_models/ai-provider-capabilities.interface.ts +28 -28
  199. package/src/_modules/ai/_models/ai-settings.interface.ts +17 -17
  200. package/src/_modules/ai/_models/ai-tool-call.interface.ts +18 -18
  201. package/src/_modules/ai/_models/ai-tool-handler.type.ts +11 -11
  202. package/src/_modules/ai/_models/ai-tool-result.interface.ts +16 -16
  203. package/src/_modules/ai/_models/ai-tool.interface.ts +16 -16
  204. package/src/_modules/ai/_models/ai-user-provider-config.control-model.ts +29 -29
  205. package/src/_modules/ai/_modules/anthropic/_collections/aai-models.const.ts +135 -135
  206. package/src/_modules/ai/_modules/anthropic/_enums/aai-model.enum.ts +19 -19
  207. package/src/_modules/ai/_modules/anthropic/_models/aai-call-settings.control-model.spec.ts +28 -28
  208. package/src/_modules/ai/_modules/anthropic/_models/aai-call-settings.control-model.ts +23 -23
  209. package/src/_modules/ai/_modules/anthropic/_models/aai-client-options.interface.ts +10 -10
  210. package/src/_modules/ai/_modules/anthropic/_models/aai-settings.control-model.spec.ts +22 -22
  211. package/src/_modules/ai/_modules/anthropic/_models/aai-settings.control-model.ts +27 -27
  212. package/src/_modules/ai/_modules/anthropic/_models/aai-user-provider-config.control-model.ts +20 -20
  213. package/src/_modules/ai/_modules/anthropic/index.ts +14 -14
  214. package/src/_modules/ai/_modules/document-ai/_models/dai-embedding-info.interface.ts +12 -12
  215. package/src/_modules/ai/_modules/document-ai/_models/dai-vector-search-params.interface.ts +22 -22
  216. package/src/_modules/ai/_modules/document-ai/index.ts +4 -4
  217. package/src/_modules/ai/_modules/fdp-ai/_collections/fdpai-models.const.ts +40 -40
  218. package/src/_modules/ai/_modules/fdp-ai/_enums/fdpai-model.enum.ts +6 -6
  219. package/src/_modules/ai/_modules/fdp-ai/_models/fdpai-call-settings.control-model.ts +19 -19
  220. package/src/_modules/ai/_modules/fdp-ai/_models/fdpai-client-options.interface.ts +11 -11
  221. package/src/_modules/ai/_modules/fdp-ai/_models/fdpai-settings.control-model.ts +24 -24
  222. package/src/_modules/ai/_modules/fdp-ai/_models/fdpai-user-provider-config.control-model.ts +20 -20
  223. package/src/_modules/ai/_modules/fdp-ai/index.ts +11 -11
  224. package/src/_modules/ai/_modules/google-ai/_collections/gai-models.const.ts +161 -161
  225. package/src/_modules/ai/_modules/google-ai/_enums/gai-model.enum.ts +16 -16
  226. package/src/_modules/ai/_modules/google-ai/_models/gai-call-settings.control-model.spec.ts +28 -28
  227. package/src/_modules/ai/_modules/google-ai/_models/gai-call-settings.control-model.ts +21 -21
  228. package/src/_modules/ai/_modules/google-ai/_models/gai-client-options.interface.ts +8 -8
  229. package/src/_modules/ai/_modules/google-ai/_models/gai-settings.control-model.spec.ts +22 -22
  230. package/src/_modules/ai/_modules/google-ai/_models/gai-settings.control-model.ts +25 -25
  231. package/src/_modules/ai/_modules/google-ai/_models/gai-user-provider-config.control-model.ts +20 -20
  232. package/src/_modules/ai/_modules/google-ai/index.ts +14 -14
  233. package/src/_modules/ai/_modules/local-ai/_collections/lai-models.const.ts +59 -59
  234. package/src/_modules/ai/_modules/local-ai/_enums/lai-model.enum.ts +6 -6
  235. package/src/_modules/ai/_modules/local-ai/_models/lai-call-settings.control-model.spec.ts +28 -28
  236. package/src/_modules/ai/_modules/local-ai/_models/lai-call-settings.control-model.ts +18 -18
  237. package/src/_modules/ai/_modules/local-ai/_models/lai-client-options.interface.ts +9 -9
  238. package/src/_modules/ai/_modules/local-ai/_models/lai-settings.control-model.spec.ts +22 -22
  239. package/src/_modules/ai/_modules/local-ai/_models/lai-settings.control-model.ts +23 -23
  240. package/src/_modules/ai/_modules/local-ai/index.ts +14 -14
  241. package/src/_modules/ai/_modules/open-ai/_collections/oai-embedding-model-dimensions.const.ts +7 -7
  242. package/src/_modules/ai/_modules/open-ai/_collections/oai-models.const.ts +404 -404
  243. package/src/_modules/ai/_modules/open-ai/_enums/oai-model.enum.ts +179 -179
  244. package/src/_modules/ai/_modules/open-ai/_models/oai-call-settings.control-model.spec.ts +28 -28
  245. package/src/_modules/ai/_modules/open-ai/_models/oai-call-settings.control-model.ts +21 -21
  246. package/src/_modules/ai/_modules/open-ai/_models/oai-client-options.interface.ts +81 -81
  247. package/src/_modules/ai/_modules/open-ai/_models/oai-embedding-info.interface.ts +13 -13
  248. package/src/_modules/ai/_modules/open-ai/_models/oai-settings.control-model.spec.ts +22 -22
  249. package/src/_modules/ai/_modules/open-ai/_models/oai-settings.control-model.ts +25 -25
  250. package/src/_modules/ai/_modules/open-ai/_models/oai-user-provider-config.control-model.ts +21 -21
  251. package/src/_modules/ai/_modules/open-ai/index.ts +28 -28
  252. package/src/_modules/ai/index.ts +27 -27
  253. package/src/_modules/ci-tools/_enums/cit-ci-result-code.enum.ts +11 -11
  254. package/src/_modules/ci-tools/_enums/cit-ci-step-result-code.enum.ts +9 -9
  255. package/src/_modules/ci-tools/_models/cit-ci-result-info.data-models.spec.ts +58 -58
  256. package/src/_modules/ci-tools/_models/cit-ci-result-info.data-models.ts +77 -77
  257. package/src/_modules/ci-tools/_models/cit-ci-step-result.interface.ts +12 -12
  258. package/src/_modules/ci-tools/index.ts +8 -8
  259. package/src/_modules/crypto/_collections/crypto-v1.util.ts +225 -225
  260. package/src/_modules/crypto/_collections/crypto-v2.util.ts +331 -331
  261. package/src/_modules/crypto/_collections/crypto-v4.util.ts +702 -702
  262. package/src/_modules/crypto/_collections/crypto.util.db-envelope.spec.ts +51 -51
  263. package/src/_modules/crypto/_collections/crypto.util.edge.spec.ts +605 -605
  264. package/src/_modules/crypto/_collections/crypto.util.extra.spec.ts +642 -642
  265. package/src/_modules/crypto/_collections/crypto.util.simple.spec.ts +512 -512
  266. package/src/_modules/crypto/_collections/crypto.util.ts +748 -748
  267. package/src/_modules/crypto/_models/artifact-signature.interface.ts +39 -0
  268. package/src/_modules/crypto/_services/artifact-signature.control-service.spec.ts +223 -0
  269. package/src/_modules/crypto/_services/artifact-signature.control-service.ts +395 -0
  270. package/src/_modules/crypto/index.ts +16 -14
  271. package/src/_modules/custom-data/_collections/cud-module-settings.const.ts +21 -21
  272. package/src/_modules/custom-data/_models/cud.data-model.spec.ts +38 -38
  273. package/src/_modules/custom-data/_models/cud.data-model.ts +39 -39
  274. package/src/_modules/custom-data/index.ts +10 -10
  275. package/src/_modules/data-handler/_models/data-handler-settings.control-model.spec.ts +110 -110
  276. package/src/_modules/data-handler/_models/data-handler-settings.control-model.ts +110 -110
  277. package/src/_modules/data-handler/_models/data-handler.control-model.spec.ts +473 -473
  278. package/src/_modules/data-handler/_models/data-handler.control-model.ts +486 -486
  279. package/src/_modules/data-handler/_models/data-list-handler.control-model.spec.ts +263 -263
  280. package/src/_modules/data-handler/_models/data-list-handler.control-model.ts +252 -252
  281. package/src/_modules/data-handler/_models/data-search-handler.control-model.spec.ts +417 -417
  282. package/src/_modules/data-handler/_models/data-search-handler.control-model.ts +390 -390
  283. package/src/_modules/data-handler/_models/list-collector-data-handler.control-model.spec.ts +374 -374
  284. package/src/_modules/data-handler/_models/list-collector-data-handler.control-model.ts +274 -274
  285. package/src/_modules/data-handler/index.ts +6 -6
  286. package/src/_modules/game/_collections/audio-mixer.util.spec.ts +198 -198
  287. package/src/_modules/game/_collections/audio-mixer.util.ts +143 -143
  288. package/src/_modules/game/_collections/audio-scale.util.spec.ts +140 -140
  289. package/src/_modules/game/_collections/audio-scale.util.ts +129 -129
  290. package/src/_modules/game/_enums/audio-channel.enum.ts +22 -22
  291. package/src/_modules/game/_models/audio-mixer-config.interface.ts +53 -53
  292. package/src/_modules/game/_models/audio-mixer-settings.interface.ts +38 -38
  293. package/src/_modules/game/_models/audio-mixer-state.interface.ts +36 -36
  294. package/src/_modules/game/_models/audio-mixer.control-model.spec.ts +376 -376
  295. package/src/_modules/game/_models/audio-mixer.control-model.ts +419 -419
  296. package/src/_modules/game/_models/audio-scale.interface.ts +21 -21
  297. package/src/_modules/game/_models/seeded-random-state.interface.ts +21 -21
  298. package/src/_modules/game/_models/seeded-random.control-model.spec.ts +290 -290
  299. package/src/_modules/game/_models/seeded-random.control-model.ts +311 -311
  300. package/src/_modules/game/index.ts +15 -15
  301. package/src/_modules/location/_collections/assets/country-codes-ISO-3166.json +3239 -3239
  302. package/src/_modules/location/_collections/assets/country-divisions-ISO-3166-all-list.json +19035 -19035
  303. package/src/_modules/location/_collections/assets/country-divisions-ISO-3166.json +4993 -4993
  304. package/src/_modules/location/_collections/assets/country-phone-codes.json +1203 -1203
  305. package/src/_modules/location/_collections/assets/country-subdivisions/afghanistan.json +137 -137
  306. package/src/_modules/location/_collections/assets/country-subdivisions/albania.json +49 -49
  307. package/src/_modules/location/_collections/assets/country-subdivisions/algeria.json +193 -193
  308. package/src/_modules/location/_collections/assets/country-subdivisions/andorra.json +29 -29
  309. package/src/_modules/location/_collections/assets/country-subdivisions/angola.json +73 -73
  310. package/src/_modules/location/_collections/assets/country-subdivisions/antigua-and-barbuda.json +33 -33
  311. package/src/_modules/location/_collections/assets/country-subdivisions/argentina.json +97 -97
  312. package/src/_modules/location/_collections/assets/country-subdivisions/armenia.json +45 -45
  313. package/src/_modules/location/_collections/assets/country-subdivisions/australia.json +33 -33
  314. package/src/_modules/location/_collections/assets/country-subdivisions/austria.json +37 -37
  315. package/src/_modules/location/_collections/assets/country-subdivisions/azerbaijan.json +5 -5
  316. package/src/_modules/location/_collections/assets/country-subdivisions/bahamas.json +125 -125
  317. package/src/_modules/location/_collections/assets/country-subdivisions/bahrain.json +21 -21
  318. package/src/_modules/location/_collections/assets/country-subdivisions/bangladesh.json +29 -29
  319. package/src/_modules/location/_collections/assets/country-subdivisions/barbados.json +45 -45
  320. package/src/_modules/location/_collections/assets/country-subdivisions/belarus.json +29 -29
  321. package/src/_modules/location/_collections/assets/country-subdivisions/belgium.json +13 -13
  322. package/src/_modules/location/_collections/assets/country-subdivisions/belize.json +25 -25
  323. package/src/_modules/location/_collections/assets/country-subdivisions/benin.json +49 -49
  324. package/src/_modules/location/_collections/assets/country-subdivisions/bhutan.json +81 -81
  325. package/src/_modules/location/_collections/assets/country-subdivisions/bolivia.json +37 -37
  326. package/src/_modules/location/_collections/assets/country-subdivisions/bosnia-and-herzegovina.json +13 -13
  327. package/src/_modules/location/_collections/assets/country-subdivisions/botswana.json +65 -65
  328. package/src/_modules/location/_collections/assets/country-subdivisions/brazil.json +109 -109
  329. package/src/_modules/location/_collections/assets/country-subdivisions/brunei-darussalam.json +17 -17
  330. package/src/_modules/location/_collections/assets/country-subdivisions/bulgaria.json +113 -113
  331. package/src/_modules/location/_collections/assets/country-subdivisions/burkina-faso.json +53 -53
  332. package/src/_modules/location/_collections/assets/country-subdivisions/burundi.json +69 -69
  333. package/src/_modules/location/_collections/assets/country-subdivisions/cambodia.json +97 -97
  334. package/src/_modules/location/_collections/assets/country-subdivisions/cameroon.json +41 -41
  335. package/src/_modules/location/_collections/assets/country-subdivisions/canada.json +79 -79
  336. package/src/_modules/location/_collections/assets/country-subdivisions/cape-verde.json +9 -9
  337. package/src/_modules/location/_collections/assets/country-subdivisions/central-african-republic.json +69 -69
  338. package/src/_modules/location/_collections/assets/country-subdivisions/chad.json +89 -89
  339. package/src/_modules/location/_collections/assets/country-subdivisions/chile.json +61 -61
  340. package/src/_modules/location/_collections/assets/country-subdivisions/china.json +205 -205
  341. package/src/_modules/location/_collections/assets/country-subdivisions/colombia.json +133 -133
  342. package/src/_modules/location/_collections/assets/country-subdivisions/comoros.json +13 -13
  343. package/src/_modules/location/_collections/assets/country-subdivisions/congo-the-democratic-republic-of-the.json +45 -45
  344. package/src/_modules/location/_collections/assets/country-subdivisions/congo.json +49 -49
  345. package/src/_modules/location/_collections/assets/country-subdivisions/costa-rica.json +29 -29
  346. package/src/_modules/location/_collections/assets/country-subdivisions/cote-d-ivoire-republic-of.json +77 -77
  347. package/src/_modules/location/_collections/assets/country-subdivisions/croatia.json +85 -85
  348. package/src/_modules/location/_collections/assets/country-subdivisions/cuba.json +65 -65
  349. package/src/_modules/location/_collections/assets/country-subdivisions/cyprus.json +25 -25
  350. package/src/_modules/location/_collections/assets/country-subdivisions/czech-republic.json +57 -57
  351. package/src/_modules/location/_collections/assets/country-subdivisions/denmark.json +21 -21
  352. package/src/_modules/location/_collections/assets/country-subdivisions/djibouti.json +25 -25
  353. package/src/_modules/location/_collections/assets/country-subdivisions/dominica.json +41 -41
  354. package/src/_modules/location/_collections/assets/country-subdivisions/dominican-republic.json +41 -41
  355. package/src/_modules/location/_collections/assets/country-subdivisions/ecuador.json +97 -97
  356. package/src/_modules/location/_collections/assets/country-subdivisions/egypt.json +117 -117
  357. package/src/_modules/location/_collections/assets/country-subdivisions/el-salvador.json +57 -57
  358. package/src/_modules/location/_collections/assets/country-subdivisions/equatorial-guinea.json +9 -9
  359. package/src/_modules/location/_collections/assets/country-subdivisions/eritrea.json +25 -25
  360. package/src/_modules/location/_collections/assets/country-subdivisions/estonia.json +61 -61
  361. package/src/_modules/location/_collections/assets/country-subdivisions/ethiopia.json +45 -45
  362. package/src/_modules/location/_collections/assets/country-subdivisions/fiji.json +21 -21
  363. package/src/_modules/location/_collections/assets/country-subdivisions/finland.json +77 -77
  364. package/src/_modules/location/_collections/assets/country-subdivisions/france.json +133 -133
  365. package/src/_modules/location/_collections/assets/country-subdivisions/gabon.json +37 -37
  366. package/src/_modules/location/_collections/assets/country-subdivisions/gambia.json +25 -25
  367. package/src/_modules/location/_collections/assets/country-subdivisions/georgia.json +49 -49
  368. package/src/_modules/location/_collections/assets/country-subdivisions/germany.json +65 -65
  369. package/src/_modules/location/_collections/assets/country-subdivisions/ghana.json +41 -41
  370. package/src/_modules/location/_collections/assets/country-subdivisions/greece.json +53 -53
  371. package/src/_modules/location/_collections/assets/country-subdivisions/greenland.json +17 -17
  372. package/src/_modules/location/_collections/assets/country-subdivisions/grenada.json +29 -29
  373. package/src/_modules/location/_collections/assets/country-subdivisions/guatemala.json +89 -89
  374. package/src/_modules/location/_collections/assets/country-subdivisions/guinea-bissau.json +13 -13
  375. package/src/_modules/location/_collections/assets/country-subdivisions/guinea.json +33 -33
  376. package/src/_modules/location/_collections/assets/country-subdivisions/guyana.json +41 -41
  377. package/src/_modules/location/_collections/assets/country-subdivisions/haiti.json +41 -41
  378. package/src/_modules/location/_collections/assets/country-subdivisions/honduras.json +73 -73
  379. package/src/_modules/location/_collections/assets/country-subdivisions/hong-kong.json +4 -4
  380. package/src/_modules/location/_collections/assets/country-subdivisions/hungary.json +173 -173
  381. package/src/_modules/location/_collections/assets/country-subdivisions/iceland.json +37 -37
  382. package/src/_modules/location/_collections/assets/country-subdivisions/india.json +181 -181
  383. package/src/_modules/location/_collections/assets/country-subdivisions/indonesia.json +29 -29
  384. package/src/_modules/location/_collections/assets/country-subdivisions/iran-islamic-republic-of.json +125 -125
  385. package/src/_modules/location/_collections/assets/country-subdivisions/iraq.json +73 -73
  386. package/src/_modules/location/_collections/assets/country-subdivisions/ireland.json +17 -17
  387. package/src/_modules/location/_collections/assets/country-subdivisions/israel.json +25 -25
  388. package/src/_modules/location/_collections/assets/country-subdivisions/italy.json +81 -81
  389. package/src/_modules/location/_collections/assets/country-subdivisions/jamaica.json +57 -57
  390. package/src/_modules/location/_collections/assets/country-subdivisions/japan.json +189 -189
  391. package/src/_modules/location/_collections/assets/country-subdivisions/jordan.json +49 -49
  392. package/src/_modules/location/_collections/assets/country-subdivisions/kazakhstan.json +65 -65
  393. package/src/_modules/location/_collections/assets/country-subdivisions/kenya.json +33 -33
  394. package/src/_modules/location/_collections/assets/country-subdivisions/kiribati.json +13 -13
  395. package/src/_modules/location/_collections/assets/country-subdivisions/korea-democratic-people-s-republic-of.json +45 -45
  396. package/src/_modules/location/_collections/assets/country-subdivisions/korea-republic-of.json +69 -69
  397. package/src/_modules/location/_collections/assets/country-subdivisions/kuwait.json +25 -25
  398. package/src/_modules/location/_collections/assets/country-subdivisions/kyrgyzstan.json +33 -33
  399. package/src/_modules/location/_collections/assets/country-subdivisions/lao-people-s-democratic-republic.json +73 -73
  400. package/src/_modules/location/_collections/assets/country-subdivisions/latvia.json +477 -477
  401. package/src/_modules/location/_collections/assets/country-subdivisions/lebanon.json +33 -33
  402. package/src/_modules/location/_collections/assets/country-subdivisions/lesotho.json +41 -41
  403. package/src/_modules/location/_collections/assets/country-subdivisions/liberia.json +61 -61
  404. package/src/_modules/location/_collections/assets/country-subdivisions/libyan-arab-jamahiriya.json +89 -89
  405. package/src/_modules/location/_collections/assets/country-subdivisions/liechtenstein.json +45 -45
  406. package/src/_modules/location/_collections/assets/country-subdivisions/lithuania.json +41 -41
  407. package/src/_modules/location/_collections/assets/country-subdivisions/luxembourg.json +13 -13
  408. package/src/_modules/location/_collections/assets/country-subdivisions/macedonia-the-former-yugoslav-republic-of.json +337 -337
  409. package/src/_modules/location/_collections/assets/country-subdivisions/madagascar.json +25 -25
  410. package/src/_modules/location/_collections/assets/country-subdivisions/malawi.json +13 -13
  411. package/src/_modules/location/_collections/assets/country-subdivisions/malaysia.json +81 -81
  412. package/src/_modules/location/_collections/assets/country-subdivisions/maldives.json +33 -33
  413. package/src/_modules/location/_collections/assets/country-subdivisions/mali.json +37 -37
  414. package/src/_modules/location/_collections/assets/country-subdivisions/malta.json +273 -273
  415. package/src/_modules/location/_collections/assets/country-subdivisions/marshall-islands.json +9 -9
  416. package/src/_modules/location/_collections/assets/country-subdivisions/mauritania.json +53 -53
  417. package/src/_modules/location/_collections/assets/country-subdivisions/mauritius.json +69 -69
  418. package/src/_modules/location/_collections/assets/country-subdivisions/mexico.json +161 -161
  419. package/src/_modules/location/_collections/assets/country-subdivisions/micronesia-federated-states-of.json +17 -17
  420. package/src/_modules/location/_collections/assets/country-subdivisions/moldova-republic-of.json +149 -149
  421. package/src/_modules/location/_collections/assets/country-subdivisions/monaco.json +69 -69
  422. package/src/_modules/location/_collections/assets/country-subdivisions/mongolia.json +89 -89
  423. package/src/_modules/location/_collections/assets/country-subdivisions/montenegro.json +93 -93
  424. package/src/_modules/location/_collections/assets/country-subdivisions/morocco.json +65 -65
  425. package/src/_modules/location/_collections/assets/country-subdivisions/mozambique.json +45 -45
  426. package/src/_modules/location/_collections/assets/country-subdivisions/myanmar.json +57 -57
  427. package/src/_modules/location/_collections/assets/country-subdivisions/namibia.json +57 -57
  428. package/src/_modules/location/_collections/assets/country-subdivisions/nauru.json +57 -57
  429. package/src/_modules/location/_collections/assets/country-subdivisions/nepal.json +21 -21
  430. package/src/_modules/location/_collections/assets/country-subdivisions/netherlands.json +91 -91
  431. package/src/_modules/location/_collections/assets/country-subdivisions/new-zealand.json +111 -111
  432. package/src/_modules/location/_collections/assets/country-subdivisions/nicaragua.json +69 -69
  433. package/src/_modules/location/_collections/assets/country-subdivisions/niger.json +33 -33
  434. package/src/_modules/location/_collections/assets/country-subdivisions/nigeria.json +149 -149
  435. package/src/_modules/location/_collections/assets/country-subdivisions/norway.json +85 -85
  436. package/src/_modules/location/_collections/assets/country-subdivisions/oman.json +37 -37
  437. package/src/_modules/location/_collections/assets/country-subdivisions/pakistan.json +33 -33
  438. package/src/_modules/location/_collections/assets/country-subdivisions/palau.json +65 -65
  439. package/src/_modules/location/_collections/assets/country-subdivisions/palestinian-territory-occupied.json +65 -65
  440. package/src/_modules/location/_collections/assets/country-subdivisions/panama.json +53 -53
  441. package/src/_modules/location/_collections/assets/country-subdivisions/papua-new-guinea.json +81 -81
  442. package/src/_modules/location/_collections/assets/country-subdivisions/paraguay.json +73 -73
  443. package/src/_modules/location/_collections/assets/country-subdivisions/peru.json +105 -105
  444. package/src/_modules/location/_collections/assets/country-subdivisions/philippines.json +69 -69
  445. package/src/_modules/location/_collections/assets/country-subdivisions/poland.json +65 -65
  446. package/src/_modules/location/_collections/assets/country-subdivisions/portugal.json +81 -81
  447. package/src/_modules/location/_collections/assets/country-subdivisions/qatar.json +29 -29
  448. package/src/_modules/location/_collections/assets/country-subdivisions/romania.json +169 -169
  449. package/src/_modules/location/_collections/assets/country-subdivisions/russian-federation.json +499 -499
  450. package/src/_modules/location/_collections/assets/country-subdivisions/rwanda.json +21 -21
  451. package/src/_modules/location/_collections/assets/country-subdivisions/saint-helena-ascension-and-tristan-da-cunha.json +13 -13
  452. package/src/_modules/location/_collections/assets/country-subdivisions/saint-kitts-and-nevis.json +9 -9
  453. package/src/_modules/location/_collections/assets/country-subdivisions/saint-lucia.json +45 -45
  454. package/src/_modules/location/_collections/assets/country-subdivisions/saint-vincent-and-the-grenadines.json +25 -25
  455. package/src/_modules/location/_collections/assets/country-subdivisions/samoa.json +45 -45
  456. package/src/_modules/location/_collections/assets/country-subdivisions/san-marino.json +37 -37
  457. package/src/_modules/location/_collections/assets/country-subdivisions/sao-tome-and-principe.json +9 -9
  458. package/src/_modules/location/_collections/assets/country-subdivisions/saudi-arabia.json +53 -53
  459. package/src/_modules/location/_collections/assets/country-subdivisions/senegal.json +57 -57
  460. package/src/_modules/location/_collections/assets/country-subdivisions/serbia.json +9 -9
  461. package/src/_modules/location/_collections/assets/country-subdivisions/seychelles.json +101 -101
  462. package/src/_modules/location/_collections/assets/country-subdivisions/sierra-leone.json +17 -17
  463. package/src/_modules/location/_collections/assets/country-subdivisions/singapore.json +21 -21
  464. package/src/_modules/location/_collections/assets/country-subdivisions/slovakia.json +33 -33
  465. package/src/_modules/location/_collections/assets/country-subdivisions/slovenia.json +841 -841
  466. package/src/_modules/location/_collections/assets/country-subdivisions/solomon-islands.json +41 -41
  467. package/src/_modules/location/_collections/assets/country-subdivisions/somalia.json +73 -73
  468. package/src/_modules/location/_collections/assets/country-subdivisions/south-africa.json +37 -37
  469. package/src/_modules/location/_collections/assets/country-subdivisions/south-sudan.json +41 -41
  470. package/src/_modules/location/_collections/assets/country-subdivisions/spain.json +346 -346
  471. package/src/_modules/location/_collections/assets/country-subdivisions/sri-lanka.json +37 -37
  472. package/src/_modules/location/_collections/assets/country-subdivisions/sudan.json +69 -69
  473. package/src/_modules/location/_collections/assets/country-subdivisions/suriname.json +41 -41
  474. package/src/_modules/location/_collections/assets/country-subdivisions/swaziland.json +17 -17
  475. package/src/_modules/location/_collections/assets/country-subdivisions/sweden.json +85 -85
  476. package/src/_modules/location/_collections/assets/country-subdivisions/switzerland.json +105 -105
  477. package/src/_modules/location/_collections/assets/country-subdivisions/syrian-arab-republic.json +57 -57
  478. package/src/_modules/location/_collections/assets/country-subdivisions/taiwan-province-of-china.json +93 -93
  479. package/src/_modules/location/_collections/assets/country-subdivisions/tajikistan.json +17 -17
  480. package/src/_modules/location/_collections/assets/country-subdivisions/tanzania-united-republic-of.json +105 -105
  481. package/src/_modules/location/_collections/assets/country-subdivisions/thailand.json +313 -313
  482. package/src/_modules/location/_collections/assets/country-subdivisions/timor-leste.json +53 -53
  483. package/src/_modules/location/_collections/assets/country-subdivisions/togo.json +21 -21
  484. package/src/_modules/location/_collections/assets/country-subdivisions/tonga.json +21 -21
  485. package/src/_modules/location/_collections/assets/country-subdivisions/trinidad-and-tobago.json +65 -65
  486. package/src/_modules/location/_collections/assets/country-subdivisions/tunisia.json +97 -97
  487. package/src/_modules/location/_collections/assets/country-subdivisions/turkey.json +325 -325
  488. package/src/_modules/location/_collections/assets/country-subdivisions/turkmenistan.json +25 -25
  489. package/src/_modules/location/_collections/assets/country-subdivisions/tuvalu.json +33 -33
  490. package/src/_modules/location/_collections/assets/country-subdivisions/uganda.json +17 -17
  491. package/src/_modules/location/_collections/assets/country-subdivisions/ukraine.json +109 -109
  492. package/src/_modules/location/_collections/assets/country-subdivisions/united-arab-emirates.json +29 -29
  493. package/src/_modules/location/_collections/assets/country-subdivisions/united-kingdom.json +1196 -1196
  494. package/src/_modules/location/_collections/assets/country-subdivisions/united-states-minor-outlying-islands.json +37 -37
  495. package/src/_modules/location/_collections/assets/country-subdivisions/united-states.json +286 -286
  496. package/src/_modules/location/_collections/assets/country-subdivisions/uruguay.json +77 -77
  497. package/src/_modules/location/_collections/assets/country-subdivisions/uzbekistan.json +57 -57
  498. package/src/_modules/location/_collections/assets/country-subdivisions/vanuatu.json +25 -25
  499. package/src/_modules/location/_collections/assets/country-subdivisions/venezuela.json +101 -101
  500. package/src/_modules/location/_collections/assets/country-subdivisions/viet-nam.json +257 -257
  501. package/src/_modules/location/_collections/assets/country-subdivisions/yemen.json +85 -85
  502. package/src/_modules/location/_collections/assets/country-subdivisions/zambia.json +37 -37
  503. package/src/_modules/location/_collections/assets/country-subdivisions/zimbabwe.json +41 -41
  504. package/src/_modules/location/_collections/loc-country-divisions.const.ts +10 -10
  505. package/src/_modules/location/_collections/loc-country-isos.const.ts +8 -8
  506. package/src/_modules/location/_collections/loc-regions.util.spec.ts +61 -61
  507. package/src/_modules/location/_collections/loc-regions.util.ts +137 -137
  508. package/src/_modules/location/_collections/loc.util.spec.ts +52 -52
  509. package/src/_modules/location/_collections/loc.util.ts +74 -74
  510. package/src/_modules/location/_enums/loc-region.enum.ts +14 -14
  511. package/src/_modules/location/_enums/loc-sub-region.enum.ts +31 -31
  512. package/src/_modules/location/_enums/loc-subdivision-region-type.enum.ts +47 -47
  513. package/src/_modules/location/_models/loc-coordinates.interface.ts +7 -7
  514. package/src/_modules/location/_models/loc-country-division.interface.ts +8 -8
  515. package/src/_modules/location/_models/loc-country-iso.interface.ts +23 -23
  516. package/src/_modules/location/_models/loc-country-phone-code.interface.ts +9 -9
  517. package/src/_modules/location/_models/loc-division-collection.interface.ts +12 -12
  518. package/src/_modules/location/_models/loc-division-region-data.interface.ts +9 -9
  519. package/src/_modules/location/_models/loc-geo-ip-location.interface.ts +27 -27
  520. package/src/_modules/location/index.ts +22 -22
  521. package/src/_modules/messaging/README.md +279 -279
  522. package/src/_modules/messaging/_collections/msg-module-settings.const.ts +46 -46
  523. package/src/_modules/messaging/_enums/msg-attachment-type.enum.ts +26 -26
  524. package/src/_modules/messaging/_enums/msg-conversation-type.enum.ts +20 -20
  525. package/src/_modules/messaging/_enums/msg-delivery-status.enum.ts +17 -17
  526. package/src/_modules/messaging/_enums/msg-event-key.enum.ts +31 -31
  527. package/src/_modules/messaging/_enums/msg-participant-role.enum.ts +20 -20
  528. package/src/_modules/messaging/_enums/msg-provider-type.enum.ts +7 -7
  529. package/src/_modules/messaging/_enums/msg-status.enum.ts +26 -26
  530. package/src/_modules/messaging/_enums/msg-type.enum.ts +23 -23
  531. package/src/_modules/messaging/_models/msg-attachment.interface.ts +46 -46
  532. package/src/_modules/messaging/_models/msg-conversation.data-model.spec.ts +69 -69
  533. package/src/_modules/messaging/_models/msg-conversation.data-model.ts +96 -96
  534. package/src/_modules/messaging/_models/msg-mention.interface.ts +29 -29
  535. package/src/_modules/messaging/_models/msg-message.data-model.spec.ts +79 -79
  536. package/src/_modules/messaging/_models/msg-message.data-model.ts +127 -127
  537. package/src/_modules/messaging/_models/msg-participant.interface.ts +46 -46
  538. package/src/_modules/messaging/_models/msg-reaction.interface.ts +20 -20
  539. package/src/_modules/messaging/_models/msg-thread-info.interface.ts +35 -35
  540. package/src/_modules/messaging/_modules/agent/_enums/agt-process-step-type.enum.ts +35 -35
  541. package/src/_modules/messaging/_modules/agent/_enums/agt-tool-status.enum.ts +23 -23
  542. package/src/_modules/messaging/_modules/agent/_models/agt-process-step.interface.ts +55 -55
  543. package/src/_modules/messaging/_modules/agent/_models/agt-reasoning-info.interface.ts +26 -26
  544. package/src/_modules/messaging/_modules/agent/_models/agt-tool-usage.interface.ts +37 -37
  545. package/src/_modules/messaging/_modules/agent/index.ts +8 -8
  546. package/src/_modules/messaging/index.ts +28 -28
  547. package/src/_modules/ngx-models/_collections/angular-placeholders.ts +34 -34
  548. package/src/_modules/ngx-models/_collections/button-new-style-settings-presets.const.ts +181 -181
  549. package/src/_modules/ngx-models/_collections/dynamo-global.settings.spec.ts +74 -74
  550. package/src/_modules/ngx-models/_collections/dynamo-global.settings.ts +103 -103
  551. package/src/_modules/ngx-models/_enums/button-new/button-new-border-radius.enum.ts +16 -16
  552. package/src/_modules/ngx-models/_enums/button-new/button-new-icon-style-type.enum.ts +14 -14
  553. package/src/_modules/ngx-models/_enums/button-new/button-new-size.enum.ts +16 -16
  554. package/src/_modules/ngx-models/_enums/button-new/button-new-style-type.enum.ts +18 -18
  555. package/src/_modules/ngx-models/_enums/button-type.enum.ts +36 -36
  556. package/src/_modules/ngx-models/_enums/checkbox-label-position.enum.ts +8 -8
  557. package/src/_modules/ngx-models/_enums/container-type.enum.ts +11 -11
  558. package/src/_modules/ngx-models/_enums/errors/error-level.enum.ts +13 -13
  559. package/src/_modules/ngx-models/_enums/errors/error-notification-color.enum.ts +13 -13
  560. package/src/_modules/ngx-models/_enums/errors/error-ui-mode.enum.ts +13 -13
  561. package/src/_modules/ngx-models/_enums/field-appearance.enum.ts +14 -14
  562. package/src/_modules/ngx-models/_enums/field-type.enum.ts +52 -52
  563. package/src/_modules/ngx-models/_enums/file-type.enum.ts +12 -12
  564. package/src/_modules/ngx-models/_enums/flex/flex-layout-align.enum.ts +21 -21
  565. package/src/_modules/ngx-models/_enums/flex/flex-layout.enum.ts +5 -5
  566. package/src/_modules/ngx-models/_enums/form-access.enum.ts +9 -9
  567. package/src/_modules/ngx-models/_enums/form-reset-data.enum.ts +12 -12
  568. package/src/_modules/ngx-models/_enums/form-store-on.enum.ts +9 -9
  569. package/src/_modules/ngx-models/_enums/forms-new/field-new-validator-type.enum.ts +20 -20
  570. package/src/_modules/ngx-models/_enums/frames/header-item-type.enum.ts +15 -15
  571. package/src/_modules/ngx-models/_enums/frames/header-position.enum.ts +10 -10
  572. package/src/_modules/ngx-models/_enums/frames/side-nav-badge-color.enum.ts +13 -13
  573. package/src/_modules/ngx-models/_enums/html/input-types.enum.ts +27 -27
  574. package/src/_modules/ngx-models/_enums/material-color.enum.ts +16 -16
  575. package/src/_modules/ngx-models/_enums/material-tooltip-position.enum.ts +16 -16
  576. package/src/_modules/ngx-models/_enums/preconfigured-field-type.enum.ts +8 -8
  577. package/src/_modules/ngx-models/_enums/storage-type.enum.ts +15 -15
  578. package/src/_modules/ngx-models/_enums/validator-type.enum.ts +9 -9
  579. package/src/_modules/ngx-models/_enums/voice/audio-mime-type.enum.ts +14 -14
  580. package/src/_modules/ngx-models/_enums/voice/voice-provider-type.enum.ts +26 -26
  581. package/src/_modules/ngx-models/_enums/voice/voice-recorder-state.enum.ts +20 -20
  582. package/src/_modules/ngx-models/_models/control-models/button-new-style-settings.control-model.ts +37 -37
  583. package/src/_modules/ngx-models/_models/control-models/button-params.control-model.spec.ts +70 -70
  584. package/src/_modules/ngx-models/_models/control-models/button-params.control-model.ts +332 -332
  585. package/src/_modules/ngx-models/_models/control-models/chat/chat-column-layout-settings.control-model.ts +28 -28
  586. package/src/_modules/ngx-models/_models/control-models/data-handler-settings.control-model.spec.ts +90 -90
  587. package/src/_modules/ngx-models/_models/control-models/data-handler-settings.control-model.ts +134 -134
  588. package/src/_modules/ngx-models/_models/control-models/data-handler.control-model.ts +529 -529
  589. package/src/_modules/ngx-models/_models/control-models/errors/error-notification.control-model.ts +52 -52
  590. package/src/_modules/ngx-models/_models/control-models/errors/error-settings.control-model.ts +34 -34
  591. package/src/_modules/ngx-models/_models/control-models/errors/errors-pojo.spec.ts +86 -86
  592. package/src/_modules/ngx-models/_models/control-models/errors/errors-settings.control-model.ts +52 -52
  593. package/src/_modules/ngx-models/_models/control-models/field-settings.control-model.spec.ts +109 -109
  594. package/src/_modules/ngx-models/_models/control-models/field-settings.control-model.ts +133 -133
  595. package/src/_modules/ngx-models/_models/control-models/form-settings.control-model.spec.ts +109 -109
  596. package/src/_modules/ngx-models/_models/control-models/form-settings.control-model.ts +160 -160
  597. package/src/_modules/ngx-models/_models/control-models/forms-new/checkbox-field-new-settings.control-model.ts +25 -25
  598. package/src/_modules/ngx-models/_models/control-models/forms-new/date-field-new-settings.control-model.ts +26 -26
  599. package/src/_modules/ngx-models/_models/control-models/forms-new/date-range-field-new-settings.control-model.ts +42 -42
  600. package/src/_modules/ngx-models/_models/control-models/forms-new/datetime-field-new-settings.control-model.ts +35 -35
  601. package/src/_modules/ngx-models/_models/control-models/forms-new/datetime-range-field-new-settings.control-model.ts +35 -35
  602. package/src/_modules/ngx-models/_models/control-models/forms-new/field-new-settings.control-model.ts +85 -85
  603. package/src/_modules/ngx-models/_models/control-models/forms-new/field-new-types.ts +42 -42
  604. package/src/_modules/ngx-models/_models/control-models/forms-new/form-new-settings.control-model.ts +40 -40
  605. package/src/_modules/ngx-models/_models/control-models/forms-new/forms-new.spec.ts +179 -179
  606. package/src/_modules/ngx-models/_models/control-models/forms-new/index.ts +20 -20
  607. package/src/_modules/ngx-models/_models/control-models/forms-new/multiselect-field-new-settings.control-model.ts +27 -27
  608. package/src/_modules/ngx-models/_models/control-models/forms-new/number-field-new-settings.control-model.ts +24 -24
  609. package/src/_modules/ngx-models/_models/control-models/forms-new/password-field-new-settings.control-model.ts +35 -35
  610. package/src/_modules/ngx-models/_models/control-models/forms-new/radio-select-field-new-settings.control-model.ts +35 -35
  611. package/src/_modules/ngx-models/_models/control-models/forms-new/select-field-new-settings.control-model.ts +46 -46
  612. package/src/_modules/ngx-models/_models/control-models/forms-new/slider-field-new-settings.control-model.ts +37 -37
  613. package/src/_modules/ngx-models/_models/control-models/forms-new/slider-range-field-new-settings.control-model.ts +45 -45
  614. package/src/_modules/ngx-models/_models/control-models/forms-new/text-field-new-settings.control-model.ts +30 -30
  615. package/src/_modules/ngx-models/_models/control-models/forms-new/textarea-field-new-settings.control-model.ts +22 -22
  616. package/src/_modules/ngx-models/_models/control-models/frames/frames-pojo.spec.ts +108 -108
  617. package/src/_modules/ngx-models/_models/control-models/frames/header-item-settings.control-model.ts +52 -52
  618. package/src/_modules/ngx-models/_models/control-models/frames/main-frame-settings.control-model.ts +40 -40
  619. package/src/_modules/ngx-models/_models/control-models/frames/side-nav-item-settings.control-model.ts +55 -55
  620. package/src/_modules/ngx-models/_models/control-models/frames/side-nav-settings.control-model.ts +30 -30
  621. package/src/_modules/ngx-models/_models/control-models/select.control-model.spec.ts +45 -45
  622. package/src/_modules/ngx-models/_models/control-models/select.control-model.ts +28 -28
  623. package/src/_modules/ngx-models/_models/control-models/voice/voice-pojo.spec.ts +111 -111
  624. package/src/_modules/ngx-models/_models/control-models/voice/voice-providers-settings.control-model.ts +74 -74
  625. package/src/_modules/ngx-models/_models/control-models/voice/voice-record-button-settings.control-model.ts +42 -42
  626. package/src/_modules/ngx-models/_models/control-models/voice/voice-recorder-settings.control-model.ts +37 -37
  627. package/src/_modules/ngx-models/_models/interfaces/button-new-settings.interface.ts +74 -74
  628. package/src/_modules/ngx-models/_models/interfaces/confirm-settings.interface.ts +20 -20
  629. package/src/_modules/ngx-models/_models/interfaces/global-settings.interface.ts +67 -67
  630. package/src/_modules/ngx-models/_models/interfaces/select-options-custom-constructor.interface.ts +40 -40
  631. package/src/_modules/ngx-models/_models/interfaces/storage.service.spec.ts +18 -18
  632. package/src/_modules/ngx-models/_models/interfaces/storage.service.ts +40 -40
  633. package/src/_modules/ngx-models/_models/interfaces/voice/speak-options.interface.ts +19 -19
  634. package/src/_modules/ngx-models/_models/interfaces/voice/speak-result.interface.ts +14 -14
  635. package/src/_modules/ngx-models/_models/interfaces/voice/transcribe-options.interface.ts +14 -14
  636. package/src/_modules/ngx-models/_models/interfaces/voice/transcribe-result.interface.ts +15 -15
  637. package/src/_modules/ngx-models/_models/interfaces/voice/voice-profile.interface.ts +18 -18
  638. package/src/_modules/ngx-models/_models/interfaces/voice/voice-provider-init.interface.ts +21 -21
  639. package/src/_modules/ngx-models/_utils/shared.service.spec.ts +7 -7
  640. package/src/_modules/ngx-models/_utils/shared.service.ts +541 -541
  641. package/src/_modules/ngx-models/index.ts +110 -110
  642. package/src/_modules/pipe/_collections/pip-transforms.const.ts +42 -42
  643. package/src/_modules/pipe/_collections/utils/pip-country-pipe.util.spec.ts +47 -47
  644. package/src/_modules/pipe/_collections/utils/pip-country-pipe.util.ts +41 -41
  645. package/src/_modules/pipe/_collections/utils/pip-custom-pipe.util.spec.ts +39 -39
  646. package/src/_modules/pipe/_collections/utils/pip-custom-pipe.util.ts +30 -30
  647. package/src/_modules/pipe/_collections/utils/pip-division-pipe.util.spec.ts +41 -41
  648. package/src/_modules/pipe/_collections/utils/pip-division-pipe.util.ts +36 -36
  649. package/src/_modules/pipe/_collections/utils/pip-json-pipe.util.spec.ts +62 -62
  650. package/src/_modules/pipe/_collections/utils/pip-json-pipe.util.ts +17 -17
  651. package/src/_modules/pipe/_collections/utils/pip-list-pipe.util.spec.ts +34 -34
  652. package/src/_modules/pipe/_collections/utils/pip-list-pipe.util.ts +25 -25
  653. package/src/_modules/pipe/_collections/utils/pip-multi-pipe-pipe.util.spec.ts +67 -67
  654. package/src/_modules/pipe/_collections/utils/pip-multi-pipe-pipe.util.ts +226 -226
  655. package/src/_modules/pipe/_collections/utils/pip-obj-key-pipe.util.spec.ts +28 -28
  656. package/src/_modules/pipe/_collections/utils/pip-obj-key-pipe.util.ts +21 -21
  657. package/src/_modules/pipe/_collections/utils/pip-range-pipe.util.spec.ts +59 -59
  658. package/src/_modules/pipe/_collections/utils/pip-range-pipe.util.ts +106 -106
  659. package/src/_modules/pipe/_collections/utils/pip-region-pipe.util.spec.ts +31 -31
  660. package/src/_modules/pipe/_collections/utils/pip-region-pipe.util.ts +35 -35
  661. package/src/_modules/pipe/_collections/utils/pip-replace-pipe.util.spec.ts +44 -44
  662. package/src/_modules/pipe/_collections/utils/pip-replace-pipe.util.ts +23 -23
  663. package/src/_modules/pipe/_collections/utils/pip-slider-pipe.util.spec.ts +21 -21
  664. package/src/_modules/pipe/_collections/utils/pip-slider-pipe.util.ts +33 -33
  665. package/src/_modules/pipe/_collections/utils/pip-smart-replace-pipe.util.spec.ts +62 -62
  666. package/src/_modules/pipe/_collections/utils/pip-smart-replace-pipe.util.ts +80 -80
  667. package/src/_modules/pipe/_enums/pip-range-pipe-setting.enum.ts +15 -15
  668. package/src/_modules/pipe/_enums/pip.enum.ts +65 -65
  669. package/src/_modules/pipe/_models/pip-multi-pipe-settings.type.ts +8 -8
  670. package/src/_modules/pipe/_models/pip-transforms.interface.ts +30 -30
  671. package/src/_modules/pipe/index.ts +30 -30
  672. package/src/_modules/security/_collections/stored-secret.util.spec.ts +81 -81
  673. package/src/_modules/security/_collections/stored-secret.util.ts +96 -96
  674. package/src/_modules/security/_models/stored-secret.control-model.ts +55 -55
  675. package/src/_modules/security/index.ts +9 -9
  676. package/src/_modules/socket/_enums/sck-event-key.enum.ts +21 -21
  677. package/src/_modules/socket/_models/sck-client-params.control-model.spec.ts +67 -67
  678. package/src/_modules/socket/_models/sck-client-params.control-model.ts +50 -50
  679. package/src/_modules/socket/_models/sck-socket-event.control-model.spec.ts +89 -66
  680. package/src/_modules/socket/_models/sck-socket-event.control-model.ts +185 -172
  681. package/src/_modules/socket/_services/sck-client.service-base.spec.ts +99 -99
  682. package/src/_modules/socket/_services/sck-client.service-base.ts +353 -353
  683. package/src/_modules/socket/index.ts +14 -14
  684. package/src/_modules/state-machine/_models/state-machine-config.interface.ts +19 -19
  685. package/src/_modules/state-machine/_models/state-machine-event.interface.ts +25 -25
  686. package/src/_modules/state-machine/_models/state-machine.control-model.spec.ts +314 -314
  687. package/src/_modules/state-machine/_models/state-machine.control-model.ts +298 -298
  688. package/src/_modules/state-machine/_models/state-transition-result.interface.ts +53 -53
  689. package/src/_modules/state-machine/_models/state-transition.interface.ts +30 -30
  690. package/src/_modules/state-machine/index.ts +6 -6
  691. package/src/_modules/test/_collections/tst-module-settings.const.ts +67 -67
  692. package/src/_modules/test/index.ts +5 -5
  693. package/src/_modules/usage/_collections/usg-module-settings.const.ts +33 -33
  694. package/src/_modules/usage/_models/usg-action.control-model.spec.ts +27 -27
  695. package/src/_modules/usage/_models/usg-action.control-model.ts +28 -28
  696. package/src/_modules/usage/_models/usg-daily-usage-data.control-model.spec.ts +36 -36
  697. package/src/_modules/usage/_models/usg-daily-usage-data.control-model.ts +35 -35
  698. package/src/_modules/usage/_models/usg-data.control-model.spec.ts +41 -41
  699. package/src/_modules/usage/_models/usg-data.control-model.ts +35 -35
  700. package/src/_modules/usage/_models/usg-session.data-model.spec.ts +97 -97
  701. package/src/_modules/usage/_models/usg-session.data-model.ts +72 -72
  702. package/src/_modules/usage/index.ts +11 -11
  703. package/src/index.ts +104 -104
  704. package/tsconfig.app.json +12 -12
  705. package/tsconfig.json +31 -31
  706. package/tsconfig.test.json +16 -16
  707. package/tslint.json +153 -153
@@ -1,606 +1,606 @@
1
- import { DyFM_Crypto } from './crypto.util';
2
-
3
- describe('| DyFM_Crypto edge cases', () => {
4
- const testKey = 'test-secret-key-123';
5
- const testData = { id: 1, name: 'test' };
6
-
7
- describe('| edge cases', () => {
8
- describe('| empty and null values', () => {
9
- it('| should handle empty objects', () => {
10
- const emptyObj = {};
11
- const encrypted = DyFM_Crypto.encrypt(emptyObj, testKey);
12
- const decrypted = DyFM_Crypto.decrypt(encrypted, testKey);
13
- expect(decrypted).toEqual(emptyObj);
14
- });
15
-
16
- it('| should handle empty arrays', () => {
17
- const emptyArr: any[] = [];
18
- const encrypted = DyFM_Crypto.encrypt(emptyArr, testKey);
19
- const decrypted = DyFM_Crypto.decrypt(encrypted, testKey);
20
- expect(decrypted).toEqual(emptyArr);
21
- });
22
-
23
- it('| should handle null values in objects', () => {
24
- const dataWithNull = {
25
- id: 1,
26
- name: null,
27
- nested: { value: null }
28
- };
29
- const encrypted = DyFM_Crypto.encrypt(dataWithNull, testKey);
30
- const decrypted = DyFM_Crypto.decrypt(encrypted, testKey);
31
- expect(decrypted).toEqual(dataWithNull);
32
- });
33
-
34
- it('| should handle undefined values in objects', () => {
35
- const dataWithUndefined = {
36
- id: 1,
37
- name: undefined,
38
- nested: { value: undefined }
39
- };
40
- const encrypted = DyFM_Crypto.encrypt(dataWithUndefined, testKey);
41
- const decrypted = DyFM_Crypto.decrypt(encrypted, testKey);
42
- expect(decrypted).toEqual({ id: 1, nested: {} });
43
- });
44
- });
45
-
46
- describe('| key edge cases', () => {
47
- it('| should handle very long keys', () => {
48
- const longKey = 'a'.repeat(1000);
49
- const encrypted = DyFM_Crypto.encrypt(testData, longKey);
50
- const decrypted = DyFM_Crypto.decrypt(encrypted, longKey);
51
- expect(decrypted).toEqual(testData);
52
- });
53
-
54
- it('| should handle empty key', () => {
55
- expect(() => DyFM_Crypto.encrypt(testData, '')).toThrow();
56
- });
57
-
58
- it('| should handle whitespace-only keys', () => {
59
- expect(() => DyFM_Crypto.encrypt(testData, ' ')).toThrow();
60
- });
61
- });
62
-
63
- describe('| encrypted data manipulation', () => {
64
- it('| should detect when encrypted data is truncated', () => {
65
- const encrypted = DyFM_Crypto.encrypt(testData, testKey);
66
- const truncated = encrypted.slice(0, -10);
67
- expect(() => DyFM_Crypto.decrypt(truncated, testKey)).toThrow();
68
- });
69
-
70
- it('| should detect when encrypted data is extended', () => {
71
- const encrypted = DyFM_Crypto.encrypt(testData, testKey);
72
- const extended = encrypted + 'A'.repeat(10);
73
- expect(() => DyFM_Crypto.decrypt(extended, testKey)).toThrow();
74
- });
75
-
76
- it('| should detect when encrypted data is modified in the middle', () => {
77
- const encrypted = DyFM_Crypto.encrypt(testData, testKey);
78
- const midPoint = Math.floor(encrypted.length / 2);
79
- const modified = encrypted.slice(0, midPoint) + 'X' + encrypted.slice(midPoint + 1);
80
- expect(() => DyFM_Crypto.decrypt(modified, testKey)).toThrow();
81
- });
82
- });
83
-
84
- describe('| JSON handling edge cases', () => {
85
- it('| should handle double-stringified JSON data correctly', () => {
86
- const testData = {
87
- username: 'Itharen',
88
- password: 'asdasd',
89
- roles: [],
90
- permissions: [],
91
- activeSubscriptions: [],
92
- clientUserIds: {},
93
- oauth2Data: {}
94
- };
95
-
96
- // Simulate double stringification
97
- const doubleStringified = JSON.stringify(JSON.stringify(testData));
98
-
99
- const encrypted = DyFM_Crypto.encrypt(doubleStringified, testKey);
100
- const decrypted = DyFM_Crypto.decrypt(encrypted, testKey);
101
-
102
- // The crypto utility should automatically handle double-stringified JSON
103
- // and return the original object directly
104
- expect(decrypted).toEqual(testData);
105
- });
106
-
107
- xit('| should handle character-by-character JSON data correctly', () => {
108
- // Create a character-by-character object like in the example
109
- const charByCharData = {
110
- '0': '{',
111
- '1': '"',
112
- '2': '_',
113
- '3': '_',
114
- '4': 'c',
115
- '5': 'r',
116
- '6': 'e',
117
- '7': 'a',
118
- '8': 't',
119
- '9': 'e',
120
- '10': 'd',
121
- '11': '"',
122
- '12': ':',
123
- '13': '"',
124
- '14': '2',
125
- '15': '0',
126
- '16': '2',
127
- '17': '5',
128
- '18': '-',
129
- '19': '0',
130
- '20': '5',
131
- '21': '-',
132
- '22': '1',
133
- '23': '3',
134
- '24': 'T',
135
- '25': '1',
136
- '26': '0',
137
- '27': ':',
138
- '28': '4',
139
- '29': '0',
140
- '30': ':',
141
- '31': '4',
142
- '32': '4',
143
- '33': '.',
144
- '34': '7',
145
- '35': '6',
146
- '36': '0',
147
- '37': 'Z',
148
- '38': '"',
149
- '39': ',',
150
- '40': '"',
151
- '41': '_',
152
- '42': '_',
153
- '43': 'l',
154
- '44': 'a',
155
- '45': 's',
156
- '46': 't',
157
- '47': 'M',
158
- '48': 'o',
159
- '49': 'd',
160
- '50': 'i',
161
- '51': 'f',
162
- '52': 'i',
163
- '53': 'e',
164
- '54': 'd',
165
- '55': '"',
166
- '56': ':',
167
- '57': '"',
168
- '58': '2',
169
- '59': '0',
170
- '60': '2',
171
- '61': '5',
172
- '62': '-',
173
- '63': '0',
174
- '64': '5',
175
- '65': '-',
176
- '66': '1',
177
- '67': '3',
178
- '68': 'T',
179
- '69': '1',
180
- '70': '0',
181
- '71': ':',
182
- '72': '4',
183
- '73': '0',
184
- '74': ':',
185
- '75': '4',
186
- '76': '4',
187
- '77': '.',
188
- '78': '7',
189
- '79': '6',
190
- '80': '0',
191
- '81': 'Z',
192
- '82': '"',
193
- '83': ',',
194
- '84': '"',
195
- '85': '_',
196
- '86': '_',
197
- '87': 'v',
198
- '88': '"',
199
- '89': ':',
200
- '90': '0',
201
- '91': ',',
202
- '92': '"',
203
- '93': 'u',
204
- '94': 's',
205
- '95': 'e',
206
- '96': 'r',
207
- '97': 'n',
208
- '98': 'a',
209
- '99': 'm',
210
- '100': 'e',
211
- '101': '"',
212
- '102': ':',
213
- '103': '"',
214
- '104': 'I',
215
- '105': 't',
216
- '106': 'h',
217
- '107': 'a',
218
- '108': 'r',
219
- '109': 'e',
220
- '110': 'n',
221
- '111': '"',
222
- '112': ',',
223
- '113': '"',
224
- '114': 'p',
225
- '115': 'r',
226
- '116': 'e',
227
- '117': 'v',
228
- '118': 'i',
229
- '119': 'o',
230
- '120': 'u',
231
- '121': 's',
232
- '122': 'E',
233
- '123': 'm',
234
- '124': 'a',
235
- '125': 'i',
236
- '126': 'l',
237
- '127': 's',
238
- '128': '"',
239
- '129': ':',
240
- '130': '[',
241
- '131': ']',
242
- '132': ',',
243
- '133': '"',
244
- '134': 'p',
245
- '135': 'a',
246
- '136': 's',
247
- '137': 's',
248
- '138': 'w',
249
- '139': 'o',
250
- '140': 'r',
251
- '141': 'd',
252
- '142': '"',
253
- '143': ':',
254
- '144': '"',
255
- '145': 'a',
256
- '146': 's',
257
- '147': 'd',
258
- '148': 'a',
259
- '149': 's',
260
- '150': 'd',
261
- '151': '"',
262
- '152': ',',
263
- '153': '"',
264
- '154': 'r',
265
- '155': 'o',
266
- '156': 'l',
267
- '157': 'e',
268
- '158': 's',
269
- '159': '"',
270
- '160': ':',
271
- '161': '[',
272
- '162': ']',
273
- '163': ',',
274
- '164': '"',
275
- '165': 'p',
276
- '166': 'e',
277
- '167': 'r',
278
- '168': 'm',
279
- '169': 'i',
280
- '170': 's',
281
- '171': 's',
282
- '172': 'i',
283
- '173': 'o',
284
- '174': 'n',
285
- '175': 's',
286
- '176': '"',
287
- '177': ':',
288
- '178': '[',
289
- '179': ']',
290
- '180': ',',
291
- '181': '"',
292
- '182': 'a',
293
- '183': 'c',
294
- '184': 't',
295
- '185': 'i',
296
- '186': 'v',
297
- '187': 'e',
298
- '188': 'S',
299
- '189': 'u',
300
- '190': 'b',
301
- '191': 's',
302
- '192': 'c',
303
- '193': 'r',
304
- '194': 'i',
305
- '195': 'p',
306
- '196': 't',
307
- '197': 'i',
308
- '198': 'o',
309
- '199': 'n',
310
- '200': 's',
311
- '201': '"',
312
- '202': ':',
313
- '203': '[',
314
- '204': ']',
315
- '205': ',',
316
- '206': '"',
317
- '207': 'c',
318
- '208': 'l',
319
- '209': 'i',
320
- '210': 'e',
321
- '211': 'n',
322
- '212': 't',
323
- '213': 'U',
324
- '214': 's',
325
- '215': 'e',
326
- '216': 'r',
327
- '217': 'I',
328
- '218': 'd',
329
- '219': 's',
330
- '220': '"',
331
- '221': ':',
332
- '222': '{',
333
- '223': '}',
334
- '224': ',',
335
- '225': '"',
336
- '226': 'o',
337
- '227': 'a',
338
- '228': 'u',
339
- '229': 't',
340
- '230': 'h',
341
- '231': '2',
342
- '232': 'D',
343
- '233': 'a',
344
- '234': 't',
345
- '235': 'a',
346
- '236': '"',
347
- '237': ':',
348
- '238': '{',
349
- '239': '}',
350
- '240': '}'
351
- };
352
-
353
- const encrypted = DyFM_Crypto.encrypt(charByCharData, testKey);
354
- const decrypted = DyFM_Crypto.decrypt(encrypted, testKey);
355
-
356
- // Should be able to parse the decrypted data back to the original object
357
- expect(decrypted).toEqual(charByCharData);
358
- });
359
- });
360
-
361
- describe('| cross-environment consistency', () => {
362
- it('| should produce same encrypted output for same input across different environments', () => {
363
- const testData = {
364
- id: 1,
365
- name: 'test',
366
- timestamp: '2024-03-20T10:00:00Z'
367
- };
368
- const key = 'test-secret-key-123';
369
-
370
- // Simulate different environments by creating new instances
371
- const encrypted1 = DyFM_Crypto.encrypt(testData, key);
372
- const encrypted2 = DyFM_Crypto.encrypt(testData, key);
373
-
374
- expect(encrypted1).toBe(encrypted2);
375
- expect(DyFM_Crypto.decrypt(encrypted1, key)).toEqual(testData);
376
- expect(DyFM_Crypto.decrypt(encrypted2, key)).toEqual(testData);
377
- });
378
-
379
- it('| should maintain encryption consistency with different data types', () => {
380
- const testCases = [
381
- { data: { id: 1 }, key: 'key1' },
382
- { data: 'string data', key: 'key2' },
383
- { data: [1, 2, 3], key: 'key3' },
384
- { data: { nested: { value: true } }, key: 'key4' }
385
- ];
386
-
387
- testCases.forEach(({ data, key }) => {
388
- const encrypted1 = DyFM_Crypto.encrypt(data, key);
389
- const encrypted2 = DyFM_Crypto.encrypt(data, key);
390
- expect(encrypted1).toBe(encrypted2);
391
- });
392
- });
393
- });
394
-
395
- describe('| database persistence', () => {
396
- interface UserData {
397
- id: number;
398
- name: string;
399
- lastLogin: string;
400
- preferences: {
401
- language: string;
402
- timezone: string;
403
- };
404
- }
405
-
406
- it('| should successfully encrypt and decrypt data after database storage simulation', () => {
407
- const originalData = {
408
- id: 1,
409
- name: 'test user',
410
- email: 'test@example.com',
411
- settings: {
412
- theme: 'dark',
413
- notifications: true
414
- }
415
- };
416
- const key = 'db-storage-key';
417
-
418
- // Simulate database storage and retrieval
419
- const encrypted = DyFM_Crypto.encrypt(originalData, key);
420
- const storedData = encrypted; // Simulating database storage
421
- const retrievedData = storedData; // Simulating database retrieval
422
- const decrypted = DyFM_Crypto.decrypt(retrievedData, key);
423
-
424
- expect(decrypted).toEqual(originalData);
425
- });
426
-
427
- it('| should handle multiple encryption/decryption cycles for database operations', () => {
428
- const userData: UserData = {
429
- id: 1,
430
- name: 'test user',
431
- lastLogin: '2024-01-01T10:00:00.000Z',
432
- preferences: {
433
- language: 'en',
434
- timezone: 'UTC'
435
- }
436
- };
437
- const key = 'persistent-key';
438
-
439
- // Simulate multiple database operations
440
- const encrypted1 = DyFM_Crypto.encrypt(userData, key);
441
- const decrypted1 = DyFM_Crypto.decrypt(encrypted1, key) as UserData;
442
-
443
- // Simulate data update with a different timestamp
444
- const updatedData: UserData = {
445
- ...decrypted1,
446
- lastLogin: '2024-01-02T15:30:00.000Z'
447
- };
448
- const encrypted2 = DyFM_Crypto.encrypt(updatedData, key);
449
- const decrypted2 = DyFM_Crypto.decrypt(encrypted2, key) as UserData;
450
-
451
- expect(decrypted1).toEqual(userData);
452
- expect(decrypted2).toEqual(updatedData);
453
- expect(decrypted2.lastLogin).not.toBe(userData.lastLogin);
454
- });
455
-
456
- it('| should maintain data integrity through multiple database operations', () => {
457
- const sensitiveData = {
458
- id: 1,
459
- password: 'hashed-password-123',
460
- securityQuestions: [
461
- { question: 'What is your pet name?', answer: 'Fluffy' },
462
- { question: 'Where were you born?', answer: 'New York' }
463
- ]
464
- };
465
- const key = 'sensitive-data-key';
466
-
467
- // Simulate multiple database operations with the same data
468
- const encrypted1 = DyFM_Crypto.encrypt(sensitiveData, key);
469
- const decrypted1 = DyFM_Crypto.decrypt(encrypted1, key);
470
- const encrypted2 = DyFM_Crypto.encrypt(decrypted1, key);
471
- const decrypted2 = DyFM_Crypto.decrypt(encrypted2, key);
472
-
473
- expect(decrypted1).toEqual(sensitiveData);
474
- expect(decrypted2).toEqual(sensitiveData);
475
- expect(encrypted1).toBe(encrypted2); // Different encryption instances
476
- });
477
- });
478
-
479
- describe('| special characters', () => {
480
- it('| should handle Unicode characters', () => {
481
- const unicodeData = {
482
- text: 'Hello 世界! 🌍',
483
- emoji: '👋',
484
- special: '!!!@@@###$$$%%%^^^&&&***((()))___+++---===[[[]]]{{{}}}|||;;;:::,,,...<<<>>>' +
485
- 'ĐĐĐđđđßßߤ¤¤×××÷÷÷¨¨¨¨~~~ˇˇˇ^^^˘˘˘°°°˛˛˛```˙˙˙´´´˝˝˝˝¸¸¸§§§' +
486
- '???ééééáááűűűúúúőőőóóóüüüöööíííÉÉÉÁÁÁŰŰŰÚÚÚŐŐŐÓÓÓÜÖÖÖÍÍÍ'
487
- };
488
- const encrypted = DyFM_Crypto.encrypt(unicodeData, testKey);
489
- const decrypted = DyFM_Crypto.decrypt(encrypted, testKey);
490
- expect(decrypted).toEqual(unicodeData);
491
- });
492
-
493
- it('| should handle special characters in object keys', () => {
494
- const specialKeyData = {
495
- 'key-with-spaces': 'value',
496
- 'key.with.dots': 'value',
497
- 'key-with-special-chars!@#': 'value',
498
- 'key-with-unicode-世界': 'value'
499
- };
500
- const encrypted = DyFM_Crypto.encrypt(specialKeyData, testKey);
501
- const decrypted = DyFM_Crypto.decrypt(encrypted, testKey);
502
- expect(decrypted).toEqual(specialKeyData);
503
- });
504
-
505
- it('| should handle special characters in nested objects', () => {
506
- const nestedData = {
507
- level1: {
508
- 'special-key!@#': {
509
- 'nested-key-世界': 'value with special chars!@#'
510
- }
511
- }
512
- };
513
- const encrypted = DyFM_Crypto.encrypt(nestedData, testKey);
514
- const decrypted = DyFM_Crypto.decrypt(encrypted, testKey);
515
- expect(decrypted).toEqual(nestedData);
516
- });
517
-
518
- it('| should handle special characters in arrays', () => {
519
- const arrayData = [
520
- 'Hello 世界!',
521
- { 'special-key': 'value with !@#' },
522
- ['nested', 'array', 'with', 'special', 'chars!@#']
523
- ];
524
- const encrypted = DyFM_Crypto.encrypt(arrayData, testKey);
525
- const decrypted = DyFM_Crypto.decrypt(encrypted, testKey);
526
- expect(decrypted).toEqual(arrayData);
527
- });
528
- });
529
-
530
- describe('| base64 padding and parsing edge cases', () => {
531
- it('| should handle encrypted data missing 1 padding character', () => {
532
- const encrypted = DyFM_Crypto.encrypt(testData, testKey);
533
- // Remove last character (which might be padding)
534
- const withoutPadding = encrypted.slice(0, -1);
535
- expect(() => DyFM_Crypto.decrypt(withoutPadding, testKey)).toThrow();
536
- });
537
-
538
- it('| should handle encrypted data missing 2 padding characters', () => {
539
- const encrypted = DyFM_Crypto.encrypt(testData, testKey);
540
- // Remove last 2 characters
541
- const withoutPadding = encrypted.slice(0, -2);
542
- expect(() => DyFM_Crypto.decrypt(withoutPadding, testKey)).toThrow();
543
- });
544
-
545
- it('| should handle encrypted data missing 3 padding characters', () => {
546
- const encrypted = DyFM_Crypto.encrypt(testData, testKey);
547
- // Remove last 3 characters
548
- const withoutPadding = encrypted.slice(0, -3);
549
- expect(() => DyFM_Crypto.decrypt(withoutPadding, testKey)).toThrow();
550
- });
551
-
552
- it('| should detect base64 strings that are too short to be valid (less than 48 bytes)', () => {
553
- // Create a minimal base64 string that parses to less than 48 bytes
554
- // 18 bytes = 24 base64 characters (18 * 4/3 = 24)
555
- const shortBase64 = 'ABCDEFGHIJKLMNOPQRSTUVW'; // 24 chars = 18 bytes when parsed
556
- expect(() => DyFM_Crypto.decrypt(shortBase64, testKey)).toThrow();
557
- });
558
-
559
- it('| should handle base64 strings with incorrect padding', () => {
560
- const encrypted = DyFM_Crypto.encrypt(testData, testKey);
561
- // Add incorrect padding characters
562
- const withIncorrectPadding = encrypted + '====';
563
- expect(() => DyFM_Crypto.decrypt(withIncorrectPadding, testKey)).toThrow();
564
- });
565
-
566
- it('| should handle URL-safe base64 strings ending with dash', () => {
567
- // Create a base64 string ending with '-' (which becomes '+' in regular base64)
568
- const encrypted = DyFM_Crypto.encrypt(testData, testKey);
569
- // Replace last character with dash if it's not already
570
- const withDash = encrypted.slice(0, -1) + '-';
571
- expect(() => DyFM_Crypto.decrypt(withDash, testKey)).toThrow();
572
- });
573
-
574
- it('| should handle URL-safe base64 strings ending with underscore', () => {
575
- // Create a base64 string ending with '_' (which becomes '/' in regular base64)
576
- const encrypted = DyFM_Crypto.encrypt(testData, testKey);
577
- // Replace last character with underscore if it's not already
578
- const withUnderscore = encrypted.slice(0, -1) + '_';
579
- expect(() => DyFM_Crypto.decrypt(withUnderscore, testKey)).toThrow();
580
- });
581
-
582
- it('| should handle URL-safe base64 strings with no padding characters', () => {
583
- const encrypted = DyFM_Crypto.encrypt(testData, testKey);
584
- // Encrypted data should already have no padding (removed in encrypt method)
585
- // This test verifies that decryption works without padding
586
- expect(() => DyFM_Crypto.decrypt(encrypted, testKey)).not.toThrow();
587
- const decrypted = DyFM_Crypto.decrypt(encrypted, testKey);
588
- expect(decrypted).toEqual(testData);
589
- });
590
-
591
- it('| should handle very short base64 strings that parse to exactly 18 bytes', () => {
592
- // Create a base64 string that parses to exactly 18 bytes
593
- // 18 bytes = 24 base64 characters
594
- const exactly18Bytes = 'ABCDEFGHIJKLMNOPQRSTUVWX'; // 24 chars
595
- expect(() => DyFM_Crypto.decrypt(exactly18Bytes, testKey)).toThrow();
596
- });
597
-
598
- it('| should handle base64 strings that are valid format but too short after parsing', () => {
599
- // Create a valid URL-safe base64 string that's too short
600
- const validButShort = 'ABCDEFGHIJKLMNOPQRSTUVWXY'; // 25 chars, valid format
601
- expect(() => DyFM_Crypto.decrypt(validButShort, testKey)).toThrow();
602
- });
603
- });
604
- });
605
-
1
+ import { DyFM_Crypto } from './crypto.util';
2
+
3
+ describe('| DyFM_Crypto edge cases', () => {
4
+ const testKey = 'test-secret-key-123';
5
+ const testData = { id: 1, name: 'test' };
6
+
7
+ describe('| edge cases', () => {
8
+ describe('| empty and null values', () => {
9
+ it('| should handle empty objects', () => {
10
+ const emptyObj = {};
11
+ const encrypted = DyFM_Crypto.encrypt(emptyObj, testKey);
12
+ const decrypted = DyFM_Crypto.decrypt(encrypted, testKey);
13
+ expect(decrypted).toEqual(emptyObj);
14
+ });
15
+
16
+ it('| should handle empty arrays', () => {
17
+ const emptyArr: any[] = [];
18
+ const encrypted = DyFM_Crypto.encrypt(emptyArr, testKey);
19
+ const decrypted = DyFM_Crypto.decrypt(encrypted, testKey);
20
+ expect(decrypted).toEqual(emptyArr);
21
+ });
22
+
23
+ it('| should handle null values in objects', () => {
24
+ const dataWithNull = {
25
+ id: 1,
26
+ name: null,
27
+ nested: { value: null }
28
+ };
29
+ const encrypted = DyFM_Crypto.encrypt(dataWithNull, testKey);
30
+ const decrypted = DyFM_Crypto.decrypt(encrypted, testKey);
31
+ expect(decrypted).toEqual(dataWithNull);
32
+ });
33
+
34
+ it('| should handle undefined values in objects', () => {
35
+ const dataWithUndefined = {
36
+ id: 1,
37
+ name: undefined,
38
+ nested: { value: undefined }
39
+ };
40
+ const encrypted = DyFM_Crypto.encrypt(dataWithUndefined, testKey);
41
+ const decrypted = DyFM_Crypto.decrypt(encrypted, testKey);
42
+ expect(decrypted).toEqual({ id: 1, nested: {} });
43
+ });
44
+ });
45
+
46
+ describe('| key edge cases', () => {
47
+ it('| should handle very long keys', () => {
48
+ const longKey = 'a'.repeat(1000);
49
+ const encrypted = DyFM_Crypto.encrypt(testData, longKey);
50
+ const decrypted = DyFM_Crypto.decrypt(encrypted, longKey);
51
+ expect(decrypted).toEqual(testData);
52
+ });
53
+
54
+ it('| should handle empty key', () => {
55
+ expect(() => DyFM_Crypto.encrypt(testData, '')).toThrow();
56
+ });
57
+
58
+ it('| should handle whitespace-only keys', () => {
59
+ expect(() => DyFM_Crypto.encrypt(testData, ' ')).toThrow();
60
+ });
61
+ });
62
+
63
+ describe('| encrypted data manipulation', () => {
64
+ it('| should detect when encrypted data is truncated', () => {
65
+ const encrypted = DyFM_Crypto.encrypt(testData, testKey);
66
+ const truncated = encrypted.slice(0, -10);
67
+ expect(() => DyFM_Crypto.decrypt(truncated, testKey)).toThrow();
68
+ });
69
+
70
+ it('| should detect when encrypted data is extended', () => {
71
+ const encrypted = DyFM_Crypto.encrypt(testData, testKey);
72
+ const extended = encrypted + 'A'.repeat(10);
73
+ expect(() => DyFM_Crypto.decrypt(extended, testKey)).toThrow();
74
+ });
75
+
76
+ it('| should detect when encrypted data is modified in the middle', () => {
77
+ const encrypted = DyFM_Crypto.encrypt(testData, testKey);
78
+ const midPoint = Math.floor(encrypted.length / 2);
79
+ const modified = encrypted.slice(0, midPoint) + 'X' + encrypted.slice(midPoint + 1);
80
+ expect(() => DyFM_Crypto.decrypt(modified, testKey)).toThrow();
81
+ });
82
+ });
83
+
84
+ describe('| JSON handling edge cases', () => {
85
+ it('| should handle double-stringified JSON data correctly', () => {
86
+ const testData = {
87
+ username: 'Itharen',
88
+ password: 'asdasd',
89
+ roles: [],
90
+ permissions: [],
91
+ activeSubscriptions: [],
92
+ clientUserIds: {},
93
+ oauth2Data: {}
94
+ };
95
+
96
+ // Simulate double stringification
97
+ const doubleStringified = JSON.stringify(JSON.stringify(testData));
98
+
99
+ const encrypted = DyFM_Crypto.encrypt(doubleStringified, testKey);
100
+ const decrypted = DyFM_Crypto.decrypt(encrypted, testKey);
101
+
102
+ // The crypto utility should automatically handle double-stringified JSON
103
+ // and return the original object directly
104
+ expect(decrypted).toEqual(testData);
105
+ });
106
+
107
+ xit('| should handle character-by-character JSON data correctly', () => {
108
+ // Create a character-by-character object like in the example
109
+ const charByCharData = {
110
+ '0': '{',
111
+ '1': '"',
112
+ '2': '_',
113
+ '3': '_',
114
+ '4': 'c',
115
+ '5': 'r',
116
+ '6': 'e',
117
+ '7': 'a',
118
+ '8': 't',
119
+ '9': 'e',
120
+ '10': 'd',
121
+ '11': '"',
122
+ '12': ':',
123
+ '13': '"',
124
+ '14': '2',
125
+ '15': '0',
126
+ '16': '2',
127
+ '17': '5',
128
+ '18': '-',
129
+ '19': '0',
130
+ '20': '5',
131
+ '21': '-',
132
+ '22': '1',
133
+ '23': '3',
134
+ '24': 'T',
135
+ '25': '1',
136
+ '26': '0',
137
+ '27': ':',
138
+ '28': '4',
139
+ '29': '0',
140
+ '30': ':',
141
+ '31': '4',
142
+ '32': '4',
143
+ '33': '.',
144
+ '34': '7',
145
+ '35': '6',
146
+ '36': '0',
147
+ '37': 'Z',
148
+ '38': '"',
149
+ '39': ',',
150
+ '40': '"',
151
+ '41': '_',
152
+ '42': '_',
153
+ '43': 'l',
154
+ '44': 'a',
155
+ '45': 's',
156
+ '46': 't',
157
+ '47': 'M',
158
+ '48': 'o',
159
+ '49': 'd',
160
+ '50': 'i',
161
+ '51': 'f',
162
+ '52': 'i',
163
+ '53': 'e',
164
+ '54': 'd',
165
+ '55': '"',
166
+ '56': ':',
167
+ '57': '"',
168
+ '58': '2',
169
+ '59': '0',
170
+ '60': '2',
171
+ '61': '5',
172
+ '62': '-',
173
+ '63': '0',
174
+ '64': '5',
175
+ '65': '-',
176
+ '66': '1',
177
+ '67': '3',
178
+ '68': 'T',
179
+ '69': '1',
180
+ '70': '0',
181
+ '71': ':',
182
+ '72': '4',
183
+ '73': '0',
184
+ '74': ':',
185
+ '75': '4',
186
+ '76': '4',
187
+ '77': '.',
188
+ '78': '7',
189
+ '79': '6',
190
+ '80': '0',
191
+ '81': 'Z',
192
+ '82': '"',
193
+ '83': ',',
194
+ '84': '"',
195
+ '85': '_',
196
+ '86': '_',
197
+ '87': 'v',
198
+ '88': '"',
199
+ '89': ':',
200
+ '90': '0',
201
+ '91': ',',
202
+ '92': '"',
203
+ '93': 'u',
204
+ '94': 's',
205
+ '95': 'e',
206
+ '96': 'r',
207
+ '97': 'n',
208
+ '98': 'a',
209
+ '99': 'm',
210
+ '100': 'e',
211
+ '101': '"',
212
+ '102': ':',
213
+ '103': '"',
214
+ '104': 'I',
215
+ '105': 't',
216
+ '106': 'h',
217
+ '107': 'a',
218
+ '108': 'r',
219
+ '109': 'e',
220
+ '110': 'n',
221
+ '111': '"',
222
+ '112': ',',
223
+ '113': '"',
224
+ '114': 'p',
225
+ '115': 'r',
226
+ '116': 'e',
227
+ '117': 'v',
228
+ '118': 'i',
229
+ '119': 'o',
230
+ '120': 'u',
231
+ '121': 's',
232
+ '122': 'E',
233
+ '123': 'm',
234
+ '124': 'a',
235
+ '125': 'i',
236
+ '126': 'l',
237
+ '127': 's',
238
+ '128': '"',
239
+ '129': ':',
240
+ '130': '[',
241
+ '131': ']',
242
+ '132': ',',
243
+ '133': '"',
244
+ '134': 'p',
245
+ '135': 'a',
246
+ '136': 's',
247
+ '137': 's',
248
+ '138': 'w',
249
+ '139': 'o',
250
+ '140': 'r',
251
+ '141': 'd',
252
+ '142': '"',
253
+ '143': ':',
254
+ '144': '"',
255
+ '145': 'a',
256
+ '146': 's',
257
+ '147': 'd',
258
+ '148': 'a',
259
+ '149': 's',
260
+ '150': 'd',
261
+ '151': '"',
262
+ '152': ',',
263
+ '153': '"',
264
+ '154': 'r',
265
+ '155': 'o',
266
+ '156': 'l',
267
+ '157': 'e',
268
+ '158': 's',
269
+ '159': '"',
270
+ '160': ':',
271
+ '161': '[',
272
+ '162': ']',
273
+ '163': ',',
274
+ '164': '"',
275
+ '165': 'p',
276
+ '166': 'e',
277
+ '167': 'r',
278
+ '168': 'm',
279
+ '169': 'i',
280
+ '170': 's',
281
+ '171': 's',
282
+ '172': 'i',
283
+ '173': 'o',
284
+ '174': 'n',
285
+ '175': 's',
286
+ '176': '"',
287
+ '177': ':',
288
+ '178': '[',
289
+ '179': ']',
290
+ '180': ',',
291
+ '181': '"',
292
+ '182': 'a',
293
+ '183': 'c',
294
+ '184': 't',
295
+ '185': 'i',
296
+ '186': 'v',
297
+ '187': 'e',
298
+ '188': 'S',
299
+ '189': 'u',
300
+ '190': 'b',
301
+ '191': 's',
302
+ '192': 'c',
303
+ '193': 'r',
304
+ '194': 'i',
305
+ '195': 'p',
306
+ '196': 't',
307
+ '197': 'i',
308
+ '198': 'o',
309
+ '199': 'n',
310
+ '200': 's',
311
+ '201': '"',
312
+ '202': ':',
313
+ '203': '[',
314
+ '204': ']',
315
+ '205': ',',
316
+ '206': '"',
317
+ '207': 'c',
318
+ '208': 'l',
319
+ '209': 'i',
320
+ '210': 'e',
321
+ '211': 'n',
322
+ '212': 't',
323
+ '213': 'U',
324
+ '214': 's',
325
+ '215': 'e',
326
+ '216': 'r',
327
+ '217': 'I',
328
+ '218': 'd',
329
+ '219': 's',
330
+ '220': '"',
331
+ '221': ':',
332
+ '222': '{',
333
+ '223': '}',
334
+ '224': ',',
335
+ '225': '"',
336
+ '226': 'o',
337
+ '227': 'a',
338
+ '228': 'u',
339
+ '229': 't',
340
+ '230': 'h',
341
+ '231': '2',
342
+ '232': 'D',
343
+ '233': 'a',
344
+ '234': 't',
345
+ '235': 'a',
346
+ '236': '"',
347
+ '237': ':',
348
+ '238': '{',
349
+ '239': '}',
350
+ '240': '}'
351
+ };
352
+
353
+ const encrypted = DyFM_Crypto.encrypt(charByCharData, testKey);
354
+ const decrypted = DyFM_Crypto.decrypt(encrypted, testKey);
355
+
356
+ // Should be able to parse the decrypted data back to the original object
357
+ expect(decrypted).toEqual(charByCharData);
358
+ });
359
+ });
360
+
361
+ describe('| cross-environment consistency', () => {
362
+ it('| should produce same encrypted output for same input across different environments', () => {
363
+ const testData = {
364
+ id: 1,
365
+ name: 'test',
366
+ timestamp: '2024-03-20T10:00:00Z'
367
+ };
368
+ const key = 'test-secret-key-123';
369
+
370
+ // Simulate different environments by creating new instances
371
+ const encrypted1 = DyFM_Crypto.encrypt(testData, key);
372
+ const encrypted2 = DyFM_Crypto.encrypt(testData, key);
373
+
374
+ expect(encrypted1).toBe(encrypted2);
375
+ expect(DyFM_Crypto.decrypt(encrypted1, key)).toEqual(testData);
376
+ expect(DyFM_Crypto.decrypt(encrypted2, key)).toEqual(testData);
377
+ });
378
+
379
+ it('| should maintain encryption consistency with different data types', () => {
380
+ const testCases = [
381
+ { data: { id: 1 }, key: 'key1' },
382
+ { data: 'string data', key: 'key2' },
383
+ { data: [1, 2, 3], key: 'key3' },
384
+ { data: { nested: { value: true } }, key: 'key4' }
385
+ ];
386
+
387
+ testCases.forEach(({ data, key }) => {
388
+ const encrypted1 = DyFM_Crypto.encrypt(data, key);
389
+ const encrypted2 = DyFM_Crypto.encrypt(data, key);
390
+ expect(encrypted1).toBe(encrypted2);
391
+ });
392
+ });
393
+ });
394
+
395
+ describe('| database persistence', () => {
396
+ interface UserData {
397
+ id: number;
398
+ name: string;
399
+ lastLogin: string;
400
+ preferences: {
401
+ language: string;
402
+ timezone: string;
403
+ };
404
+ }
405
+
406
+ it('| should successfully encrypt and decrypt data after database storage simulation', () => {
407
+ const originalData = {
408
+ id: 1,
409
+ name: 'test user',
410
+ email: 'test@example.com',
411
+ settings: {
412
+ theme: 'dark',
413
+ notifications: true
414
+ }
415
+ };
416
+ const key = 'db-storage-key';
417
+
418
+ // Simulate database storage and retrieval
419
+ const encrypted = DyFM_Crypto.encrypt(originalData, key);
420
+ const storedData = encrypted; // Simulating database storage
421
+ const retrievedData = storedData; // Simulating database retrieval
422
+ const decrypted = DyFM_Crypto.decrypt(retrievedData, key);
423
+
424
+ expect(decrypted).toEqual(originalData);
425
+ });
426
+
427
+ it('| should handle multiple encryption/decryption cycles for database operations', () => {
428
+ const userData: UserData = {
429
+ id: 1,
430
+ name: 'test user',
431
+ lastLogin: '2024-01-01T10:00:00.000Z',
432
+ preferences: {
433
+ language: 'en',
434
+ timezone: 'UTC'
435
+ }
436
+ };
437
+ const key = 'persistent-key';
438
+
439
+ // Simulate multiple database operations
440
+ const encrypted1 = DyFM_Crypto.encrypt(userData, key);
441
+ const decrypted1 = DyFM_Crypto.decrypt(encrypted1, key) as UserData;
442
+
443
+ // Simulate data update with a different timestamp
444
+ const updatedData: UserData = {
445
+ ...decrypted1,
446
+ lastLogin: '2024-01-02T15:30:00.000Z'
447
+ };
448
+ const encrypted2 = DyFM_Crypto.encrypt(updatedData, key);
449
+ const decrypted2 = DyFM_Crypto.decrypt(encrypted2, key) as UserData;
450
+
451
+ expect(decrypted1).toEqual(userData);
452
+ expect(decrypted2).toEqual(updatedData);
453
+ expect(decrypted2.lastLogin).not.toBe(userData.lastLogin);
454
+ });
455
+
456
+ it('| should maintain data integrity through multiple database operations', () => {
457
+ const sensitiveData = {
458
+ id: 1,
459
+ password: 'hashed-password-123',
460
+ securityQuestions: [
461
+ { question: 'What is your pet name?', answer: 'Fluffy' },
462
+ { question: 'Where were you born?', answer: 'New York' }
463
+ ]
464
+ };
465
+ const key = 'sensitive-data-key';
466
+
467
+ // Simulate multiple database operations with the same data
468
+ const encrypted1 = DyFM_Crypto.encrypt(sensitiveData, key);
469
+ const decrypted1 = DyFM_Crypto.decrypt(encrypted1, key);
470
+ const encrypted2 = DyFM_Crypto.encrypt(decrypted1, key);
471
+ const decrypted2 = DyFM_Crypto.decrypt(encrypted2, key);
472
+
473
+ expect(decrypted1).toEqual(sensitiveData);
474
+ expect(decrypted2).toEqual(sensitiveData);
475
+ expect(encrypted1).toBe(encrypted2); // Different encryption instances
476
+ });
477
+ });
478
+
479
+ describe('| special characters', () => {
480
+ it('| should handle Unicode characters', () => {
481
+ const unicodeData = {
482
+ text: 'Hello 世界! 🌍',
483
+ emoji: '👋',
484
+ special: '!!!@@@###$$$%%%^^^&&&***((()))___+++---===[[[]]]{{{}}}|||;;;:::,,,...<<<>>>' +
485
+ 'ĐĐĐđđđßßߤ¤¤×××÷÷÷¨¨¨¨~~~ˇˇˇ^^^˘˘˘°°°˛˛˛```˙˙˙´´´˝˝˝˝¸¸¸§§§' +
486
+ '???ééééáááűűűúúúőőőóóóüüüöööíííÉÉÉÁÁÁŰŰŰÚÚÚŐŐŐÓÓÓÜÖÖÖÍÍÍ'
487
+ };
488
+ const encrypted = DyFM_Crypto.encrypt(unicodeData, testKey);
489
+ const decrypted = DyFM_Crypto.decrypt(encrypted, testKey);
490
+ expect(decrypted).toEqual(unicodeData);
491
+ });
492
+
493
+ it('| should handle special characters in object keys', () => {
494
+ const specialKeyData = {
495
+ 'key-with-spaces': 'value',
496
+ 'key.with.dots': 'value',
497
+ 'key-with-special-chars!@#': 'value',
498
+ 'key-with-unicode-世界': 'value'
499
+ };
500
+ const encrypted = DyFM_Crypto.encrypt(specialKeyData, testKey);
501
+ const decrypted = DyFM_Crypto.decrypt(encrypted, testKey);
502
+ expect(decrypted).toEqual(specialKeyData);
503
+ });
504
+
505
+ it('| should handle special characters in nested objects', () => {
506
+ const nestedData = {
507
+ level1: {
508
+ 'special-key!@#': {
509
+ 'nested-key-世界': 'value with special chars!@#'
510
+ }
511
+ }
512
+ };
513
+ const encrypted = DyFM_Crypto.encrypt(nestedData, testKey);
514
+ const decrypted = DyFM_Crypto.decrypt(encrypted, testKey);
515
+ expect(decrypted).toEqual(nestedData);
516
+ });
517
+
518
+ it('| should handle special characters in arrays', () => {
519
+ const arrayData = [
520
+ 'Hello 世界!',
521
+ { 'special-key': 'value with !@#' },
522
+ ['nested', 'array', 'with', 'special', 'chars!@#']
523
+ ];
524
+ const encrypted = DyFM_Crypto.encrypt(arrayData, testKey);
525
+ const decrypted = DyFM_Crypto.decrypt(encrypted, testKey);
526
+ expect(decrypted).toEqual(arrayData);
527
+ });
528
+ });
529
+
530
+ describe('| base64 padding and parsing edge cases', () => {
531
+ it('| should handle encrypted data missing 1 padding character', () => {
532
+ const encrypted = DyFM_Crypto.encrypt(testData, testKey);
533
+ // Remove last character (which might be padding)
534
+ const withoutPadding = encrypted.slice(0, -1);
535
+ expect(() => DyFM_Crypto.decrypt(withoutPadding, testKey)).toThrow();
536
+ });
537
+
538
+ it('| should handle encrypted data missing 2 padding characters', () => {
539
+ const encrypted = DyFM_Crypto.encrypt(testData, testKey);
540
+ // Remove last 2 characters
541
+ const withoutPadding = encrypted.slice(0, -2);
542
+ expect(() => DyFM_Crypto.decrypt(withoutPadding, testKey)).toThrow();
543
+ });
544
+
545
+ it('| should handle encrypted data missing 3 padding characters', () => {
546
+ const encrypted = DyFM_Crypto.encrypt(testData, testKey);
547
+ // Remove last 3 characters
548
+ const withoutPadding = encrypted.slice(0, -3);
549
+ expect(() => DyFM_Crypto.decrypt(withoutPadding, testKey)).toThrow();
550
+ });
551
+
552
+ it('| should detect base64 strings that are too short to be valid (less than 48 bytes)', () => {
553
+ // Create a minimal base64 string that parses to less than 48 bytes
554
+ // 18 bytes = 24 base64 characters (18 * 4/3 = 24)
555
+ const shortBase64 = 'ABCDEFGHIJKLMNOPQRSTUVW'; // 24 chars = 18 bytes when parsed
556
+ expect(() => DyFM_Crypto.decrypt(shortBase64, testKey)).toThrow();
557
+ });
558
+
559
+ it('| should handle base64 strings with incorrect padding', () => {
560
+ const encrypted = DyFM_Crypto.encrypt(testData, testKey);
561
+ // Add incorrect padding characters
562
+ const withIncorrectPadding = encrypted + '====';
563
+ expect(() => DyFM_Crypto.decrypt(withIncorrectPadding, testKey)).toThrow();
564
+ });
565
+
566
+ it('| should handle URL-safe base64 strings ending with dash', () => {
567
+ // Create a base64 string ending with '-' (which becomes '+' in regular base64)
568
+ const encrypted = DyFM_Crypto.encrypt(testData, testKey);
569
+ // Replace last character with dash if it's not already
570
+ const withDash = encrypted.slice(0, -1) + '-';
571
+ expect(() => DyFM_Crypto.decrypt(withDash, testKey)).toThrow();
572
+ });
573
+
574
+ it('| should handle URL-safe base64 strings ending with underscore', () => {
575
+ // Create a base64 string ending with '_' (which becomes '/' in regular base64)
576
+ const encrypted = DyFM_Crypto.encrypt(testData, testKey);
577
+ // Replace last character with underscore if it's not already
578
+ const withUnderscore = encrypted.slice(0, -1) + '_';
579
+ expect(() => DyFM_Crypto.decrypt(withUnderscore, testKey)).toThrow();
580
+ });
581
+
582
+ it('| should handle URL-safe base64 strings with no padding characters', () => {
583
+ const encrypted = DyFM_Crypto.encrypt(testData, testKey);
584
+ // Encrypted data should already have no padding (removed in encrypt method)
585
+ // This test verifies that decryption works without padding
586
+ expect(() => DyFM_Crypto.decrypt(encrypted, testKey)).not.toThrow();
587
+ const decrypted = DyFM_Crypto.decrypt(encrypted, testKey);
588
+ expect(decrypted).toEqual(testData);
589
+ });
590
+
591
+ it('| should handle very short base64 strings that parse to exactly 18 bytes', () => {
592
+ // Create a base64 string that parses to exactly 18 bytes
593
+ // 18 bytes = 24 base64 characters
594
+ const exactly18Bytes = 'ABCDEFGHIJKLMNOPQRSTUVWX'; // 24 chars
595
+ expect(() => DyFM_Crypto.decrypt(exactly18Bytes, testKey)).toThrow();
596
+ });
597
+
598
+ it('| should handle base64 strings that are valid format but too short after parsing', () => {
599
+ // Create a valid URL-safe base64 string that's too short
600
+ const validButShort = 'ABCDEFGHIJKLMNOPQRSTUVWXY'; // 25 chars, valid format
601
+ expect(() => DyFM_Crypto.decrypt(validButShort, testKey)).toThrow();
602
+ });
603
+ });
604
+ });
605
+
606
606
  });