@futdevpro/fsm-dynamo 1.20.92 → 1.20.93

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 (437) hide show
  1. package/build/_models/control-models/data-model-params.control-model.d.ts +0 -1
  2. package/build/_models/control-models/data-model-params.control-model.d.ts.map +1 -1
  3. package/build/_models/control-models/data-model-params.control-model.js +1 -4
  4. package/build/_models/control-models/data-model-params.control-model.js.map +1 -1
  5. package/build/_models/control-models/data-property-params.control-model.d.ts +0 -1
  6. package/build/_models/control-models/data-property-params.control-model.d.ts.map +1 -1
  7. package/build/_models/control-models/data-property-params.control-model.js +1 -4
  8. package/build/_models/control-models/data-property-params.control-model.js.map +1 -1
  9. package/build/_models/control-models/service-endpoint-settings-base.control-model.d.ts +0 -1
  10. package/build/_models/control-models/service-endpoint-settings-base.control-model.d.ts.map +1 -1
  11. package/build/_models/control-models/service-endpoint-settings-base.control-model.js +4 -4
  12. package/build/_models/control-models/service-endpoint-settings-base.control-model.js.map +1 -1
  13. package/build/_modules/data-handler/_models/data-handler-settings.control-model.d.ts +0 -3
  14. package/build/_modules/data-handler/_models/data-handler-settings.control-model.d.ts.map +1 -1
  15. package/build/_modules/data-handler/_models/data-handler-settings.control-model.js +4 -10
  16. package/build/_modules/data-handler/_models/data-handler-settings.control-model.js.map +1 -1
  17. package/build/_modules/data-handler/_models/data-list-handler.control-model.d.ts +1 -1
  18. package/build/_modules/data-handler/_models/data-list-handler.control-model.d.ts.map +1 -1
  19. package/build/_modules/data-handler/_models/data-search-handler.control-model.d.ts +1 -1
  20. package/build/_modules/data-handler/_models/data-search-handler.control-model.d.ts.map +1 -1
  21. package/build/_modules/data-handler/_models/list-collector-data-handler.control-model.d.ts +1 -1
  22. package/build/_modules/data-handler/_models/list-collector-data-handler.control-model.d.ts.map +1 -1
  23. package/build/_modules/data-handler/index.d.ts +3 -0
  24. package/build/_modules/data-handler/index.d.ts.map +1 -1
  25. package/build/_modules/data-handler/index.js +3 -0
  26. package/build/_modules/data-handler/index.js.map +1 -1
  27. package/build/_modules/ngx-models/_models/control-models/data-handler-settings.control-model.d.ts +0 -3
  28. package/build/_modules/ngx-models/_models/control-models/data-handler-settings.control-model.d.ts.map +1 -1
  29. package/build/_modules/ngx-models/_models/control-models/data-handler-settings.control-model.js +4 -10
  30. package/build/_modules/ngx-models/_models/control-models/data-handler-settings.control-model.js.map +1 -1
  31. package/build/_modules/ngx-models/index.d.ts +3 -0
  32. package/build/_modules/ngx-models/index.d.ts.map +1 -1
  33. package/build/_modules/ngx-models/index.js +3 -0
  34. package/build/_modules/ngx-models/index.js.map +1 -1
  35. package/build/index.d.ts +3 -0
  36. package/build/index.d.ts.map +1 -1
  37. package/build/index.js +3 -0
  38. package/build/index.js.map +1 -1
  39. package/build-esm/_collections/constants/data-sizes.const.js +37 -0
  40. package/build-esm/_collections/constants/error-defaults.const.js +17 -0
  41. package/build-esm/_collections/constants/global-settings.const.js +17 -0
  42. package/build-esm/_collections/constants/numbers.const.js +36 -0
  43. package/build-esm/_collections/constants/times.const.js +38 -0
  44. package/build-esm/_collections/utils/array.util.js +632 -0
  45. package/build-esm/_collections/utils/async.util.js +183 -0
  46. package/build-esm/_collections/utils/data.util.js +203 -0
  47. package/build-esm/_collections/utils/extract-error-message.util.js +183 -0
  48. package/build-esm/_collections/utils/json-error-helper.util.js +251 -0
  49. package/build-esm/_collections/utils/log.util.js +555 -0
  50. package/build-esm/_collections/utils/math/box-bounds.util.js +159 -0
  51. package/build-esm/_collections/utils/math/math.util.js +183 -0
  52. package/build-esm/_collections/utils/math/random.util.js +117 -0
  53. package/build-esm/_collections/utils/math/trigonometry.util.js +89 -0
  54. package/build-esm/_collections/utils/math/vector2.util.js +587 -0
  55. package/build-esm/_collections/utils/object.util.js +591 -0
  56. package/build-esm/_collections/utils/operation-authz.util.js +136 -0
  57. package/build-esm/_collections/utils/operation-guardrails.util.js +220 -0
  58. package/build-esm/_collections/utils/operation-run.util.js +81 -0
  59. package/build-esm/_collections/utils/operation-schema.util.js +159 -0
  60. package/build-esm/_collections/utils/regex/password-regex.util.js +56 -0
  61. package/build-esm/_collections/utils/regex/regex.util.js +1 -0
  62. package/build-esm/_collections/utils/regex/username-regex.util.js +28 -0
  63. package/build-esm/_collections/utils/require-env.util.js +90 -0
  64. package/build-esm/_collections/utils/round-list.util.js +108 -0
  65. package/build-esm/_collections/utils/secret-mask.util.js +219 -0
  66. package/build-esm/_collections/utils/stack.util.js +126 -0
  67. package/build-esm/_collections/utils/string-case.util.js +332 -0
  68. package/build-esm/_collections/utils/string.util.js +366 -0
  69. package/build-esm/_collections/utils/time.util.js +431 -0
  70. package/build-esm/_collections/utils/type-cloning-facility.util.js +122 -0
  71. package/build-esm/_collections/utils/utilities.util.js +61 -0
  72. package/build-esm/_collections/utils/uuid.util.js +33 -0
  73. package/build-esm/_enums/basic-property-type.enum.js +18 -0
  74. package/build-esm/_enums/data-model-type.enum.js +24 -0
  75. package/build-esm/_enums/environment-flag.enum.js +26 -0
  76. package/build-esm/_enums/error-level.enum.js +35 -0
  77. package/build-esm/_enums/error-status.enum.js +28 -0
  78. package/build-esm/_enums/http/http-call-type.enum.js +42 -0
  79. package/build-esm/_enums/http/http-event-type.enum.js +39 -0
  80. package/build-esm/_enums/http/http-response-type.enum.js +18 -0
  81. package/build-esm/_enums/log-style.enum.js +38 -0
  82. package/build-esm/_enums/operation-auth.type-enum.js +19 -0
  83. package/build-esm/_enums/operation-if-match.type-enum.js +17 -0
  84. package/build-esm/_enums/operation-patch-field.type-enum.js +40 -0
  85. package/build-esm/_enums/server-connection-status.enum.js +5 -0
  86. package/build-esm/_enums/time/day-of-week.enum.js +47 -0
  87. package/build-esm/_enums/time/month.enum.js +23 -0
  88. package/build-esm/_enums/time/relative-date.enum.js +19 -0
  89. package/build-esm/_models/control-models/data-model-params.control-model.js +259 -0
  90. package/build-esm/_models/control-models/data-model-settings.control-model.js +63 -0
  91. package/build-esm/_models/control-models/data-property-params.control-model.js +101 -0
  92. package/build-esm/_models/control-models/data-property-settings.control-model.js +61 -0
  93. package/build-esm/_models/control-models/error.control-model.js +787 -0
  94. package/build-esm/_models/control-models/http/http-error-response.control-model.js +48 -0
  95. package/build-esm/_models/control-models/http/http-headers.control-model.js +43 -0
  96. package/build-esm/_models/control-models/http/http-response.model-base.js +62 -0
  97. package/build-esm/_models/control-models/operation-context.control-model.js +110 -0
  98. package/build-esm/_models/control-models/operation-settings.control-model.js +184 -0
  99. package/build-esm/_models/control-models/poll.control-model.js +202 -0
  100. package/build-esm/_models/control-models/range-value.control-model.js +247 -0
  101. package/build-esm/_models/control-models/server-route-settings-base.control-model.js +19 -0
  102. package/build-esm/_models/control-models/server-status.control-model.js +73 -0
  103. package/build-esm/_models/control-models/service-endpoint-settings-base.control-model.js +110 -0
  104. package/build-esm/_models/data-models/errors.data-model.js +156 -0
  105. package/build-esm/_models/data-models/metadata.data-model.js +120 -0
  106. package/build-esm/_models/interfaces/box-bounds.interface.js +1 -0
  107. package/build-esm/_models/interfaces/environment/global-log-settings.interface.js +1 -0
  108. package/build-esm/_models/interfaces/environment/global-settings.interface.js +1 -0
  109. package/build-esm/_models/interfaces/error-defaults.interface.js +1 -0
  110. package/build-esm/_models/interfaces/operation-authz-result.interface.js +1 -0
  111. package/build-esm/_models/interfaces/operation-authz.interface.js +1 -0
  112. package/build-esm/_models/interfaces/operation-exposure.interface.js +1 -0
  113. package/build-esm/_models/interfaces/operation-guardrails.interface.js +1 -0
  114. package/build-esm/_models/interfaces/operation-input-settings.interface.js +1 -0
  115. package/build-esm/_models/interfaces/operation-json-schema.interface.js +1 -0
  116. package/build-esm/_models/interfaces/operation-patch-field.interface.js +1 -0
  117. package/build-esm/_models/interfaces/operation-patch-result.interface.js +1 -0
  118. package/build-esm/_models/interfaces/operation-patch-violation.interface.js +1 -0
  119. package/build-esm/_models/interfaces/operation-run-result.interface.js +1 -0
  120. package/build-esm/_models/interfaces/paged.interface.js +1 -0
  121. package/build-esm/_models/interfaces/poll-handle.interface.js +1 -0
  122. package/build-esm/_models/interfaces/random-weight.interface.js +1 -0
  123. package/build-esm/_models/interfaces/route-settings.interface.js +1 -0
  124. package/build-esm/_models/interfaces/search-query.interface.js +1 -0
  125. package/build-esm/_models/interfaces/search-result.interface.js +1 -0
  126. package/build-esm/_models/interfaces/server-error-statistics.interface.js +1 -0
  127. package/build-esm/_models/interfaces/vector2.interface.js +1 -0
  128. package/build-esm/_models/types/db-filter.type.js +1 -0
  129. package/build-esm/_models/types/db-sort.type.js +1 -0
  130. package/build-esm/_models/types/deprecated-boolean-alias.type.js +1 -0
  131. package/build-esm/_models/types/ds-filter.type.js +15 -0
  132. package/build-esm/_models/types/ds-sort.type.js +1 -0
  133. package/build-esm/_modules/ai/_collections/ai-media-provenance.util.js +24 -0
  134. package/build-esm/_modules/ai/_collections/ai-model-ref.util.js +70 -0
  135. package/build-esm/_modules/ai/_collections/ai-model-registry.util.js +37 -0
  136. package/build-esm/_modules/ai/_enums/ai-message-role.enum.js +8 -0
  137. package/build-esm/_modules/ai/_enums/ai-model-type.enum.js +8 -0
  138. package/build-esm/_modules/ai/_enums/ai-provider.enum.js +8 -0
  139. package/build-esm/_modules/ai/_models/ai-call-settings.interface.js +88 -0
  140. package/build-esm/_modules/ai/_models/ai-config.interface.js +1 -0
  141. package/build-esm/_modules/ai/_models/ai-embedding-request.interface.js +1 -0
  142. package/build-esm/_modules/ai/_models/ai-embedding-response.interface.js +1 -0
  143. package/build-esm/_modules/ai/_models/ai-image-request.interface.js +1 -0
  144. package/build-esm/_modules/ai/_models/ai-image-response.interface.js +1 -0
  145. package/build-esm/_modules/ai/_models/ai-llm-request.interface.js +1 -0
  146. package/build-esm/_modules/ai/_models/ai-llm-response.interface.js +1 -0
  147. package/build-esm/_modules/ai/_models/ai-media-file.interface.js +1 -0
  148. package/build-esm/_modules/ai/_models/ai-media-provenance.interface.js +1 -0
  149. package/build-esm/_modules/ai/_models/ai-message.interface.js +1 -0
  150. package/build-esm/_modules/ai/_models/ai-model-capabilities.interface.js +1 -0
  151. package/build-esm/_modules/ai/_models/ai-model-info.interface.js +1 -0
  152. package/build-esm/_modules/ai/_models/ai-model-settings-schema.interface.js +1 -0
  153. package/build-esm/_modules/ai/_models/ai-model3d-request.interface.js +1 -0
  154. package/build-esm/_modules/ai/_models/ai-model3d-response.interface.js +1 -0
  155. package/build-esm/_modules/ai/_models/ai-provider-capabilities.interface.js +1 -0
  156. package/build-esm/_modules/ai/_models/ai-settings.interface.js +10 -0
  157. package/build-esm/_modules/ai/_models/ai-speech-request.interface.js +1 -0
  158. package/build-esm/_modules/ai/_models/ai-speech-response.interface.js +1 -0
  159. package/build-esm/_modules/ai/_models/ai-tool-call.interface.js +1 -0
  160. package/build-esm/_modules/ai/_models/ai-tool-handler.type.js +1 -0
  161. package/build-esm/_modules/ai/_models/ai-tool-result.interface.js +1 -0
  162. package/build-esm/_modules/ai/_models/ai-tool.interface.js +1 -0
  163. package/build-esm/_modules/ai/_models/ai-user-provider-config.control-model.js +31 -0
  164. package/build-esm/_modules/ai/_modules/anthropic/_collections/aai-models.const.js +130 -0
  165. package/build-esm/_modules/ai/_modules/anthropic/_enums/aai-model.enum.js +17 -0
  166. package/build-esm/_modules/ai/_modules/anthropic/_models/aai-call-settings.control-model.js +23 -0
  167. package/build-esm/_modules/ai/_modules/anthropic/_models/aai-client-options.interface.js +1 -0
  168. package/build-esm/_modules/ai/_modules/anthropic/_models/aai-settings.control-model.js +25 -0
  169. package/build-esm/_modules/ai/_modules/anthropic/_models/aai-user-provider-config.control-model.js +22 -0
  170. package/build-esm/_modules/ai/_modules/anthropic/index.js +9 -0
  171. package/build-esm/_modules/ai/_modules/document-ai/_models/dai-embedding-info.interface.js +1 -0
  172. package/build-esm/_modules/ai/_modules/document-ai/_models/dai-vector-search-params.interface.js +1 -0
  173. package/build-esm/_modules/ai/_modules/document-ai/index.js +3 -0
  174. package/build-esm/_modules/ai/_modules/fdp-ai/_collections/fdpai-models.const.js +38 -0
  175. package/build-esm/_modules/ai/_modules/fdp-ai/_enums/fdpai-model.enum.js +7 -0
  176. package/build-esm/_modules/ai/_modules/fdp-ai/_models/fdpai-call-settings.control-model.js +21 -0
  177. package/build-esm/_modules/ai/_modules/fdp-ai/_models/fdpai-client-options.interface.js +1 -0
  178. package/build-esm/_modules/ai/_modules/fdp-ai/_models/fdpai-settings.control-model.js +24 -0
  179. package/build-esm/_modules/ai/_modules/fdp-ai/_models/fdpai-user-provider-config.control-model.js +22 -0
  180. package/build-esm/_modules/ai/_modules/fdp-ai/index.js +9 -0
  181. package/build-esm/_modules/ai/_modules/google-ai/_collections/gai-models.const.js +155 -0
  182. package/build-esm/_modules/ai/_modules/google-ai/_enums/gai-model.enum.js +14 -0
  183. package/build-esm/_modules/ai/_modules/google-ai/_models/gai-call-settings.control-model.js +23 -0
  184. package/build-esm/_modules/ai/_modules/google-ai/_models/gai-client-options.interface.js +1 -0
  185. package/build-esm/_modules/ai/_modules/google-ai/_models/gai-settings.control-model.js +25 -0
  186. package/build-esm/_modules/ai/_modules/google-ai/_models/gai-user-provider-config.control-model.js +22 -0
  187. package/build-esm/_modules/ai/_modules/google-ai/index.js +9 -0
  188. package/build-esm/_modules/ai/_modules/local-ai/_collections/lai-models.const.js +57 -0
  189. package/build-esm/_modules/ai/_modules/local-ai/_enums/lai-model.enum.js +5 -0
  190. package/build-esm/_modules/ai/_modules/local-ai/_models/lai-call-settings.control-model.js +19 -0
  191. package/build-esm/_modules/ai/_modules/local-ai/_models/lai-client-options.interface.js +1 -0
  192. package/build-esm/_modules/ai/_modules/local-ai/_models/lai-settings.control-model.js +22 -0
  193. package/build-esm/_modules/ai/_modules/local-ai/index.js +8 -0
  194. package/build-esm/_modules/ai/_modules/open-ai/_collections/oai-embedding-model-dimensions.const.js +6 -0
  195. package/build-esm/_modules/ai/_modules/open-ai/_collections/oai-models.const.js +455 -0
  196. package/build-esm/_modules/ai/_modules/open-ai/_enums/oai-model.enum.js +146 -0
  197. package/build-esm/_modules/ai/_modules/open-ai/_models/oai-call-settings.control-model.js +23 -0
  198. package/build-esm/_modules/ai/_modules/open-ai/_models/oai-client-options.interface.js +1 -0
  199. package/build-esm/_modules/ai/_modules/open-ai/_models/oai-embedding-info.interface.js +1 -0
  200. package/build-esm/_modules/ai/_modules/open-ai/_models/oai-settings.control-model.js +25 -0
  201. package/build-esm/_modules/ai/_modules/open-ai/_models/oai-user-provider-config.control-model.js +23 -0
  202. package/build-esm/_modules/ai/_modules/open-ai/index.js +19 -0
  203. package/build-esm/_modules/ai/index.js +34 -0
  204. package/build-esm/_modules/application-alert/_collections/application-alert-envelope.util.js +267 -0
  205. package/build-esm/_modules/application-alert/_enums/application-alert-evaluation-state.type-enum.js +6 -0
  206. package/build-esm/_modules/application-alert/_enums/application-alert-severity.type-enum.js +8 -0
  207. package/build-esm/_modules/application-alert/_models/application-alert.interface.js +1 -0
  208. package/build-esm/_modules/application-alert/index.js +4 -0
  209. package/build-esm/_modules/ci-tools/_enums/cit-ci-result-code.enum.js +9 -0
  210. package/build-esm/_modules/ci-tools/_enums/cit-ci-step-result-code.enum.js +9 -0
  211. package/build-esm/_modules/ci-tools/_models/cit-ci-result-info.data-models.js +63 -0
  212. package/build-esm/_modules/ci-tools/_models/cit-ci-step-result.interface.js +1 -0
  213. package/build-esm/_modules/ci-tools/index.js +6 -0
  214. package/build-esm/_modules/crypto/_collections/crypto-v1.util.js +199 -0
  215. package/build-esm/_modules/crypto/_collections/crypto-v2.util.js +273 -0
  216. package/build-esm/_modules/crypto/_collections/crypto-v4.util.js +605 -0
  217. package/build-esm/_modules/crypto/_collections/crypto.util.js +651 -0
  218. package/build-esm/_modules/crypto/_models/artifact-signature.interface.js +1 -0
  219. package/build-esm/_modules/crypto/_services/artifact-signature.control-service.js +276 -0
  220. package/build-esm/_modules/crypto/index.js +11 -0
  221. package/build-esm/_modules/custom-data/_collections/cud-module-settings.const.js +18 -0
  222. package/build-esm/_modules/custom-data/_models/cud.data-model.js +30 -0
  223. package/build-esm/_modules/custom-data/index.js +4 -0
  224. package/build-esm/_modules/data-handler/_models/data-handler-settings.control-model.js +78 -0
  225. package/build-esm/_modules/data-handler/_models/data-handler.control-model.js +386 -0
  226. package/build-esm/_modules/data-handler/_models/data-list-handler-settings.control-model.js +11 -0
  227. package/build-esm/_modules/data-handler/_models/data-list-handler.control-model.js +222 -0
  228. package/build-esm/_modules/data-handler/_models/data-search-handler-settings.control-model.js +25 -0
  229. package/build-esm/_modules/data-handler/_models/data-search-handler.control-model.js +334 -0
  230. package/build-esm/_modules/data-handler/_models/list-collector-data-handler-settings.control-model.js +12 -0
  231. package/build-esm/_modules/data-handler/_models/list-collector-data-handler.control-model.js +243 -0
  232. package/build-esm/_modules/data-handler/index.js +9 -0
  233. package/build-esm/_modules/deployment/_collections/atomic-rollback-manifest.util.js +348 -0
  234. package/build-esm/_modules/deployment/_models/atomic-rollback-manifest.interface.js +1 -0
  235. package/build-esm/_modules/deployment/index.js +2 -0
  236. package/build-esm/_modules/game/_collections/audio-mixer.util.js +109 -0
  237. package/build-esm/_modules/game/_collections/audio-scale.util.js +100 -0
  238. package/build-esm/_modules/game/_enums/audio-channel.enum.js +21 -0
  239. package/build-esm/_modules/game/_models/audio-mixer-config.interface.js +1 -0
  240. package/build-esm/_modules/game/_models/audio-mixer-settings.interface.js +1 -0
  241. package/build-esm/_modules/game/_models/audio-mixer-state.interface.js +1 -0
  242. package/build-esm/_modules/game/_models/audio-mixer.control-model.js +337 -0
  243. package/build-esm/_modules/game/_models/audio-scale.interface.js +1 -0
  244. package/build-esm/_modules/game/_models/flying-effect.control-model.js +212 -0
  245. package/build-esm/_modules/game/_models/flying-effect.interface.js +1 -0
  246. package/build-esm/_modules/game/_models/seeded-random-registry.control-model.js +124 -0
  247. package/build-esm/_modules/game/_models/seeded-random-registry.interface.js +1 -0
  248. package/build-esm/_modules/game/_models/seeded-random-state.interface.js +1 -0
  249. package/build-esm/_modules/game/_models/seeded-random.control-model.js +261 -0
  250. package/build-esm/_modules/game/index.js +17 -0
  251. package/build-esm/_modules/location/_collections/assets/country-codes-ISO-3166.json +3239 -0
  252. package/build-esm/_modules/location/_collections/assets/country-divisions-ISO-3166-all-list.json +19036 -0
  253. package/build-esm/_modules/location/_collections/assets/country-phone-codes.json +1202 -0
  254. package/build-esm/_modules/location/_collections/loc-country-divisions.const.js +3 -0
  255. package/build-esm/_modules/location/_collections/loc-country-isos.const.js +2 -0
  256. package/build-esm/_modules/location/_collections/loc-regions.util.js +107 -0
  257. package/build-esm/_modules/location/_collections/loc.util.js +56 -0
  258. package/build-esm/_modules/location/_enums/loc-region.enum.js +11 -0
  259. package/build-esm/_modules/location/_enums/loc-sub-region.enum.js +23 -0
  260. package/build-esm/_modules/location/_enums/loc-subdivision-region-type.enum.js +45 -0
  261. package/build-esm/_modules/location/_models/loc-coordinates.interface.js +1 -0
  262. package/build-esm/_modules/location/_models/loc-country-division.interface.js +1 -0
  263. package/build-esm/_modules/location/_models/loc-country-iso.interface.js +1 -0
  264. package/build-esm/_modules/location/_models/loc-country-phone-code.interface.js +1 -0
  265. package/build-esm/_modules/location/_models/loc-division-collection.interface.js +1 -0
  266. package/build-esm/_modules/location/_models/loc-division-region-data.interface.js +1 -0
  267. package/build-esm/_modules/location/_models/loc-geo-ip-location.interface.js +1 -0
  268. package/build-esm/_modules/location/index.js +17 -0
  269. package/build-esm/_modules/messaging/_collections/msg-module-settings.const.js +44 -0
  270. package/build-esm/_modules/messaging/_enums/msg-attachment-type.enum.js +21 -0
  271. package/build-esm/_modules/messaging/_enums/msg-conversation-type.enum.js +17 -0
  272. package/build-esm/_modules/messaging/_enums/msg-delivery-status.enum.js +15 -0
  273. package/build-esm/_modules/messaging/_enums/msg-event-key.enum.js +28 -0
  274. package/build-esm/_modules/messaging/_enums/msg-participant-role.enum.js +17 -0
  275. package/build-esm/_modules/messaging/_enums/msg-provider-type.enum.js +8 -0
  276. package/build-esm/_modules/messaging/_enums/msg-status.enum.js +21 -0
  277. package/build-esm/_modules/messaging/_enums/msg-type.enum.js +19 -0
  278. package/build-esm/_modules/messaging/_models/msg-attachment.interface.js +1 -0
  279. package/build-esm/_modules/messaging/_models/msg-conversation.data-model.js +80 -0
  280. package/build-esm/_modules/messaging/_models/msg-mention.interface.js +1 -0
  281. package/build-esm/_modules/messaging/_models/msg-message.data-model.js +102 -0
  282. package/build-esm/_modules/messaging/_models/msg-participant.interface.js +1 -0
  283. package/build-esm/_modules/messaging/_models/msg-reaction.interface.js +1 -0
  284. package/build-esm/_modules/messaging/_models/msg-thread-info.interface.js +1 -0
  285. package/build-esm/_modules/messaging/_modules/agent/_enums/agt-process-step-type.enum.js +27 -0
  286. package/build-esm/_modules/messaging/_modules/agent/_enums/agt-tool-status.enum.js +19 -0
  287. package/build-esm/_modules/messaging/_modules/agent/_models/agt-process-step.interface.js +1 -0
  288. package/build-esm/_modules/messaging/_modules/agent/_models/agt-reasoning-info.interface.js +1 -0
  289. package/build-esm/_modules/messaging/_modules/agent/_models/agt-tool-usage.interface.js +1 -0
  290. package/build-esm/_modules/messaging/_modules/agent/index.js +7 -0
  291. package/build-esm/_modules/messaging/index.js +25 -0
  292. package/build-esm/_modules/ngx-models/_collections/angular-placeholders.js +1 -0
  293. package/build-esm/_modules/ngx-models/_collections/button-new-style-settings-presets.const.js +170 -0
  294. package/build-esm/_modules/ngx-models/_collections/dynamo-global.settings.js +88 -0
  295. package/build-esm/_modules/ngx-models/_enums/button-new/button-new-border-radius.enum.js +14 -0
  296. package/build-esm/_modules/ngx-models/_enums/button-new/button-new-icon-style-type.enum.js +12 -0
  297. package/build-esm/_modules/ngx-models/_enums/button-new/button-new-size.enum.js +15 -0
  298. package/build-esm/_modules/ngx-models/_enums/button-new/button-new-style-type.enum.js +17 -0
  299. package/build-esm/_modules/ngx-models/_enums/button-type.enum.js +35 -0
  300. package/build-esm/_modules/ngx-models/_enums/checkbox-label-position.enum.js +8 -0
  301. package/build-esm/_modules/ngx-models/_enums/container-type.enum.js +11 -0
  302. package/build-esm/_modules/ngx-models/_enums/errors/error-level.enum.js +14 -0
  303. package/build-esm/_modules/ngx-models/_enums/errors/error-notification-color.enum.js +14 -0
  304. package/build-esm/_modules/ngx-models/_enums/errors/error-ui-mode.enum.js +14 -0
  305. package/build-esm/_modules/ngx-models/_enums/field-appearance.enum.js +13 -0
  306. package/build-esm/_modules/ngx-models/_enums/field-type.enum.js +49 -0
  307. package/build-esm/_modules/ngx-models/_enums/file-type.enum.js +12 -0
  308. package/build-esm/_modules/ngx-models/_enums/flex/flex-layout-align.enum.js +21 -0
  309. package/build-esm/_modules/ngx-models/_enums/flex/flex-layout.enum.js +6 -0
  310. package/build-esm/_modules/ngx-models/_enums/form-access.enum.js +9 -0
  311. package/build-esm/_modules/ngx-models/_enums/form-reset-data.enum.js +12 -0
  312. package/build-esm/_modules/ngx-models/_enums/form-store-on.enum.js +8 -0
  313. package/build-esm/_modules/ngx-models/_enums/forms-new/field-new-validator-type.enum.js +21 -0
  314. package/build-esm/_modules/ngx-models/_enums/frames/header-item-type.enum.js +16 -0
  315. package/build-esm/_modules/ngx-models/_enums/frames/header-position.enum.js +11 -0
  316. package/build-esm/_modules/ngx-models/_enums/frames/side-nav-badge-color.enum.js +14 -0
  317. package/build-esm/_modules/ngx-models/_enums/html/input-types.enum.js +26 -0
  318. package/build-esm/_modules/ngx-models/_enums/material-color.enum.js +14 -0
  319. package/build-esm/_modules/ngx-models/_enums/material-tooltip-position.enum.js +13 -0
  320. package/build-esm/_modules/ngx-models/_enums/preconfigured-field-type.enum.js +8 -0
  321. package/build-esm/_modules/ngx-models/_enums/storage-type.enum.js +13 -0
  322. package/build-esm/_modules/ngx-models/_enums/validator-type.enum.js +7 -0
  323. package/build-esm/_modules/ngx-models/_enums/voice/audio-mime-type.enum.js +15 -0
  324. package/build-esm/_modules/ngx-models/_enums/voice/voice-provider-type.enum.js +32 -0
  325. package/build-esm/_modules/ngx-models/_enums/voice/voice-recorder-state.enum.js +21 -0
  326. package/build-esm/_modules/ngx-models/_models/control-models/button-new-style-settings.control-model.js +44 -0
  327. package/build-esm/_modules/ngx-models/_models/control-models/button-params.control-model.js +304 -0
  328. package/build-esm/_modules/ngx-models/_models/control-models/chat/chat-column-layout-settings.control-model.js +59 -0
  329. package/build-esm/_modules/ngx-models/_models/control-models/data-handler-settings.control-model.js +94 -0
  330. package/build-esm/_modules/ngx-models/_models/control-models/data-handler.control-model.js +407 -0
  331. package/build-esm/_modules/ngx-models/_models/control-models/errors/error-notification.control-model.js +43 -0
  332. package/build-esm/_modules/ngx-models/_models/control-models/errors/error-settings.control-model.js +64 -0
  333. package/build-esm/_modules/ngx-models/_models/control-models/errors/errors-settings.control-model.js +52 -0
  334. package/build-esm/_modules/ngx-models/_models/control-models/field-settings.control-model.js +207 -0
  335. package/build-esm/_modules/ngx-models/_models/control-models/form-settings.control-model.js +275 -0
  336. package/build-esm/_modules/ngx-models/_models/control-models/forms-new/checkbox-field-new-settings.control-model.js +29 -0
  337. package/build-esm/_modules/ngx-models/_models/control-models/forms-new/color-picker-field-new-settings.control-model.js +36 -0
  338. package/build-esm/_modules/ngx-models/_models/control-models/forms-new/date-field-new-settings.control-model.js +31 -0
  339. package/build-esm/_modules/ngx-models/_models/control-models/forms-new/date-range-field-new-settings.control-model.js +46 -0
  340. package/build-esm/_modules/ngx-models/_models/control-models/forms-new/datetime-field-new-settings.control-model.js +38 -0
  341. package/build-esm/_modules/ngx-models/_models/control-models/forms-new/datetime-range-field-new-settings.control-model.js +48 -0
  342. package/build-esm/_modules/ngx-models/_models/control-models/forms-new/emoji-picker-field-new-settings.control-model.js +21 -0
  343. package/build-esm/_modules/ngx-models/_models/control-models/forms-new/field-new-settings.control-model.js +91 -0
  344. package/build-esm/_modules/ngx-models/_models/control-models/forms-new/field-new-types.js +1 -0
  345. package/build-esm/_modules/ngx-models/_models/control-models/forms-new/form-new-settings.control-model.js +39 -0
  346. package/build-esm/_modules/ngx-models/_models/control-models/forms-new/icon-picker-field-new-settings.control-model.js +39 -0
  347. package/build-esm/_modules/ngx-models/_models/control-models/forms-new/index.js +23 -0
  348. package/build-esm/_modules/ngx-models/_models/control-models/forms-new/multiselect-field-new-settings.control-model.js +31 -0
  349. package/build-esm/_modules/ngx-models/_models/control-models/forms-new/number-field-new-settings.control-model.js +29 -0
  350. package/build-esm/_modules/ngx-models/_models/control-models/forms-new/password-field-new-settings.control-model.js +51 -0
  351. package/build-esm/_modules/ngx-models/_models/control-models/forms-new/picker-field-new-option.interface.js +1 -0
  352. package/build-esm/_modules/ngx-models/_models/control-models/forms-new/radio-select-field-new-settings.control-model.js +38 -0
  353. package/build-esm/_modules/ngx-models/_models/control-models/forms-new/select-field-new-settings.control-model.js +35 -0
  354. package/build-esm/_modules/ngx-models/_models/control-models/forms-new/slider-field-new-settings.control-model.js +50 -0
  355. package/build-esm/_modules/ngx-models/_models/control-models/forms-new/slider-range-field-new-settings.control-model.js +47 -0
  356. package/build-esm/_modules/ngx-models/_models/control-models/forms-new/text-field-new-settings.control-model.js +35 -0
  357. package/build-esm/_modules/ngx-models/_models/control-models/forms-new/textarea-field-new-settings.control-model.js +27 -0
  358. package/build-esm/_modules/ngx-models/_models/control-models/frames/header-item-settings.control-model.js +44 -0
  359. package/build-esm/_modules/ngx-models/_models/control-models/frames/main-frame-settings.control-model.js +56 -0
  360. package/build-esm/_modules/ngx-models/_models/control-models/frames/side-nav-item-settings.control-model.js +58 -0
  361. package/build-esm/_modules/ngx-models/_models/control-models/frames/side-nav-settings.control-model.js +38 -0
  362. package/build-esm/_modules/ngx-models/_models/control-models/select.control-model.js +27 -0
  363. package/build-esm/_modules/ngx-models/_models/control-models/signal-data-list-handler-settings.control-model.js +23 -0
  364. package/build-esm/_modules/ngx-models/_models/control-models/signal-data-search-handler-settings.control-model.js +25 -0
  365. package/build-esm/_modules/ngx-models/_models/control-models/signal-list-collector-data-handler-settings.control-model.js +12 -0
  366. package/build-esm/_modules/ngx-models/_models/control-models/voice/voice-providers-settings.control-model.js +22 -0
  367. package/build-esm/_modules/ngx-models/_models/control-models/voice/voice-record-button-settings.control-model.js +91 -0
  368. package/build-esm/_modules/ngx-models/_models/control-models/voice/voice-recorder-settings.control-model.js +42 -0
  369. package/build-esm/_modules/ngx-models/_models/interfaces/button-new-settings.interface.js +1 -0
  370. package/build-esm/_modules/ngx-models/_models/interfaces/confirm-settings.interface.js +1 -0
  371. package/build-esm/_modules/ngx-models/_models/interfaces/global-settings.interface.js +1 -0
  372. package/build-esm/_modules/ngx-models/_models/interfaces/select-options-custom-constructor.interface.js +1 -0
  373. package/build-esm/_modules/ngx-models/_models/interfaces/storage.service.js +40 -0
  374. package/build-esm/_modules/ngx-models/_models/interfaces/voice/speak-options.interface.js +1 -0
  375. package/build-esm/_modules/ngx-models/_models/interfaces/voice/speak-result.interface.js +1 -0
  376. package/build-esm/_modules/ngx-models/_models/interfaces/voice/transcribe-options.interface.js +1 -0
  377. package/build-esm/_modules/ngx-models/_models/interfaces/voice/transcribe-result.interface.js +1 -0
  378. package/build-esm/_modules/ngx-models/_models/interfaces/voice/voice-profile.interface.js +1 -0
  379. package/build-esm/_modules/ngx-models/_models/interfaces/voice/voice-provider-init.interface.js +1 -0
  380. package/build-esm/_modules/ngx-models/_utils/shared.service.js +407 -0
  381. package/build-esm/_modules/ngx-models/index.js +89 -0
  382. package/build-esm/_modules/operation-control/_collections/operation-lease.util.js +323 -0
  383. package/build-esm/_modules/operation-control/_enums/operation-decision-code.type-enum.js +22 -0
  384. package/build-esm/_modules/operation-control/_enums/operation-state.type-enum.js +9 -0
  385. package/build-esm/_modules/operation-control/_models/operation-lease.interface.js +1 -0
  386. package/build-esm/_modules/operation-control/index.js +4 -0
  387. package/build-esm/_modules/pipe/_collections/pip-transforms.const.js +32 -0
  388. package/build-esm/_modules/pipe/_collections/utils/pip-country-pipe.util.js +29 -0
  389. package/build-esm/_modules/pipe/_collections/utils/pip-custom-pipe.util.js +22 -0
  390. package/build-esm/_modules/pipe/_collections/utils/pip-division-pipe.util.js +21 -0
  391. package/build-esm/_modules/pipe/_collections/utils/pip-json-pipe.util.js +18 -0
  392. package/build-esm/_modules/pipe/_collections/utils/pip-list-pipe.util.js +19 -0
  393. package/build-esm/_modules/pipe/_collections/utils/pip-multi-pipe-pipe.util.js +164 -0
  394. package/build-esm/_modules/pipe/_collections/utils/pip-obj-key-pipe.util.js +16 -0
  395. package/build-esm/_modules/pipe/_collections/utils/pip-range-pipe.util.js +64 -0
  396. package/build-esm/_modules/pipe/_collections/utils/pip-region-pipe.util.js +22 -0
  397. package/build-esm/_modules/pipe/_collections/utils/pip-replace-pipe.util.js +15 -0
  398. package/build-esm/_modules/pipe/_collections/utils/pip-slider-pipe.util.js +26 -0
  399. package/build-esm/_modules/pipe/_collections/utils/pip-smart-replace-pipe.util.js +40 -0
  400. package/build-esm/_modules/pipe/_enums/pip-range-pipe-setting.enum.js +14 -0
  401. package/build-esm/_modules/pipe/_enums/pip.enum.js +48 -0
  402. package/build-esm/_modules/pipe/_models/pip-multi-pipe-settings.type.js +1 -0
  403. package/build-esm/_modules/pipe/_models/pip-transforms.interface.js +1 -0
  404. package/build-esm/_modules/pipe/index.js +22 -0
  405. package/build-esm/_modules/request-safety/_collections/request-safety-inspector.util.js +317 -0
  406. package/build-esm/_modules/request-safety/_enums/request-safety-finding.type-enum.js +39 -0
  407. package/build-esm/_modules/request-safety/_models/request-safety.interface.js +1 -0
  408. package/build-esm/_modules/request-safety/index.js +3 -0
  409. package/build-esm/_modules/sandbox-runtime/_collections/zero-egress-receipt.util.js +154 -0
  410. package/build-esm/_modules/sandbox-runtime/_collections/zero-egress-result-code.const.js +36 -0
  411. package/build-esm/_modules/sandbox-runtime/_enums/zero-egress-outcome.type-enum.js +11 -0
  412. package/build-esm/_modules/sandbox-runtime/_models/zero-egress-receipt.interface.js +1 -0
  413. package/build-esm/_modules/sandbox-runtime/index.js +4 -0
  414. package/build-esm/_modules/security/_collections/stored-secret.util.js +68 -0
  415. package/build-esm/_modules/security/_models/stored-secret.control-model.js +52 -0
  416. package/build-esm/_modules/security/index.js +7 -0
  417. package/build-esm/_modules/socket/_enums/sck-event-key.enum.js +18 -0
  418. package/build-esm/_modules/socket/_models/sck-client-params.control-model.js +47 -0
  419. package/build-esm/_modules/socket/_models/sck-socket-event.control-model.js +133 -0
  420. package/build-esm/_modules/socket/_services/sck-client.service-base.js +314 -0
  421. package/build-esm/_modules/socket/index.js +7 -0
  422. package/build-esm/_modules/state-machine/_models/state-machine-config.interface.js +1 -0
  423. package/build-esm/_modules/state-machine/_models/state-machine-event.interface.js +1 -0
  424. package/build-esm/_modules/state-machine/_models/state-machine.control-model.js +262 -0
  425. package/build-esm/_modules/state-machine/_models/state-transition-result.interface.js +1 -0
  426. package/build-esm/_modules/state-machine/_models/state-transition.interface.js +1 -0
  427. package/build-esm/_modules/state-machine/index.js +6 -0
  428. package/build-esm/_modules/test/_collections/tst-module-settings.const.js +38 -0
  429. package/build-esm/_modules/test/index.js +2 -0
  430. package/build-esm/_modules/usage/_collections/usg-module-settings.const.js +16 -0
  431. package/build-esm/_modules/usage/_models/usg-action.control-model.js +25 -0
  432. package/build-esm/_modules/usage/_models/usg-daily-usage-data.control-model.js +30 -0
  433. package/build-esm/_modules/usage/_models/usg-data.control-model.js +30 -0
  434. package/build-esm/_modules/usage/_models/usg-session.data-model.js +60 -0
  435. package/build-esm/_modules/usage/index.js +7 -0
  436. package/build-esm/index.js +108 -0
  437. package/package.json +85 -84
