@open-mercato/core 0.4.2-canary-f821f89ef6 → 0.4.2-canary-3b5064ce72

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 (632) hide show
  1. package/dist/generated/entities/notification/index.js +57 -0
  2. package/dist/generated/entities/notification/index.js.map +7 -0
  3. package/dist/generated/entities.ids.generated.js +5 -2
  4. package/dist/generated/entities.ids.generated.js.map +2 -2
  5. package/dist/generated/entity-fields-registry.js +2 -2
  6. package/dist/generated/entity-fields-registry.js.map +2 -2
  7. package/dist/modules/api_docs/frontend/docs/api/page.js +3 -2
  8. package/dist/modules/api_docs/frontend/docs/api/page.js.map +2 -2
  9. package/dist/modules/api_keys/backend/api-keys/page.js +1 -1
  10. package/dist/modules/api_keys/backend/api-keys/page.js.map +2 -2
  11. package/dist/modules/attachments/components/AttachmentLibrary.js +4 -0
  12. package/dist/modules/attachments/components/AttachmentLibrary.js.map +2 -2
  13. package/dist/modules/attachments/components/AttachmentPartitionSettings.js +2 -0
  14. package/dist/modules/attachments/components/AttachmentPartitionSettings.js.map +2 -2
  15. package/dist/modules/auth/api/admin/nav.js +4 -3
  16. package/dist/modules/auth/api/admin/nav.js.map +2 -2
  17. package/dist/modules/auth/api/login.js +25 -6
  18. package/dist/modules/auth/api/login.js.map +2 -2
  19. package/dist/modules/auth/api/profile/route.js +157 -0
  20. package/dist/modules/auth/api/profile/route.js.map +7 -0
  21. package/dist/modules/auth/api/reset/confirm.js +25 -2
  22. package/dist/modules/auth/api/reset/confirm.js.map +2 -2
  23. package/dist/modules/auth/api/reset.js +23 -0
  24. package/dist/modules/auth/api/reset.js.map +2 -2
  25. package/dist/modules/auth/api/sidebar/preferences/route.js +14 -9
  26. package/dist/modules/auth/api/sidebar/preferences/route.js.map +2 -2
  27. package/dist/modules/auth/api/users/route.js +4 -2
  28. package/dist/modules/auth/api/users/route.js.map +2 -2
  29. package/dist/modules/auth/backend/auth/profile/page.js +141 -0
  30. package/dist/modules/auth/backend/auth/profile/page.js.map +7 -0
  31. package/dist/modules/auth/backend/auth/profile/page.meta.js +13 -0
  32. package/dist/modules/auth/backend/auth/profile/page.meta.js.map +7 -0
  33. package/dist/modules/auth/backend/roles/[id]/edit/page.js +4 -1
  34. package/dist/modules/auth/backend/roles/[id]/edit/page.js.map +2 -2
  35. package/dist/modules/auth/backend/roles/page.js +3 -3
  36. package/dist/modules/auth/backend/roles/page.js.map +2 -2
  37. package/dist/modules/auth/backend/users/[id]/edit/page.js +18 -3
  38. package/dist/modules/auth/backend/users/[id]/edit/page.js.map +2 -2
  39. package/dist/modules/auth/backend/users/create/page.js +15 -2
  40. package/dist/modules/auth/backend/users/create/page.js.map +2 -2
  41. package/dist/modules/auth/backend/users/page.js +3 -3
  42. package/dist/modules/auth/backend/users/page.js.map +2 -2
  43. package/dist/modules/auth/cli.js +25 -11
  44. package/dist/modules/auth/cli.js.map +2 -2
  45. package/dist/modules/auth/commands/users.js +59 -2
  46. package/dist/modules/auth/commands/users.js.map +2 -2
  47. package/dist/modules/auth/data/validators.js +6 -3
  48. package/dist/modules/auth/data/validators.js.map +2 -2
  49. package/dist/modules/auth/frontend/login.js +112 -3
  50. package/dist/modules/auth/frontend/login.js.map +2 -2
  51. package/dist/modules/auth/frontend/reset/[token]/page.js +20 -10
  52. package/dist/modules/auth/frontend/reset/[token]/page.js.map +2 -2
  53. package/dist/modules/auth/lib/setup-app.js +42 -8
  54. package/dist/modules/auth/lib/setup-app.js.map +2 -2
  55. package/dist/modules/auth/notifications.js +112 -0
  56. package/dist/modules/auth/notifications.js.map +7 -0
  57. package/dist/modules/auth/services/authService.js +24 -3
  58. package/dist/modules/auth/services/authService.js.map +2 -2
  59. package/dist/modules/business_rules/api/execute/route.js +7 -1
  60. package/dist/modules/business_rules/api/execute/route.js.map +2 -2
  61. package/dist/modules/business_rules/backend/rules/page.js +4 -0
  62. package/dist/modules/business_rules/backend/rules/page.js.map +2 -2
  63. package/dist/modules/business_rules/backend/sets/page.js +3 -0
  64. package/dist/modules/business_rules/backend/sets/page.js.map +2 -2
  65. package/dist/modules/business_rules/cli.js +2 -1
  66. package/dist/modules/business_rules/cli.js.map +2 -2
  67. package/dist/modules/business_rules/data/validators.js +0 -34
  68. package/dist/modules/business_rules/data/validators.js.map +2 -2
  69. package/dist/modules/business_rules/index.js +1 -21
  70. package/dist/modules/business_rules/index.js.map +2 -2
  71. package/dist/modules/business_rules/lib/rule-engine.js +34 -185
  72. package/dist/modules/business_rules/lib/rule-engine.js.map +2 -2
  73. package/dist/modules/business_rules/notifications.js +28 -0
  74. package/dist/modules/business_rules/notifications.js.map +7 -0
  75. package/dist/modules/business_rules/subscribers/rule-execution-failed-notification.js +37 -0
  76. package/dist/modules/business_rules/subscribers/rule-execution-failed-notification.js.map +7 -0
  77. package/dist/modules/catalog/components/PriceKindSettings.js +2 -0
  78. package/dist/modules/catalog/components/PriceKindSettings.js.map +2 -2
  79. package/dist/modules/catalog/components/categories/CategoriesDataTable.js +2 -2
  80. package/dist/modules/catalog/components/categories/CategoriesDataTable.js.map +2 -2
  81. package/dist/modules/catalog/components/products/ProductsDataTable.js +2 -0
  82. package/dist/modules/catalog/components/products/ProductsDataTable.js.map +2 -2
  83. package/dist/modules/catalog/notifications.js +28 -0
  84. package/dist/modules/catalog/notifications.js.map +7 -0
  85. package/dist/modules/catalog/subscribers/low-stock-notification.js +38 -0
  86. package/dist/modules/catalog/subscribers/low-stock-notification.js.map +7 -0
  87. package/dist/modules/configs/cli.js +6 -0
  88. package/dist/modules/configs/cli.js.map +2 -2
  89. package/dist/modules/configs/components/CachePanel.js +4 -4
  90. package/dist/modules/configs/components/CachePanel.js.map +2 -2
  91. package/dist/modules/configs/lib/system-status.js +48 -1
  92. package/dist/modules/configs/lib/system-status.js.map +2 -2
  93. package/dist/modules/configs/lib/upgrade-actions.js +18 -0
  94. package/dist/modules/configs/lib/upgrade-actions.js.map +2 -2
  95. package/dist/modules/currencies/backend/currencies/page.js +3 -0
  96. package/dist/modules/currencies/backend/currencies/page.js.map +2 -2
  97. package/dist/modules/currencies/backend/exchange-rates/page.js +2 -0
  98. package/dist/modules/currencies/backend/exchange-rates/page.js.map +2 -2
  99. package/dist/modules/customers/backend/customers/companies/page.js +3 -0
  100. package/dist/modules/customers/backend/customers/companies/page.js.map +2 -2
  101. package/dist/modules/customers/backend/customers/deals/page.js +3 -0
  102. package/dist/modules/customers/backend/customers/deals/page.js.map +2 -2
  103. package/dist/modules/customers/backend/customers/people/page.js +3 -0
  104. package/dist/modules/customers/backend/customers/people/page.js.map +2 -2
  105. package/dist/modules/customers/commands/deals.js +31 -0
  106. package/dist/modules/customers/commands/deals.js.map +2 -2
  107. package/dist/modules/customers/components/CustomerTodosTable.js +1 -0
  108. package/dist/modules/customers/components/CustomerTodosTable.js.map +2 -2
  109. package/dist/modules/customers/notifications.js +48 -0
  110. package/dist/modules/customers/notifications.js.map +7 -0
  111. package/dist/modules/customers/widgets/dashboard/customer-todos/widget.js +2 -1
  112. package/dist/modules/customers/widgets/dashboard/customer-todos/widget.js.map +2 -2
  113. package/dist/modules/customers/widgets/dashboard/new-customers/widget.js +2 -1
  114. package/dist/modules/customers/widgets/dashboard/new-customers/widget.js.map +2 -2
  115. package/dist/modules/customers/widgets/dashboard/new-deals/widget.js +2 -1
  116. package/dist/modules/customers/widgets/dashboard/new-deals/widget.js.map +2 -2
  117. package/dist/modules/customers/widgets/dashboard/next-interactions/widget.js +2 -1
  118. package/dist/modules/customers/widgets/dashboard/next-interactions/widget.js.map +2 -2
  119. package/dist/modules/dashboards/cli.js +44 -5
  120. package/dist/modules/dashboards/cli.js.map +2 -2
  121. package/dist/modules/dashboards/components/WidgetVisibilityEditor.js +16 -11
  122. package/dist/modules/dashboards/components/WidgetVisibilityEditor.js.map +3 -3
  123. package/dist/modules/dashboards/lib/role-widgets.js +58 -0
  124. package/dist/modules/dashboards/lib/role-widgets.js.map +7 -0
  125. package/dist/modules/dashboards/services/widgetDataService.js +139 -3
  126. package/dist/modules/dashboards/services/widgetDataService.js.map +2 -2
  127. package/dist/modules/dashboards/widgets/dashboard/aov-kpi/widget.js +2 -1
  128. package/dist/modules/dashboards/widgets/dashboard/aov-kpi/widget.js.map +2 -2
  129. package/dist/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.js +2 -1
  130. package/dist/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.js.map +2 -2
  131. package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.js +2 -1
  132. package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.js.map +2 -2
  133. package/dist/modules/dashboards/widgets/dashboard/orders-kpi/widget.js +2 -1
  134. package/dist/modules/dashboards/widgets/dashboard/orders-kpi/widget.js.map +2 -2
  135. package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.js +2 -1
  136. package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.js.map +2 -2
  137. package/dist/modules/dashboards/widgets/dashboard/revenue-kpi/widget.js +2 -1
  138. package/dist/modules/dashboards/widgets/dashboard/revenue-kpi/widget.js.map +2 -2
  139. package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.js +2 -1
  140. package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.js.map +2 -2
  141. package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.js +2 -1
  142. package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.js.map +2 -2
  143. package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.js +2 -1
  144. package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.js.map +2 -2
  145. package/dist/modules/dashboards/widgets/dashboard/top-products/widget.js +2 -1
  146. package/dist/modules/dashboards/widgets/dashboard/top-products/widget.js.map +2 -2
  147. package/dist/modules/dictionaries/components/DictionaryTable.js +2 -0
  148. package/dist/modules/dictionaries/components/DictionaryTable.js.map +2 -2
  149. package/dist/modules/directory/api/get/tenants/lookup.js +70 -0
  150. package/dist/modules/directory/api/get/tenants/lookup.js.map +7 -0
  151. package/dist/modules/directory/backend/directory/organizations/page.js +2 -2
  152. package/dist/modules/directory/backend/directory/organizations/page.js.map +2 -2
  153. package/dist/modules/directory/backend/directory/tenants/page.js +2 -2
  154. package/dist/modules/directory/backend/directory/tenants/page.js.map +2 -2
  155. package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js +2 -2
  156. package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js.map +2 -2
  157. package/dist/modules/entities/components/SystemEntitiesTable.js +1 -1
  158. package/dist/modules/entities/components/SystemEntitiesTable.js.map +2 -2
  159. package/dist/modules/entities/components/UserEntitiesTable.js +2 -2
  160. package/dist/modules/entities/components/UserEntitiesTable.js.map +2 -2
  161. package/dist/modules/feature_toggles/components/FeatureTogglesTable.js +3 -3
  162. package/dist/modules/feature_toggles/components/FeatureTogglesTable.js.map +2 -2
  163. package/dist/modules/feature_toggles/components/OverridesTable.js +1 -1
  164. package/dist/modules/feature_toggles/components/OverridesTable.js.map +2 -2
  165. package/dist/modules/notifications/acl.js +11 -0
  166. package/dist/modules/notifications/acl.js.map +7 -0
  167. package/dist/modules/notifications/api/[id]/action/route.js +74 -0
  168. package/dist/modules/notifications/api/[id]/action/route.js.map +7 -0
  169. package/dist/modules/notifications/api/[id]/dismiss/route.js +15 -0
  170. package/dist/modules/notifications/api/[id]/dismiss/route.js.map +7 -0
  171. package/dist/modules/notifications/api/[id]/read/route.js +15 -0
  172. package/dist/modules/notifications/api/[id]/read/route.js.map +7 -0
  173. package/dist/modules/notifications/api/[id]/restore/route.js +53 -0
  174. package/dist/modules/notifications/api/[id]/restore/route.js.map +7 -0
  175. package/dist/modules/notifications/api/batch/route.js +17 -0
  176. package/dist/modules/notifications/api/batch/route.js.map +7 -0
  177. package/dist/modules/notifications/api/feature/route.js +17 -0
  178. package/dist/modules/notifications/api/feature/route.js.map +7 -0
  179. package/dist/modules/notifications/api/mark-all-read/route.js +35 -0
  180. package/dist/modules/notifications/api/mark-all-read/route.js.map +7 -0
  181. package/dist/modules/notifications/api/openapi.js +76 -0
  182. package/dist/modules/notifications/api/openapi.js.map +7 -0
  183. package/dist/modules/notifications/api/role/route.js +17 -0
  184. package/dist/modules/notifications/api/role/route.js.map +7 -0
  185. package/dist/modules/notifications/api/route.js +85 -0
  186. package/dist/modules/notifications/api/route.js.map +7 -0
  187. package/dist/modules/notifications/api/settings/route.js +155 -0
  188. package/dist/modules/notifications/api/settings/route.js.map +7 -0
  189. package/dist/modules/notifications/api/unread-count/route.js +38 -0
  190. package/dist/modules/notifications/api/unread-count/route.js.map +7 -0
  191. package/dist/modules/notifications/backend/config/notifications/page.js +10 -0
  192. package/dist/modules/notifications/backend/config/notifications/page.js.map +7 -0
  193. package/dist/modules/notifications/backend/config/notifications/page.meta.js +24 -0
  194. package/dist/modules/notifications/backend/config/notifications/page.meta.js.map +7 -0
  195. package/dist/modules/notifications/cli.js +16 -0
  196. package/dist/modules/notifications/cli.js.map +7 -0
  197. package/dist/modules/notifications/data/entities.js +112 -0
  198. package/dist/modules/notifications/data/entities.js.map +7 -0
  199. package/dist/modules/notifications/data/validators.js +98 -0
  200. package/dist/modules/notifications/data/validators.js.map +7 -0
  201. package/dist/modules/notifications/di.js +13 -0
  202. package/dist/modules/notifications/di.js.map +7 -0
  203. package/dist/modules/notifications/emails/NotificationEmail.js +58 -0
  204. package/dist/modules/notifications/emails/NotificationEmail.js.map +7 -0
  205. package/dist/modules/notifications/frontend/NotificationInboxPageClient.js +44 -0
  206. package/dist/modules/notifications/frontend/NotificationInboxPageClient.js.map +7 -0
  207. package/dist/modules/notifications/frontend/NotificationSettingsPageClient.js +220 -0
  208. package/dist/modules/notifications/frontend/NotificationSettingsPageClient.js.map +7 -0
  209. package/dist/modules/notifications/index.js +14 -0
  210. package/dist/modules/notifications/index.js.map +7 -0
  211. package/dist/modules/notifications/lib/deliveryConfig.js +107 -0
  212. package/dist/modules/notifications/lib/deliveryConfig.js.map +7 -0
  213. package/dist/modules/notifications/lib/deliveryStrategies.js +14 -0
  214. package/dist/modules/notifications/lib/deliveryStrategies.js.map +7 -0
  215. package/dist/modules/notifications/lib/events.js +12 -0
  216. package/dist/modules/notifications/lib/events.js.map +7 -0
  217. package/dist/modules/notifications/lib/notificationBuilder.js +66 -0
  218. package/dist/modules/notifications/lib/notificationBuilder.js.map +7 -0
  219. package/dist/modules/notifications/lib/notificationFactory.js +54 -0
  220. package/dist/modules/notifications/lib/notificationFactory.js.map +7 -0
  221. package/dist/modules/notifications/lib/notificationMapper.js +34 -0
  222. package/dist/modules/notifications/lib/notificationMapper.js.map +7 -0
  223. package/dist/modules/notifications/lib/notificationRecipients.js +35 -0
  224. package/dist/modules/notifications/lib/notificationRecipients.js.map +7 -0
  225. package/dist/modules/notifications/lib/notificationService.js +279 -0
  226. package/dist/modules/notifications/lib/notificationService.js.map +7 -0
  227. package/dist/modules/notifications/lib/routeHelpers.js +101 -0
  228. package/dist/modules/notifications/lib/routeHelpers.js.map +7 -0
  229. package/dist/modules/notifications/lib/safeHref.js +24 -0
  230. package/dist/modules/notifications/lib/safeHref.js.map +7 -0
  231. package/dist/modules/notifications/migrations/Migration20260123000001.js +70 -0
  232. package/dist/modules/notifications/migrations/Migration20260123000001.js.map +7 -0
  233. package/dist/modules/notifications/migrations/Migration20260126150000.js +37 -0
  234. package/dist/modules/notifications/migrations/Migration20260126150000.js.map +7 -0
  235. package/dist/modules/notifications/migrations/Migration20260129082610.js +13 -0
  236. package/dist/modules/notifications/migrations/Migration20260129082610.js.map +7 -0
  237. package/dist/modules/notifications/subscribers/deliver-notification.js +165 -0
  238. package/dist/modules/notifications/subscribers/deliver-notification.js.map +7 -0
  239. package/dist/modules/notifications/workers/create-notification.worker.js +70 -0
  240. package/dist/modules/notifications/workers/create-notification.worker.js.map +7 -0
  241. package/dist/modules/planner/backend/planner/availability-rulesets/page.js +2 -2
  242. package/dist/modules/planner/backend/planner/availability-rulesets/page.js.map +2 -2
  243. package/dist/modules/query_index/cli.js +63 -7
  244. package/dist/modules/query_index/cli.js.map +2 -2
  245. package/dist/modules/query_index/components/QueryIndexesTable.js +7 -1
  246. package/dist/modules/query_index/components/QueryIndexesTable.js.map +2 -2
  247. package/dist/modules/resources/backend/resources/resource-types/page.js +2 -2
  248. package/dist/modules/resources/backend/resources/resource-types/page.js.map +2 -2
  249. package/dist/modules/resources/backend/resources/resources/page.js +2 -2
  250. package/dist/modules/resources/backend/resources/resources/page.js.map +2 -2
  251. package/dist/modules/sales/acl.js +0 -1
  252. package/dist/modules/sales/acl.js.map +2 -2
  253. package/dist/modules/sales/backend/sales/channels/offers/page.js +2 -0
  254. package/dist/modules/sales/backend/sales/channels/offers/page.js.map +2 -2
  255. package/dist/modules/sales/backend/sales/channels/page.js +2 -0
  256. package/dist/modules/sales/backend/sales/channels/page.js.map +2 -2
  257. package/dist/modules/sales/backend/sales/documents/[id]/page.js +0 -12
  258. package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
  259. package/dist/modules/sales/commands/documents.js +53 -62
  260. package/dist/modules/sales/commands/documents.js.map +2 -2
  261. package/dist/modules/sales/commands/payments.js +26 -0
  262. package/dist/modules/sales/commands/payments.js.map +2 -2
  263. package/dist/modules/sales/components/AdjustmentKindSettings.js +2 -2
  264. package/dist/modules/sales/components/AdjustmentKindSettings.js.map +2 -2
  265. package/dist/modules/sales/components/PaymentMethodsSettings.js +2 -2
  266. package/dist/modules/sales/components/PaymentMethodsSettings.js.map +2 -2
  267. package/dist/modules/sales/components/ShippingMethodsSettings.js +2 -2
  268. package/dist/modules/sales/components/ShippingMethodsSettings.js.map +2 -2
  269. package/dist/modules/sales/components/TaxRatesSettings.js +2 -2
  270. package/dist/modules/sales/components/TaxRatesSettings.js.map +2 -2
  271. package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js +2 -0
  272. package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js.map +2 -2
  273. package/dist/modules/sales/components/documents/AdjustmentsSection.js +2 -0
  274. package/dist/modules/sales/components/documents/AdjustmentsSection.js.map +2 -2
  275. package/dist/modules/sales/components/documents/PaymentsSection.js +2 -1
  276. package/dist/modules/sales/components/documents/PaymentsSection.js.map +2 -2
  277. package/dist/modules/sales/components/documents/SalesDocumentsTable.js +2 -0
  278. package/dist/modules/sales/components/documents/SalesDocumentsTable.js.map +2 -2
  279. package/dist/modules/sales/lib/dictionaries.js +0 -3
  280. package/dist/modules/sales/lib/dictionaries.js.map +2 -2
  281. package/dist/modules/sales/notifications.client.js +51 -0
  282. package/dist/modules/sales/notifications.client.js.map +7 -0
  283. package/dist/modules/sales/notifications.js +88 -0
  284. package/dist/modules/sales/notifications.js.map +7 -0
  285. package/dist/modules/sales/subscribers/quote-expiring-notification.js +38 -0
  286. package/dist/modules/sales/subscribers/quote-expiring-notification.js.map +7 -0
  287. package/dist/modules/sales/widgets/notifications/SalesOrderCreatedRenderer.js +137 -0
  288. package/dist/modules/sales/widgets/notifications/SalesOrderCreatedRenderer.js.map +7 -0
  289. package/dist/modules/sales/widgets/notifications/SalesQuoteCreatedRenderer.js +137 -0
  290. package/dist/modules/sales/widgets/notifications/SalesQuoteCreatedRenderer.js.map +7 -0
  291. package/dist/modules/sales/widgets/notifications/index.js +7 -0
  292. package/dist/modules/sales/widgets/notifications/index.js.map +7 -0
  293. package/dist/modules/sales/widgets/notifications/useSalesDocumentTotals.js +60 -0
  294. package/dist/modules/sales/widgets/notifications/useSalesDocumentTotals.js.map +7 -0
  295. package/dist/modules/staff/backend/staff/team-members/page.js +1 -1
  296. package/dist/modules/staff/backend/staff/team-members/page.js.map +2 -2
  297. package/dist/modules/staff/backend/staff/team-roles/page.js +2 -2
  298. package/dist/modules/staff/backend/staff/team-roles/page.js.map +2 -2
  299. package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js +2 -2
  300. package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js.map +2 -2
  301. package/dist/modules/staff/backend/staff/teams/page.js +2 -2
  302. package/dist/modules/staff/backend/staff/teams/page.js.map +2 -2
  303. package/dist/modules/staff/commands/leave-requests.js +79 -0
  304. package/dist/modules/staff/commands/leave-requests.js.map +2 -2
  305. package/dist/modules/staff/notifications.js +75 -0
  306. package/dist/modules/staff/notifications.js.map +7 -0
  307. package/dist/modules/workflows/acl.js +0 -2
  308. package/dist/modules/workflows/acl.js.map +2 -2
  309. package/dist/modules/workflows/api/instances/route.js +6 -18
  310. package/dist/modules/workflows/api/instances/route.js.map +2 -2
  311. package/dist/modules/workflows/api/tasks/route.js +1 -6
  312. package/dist/modules/workflows/api/tasks/route.js.map +2 -2
  313. package/dist/modules/workflows/backend/definitions/[id]/page.js +1 -9
  314. package/dist/modules/workflows/backend/definitions/[id]/page.js.map +2 -2
  315. package/dist/modules/workflows/backend/definitions/[id]/page.meta.js +1 -1
  316. package/dist/modules/workflows/backend/definitions/[id]/page.meta.js.map +2 -2
  317. package/dist/modules/workflows/backend/definitions/create/page.js +15 -24
  318. package/dist/modules/workflows/backend/definitions/create/page.js.map +2 -2
  319. package/dist/modules/workflows/backend/definitions/create/page.meta.js +1 -1
  320. package/dist/modules/workflows/backend/definitions/create/page.meta.js.map +2 -2
  321. package/dist/modules/workflows/backend/definitions/page.js +5 -0
  322. package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
  323. package/dist/modules/workflows/backend/definitions/visual-editor/page.js +132 -150
  324. package/dist/modules/workflows/backend/definitions/visual-editor/page.js.map +2 -2
  325. package/dist/modules/workflows/backend/definitions/visual-editor/page.meta.js +1 -1
  326. package/dist/modules/workflows/backend/definitions/visual-editor/page.meta.js.map +2 -2
  327. package/dist/modules/workflows/backend/events/[id]/page.js +1 -1
  328. package/dist/modules/workflows/backend/events/[id]/page.js.map +2 -2
  329. package/dist/modules/workflows/backend/events/[id]/page.meta.js +2 -2
  330. package/dist/modules/workflows/backend/events/[id]/page.meta.js.map +2 -2
  331. package/dist/modules/workflows/backend/instances/[id]/page.meta.js +2 -2
  332. package/dist/modules/workflows/backend/instances/[id]/page.meta.js.map +2 -2
  333. package/dist/modules/workflows/backend/instances/page.js +3 -0
  334. package/dist/modules/workflows/backend/instances/page.js.map +2 -2
  335. package/dist/modules/workflows/backend/tasks/[id]/page.js +1 -1
  336. package/dist/modules/workflows/backend/tasks/[id]/page.js.map +2 -2
  337. package/dist/modules/workflows/backend/tasks/[id]/page.meta.js +2 -2
  338. package/dist/modules/workflows/backend/tasks/[id]/page.meta.js.map +2 -2
  339. package/dist/modules/workflows/backend/tasks/page.js +9 -5
  340. package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
  341. package/dist/modules/workflows/cli.js +15 -93
  342. package/dist/modules/workflows/cli.js.map +3 -3
  343. package/dist/modules/workflows/data/entities.js +1 -64
  344. package/dist/modules/workflows/data/entities.js.map +2 -2
  345. package/dist/modules/workflows/data/validators.js +0 -115
  346. package/dist/modules/workflows/data/validators.js.map +2 -2
  347. package/dist/modules/workflows/examples/checkout-demo-definition.json +5 -1
  348. package/dist/modules/workflows/lib/activity-executor.js +13 -75
  349. package/dist/modules/workflows/lib/activity-executor.js.map +2 -2
  350. package/dist/modules/workflows/lib/graph-utils.js +2 -71
  351. package/dist/modules/workflows/lib/graph-utils.js.map +2 -2
  352. package/dist/modules/workflows/lib/seeds.js +5 -22
  353. package/dist/modules/workflows/lib/seeds.js.map +2 -2
  354. package/dist/modules/workflows/lib/start-validator.js +23 -33
  355. package/dist/modules/workflows/lib/start-validator.js.map +2 -2
  356. package/dist/modules/workflows/lib/transition-handler.js +57 -161
  357. package/dist/modules/workflows/lib/transition-handler.js.map +3 -3
  358. package/dist/modules/workflows/notifications.js +28 -0
  359. package/dist/modules/workflows/notifications.js.map +7 -0
  360. package/dist/modules/workflows/subscribers/task-assigned-notification.js +38 -0
  361. package/dist/modules/workflows/subscribers/task-assigned-notification.js.map +7 -0
  362. package/generated/entities/notification/index.ts +27 -0
  363. package/generated/entities.ids.generated.ts +5 -2
  364. package/generated/entity-fields-registry.ts +2 -2
  365. package/package.json +2 -2
  366. package/src/modules/api_docs/frontend/docs/api/page.tsx +3 -2
  367. package/src/modules/api_keys/backend/api-keys/page.tsx +1 -1
  368. package/src/modules/attachments/components/AttachmentLibrary.tsx +4 -0
  369. package/src/modules/attachments/components/AttachmentPartitionSettings.tsx +2 -0
  370. package/src/modules/auth/README.md +1 -1
  371. package/src/modules/auth/__tests__/cli-setup-acl.test.ts +1 -1
  372. package/src/modules/auth/api/__tests__/login.test.ts +2 -0
  373. package/src/modules/auth/api/admin/nav.ts +10 -6
  374. package/src/modules/auth/api/login.ts +26 -7
  375. package/src/modules/auth/api/profile/route.ts +163 -0
  376. package/src/modules/auth/api/reset/confirm.ts +25 -2
  377. package/src/modules/auth/api/reset.ts +23 -0
  378. package/src/modules/auth/api/sidebar/preferences/route.ts +21 -12
  379. package/src/modules/auth/api/users/route.ts +5 -2
  380. package/src/modules/auth/backend/auth/profile/page.meta.ts +9 -0
  381. package/src/modules/auth/backend/auth/profile/page.tsx +174 -0
  382. package/src/modules/auth/backend/roles/[id]/edit/page.tsx +4 -1
  383. package/src/modules/auth/backend/roles/page.tsx +3 -3
  384. package/src/modules/auth/backend/users/[id]/edit/page.tsx +22 -3
  385. package/src/modules/auth/backend/users/create/page.tsx +19 -2
  386. package/src/modules/auth/backend/users/page.tsx +3 -3
  387. package/src/modules/auth/cli.ts +38 -11
  388. package/src/modules/auth/commands/users.ts +73 -2
  389. package/src/modules/auth/data/validators.ts +6 -2
  390. package/src/modules/auth/frontend/login.tsx +134 -5
  391. package/src/modules/auth/frontend/reset/[token]/page.tsx +24 -11
  392. package/src/modules/auth/i18n/de.json +48 -1
  393. package/src/modules/auth/i18n/en.json +48 -1
  394. package/src/modules/auth/i18n/es.json +48 -1
  395. package/src/modules/auth/i18n/pl.json +48 -1
  396. package/src/modules/auth/lib/setup-app.ts +58 -9
  397. package/src/modules/auth/notifications.ts +109 -0
  398. package/src/modules/auth/services/authService.ts +27 -4
  399. package/src/modules/business_rules/api/execute/route.ts +8 -1
  400. package/src/modules/business_rules/backend/rules/page.tsx +4 -0
  401. package/src/modules/business_rules/backend/sets/page.tsx +3 -0
  402. package/src/modules/business_rules/cli.ts +2 -1
  403. package/src/modules/business_rules/data/validators.ts +0 -40
  404. package/src/modules/business_rules/i18n/en.json +3 -1
  405. package/src/modules/business_rules/index.ts +0 -25
  406. package/src/modules/business_rules/lib/__tests__/rule-engine.test.ts +51 -0
  407. package/src/modules/business_rules/lib/rule-engine.ts +51 -277
  408. package/src/modules/business_rules/notifications.ts +25 -0
  409. package/src/modules/business_rules/subscribers/rule-execution-failed-notification.ts +50 -0
  410. package/src/modules/catalog/components/PriceKindSettings.tsx +2 -0
  411. package/src/modules/catalog/components/categories/CategoriesDataTable.tsx +2 -2
  412. package/src/modules/catalog/components/products/ProductsDataTable.tsx +2 -0
  413. package/src/modules/catalog/i18n/en.json +3 -1
  414. package/src/modules/catalog/notifications.ts +25 -0
  415. package/src/modules/catalog/subscribers/low-stock-notification.ts +52 -0
  416. package/src/modules/configs/cli.ts +6 -0
  417. package/src/modules/configs/components/CachePanel.tsx +4 -4
  418. package/src/modules/configs/i18n/en.json +12 -2
  419. package/src/modules/configs/i18n/pl.json +12 -2
  420. package/src/modules/configs/lib/system-status.ts +48 -1
  421. package/src/modules/configs/lib/system-status.types.ts +1 -0
  422. package/src/modules/configs/lib/upgrade-actions.ts +18 -0
  423. package/src/modules/currencies/backend/currencies/page.tsx +3 -0
  424. package/src/modules/currencies/backend/exchange-rates/page.tsx +2 -0
  425. package/src/modules/customers/backend/customers/companies/page.tsx +3 -0
  426. package/src/modules/customers/backend/customers/deals/page.tsx +3 -0
  427. package/src/modules/customers/backend/customers/people/page.tsx +3 -0
  428. package/src/modules/customers/commands/deals.ts +39 -0
  429. package/src/modules/customers/components/CustomerTodosTable.tsx +1 -0
  430. package/src/modules/customers/i18n/en.json +5 -1
  431. package/src/modules/customers/notifications.ts +44 -0
  432. package/src/modules/customers/widgets/dashboard/customer-todos/widget.ts +2 -2
  433. package/src/modules/customers/widgets/dashboard/new-customers/widget.ts +2 -2
  434. package/src/modules/customers/widgets/dashboard/new-deals/widget.ts +2 -2
  435. package/src/modules/customers/widgets/dashboard/next-interactions/widget.ts +2 -2
  436. package/src/modules/dashboards/cli.ts +55 -5
  437. package/src/modules/dashboards/components/WidgetVisibilityEditor.tsx +22 -11
  438. package/src/modules/dashboards/lib/role-widgets.ts +80 -0
  439. package/src/modules/dashboards/services/widgetDataService.ts +164 -4
  440. package/src/modules/dashboards/widgets/dashboard/aov-kpi/widget.ts +2 -2
  441. package/src/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.ts +2 -2
  442. package/src/modules/dashboards/widgets/dashboard/orders-by-status/widget.ts +2 -2
  443. package/src/modules/dashboards/widgets/dashboard/orders-kpi/widget.ts +2 -2
  444. package/src/modules/dashboards/widgets/dashboard/pipeline-summary/widget.ts +2 -2
  445. package/src/modules/dashboards/widgets/dashboard/revenue-kpi/widget.ts +2 -2
  446. package/src/modules/dashboards/widgets/dashboard/revenue-trend/widget.ts +2 -2
  447. package/src/modules/dashboards/widgets/dashboard/sales-by-region/widget.ts +2 -2
  448. package/src/modules/dashboards/widgets/dashboard/top-customers/widget.ts +2 -2
  449. package/src/modules/dashboards/widgets/dashboard/top-products/widget.ts +2 -2
  450. package/src/modules/dictionaries/components/DictionaryTable.tsx +2 -0
  451. package/src/modules/directory/api/get/tenants/lookup.ts +75 -0
  452. package/src/modules/directory/backend/directory/organizations/page.tsx +2 -2
  453. package/src/modules/directory/backend/directory/tenants/page.tsx +2 -2
  454. package/src/modules/entities/backend/entities/user/[entityId]/records/page.tsx +2 -2
  455. package/src/modules/entities/components/SystemEntitiesTable.tsx +1 -1
  456. package/src/modules/entities/components/UserEntitiesTable.tsx +2 -2
  457. package/src/modules/feature_toggles/components/FeatureTogglesTable.tsx +3 -4
  458. package/src/modules/feature_toggles/components/OverridesTable.tsx +1 -1
  459. package/src/modules/notifications/__tests__/deliver-notification.test.ts +195 -0
  460. package/src/modules/notifications/__tests__/deliveryStrategies.test.ts +19 -0
  461. package/src/modules/notifications/__tests__/notificationService.test.ts +208 -0
  462. package/src/modules/notifications/acl.ts +7 -0
  463. package/src/modules/notifications/api/[id]/action/route.ts +75 -0
  464. package/src/modules/notifications/api/[id]/dismiss/route.ts +12 -0
  465. package/src/modules/notifications/api/[id]/read/route.ts +12 -0
  466. package/src/modules/notifications/api/[id]/restore/route.ts +53 -0
  467. package/src/modules/notifications/api/batch/route.ts +14 -0
  468. package/src/modules/notifications/api/feature/route.ts +14 -0
  469. package/src/modules/notifications/api/mark-all-read/route.ts +34 -0
  470. package/src/modules/notifications/api/openapi.ts +76 -0
  471. package/src/modules/notifications/api/role/route.ts +14 -0
  472. package/src/modules/notifications/api/route.ts +92 -0
  473. package/src/modules/notifications/api/settings/route.ts +157 -0
  474. package/src/modules/notifications/api/unread-count/route.ts +38 -0
  475. package/src/modules/notifications/backend/config/notifications/page.meta.ts +22 -0
  476. package/src/modules/notifications/backend/config/notifications/page.tsx +12 -0
  477. package/src/modules/notifications/cli.ts +18 -0
  478. package/src/modules/notifications/data/entities.ts +99 -0
  479. package/src/modules/notifications/data/validators.ts +115 -0
  480. package/src/modules/notifications/di.ts +11 -0
  481. package/src/modules/notifications/emails/NotificationEmail.tsx +98 -0
  482. package/src/modules/notifications/frontend/NotificationInboxPageClient.tsx +42 -0
  483. package/src/modules/notifications/frontend/NotificationSettingsPageClient.tsx +233 -0
  484. package/src/modules/notifications/i18n/de.json +50 -0
  485. package/src/modules/notifications/i18n/en.json +50 -0
  486. package/src/modules/notifications/i18n/es.json +50 -0
  487. package/src/modules/notifications/i18n/pl.json +50 -0
  488. package/src/modules/notifications/index.ts +12 -0
  489. package/src/modules/notifications/lib/deliveryConfig.ts +153 -0
  490. package/src/modules/notifications/lib/deliveryStrategies.ts +50 -0
  491. package/src/modules/notifications/lib/events.ts +48 -0
  492. package/src/modules/notifications/lib/notificationBuilder.ts +121 -0
  493. package/src/modules/notifications/lib/notificationFactory.ts +76 -0
  494. package/src/modules/notifications/lib/notificationMapper.ts +33 -0
  495. package/src/modules/notifications/lib/notificationRecipients.ts +83 -0
  496. package/src/modules/notifications/lib/notificationService.ts +414 -0
  497. package/src/modules/notifications/lib/routeHelpers.ts +151 -0
  498. package/src/modules/notifications/lib/safeHref.ts +29 -0
  499. package/src/modules/notifications/migrations/.snapshot-open-mercato.json +336 -0
  500. package/src/modules/notifications/migrations/Migration20260123000001.ts +73 -0
  501. package/src/modules/notifications/migrations/Migration20260126150000.ts +39 -0
  502. package/src/modules/notifications/migrations/Migration20260129082610.ts +13 -0
  503. package/src/modules/notifications/subscribers/deliver-notification.ts +204 -0
  504. package/src/modules/notifications/workers/create-notification.worker.ts +122 -0
  505. package/src/modules/planner/backend/planner/availability-rulesets/page.tsx +2 -2
  506. package/src/modules/query_index/cli.ts +82 -13
  507. package/src/modules/query_index/components/QueryIndexesTable.tsx +8 -2
  508. package/src/modules/resources/backend/resources/resource-types/page.tsx +2 -2
  509. package/src/modules/resources/backend/resources/resources/page.tsx +2 -2
  510. package/src/modules/sales/acl.ts +0 -1
  511. package/src/modules/sales/backend/sales/channels/offers/page.tsx +2 -0
  512. package/src/modules/sales/backend/sales/channels/page.tsx +2 -0
  513. package/src/modules/sales/backend/sales/documents/[id]/page.tsx +0 -16
  514. package/src/modules/sales/commands/documents.ts +62 -70
  515. package/src/modules/sales/commands/payments.ts +33 -0
  516. package/src/modules/sales/components/AdjustmentKindSettings.tsx +2 -2
  517. package/src/modules/sales/components/PaymentMethodsSettings.tsx +2 -2
  518. package/src/modules/sales/components/ShippingMethodsSettings.tsx +2 -2
  519. package/src/modules/sales/components/TaxRatesSettings.tsx +2 -2
  520. package/src/modules/sales/components/channels/SalesChannelOffersPanel.tsx +2 -0
  521. package/src/modules/sales/components/documents/AdjustmentsSection.tsx +2 -0
  522. package/src/modules/sales/components/documents/PaymentsSection.tsx +2 -1
  523. package/src/modules/sales/components/documents/SalesDocumentsTable.tsx +2 -0
  524. package/src/modules/sales/i18n/de.json +20 -0
  525. package/src/modules/sales/i18n/en.json +25 -1
  526. package/src/modules/sales/i18n/es.json +20 -0
  527. package/src/modules/sales/i18n/pl.json +20 -0
  528. package/src/modules/sales/lib/dictionaries.ts +0 -3
  529. package/src/modules/sales/notifications.client.ts +65 -0
  530. package/src/modules/sales/notifications.ts +82 -0
  531. package/src/modules/sales/subscribers/quote-expiring-notification.ts +53 -0
  532. package/src/modules/sales/widgets/notifications/SalesOrderCreatedRenderer.tsx +156 -0
  533. package/src/modules/sales/widgets/notifications/SalesQuoteCreatedRenderer.tsx +156 -0
  534. package/src/modules/sales/widgets/notifications/index.ts +2 -0
  535. package/src/modules/sales/widgets/notifications/useSalesDocumentTotals.ts +81 -0
  536. package/src/modules/staff/backend/staff/team-members/page.tsx +1 -1
  537. package/src/modules/staff/backend/staff/team-roles/page.tsx +2 -2
  538. package/src/modules/staff/backend/staff/teams/[id]/edit/page.tsx +2 -2
  539. package/src/modules/staff/backend/staff/teams/page.tsx +2 -2
  540. package/src/modules/staff/commands/leave-requests.ts +94 -0
  541. package/src/modules/staff/i18n/de.json +4 -0
  542. package/src/modules/staff/i18n/en.json +9 -1
  543. package/src/modules/staff/i18n/es.json +4 -0
  544. package/src/modules/staff/i18n/pl.json +4 -0
  545. package/src/modules/staff/notifications.ts +71 -0
  546. package/src/modules/workflows/acl.ts +0 -2
  547. package/src/modules/workflows/api/__tests__/instances.route.test.ts +2 -5
  548. package/src/modules/workflows/api/instances/route.ts +7 -21
  549. package/src/modules/workflows/api/tasks/route.ts +1 -7
  550. package/src/modules/workflows/backend/definitions/[id]/page.meta.ts +1 -1
  551. package/src/modules/workflows/backend/definitions/[id]/page.tsx +0 -9
  552. package/src/modules/workflows/backend/definitions/create/page.meta.ts +1 -1
  553. package/src/modules/workflows/backend/definitions/create/page.tsx +0 -9
  554. package/src/modules/workflows/backend/definitions/page.tsx +5 -0
  555. package/src/modules/workflows/backend/definitions/visual-editor/page.meta.ts +1 -1
  556. package/src/modules/workflows/backend/definitions/visual-editor/page.tsx +3 -21
  557. package/src/modules/workflows/backend/events/[id]/page.meta.ts +2 -2
  558. package/src/modules/workflows/backend/events/[id]/page.tsx +1 -1
  559. package/src/modules/workflows/backend/instances/[id]/page.meta.ts +2 -2
  560. package/src/modules/workflows/backend/instances/page.tsx +4 -1
  561. package/src/modules/workflows/backend/tasks/[id]/page.meta.ts +2 -2
  562. package/src/modules/workflows/backend/tasks/[id]/page.tsx +1 -1
  563. package/src/modules/workflows/backend/tasks/page.tsx +10 -6
  564. package/src/modules/workflows/cli.ts +12 -123
  565. package/src/modules/workflows/data/entities.ts +0 -124
  566. package/src/modules/workflows/data/validators.ts +0 -138
  567. package/src/modules/workflows/examples/checkout-demo-definition.json +5 -1
  568. package/src/modules/workflows/i18n/en.json +3 -72
  569. package/src/modules/workflows/lib/__tests__/activity-executor.test.ts +36 -43
  570. package/src/modules/workflows/lib/__tests__/transition-handler.test.ts +90 -170
  571. package/src/modules/workflows/lib/activity-executor.ts +16 -129
  572. package/src/modules/workflows/lib/graph-utils.ts +2 -117
  573. package/src/modules/workflows/lib/seeds.ts +8 -34
  574. package/src/modules/workflows/lib/start-validator.ts +28 -38
  575. package/src/modules/workflows/lib/transition-handler.ts +71 -212
  576. package/src/modules/workflows/notifications.ts +25 -0
  577. package/src/modules/workflows/subscribers/task-assigned-notification.ts +53 -0
  578. package/dist/generated/entities/workflow_event_trigger/index.js +0 -33
  579. package/dist/generated/entities/workflow_event_trigger/index.js.map +0 -7
  580. package/dist/modules/auth/events.js +0 -30
  581. package/dist/modules/auth/events.js.map +0 -7
  582. package/dist/modules/business_rules/api/execute/[ruleId]/route.js +0 -145
  583. package/dist/modules/business_rules/api/execute/[ruleId]/route.js.map +0 -7
  584. package/dist/modules/catalog/events.js +0 -34
  585. package/dist/modules/catalog/events.js.map +0 -7
  586. package/dist/modules/customers/events.js +0 -49
  587. package/dist/modules/customers/events.js.map +0 -7
  588. package/dist/modules/directory/events.js +0 -23
  589. package/dist/modules/directory/events.js.map +0 -7
  590. package/dist/modules/sales/events.js +0 -63
  591. package/dist/modules/sales/events.js.map +0 -7
  592. package/dist/modules/sales/lib/frontend/documentDataEvents.js +0 -25
  593. package/dist/modules/sales/lib/frontend/documentDataEvents.js.map +0 -7
  594. package/dist/modules/workflows/components/DefinitionTriggersEditor.js +0 -481
  595. package/dist/modules/workflows/components/DefinitionTriggersEditor.js.map +0 -7
  596. package/dist/modules/workflows/components/EventTriggersEditor.js +0 -553
  597. package/dist/modules/workflows/components/EventTriggersEditor.js.map +0 -7
  598. package/dist/modules/workflows/events.js +0 -38
  599. package/dist/modules/workflows/events.js.map +0 -7
  600. package/dist/modules/workflows/examples/order-approval-definition.json +0 -257
  601. package/dist/modules/workflows/examples/order-approval-guard-rules.json +0 -32
  602. package/dist/modules/workflows/lib/event-trigger-service.js +0 -308
  603. package/dist/modules/workflows/lib/event-trigger-service.js.map +0 -7
  604. package/dist/modules/workflows/migrations/Migration20260123143500.js +0 -36
  605. package/dist/modules/workflows/migrations/Migration20260123143500.js.map +0 -7
  606. package/dist/modules/workflows/subscribers/event-trigger.js +0 -78
  607. package/dist/modules/workflows/subscribers/event-trigger.js.map +0 -7
  608. package/dist/modules/workflows/widgets/injection/order-approval/widget.client.js +0 -323
  609. package/dist/modules/workflows/widgets/injection/order-approval/widget.client.js.map +0 -7
  610. package/dist/modules/workflows/widgets/injection/order-approval/widget.js +0 -17
  611. package/dist/modules/workflows/widgets/injection/order-approval/widget.js.map +0 -7
  612. package/dist/modules/workflows/widgets/injection-table.js +0 -19
  613. package/dist/modules/workflows/widgets/injection-table.js.map +0 -7
  614. package/generated/entities/workflow_event_trigger/index.ts +0 -15
  615. package/src/modules/auth/events.ts +0 -39
  616. package/src/modules/business_rules/api/execute/[ruleId]/route.ts +0 -163
  617. package/src/modules/catalog/events.ts +0 -45
  618. package/src/modules/customers/events.ts +0 -63
  619. package/src/modules/directory/events.ts +0 -31
  620. package/src/modules/sales/events.ts +0 -82
  621. package/src/modules/sales/lib/frontend/documentDataEvents.ts +0 -28
  622. package/src/modules/workflows/components/DefinitionTriggersEditor.tsx +0 -581
  623. package/src/modules/workflows/components/EventTriggersEditor.tsx +0 -664
  624. package/src/modules/workflows/events.ts +0 -49
  625. package/src/modules/workflows/examples/order-approval-definition.json +0 -257
  626. package/src/modules/workflows/examples/order-approval-guard-rules.json +0 -32
  627. package/src/modules/workflows/lib/event-trigger-service.ts +0 -557
  628. package/src/modules/workflows/migrations/Migration20260123143500.ts +0 -38
  629. package/src/modules/workflows/subscribers/event-trigger.ts +0 -109
  630. package/src/modules/workflows/widgets/injection/order-approval/widget.client.tsx +0 -446
  631. package/src/modules/workflows/widgets/injection/order-approval/widget.ts +0 -16
  632. package/src/modules/workflows/widgets/injection-table.ts +0 -21
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/modules/business_rules/backend/rules/page.tsx"],
4
- "sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport Link from 'next/link'\nimport { useRouter } from 'next/navigation'\nimport { Page, PageBody } from '@open-mercato/ui/backend/Page'\nimport { DataTable } from '@open-mercato/ui/backend/DataTable'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { RowActions } from '@open-mercato/ui/backend/RowActions'\nimport { apiCall } from '@open-mercato/ui/backend/utils/apiCall'\nimport { flash } from '@open-mercato/ui/backend/FlashMessages'\nimport { useQuery, useQueryClient } from '@tanstack/react-query'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport type { FilterDef, FilterValues } from '@open-mercato/ui/backend/FilterBar'\n\ntype Rule = {\n id: string\n ruleId: string\n ruleName: string\n description: string | null\n ruleType: 'GUARD' | 'VALIDATION' | 'CALCULATION' | 'ACTION' | 'ASSIGNMENT'\n ruleCategory: string | null\n entityType: string\n eventType: string | null\n enabled: boolean\n priority: number\n version: number\n effectiveFrom: string | null\n effectiveTo: string | null\n tenantId: string\n organizationId: string\n createdAt: string\n updatedAt: string\n}\n\ntype RulesResponse = {\n items: Rule[]\n total: number\n totalPages: number\n}\n\nexport default function RulesListPage() {\n const [page, setPage] = React.useState(1)\n const [pageSize] = React.useState(20)\n const [total, setTotal] = React.useState(0)\n const [totalPages, setTotalPages] = React.useState(1)\n const t = useT()\n const router = useRouter()\n const queryClient = useQueryClient()\n const [filterValues, setFilterValues] = React.useState<FilterValues>({})\n\n const { data, isLoading, error } = useQuery({\n queryKey: ['business-rules', 'list', filterValues, page],\n queryFn: async () => {\n const params = new URLSearchParams()\n params.set('page', page.toString())\n params.set('pageSize', pageSize.toString())\n params.set('sortField', 'priority')\n params.set('sortDir', 'desc')\n\n if (filterValues.enabled) params.set('enabled', filterValues.enabled as string)\n if (filterValues.ruleType) params.set('ruleType', filterValues.ruleType as string)\n if (filterValues.entityType) params.set('entityType', filterValues.entityType as string)\n if (filterValues.eventType) params.set('eventType', filterValues.eventType as string)\n if (filterValues.search) params.set('search', filterValues.search as string)\n\n const result = await apiCall<RulesResponse>(\n `/api/business_rules/rules?${params.toString()}`\n )\n\n if (!result.ok) {\n throw new Error('Failed to fetch rules')\n }\n\n const response = result.result\n if (response) {\n setTotal(response.total || 0)\n setTotalPages(response.totalPages || 1)\n }\n\n return response?.items || []\n },\n })\n\n const handleDelete = async (id: string, ruleName: string) => {\n if (!confirm(t('business_rules.confirm.delete', { name: ruleName }))) {\n return\n }\n\n const result = await apiCall(`/api/business_rules/rules?id=${id}`, {\n method: 'DELETE',\n })\n\n if (result.ok) {\n flash(t('business_rules.messages.deleted'), 'success')\n queryClient.invalidateQueries({ queryKey: ['business-rules'] })\n } else {\n flash(t('business_rules.messages.deleteFailed'), 'error')\n }\n }\n\n const handleToggleEnabled = async (id: string, currentEnabled: boolean) => {\n const result = await apiCall('/api/business_rules/rules', {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n id,\n enabled: !currentEnabled,\n }),\n })\n\n if (result.ok) {\n flash(t('business_rules.messages.updated'), 'success')\n queryClient.invalidateQueries({ queryKey: ['business-rules'] })\n } else {\n flash(t('business_rules.messages.updateFailed'), 'error')\n }\n }\n\n const handleFiltersApply = React.useCallback((values: FilterValues) => {\n const next: FilterValues = {}\n Object.entries(values).forEach(([key, value]) => {\n if (value !== undefined) next[key] = value\n })\n setFilterValues(next)\n setPage(1)\n }, [setFilterValues, setPage])\n\n const handleFiltersClear = React.useCallback(() => {\n setFilterValues({})\n setPage(1)\n }, [setFilterValues, setPage])\n\n const filters: FilterDef[] = [\n {\n id: 'search',\n type: 'text',\n label: t('business_rules.filters.search'),\n placeholder: t('business_rules.filters.searchPlaceholder'),\n },\n {\n id: 'enabled',\n type: 'select',\n label: t('business_rules.filters.status'),\n options: [\n { label: t('common.all'), value: '' },\n { label: t('common.enabled'), value: 'true' },\n { label: t('common.disabled'), value: 'false' },\n ],\n },\n {\n id: 'ruleType',\n type: 'select',\n label: t('business_rules.filters.type'),\n options: [\n { label: t('common.all'), value: '' },\n { label: t('business_rules.types.guard'), value: 'GUARD' },\n { label: t('business_rules.types.validation'), value: 'VALIDATION' },\n { label: t('business_rules.types.calculation'), value: 'CALCULATION' },\n { label: t('business_rules.types.action'), value: 'ACTION' },\n { label: t('business_rules.types.assignment'), value: 'ASSIGNMENT' },\n ],\n },\n {\n id: 'entityType',\n type: 'text',\n label: t('business_rules.filters.entityType'),\n placeholder: t('business_rules.filters.entityTypePlaceholder'),\n },\n {\n id: 'eventType',\n type: 'text',\n label: t('business_rules.filters.eventType'),\n placeholder: t('business_rules.filters.eventTypePlaceholder'),\n },\n ]\n\n const columns: ColumnDef<Rule>[] = [\n {\n id: 'ruleId',\n header: t('business_rules.fields.ruleId'),\n accessorKey: 'ruleId',\n cell: ({ row }) => (\n <span className=\"font-mono text-sm\">{row.original.ruleId}</span>\n ),\n },\n {\n id: 'ruleName',\n header: t('business_rules.fields.ruleName'),\n accessorKey: 'ruleName',\n cell: ({ row }) => (\n <div>\n <div className=\"font-medium\">{row.original.ruleName}</div>\n {row.original.description && (\n <div className=\"text-xs text-muted-foreground line-clamp-1\">\n {row.original.description}\n </div>\n )}\n </div>\n ),\n },\n {\n id: 'ruleType',\n header: t('business_rules.fields.ruleType'),\n accessorKey: 'ruleType',\n cell: ({ row }) => {\n const typeColors = {\n GUARD: 'bg-red-100 text-red-800',\n VALIDATION: 'bg-yellow-100 text-yellow-800',\n CALCULATION: 'bg-blue-100 text-blue-800',\n ACTION: 'bg-green-100 text-green-800',\n ASSIGNMENT: 'bg-purple-100 text-purple-800',\n }\n const color = typeColors[row.original.ruleType] || 'bg-muted text-foreground'\n return (\n <span className={`inline-flex items-center px-2 py-1 rounded text-xs font-medium ${color}`}>\n {row.original.ruleType}\n </span>\n )\n },\n },\n {\n id: 'entityType',\n header: t('business_rules.fields.entityType'),\n accessorKey: 'entityType',\n },\n {\n id: 'eventType',\n header: t('business_rules.fields.eventType'),\n accessorKey: 'eventType',\n cell: ({ row }) => row.original.eventType || '-',\n },\n {\n id: 'enabled',\n header: t('business_rules.fields.enabled'),\n accessorKey: 'enabled',\n cell: ({ row }) => (\n <button\n onClick={() => handleToggleEnabled(row.original.id, row.original.enabled)}\n className={`inline-flex items-center px-2 py-1 rounded text-xs font-medium cursor-pointer ${\n row.original.enabled\n ? 'bg-green-100 text-green-800 hover:bg-green-200 dark:bg-green-900 dark:text-green-300 dark:hover:bg-green-800'\n : 'bg-muted text-muted-foreground hover:bg-muted/80'\n }`}\n title={t('business_rules.actions.toggleEnabled')}\n >\n {row.original.enabled ? t('common.yes') : t('common.no')}\n </button>\n ),\n },\n {\n id: 'priority',\n header: t('business_rules.fields.priority'),\n accessorKey: 'priority',\n cell: ({ row }) => (\n <span className=\"font-mono text-sm\">{row.original.priority}</span>\n ),\n },\n {\n id: 'actions',\n header: '',\n cell: ({ row }) => (\n <RowActions\n items={[\n {\n label: t('common.edit'),\n href: `/backend/rules/${row.original.id}`,\n },\n {\n label: row.original.enabled ? t('common.disable') : t('common.enable'),\n onSelect: () => handleToggleEnabled(row.original.id, row.original.enabled),\n },\n {\n label: t('common.duplicate'),\n onSelect: () => {\n // TODO: Implement duplicate functionality in Step 5.2\n flash(t('business_rules.messages.duplicateNotYetImplemented'), 'info')\n },\n },\n {\n label: t('common.delete'),\n onSelect: () => handleDelete(row.original.id, row.original.ruleName),\n destructive: true,\n },\n ]}\n />\n ),\n },\n ]\n\n if (error) {\n return (\n <Page>\n <PageBody>\n <div className=\"p-8 text-center\">\n <p className=\"text-red-600\">{t('business_rules.messages.loadFailed')}</p>\n <Button onClick={() => queryClient.invalidateQueries({ queryKey: ['business-rules'] })} className=\"mt-4\">\n {t('common.retry')}\n </Button>\n </div>\n </PageBody>\n </Page>\n )\n }\n\n return (\n <Page>\n <PageBody>\n <DataTable\n title={t('business_rules.list.title')}\n actions={(\n <Button asChild>\n <Link href=\"/backend/rules/create\">\n {t('business_rules.actions.create')}\n </Link>\n </Button>\n )}\n columns={columns}\n data={data || []}\n filters={filters}\n filterValues={filterValues}\n onFiltersApply={handleFiltersApply}\n onFiltersClear={handleFiltersClear}\n perspective={{\n tableId: 'business-rules.rules.list',\n }}\n pagination={{ page, pageSize, total, totalPages, onPageChange: setPage }}\n />\n </PageBody>\n </Page>\n )\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport Link from 'next/link'\nimport { useRouter } from 'next/navigation'\nimport { Page, PageBody } from '@open-mercato/ui/backend/Page'\nimport { DataTable } from '@open-mercato/ui/backend/DataTable'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { RowActions } from '@open-mercato/ui/backend/RowActions'\nimport { apiCall } from '@open-mercato/ui/backend/utils/apiCall'\nimport { flash } from '@open-mercato/ui/backend/FlashMessages'\nimport { useQuery, useQueryClient } from '@tanstack/react-query'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport type { FilterDef, FilterValues } from '@open-mercato/ui/backend/FilterBar'\n\ntype Rule = {\n id: string\n ruleId: string\n ruleName: string\n description: string | null\n ruleType: 'GUARD' | 'VALIDATION' | 'CALCULATION' | 'ACTION' | 'ASSIGNMENT'\n ruleCategory: string | null\n entityType: string\n eventType: string | null\n enabled: boolean\n priority: number\n version: number\n effectiveFrom: string | null\n effectiveTo: string | null\n tenantId: string\n organizationId: string\n createdAt: string\n updatedAt: string\n}\n\ntype RulesResponse = {\n items: Rule[]\n total: number\n totalPages: number\n}\n\nexport default function RulesListPage() {\n const [page, setPage] = React.useState(1)\n const [pageSize] = React.useState(20)\n const [total, setTotal] = React.useState(0)\n const [totalPages, setTotalPages] = React.useState(1)\n const t = useT()\n const router = useRouter()\n const queryClient = useQueryClient()\n const [filterValues, setFilterValues] = React.useState<FilterValues>({})\n\n const { data, isLoading, error } = useQuery({\n queryKey: ['business-rules', 'list', filterValues, page],\n queryFn: async () => {\n const params = new URLSearchParams()\n params.set('page', page.toString())\n params.set('pageSize', pageSize.toString())\n params.set('sortField', 'priority')\n params.set('sortDir', 'desc')\n\n if (filterValues.enabled) params.set('enabled', filterValues.enabled as string)\n if (filterValues.ruleType) params.set('ruleType', filterValues.ruleType as string)\n if (filterValues.entityType) params.set('entityType', filterValues.entityType as string)\n if (filterValues.eventType) params.set('eventType', filterValues.eventType as string)\n if (filterValues.search) params.set('search', filterValues.search as string)\n\n const result = await apiCall<RulesResponse>(\n `/api/business_rules/rules?${params.toString()}`\n )\n\n if (!result.ok) {\n throw new Error('Failed to fetch rules')\n }\n\n const response = result.result\n if (response) {\n setTotal(response.total || 0)\n setTotalPages(response.totalPages || 1)\n }\n\n return response?.items || []\n },\n })\n\n const handleDelete = async (id: string, ruleName: string) => {\n if (!confirm(t('business_rules.confirm.delete', { name: ruleName }))) {\n return\n }\n\n const result = await apiCall(`/api/business_rules/rules?id=${id}`, {\n method: 'DELETE',\n })\n\n if (result.ok) {\n flash(t('business_rules.messages.deleted'), 'success')\n queryClient.invalidateQueries({ queryKey: ['business-rules'] })\n } else {\n flash(t('business_rules.messages.deleteFailed'), 'error')\n }\n }\n\n const handleToggleEnabled = async (id: string, currentEnabled: boolean) => {\n const result = await apiCall('/api/business_rules/rules', {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n id,\n enabled: !currentEnabled,\n }),\n })\n\n if (result.ok) {\n flash(t('business_rules.messages.updated'), 'success')\n queryClient.invalidateQueries({ queryKey: ['business-rules'] })\n } else {\n flash(t('business_rules.messages.updateFailed'), 'error')\n }\n }\n\n const handleFiltersApply = React.useCallback((values: FilterValues) => {\n const next: FilterValues = {}\n Object.entries(values).forEach(([key, value]) => {\n if (value !== undefined) next[key] = value\n })\n setFilterValues(next)\n setPage(1)\n }, [setFilterValues, setPage])\n\n const handleFiltersClear = React.useCallback(() => {\n setFilterValues({})\n setPage(1)\n }, [setFilterValues, setPage])\n\n const filters: FilterDef[] = [\n {\n id: 'search',\n type: 'text',\n label: t('business_rules.filters.search'),\n placeholder: t('business_rules.filters.searchPlaceholder'),\n },\n {\n id: 'enabled',\n type: 'select',\n label: t('business_rules.filters.status'),\n options: [\n { label: t('common.all'), value: '' },\n { label: t('common.enabled'), value: 'true' },\n { label: t('common.disabled'), value: 'false' },\n ],\n },\n {\n id: 'ruleType',\n type: 'select',\n label: t('business_rules.filters.type'),\n options: [\n { label: t('common.all'), value: '' },\n { label: t('business_rules.types.guard'), value: 'GUARD' },\n { label: t('business_rules.types.validation'), value: 'VALIDATION' },\n { label: t('business_rules.types.calculation'), value: 'CALCULATION' },\n { label: t('business_rules.types.action'), value: 'ACTION' },\n { label: t('business_rules.types.assignment'), value: 'ASSIGNMENT' },\n ],\n },\n {\n id: 'entityType',\n type: 'text',\n label: t('business_rules.filters.entityType'),\n placeholder: t('business_rules.filters.entityTypePlaceholder'),\n },\n {\n id: 'eventType',\n type: 'text',\n label: t('business_rules.filters.eventType'),\n placeholder: t('business_rules.filters.eventTypePlaceholder'),\n },\n ]\n\n const columns: ColumnDef<Rule>[] = [\n {\n id: 'ruleId',\n header: t('business_rules.fields.ruleId'),\n accessorKey: 'ruleId',\n cell: ({ row }) => (\n <span className=\"font-mono text-sm\">{row.original.ruleId}</span>\n ),\n },\n {\n id: 'ruleName',\n header: t('business_rules.fields.ruleName'),\n accessorKey: 'ruleName',\n cell: ({ row }) => (\n <div>\n <div className=\"font-medium\">{row.original.ruleName}</div>\n {row.original.description && (\n <div className=\"text-xs text-muted-foreground line-clamp-1\">\n {row.original.description}\n </div>\n )}\n </div>\n ),\n },\n {\n id: 'ruleType',\n header: t('business_rules.fields.ruleType'),\n accessorKey: 'ruleType',\n cell: ({ row }) => {\n const typeColors = {\n GUARD: 'bg-red-100 text-red-800',\n VALIDATION: 'bg-yellow-100 text-yellow-800',\n CALCULATION: 'bg-blue-100 text-blue-800',\n ACTION: 'bg-green-100 text-green-800',\n ASSIGNMENT: 'bg-purple-100 text-purple-800',\n }\n const color = typeColors[row.original.ruleType] || 'bg-muted text-foreground'\n return (\n <span className={`inline-flex items-center px-2 py-1 rounded text-xs font-medium ${color}`}>\n {row.original.ruleType}\n </span>\n )\n },\n },\n {\n id: 'entityType',\n header: t('business_rules.fields.entityType'),\n accessorKey: 'entityType',\n },\n {\n id: 'eventType',\n header: t('business_rules.fields.eventType'),\n accessorKey: 'eventType',\n cell: ({ row }) => row.original.eventType || '-',\n },\n {\n id: 'enabled',\n header: t('business_rules.fields.enabled'),\n accessorKey: 'enabled',\n cell: ({ row }) => (\n <button\n onClick={() => handleToggleEnabled(row.original.id, row.original.enabled)}\n className={`inline-flex items-center px-2 py-1 rounded text-xs font-medium cursor-pointer ${\n row.original.enabled\n ? 'bg-green-100 text-green-800 hover:bg-green-200 dark:bg-green-900 dark:text-green-300 dark:hover:bg-green-800'\n : 'bg-muted text-muted-foreground hover:bg-muted/80'\n }`}\n title={t('business_rules.actions.toggleEnabled')}\n >\n {row.original.enabled ? t('common.yes') : t('common.no')}\n </button>\n ),\n },\n {\n id: 'priority',\n header: t('business_rules.fields.priority'),\n accessorKey: 'priority',\n cell: ({ row }) => (\n <span className=\"font-mono text-sm\">{row.original.priority}</span>\n ),\n },\n {\n id: 'actions',\n header: '',\n cell: ({ row }) => (\n <RowActions\n items={[\n {\n id: 'edit',\n label: t('common.edit'),\n href: `/backend/rules/${row.original.id}`,\n },\n {\n id: row.original.enabled ? 'disable' : 'enable',\n label: row.original.enabled ? t('common.disable') : t('common.enable'),\n onSelect: () => handleToggleEnabled(row.original.id, row.original.enabled),\n },\n {\n id: 'duplicate',\n label: t('common.duplicate'),\n onSelect: () => {\n // TODO: Implement duplicate functionality in Step 5.2\n flash(t('business_rules.messages.duplicateNotYetImplemented'), 'info')\n },\n },\n {\n id: 'delete',\n label: t('common.delete'),\n onSelect: () => handleDelete(row.original.id, row.original.ruleName),\n destructive: true,\n },\n ]}\n />\n ),\n },\n ]\n\n if (error) {\n return (\n <Page>\n <PageBody>\n <div className=\"p-8 text-center\">\n <p className=\"text-red-600\">{t('business_rules.messages.loadFailed')}</p>\n <Button onClick={() => queryClient.invalidateQueries({ queryKey: ['business-rules'] })} className=\"mt-4\">\n {t('common.retry')}\n </Button>\n </div>\n </PageBody>\n </Page>\n )\n }\n\n return (\n <Page>\n <PageBody>\n <DataTable\n title={t('business_rules.list.title')}\n actions={(\n <Button asChild>\n <Link href=\"/backend/rules/create\">\n {t('business_rules.actions.create')}\n </Link>\n </Button>\n )}\n columns={columns}\n data={data || []}\n filters={filters}\n filterValues={filterValues}\n onFiltersApply={handleFiltersApply}\n onFiltersClear={handleFiltersClear}\n perspective={{\n tableId: 'business-rules.rules.list',\n }}\n pagination={{ page, pageSize, total, totalPages, onPageChange: setPage }}\n />\n </PageBody>\n </Page>\n )\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -149,14 +149,17 @@ function RuleSetsListPage() {
149
149
  {
150
150
  items: [
151
151
  {
152
+ id: "edit",
152
153
  label: t("common.edit"),
153
154
  href: `/backend/sets/${row.original.id}`
154
155
  },
155
156
  {
157
+ id: row.original.enabled ? "disable" : "enable",
156
158
  label: row.original.enabled ? t("common.disable") : t("common.enable"),
157
159
  onSelect: () => handleToggleEnabled(row.original.id, row.original.enabled)
158
160
  },
159
161
  {
162
+ id: "delete",
160
163
  label: t("common.delete"),
161
164
  onSelect: () => handleDelete(row.original.id, row.original.setName),
162
165
  destructive: true
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/modules/business_rules/backend/sets/page.tsx"],
4
- "sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport Link from 'next/link'\nimport { useRouter } from 'next/navigation'\nimport { Page, PageBody } from '@open-mercato/ui/backend/Page'\nimport { DataTable } from '@open-mercato/ui/backend/DataTable'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { RowActions } from '@open-mercato/ui/backend/RowActions'\nimport { apiCall } from '@open-mercato/ui/backend/utils/apiCall'\nimport { flash } from '@open-mercato/ui/backend/FlashMessages'\nimport { useQuery, useQueryClient } from '@tanstack/react-query'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport type { FilterDef, FilterValues } from '@open-mercato/ui/backend/FilterBar'\n\ntype RuleSet = {\n id: string\n setId: string\n setName: string\n description: string | null\n enabled: boolean\n tenantId: string\n organizationId: string\n createdBy: string | null\n updatedBy: string | null\n createdAt: string\n updatedAt: string\n}\n\ntype RuleSetsResponse = {\n items: RuleSet[]\n total: number\n totalPages: number\n}\n\nexport default function RuleSetsListPage() {\n const [page, setPage] = React.useState(1)\n const [pageSize] = React.useState(20)\n const [total, setTotal] = React.useState(0)\n const [totalPages, setTotalPages] = React.useState(1)\n const t = useT()\n const router = useRouter()\n const queryClient = useQueryClient()\n const [filterValues, setFilterValues] = React.useState<FilterValues>({})\n\n const { data, isLoading, error } = useQuery({\n queryKey: ['business-rules', 'sets', filterValues, page],\n queryFn: async () => {\n const params = new URLSearchParams()\n params.set('page', page.toString())\n params.set('pageSize', pageSize.toString())\n params.set('sortField', 'setName')\n params.set('sortDir', 'asc')\n\n if (filterValues.enabled) params.set('enabled', filterValues.enabled as string)\n if (filterValues.search) params.set('search', filterValues.search as string)\n\n const result = await apiCall<RuleSetsResponse>(\n `/api/business_rules/sets?${params.toString()}`\n )\n\n if (!result.ok) {\n throw new Error('Failed to fetch rule sets')\n }\n\n const response = result.result\n if (response) {\n setTotal(response.total || 0)\n setTotalPages(response.totalPages || 1)\n }\n\n return response?.items || []\n },\n })\n\n const handleDelete = async (id: string, setName: string) => {\n if (!confirm(t('business_rules.sets.confirm.delete', { name: setName }))) {\n return\n }\n\n const result = await apiCall(`/api/business_rules/sets?id=${id}`, {\n method: 'DELETE',\n })\n\n if (result.ok) {\n flash(t('business_rules.sets.messages.deleted'), 'success')\n queryClient.invalidateQueries({ queryKey: ['business-rules', 'sets'] })\n } else {\n flash(t('business_rules.sets.messages.deleteFailed'), 'error')\n }\n }\n\n const handleToggleEnabled = async (id: string, currentEnabled: boolean) => {\n const result = await apiCall('/api/business_rules/sets', {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n id,\n enabled: !currentEnabled,\n }),\n })\n\n if (result.ok) {\n flash(t('business_rules.sets.messages.updated'), 'success')\n queryClient.invalidateQueries({ queryKey: ['business-rules', 'sets'] })\n } else {\n flash(t('business_rules.sets.messages.updateFailed'), 'error')\n }\n }\n\n const handleFiltersApply = React.useCallback((values: FilterValues) => {\n const next: FilterValues = {}\n Object.entries(values).forEach(([key, value]) => {\n if (value !== undefined) next[key] = value\n })\n setFilterValues(next)\n setPage(1)\n }, [setFilterValues, setPage])\n\n const handleFiltersClear = React.useCallback(() => {\n setFilterValues({})\n setPage(1)\n }, [setFilterValues, setPage])\n\n const filters: FilterDef[] = [\n {\n id: 'search',\n type: 'text',\n label: t('business_rules.filters.search'),\n placeholder: t('business_rules.sets.filters.searchPlaceholder'),\n },\n {\n id: 'enabled',\n type: 'select',\n label: t('business_rules.filters.status'),\n options: [\n { value: '', label: t('common.all') },\n { value: 'true', label: t('common.enabled') },\n { value: 'false', label: t('common.disabled') },\n ],\n },\n ]\n\n const columns: ColumnDef<RuleSet>[] = [\n {\n id: 'setId',\n header: t('business_rules.sets.fields.setId'),\n accessorKey: 'setId',\n cell: ({ row }) => (\n <Link\n href={`/backend/sets/${row.original.id}`}\n className=\"font-mono text-sm text-blue-600 hover:text-blue-800 hover:underline\"\n >\n {row.original.setId}\n </Link>\n ),\n },\n {\n id: 'setName',\n header: t('business_rules.sets.fields.setName'),\n accessorKey: 'setName',\n cell: ({ row }) => (\n <div>\n <div className=\"font-medium\">{row.original.setName}</div>\n {row.original.description && (\n <div className=\"text-xs text-muted-foreground mt-0.5 line-clamp-1\">\n {row.original.description}\n </div>\n )}\n </div>\n ),\n },\n {\n id: 'enabled',\n header: t('business_rules.sets.fields.enabled'),\n accessorKey: 'enabled',\n cell: ({ row }) => (\n <button\n onClick={() => handleToggleEnabled(row.original.id, row.original.enabled)}\n className={`inline-flex items-center px-2 py-1 rounded text-xs font-medium cursor-pointer ${\n row.original.enabled\n ? 'bg-green-100 text-green-800 hover:bg-green-200 dark:bg-green-900 dark:text-green-300 dark:hover:bg-green-800'\n : 'bg-muted text-muted-foreground hover:bg-muted/80'\n }`}\n title={t('business_rules.sets.actions.toggleEnabled')}\n >\n {row.original.enabled ? t('common.yes') : t('common.no')}\n </button>\n ),\n },\n {\n id: 'actions',\n header: '',\n cell: ({ row }) => (\n <RowActions\n items={[\n {\n label: t('common.edit'),\n href: `/backend/sets/${row.original.id}`,\n },\n {\n label: row.original.enabled ? t('common.disable') : t('common.enable'),\n onSelect: () => handleToggleEnabled(row.original.id, row.original.enabled),\n },\n {\n label: t('common.delete'),\n onSelect: () => handleDelete(row.original.id, row.original.setName),\n destructive: true,\n },\n ]}\n />\n ),\n },\n ]\n\n return (\n <Page>\n <PageBody>\n <DataTable\n title={t('business_rules.sets.list.title')}\n actions={(\n <Button asChild>\n <Link href=\"/backend/sets/create\">\n {t('business_rules.sets.actions.create')}\n </Link>\n </Button>\n )}\n columns={columns}\n data={data || []}\n filters={filters}\n filterValues={filterValues}\n onFiltersApply={handleFiltersApply}\n onFiltersClear={handleFiltersClear}\n isLoading={isLoading}\n error={error ? t('business_rules.sets.messages.loadFailed') : undefined}\n pagination={{ page, pageSize, total, totalPages, onPageChange: setPage }}\n />\n </PageBody>\n </Page>\n )\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport Link from 'next/link'\nimport { useRouter } from 'next/navigation'\nimport { Page, PageBody } from '@open-mercato/ui/backend/Page'\nimport { DataTable } from '@open-mercato/ui/backend/DataTable'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { RowActions } from '@open-mercato/ui/backend/RowActions'\nimport { apiCall } from '@open-mercato/ui/backend/utils/apiCall'\nimport { flash } from '@open-mercato/ui/backend/FlashMessages'\nimport { useQuery, useQueryClient } from '@tanstack/react-query'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport type { FilterDef, FilterValues } from '@open-mercato/ui/backend/FilterBar'\n\ntype RuleSet = {\n id: string\n setId: string\n setName: string\n description: string | null\n enabled: boolean\n tenantId: string\n organizationId: string\n createdBy: string | null\n updatedBy: string | null\n createdAt: string\n updatedAt: string\n}\n\ntype RuleSetsResponse = {\n items: RuleSet[]\n total: number\n totalPages: number\n}\n\nexport default function RuleSetsListPage() {\n const [page, setPage] = React.useState(1)\n const [pageSize] = React.useState(20)\n const [total, setTotal] = React.useState(0)\n const [totalPages, setTotalPages] = React.useState(1)\n const t = useT()\n const router = useRouter()\n const queryClient = useQueryClient()\n const [filterValues, setFilterValues] = React.useState<FilterValues>({})\n\n const { data, isLoading, error } = useQuery({\n queryKey: ['business-rules', 'sets', filterValues, page],\n queryFn: async () => {\n const params = new URLSearchParams()\n params.set('page', page.toString())\n params.set('pageSize', pageSize.toString())\n params.set('sortField', 'setName')\n params.set('sortDir', 'asc')\n\n if (filterValues.enabled) params.set('enabled', filterValues.enabled as string)\n if (filterValues.search) params.set('search', filterValues.search as string)\n\n const result = await apiCall<RuleSetsResponse>(\n `/api/business_rules/sets?${params.toString()}`\n )\n\n if (!result.ok) {\n throw new Error('Failed to fetch rule sets')\n }\n\n const response = result.result\n if (response) {\n setTotal(response.total || 0)\n setTotalPages(response.totalPages || 1)\n }\n\n return response?.items || []\n },\n })\n\n const handleDelete = async (id: string, setName: string) => {\n if (!confirm(t('business_rules.sets.confirm.delete', { name: setName }))) {\n return\n }\n\n const result = await apiCall(`/api/business_rules/sets?id=${id}`, {\n method: 'DELETE',\n })\n\n if (result.ok) {\n flash(t('business_rules.sets.messages.deleted'), 'success')\n queryClient.invalidateQueries({ queryKey: ['business-rules', 'sets'] })\n } else {\n flash(t('business_rules.sets.messages.deleteFailed'), 'error')\n }\n }\n\n const handleToggleEnabled = async (id: string, currentEnabled: boolean) => {\n const result = await apiCall('/api/business_rules/sets', {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n id,\n enabled: !currentEnabled,\n }),\n })\n\n if (result.ok) {\n flash(t('business_rules.sets.messages.updated'), 'success')\n queryClient.invalidateQueries({ queryKey: ['business-rules', 'sets'] })\n } else {\n flash(t('business_rules.sets.messages.updateFailed'), 'error')\n }\n }\n\n const handleFiltersApply = React.useCallback((values: FilterValues) => {\n const next: FilterValues = {}\n Object.entries(values).forEach(([key, value]) => {\n if (value !== undefined) next[key] = value\n })\n setFilterValues(next)\n setPage(1)\n }, [setFilterValues, setPage])\n\n const handleFiltersClear = React.useCallback(() => {\n setFilterValues({})\n setPage(1)\n }, [setFilterValues, setPage])\n\n const filters: FilterDef[] = [\n {\n id: 'search',\n type: 'text',\n label: t('business_rules.filters.search'),\n placeholder: t('business_rules.sets.filters.searchPlaceholder'),\n },\n {\n id: 'enabled',\n type: 'select',\n label: t('business_rules.filters.status'),\n options: [\n { value: '', label: t('common.all') },\n { value: 'true', label: t('common.enabled') },\n { value: 'false', label: t('common.disabled') },\n ],\n },\n ]\n\n const columns: ColumnDef<RuleSet>[] = [\n {\n id: 'setId',\n header: t('business_rules.sets.fields.setId'),\n accessorKey: 'setId',\n cell: ({ row }) => (\n <Link\n href={`/backend/sets/${row.original.id}`}\n className=\"font-mono text-sm text-blue-600 hover:text-blue-800 hover:underline\"\n >\n {row.original.setId}\n </Link>\n ),\n },\n {\n id: 'setName',\n header: t('business_rules.sets.fields.setName'),\n accessorKey: 'setName',\n cell: ({ row }) => (\n <div>\n <div className=\"font-medium\">{row.original.setName}</div>\n {row.original.description && (\n <div className=\"text-xs text-muted-foreground mt-0.5 line-clamp-1\">\n {row.original.description}\n </div>\n )}\n </div>\n ),\n },\n {\n id: 'enabled',\n header: t('business_rules.sets.fields.enabled'),\n accessorKey: 'enabled',\n cell: ({ row }) => (\n <button\n onClick={() => handleToggleEnabled(row.original.id, row.original.enabled)}\n className={`inline-flex items-center px-2 py-1 rounded text-xs font-medium cursor-pointer ${\n row.original.enabled\n ? 'bg-green-100 text-green-800 hover:bg-green-200 dark:bg-green-900 dark:text-green-300 dark:hover:bg-green-800'\n : 'bg-muted text-muted-foreground hover:bg-muted/80'\n }`}\n title={t('business_rules.sets.actions.toggleEnabled')}\n >\n {row.original.enabled ? t('common.yes') : t('common.no')}\n </button>\n ),\n },\n {\n id: 'actions',\n header: '',\n cell: ({ row }) => (\n <RowActions\n items={[\n {\n id: 'edit',\n label: t('common.edit'),\n href: `/backend/sets/${row.original.id}`,\n },\n {\n id: row.original.enabled ? 'disable' : 'enable',\n label: row.original.enabled ? t('common.disable') : t('common.enable'),\n onSelect: () => handleToggleEnabled(row.original.id, row.original.enabled),\n },\n {\n id: 'delete',\n label: t('common.delete'),\n onSelect: () => handleDelete(row.original.id, row.original.setName),\n destructive: true,\n },\n ]}\n />\n ),\n },\n ]\n\n return (\n <Page>\n <PageBody>\n <DataTable\n title={t('business_rules.sets.list.title')}\n actions={(\n <Button asChild>\n <Link href=\"/backend/sets/create\">\n {t('business_rules.sets.actions.create')}\n </Link>\n </Button>\n )}\n columns={columns}\n data={data || []}\n filters={filters}\n filterValues={filterValues}\n onFiltersApply={handleFiltersApply}\n onFiltersClear={handleFiltersClear}\n isLoading={isLoading}\n error={error ? t('business_rules.sets.messages.loadFailed') : undefined}\n pagination={{ page, pageSize, total, totalPages, onPageChange: setPage }}\n />\n </PageBody>\n </Page>\n )\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -29,6 +29,7 @@ const seedGuardRules = {
29
29
  const em = resolve("em");
30
30
  const rulesPath = path.join(__dirname, "../workflows/examples", "guard-rules-example.json");
31
31
  const rulesData = JSON.parse(fs.readFileSync(rulesPath, "utf8"));
32
+ console.log("\u{1F9E0} Seeding guard rules...");
32
33
  let seededCount = 0;
33
34
  let skippedCount = 0;
34
35
  for (const ruleData of rulesData) {
@@ -52,7 +53,7 @@ const seedGuardRules = {
52
53
  seededCount++;
53
54
  }
54
55
  console.log(`
55
- \u2713 Guard rules seeding complete:`);
56
+ \u2705 Guard rules seeding complete:`);
56
57
  console.log(` - Seeded: ${seededCount}`);
57
58
  console.log(` - Skipped (existing): ${skippedCount}`);
58
59
  console.log(` - Total: ${rulesData.length}`);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/modules/business_rules/cli.ts"],
4
- "sourcesContent": ["import type { ModuleCli } from '@open-mercato/shared/modules/registry'\nimport { createRequestContainer } from '@open-mercato/shared/lib/di/container'\nimport type { EntityManager } from '@mikro-orm/postgresql'\nimport { BusinessRule } from './data/entities'\nimport * as fs from 'fs'\nimport * as path from 'path'\n\n/**\n * Parse CLI arguments\n */\nfunction parseArgs(args: string[]) {\n const result: Record<string, string> = {}\n for (let i = 0; i < args.length; i += 2) {\n const key = args[i]?.replace(/^-+/, '')\n const value = args[i + 1]\n if (key && value) {\n result[key] = value\n }\n }\n return result\n}\n\n/**\n * Seed guard rules for workflow checkout demo\n */\nconst seedGuardRules: ModuleCli = {\n command: 'seed-guard-rules',\n async run(rest: string[]) {\n const args = parseArgs(rest)\n const tenantId = String(args.tenantId ?? args.tenant ?? args.t ?? '')\n const organizationId = String(args.organizationId ?? args.orgId ?? args.org ?? args.o ?? '')\n\n if (!tenantId || !organizationId) {\n console.error('Usage: mercato business_rules seed-guard-rules --tenant <tenantId> --org <organizationId>')\n console.error(' or: mercato business_rules seed-guard-rules -t <tenantId> -o <organizationId>')\n return\n }\n\n try {\n const { resolve } = await createRequestContainer()\n const em = resolve<EntityManager>('em')\n\n // Read guard rules from workflows examples\n const rulesPath = path.join(__dirname, '../workflows/examples', 'guard-rules-example.json')\n const rulesData = JSON.parse(fs.readFileSync(rulesPath, 'utf8'))\n\n let seededCount = 0\n let skippedCount = 0\n\n for (const ruleData of rulesData) {\n // Check if rule already exists\n const existing = await em.findOne(BusinessRule, {\n ruleId: ruleData.ruleId,\n tenantId,\n organizationId,\n })\n\n if (existing) {\n console.log(` \u2298 Guard rule '${ruleData.ruleId}' already exists`)\n skippedCount++\n continue\n }\n\n // Create the business rule\n const rule = em.create(BusinessRule, {\n ...ruleData,\n tenantId,\n organizationId,\n })\n\n await em.persistAndFlush(rule)\n console.log(` \u2713 Seeded guard rule: ${rule.ruleName}`)\n seededCount++\n }\n\n console.log(`\\n\u2713 Guard rules seeding complete:`)\n console.log(` - Seeded: ${seededCount}`)\n console.log(` - Skipped (existing): ${skippedCount}`)\n console.log(` - Total: ${rulesData.length}`)\n } catch (error) {\n console.error('Error seeding guard rules:', error)\n throw error\n }\n },\n}\n\nconst businessRulesCliCommands = [\n seedGuardRules,\n]\n\nexport default businessRulesCliCommands\n"],
5
- "mappings": "AACA,SAAS,8BAA8B;AAEvC,SAAS,oBAAoB;AAC7B,YAAY,QAAQ;AACpB,YAAY,UAAU;AAKtB,SAAS,UAAU,MAAgB;AACjC,QAAM,SAAiC,CAAC;AACxC,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK,GAAG;AACvC,UAAM,MAAM,KAAK,CAAC,GAAG,QAAQ,OAAO,EAAE;AACtC,UAAM,QAAQ,KAAK,IAAI,CAAC;AACxB,QAAI,OAAO,OAAO;AAChB,aAAO,GAAG,IAAI;AAAA,IAChB;AAAA,EACF;AACA,SAAO;AACT;AAKA,MAAM,iBAA4B;AAAA,EAChC,SAAS;AAAA,EACT,MAAM,IAAI,MAAgB;AACxB,UAAM,OAAO,UAAU,IAAI;AAC3B,UAAM,WAAW,OAAO,KAAK,YAAY,KAAK,UAAU,KAAK,KAAK,EAAE;AACpE,UAAM,iBAAiB,OAAO,KAAK,kBAAkB,KAAK,SAAS,KAAK,OAAO,KAAK,KAAK,EAAE;AAE3F,QAAI,CAAC,YAAY,CAAC,gBAAgB;AAChC,cAAQ,MAAM,2FAA2F;AACzG,cAAQ,MAAM,kFAAkF;AAChG;AAAA,IACF;AAEA,QAAI;AACF,YAAM,EAAE,QAAQ,IAAI,MAAM,uBAAuB;AACjD,YAAM,KAAK,QAAuB,IAAI;AAGtC,YAAM,YAAY,KAAK,KAAK,WAAW,yBAAyB,0BAA0B;AAC1F,YAAM,YAAY,KAAK,MAAM,GAAG,aAAa,WAAW,MAAM,CAAC;AAE/D,UAAI,cAAc;AAClB,UAAI,eAAe;AAEnB,iBAAW,YAAY,WAAW;AAEhC,cAAM,WAAW,MAAM,GAAG,QAAQ,cAAc;AAAA,UAC9C,QAAQ,SAAS;AAAA,UACjB;AAAA,UACA;AAAA,QACF,CAAC;AAED,YAAI,UAAU;AACZ,kBAAQ,IAAI,wBAAmB,SAAS,MAAM,kBAAkB;AAChE;AACA;AAAA,QACF;AAGA,cAAM,OAAO,GAAG,OAAO,cAAc;AAAA,UACnC,GAAG;AAAA,UACH;AAAA,UACA;AAAA,QACF,CAAC;AAED,cAAM,GAAG,gBAAgB,IAAI;AAC7B,gBAAQ,IAAI,+BAA0B,KAAK,QAAQ,EAAE;AACrD;AAAA,MACF;AAEA,cAAQ,IAAI;AAAA,qCAAmC;AAC/C,cAAQ,IAAI,eAAe,WAAW,EAAE;AACxC,cAAQ,IAAI,2BAA2B,YAAY,EAAE;AACrD,cAAQ,IAAI,cAAc,UAAU,MAAM,EAAE;AAAA,IAC9C,SAAS,OAAO;AACd,cAAQ,MAAM,8BAA8B,KAAK;AACjD,YAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,MAAM,2BAA2B;AAAA,EAC/B;AACF;AAEA,IAAO,cAAQ;",
4
+ "sourcesContent": ["import type { ModuleCli } from '@open-mercato/shared/modules/registry'\nimport { createRequestContainer } from '@open-mercato/shared/lib/di/container'\nimport type { EntityManager } from '@mikro-orm/postgresql'\nimport { BusinessRule } from './data/entities'\nimport * as fs from 'fs'\nimport * as path from 'path'\n\n/**\n * Parse CLI arguments\n */\nfunction parseArgs(args: string[]) {\n const result: Record<string, string> = {}\n for (let i = 0; i < args.length; i += 2) {\n const key = args[i]?.replace(/^-+/, '')\n const value = args[i + 1]\n if (key && value) {\n result[key] = value\n }\n }\n return result\n}\n\n/**\n * Seed guard rules for workflow checkout demo\n */\nconst seedGuardRules: ModuleCli = {\n command: 'seed-guard-rules',\n async run(rest: string[]) {\n const args = parseArgs(rest)\n const tenantId = String(args.tenantId ?? args.tenant ?? args.t ?? '')\n const organizationId = String(args.organizationId ?? args.orgId ?? args.org ?? args.o ?? '')\n\n if (!tenantId || !organizationId) {\n console.error('Usage: mercato business_rules seed-guard-rules --tenant <tenantId> --org <organizationId>')\n console.error(' or: mercato business_rules seed-guard-rules -t <tenantId> -o <organizationId>')\n return\n }\n\n try {\n const { resolve } = await createRequestContainer()\n const em = resolve<EntityManager>('em')\n\n // Read guard rules from workflows examples\n const rulesPath = path.join(__dirname, '../workflows/examples', 'guard-rules-example.json')\n const rulesData = JSON.parse(fs.readFileSync(rulesPath, 'utf8'))\n\n console.log('\uD83E\uDDE0 Seeding guard rules...')\n let seededCount = 0\n let skippedCount = 0\n\n for (const ruleData of rulesData) {\n // Check if rule already exists\n const existing = await em.findOne(BusinessRule, {\n ruleId: ruleData.ruleId,\n tenantId,\n organizationId,\n })\n\n if (existing) {\n console.log(` \u2298 Guard rule '${ruleData.ruleId}' already exists`)\n skippedCount++\n continue\n }\n\n // Create the business rule\n const rule = em.create(BusinessRule, {\n ...ruleData,\n tenantId,\n organizationId,\n })\n\n await em.persistAndFlush(rule)\n console.log(` \u2713 Seeded guard rule: ${rule.ruleName}`)\n seededCount++\n }\n\n console.log(`\\n\u2705 Guard rules seeding complete:`)\n console.log(` - Seeded: ${seededCount}`)\n console.log(` - Skipped (existing): ${skippedCount}`)\n console.log(` - Total: ${rulesData.length}`)\n } catch (error) {\n console.error('Error seeding guard rules:', error)\n throw error\n }\n },\n}\n\nconst businessRulesCliCommands = [\n seedGuardRules,\n]\n\nexport default businessRulesCliCommands\n"],
5
+ "mappings": "AACA,SAAS,8BAA8B;AAEvC,SAAS,oBAAoB;AAC7B,YAAY,QAAQ;AACpB,YAAY,UAAU;AAKtB,SAAS,UAAU,MAAgB;AACjC,QAAM,SAAiC,CAAC;AACxC,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK,GAAG;AACvC,UAAM,MAAM,KAAK,CAAC,GAAG,QAAQ,OAAO,EAAE;AACtC,UAAM,QAAQ,KAAK,IAAI,CAAC;AACxB,QAAI,OAAO,OAAO;AAChB,aAAO,GAAG,IAAI;AAAA,IAChB;AAAA,EACF;AACA,SAAO;AACT;AAKA,MAAM,iBAA4B;AAAA,EAChC,SAAS;AAAA,EACT,MAAM,IAAI,MAAgB;AACxB,UAAM,OAAO,UAAU,IAAI;AAC3B,UAAM,WAAW,OAAO,KAAK,YAAY,KAAK,UAAU,KAAK,KAAK,EAAE;AACpE,UAAM,iBAAiB,OAAO,KAAK,kBAAkB,KAAK,SAAS,KAAK,OAAO,KAAK,KAAK,EAAE;AAE3F,QAAI,CAAC,YAAY,CAAC,gBAAgB;AAChC,cAAQ,MAAM,2FAA2F;AACzG,cAAQ,MAAM,kFAAkF;AAChG;AAAA,IACF;AAEA,QAAI;AACF,YAAM,EAAE,QAAQ,IAAI,MAAM,uBAAuB;AACjD,YAAM,KAAK,QAAuB,IAAI;AAGtC,YAAM,YAAY,KAAK,KAAK,WAAW,yBAAyB,0BAA0B;AAC1F,YAAM,YAAY,KAAK,MAAM,GAAG,aAAa,WAAW,MAAM,CAAC;AAE/D,cAAQ,IAAI,kCAA2B;AACvC,UAAI,cAAc;AAClB,UAAI,eAAe;AAEnB,iBAAW,YAAY,WAAW;AAEhC,cAAM,WAAW,MAAM,GAAG,QAAQ,cAAc;AAAA,UAC9C,QAAQ,SAAS;AAAA,UACjB;AAAA,UACA;AAAA,QACF,CAAC;AAED,YAAI,UAAU;AACZ,kBAAQ,IAAI,wBAAmB,SAAS,MAAM,kBAAkB;AAChE;AACA;AAAA,QACF;AAGA,cAAM,OAAO,GAAG,OAAO,cAAc;AAAA,UACnC,GAAG;AAAA,UACH;AAAA,UACA;AAAA,QACF,CAAC;AAED,cAAM,GAAG,gBAAgB,IAAI;AAC7B,gBAAQ,IAAI,+BAA0B,KAAK,QAAQ,EAAE;AACrD;AAAA,MACF;AAEA,cAAQ,IAAI;AAAA,qCAAmC;AAC/C,cAAQ,IAAI,eAAe,WAAW,EAAE;AACxC,cAAQ,IAAI,2BAA2B,YAAY,EAAE;AACrD,cAAQ,IAAI,cAAc,UAAU,MAAM,EAAE;AAAA,IAC9C,SAAS,OAAO;AACd,cAAQ,MAAM,8BAA8B,KAAK;AACjD,YAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,MAAM,2BAA2B;AAAA,EAC/B;AACF;AAEA,IAAO,cAAQ;",
6
6
  "names": []
7
7
  }
@@ -191,38 +191,6 @@ const ruleDiscoveryOptionsSchema = z.object({
191
191
  organizationId: z.uuid("organizationId must be a valid UUID"),
192
192
  ruleType: ruleTypeSchema.optional()
193
193
  });
194
- const directRuleExecutionContextSchema = z.object({
195
- ruleId: z.uuid("ruleId must be a valid UUID"),
196
- data: z.any(),
197
- user: z.looseObject({
198
- id: z.string().optional(),
199
- email: z.string().optional(),
200
- role: z.string().optional()
201
- }).optional(),
202
- tenantId: z.uuid("tenantId must be a valid UUID"),
203
- organizationId: z.uuid("organizationId must be a valid UUID"),
204
- executedBy: z.string().optional(),
205
- dryRun: z.boolean().optional(),
206
- entityType: z.string().optional(),
207
- entityId: z.string().optional(),
208
- eventType: z.string().optional()
209
- });
210
- const ruleIdExecutionContextSchema = z.object({
211
- ruleId: z.string().min(1, "ruleId must be a non-empty string").max(50),
212
- data: z.any(),
213
- user: z.looseObject({
214
- id: z.string().optional(),
215
- email: z.string().optional(),
216
- role: z.string().optional()
217
- }).optional(),
218
- tenantId: z.uuid("tenantId must be a valid UUID"),
219
- organizationId: z.uuid("organizationId must be a valid UUID"),
220
- executedBy: z.string().optional(),
221
- dryRun: z.boolean().optional(),
222
- entityType: z.string().optional(),
223
- entityId: z.string().optional(),
224
- eventType: z.string().optional()
225
- });
226
194
  export {
227
195
  actionSchema,
228
196
  actionTriggerSchema,
@@ -236,13 +204,11 @@ export {
236
204
  createRuleSetMemberSchema,
237
205
  createRuleSetSchema,
238
206
  dataTypeSchema,
239
- directRuleExecutionContextSchema,
240
207
  executionResultSchema,
241
208
  logicalOperatorSchema,
242
209
  ruleDiscoveryOptionsSchema,
243
210
  ruleEngineContextSchema,
244
211
  ruleExecutionLogFilterSchema,
245
- ruleIdExecutionContextSchema,
246
212
  ruleSetFilterSchema,
247
213
  ruleSetMemberFilterSchema,
248
214
  ruleTypeSchema,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/modules/business_rules/data/validators.ts"],
4
- "sourcesContent": ["import { z } from 'zod'\nimport {\n validateConditionExpressionForApi,\n validateActionsForApi,\n isSafeExpression,\n} from '../lib/payload-validation'\n\n/**\n * Business Rules Module - Zod Validators\n */\n\nconst uuid = z.uuid()\n\n// Rule Types\nexport const ruleTypeSchema = z.enum(['GUARD', 'VALIDATION', 'CALCULATION', 'ACTION', 'ASSIGNMENT'])\nexport type RuleType = z.infer<typeof ruleTypeSchema>\n\n// Condition Types\nexport const conditionTypeSchema = z.enum(['EXPRESSION', 'GROUP'])\nexport type ConditionType = z.infer<typeof conditionTypeSchema>\n\n// Logical Operators\nexport const logicalOperatorSchema = z.enum(['AND', 'OR', 'NOT'])\nexport type LogicalOperator = z.infer<typeof logicalOperatorSchema>\n\n// Comparison Operators\nexport const comparisonOperatorSchema = z.enum([\n '=',\n '==',\n '!=',\n '>',\n '>=',\n '<',\n '<=',\n 'IN',\n 'NOT_IN',\n 'CONTAINS',\n 'NOT_CONTAINS',\n 'STARTS_WITH',\n 'ENDS_WITH',\n 'MATCHES',\n 'IS_EMPTY',\n 'IS_NOT_EMPTY',\n])\nexport type ComparisonOperator = z.infer<typeof comparisonOperatorSchema>\n\n// Data Types\nexport const dataTypeSchema = z.enum(['STRING', 'NUMBER', 'BOOLEAN', 'DATE', 'ARRAY', 'OBJECT'])\nexport type DataType = z.infer<typeof dataTypeSchema>\n\n// Action Trigger\nexport const actionTriggerSchema = z.enum(['ON_SUCCESS', 'ON_FAILURE', 'ALWAYS'])\nexport type ActionTrigger = z.infer<typeof actionTriggerSchema>\n\n// Execution Result\nexport const executionResultSchema = z.enum(['SUCCESS', 'FAILURE', 'ERROR'])\nexport type ExecutionResult = z.infer<typeof executionResultSchema>\n\n// Condition Expression Schema with Validation\n// Uses runtime validation to check structure, nesting, and field paths\nexport const conditionExpressionSchema = z.any()\n .superRefine((val, ctx) => {\n // Null/undefined is allowed (optional field)\n if (val === null || val === undefined) return\n\n // Check for dangerous patterns first (DoS prevention)\n if (!isSafeExpression(val)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'Condition expression exceeds safety limits (max depth: 10, max rules per group: 50, max field path length: 200)'\n })\n return\n }\n\n // Validate structure and content\n const result = validateConditionExpressionForApi(val)\n if (!result.valid) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: result.error || 'Invalid condition expression'\n })\n }\n })\n\n// Action Schema with Validation\n// Validates action type and required config fields\nexport const actionSchema = z.object({\n type: z.string().min(1),\n config: z.record(z.string(), z.any()).optional(),\n})\n\nexport const actionsArraySchema = z.array(actionSchema).optional().nullable()\n .superRefine((val, ctx) => {\n // Null/undefined/empty is allowed (optional field)\n if (!val || (Array.isArray(val) && val.length === 0)) return\n\n const result = validateActionsForApi(val, 'actions')\n if (!result.valid) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: result.error || 'Invalid actions'\n })\n }\n })\n\n// Date preprocessing helper\nconst dateOrNull = z.preprocess((value) => {\n if (value === undefined || value === null || value === '') return null\n const date = value instanceof Date ? value : new Date(String(value))\n return Number.isNaN(date.getTime()) ? null : date\n}, z.date().nullable())\n\n// BusinessRule Create Schema\nexport const createBusinessRuleSchema = z.object({\n ruleId: z.string().min(1).max(50),\n ruleName: z.string().min(1).max(200),\n description: z.string().max(5000).optional().nullable(),\n ruleType: ruleTypeSchema,\n ruleCategory: z.string().max(50).optional().nullable(),\n entityType: z.string().min(1).max(50),\n eventType: z.string().max(50).optional().nullable(),\n conditionExpression: conditionExpressionSchema,\n successActions: actionsArraySchema,\n failureActions: actionsArraySchema,\n enabled: z.boolean().optional().default(true),\n priority: z.number().int().min(0).max(9999).optional().default(100),\n version: z.number().int().min(1).optional().default(1),\n effectiveFrom: dateOrNull.optional(),\n effectiveTo: dateOrNull.optional(),\n tenantId: uuid,\n organizationId: uuid,\n createdBy: z.string().max(50).optional().nullable(),\n})\n\nexport type CreateBusinessRuleInput = z.infer<typeof createBusinessRuleSchema>\n\n// BusinessRule Update Schema\nexport const updateBusinessRuleSchema = createBusinessRuleSchema.partial().extend({\n id: uuid,\n})\n\nexport type UpdateBusinessRuleInput = z.infer<typeof updateBusinessRuleSchema>\n\n// Query/Filter Schema\nexport const businessRuleFilterSchema = z.object({\n ruleId: z.string().optional(),\n ruleName: z.string().optional(),\n ruleType: ruleTypeSchema.optional(),\n ruleCategory: z.string().optional(),\n entityType: z.string().optional(),\n eventType: z.string().optional(),\n enabled: z.boolean().optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n})\n\nexport type BusinessRuleFilter = z.infer<typeof businessRuleFilterSchema>\n\n// RuleExecutionLog Create Schema\nexport const createRuleExecutionLogSchema = z.object({\n ruleId: uuid,\n entityId: uuid,\n entityType: z.string().min(1).max(50),\n executionResult: executionResultSchema,\n inputContext: z.any().optional().nullable(),\n outputContext: z.any().optional().nullable(),\n errorMessage: z.string().optional().nullable(),\n executionTimeMs: z.number().int().min(0),\n executedAt: z.date().optional(),\n tenantId: uuid,\n organizationId: uuid.optional().nullable(),\n executedBy: z.string().max(50).optional().nullable(),\n})\n\nexport type CreateRuleExecutionLogInput = z.infer<typeof createRuleExecutionLogSchema>\n\n// RuleExecutionLog Query/Filter Schema\nexport const ruleExecutionLogFilterSchema = z.object({\n ruleId: uuid.optional(),\n entityId: uuid.optional(),\n entityType: z.string().optional(),\n executionResult: executionResultSchema.optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n executedBy: z.string().optional(),\n executedAtFrom: z.date().optional(),\n executedAtTo: z.date().optional(),\n})\n\nexport type RuleExecutionLogFilter = z.infer<typeof ruleExecutionLogFilterSchema>\n\n// RuleSet Create Schema\nexport const createRuleSetSchema = z.object({\n setId: z.string().min(1).max(50),\n setName: z.string().min(1).max(200),\n description: z.string().max(5000).optional().nullable(),\n enabled: z.boolean().optional().default(true),\n tenantId: uuid,\n organizationId: uuid,\n createdBy: z.string().max(50).optional().nullable(),\n})\n\nexport type CreateRuleSetInput = z.infer<typeof createRuleSetSchema>\n\n// RuleSet Update Schema\nexport const updateRuleSetSchema = createRuleSetSchema.partial().extend({\n id: uuid,\n})\n\nexport type UpdateRuleSetInput = z.infer<typeof updateRuleSetSchema>\n\n// RuleSet Query/Filter Schema\nexport const ruleSetFilterSchema = z.object({\n setId: z.string().optional(),\n setName: z.string().optional(),\n enabled: z.boolean().optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n})\n\nexport type RuleSetFilter = z.infer<typeof ruleSetFilterSchema>\n\n// RuleSetMember Create Schema\nexport const createRuleSetMemberSchema = z.object({\n ruleSetId: uuid,\n ruleId: uuid,\n sequence: z.number().int().min(0).optional().default(0),\n enabled: z.boolean().optional().default(true),\n tenantId: uuid,\n organizationId: uuid,\n})\n\nexport type CreateRuleSetMemberInput = z.infer<typeof createRuleSetMemberSchema>\n\n// RuleSetMember Update Schema\nexport const updateRuleSetMemberSchema = z.object({\n id: uuid,\n sequence: z.number().int().min(0).optional(),\n enabled: z.boolean().optional(),\n})\n\nexport type UpdateRuleSetMemberInput = z.infer<typeof updateRuleSetMemberSchema>\n\n// RuleSetMember Query/Filter Schema\nexport const ruleSetMemberFilterSchema = z.object({\n ruleSetId: uuid.optional(),\n ruleId: uuid.optional(),\n enabled: z.boolean().optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n})\n\nexport type RuleSetMemberFilter = z.infer<typeof ruleSetMemberFilterSchema>\n\n// Rule Engine Context Schema\nexport const ruleEngineContextSchema = z.looseObject({\n entityType: z.string().min(1, 'entityType is required'),\n entityId: z.string().optional(),\n eventType: z.string().optional(),\n data: z.any(),\n user: z.looseObject({\n id: z.string().optional(),\n email: z.string().optional(),\n role: z.string().optional(),\n }).optional(),\n tenant: z.looseObject({\n id: z.string().optional(),\n }).optional(),\n organization: z.looseObject({\n id: z.string().optional(),\n }).optional(),\n tenantId: z.uuid('tenantId must be a valid UUID'),\n organizationId: z.uuid('organizationId must be a valid UUID'),\n executedBy: z.string().optional(),\n dryRun: z.boolean().optional(),\n})\n\nexport type RuleEngineContextInput = z.infer<typeof ruleEngineContextSchema>\n\n// Rule Discovery Options Schema\nexport const ruleDiscoveryOptionsSchema = z.object({\n entityType: z.string().min(1, 'entityType is required'),\n eventType: z.string().optional(),\n tenantId: z.uuid('tenantId must be a valid UUID'),\n organizationId: z.uuid('organizationId must be a valid UUID'),\n ruleType: ruleTypeSchema.optional(),\n})\n\nexport type RuleDiscoveryOptionsInput = z.infer<typeof ruleDiscoveryOptionsSchema>\n\n// Direct Rule Execution Context Schema (for executing a specific rule by ID)\nexport const directRuleExecutionContextSchema = z.object({\n ruleId: z.uuid('ruleId must be a valid UUID'),\n data: z.any(),\n user: z.looseObject({\n id: z.string().optional(),\n email: z.string().optional(),\n role: z.string().optional(),\n }).optional(),\n tenantId: z.uuid('tenantId must be a valid UUID'),\n organizationId: z.uuid('organizationId must be a valid UUID'),\n executedBy: z.string().optional(),\n dryRun: z.boolean().optional(),\n entityType: z.string().optional(),\n entityId: z.string().optional(),\n eventType: z.string().optional(),\n})\n\nexport type DirectRuleExecutionContextInput = z.infer<typeof directRuleExecutionContextSchema>\n\n// Rule ID Execution Context Schema (for executing a specific rule by its string rule_id identifier)\nexport const ruleIdExecutionContextSchema = z.object({\n ruleId: z.string().min(1, 'ruleId must be a non-empty string').max(50),\n data: z.any(),\n user: z.looseObject({\n id: z.string().optional(),\n email: z.string().optional(),\n role: z.string().optional(),\n }).optional(),\n tenantId: z.uuid('tenantId must be a valid UUID'),\n organizationId: z.uuid('organizationId must be a valid UUID'),\n executedBy: z.string().optional(),\n dryRun: z.boolean().optional(),\n entityType: z.string().optional(),\n entityId: z.string().optional(),\n eventType: z.string().optional(),\n})\n\nexport type RuleIdExecutionContextInput = z.infer<typeof ruleIdExecutionContextSchema>\n"],
5
- "mappings": "AAAA,SAAS,SAAS;AAClB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAMP,MAAM,OAAO,EAAE,KAAK;AAGb,MAAM,iBAAiB,EAAE,KAAK,CAAC,SAAS,cAAc,eAAe,UAAU,YAAY,CAAC;AAI5F,MAAM,sBAAsB,EAAE,KAAK,CAAC,cAAc,OAAO,CAAC;AAI1D,MAAM,wBAAwB,EAAE,KAAK,CAAC,OAAO,MAAM,KAAK,CAAC;AAIzD,MAAM,2BAA2B,EAAE,KAAK;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAIM,MAAM,iBAAiB,EAAE,KAAK,CAAC,UAAU,UAAU,WAAW,QAAQ,SAAS,QAAQ,CAAC;AAIxF,MAAM,sBAAsB,EAAE,KAAK,CAAC,cAAc,cAAc,QAAQ,CAAC;AAIzE,MAAM,wBAAwB,EAAE,KAAK,CAAC,WAAW,WAAW,OAAO,CAAC;AAKpE,MAAM,4BAA4B,EAAE,IAAI,EAC5C,YAAY,CAAC,KAAK,QAAQ;AAEzB,MAAI,QAAQ,QAAQ,QAAQ,OAAW;AAGvC,MAAI,CAAC,iBAAiB,GAAG,GAAG;AAC1B,QAAI,SAAS;AAAA,MACX,MAAM,EAAE,aAAa;AAAA,MACrB,SAAS;AAAA,IACX,CAAC;AACD;AAAA,EACF;AAGA,QAAM,SAAS,kCAAkC,GAAG;AACpD,MAAI,CAAC,OAAO,OAAO;AACjB,QAAI,SAAS;AAAA,MACX,MAAM,EAAE,aAAa;AAAA,MACrB,SAAS,OAAO,SAAS;AAAA,IAC3B,CAAC;AAAA,EACH;AACF,CAAC;AAII,MAAM,eAAe,EAAE,OAAO;AAAA,EACnC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,CAAC,EAAE,SAAS;AACjD,CAAC;AAEM,MAAM,qBAAqB,EAAE,MAAM,YAAY,EAAE,SAAS,EAAE,SAAS,EACzE,YAAY,CAAC,KAAK,QAAQ;AAEzB,MAAI,CAAC,OAAQ,MAAM,QAAQ,GAAG,KAAK,IAAI,WAAW,EAAI;AAEtD,QAAM,SAAS,sBAAsB,KAAK,SAAS;AACnD,MAAI,CAAC,OAAO,OAAO;AACjB,QAAI,SAAS;AAAA,MACX,MAAM,EAAE,aAAa;AAAA,MACrB,SAAS,OAAO,SAAS;AAAA,IAC3B,CAAC;AAAA,EACH;AACF,CAAC;AAGH,MAAM,aAAa,EAAE,WAAW,CAAC,UAAU;AACzC,MAAI,UAAU,UAAa,UAAU,QAAQ,UAAU,GAAI,QAAO;AAClE,QAAM,OAAO,iBAAiB,OAAO,QAAQ,IAAI,KAAK,OAAO,KAAK,CAAC;AACnE,SAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,IAAI,OAAO;AAC/C,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC;AAGf,MAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;AAAA,EAChC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EACnC,aAAa,EAAE,OAAO,EAAE,IAAI,GAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACtD,UAAU;AAAA,EACV,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,SAAS;AAAA,EACrD,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;AAAA,EACpC,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,SAAS;AAAA,EAClD,qBAAqB;AAAA,EACrB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC5C,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,SAAS,EAAE,QAAQ,GAAG;AAAA,EAClE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC;AAAA,EACrD,eAAe,WAAW,SAAS;AAAA,EACnC,aAAa,WAAW,SAAS;AAAA,EACjC,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,SAAS;AACpD,CAAC;AAKM,MAAM,2BAA2B,yBAAyB,QAAQ,EAAE,OAAO;AAAA,EAChF,IAAI;AACN,CAAC;AAKM,MAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,UAAU,eAAe,SAAS;AAAA,EAClC,cAAc,EAAE,OAAO,EAAE,SAAS;AAAA,EAClC,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAChC,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,SAAS,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC9B,UAAU,KAAK,SAAS;AAAA,EACxB,gBAAgB,KAAK,SAAS;AAChC,CAAC;AAKM,MAAM,+BAA+B,EAAE,OAAO;AAAA,EACnD,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;AAAA,EACpC,iBAAiB;AAAA,EACjB,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1C,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC3C,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC7C,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;AAAA,EACvC,YAAY,EAAE,KAAK,EAAE,SAAS;AAAA,EAC9B,UAAU;AAAA,EACV,gBAAgB,KAAK,SAAS,EAAE,SAAS;AAAA,EACzC,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,SAAS;AACrD,CAAC;AAKM,MAAM,+BAA+B,EAAE,OAAO;AAAA,EACnD,QAAQ,KAAK,SAAS;AAAA,EACtB,UAAU,KAAK,SAAS;AAAA,EACxB,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAChC,iBAAiB,sBAAsB,SAAS;AAAA,EAChD,UAAU,KAAK,SAAS;AAAA,EACxB,gBAAgB,KAAK,SAAS;AAAA,EAC9B,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAChC,gBAAgB,EAAE,KAAK,EAAE,SAAS;AAAA,EAClC,cAAc,EAAE,KAAK,EAAE,SAAS;AAClC,CAAC;AAKM,MAAM,sBAAsB,EAAE,OAAO;AAAA,EAC1C,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;AAAA,EAC/B,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EAClC,aAAa,EAAE,OAAO,EAAE,IAAI,GAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACtD,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC5C,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,SAAS;AACpD,CAAC;AAKM,MAAM,sBAAsB,oBAAoB,QAAQ,EAAE,OAAO;AAAA,EACtE,IAAI;AACN,CAAC;AAKM,MAAM,sBAAsB,EAAE,OAAO;AAAA,EAC1C,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,SAAS,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC9B,UAAU,KAAK,SAAS;AAAA,EACxB,gBAAgB,KAAK,SAAS;AAChC,CAAC;AAKM,MAAM,4BAA4B,EAAE,OAAO;AAAA,EAChD,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC;AAAA,EACtD,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC5C,UAAU;AAAA,EACV,gBAAgB;AAClB,CAAC;AAKM,MAAM,4BAA4B,EAAE,OAAO;AAAA,EAChD,IAAI;AAAA,EACJ,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAC3C,SAAS,EAAE,QAAQ,EAAE,SAAS;AAChC,CAAC;AAKM,MAAM,4BAA4B,EAAE,OAAO;AAAA,EAChD,WAAW,KAAK,SAAS;AAAA,EACzB,QAAQ,KAAK,SAAS;AAAA,EACtB,SAAS,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC9B,UAAU,KAAK,SAAS;AAAA,EACxB,gBAAgB,KAAK,SAAS;AAChC,CAAC;AAKM,MAAM,0BAA0B,EAAE,YAAY;AAAA,EACnD,YAAY,EAAE,OAAO,EAAE,IAAI,GAAG,wBAAwB;AAAA,EACtD,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,MAAM,EAAE,IAAI;AAAA,EACZ,MAAM,EAAE,YAAY;AAAA,IAClB,IAAI,EAAE,OAAO,EAAE,SAAS;AAAA,IACxB,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,IAC3B,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,CAAC,EAAE,SAAS;AAAA,EACZ,QAAQ,EAAE,YAAY;AAAA,IACpB,IAAI,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,CAAC,EAAE,SAAS;AAAA,EACZ,cAAc,EAAE,YAAY;AAAA,IAC1B,IAAI,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,CAAC,EAAE,SAAS;AAAA,EACZ,UAAU,EAAE,KAAK,+BAA+B;AAAA,EAChD,gBAAgB,EAAE,KAAK,qCAAqC;AAAA,EAC5D,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAChC,QAAQ,EAAE,QAAQ,EAAE,SAAS;AAC/B,CAAC;AAKM,MAAM,6BAA6B,EAAE,OAAO;AAAA,EACjD,YAAY,EAAE,OAAO,EAAE,IAAI,GAAG,wBAAwB;AAAA,EACtD,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,UAAU,EAAE,KAAK,+BAA+B;AAAA,EAChD,gBAAgB,EAAE,KAAK,qCAAqC;AAAA,EAC5D,UAAU,eAAe,SAAS;AACpC,CAAC;AAKM,MAAM,mCAAmC,EAAE,OAAO;AAAA,EACvD,QAAQ,EAAE,KAAK,6BAA6B;AAAA,EAC5C,MAAM,EAAE,IAAI;AAAA,EACZ,MAAM,EAAE,YAAY;AAAA,IAClB,IAAI,EAAE,OAAO,EAAE,SAAS;AAAA,IACxB,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,IAC3B,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,CAAC,EAAE,SAAS;AAAA,EACZ,UAAU,EAAE,KAAK,+BAA+B;AAAA,EAChD,gBAAgB,EAAE,KAAK,qCAAqC;AAAA,EAC5D,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAChC,QAAQ,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC7B,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAChC,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,WAAW,EAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AAKM,MAAM,+BAA+B,EAAE,OAAO;AAAA,EACnD,QAAQ,EAAE,OAAO,EAAE,IAAI,GAAG,mCAAmC,EAAE,IAAI,EAAE;AAAA,EACrE,MAAM,EAAE,IAAI;AAAA,EACZ,MAAM,EAAE,YAAY;AAAA,IAClB,IAAI,EAAE,OAAO,EAAE,SAAS;AAAA,IACxB,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,IAC3B,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,CAAC,EAAE,SAAS;AAAA,EACZ,UAAU,EAAE,KAAK,+BAA+B;AAAA,EAChD,gBAAgB,EAAE,KAAK,qCAAqC;AAAA,EAC5D,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAChC,QAAQ,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC7B,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAChC,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,WAAW,EAAE,OAAO,EAAE,SAAS;AACjC,CAAC;",
4
+ "sourcesContent": ["import { z } from 'zod'\nimport {\n validateConditionExpressionForApi,\n validateActionsForApi,\n isSafeExpression,\n} from '../lib/payload-validation'\n\n/**\n * Business Rules Module - Zod Validators\n */\n\nconst uuid = z.uuid()\n\n// Rule Types\nexport const ruleTypeSchema = z.enum(['GUARD', 'VALIDATION', 'CALCULATION', 'ACTION', 'ASSIGNMENT'])\nexport type RuleType = z.infer<typeof ruleTypeSchema>\n\n// Condition Types\nexport const conditionTypeSchema = z.enum(['EXPRESSION', 'GROUP'])\nexport type ConditionType = z.infer<typeof conditionTypeSchema>\n\n// Logical Operators\nexport const logicalOperatorSchema = z.enum(['AND', 'OR', 'NOT'])\nexport type LogicalOperator = z.infer<typeof logicalOperatorSchema>\n\n// Comparison Operators\nexport const comparisonOperatorSchema = z.enum([\n '=',\n '==',\n '!=',\n '>',\n '>=',\n '<',\n '<=',\n 'IN',\n 'NOT_IN',\n 'CONTAINS',\n 'NOT_CONTAINS',\n 'STARTS_WITH',\n 'ENDS_WITH',\n 'MATCHES',\n 'IS_EMPTY',\n 'IS_NOT_EMPTY',\n])\nexport type ComparisonOperator = z.infer<typeof comparisonOperatorSchema>\n\n// Data Types\nexport const dataTypeSchema = z.enum(['STRING', 'NUMBER', 'BOOLEAN', 'DATE', 'ARRAY', 'OBJECT'])\nexport type DataType = z.infer<typeof dataTypeSchema>\n\n// Action Trigger\nexport const actionTriggerSchema = z.enum(['ON_SUCCESS', 'ON_FAILURE', 'ALWAYS'])\nexport type ActionTrigger = z.infer<typeof actionTriggerSchema>\n\n// Execution Result\nexport const executionResultSchema = z.enum(['SUCCESS', 'FAILURE', 'ERROR'])\nexport type ExecutionResult = z.infer<typeof executionResultSchema>\n\n// Condition Expression Schema with Validation\n// Uses runtime validation to check structure, nesting, and field paths\nexport const conditionExpressionSchema = z.any()\n .superRefine((val, ctx) => {\n // Null/undefined is allowed (optional field)\n if (val === null || val === undefined) return\n\n // Check for dangerous patterns first (DoS prevention)\n if (!isSafeExpression(val)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'Condition expression exceeds safety limits (max depth: 10, max rules per group: 50, max field path length: 200)'\n })\n return\n }\n\n // Validate structure and content\n const result = validateConditionExpressionForApi(val)\n if (!result.valid) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: result.error || 'Invalid condition expression'\n })\n }\n })\n\n// Action Schema with Validation\n// Validates action type and required config fields\nexport const actionSchema = z.object({\n type: z.string().min(1),\n config: z.record(z.string(), z.any()).optional(),\n})\n\nexport const actionsArraySchema = z.array(actionSchema).optional().nullable()\n .superRefine((val, ctx) => {\n // Null/undefined/empty is allowed (optional field)\n if (!val || (Array.isArray(val) && val.length === 0)) return\n\n const result = validateActionsForApi(val, 'actions')\n if (!result.valid) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: result.error || 'Invalid actions'\n })\n }\n })\n\n// Date preprocessing helper\nconst dateOrNull = z.preprocess((value) => {\n if (value === undefined || value === null || value === '') return null\n const date = value instanceof Date ? value : new Date(String(value))\n return Number.isNaN(date.getTime()) ? null : date\n}, z.date().nullable())\n\n// BusinessRule Create Schema\nexport const createBusinessRuleSchema = z.object({\n ruleId: z.string().min(1).max(50),\n ruleName: z.string().min(1).max(200),\n description: z.string().max(5000).optional().nullable(),\n ruleType: ruleTypeSchema,\n ruleCategory: z.string().max(50).optional().nullable(),\n entityType: z.string().min(1).max(50),\n eventType: z.string().max(50).optional().nullable(),\n conditionExpression: conditionExpressionSchema,\n successActions: actionsArraySchema,\n failureActions: actionsArraySchema,\n enabled: z.boolean().optional().default(true),\n priority: z.number().int().min(0).max(9999).optional().default(100),\n version: z.number().int().min(1).optional().default(1),\n effectiveFrom: dateOrNull.optional(),\n effectiveTo: dateOrNull.optional(),\n tenantId: uuid,\n organizationId: uuid,\n createdBy: z.string().max(50).optional().nullable(),\n})\n\nexport type CreateBusinessRuleInput = z.infer<typeof createBusinessRuleSchema>\n\n// BusinessRule Update Schema\nexport const updateBusinessRuleSchema = createBusinessRuleSchema.partial().extend({\n id: uuid,\n})\n\nexport type UpdateBusinessRuleInput = z.infer<typeof updateBusinessRuleSchema>\n\n// Query/Filter Schema\nexport const businessRuleFilterSchema = z.object({\n ruleId: z.string().optional(),\n ruleName: z.string().optional(),\n ruleType: ruleTypeSchema.optional(),\n ruleCategory: z.string().optional(),\n entityType: z.string().optional(),\n eventType: z.string().optional(),\n enabled: z.boolean().optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n})\n\nexport type BusinessRuleFilter = z.infer<typeof businessRuleFilterSchema>\n\n// RuleExecutionLog Create Schema\nexport const createRuleExecutionLogSchema = z.object({\n ruleId: uuid,\n entityId: uuid,\n entityType: z.string().min(1).max(50),\n executionResult: executionResultSchema,\n inputContext: z.any().optional().nullable(),\n outputContext: z.any().optional().nullable(),\n errorMessage: z.string().optional().nullable(),\n executionTimeMs: z.number().int().min(0),\n executedAt: z.date().optional(),\n tenantId: uuid,\n organizationId: uuid.optional().nullable(),\n executedBy: z.string().max(50).optional().nullable(),\n})\n\nexport type CreateRuleExecutionLogInput = z.infer<typeof createRuleExecutionLogSchema>\n\n// RuleExecutionLog Query/Filter Schema\nexport const ruleExecutionLogFilterSchema = z.object({\n ruleId: uuid.optional(),\n entityId: uuid.optional(),\n entityType: z.string().optional(),\n executionResult: executionResultSchema.optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n executedBy: z.string().optional(),\n executedAtFrom: z.date().optional(),\n executedAtTo: z.date().optional(),\n})\n\nexport type RuleExecutionLogFilter = z.infer<typeof ruleExecutionLogFilterSchema>\n\n// RuleSet Create Schema\nexport const createRuleSetSchema = z.object({\n setId: z.string().min(1).max(50),\n setName: z.string().min(1).max(200),\n description: z.string().max(5000).optional().nullable(),\n enabled: z.boolean().optional().default(true),\n tenantId: uuid,\n organizationId: uuid,\n createdBy: z.string().max(50).optional().nullable(),\n})\n\nexport type CreateRuleSetInput = z.infer<typeof createRuleSetSchema>\n\n// RuleSet Update Schema\nexport const updateRuleSetSchema = createRuleSetSchema.partial().extend({\n id: uuid,\n})\n\nexport type UpdateRuleSetInput = z.infer<typeof updateRuleSetSchema>\n\n// RuleSet Query/Filter Schema\nexport const ruleSetFilterSchema = z.object({\n setId: z.string().optional(),\n setName: z.string().optional(),\n enabled: z.boolean().optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n})\n\nexport type RuleSetFilter = z.infer<typeof ruleSetFilterSchema>\n\n// RuleSetMember Create Schema\nexport const createRuleSetMemberSchema = z.object({\n ruleSetId: uuid,\n ruleId: uuid,\n sequence: z.number().int().min(0).optional().default(0),\n enabled: z.boolean().optional().default(true),\n tenantId: uuid,\n organizationId: uuid,\n})\n\nexport type CreateRuleSetMemberInput = z.infer<typeof createRuleSetMemberSchema>\n\n// RuleSetMember Update Schema\nexport const updateRuleSetMemberSchema = z.object({\n id: uuid,\n sequence: z.number().int().min(0).optional(),\n enabled: z.boolean().optional(),\n})\n\nexport type UpdateRuleSetMemberInput = z.infer<typeof updateRuleSetMemberSchema>\n\n// RuleSetMember Query/Filter Schema\nexport const ruleSetMemberFilterSchema = z.object({\n ruleSetId: uuid.optional(),\n ruleId: uuid.optional(),\n enabled: z.boolean().optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n})\n\nexport type RuleSetMemberFilter = z.infer<typeof ruleSetMemberFilterSchema>\n\n// Rule Engine Context Schema\nexport const ruleEngineContextSchema = z.looseObject({\n entityType: z.string().min(1, 'entityType is required'),\n entityId: z.string().optional(),\n eventType: z.string().optional(),\n data: z.any(),\n user: z.looseObject({\n id: z.string().optional(),\n email: z.string().optional(),\n role: z.string().optional(),\n }).optional(),\n tenant: z.looseObject({\n id: z.string().optional(),\n }).optional(),\n organization: z.looseObject({\n id: z.string().optional(),\n }).optional(),\n tenantId: z.uuid('tenantId must be a valid UUID'),\n organizationId: z.uuid('organizationId must be a valid UUID'),\n executedBy: z.string().optional(),\n dryRun: z.boolean().optional(),\n})\n\nexport type RuleEngineContextInput = z.infer<typeof ruleEngineContextSchema>\n\n// Rule Discovery Options Schema\nexport const ruleDiscoveryOptionsSchema = z.object({\n entityType: z.string().min(1, 'entityType is required'),\n eventType: z.string().optional(),\n tenantId: z.uuid('tenantId must be a valid UUID'),\n organizationId: z.uuid('organizationId must be a valid UUID'),\n ruleType: ruleTypeSchema.optional(),\n})\n\nexport type RuleDiscoveryOptionsInput = z.infer<typeof ruleDiscoveryOptionsSchema>\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -6,27 +6,7 @@ const metadata = {
6
6
  author: "Patryk Lewczuk",
7
7
  license: "Proprietary"
8
8
  };
9
- import {
10
- executeRules,
11
- executeRuleById,
12
- executeRuleByRuleId,
13
- executeSingleRule,
14
- findApplicableRules,
15
- logRuleExecution
16
- } from "./lib/rule-engine.js";
17
- import {
18
- directRuleExecutionContextSchema,
19
- ruleIdExecutionContextSchema
20
- } from "./data/validators.js";
21
9
  export {
22
- directRuleExecutionContextSchema,
23
- executeRuleById,
24
- executeRuleByRuleId,
25
- executeRules,
26
- executeSingleRule,
27
- findApplicableRules,
28
- logRuleExecution,
29
- metadata,
30
- ruleIdExecutionContextSchema
10
+ metadata
31
11
  };
32
12
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/modules/business_rules/index.ts"],
4
- "sourcesContent": ["import type { ModuleInfo } from '@open-mercato/shared/modules/registry'\n\nexport const metadata: ModuleInfo = {\n name: 'business_rules',\n title: 'Business Rules',\n version: '0.1.0',\n description: 'Business Rules Engine for defining, managing, and executing business logic and automation rules.',\n author: 'Patryk Lewczuk',\n license: 'Proprietary',\n}\n\n// Export rule engine types and functions for programmatic usage\nexport {\n executeRules,\n executeRuleById,\n executeRuleByRuleId,\n executeSingleRule,\n findApplicableRules,\n logRuleExecution,\n type RuleEngineContext,\n type RuleEngineResult,\n type RuleExecutionResult,\n type RuleDiscoveryOptions,\n type DirectRuleExecutionContext,\n type DirectRuleExecutionResult,\n type RuleIdExecutionContext,\n} from './lib/rule-engine'\n\n// Export validator schemas\nexport {\n directRuleExecutionContextSchema,\n ruleIdExecutionContextSchema,\n type DirectRuleExecutionContextInput,\n type RuleIdExecutionContextInput,\n} from './data/validators'\n"],
5
- "mappings": "AAEO,MAAM,WAAuB;AAAA,EAClC,MAAM;AAAA,EACN,OAAO;AAAA,EACP,SAAS;AAAA,EACT,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,SAAS;AACX;AAGA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAQK;AAGP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;",
4
+ "sourcesContent": ["import type { ModuleInfo } from '@open-mercato/shared/modules/registry'\n\nexport const metadata: ModuleInfo = {\n name: 'business_rules',\n title: 'Business Rules',\n version: '0.1.0',\n description: 'Business Rules Engine for defining, managing, and executing business logic and automation rules.',\n author: 'Patryk Lewczuk',\n license: 'Proprietary',\n}\n"],
5
+ "mappings": "AAEO,MAAM,WAAuB;AAAA,EAClC,MAAM;AAAA,EACN,OAAO;AAAA,EACP,SAAS;AAAA,EACT,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,SAAS;AACX;",
6
6
  "names": []
7
7
  }