@open-mercato/core 0.4.2-canary-15c0b23a3a → 0.4.2-canary-da2b080494

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 (433) hide show
  1. package/dist/generated/entities.ids.generated.js +1 -5
  2. package/dist/generated/entities.ids.generated.js.map +2 -2
  3. package/dist/generated/entity-fields-registry.js +0 -2
  4. package/dist/generated/entity-fields-registry.js.map +2 -2
  5. package/dist/modules/api_docs/frontend/docs/api/page.js +2 -3
  6. package/dist/modules/api_docs/frontend/docs/api/page.js.map +2 -2
  7. package/dist/modules/api_keys/backend/api-keys/page.js +1 -1
  8. package/dist/modules/api_keys/backend/api-keys/page.js.map +2 -2
  9. package/dist/modules/attachments/components/AttachmentLibrary.js +0 -4
  10. package/dist/modules/attachments/components/AttachmentLibrary.js.map +2 -2
  11. package/dist/modules/attachments/components/AttachmentPartitionSettings.js +0 -2
  12. package/dist/modules/attachments/components/AttachmentPartitionSettings.js.map +2 -2
  13. package/dist/modules/auth/api/admin/nav.js +3 -4
  14. package/dist/modules/auth/api/admin/nav.js.map +2 -2
  15. package/dist/modules/auth/api/reset/confirm.js +2 -25
  16. package/dist/modules/auth/api/reset/confirm.js.map +2 -2
  17. package/dist/modules/auth/api/reset.js +0 -23
  18. package/dist/modules/auth/api/reset.js.map +2 -2
  19. package/dist/modules/auth/api/sidebar/preferences/route.js +9 -14
  20. package/dist/modules/auth/api/sidebar/preferences/route.js.map +2 -2
  21. package/dist/modules/auth/api/users/route.js +2 -4
  22. package/dist/modules/auth/api/users/route.js.map +2 -2
  23. package/dist/modules/auth/backend/roles/[id]/edit/page.js +1 -4
  24. package/dist/modules/auth/backend/roles/[id]/edit/page.js.map +2 -2
  25. package/dist/modules/auth/backend/roles/page.js +3 -3
  26. package/dist/modules/auth/backend/roles/page.js.map +2 -2
  27. package/dist/modules/auth/backend/users/[id]/edit/page.js +3 -18
  28. package/dist/modules/auth/backend/users/[id]/edit/page.js.map +2 -2
  29. package/dist/modules/auth/backend/users/create/page.js +2 -15
  30. package/dist/modules/auth/backend/users/create/page.js.map +2 -2
  31. package/dist/modules/auth/backend/users/page.js +3 -3
  32. package/dist/modules/auth/backend/users/page.js.map +2 -2
  33. package/dist/modules/auth/cli.js +11 -25
  34. package/dist/modules/auth/cli.js.map +2 -2
  35. package/dist/modules/auth/commands/users.js +2 -59
  36. package/dist/modules/auth/commands/users.js.map +2 -2
  37. package/dist/modules/auth/data/validators.js +2 -4
  38. package/dist/modules/auth/data/validators.js.map +2 -2
  39. package/dist/modules/auth/frontend/reset/[token]/page.js +10 -20
  40. package/dist/modules/auth/frontend/reset/[token]/page.js.map +2 -2
  41. package/dist/modules/auth/lib/setup-app.js +0 -1
  42. package/dist/modules/auth/lib/setup-app.js.map +2 -2
  43. package/dist/modules/auth/services/authService.js +3 -3
  44. package/dist/modules/auth/services/authService.js.map +2 -2
  45. package/dist/modules/business_rules/api/execute/route.js +1 -7
  46. package/dist/modules/business_rules/api/execute/route.js.map +2 -2
  47. package/dist/modules/business_rules/backend/rules/page.js +0 -4
  48. package/dist/modules/business_rules/backend/rules/page.js.map +2 -2
  49. package/dist/modules/business_rules/backend/sets/page.js +0 -3
  50. package/dist/modules/business_rules/backend/sets/page.js.map +2 -2
  51. package/dist/modules/business_rules/lib/rule-engine.js +3 -33
  52. package/dist/modules/business_rules/lib/rule-engine.js.map +2 -2
  53. package/dist/modules/catalog/components/PriceKindSettings.js +0 -2
  54. package/dist/modules/catalog/components/PriceKindSettings.js.map +2 -2
  55. package/dist/modules/catalog/components/categories/CategoriesDataTable.js +2 -2
  56. package/dist/modules/catalog/components/categories/CategoriesDataTable.js.map +2 -2
  57. package/dist/modules/catalog/components/products/ProductsDataTable.js +0 -2
  58. package/dist/modules/catalog/components/products/ProductsDataTable.js.map +2 -2
  59. package/dist/modules/configs/cli.js +0 -6
  60. package/dist/modules/configs/cli.js.map +2 -2
  61. package/dist/modules/configs/components/CachePanel.js +4 -4
  62. package/dist/modules/configs/components/CachePanel.js.map +2 -2
  63. package/dist/modules/configs/lib/system-status.js +1 -48
  64. package/dist/modules/configs/lib/system-status.js.map +2 -2
  65. package/dist/modules/configs/lib/upgrade-actions.js +0 -18
  66. package/dist/modules/configs/lib/upgrade-actions.js.map +2 -2
  67. package/dist/modules/currencies/backend/currencies/page.js +0 -3
  68. package/dist/modules/currencies/backend/currencies/page.js.map +2 -2
  69. package/dist/modules/currencies/backend/exchange-rates/page.js +0 -2
  70. package/dist/modules/currencies/backend/exchange-rates/page.js.map +2 -2
  71. package/dist/modules/customers/backend/customers/companies/page.js +0 -3
  72. package/dist/modules/customers/backend/customers/companies/page.js.map +2 -2
  73. package/dist/modules/customers/backend/customers/deals/page.js +0 -3
  74. package/dist/modules/customers/backend/customers/deals/page.js.map +2 -2
  75. package/dist/modules/customers/backend/customers/people/page.js +0 -3
  76. package/dist/modules/customers/backend/customers/people/page.js.map +2 -2
  77. package/dist/modules/customers/commands/deals.js +0 -31
  78. package/dist/modules/customers/commands/deals.js.map +2 -2
  79. package/dist/modules/customers/components/CustomerTodosTable.js +0 -1
  80. package/dist/modules/customers/components/CustomerTodosTable.js.map +2 -2
  81. package/dist/modules/dashboards/cli.js +5 -44
  82. package/dist/modules/dashboards/cli.js.map +2 -2
  83. package/dist/modules/dashboards/components/WidgetVisibilityEditor.js +11 -16
  84. package/dist/modules/dashboards/components/WidgetVisibilityEditor.js.map +3 -3
  85. package/dist/modules/dashboards/services/widgetDataService.js +3 -132
  86. package/dist/modules/dashboards/services/widgetDataService.js.map +2 -2
  87. package/dist/modules/dictionaries/components/DictionaryTable.js +0 -2
  88. package/dist/modules/dictionaries/components/DictionaryTable.js.map +2 -2
  89. package/dist/modules/directory/backend/directory/organizations/page.js +2 -2
  90. package/dist/modules/directory/backend/directory/organizations/page.js.map +2 -2
  91. package/dist/modules/directory/backend/directory/tenants/page.js +2 -2
  92. package/dist/modules/directory/backend/directory/tenants/page.js.map +2 -2
  93. package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js +2 -2
  94. package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js.map +2 -2
  95. package/dist/modules/entities/components/SystemEntitiesTable.js +1 -1
  96. package/dist/modules/entities/components/SystemEntitiesTable.js.map +2 -2
  97. package/dist/modules/entities/components/UserEntitiesTable.js +2 -2
  98. package/dist/modules/entities/components/UserEntitiesTable.js.map +2 -2
  99. package/dist/modules/feature_toggles/components/FeatureTogglesTable.js +3 -3
  100. package/dist/modules/feature_toggles/components/FeatureTogglesTable.js.map +2 -2
  101. package/dist/modules/feature_toggles/components/OverridesTable.js +1 -1
  102. package/dist/modules/feature_toggles/components/OverridesTable.js.map +2 -2
  103. package/dist/modules/planner/backend/planner/availability-rulesets/page.js +2 -2
  104. package/dist/modules/planner/backend/planner/availability-rulesets/page.js.map +2 -2
  105. package/dist/modules/query_index/components/QueryIndexesTable.js +1 -7
  106. package/dist/modules/query_index/components/QueryIndexesTable.js.map +2 -2
  107. package/dist/modules/resources/backend/resources/resource-types/page.js +2 -2
  108. package/dist/modules/resources/backend/resources/resource-types/page.js.map +2 -2
  109. package/dist/modules/resources/backend/resources/resources/page.js +2 -2
  110. package/dist/modules/resources/backend/resources/resources/page.js.map +2 -2
  111. package/dist/modules/sales/backend/sales/channels/offers/page.js +0 -2
  112. package/dist/modules/sales/backend/sales/channels/offers/page.js.map +2 -2
  113. package/dist/modules/sales/backend/sales/channels/page.js +0 -2
  114. package/dist/modules/sales/backend/sales/channels/page.js.map +2 -2
  115. package/dist/modules/sales/commands/documents.js +0 -53
  116. package/dist/modules/sales/commands/documents.js.map +2 -2
  117. package/dist/modules/sales/commands/payments.js +0 -26
  118. package/dist/modules/sales/commands/payments.js.map +2 -2
  119. package/dist/modules/sales/components/AdjustmentKindSettings.js +2 -2
  120. package/dist/modules/sales/components/AdjustmentKindSettings.js.map +2 -2
  121. package/dist/modules/sales/components/PaymentMethodsSettings.js +2 -2
  122. package/dist/modules/sales/components/PaymentMethodsSettings.js.map +2 -2
  123. package/dist/modules/sales/components/ShippingMethodsSettings.js +2 -2
  124. package/dist/modules/sales/components/ShippingMethodsSettings.js.map +2 -2
  125. package/dist/modules/sales/components/TaxRatesSettings.js +2 -2
  126. package/dist/modules/sales/components/TaxRatesSettings.js.map +2 -2
  127. package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js +0 -2
  128. package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js.map +2 -2
  129. package/dist/modules/sales/components/documents/AdjustmentsSection.js +0 -2
  130. package/dist/modules/sales/components/documents/AdjustmentsSection.js.map +2 -2
  131. package/dist/modules/sales/components/documents/PaymentsSection.js +1 -2
  132. package/dist/modules/sales/components/documents/PaymentsSection.js.map +2 -2
  133. package/dist/modules/sales/components/documents/SalesDocumentsTable.js +0 -2
  134. package/dist/modules/sales/components/documents/SalesDocumentsTable.js.map +2 -2
  135. package/dist/modules/staff/backend/staff/team-members/page.js +1 -1
  136. package/dist/modules/staff/backend/staff/team-members/page.js.map +2 -2
  137. package/dist/modules/staff/backend/staff/team-roles/page.js +2 -2
  138. package/dist/modules/staff/backend/staff/team-roles/page.js.map +2 -2
  139. package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js +2 -2
  140. package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js.map +2 -2
  141. package/dist/modules/staff/backend/staff/teams/page.js +2 -2
  142. package/dist/modules/staff/backend/staff/teams/page.js.map +2 -2
  143. package/dist/modules/staff/commands/leave-requests.js +0 -79
  144. package/dist/modules/staff/commands/leave-requests.js.map +2 -2
  145. package/dist/modules/workflows/backend/definitions/page.js +0 -5
  146. package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
  147. package/dist/modules/workflows/backend/instances/page.js +0 -3
  148. package/dist/modules/workflows/backend/instances/page.js.map +2 -2
  149. package/dist/modules/workflows/backend/tasks/page.js +0 -3
  150. package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
  151. package/dist/modules/workflows/lib/transition-handler.js +6 -14
  152. package/dist/modules/workflows/lib/transition-handler.js.map +2 -2
  153. package/generated/entities.ids.generated.ts +1 -5
  154. package/generated/entity-fields-registry.ts +0 -2
  155. package/package.json +2 -2
  156. package/src/modules/api_docs/frontend/docs/api/page.tsx +2 -3
  157. package/src/modules/api_keys/backend/api-keys/page.tsx +1 -1
  158. package/src/modules/attachments/components/AttachmentLibrary.tsx +0 -4
  159. package/src/modules/attachments/components/AttachmentPartitionSettings.tsx +0 -2
  160. package/src/modules/auth/README.md +1 -1
  161. package/src/modules/auth/__tests__/cli-setup-acl.test.ts +1 -1
  162. package/src/modules/auth/api/admin/nav.ts +6 -10
  163. package/src/modules/auth/api/reset/confirm.ts +2 -25
  164. package/src/modules/auth/api/reset.ts +0 -23
  165. package/src/modules/auth/api/sidebar/preferences/route.ts +12 -21
  166. package/src/modules/auth/api/users/route.ts +2 -5
  167. package/src/modules/auth/backend/roles/[id]/edit/page.tsx +1 -4
  168. package/src/modules/auth/backend/roles/page.tsx +3 -3
  169. package/src/modules/auth/backend/users/[id]/edit/page.tsx +3 -22
  170. package/src/modules/auth/backend/users/create/page.tsx +2 -19
  171. package/src/modules/auth/backend/users/page.tsx +3 -3
  172. package/src/modules/auth/cli.ts +11 -38
  173. package/src/modules/auth/commands/users.ts +2 -73
  174. package/src/modules/auth/data/validators.ts +2 -5
  175. package/src/modules/auth/frontend/reset/[token]/page.tsx +11 -24
  176. package/src/modules/auth/i18n/de.json +1 -43
  177. package/src/modules/auth/i18n/en.json +1 -43
  178. package/src/modules/auth/i18n/es.json +1 -43
  179. package/src/modules/auth/i18n/pl.json +1 -43
  180. package/src/modules/auth/lib/setup-app.ts +0 -1
  181. package/src/modules/auth/services/authService.ts +4 -4
  182. package/src/modules/business_rules/api/execute/route.ts +1 -8
  183. package/src/modules/business_rules/backend/rules/page.tsx +0 -4
  184. package/src/modules/business_rules/backend/sets/page.tsx +0 -3
  185. package/src/modules/business_rules/i18n/en.json +1 -3
  186. package/src/modules/business_rules/lib/__tests__/rule-engine.test.ts +0 -51
  187. package/src/modules/business_rules/lib/rule-engine.ts +3 -57
  188. package/src/modules/catalog/components/PriceKindSettings.tsx +0 -2
  189. package/src/modules/catalog/components/categories/CategoriesDataTable.tsx +2 -2
  190. package/src/modules/catalog/components/products/ProductsDataTable.tsx +0 -2
  191. package/src/modules/catalog/i18n/en.json +1 -3
  192. package/src/modules/configs/cli.ts +0 -6
  193. package/src/modules/configs/components/CachePanel.tsx +4 -4
  194. package/src/modules/configs/i18n/en.json +2 -12
  195. package/src/modules/configs/i18n/pl.json +2 -12
  196. package/src/modules/configs/lib/system-status.ts +1 -48
  197. package/src/modules/configs/lib/system-status.types.ts +0 -1
  198. package/src/modules/configs/lib/upgrade-actions.ts +0 -18
  199. package/src/modules/currencies/backend/currencies/page.tsx +0 -3
  200. package/src/modules/currencies/backend/exchange-rates/page.tsx +0 -2
  201. package/src/modules/customers/backend/customers/companies/page.tsx +0 -3
  202. package/src/modules/customers/backend/customers/deals/page.tsx +0 -3
  203. package/src/modules/customers/backend/customers/people/page.tsx +0 -3
  204. package/src/modules/customers/commands/deals.ts +0 -39
  205. package/src/modules/customers/components/CustomerTodosTable.tsx +0 -1
  206. package/src/modules/customers/i18n/en.json +1 -5
  207. package/src/modules/dashboards/cli.ts +5 -55
  208. package/src/modules/dashboards/components/WidgetVisibilityEditor.tsx +11 -22
  209. package/src/modules/dashboards/services/widgetDataService.ts +4 -157
  210. package/src/modules/dictionaries/components/DictionaryTable.tsx +0 -2
  211. package/src/modules/directory/backend/directory/organizations/page.tsx +2 -2
  212. package/src/modules/directory/backend/directory/tenants/page.tsx +2 -2
  213. package/src/modules/entities/backend/entities/user/[entityId]/records/page.tsx +2 -2
  214. package/src/modules/entities/components/SystemEntitiesTable.tsx +1 -1
  215. package/src/modules/entities/components/UserEntitiesTable.tsx +2 -2
  216. package/src/modules/feature_toggles/components/FeatureTogglesTable.tsx +4 -3
  217. package/src/modules/feature_toggles/components/OverridesTable.tsx +1 -1
  218. package/src/modules/planner/backend/planner/availability-rulesets/page.tsx +2 -2
  219. package/src/modules/query_index/components/QueryIndexesTable.tsx +2 -8
  220. package/src/modules/resources/backend/resources/resource-types/page.tsx +2 -2
  221. package/src/modules/resources/backend/resources/resources/page.tsx +2 -2
  222. package/src/modules/sales/backend/sales/channels/offers/page.tsx +0 -2
  223. package/src/modules/sales/backend/sales/channels/page.tsx +0 -2
  224. package/src/modules/sales/commands/documents.ts +0 -65
  225. package/src/modules/sales/commands/payments.ts +0 -33
  226. package/src/modules/sales/components/AdjustmentKindSettings.tsx +2 -2
  227. package/src/modules/sales/components/PaymentMethodsSettings.tsx +2 -2
  228. package/src/modules/sales/components/ShippingMethodsSettings.tsx +2 -2
  229. package/src/modules/sales/components/TaxRatesSettings.tsx +2 -2
  230. package/src/modules/sales/components/channels/SalesChannelOffersPanel.tsx +0 -2
  231. package/src/modules/sales/components/documents/AdjustmentsSection.tsx +0 -2
  232. package/src/modules/sales/components/documents/PaymentsSection.tsx +1 -2
  233. package/src/modules/sales/components/documents/SalesDocumentsTable.tsx +0 -2
  234. package/src/modules/sales/i18n/de.json +0 -20
  235. package/src/modules/sales/i18n/en.json +1 -25
  236. package/src/modules/sales/i18n/es.json +0 -20
  237. package/src/modules/sales/i18n/pl.json +0 -20
  238. package/src/modules/staff/backend/staff/team-members/page.tsx +1 -1
  239. package/src/modules/staff/backend/staff/team-roles/page.tsx +2 -2
  240. package/src/modules/staff/backend/staff/teams/[id]/edit/page.tsx +2 -2
  241. package/src/modules/staff/backend/staff/teams/page.tsx +2 -2
  242. package/src/modules/staff/commands/leave-requests.ts +0 -94
  243. package/src/modules/staff/i18n/de.json +0 -4
  244. package/src/modules/staff/i18n/en.json +1 -9
  245. package/src/modules/staff/i18n/es.json +0 -4
  246. package/src/modules/staff/i18n/pl.json +0 -4
  247. package/src/modules/workflows/backend/definitions/page.tsx +0 -5
  248. package/src/modules/workflows/backend/instances/page.tsx +1 -4
  249. package/src/modules/workflows/backend/tasks/page.tsx +1 -4
  250. package/src/modules/workflows/i18n/en.json +1 -3
  251. package/src/modules/workflows/lib/transition-handler.ts +6 -18
  252. package/dist/generated/entities/notification/index.js +0 -57
  253. package/dist/generated/entities/notification/index.js.map +0 -7
  254. package/dist/modules/auth/api/profile/route.js +0 -157
  255. package/dist/modules/auth/api/profile/route.js.map +0 -7
  256. package/dist/modules/auth/backend/auth/profile/page.js +0 -141
  257. package/dist/modules/auth/backend/auth/profile/page.js.map +0 -7
  258. package/dist/modules/auth/backend/auth/profile/page.meta.js +0 -13
  259. package/dist/modules/auth/backend/auth/profile/page.meta.js.map +0 -7
  260. package/dist/modules/auth/notifications.js +0 -112
  261. package/dist/modules/auth/notifications.js.map +0 -7
  262. package/dist/modules/business_rules/notifications.js +0 -28
  263. package/dist/modules/business_rules/notifications.js.map +0 -7
  264. package/dist/modules/business_rules/subscribers/rule-execution-failed-notification.js +0 -37
  265. package/dist/modules/business_rules/subscribers/rule-execution-failed-notification.js.map +0 -7
  266. package/dist/modules/catalog/notifications.js +0 -28
  267. package/dist/modules/catalog/notifications.js.map +0 -7
  268. package/dist/modules/catalog/subscribers/low-stock-notification.js +0 -38
  269. package/dist/modules/catalog/subscribers/low-stock-notification.js.map +0 -7
  270. package/dist/modules/customers/notifications.js +0 -48
  271. package/dist/modules/customers/notifications.js.map +0 -7
  272. package/dist/modules/dashboards/lib/role-widgets.js +0 -58
  273. package/dist/modules/dashboards/lib/role-widgets.js.map +0 -7
  274. package/dist/modules/notifications/acl.js +0 -11
  275. package/dist/modules/notifications/acl.js.map +0 -7
  276. package/dist/modules/notifications/api/[id]/action/route.js +0 -74
  277. package/dist/modules/notifications/api/[id]/action/route.js.map +0 -7
  278. package/dist/modules/notifications/api/[id]/dismiss/route.js +0 -15
  279. package/dist/modules/notifications/api/[id]/dismiss/route.js.map +0 -7
  280. package/dist/modules/notifications/api/[id]/read/route.js +0 -15
  281. package/dist/modules/notifications/api/[id]/read/route.js.map +0 -7
  282. package/dist/modules/notifications/api/[id]/restore/route.js +0 -53
  283. package/dist/modules/notifications/api/[id]/restore/route.js.map +0 -7
  284. package/dist/modules/notifications/api/batch/route.js +0 -17
  285. package/dist/modules/notifications/api/batch/route.js.map +0 -7
  286. package/dist/modules/notifications/api/feature/route.js +0 -17
  287. package/dist/modules/notifications/api/feature/route.js.map +0 -7
  288. package/dist/modules/notifications/api/mark-all-read/route.js +0 -35
  289. package/dist/modules/notifications/api/mark-all-read/route.js.map +0 -7
  290. package/dist/modules/notifications/api/openapi.js +0 -76
  291. package/dist/modules/notifications/api/openapi.js.map +0 -7
  292. package/dist/modules/notifications/api/role/route.js +0 -17
  293. package/dist/modules/notifications/api/role/route.js.map +0 -7
  294. package/dist/modules/notifications/api/route.js +0 -85
  295. package/dist/modules/notifications/api/route.js.map +0 -7
  296. package/dist/modules/notifications/api/settings/route.js +0 -155
  297. package/dist/modules/notifications/api/settings/route.js.map +0 -7
  298. package/dist/modules/notifications/api/unread-count/route.js +0 -38
  299. package/dist/modules/notifications/api/unread-count/route.js.map +0 -7
  300. package/dist/modules/notifications/backend/config/notifications/page.js +0 -10
  301. package/dist/modules/notifications/backend/config/notifications/page.js.map +0 -7
  302. package/dist/modules/notifications/backend/config/notifications/page.meta.js +0 -24
  303. package/dist/modules/notifications/backend/config/notifications/page.meta.js.map +0 -7
  304. package/dist/modules/notifications/cli.js +0 -16
  305. package/dist/modules/notifications/cli.js.map +0 -7
  306. package/dist/modules/notifications/data/entities.js +0 -112
  307. package/dist/modules/notifications/data/entities.js.map +0 -7
  308. package/dist/modules/notifications/data/validators.js +0 -98
  309. package/dist/modules/notifications/data/validators.js.map +0 -7
  310. package/dist/modules/notifications/di.js +0 -13
  311. package/dist/modules/notifications/di.js.map +0 -7
  312. package/dist/modules/notifications/emails/NotificationEmail.js +0 -58
  313. package/dist/modules/notifications/emails/NotificationEmail.js.map +0 -7
  314. package/dist/modules/notifications/frontend/NotificationInboxPageClient.js +0 -44
  315. package/dist/modules/notifications/frontend/NotificationInboxPageClient.js.map +0 -7
  316. package/dist/modules/notifications/frontend/NotificationSettingsPageClient.js +0 -220
  317. package/dist/modules/notifications/frontend/NotificationSettingsPageClient.js.map +0 -7
  318. package/dist/modules/notifications/index.js +0 -14
  319. package/dist/modules/notifications/index.js.map +0 -7
  320. package/dist/modules/notifications/lib/deliveryConfig.js +0 -107
  321. package/dist/modules/notifications/lib/deliveryConfig.js.map +0 -7
  322. package/dist/modules/notifications/lib/deliveryStrategies.js +0 -14
  323. package/dist/modules/notifications/lib/deliveryStrategies.js.map +0 -7
  324. package/dist/modules/notifications/lib/events.js +0 -12
  325. package/dist/modules/notifications/lib/events.js.map +0 -7
  326. package/dist/modules/notifications/lib/notificationBuilder.js +0 -66
  327. package/dist/modules/notifications/lib/notificationBuilder.js.map +0 -7
  328. package/dist/modules/notifications/lib/notificationFactory.js +0 -54
  329. package/dist/modules/notifications/lib/notificationFactory.js.map +0 -7
  330. package/dist/modules/notifications/lib/notificationMapper.js +0 -34
  331. package/dist/modules/notifications/lib/notificationMapper.js.map +0 -7
  332. package/dist/modules/notifications/lib/notificationRecipients.js +0 -35
  333. package/dist/modules/notifications/lib/notificationRecipients.js.map +0 -7
  334. package/dist/modules/notifications/lib/notificationService.js +0 -279
  335. package/dist/modules/notifications/lib/notificationService.js.map +0 -7
  336. package/dist/modules/notifications/lib/routeHelpers.js +0 -101
  337. package/dist/modules/notifications/lib/routeHelpers.js.map +0 -7
  338. package/dist/modules/notifications/lib/safeHref.js +0 -24
  339. package/dist/modules/notifications/lib/safeHref.js.map +0 -7
  340. package/dist/modules/notifications/migrations/Migration20260123000001.js +0 -70
  341. package/dist/modules/notifications/migrations/Migration20260123000001.js.map +0 -7
  342. package/dist/modules/notifications/migrations/Migration20260126150000.js +0 -37
  343. package/dist/modules/notifications/migrations/Migration20260126150000.js.map +0 -7
  344. package/dist/modules/notifications/subscribers/deliver-notification.js +0 -165
  345. package/dist/modules/notifications/subscribers/deliver-notification.js.map +0 -7
  346. package/dist/modules/notifications/workers/create-notification.worker.js +0 -70
  347. package/dist/modules/notifications/workers/create-notification.worker.js.map +0 -7
  348. package/dist/modules/sales/notifications.client.js +0 -51
  349. package/dist/modules/sales/notifications.client.js.map +0 -7
  350. package/dist/modules/sales/notifications.js +0 -88
  351. package/dist/modules/sales/notifications.js.map +0 -7
  352. package/dist/modules/sales/subscribers/quote-expiring-notification.js +0 -38
  353. package/dist/modules/sales/subscribers/quote-expiring-notification.js.map +0 -7
  354. package/dist/modules/sales/widgets/notifications/SalesOrderCreatedRenderer.js +0 -137
  355. package/dist/modules/sales/widgets/notifications/SalesOrderCreatedRenderer.js.map +0 -7
  356. package/dist/modules/sales/widgets/notifications/SalesQuoteCreatedRenderer.js +0 -137
  357. package/dist/modules/sales/widgets/notifications/SalesQuoteCreatedRenderer.js.map +0 -7
  358. package/dist/modules/sales/widgets/notifications/index.js +0 -7
  359. package/dist/modules/sales/widgets/notifications/index.js.map +0 -7
  360. package/dist/modules/sales/widgets/notifications/useSalesDocumentTotals.js +0 -60
  361. package/dist/modules/sales/widgets/notifications/useSalesDocumentTotals.js.map +0 -7
  362. package/dist/modules/staff/notifications.js +0 -75
  363. package/dist/modules/staff/notifications.js.map +0 -7
  364. package/dist/modules/workflows/notifications.js +0 -28
  365. package/dist/modules/workflows/notifications.js.map +0 -7
  366. package/dist/modules/workflows/subscribers/task-assigned-notification.js +0 -38
  367. package/dist/modules/workflows/subscribers/task-assigned-notification.js.map +0 -7
  368. package/generated/entities/notification/index.ts +0 -27
  369. package/src/modules/auth/api/profile/route.ts +0 -163
  370. package/src/modules/auth/backend/auth/profile/page.meta.ts +0 -9
  371. package/src/modules/auth/backend/auth/profile/page.tsx +0 -174
  372. package/src/modules/auth/notifications.ts +0 -109
  373. package/src/modules/business_rules/notifications.ts +0 -25
  374. package/src/modules/business_rules/subscribers/rule-execution-failed-notification.ts +0 -50
  375. package/src/modules/catalog/notifications.ts +0 -25
  376. package/src/modules/catalog/subscribers/low-stock-notification.ts +0 -52
  377. package/src/modules/customers/notifications.ts +0 -44
  378. package/src/modules/dashboards/lib/role-widgets.ts +0 -80
  379. package/src/modules/notifications/__tests__/deliver-notification.test.ts +0 -195
  380. package/src/modules/notifications/__tests__/deliveryStrategies.test.ts +0 -19
  381. package/src/modules/notifications/__tests__/notificationService.test.ts +0 -208
  382. package/src/modules/notifications/acl.ts +0 -7
  383. package/src/modules/notifications/api/[id]/action/route.ts +0 -75
  384. package/src/modules/notifications/api/[id]/dismiss/route.ts +0 -12
  385. package/src/modules/notifications/api/[id]/read/route.ts +0 -12
  386. package/src/modules/notifications/api/[id]/restore/route.ts +0 -53
  387. package/src/modules/notifications/api/batch/route.ts +0 -14
  388. package/src/modules/notifications/api/feature/route.ts +0 -14
  389. package/src/modules/notifications/api/mark-all-read/route.ts +0 -34
  390. package/src/modules/notifications/api/openapi.ts +0 -76
  391. package/src/modules/notifications/api/role/route.ts +0 -14
  392. package/src/modules/notifications/api/route.ts +0 -92
  393. package/src/modules/notifications/api/settings/route.ts +0 -157
  394. package/src/modules/notifications/api/unread-count/route.ts +0 -38
  395. package/src/modules/notifications/backend/config/notifications/page.meta.ts +0 -22
  396. package/src/modules/notifications/backend/config/notifications/page.tsx +0 -12
  397. package/src/modules/notifications/cli.ts +0 -18
  398. package/src/modules/notifications/data/entities.ts +0 -99
  399. package/src/modules/notifications/data/validators.ts +0 -115
  400. package/src/modules/notifications/di.ts +0 -11
  401. package/src/modules/notifications/emails/NotificationEmail.tsx +0 -98
  402. package/src/modules/notifications/frontend/NotificationInboxPageClient.tsx +0 -42
  403. package/src/modules/notifications/frontend/NotificationSettingsPageClient.tsx +0 -233
  404. package/src/modules/notifications/i18n/de.json +0 -50
  405. package/src/modules/notifications/i18n/en.json +0 -50
  406. package/src/modules/notifications/i18n/es.json +0 -50
  407. package/src/modules/notifications/i18n/pl.json +0 -50
  408. package/src/modules/notifications/index.ts +0 -12
  409. package/src/modules/notifications/lib/deliveryConfig.ts +0 -153
  410. package/src/modules/notifications/lib/deliveryStrategies.ts +0 -50
  411. package/src/modules/notifications/lib/events.ts +0 -48
  412. package/src/modules/notifications/lib/notificationBuilder.ts +0 -121
  413. package/src/modules/notifications/lib/notificationFactory.ts +0 -76
  414. package/src/modules/notifications/lib/notificationMapper.ts +0 -33
  415. package/src/modules/notifications/lib/notificationRecipients.ts +0 -83
  416. package/src/modules/notifications/lib/notificationService.ts +0 -414
  417. package/src/modules/notifications/lib/routeHelpers.ts +0 -151
  418. package/src/modules/notifications/lib/safeHref.ts +0 -29
  419. package/src/modules/notifications/migrations/.snapshot-open-mercato.json +0 -300
  420. package/src/modules/notifications/migrations/Migration20260123000001.ts +0 -73
  421. package/src/modules/notifications/migrations/Migration20260126150000.ts +0 -39
  422. package/src/modules/notifications/subscribers/deliver-notification.ts +0 -204
  423. package/src/modules/notifications/workers/create-notification.worker.ts +0 -122
  424. package/src/modules/sales/notifications.client.ts +0 -65
  425. package/src/modules/sales/notifications.ts +0 -82
  426. package/src/modules/sales/subscribers/quote-expiring-notification.ts +0 -53
  427. package/src/modules/sales/widgets/notifications/SalesOrderCreatedRenderer.tsx +0 -156
  428. package/src/modules/sales/widgets/notifications/SalesQuoteCreatedRenderer.tsx +0 -156
  429. package/src/modules/sales/widgets/notifications/index.ts +0 -2
  430. package/src/modules/sales/widgets/notifications/useSalesDocumentTotals.ts +0 -81
  431. package/src/modules/staff/notifications.ts +0 -71
  432. package/src/modules/workflows/notifications.ts +0 -25
  433. package/src/modules/workflows/subscribers/task-assigned-notification.ts +0 -53