@@ -0,0 +1,136 @@
1
+ import { DyFM_OperationAuth_Type } from '../../_enums/operation-auth.type-enum';
2
+ import { DyFM_OperationContext_ControlModel } from '../../_models/control-models/operation-context.control-model';
3
+ import { DyFM_Error } from '../../_models/control-models/error.control-model';
4
+ /**
5
+ * The scope that grants EVERY operation (owner decision D-9, 2026-09-18: "legyen all scope").
6
+ *
7
+ * ⚠️ **What it means, stated plainly:** a key holding this scope passes every scope check — including the
8
+ * checks of operations that DO NOT EXIST YET. A capability added next month is granted to it automatically,
9
+ * with nobody re-approving. That is the deliberate trade of this decision: one token instead of a list.
10
+ *
11
+ * ⛔ It can not collide with a real scope: an operation scope always names a domain and an action
12
+ * (`note:read`), so no declared `apiKeyScope` can ever be this token.
13
+ */
14
+ export const DyFM_operationAllScope = '*';
15
+ /**
16
+ * Transport-independent authorization checks of an operation call (HP-DOPL MP-1.4).
17
+ *
18
+ * Two phases, because ownership needs the loaded entity:
19
+ * 1. `check` / `assert` — identity + API key scope, BEFORE the operation runs;
20
+ * 2. `checkOwnership` / `assertOwnership` — inside `run`, once the target entity is loaded.
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * DyFM_OperationAuthz_Util.assert(operation, ctx);
25
+ * const task: Task = await loadTask(id);
26
+ * DyFM_OperationAuthz_Util.assertOwnership(operation, ctx, task);
27
+ * ```
28
+ */
29
+ export class DyFM_OperationAuthz_Util {
30
+ /**
31
+ * Checks the identity and API key scope requirements of the operation.
32
+ * @param operation - the operation being called
33
+ * @param ctx - the call context built by the transport adapter
34
+ */
35
+ static check(operation, ctx) {
36
+ const issuerRequired = operation?.authz?.issuerRequired !== false;
37
+ const authKind = ctx?.authKind ?? DyFM_OperationAuth_Type.none;
38
+ // a missing identity is 401, the caller may retry with credentials
39
+ if (issuerRequired && (authKind === DyFM_OperationAuth_Type.none || !ctx?.issuer)) {
40
+ return DyFM_OperationAuthz_Util.deny('DyFM-OPZ-UNA', 401, `operation "${operation?.name}" requires an authenticated caller`, 'This operation needs an authenticated caller — send an API key or a token.');
41
+ }
42
+ // scopes only restrict API keys; a token call is not scope-limited
43
+ if (authKind !== DyFM_OperationAuth_Type.apiKey) {
44
+ return { allowed: true };
45
+ }
46
+ // legacy key (created before scopes): full access, but the adapter must surface the warning
47
+ if (DyFM_OperationContext_ControlModel.isLegacyApiKey(ctx)) {
48
+ return { allowed: true, warning: 'legacy-api-key' };
49
+ }
50
+ const requiredScope = operation?.authz?.apiKeyScope;
51
+ // a public operation without scope is reachable anonymously, so a scoped key must not be worse off
52
+ if (!requiredScope && !issuerRequired) {
53
+ return { allowed: true };
54
+ }
55
+ // least privilege: a scoped key can not reach a protected operation that belongs to no scope
56
+ if (!requiredScope) {
57
+ return DyFM_OperationAuthz_Util.deny('DyFM-OPZ-NSC', 403, `operation "${operation?.name}" declares no apiKeyScope, a scoped API key can not call it`, 'This operation can not be called with an API key. Call it with a user token.');
58
+ }
59
+ // the all-scope grants every operation (D-9); otherwise the match is EXACT — a scope is never a prefix
60
+ if (!DyFM_OperationAuthz_Util.grantsScope(ctx.apiKeyScopes, requiredScope)) {
61
+ return DyFM_OperationAuthz_Util.deny('DyFM-OPZ-SCP', 403, `API key lacks scope "${requiredScope}" for operation "${operation?.name}"`, `The API key is missing the "${requiredScope}" scope, which this operation needs. ` +
62
+ 'Create a key that has it (an existing key\'s scopes can not be widened).');
63
+ }
64
+ return { allowed: true };
65
+ }
66
+ /**
67
+ * Same as `check`, but throws a coded `DyFM_Error` (with `status`) on denial.
68
+ * @returns the allowed result, so a `warning` can still be surfaced by the adapter
69
+ */
70
+ static assert(operation, ctx) {
71
+ return DyFM_OperationAuthz_Util.throwIfDenied(DyFM_OperationAuthz_Util.check(operation, ctx), operation, ctx);
72
+ }
73
+ /**
74
+ * Checks that the caller owns the loaded target entity, when the operation declares `authz.ownership`.
75
+ * @param operation - the operation being called
76
+ * @param ctx - the call context; its `clientUserId` is the owner identity (never `issuer`)
77
+ * @param target - the loaded entity the operation acts on
78
+ */
79
+ static checkOwnership(operation, ctx, target) {
80
+ const ownershipField = operation?.authz?.ownership;
81
+ // no ownership declared: nothing to check
82
+ if (!ownershipField) {
83
+ return { allowed: true };
84
+ }
85
+ // a declared ownership check without a caller identity must fail closed, not pass
86
+ if (!ctx?.clientUserId) {
87
+ return DyFM_OperationAuthz_Util.deny('DyFM-OPZ-OWN', 403, `operation "${operation?.name}" requires the caller's clientUserId for the ownership check`, 'This operation works on your own data, so it needs to know which user you are.');
88
+ }
89
+ const owner = target ? Reflect.get(target, ownershipField) : undefined;
90
+ // strict equality: an entity without owner is not owned by anybody
91
+ if (owner === undefined || owner === null || String(owner) !== ctx.clientUserId) {
92
+ return DyFM_OperationAuthz_Util.deny('DyFM-OPZ-OWN', 403, `caller does not own the target of operation "${operation?.name}" (field: ${ownershipField})`,
93
+ // ⛔ the owner and the field name stay inside: the caller only learns that it is not theirs
94
+ 'This item belongs to somebody else.');
95
+ }
96
+ return { allowed: true };
97
+ }
98
+ /** Same as `checkOwnership`, but throws a coded `DyFM_Error` (with `status`) on denial. */
99
+ static assertOwnership(operation, ctx, target) {
100
+ return DyFM_OperationAuthz_Util.throwIfDenied(DyFM_OperationAuthz_Util.checkOwnership(operation, ctx, target), operation, ctx);
101
+ }
102
+ /** Builds a denial result. */
103
+ /**
104
+ * Whether a key's scope list covers the required scope — either exactly, or through the all-scope (D-9).
105
+ *
106
+ * @param scopes - the scopes the key carries
107
+ * @param requiredScope - the scope the operation declares
108
+ */
109
+ static grantsScope(scopes, requiredScope) {
110
+ const held = scopes ?? [];
111
+ return held.includes(requiredScope) || held.includes(DyFM_operationAllScope);
112
+ }
113
+ static deny(errorCode, status, reason, userMessage) {
114
+ return {
115
+ allowed: false, errorCode: errorCode, status: status, reason: reason, userMessage: userMessage,
116
+ };
117
+ }
118
+ /** Converts a denial into a thrown `DyFM_Error`; the identity is logged by requestId only. */
119
+ static throwIfDenied(result, operation, ctx) {
120
+ if (result.allowed) {
121
+ return result;
122
+ }
123
+ throw new DyFM_Error({
124
+ errorCode: result.errorCode,
125
+ status: result.status,
126
+ message: `Operation authorization failed: ${result.reason}`,
127
+ // ⛔ the internal `message` never reaches the caller — this is the text written FOR them
128
+ userMessage: result.userMessage,
129
+ additionalContent: {
130
+ operation: operation?.name,
131
+ requestId: ctx?.requestId,
132
+ authKind: ctx?.authKind,
133
+ },
134
+ });
135
+ }
136
+ }
@@ -0,0 +1,220 @@
1
+ import { DyFM_OperationIfMatch_Type } from '../../_enums/operation-if-match.type-enum';
2
+ import { DyFM_Error } from '../../_models/control-models/error.control-model';
3
+ import { DyFM_OperationPatchField_Type } from '../../_enums/operation-patch-field.type-enum';
4
+ /**
5
+ * Transport-independent write guardrails of an operation (HP-DOPL MP-1.5, DMCP-009).
6
+ *
7
+ * Two phases, like the authorization:
8
+ * 1. `assertPreconditions` — before running (called by `DyFM_OperationRun_Util.execute`);
9
+ * 2. `assertIfMatch` / `filterPatch` — inside `run`, once the current entity is loaded.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * const task: Task = await loadTask(id);
14
+ * DyFM_OperationGuardrails_Util.assertIfMatch(op, ctx, DyFM_OperationGuardrails_Util.buildEtag(task.__v));
15
+ * const { patch } = DyFM_OperationGuardrails_Util.filterPatch(op, input);
16
+ * if (!ctx.dryRun) await saveTask(id, patch);
17
+ * ```
18
+ */
19
+ export class DyFM_OperationGuardrails_Util {
20
+ /**
21
+ * Builds the etag of an entity from its document version (`__v`), as the organizer MCP does.
22
+ * @param version - the document version; a missing version counts as `0`
23
+ */
24
+ static buildEtag(version) {
25
+ return String(version || 0);
26
+ }
27
+ /**
28
+ * Checks what can be checked without the entity: dry-run support and the presence of a required `ifMatch`.
29
+ * @throws a coded `DyFM_Error` (400 `DyFM-OPG-DRY` · 428 `DyFM-OPG-IFM`)
30
+ */
31
+ static assertPreconditions(operation, ctx) {
32
+ // a caller asking for a dry run must never cause a real write
33
+ if (ctx?.dryRun === true && operation?.guardrails?.dryRun !== true) {
34
+ throw DyFM_OperationGuardrails_Util.error({
35
+ errorCode: 'DyFM-OPG-DRY', status: 400, operation: operation, ctx: ctx,
36
+ message: `operation "${operation?.name}" does not support dryRun`,
37
+ });
38
+ }
39
+ // a required precondition that is missing: the caller must fetch the entity first
40
+ if (operation?.guardrails?.ifMatch === DyFM_OperationIfMatch_Type.required && !ctx?.ifMatch) {
41
+ throw DyFM_OperationGuardrails_Util.error({
42
+ errorCode: 'DyFM-OPG-IFM', status: 428, operation: operation, ctx: ctx,
43
+ message: `operation "${operation?.name}" requires ifMatch (the etag of the entity)`,
44
+ details: { suggestion: 'Fetch the entity and send its current etag as ifMatch.' },
45
+ });
46
+ }
47
+ }
48
+ /**
49
+ * Compares the caller's `ifMatch` with the entity's current etag.
50
+ * @param currentEtag - the etag of the entity as loaded now
51
+ * @throws 409 `DyFM-OPG-CNF` on mismatch (and 428 when a required `ifMatch` is missing)
52
+ */
53
+ static assertIfMatch(operation, ctx, currentEtag) {
54
+ const mode = operation?.guardrails?.ifMatch ?? DyFM_OperationIfMatch_Type.none;
55
+ if (mode === DyFM_OperationIfMatch_Type.none) {
56
+ return;
57
+ }
58
+ // repeated here, so the check is complete even when run is called outside execute
59
+ if (!ctx?.ifMatch) {
60
+ if (mode === DyFM_OperationIfMatch_Type.required) {
61
+ throw DyFM_OperationGuardrails_Util.error({
62
+ errorCode: 'DyFM-OPG-IFM', status: 428, operation: operation, ctx: ctx,
63
+ message: `operation "${operation?.name}" requires ifMatch (the etag of the entity)`,
64
+ details: { suggestion: 'Fetch the entity and send its current etag as ifMatch.' },
65
+ });
66
+ }
67
+ return;
68
+ }
69
+ if (ctx.ifMatch !== currentEtag) {
70
+ throw DyFM_OperationGuardrails_Util.error({
71
+ errorCode: 'DyFM-OPG-CNF', status: 409, operation: operation, ctx: ctx,
72
+ message: `operation "${operation?.name}": etag mismatch (expected ${currentEtag}, got ${ctx.ifMatch})`,
73
+ details: {
74
+ expected: currentEtag,
75
+ received: ctx.ifMatch,
76
+ suggestion: 'Fetch the entity again and retry with its fresh etag.',
77
+ },
78
+ });
79
+ }
80
+ }
81
+ /**
82
+ * Applies the patch whitelist of the operation.
83
+ * @param patch - the caller-provided patch object
84
+ * @returns the whitelisted patch and the dropped field names (unchanged patch without a whitelist)
85
+ * @throws 400 `DyFM-OPG-PTY` (not an object) · `DyFM-OPG-PFD` (rejected fields) · `DyFM-OPG-PEM` (nothing left)
86
+ */
87
+ static filterPatch(operation, patch, ctx) {
88
+ if (!patch || typeof patch !== 'object' || Array.isArray(patch)) {
89
+ throw DyFM_OperationGuardrails_Util.error({
90
+ errorCode: 'DyFM-OPG-PTY', status: 400, operation: operation, ctx: ctx,
91
+ message: `operation "${operation?.name}": patch must be an object`,
92
+ });
93
+ }
94
+ const declared = DyFM_OperationGuardrails_Util.patchFieldsOf(operation?.guardrails?.patchWhitelist);
95
+ // no whitelist declared: the guardrail is not active for this operation
96
+ if (!declared) {
97
+ return { patch: { ...patch }, droppedFields: [] };
98
+ }
99
+ const allowedFields = declared.map((one) => one.field);
100
+ const filtered = {};
101
+ const droppedFields = [];
102
+ Object.keys(patch).forEach((field) => {
103
+ if (allowedFields.includes(field)) {
104
+ filtered[field] = patch[field];
105
+ }
106
+ else {
107
+ droppedFields.push(field);
108
+ }
109
+ });
110
+ if (droppedFields.length && operation.guardrails?.unknownPatchFields === 'reject') {
111
+ throw DyFM_OperationGuardrails_Util.error({
112
+ errorCode: 'DyFM-OPG-PFD', status: 400, operation: operation, ctx: ctx,
113
+ message: `operation "${operation?.name}": patch fields not allowed: ${droppedFields.join(', ')}`,
114
+ details: { droppedFields: droppedFields, allowedFields: allowedFields },
115
+ });
116
+ }
117
+ if (!Object.keys(filtered).length) {
118
+ throw DyFM_OperationGuardrails_Util.error({
119
+ errorCode: 'DyFM-OPG-PEM', status: 400, operation: operation, ctx: ctx,
120
+ message: `operation "${operation?.name}": the patch has no allowed field`,
121
+ details: { droppedFields: droppedFields, allowedFields: allowedFields },
122
+ });
123
+ }
124
+ // value check AFTER filtering: a dropped field is not the caller's problem to fix, a wrong value is
125
+ const violations = DyFM_OperationGuardrails_Util.checkPatchValues(declared, filtered);
126
+ if (violations.length) {
127
+ const first = violations[0];
128
+ throw DyFM_OperationGuardrails_Util.error({
129
+ errorCode: 'DyFM-OPG-PVL', status: 400, operation: operation, ctx: ctx,
130
+ message: `operation "${operation?.name}": patch field "${first.field}" expects a ${first.expectedType} value`,
131
+ details: { ...first, violations: violations },
132
+ });
133
+ }
134
+ return { patch: filtered, droppedFields: droppedFields };
135
+ }
136
+ /**
137
+ * Checks the values of an ALREADY FILTERED patch against the declared field types — and only reports;
138
+ * it never throws.
139
+ *
140
+ * # Why this is public and error-free
141
+ *
142
+ * The RULE (what a usable value is) belongs to the bedrock, but the ERROR SHAPE belongs to the transport:
143
+ * an operation raises a coded `DyFM_Error`, while a hand-written MCP or REST handler has its own error
144
+ * contract that its callers already depend on. A shared throwing helper would force one of them to adopt
145
+ * the other's error — a consumer-visible change for no benefit.
146
+ *
147
+ * ⚠️ MEASURED NEED (HP-DOPL 8.2, 2026-09-19): the organizer's LIVE MCP route has its own patch validator
148
+ * and its own error type; it needs exactly this rule and none of this package's error handling. Without
149
+ * this method it would have to copy the type checks — a second owner of the same logic.
150
+ *
151
+ * @param fields - the declared patch fields (use `patchFieldsOf` to normalize a raw whitelist)
152
+ * @param patch - the patch to check; fields not present in it are skipped
153
+ * @returns one entry per violating field (empty when every value is usable)
154
+ */
155
+ static checkPatchValues(fields, patch) {
156
+ const violations = [];
157
+ fields.forEach((one) => {
158
+ if (!one.type || !(one.field in patch))
159
+ return;
160
+ const value = patch[one.field];
161
+ if (value === null && one.nullable)
162
+ return;
163
+ if (!DyFM_OperationGuardrails_Util.isPatchValueValid(value, one.type)) {
164
+ violations.push({
165
+ field: one.field,
166
+ expectedType: one.type,
167
+ nullable: Boolean(one.nullable),
168
+ receivedType: value === null ? 'null' : typeof value,
169
+ });
170
+ }
171
+ });
172
+ return violations;
173
+ }
174
+ /**
175
+ * Normalizes a `patchWhitelist` into typed entries, so the rest of the code has ONE shape to handle.
176
+ * @param whitelist - the declared whitelist (names, typed entries, or a mix of both)
177
+ * @returns the normalized entries, or `undefined` when no whitelist is declared
178
+ */
179
+ static patchFieldsOf(whitelist) {
180
+ if (!whitelist)
181
+ return undefined;
182
+ return whitelist.map((one) => typeof one === 'string' ? { field: one } : one);
183
+ }
184
+ /**
185
+ * Checks a patch value against its declared type.
186
+ * @param value - the value the caller sent
187
+ * @param type - the declared type of the field
188
+ * @returns whether the value is usable for that type
189
+ */
190
+ static isPatchValueValid(value, type) {
191
+ switch (type) {
192
+ case DyFM_OperationPatchField_Type.string:
193
+ return typeof value === 'string';
194
+ case DyFM_OperationPatchField_Type.number:
195
+ return typeof value === 'number' && Number.isFinite(value);
196
+ case DyFM_OperationPatchField_Type.boolean:
197
+ return typeof value === 'boolean';
198
+ case DyFM_OperationPatchField_Type.date:
199
+ // deliberately the SAME check a create path performs: the value must yield a valid date
200
+ return ((typeof value === 'string' && Boolean(value.trim())) ||
201
+ (typeof value === 'number' && Number.isFinite(value)) ||
202
+ value instanceof Date) && !isNaN(new Date(value).getTime());
203
+ case DyFM_OperationPatchField_Type.object:
204
+ return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
205
+ case DyFM_OperationPatchField_Type.array:
206
+ return Array.isArray(value);
207
+ default:
208
+ return true;
209
+ }
210
+ }
211
+ /** Builds a coded guardrail error carrying the operation, the requestId and the details. */
212
+ static error(set) {
213
+ return new DyFM_Error({
214
+ errorCode: set.errorCode,
215
+ status: set.status,
216
+ message: set.message,
217
+ additionalContent: { operation: set.operation?.name, requestId: set.ctx?.requestId, ...set.details },
218
+ });
219
+ }
220
+ }
@@ -0,0 +1,81 @@
1
+ import { DyFM_Error } from '../../_models/control-models/error.control-model';
2
+ import { DyFM_OperationIfMatch_Type } from '../../_enums/operation-if-match.type-enum';
3
+ import { DyFM_OperationAuthz_Util } from './operation-authz.util';
4
+ import { DyFM_OperationGuardrails_Util } from './operation-guardrails.util';
5
+ /**
6
+ * The single execution path of an operation (HP-DOPL MP-1.2, decision D-2): every transport adapter
7
+ * calls `execute`, so authorization and error shaping can not diverge between REST, MCP and CLI.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * const outcome: DyFM_OperationRun_Result<Task> = await DyFM_OperationRun_Util.execute(getTask, ctx, [ taskId ]);
12
+ * ```
13
+ */
14
+ export class DyFM_OperationRun_Util {
15
+ /**
16
+ * Authorizes and runs the operation.
17
+ * @param operation - the operation to run; must have a `run` implementation
18
+ * @param ctx - the call context built by the transport adapter
19
+ * @param inputs - the positional inputs of `run`, after the context
20
+ * @returns the result and the non-fatal warnings; throws a coded `DyFM_Error` on any failure
21
+ */
22
+ static async execute(operation, ctx, inputs) {
23
+ // a definition without implementation (e.g. a client-side copy) can not be executed
24
+ if (typeof operation?.run !== 'function') {
25
+ throw new DyFM_Error({
26
+ errorCode: 'DyFM-OPR-NRN',
27
+ status: 501,
28
+ message: `Operation "${operation?.name}" has no run implementation`,
29
+ additionalContent: { operation: operation?.name, requestId: ctx?.requestId },
30
+ });
31
+ }
32
+ // authorization happens before any work, on every transport alike
33
+ const authz = DyFM_OperationAuthz_Util.assert(operation, ctx);
34
+ // guardrail preconditions after authorization, so an unauthorized caller learns nothing about them
35
+ DyFM_OperationGuardrails_Util.assertPreconditions(operation, ctx);
36
+ try {
37
+ const result = await operation.run(ctx, ...(inputs ?? []));
38
+ return { result: result, warnings: DyFM_OperationRun_Util.warningsOf(operation, ctx, authz) };
39
+ }
40
+ catch (error) {
41
+ // a coded DyFM_Error is kept as-is, anything else is wrapped with the operation context
42
+ if (error instanceof DyFM_Error) {
43
+ throw error;
44
+ }
45
+ throw new DyFM_Error({
46
+ errorCode: 'DyFM-OPR-RUN',
47
+ message: `Operation "${operation.name}" failed`,
48
+ error: error,
49
+ additionalContent: { operation: operation.name, requestId: ctx?.requestId },
50
+ });
51
+ }
52
+ }
53
+ /**
54
+ * Collects the non-fatal warnings of a successful call.
55
+ * `if-match-ignored`: the caller sent `ifMatch`, but the operation does not check it — the caller must not
56
+ * believe the write was protected against concurrent changes.
57
+ */
58
+ static warningsOf(operation, ctx, authz) {
59
+ const warnings = authz.warning ? [authz.warning] : [];
60
+ const ifMatchMode = operation.guardrails?.ifMatch ?? DyFM_OperationIfMatch_Type.none;
61
+ if (ctx?.ifMatch && ifMatchMode === DyFM_OperationIfMatch_Type.none) {
62
+ warnings.push('if-match-ignored');
63
+ }
64
+ return warnings;
65
+ }
66
+ /**
67
+ * Transitional bridge (D-2): wraps an existing route `simpleTask` as a `run` implementation.
68
+ * The context is ignored, because a `simpleTask` never received one; the wrapped operation still
69
+ * gets the shared authorization of `execute`.
70
+ * @param simpleTask - the existing route task
71
+ */
72
+ static fromSimpleTask(simpleTask) {
73
+ if (typeof simpleTask !== 'function') {
74
+ throw new DyFM_Error({
75
+ errorCode: 'DyFM-OPR-BRG',
76
+ message: 'fromSimpleTask requires a simpleTask function',
77
+ });
78
+ }
79
+ return (ctx, ...inputs) => simpleTask(...inputs);
80
+ }
81
+ }
@@ -0,0 +1,159 @@
1
+ import { DyFM_BasicProperty_Type } from '../../_enums/basic-property-type.enum';
2
+ import { DyFM_OperationIfMatch_Type } from '../../_enums/operation-if-match.type-enum';
3
+ import { DyFM_getBasicPropertyType } from './utilities.util';
4
+ /**
5
+ * Generates the input JSON-schema of an operation (HP-DOPL MP-1.6, DMCP-005) from the runtime data model
6
+ * description (`bodyParams.properties`) — TypeScript generics do not exist at runtime, the properties do.
7
+ * Explicit `inputs` are added on top and override a body property of the same name.
8
+ * The guardrail arguments the operation honours are advertised too (`ifMatch` unless `guardrails.ifMatch` is `none`,
9
+ * required when it is `required`; `dryRun` when `guardrails.dryRun`), so a client that validates against the closed
10
+ * schema can still send them — a declared input of the same name is never overridden.
11
+ *
12
+ * Left out on purpose:
13
+ * - server-managed metadata (every key starting with `_`, e.g. `_id`, `__v`, `__created`);
14
+ * - `forbidden`, `readonly` and function-typed properties;
15
+ * - the `authz.ownership` field — ownership is resolved server-side, never taken from caller input.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * const schema: DyFM_Operation_JsonSchema = DyFM_OperationSchema_Util.inputSchema(createTask);
20
+ * // { type: 'object', properties: { title: { type: 'string' } }, required: [ 'title' ], additionalProperties: false }
21
+ * ```
22
+ */
23
+ export class DyFM_OperationSchema_Util {
24
+ /**
25
+ * Builds the object schema of all inputs of the operation.
26
+ * @param operation - the operation description
27
+ */
28
+ static inputSchema(operation) {
29
+ // body properties first, so explicit inputs can override them
30
+ const body = DyFM_OperationSchema_Util.objectSchema(operation?.bodyParams?.properties, operation?.authz?.ownership);
31
+ const properties = body.properties ?? {};
32
+ const required = new Set(body.required ?? []);
33
+ Object.entries(operation?.inputs ?? {}).forEach(([key, input]) => {
34
+ properties[key] = DyFM_OperationSchema_Util.inputSettingsSchema(input);
35
+ // the explicit input decides alone whether the name is required
36
+ if (input.required === true) {
37
+ required.add(key);
38
+ }
39
+ else {
40
+ required.delete(key);
41
+ }
42
+ });
43
+ DyFM_OperationSchema_Util.addGuardrailArgs(operation, properties, required);
44
+ const schema = {
45
+ type: 'object',
46
+ properties: properties,
47
+ additionalProperties: false,
48
+ };
49
+ if (required.size) {
50
+ schema.required = [...required];
51
+ }
52
+ return schema;
53
+ }
54
+ /**
55
+ * Adds the guardrail arguments the operation honours (never over a declared input of the same name).
56
+ * @param operation - the operation description
57
+ * @param properties - the schema properties to extend
58
+ * @param required - the required names to extend
59
+ */
60
+ static addGuardrailArgs(operation, properties, required) {
61
+ const ifMatch = operation?.guardrails?.ifMatch ?? DyFM_OperationIfMatch_Type.none;
62
+ if (ifMatch !== DyFM_OperationIfMatch_Type.none && !properties.ifMatch) {
63
+ properties.ifMatch = {
64
+ type: 'string',
65
+ description: 'The current etag of the entity; the write is refused when the entity changed since.',
66
+ };
67
+ if (ifMatch === DyFM_OperationIfMatch_Type.required) {
68
+ required.add('ifMatch');
69
+ }
70
+ }
71
+ if (operation?.guardrails?.dryRun === true && !properties.dryRun) {
72
+ properties.dryRun = { type: 'boolean', description: 'Validate and preview the change without saving it.' };
73
+ }
74
+ }
75
+ /**
76
+ * Maps one data property (recursively for objects) to a schema.
77
+ * @param property - the data property params
78
+ */
79
+ static propertySchema(property) {
80
+ const basicType = DyFM_OperationSchema_Util.basicTypeOf(property?.type);
81
+ const schema = DyFM_OperationSchema_Util.typeSchema(basicType);
82
+ // the declared type text (e.g. `string[]`) is kept in nonBasicType once the params are constructed
83
+ const declaredType = String(property?.nonBasicType ?? property?.type ?? '');
84
+ // array element type
85
+ if (basicType === DyFM_BasicProperty_Type.array && declaredType.endsWith('[]')) {
86
+ schema.items = DyFM_OperationSchema_Util.typeSchema(DyFM_OperationSchema_Util.basicTypeOf(declaredType.slice(0, -2)));
87
+ }
88
+ // nested object properties
89
+ if (basicType === DyFM_BasicProperty_Type.object && property.subObjectParams) {
90
+ Object.assign(schema, DyFM_OperationSchema_Util.objectSchema(property.subObjectParams));
91
+ }
92
+ if (property?.default !== undefined) {
93
+ schema.default = property.default;
94
+ }
95
+ if (typeof property?.minlength === 'number') {
96
+ schema.minLength = property.minlength;
97
+ }
98
+ if (typeof property?.maxlength === 'number') {
99
+ schema.maxLength = property.maxlength;
100
+ }
101
+ return schema;
102
+ }
103
+ /**
104
+ * Builds an object schema from data properties, leaving out the fields a caller must not set.
105
+ * @param dataProperties - the data model properties
106
+ * @param excludedKey - an additional field to leave out (the ownership field)
107
+ */
108
+ static objectSchema(dataProperties, excludedKey) {
109
+ const properties = {};
110
+ const required = [];
111
+ Object.entries(dataProperties ?? {}).forEach(([key, property]) => {
112
+ if (key === excludedKey || !DyFM_OperationSchema_Util.isCallerSettable(key, property)) {
113
+ return;
114
+ }
115
+ properties[key] = DyFM_OperationSchema_Util.propertySchema(property);
116
+ // a default makes the field optional for the caller
117
+ if (property.required === true && property.default === undefined) {
118
+ required.push(key);
119
+ }
120
+ });
121
+ const schema = { type: 'object', properties: properties, additionalProperties: false };
122
+ if (required.length) {
123
+ schema.required = required;
124
+ }
125
+ return schema;
126
+ }
127
+ /** Maps an explicit operation input to a schema. */
128
+ static inputSettingsSchema(input) {
129
+ const schema = DyFM_OperationSchema_Util.typeSchema(input.type);
130
+ if (input.description) {
131
+ schema.description = input.description;
132
+ }
133
+ if (input.enum) {
134
+ schema.enum = [...input.enum];
135
+ }
136
+ if (input.default !== undefined) {
137
+ schema.default = input.default;
138
+ }
139
+ return schema;
140
+ }
141
+ /** Base schema of a basic type; dates travel as ISO strings. */
142
+ static typeSchema(type) {
143
+ if (type === DyFM_BasicProperty_Type.date) {
144
+ return { type: 'string', format: 'date-time' };
145
+ }
146
+ return { type: type };
147
+ }
148
+ /** A property is caller-settable unless it is metadata, forbidden, readonly or a function. */
149
+ static isCallerSettable(key, property) {
150
+ return !key.startsWith('_') &&
151
+ property?.forbidden !== true &&
152
+ property?.readonly !== true &&
153
+ DyFM_OperationSchema_Util.basicTypeOf(property?.type) !== DyFM_BasicProperty_Type.function;
154
+ }
155
+ /** Normalizes a declared type text to a basic type; a missing type counts as `object`. */
156
+ static basicTypeOf(type) {
157
+ return type ? DyFM_getBasicPropertyType(type) : DyFM_BasicProperty_Type.object;
158
+ }
159
+ }
@@ -0,0 +1,56 @@
1
+ export const DyFM_passwordRegex = new RegExp('^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*]){6,}');
2
+ /* export const DyFM_ALLPasswordRegexUserMessages: string =
3
+ 'Password must include at least one lowercase letter. ' +
4
+ 'Password must include at least one uppercase letter.' +
5
+ 'Password must include at least one digit.' +
6
+ 'Password must include at least one of the !@#$%^&* characters.' +
7
+ 'Password must be at least 6 characters long.'; */
8
+ /**
9
+ * returns an array of errors for a given password if it not match all the requirements
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * const errors = DyFM_getPasswordErrors('Invalid1');
14
+ * console.log(errors); // ['Password must include at least one of the !@#$%^&* characters.']
15
+ *
16
+ * const errors = DyFM_getPasswordErrors('ValidPassword1!');
17
+ * console.log(errors); // []
18
+ * ```
19
+ */
20
+ export function DyFM_getPasswordErrors(password) {
21
+ const errors = [];
22
+ DyFM_passwordErrorsOneByOne.forEach((error) => {
23
+ if (!error.regex.test(password)) {
24
+ errors.push(error.message);
25
+ }
26
+ });
27
+ return errors;
28
+ }
29
+ const DyFM_passwordErrorsOneByOne = [
30
+ {
31
+ regex: new RegExp('^(?=.*[a-z])'),
32
+ code: 'pwErrorLowercase',
33
+ message: 'Password must include at least one lowercase letter.'
34
+ },
35
+ {
36
+ regex: new RegExp('^(?=.*[A-Z])'),
37
+ code: 'pwErrorUppercase',
38
+ message: 'Password must include at least one uppercase letter.'
39
+ },
40
+ {
41
+ regex: new RegExp('^(?=.*[0-9])'),
42
+ code: 'pwErrorDigit',
43
+ message: 'Password must include at least one digit.'
44
+ },
45
+ {
46
+ regex: new RegExp('^(?=.*[!@#$%^&*])'),
47
+ code: 'pwErrorSpecialChar',
48
+ message: 'Password must include at least one of the !@#$%^&* characters.'
49
+ },
50
+ {
51
+ regex: new RegExp('^(?=.{6,})'),
52
+ code: 'pwErrorLength',
53
+ message: 'Password must be at least 6 characters long.'
54
+ },
55
+ ];
56
+ //'!@#$%^&*+-_<>?.,;:|~'
@@ -0,0 +1 @@
1
+ export const DyFM_emailRegex = new RegExp('^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$');