@@ -1,10 +1,6 @@
1
1
  import type { EntityManager } from '@mikro-orm/postgresql'
2
2
  import type { CacheStrategy } from '@open-mercato/cache'
3
3
  import { createHash } from 'node:crypto'
4
- import { decryptWithAesGcm } from '@open-mercato/shared/lib/encryption/aes'
5
- import { resolveTenantEncryptionService } from '@open-mercato/shared/lib/encryption/customFieldValues'
6
- import { resolveEntityIdFromMetadata } from '@open-mercato/shared/lib/encryption/entityIds'
7
- import { findWithDecryption } from '@open-mercato/shared/lib/encryption/find'
8
4
  import {
9
5
  type DateRangePreset,
10
6
  resolveDateRange,
@@ -286,75 +282,6 @@ export class WidgetDataService {
286
282
  assertSafeIdentifier(config.idColumn, 'id column')
287
283
  assertSafeIdentifier(config.labelColumn, 'label column')
288
284
 
289
- const meta = this.resolveEntityMetadata(config.table)
290
- const idProp = meta ? this.resolveEntityPropertyName(meta, config.idColumn) : null
291
- const labelProp = meta ? this.resolveEntityPropertyName(meta, config.labelColumn) : null
292
- const tenantProp = meta
293
- ? (this.resolveEntityPropertyName(meta, 'tenant_id') ?? this.resolveEntityPropertyName(meta, 'tenantId'))
294
- : null
295
- const organizationProp = meta
296
- ? (this.resolveEntityPropertyName(meta, 'organization_id') ?? this.resolveEntityPropertyName(meta, 'organizationId'))
297
- : null
298
- const entityName = meta ? ((meta as any).class ?? meta.className ?? meta.name) : null
299
-
300
- if (meta && idProp && labelProp && tenantProp && entityName) {
301
- const where: Record<string, unknown> = {
302
- [idProp]: { $in: uniqueIds },
303
- [tenantProp]: this.scope.tenantId,
304
- }
305
- if (organizationProp && this.scope.organizationIds && this.scope.organizationIds.length > 0) {
306
- where[organizationProp] = { $in: this.scope.organizationIds }
307
- }
308
-
309
- try {
310
- const records = await findWithDecryption(
311
- this.em,
312
- entityName,
313
- where,
314
- { fields: [idProp, labelProp, tenantProp, organizationProp].filter(Boolean) },
315
- { tenantId: this.scope.tenantId, organizationId: this.resolveOrganizationId() },
316
- )
317
-
318
- const encryptionService = resolveTenantEncryptionService(this.em as any)
319
- const dek = encryptionService?.isEnabled() ? await encryptionService.getDek(this.scope.tenantId) : null
320
- let hasEncryptedLabels = false
321
- let hasDecryptedLabels = false
322
-
323
- const labelMap = new Map<string, string>()
324
- for (const record of records as Array<Record<string, unknown>>) {
325
- const id = record[idProp]
326
- let labelValue = record[labelProp]
327
- if (typeof labelValue === 'string' && this.isEncryptedPayload(labelValue)) {
328
- hasEncryptedLabels = true
329
- if (dek?.key) {
330
- const decrypted = this.decryptWithDek(labelValue, dek.key)
331
- if (decrypted !== null) {
332
- labelValue = decrypted
333
- hasDecryptedLabels = true
334
- }
335
- }
336
- } else if (labelValue != null && labelValue !== '') {
337
- hasDecryptedLabels = true
338
- }
339
-
340
- if (typeof id === 'string' && labelValue != null && labelValue !== '') {
341
- labelMap.set(id, String(labelValue))
342
- }
343
- }
344
-
345
- if (labelMap.size > 0 && (!hasEncryptedLabels || hasDecryptedLabels)) {
346
- return data.map((item) => ({
347
- ...item,
348
- groupLabel: typeof item.groupKey === 'string' && labelMap.has(item.groupKey)
349
- ? labelMap.get(item.groupKey)!
350
- : undefined,
351
- }))
352
- }
353
- } catch {
354
- // fall through to SQL resolution
355
- }
356
- }
357
-
358
285
  const clauses = [`"${config.idColumn}" = ANY(?::uuid[])`, 'tenant_id = ?']
359
286
  const params: unknown[] = [`{${uniqueIds.join(',')}}`, this.scope.tenantId]
360
287
 
@@ -363,43 +290,17 @@ export class WidgetDataService {
363
290
  params.push(`{${this.scope.organizationIds.join(',')}}`)
364
291
  }
365
292
 
366
- const sql = `SELECT "${config.idColumn}" as id, "${config.labelColumn}" as label, tenant_id, organization_id FROM "${config.table}" WHERE ${clauses.join(
293
+ const sql = `SELECT "${config.idColumn}" as id, "${config.labelColumn}" as label FROM "${config.table}" WHERE ${clauses.join(
367
294
  ' AND ',
368
295
  )}`
369
296
 
370
297
  try {
371
298
  const labelRows = await this.em.getConnection().execute(sql, params)
372
- const entityId = this.resolveEntityId(meta)
373
- const encryptionService = resolveTenantEncryptionService(this.em as any)
374
- const organizationId = this.resolveOrganizationId()
375
- const dek = encryptionService?.isEnabled() ? await encryptionService.getDek(this.scope.tenantId) : null
376
299
 
377
300
  const labelMap = new Map<string, string>()
378
- for (const row of labelRows as Array<{ id: string; label: string | null; tenant_id?: string | null; organization_id?: string | null }>) {
379
- let labelValue = row.label
380
- if (entityId && encryptionService?.isEnabled() && labelValue != null) {
381
- const rowOrgId = row.organization_id ?? organizationId ?? null
382
- const decrypted = await encryptionService.decryptEntityPayload(
383
- entityId,
384
- { [config.labelColumn]: labelValue },
385
- this.scope.tenantId,
386
- rowOrgId,
387
- )
388
- const resolved = decrypted[config.labelColumn]
389
- if (typeof resolved === 'string' || typeof resolved === 'number') {
390
- labelValue = String(resolved)
391
- }
392
- }
393
-
394
- if (labelValue && dek?.key && this.isEncryptedPayload(labelValue)) {
395
- const decrypted = this.decryptWithDek(labelValue, dek.key)
396
- if (decrypted !== null) {
397
- labelValue = decrypted
398
- }
399
- }
400
-
401
- if (row.id && labelValue != null && labelValue !== '') {
402
- labelMap.set(row.id, labelValue)
301
+ for (const row of labelRows as Array<{ id: string; label: string | null }>) {
302
+ if (row.id && row.label != null && row.label !== '') {
303
+ labelMap.set(row.id, row.label)
403
304
  }
404
305
  }
405
306
 
@@ -416,60 +317,6 @@ export class WidgetDataService {
416
317
  }))
417
318
  }
418
319
  }
419
-
420
- private resolveOrganizationId(): string | null {
421
- if (!this.scope.organizationIds || this.scope.organizationIds.length !== 1) return null
422
- return this.scope.organizationIds[0] ?? null
423
- }
424
-
425
- private resolveEntityMetadata(tableName: string): Record<string, any> | null {
426
- const registry = (this.em as any)?.getMetadata?.()
427
- if (!registry) return null
428
- const entries =
429
- (typeof registry.getAll === 'function' && registry.getAll()) ||
430
- (Array.isArray(registry.metadata) ? registry.metadata : Object.values(registry.metadata ?? {}))
431
- const metas = Array.isArray(entries) ? entries : Object.values(entries ?? {})
432
- const match = metas.find((meta: any) => {
433
- const table = meta?.tableName ?? meta?.collection
434
- if (typeof table !== 'string') return false
435
- if (table === tableName) return true
436
- return table.split('.').pop() === tableName
437
- })
438
- return match ?? null
439
- }
440
-
441
- private resolveEntityPropertyName(meta: Record<string, any>, columnName: string): string | null {
442
- const properties = meta?.properties ? Object.values(meta.properties) : []
443
- for (const prop of properties as Array<Record<string, any>>) {
444
- const fieldName = prop?.fieldName
445
- const fieldNames = prop?.fieldNames
446
- if (typeof fieldName === 'string' && fieldName === columnName) return prop?.name ?? null
447
- if (Array.isArray(fieldNames) && fieldNames.includes(columnName)) return prop?.name ?? null
448
- if (prop?.name === columnName) return prop?.name ?? null
449
- }
450
- return null
451
- }
452
-
453
- private resolveEntityId(meta: Record<string, any> | null): string | null {
454
- if (!meta) return null
455
- try {
456
- return resolveEntityIdFromMetadata(meta as any)
457
- } catch {
458
- return null
459
- }
460
- }
461
-
462
- private isEncryptedPayload(value: string): boolean {
463
- const parts = value.split(':')
464
- return parts.length === 4 && parts[3] === 'v1'
465
- }
466
-
467
- private decryptWithDek(value: string, dek: string): string | null {
468
- const first = decryptWithAesGcm(value, dek)
469
- if (first === null) return null
470
- if (!this.isEncryptedPayload(first)) return first
471
- return decryptWithAesGcm(first, dek) ?? first
472
- }
473
320
  }
474
321
 
475
322
  export function createWidgetDataService(
@@ -171,14 +171,12 @@ export function DictionaryTable({
171
171
  const items: RowActionItem[] = []
172
172
  if (onEdit) {
173
173
  items.push({
174
- id: 'edit',
175
174
  label: translations.editLabel,
176
175
  onSelect: () => onEdit(entry),
177
176
  })
178
177
  }
179
178
  if (onDelete) {
180
179
  items.push({
181
- id: 'delete',
182
180
  label: translations.deleteLabel,
183
181
  onSelect: () => onDelete(entry),
184
182
  destructive: true,
@@ -235,8 +235,8 @@ export default function DirectoryOrganizationsPage() {
235
235
  canManage ? (
236
236
  <RowActions
237
237
  items={[
238
- { id: 'edit', label: t('directory.organizations.list.actions.edit', 'Edit'), href: `/backend/directory/organizations/${row.id}/edit` },
239
- { id: 'delete', label: t('directory.organizations.list.actions.delete', 'Delete'), destructive: true, onSelect: () => handleDelete(row) },
238
+ { label: t('directory.organizations.list.actions.edit', 'Edit'), href: `/backend/directory/organizations/${row.id}/edit` },
239
+ { label: t('directory.organizations.list.actions.delete', 'Delete'), destructive: true, onSelect: () => handleDelete(row) },
240
240
  ]}
241
241
  />
242
242
  ) : null
@@ -160,8 +160,8 @@ export default function DirectoryTenantsPage() {
160
160
  canManage ? (
161
161
  <RowActions
162
162
  items={[
163
- { id: 'edit', label: t('common.edit', 'Edit'), href: `/backend/directory/tenants/${row.id}/edit` },
164
- { id: 'delete', label: t('common.delete', 'Delete'), destructive: true, onSelect: () => handleDelete(row) },
163
+ { label: t('common.edit', 'Edit'), href: `/backend/directory/tenants/${row.id}/edit` },
164
+ { label: t('common.delete', 'Delete'), destructive: true, onSelect: () => handleDelete(row) },
165
165
  ]}
166
166
  />
167
167
  ) : null
@@ -338,8 +338,8 @@ export RECORD_ID="<record uuid>"`}</code></pre>
338
338
  rowActions={(row) => (
339
339
  <RowActions
340
340
  items={[
341
- { id: 'edit', label: 'Edit', href: `/backend/entities/user/${encodeURIComponent(entityId)}/records/${encodeURIComponent(String((row as any).id))}` },
342
- { id: 'delete', label: 'Delete', destructive: true, onSelect: async () => {
341
+ { label: 'Edit', href: `/backend/entities/user/${encodeURIComponent(entityId)}/records/${encodeURIComponent(String((row as any).id))}` },
342
+ { label: 'Delete', destructive: true, onSelect: async () => {
343
343
  try {
344
344
  if (typeof window !== 'undefined') {
345
345
  const ok = window.confirm('Delete this record?')
@@ -88,7 +88,7 @@ export default function SystemEntitiesTable() {
88
88
  rowActions={(row) => (
89
89
  <RowActions
90
90
  items={[
91
- { id: 'edit', label: 'Edit', href: `/backend/entities/system/${encodeURIComponent(row.entityId)}` },
91
+ { label: 'Edit', href: `/backend/entities/system/${encodeURIComponent(row.entityId)}` },
92
92
  ]}
93
93
  />
94
94
  )}
@@ -110,8 +110,8 @@ export default function UserEntitiesTable() {
110
110
  rowActions={(row) => (
111
111
  <RowActions
112
112
  items={[
113
- { id: 'edit', label: t('common.edit', 'Edit'), href: `/backend/entities/user/${encodeURIComponent(row.entityId)}` },
114
- { id: 'show-records', label: t('entities.user.table.actions.showRecords', 'Show records'), href: `/backend/entities/user/${encodeURIComponent(row.entityId)}/records` },
113
+ { label: t('common.edit', 'Edit'), href: `/backend/entities/user/${encodeURIComponent(row.entityId)}` },
114
+ { label: t('entities.user.table.actions.showRecords', 'Show records'), href: `/backend/entities/user/${encodeURIComponent(row.entityId)}/records` },
115
115
  ]}
116
116
  />
117
117
  )}
@@ -205,11 +205,12 @@ export function FeatureTogglesTable() {
205
205
  }}
206
206
  rowActions={(row) => (
207
207
  <RowActions items={[
208
- { id: 'edit', label: t('common.edit', 'Edit'), href: `/backend/feature-toggles/global/${row.id}/edit` },
209
- { id: 'view', label: t('common.view', 'Overrides'), href: `/backend/feature-toggles/global/${row.id}` },
210
- { id: 'delete', label: t('common.delete', 'Delete'), destructive: true, onSelect: () => { void handleDelete(row) } },
208
+ { label: t('common.edit', 'Edit'), href: `/backend/feature-toggles/global/${row.id}/edit` },
209
+ { label: t('common.view', 'Overrides'), href: `/backend/feature-toggles/global/${row.id}` },
210
+ { label: t('common.delete', 'Delete'), destructive: true, onSelect: () => { void handleDelete(row) } },
211
211
  ]} />
212
212
  )}
213
213
  />
214
214
  )
215
215
  }
216
+
@@ -161,7 +161,7 @@ export default function OverridesTable() {
161
161
  }}
162
162
  rowActions={(row) => (
163
163
  <RowActions items={[
164
- { id: 'edit', label: t('common.edit', 'Edit'), href: `/backend/feature-toggles/global/${row.toggleId}` },
164
+ { label: t('common.edit', 'Edit'), href: `/backend/feature-toggles/global/${row.toggleId}` },
165
165
  ]} />
166
166
  )}
167
167
  error={error ? error.message : undefined}
@@ -202,8 +202,8 @@ export default function PlannerAvailabilityRuleSetsPage() {
202
202
  rowActions={(row) => (
203
203
  <RowActions
204
204
  items={[
205
- { id: 'edit', label: labels.actions.edit, href: `/backend/planner/availability-rulesets/${row.id}` },
206
- { id: 'delete', label: labels.actions.delete, destructive: true, onSelect: () => { void handleDelete(row) } },
205
+ { label: labels.actions.edit, href: `/backend/planner/availability-rulesets/${row.id}` },
206
+ { label: labels.actions.delete, destructive: true, onSelect: () => { void handleDelete(row) } },
207
207
  ]}
208
208
  />
209
209
  )}
@@ -366,15 +366,13 @@ export default function QueryIndexesTable() {
366
366
  onSortingChange={setSorting}
367
367
  perspective={{ tableId: 'query_index.status.list' }}
368
368
  rowActions={(row) => {
369
- const items: Array<{ id: string; label: string; onSelect: () => void; destructive?: boolean }> = [
370
- { id: 'reindex', label: t('query_index.table.actions.reindex'), onSelect: () => trigger('reindex', row.entityId) },
369
+ const items: Array<{ label: string; onSelect: () => void; destructive?: boolean }> = [
370
+ { label: t('query_index.table.actions.reindex'), onSelect: () => trigger('reindex', row.entityId) },
371
371
  {
372
- id: 'reindex-force',
373
372
  label: t('query_index.table.actions.reindexForce'),
374
373
  onSelect: () => trigger('reindex', row.entityId, { force: true }),
375
374
  },
376
375
  {
377
- id: 'purge',
378
376
  label: t('query_index.table.actions.purge'),
379
377
  destructive: true,
380
378
  onSelect: () => trigger('purge', row.entityId),
@@ -384,12 +382,10 @@ export default function QueryIndexesTable() {
384
382
  if (row.vectorEnabled) {
385
383
  items.push(
386
384
  {
387
- id: 'vector-reindex',
388
385
  label: t('query_index.table.actions.vectorReindex'),
389
386
  onSelect: () => triggerVector('reindex', row.entityId),
390
387
  },
391
388
  {
392
- id: 'vector-purge',
393
389
  label: t('query_index.table.actions.vectorPurge'),
394
390
  destructive: true,
395
391
  onSelect: () => triggerVector('purge', row.entityId),
@@ -400,12 +396,10 @@ export default function QueryIndexesTable() {
400
396
  if (row.fulltextEnabled) {
401
397
  items.push(
402
398
  {
403
- id: 'fulltext-reindex',
404
399
  label: t('query_index.table.actions.fulltextReindex'),
405
400
  onSelect: () => triggerFulltext('reindex', row.entityId),
406
401
  },
407
402
  {
408
- id: 'fulltext-purge',
409
403
  label: t('query_index.table.actions.fulltextPurge'),
410
404
  destructive: true,
411
405
  onSelect: () => triggerFulltext('purge', row.entityId),
@@ -266,10 +266,10 @@ export default function ResourcesResourceTypesPage() {
266
266
  rowActions={(row) => (
267
267
  <RowActions
268
268
  items={[
269
- { id: 'edit', label: translations.actions.edit, href: `/backend/resources/resource-types/${row.id}/edit` },
269
+ { label: translations.actions.edit, href: `/backend/resources/resource-types/${row.id}/edit` },
270
270
  ...(row.resourceCount > 0
271
271
  ? []
272
- : [{ id: 'delete', label: translations.actions.delete, destructive: true, onSelect: () => handleDelete(row) }]),
272
+ : [{ label: translations.actions.delete, destructive: true, onSelect: () => handleDelete(row) }]),
273
273
  ]}
274
274
  />
275
275
  )}
@@ -481,8 +481,8 @@ export default function ResourcesResourcesPage() {
481
481
  if (!canManage || row.rowKind !== 'resource') return null
482
482
  return (
483
483
  <RowActions items={[
484
- { id: 'edit', label: t('common.edit', 'Edit'), href: `/backend/resources/resources/${encodeURIComponent(row.id)}` },
485
- { id: 'delete', label: t('common.delete', 'Delete'), destructive: true, onSelect: () => { void handleDelete(row) } },
484
+ { label: t('common.edit', 'Edit'), href: `/backend/resources/resources/${encodeURIComponent(row.id)}` },
485
+ { label: t('common.delete', 'Delete'), destructive: true, onSelect: () => { void handleDelete(row) } },
486
486
  ]} />
487
487
  )
488
488
  }}
@@ -334,12 +334,10 @@ export default function SalesChannelOffersListPage() {
334
334
  <RowActions
335
335
  items={[
336
336
  {
337
- id: 'edit',
338
337
  label: t('sales.channels.offers.actions.edit', 'Edit'),
339
338
  href: `/backend/sales/channels/${row.channelId}/offers/${row.id}/edit`,
340
339
  },
341
340
  {
342
- id: 'delete',
343
341
  label: t('sales.channels.offers.actions.delete', 'Delete'),
344
342
  onSelect: () => handleDelete(row),
345
343
  destructive: true,
@@ -191,12 +191,10 @@ export default function SalesChannelsPage() {
191
191
  <RowActions
192
192
  items={[
193
193
  {
194
- id: 'edit',
195
194
  label: t('sales.channels.table.actions.edit', 'Edit'),
196
195
  href: `/backend/sales/channels/${row.id}/edit`,
197
196
  },
198
197
  {
199
- id: 'delete',
200
198
  label: t('sales.channels.table.actions.delete', 'Delete'),
201
199
  onSelect: () => handleDelete(row),
202
200
  },
@@ -11,8 +11,6 @@ import type { DataEngine } from '@open-mercato/shared/lib/data/engine'
11
11
  import { CrudHttpError } from '@open-mercato/shared/lib/crud/errors'
12
12
  import { deriveResourceFromCommandId, invalidateCrudCache } from '@open-mercato/shared/lib/crud/cache'
13
13
  import { resolveTranslations } from '@open-mercato/shared/lib/i18n/server'
14
- import { resolveNotificationService } from '../../notifications/lib/notificationService'
15
- import { buildFeatureNotificationFromType } from '../../notifications/lib/notificationBuilder'
16
14
  import { setRecordCustomFields } from '@open-mercato/core/modules/entities/lib/helpers'
17
15
  import { loadCustomFieldValues } from '@open-mercato/shared/lib/crud/custom-fields'
18
16
  import { normalizeCustomFieldValues } from '@open-mercato/shared/lib/custom-fields/normalize'
@@ -90,7 +88,6 @@ import { resolveDictionaryEntryValue } from '../lib/dictionaries'
90
88
  import { resolveStatusEntryIdByValue } from '../lib/statusHelpers'
91
89
  import { SalesDocumentNumberGenerator } from '../services/salesDocumentNumberGenerator'
92
90
  import { loadSalesSettings } from './settings'
93
- import { notificationTypes } from '../notifications'
94
91
 
95
92
  type DocumentAddressSnapshot = {
96
93
  id: string
@@ -3114,37 +3111,6 @@ const createQuoteCommand: CommandHandler<QuoteCreateInput, { quoteId: string }>
3114
3111
  })
3115
3112
  await em.flush()
3116
3113
 
3117
- // Create notification for users with sales.quotes.manage feature
3118
- try {
3119
- const notificationService = resolveNotificationService(ctx.container)
3120
- const typeDef = notificationTypes.find((type) => type.type === 'sales.quote.created')
3121
- if (typeDef) {
3122
- const totalAmount = quote.grandTotalGrossAmount && quote.currencyCode
3123
- ? `${quote.grandTotalGrossAmount} ${quote.currencyCode}`
3124
- : ''
3125
- const totalDisplay = totalAmount ? ` (${totalAmount})` : ''
3126
- const notificationInput = buildFeatureNotificationFromType(typeDef, {
3127
- requiredFeature: 'sales.quotes.manage',
3128
- bodyVariables: {
3129
- quoteNumber: quote.quoteNumber,
3130
- total: totalDisplay,
3131
- totalAmount,
3132
- },
3133
- sourceEntityType: 'sales:quote',
3134
- sourceEntityId: quote.id,
3135
- linkHref: `/backend/sales/quotes/${quote.id}`,
3136
- })
3137
-
3138
- await notificationService.createForFeature(notificationInput, {
3139
- tenantId: quote.tenantId,
3140
- organizationId: quote.organizationId ?? null,
3141
- })
3142
- }
3143
- } catch (err) {
3144
- // Notification creation is non-critical, don't fail the command
3145
- console.error('[sales.quotes.create] Failed to create notification:', err)
3146
- }
3147
-
3148
3114
  return { quoteId: quote.id }
3149
3115
  },
3150
3116
  captureAfter: async (_input, result, ctx) => {
@@ -3816,37 +3782,6 @@ const createOrderCommand: CommandHandler<OrderCreateInput, { orderId: string }>
3816
3782
  })
3817
3783
  await em.flush()
3818
3784
 
3819
- // Create notification for users with sales.orders.manage feature
3820
- try {
3821
- const notificationService = resolveNotificationService(ctx.container)
3822
- const typeDef = notificationTypes.find((type) => type.type === 'sales.order.created')
3823
- if (typeDef) {
3824
- const totalAmount = order.grandTotalGrossAmount && order.currencyCode
3825
- ? `${order.grandTotalGrossAmount} ${order.currencyCode}`
3826
- : ''
3827
- const totalDisplay = totalAmount ? ` (${totalAmount})` : ''
3828
- const notificationInput = buildFeatureNotificationFromType(typeDef, {
3829
- requiredFeature: 'sales.orders.manage',
3830
- bodyVariables: {
3831
- orderNumber: order.orderNumber,
3832
- total: totalDisplay,
3833
- totalAmount,
3834
- },
3835
- sourceEntityType: 'sales:order',
3836
- sourceEntityId: order.id,
3837
- linkHref: `/backend/sales/orders/${order.id}`,
3838
- })
3839
-
3840
- await notificationService.createForFeature(notificationInput, {
3841
- tenantId: order.tenantId,
3842
- organizationId: order.organizationId ?? null,
3843
- })
3844
- }
3845
- } catch (err) {
3846
- // Notification creation is non-critical, don't fail the command
3847
- console.error('[sales.orders.create] Failed to create notification:', err)
3848
- }
3849
-
3850
3785
  return { orderId: order.id }
3851
3786
  },
3852
3787
  captureAfter: async (_input, result, ctx) => {
@@ -35,9 +35,6 @@ import { invalidateCrudCache } from '@open-mercato/shared/lib/crud/cache'
35
35
  import { emitCrudSideEffects } from '@open-mercato/shared/lib/commands/helpers'
36
36
  import type { DataEngine } from '@open-mercato/shared/lib/data/engine'
37
37
  import { findOneWithDecryption, findWithDecryption } from '@open-mercato/shared/lib/encryption/find'
38
- import { resolveNotificationService } from '../../notifications/lib/notificationService'
39
- import { buildFeatureNotificationFromType } from '../../notifications/lib/notificationBuilder'
40
- import { notificationTypes } from '../notifications'
41
38
 
42
39
  export type PaymentAllocationSnapshot = {
43
40
  id: string
@@ -425,36 +422,6 @@ const createPaymentCommand: CommandHandler<
425
422
  const totals = await recomputeOrderPaymentTotals(em, order)
426
423
  await em.flush()
427
424
  await invalidateOrderCache(ctx.container, order, ctx.auth?.tenantId ?? null)
428
-
429
- // Create notification for payment received
430
- try {
431
- const notificationService = resolveNotificationService(ctx.container)
432
- const typeDef = notificationTypes.find((type) => type.type === 'sales.payment.received')
433
- if (typeDef) {
434
- const amountDisplay = payment.amount && payment.currencyCode
435
- ? `${payment.currencyCode} ${payment.amount}`
436
- : ''
437
- const notificationInput = buildFeatureNotificationFromType(typeDef, {
438
- requiredFeature: 'sales.orders.manage',
439
- bodyVariables: {
440
- orderNumber: order.orderNumber ?? '',
441
- amount: amountDisplay,
442
- },
443
- sourceEntityType: 'sales:order',
444
- sourceEntityId: order.id,
445
- linkHref: `/backend/sales/orders/${order.id}`,
446
- })
447
-
448
- await notificationService.createForFeature(notificationInput, {
449
- tenantId: payment.tenantId,
450
- organizationId: payment.organizationId ?? null,
451
- })
452
- }
453
- } catch (err) {
454
- // Notification creation is non-critical, don't fail the command
455
- console.error('[sales.payments.create] Failed to create notification:', err)
456
- }
457
-
458
425
  return { paymentId: payment.id, orderTotals: totals }
459
426
  },
460
427
  captureAfter: async (_input, result, ctx) => {
@@ -333,8 +333,8 @@ export function AdjustmentKindSettings() {
333
333
  rowActions={(entry) => (
334
334
  <RowActions
335
335
  items={[
336
- { id: 'edit', label: labels.edit, onSelect: () => openDialog({ mode: 'edit', entry }) },
337
- { id: 'delete', label: labels.delete, destructive: true, onSelect: () => { void handleDelete(entry) } },
336
+ { label: labels.edit, onSelect: () => openDialog({ mode: 'edit', entry }) },
337
+ { label: labels.delete, destructive: true, onSelect: () => { void handleDelete(entry) } },
338
338
  ]}
339
339
  />
340
340
  )}
@@ -526,8 +526,8 @@ export function PaymentMethodsSettings() {
526
526
  rowActions={(row) => (
527
527
  <RowActions
528
528
  items={[
529
- { id: 'edit', label: translations.actions.edit, onSelect: () => openEdit(row) },
530
- { id: 'delete', label: translations.actions.delete, destructive: true, onSelect: () => deleteEntry(row) },
529
+ { label: translations.actions.edit, onSelect: () => openEdit(row) },
530
+ { label: translations.actions.delete, destructive: true, onSelect: () => deleteEntry(row) },
531
531
  ]}
532
532
  />
533
533
  )}
@@ -820,8 +820,8 @@ export function ShippingMethodsSettings() {
820
820
  rowActions={(row) => (
821
821
  <RowActions
822
822
  items={[
823
- { id: 'edit', label: translations.actions.edit, onSelect: () => openEdit(row) },
824
- { id: 'delete', label: translations.actions.delete, destructive: true, onSelect: () => deleteEntry(row) },
823
+ { label: translations.actions.edit, onSelect: () => openEdit(row) },
824
+ { label: translations.actions.delete, destructive: true, onSelect: () => deleteEntry(row) },
825
825
  ]}
826
826
  />
827
827
  )}
@@ -335,8 +335,8 @@ export function TaxRatesSettings() {
335
335
  rowActions={(row) => (
336
336
  <RowActions
337
337
  items={[
338
- { id: 'edit', label: translations.actions.edit, onSelect: () => openEdit(row) },
339
- { id: 'delete', label: translations.actions.delete, destructive: true, onSelect: () => deleteEntry(row) },
338
+ { label: translations.actions.edit, onSelect: () => openEdit(row) },
339
+ { label: translations.actions.delete, destructive: true, onSelect: () => deleteEntry(row) },
340
340
  ]}
341
341
  />
342
342
  )}
@@ -185,12 +185,10 @@ export function SalesChannelOffersPanel({ channelId, channelName }: { channelId:
185
185
  <RowActions
186
186
  items={[
187
187
  {
188
- id: 'edit',
189
188
  label: t('sales.channels.offers.actions.edit', 'Edit'),
190
189
  href: `/backend/sales/channels/${channelId}/offers/${row.id}/edit`,
191
190
  },
192
191
  {
193
- id: 'delete',
194
192
  label: t('sales.channels.offers.actions.delete', 'Delete'),
195
193
  onSelect: () => handleDelete(row),
196
194
  destructive: true,
@@ -427,12 +427,10 @@ export function SalesDocumentAdjustmentsSection({
427
427
  <RowActions
428
428
  items={[
429
429
  {
430
- id: 'edit',
431
430
  label: t('ui.actions.edit', 'Edit'),
432
431
  onSelect: () => handleEdit(row),
433
432
  },
434
433
  {
435
- id: 'delete',
436
434
  label: t('ui.actions.delete', 'Delete'),
437
435
  destructive: true,
438
436
  onSelect: () => handleDelete(row),
@@ -295,9 +295,8 @@ export function SalesDocumentPaymentsSection({
295
295
  return (
296
296
  <RowActions
297
297
  items={[
298
- { id: 'edit', label: editActionLabel, onSelect: () => openEditPayment(row.original) },
298
+ { label: editActionLabel, onSelect: () => openEditPayment(row.original) },
299
299
  {
300
- id: 'delete',
301
300
  label: deleteActionLabel,
302
301
  destructive: true,
303
302
  onSelect: () => void handleDelete(row.original),