@open-mercato/core 0.6.8-develop.7099.1.7ba2771d06 → 0.7.0

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 (941) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/dist/helpers/integration/api.js +1 -13
  3. package/dist/helpers/integration/api.js.map +2 -2
  4. package/dist/helpers/integration/communicationChannelsFixtures.js +0 -19
  5. package/dist/helpers/integration/communicationChannelsFixtures.js.map +2 -2
  6. package/dist/modules/api_keys/api/keys/route.js +1 -1
  7. package/dist/modules/api_keys/api/keys/route.js.map +2 -2
  8. package/dist/modules/api_keys/backend/api-keys/page.js +1 -3
  9. package/dist/modules/api_keys/backend/api-keys/page.js.map +2 -2
  10. package/dist/modules/attachments/api/route.js +2 -2
  11. package/dist/modules/attachments/api/route.js.map +2 -2
  12. package/dist/modules/attachments/components/AttachmentLibrary.js +0 -2
  13. package/dist/modules/attachments/components/AttachmentLibrary.js.map +2 -2
  14. package/dist/modules/attachments/di.js +1 -11
  15. package/dist/modules/attachments/di.js.map +2 -2
  16. package/dist/modules/attachments/index.js.map +1 -1
  17. package/dist/modules/attachments/lib/scoped-upload-service.js +2 -15
  18. package/dist/modules/attachments/lib/scoped-upload-service.js.map +2 -2
  19. package/dist/modules/attachments/lib/upload-limits.js +2 -6
  20. package/dist/modules/attachments/lib/upload-limits.js.map +2 -2
  21. package/dist/modules/audit_logs/backend/audit-logs/page.js +0 -6
  22. package/dist/modules/audit_logs/backend/audit-logs/page.js.map +2 -2
  23. package/dist/modules/audit_logs/lib/display-helpers.js +11 -19
  24. package/dist/modules/audit_logs/lib/display-helpers.js.map +2 -2
  25. package/dist/modules/audit_logs/services/actionLogService.js +12 -57
  26. package/dist/modules/audit_logs/services/actionLogService.js.map +3 -3
  27. package/dist/modules/auth/acl.js +5 -30
  28. package/dist/modules/auth/acl.js.map +2 -2
  29. package/dist/modules/auth/api/feature-check.js +2 -8
  30. package/dist/modules/auth/api/feature-check.js.map +2 -2
  31. package/dist/modules/auth/api/login.js +20 -4
  32. package/dist/modules/auth/api/login.js.map +2 -2
  33. package/dist/modules/auth/api/roles/acl/route.js +33 -28
  34. package/dist/modules/auth/api/roles/acl/route.js.map +2 -2
  35. package/dist/modules/auth/api/routeError.js +11 -0
  36. package/dist/modules/auth/api/routeError.js.map +7 -0
  37. package/dist/modules/auth/api/session/refresh.js +1 -25
  38. package/dist/modules/auth/api/session/refresh.js.map +2 -2
  39. package/dist/modules/auth/api/users/acl/route.js +73 -102
  40. package/dist/modules/auth/api/users/acl/route.js.map +2 -2
  41. package/dist/modules/auth/backend/roles/[id]/edit/page.meta.js +1 -5
  42. package/dist/modules/auth/backend/roles/[id]/edit/page.meta.js.map +2 -2
  43. package/dist/modules/auth/backend/roles/page.js +1 -3
  44. package/dist/modules/auth/backend/roles/page.js.map +2 -2
  45. package/dist/modules/auth/backend/users/[id]/edit/page.meta.js +1 -5
  46. package/dist/modules/auth/backend/users/[id]/edit/page.meta.js.map +2 -2
  47. package/dist/modules/auth/backend/users/page.js +1 -2
  48. package/dist/modules/auth/backend/users/page.js.map +2 -2
  49. package/dist/modules/auth/components/AclEditor.js +30 -39
  50. package/dist/modules/auth/components/AclEditor.js.map +2 -2
  51. package/dist/modules/auth/data/entities.js.map +2 -2
  52. package/dist/modules/auth/data/validators.js +1 -5
  53. package/dist/modules/auth/data/validators.js.map +2 -2
  54. package/dist/modules/auth/di.js +9 -35
  55. package/dist/modules/auth/di.js.map +2 -2
  56. package/dist/modules/auth/frontend/reset/[token]/page.js +0 -46
  57. package/dist/modules/auth/frontend/reset/[token]/page.js.map +2 -2
  58. package/dist/modules/auth/lib/grantChecks.js.map +2 -2
  59. package/dist/modules/auth/services/authService.js +2 -16
  60. package/dist/modules/auth/services/authService.js.map +2 -2
  61. package/dist/modules/auth/services/rbacService.js +24 -67
  62. package/dist/modules/auth/services/rbacService.js.map +3 -3
  63. package/dist/modules/business_rules/backend/logs/page.js +1 -3
  64. package/dist/modules/business_rules/backend/logs/page.js.map +2 -2
  65. package/dist/modules/business_rules/backend/rules/[id]/page.meta.js +6 -1
  66. package/dist/modules/business_rules/backend/rules/[id]/page.meta.js.map +2 -2
  67. package/dist/modules/business_rules/backend/rules/create/page.meta.js +5 -1
  68. package/dist/modules/business_rules/backend/rules/create/page.meta.js.map +2 -2
  69. package/dist/modules/business_rules/backend/rules/page.js +1 -3
  70. package/dist/modules/business_rules/backend/rules/page.js.map +2 -2
  71. package/dist/modules/business_rules/backend/sets/[id]/page.meta.js +6 -1
  72. package/dist/modules/business_rules/backend/sets/[id]/page.meta.js.map +2 -2
  73. package/dist/modules/business_rules/backend/sets/create/page.meta.js +5 -1
  74. package/dist/modules/business_rules/backend/sets/create/page.meta.js.map +2 -2
  75. package/dist/modules/business_rules/backend/sets/page.js +1 -3
  76. package/dist/modules/business_rules/backend/sets/page.js.map +2 -2
  77. package/dist/modules/business_rules/lib/expression-evaluator.js +9 -9
  78. package/dist/modules/business_rules/lib/expression-evaluator.js.map +2 -2
  79. package/dist/modules/business_rules/lib/rule-evaluator.js +9 -10
  80. package/dist/modules/business_rules/lib/rule-evaluator.js.map +2 -2
  81. package/dist/modules/catalog/ai-agents.js +1 -1
  82. package/dist/modules/catalog/ai-agents.js.map +1 -1
  83. package/dist/modules/catalog/ai-tools/merchandising-pack.js +2 -2
  84. package/dist/modules/catalog/ai-tools/merchandising-pack.js.map +2 -2
  85. package/dist/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.js +2 -5
  86. package/dist/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.js.map +2 -2
  87. package/dist/modules/catalog/components/categories/CategoriesDataTable.js +0 -2
  88. package/dist/modules/catalog/components/categories/CategoriesDataTable.js.map +2 -2
  89. package/dist/modules/catalog/components/products/ProductsDataTable.js +1 -7
  90. package/dist/modules/catalog/components/products/ProductsDataTable.js.map +2 -2
  91. package/dist/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.js +0 -2
  92. package/dist/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.js.map +2 -2
  93. package/dist/modules/communication_channels/api/post/channels/[id]/test-send/route.js +1 -9
  94. package/dist/modules/communication_channels/api/post/channels/[id]/test-send/route.js.map +2 -2
  95. package/dist/modules/communication_channels/api/post/test-seed/route.js +10 -95
  96. package/dist/modules/communication_channels/api/post/test-seed/route.js.map +2 -2
  97. package/dist/modules/communication_channels/backend/communication_channels/channels/page.js +0 -3
  98. package/dist/modules/communication_channels/backend/communication_channels/channels/page.js.map +2 -2
  99. package/dist/modules/communication_channels/commands/ingest-inbound-message.js +1 -14
  100. package/dist/modules/communication_channels/commands/ingest-inbound-message.js.map +2 -2
  101. package/dist/modules/communication_channels/di.js +1 -7
  102. package/dist/modules/communication_channels/di.js.map +2 -2
  103. package/dist/modules/communication_channels/lib/email-capabilities.js +1 -4
  104. package/dist/modules/communication_channels/lib/email-capabilities.js.map +2 -2
  105. package/dist/modules/communication_channels/lib/test-seed.js +2 -41
  106. package/dist/modules/communication_channels/lib/test-seed.js.map +2 -2
  107. package/dist/modules/configs/lib/system-status.js +0 -9
  108. package/dist/modules/configs/lib/system-status.js.map +2 -2
  109. package/dist/modules/currencies/backend/currencies/page.js +1 -3
  110. package/dist/modules/currencies/backend/currencies/page.js.map +2 -2
  111. package/dist/modules/currencies/backend/exchange-rates/page.js +1 -3
  112. package/dist/modules/currencies/backend/exchange-rates/page.js.map +2 -2
  113. package/dist/modules/customer_accounts/api/admin/domain-mappings.js +0 -9
  114. package/dist/modules/customer_accounts/api/admin/domain-mappings.js.map +2 -2
  115. package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js +1 -3
  116. package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js.map +2 -2
  117. package/dist/modules/customer_accounts/backend/customer_accounts/settings/CustomerAccountsSettingsPageClient.js +84 -0
  118. package/dist/modules/customer_accounts/backend/customer_accounts/settings/CustomerAccountsSettingsPageClient.js.map +7 -0
  119. package/dist/modules/customer_accounts/backend/customer_accounts/settings/page.js +7 -81
  120. package/dist/modules/customer_accounts/backend/customer_accounts/settings/page.js.map +2 -2
  121. package/dist/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.js +523 -0
  122. package/dist/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.js.map +7 -0
  123. package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/PortalUserDetailPageClient.js +731 -0
  124. package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/PortalUserDetailPageClient.js.map +7 -0
  125. package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js +7 -727
  126. package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js.map +2 -2
  127. package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js +7 -521
  128. package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js.map +2 -2
  129. package/dist/modules/customer_accounts/extension-points.js +1 -1
  130. package/dist/modules/customer_accounts/extension-points.js.map +2 -2
  131. package/dist/modules/customer_accounts/lib/portalUrl.js +69 -0
  132. package/dist/modules/customer_accounts/lib/portalUrl.js.map +7 -0
  133. package/dist/modules/customer_accounts/services/domainMappingService.js +0 -10
  134. package/dist/modules/customer_accounts/services/domainMappingService.js.map +2 -2
  135. package/dist/modules/customers/ai-tools/companies-pack.js +1 -4
  136. package/dist/modules/customers/ai-tools/companies-pack.js.map +2 -2
  137. package/dist/modules/customers/ai-tools/deal-analyzer-pack.js +2 -13
  138. package/dist/modules/customers/ai-tools/deal-analyzer-pack.js.map +2 -2
  139. package/dist/modules/customers/ai-tools/deals-pack.js +6 -52
  140. package/dist/modules/customers/ai-tools/deals-pack.js.map +2 -2
  141. package/dist/modules/customers/ai-tools/people-pack.js +1 -4
  142. package/dist/modules/customers/ai-tools/people-pack.js.map +2 -2
  143. package/dist/modules/customers/api/activities/route.js +6 -48
  144. package/dist/modules/customers/api/activities/route.js.map +2 -2
  145. package/dist/modules/customers/api/companies/[id]/people/route.js +64 -20
  146. package/dist/modules/customers/api/companies/[id]/people/route.js.map +2 -2
  147. package/dist/modules/customers/api/companies/[id]/route.js +94 -17
  148. package/dist/modules/customers/api/companies/[id]/route.js.map +2 -2
  149. package/dist/modules/customers/api/dashboard/widgets/customer-todos/route.js +5 -8
  150. package/dist/modules/customers/api/dashboard/widgets/customer-todos/route.js.map +2 -2
  151. package/dist/modules/customers/api/deals/[id]/companies/route.js +1 -1
  152. package/dist/modules/customers/api/deals/[id]/companies/route.js.map +2 -2
  153. package/dist/modules/customers/api/deals/[id]/people/route.js +1 -1
  154. package/dist/modules/customers/api/deals/[id]/people/route.js.map +2 -2
  155. package/dist/modules/customers/api/deals/[id]/route.js +25 -8
  156. package/dist/modules/customers/api/deals/[id]/route.js.map +2 -2
  157. package/dist/modules/customers/api/deals/[id]/stats/route.js +22 -3
  158. package/dist/modules/customers/api/deals/[id]/stats/route.js.map +2 -2
  159. package/dist/modules/customers/api/deals/aggregate/route.js +4 -11
  160. package/dist/modules/customers/api/deals/aggregate/route.js.map +2 -2
  161. package/dist/modules/customers/api/deals/map/route.js +1 -2
  162. package/dist/modules/customers/api/deals/map/route.js.map +2 -2
  163. package/dist/modules/customers/api/deals/route.js +1 -38
  164. package/dist/modules/customers/api/deals/route.js.map +2 -2
  165. package/dist/modules/customers/api/entity-roles-factory.js +4 -4
  166. package/dist/modules/customers/api/entity-roles-factory.js.map +2 -2
  167. package/dist/modules/customers/api/interactions/route.js +1 -3
  168. package/dist/modules/customers/api/interactions/route.js.map +2 -2
  169. package/dist/modules/customers/api/interactions/tasks/route.js +4 -27
  170. package/dist/modules/customers/api/interactions/tasks/route.js.map +2 -2
  171. package/dist/modules/customers/api/people/[id]/companies/[linkId]/route.js +3 -4
  172. package/dist/modules/customers/api/people/[id]/companies/[linkId]/route.js.map +2 -2
  173. package/dist/modules/customers/api/people/[id]/companies/context.js +1 -1
  174. package/dist/modules/customers/api/people/[id]/companies/context.js.map +2 -2
  175. package/dist/modules/customers/api/people/[id]/companies/enriched/route.js +1 -1
  176. package/dist/modules/customers/api/people/[id]/companies/enriched/route.js.map +2 -2
  177. package/dist/modules/customers/api/people/[id]/route.js +10 -11
  178. package/dist/modules/customers/api/people/[id]/route.js.map +2 -2
  179. package/dist/modules/customers/api/people/check-phone/route.js +9 -51
  180. package/dist/modules/customers/api/people/check-phone/route.js.map +2 -2
  181. package/dist/modules/customers/api/todos/route.js +5 -30
  182. package/dist/modules/customers/api/todos/route.js.map +2 -2
  183. package/dist/modules/customers/backend/customers/companies/page.js +4 -6
  184. package/dist/modules/customers/backend/customers/companies/page.js.map +2 -2
  185. package/dist/modules/customers/backend/customers/deals/[id]/page.js +1 -6
  186. package/dist/modules/customers/backend/customers/deals/[id]/page.js.map +2 -2
  187. package/dist/modules/customers/backend/customers/deals/page.js +4 -7
  188. package/dist/modules/customers/backend/customers/deals/page.js.map +2 -2
  189. package/dist/modules/customers/backend/customers/deals/pipeline/components/Lane.js +13 -4
  190. package/dist/modules/customers/backend/customers/deals/pipeline/components/Lane.js.map +2 -2
  191. package/dist/modules/customers/backend/customers/deals/pipeline/components/StatusFilterPopover.js +14 -85
  192. package/dist/modules/customers/backend/customers/deals/pipeline/components/StatusFilterPopover.js.map +2 -2
  193. package/dist/modules/customers/backend/customers/people/page.js +4 -6
  194. package/dist/modules/customers/backend/customers/people/page.js.map +2 -2
  195. package/dist/modules/customers/backend/hooks/useEmailDuplicateCheck.js +3 -9
  196. package/dist/modules/customers/backend/hooks/useEmailDuplicateCheck.js.map +2 -2
  197. package/dist/modules/customers/commands/deals.js +34 -21
  198. package/dist/modules/customers/commands/deals.js.map +2 -2
  199. package/dist/modules/customers/commands/interactions.js.map +1 -1
  200. package/dist/modules/customers/commands/personCompanyLinks.js +2 -131
  201. package/dist/modules/customers/commands/personCompanyLinks.js.map +2 -2
  202. package/dist/modules/customers/components/CustomerTodosTable.js +0 -1
  203. package/dist/modules/customers/components/CustomerTodosTable.js.map +2 -2
  204. package/dist/modules/customers/components/DealsKpiStrip.js +6 -7
  205. package/dist/modules/customers/components/DealsKpiStrip.js.map +2 -2
  206. package/dist/modules/customers/components/calendar/AgendaList.js +2 -2
  207. package/dist/modules/customers/components/calendar/AgendaList.js.map +2 -2
  208. package/dist/modules/customers/components/calendar/CalendarEventEditor.js +1 -1
  209. package/dist/modules/customers/components/calendar/CalendarEventEditor.js.map +2 -2
  210. package/dist/modules/customers/components/calendar/CalendarScreen.js +1 -1
  211. package/dist/modules/customers/components/calendar/CalendarScreen.js.map +2 -2
  212. package/dist/modules/customers/components/calendar/CalendarSettingsModal.js +1 -1
  213. package/dist/modules/customers/components/calendar/CalendarSettingsModal.js.map +2 -2
  214. package/dist/modules/customers/components/calendar/EventBlock.js +1 -1
  215. package/dist/modules/customers/components/calendar/EventBlock.js.map +2 -2
  216. package/dist/modules/customers/components/calendar/EventPeekPopover.js +2 -3
  217. package/dist/modules/customers/components/calendar/EventPeekPopover.js.map +2 -2
  218. package/dist/modules/customers/components/calendar/editor/PeopleField.js +5 -40
  219. package/dist/modules/customers/components/calendar/editor/PeopleField.js.map +2 -2
  220. package/dist/modules/customers/components/calendar/editor/hooks.js +1 -2
  221. package/dist/modules/customers/components/calendar/editor/hooks.js.map +2 -2
  222. package/dist/modules/customers/components/calendar/types.js +1 -1
  223. package/dist/modules/customers/components/calendar/types.js.map +2 -2
  224. package/dist/modules/customers/components/detail/AssignRoleDialog.js +33 -28
  225. package/dist/modules/customers/components/detail/AssignRoleDialog.js.map +2 -2
  226. package/dist/modules/customers/components/detail/CompanyKpiBar.js +4 -5
  227. package/dist/modules/customers/components/detail/CompanyKpiBar.js.map +2 -2
  228. package/dist/modules/customers/components/detail/CompanyPeopleSection.js +1 -3
  229. package/dist/modules/customers/components/detail/CompanyPeopleSection.js.map +2 -2
  230. package/dist/modules/customers/components/detail/DealForm.js +7 -19
  231. package/dist/modules/customers/components/detail/DealForm.js.map +2 -2
  232. package/dist/modules/customers/components/detail/DealsSection.js +5 -6
  233. package/dist/modules/customers/components/detail/DealsSection.js.map +2 -2
  234. package/dist/modules/customers/components/detail/EntityTagsDialog.js +11 -35
  235. package/dist/modules/customers/components/detail/EntityTagsDialog.js.map +2 -2
  236. package/dist/modules/customers/components/detail/PersonCompaniesSection.js +1 -3
  237. package/dist/modules/customers/components/detail/PersonCompaniesSection.js.map +2 -2
  238. package/dist/modules/customers/components/detail/hooks/usePersonTasks.js +13 -19
  239. package/dist/modules/customers/components/detail/hooks/usePersonTasks.js.map +2 -2
  240. package/dist/modules/customers/components/detail/schedule/ParticipantsField.js +4 -4
  241. package/dist/modules/customers/components/detail/schedule/ParticipantsField.js.map +2 -2
  242. package/dist/modules/customers/components/detail/schedule/useScheduleFormState.js +3 -3
  243. package/dist/modules/customers/components/detail/schedule/useScheduleFormState.js.map +2 -2
  244. package/dist/modules/customers/components/detail/utils.js +5 -5
  245. package/dist/modules/customers/components/detail/utils.js.map +2 -2
  246. package/dist/modules/customers/data/entities.js.map +1 -1
  247. package/dist/modules/customers/data/validators.js +3 -32
  248. package/dist/modules/customers/data/validators.js.map +2 -2
  249. package/dist/modules/customers/events.js +0 -5
  250. package/dist/modules/customers/events.js.map +2 -2
  251. package/dist/modules/customers/lib/calendar/conflicts.js +2 -8
  252. package/dist/modules/customers/lib/calendar/conflicts.js.map +2 -2
  253. package/dist/modules/customers/lib/calendar/editorPayload.js +2 -3
  254. package/dist/modules/customers/lib/calendar/editorPayload.js.map +2 -2
  255. package/dist/modules/customers/lib/calendar/mapItem.js +3 -8
  256. package/dist/modules/customers/lib/calendar/mapItem.js.map +2 -2
  257. package/dist/modules/customers/lib/dealStatus.js +0 -30
  258. package/dist/modules/customers/lib/dealStatus.js.map +2 -2
  259. package/dist/modules/customers/lib/findPeopleByAddresses.js +0 -1
  260. package/dist/modules/customers/lib/findPeopleByAddresses.js.map +2 -2
  261. package/dist/modules/customers/lib/personCompanies.js +2 -100
  262. package/dist/modules/customers/lib/personCompanies.js.map +2 -2
  263. package/dist/modules/customers/lib/todoCompatibility.js +0 -12
  264. package/dist/modules/customers/lib/todoCompatibility.js.map +2 -2
  265. package/dist/modules/dashboards/lib/widgetScope.js +1 -6
  266. package/dist/modules/dashboards/lib/widgetScope.js.map +2 -2
  267. package/dist/modules/data_sync/backend/data-sync/page.js +1 -3
  268. package/dist/modules/data_sync/backend/data-sync/page.js.map +2 -2
  269. package/dist/modules/data_sync/lib/sync-engine.js +6 -72
  270. package/dist/modules/data_sync/lib/sync-engine.js.map +2 -2
  271. package/dist/modules/data_sync/workers/sync-export.js +1 -5
  272. package/dist/modules/data_sync/workers/sync-export.js.map +2 -2
  273. package/dist/modules/data_sync/workers/sync-import.js +1 -5
  274. package/dist/modules/data_sync/workers/sync-import.js.map +2 -2
  275. package/dist/modules/devices/api/admin/devices/[id]/route.js +32 -5
  276. package/dist/modules/devices/api/admin/devices/[id]/route.js.map +2 -2
  277. package/dist/modules/devices/api/admin/devices/route.js +1 -14
  278. package/dist/modules/devices/api/admin/devices/route.js.map +2 -2
  279. package/dist/modules/devices/api/deviceList.js +12 -99
  280. package/dist/modules/devices/api/deviceList.js.map +2 -2
  281. package/dist/modules/devices/api/openapi.js +1 -3
  282. package/dist/modules/devices/api/openapi.js.map +2 -2
  283. package/dist/modules/devices/api/route.js +1 -9
  284. package/dist/modules/devices/api/route.js.map +2 -2
  285. package/dist/modules/devices/backend/devices/[id]/page.js +8 -8
  286. package/dist/modules/devices/backend/devices/[id]/page.js.map +2 -2
  287. package/dist/modules/devices/backend/devices/page.js +13 -15
  288. package/dist/modules/devices/backend/devices/page.js.map +2 -2
  289. package/dist/modules/directory/backend/directory/organizations/page.js +1 -2
  290. package/dist/modules/directory/backend/directory/organizations/page.js.map +2 -2
  291. package/dist/modules/directory/backend/directory/tenants/page.js +1 -2
  292. package/dist/modules/directory/backend/directory/tenants/page.js.map +2 -2
  293. package/dist/modules/directory/di.js +0 -9
  294. package/dist/modules/directory/di.js.map +2 -2
  295. package/dist/modules/directory/utils/organizationScope.js.map +2 -2
  296. package/dist/modules/entities/api/records.js +2 -4
  297. package/dist/modules/entities/api/records.js.map +2 -2
  298. package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js +1 -3
  299. package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js.map +2 -2
  300. package/dist/modules/eudr/api/plots/route.js +1 -5
  301. package/dist/modules/eudr/api/plots/route.js.map +2 -2
  302. package/dist/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.js +3 -1
  303. package/dist/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.js.map +2 -2
  304. package/dist/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.js +1 -0
  305. package/dist/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.js.map +2 -2
  306. package/dist/modules/eudr/backend/eudr/evidence-submissions/page.js +0 -3
  307. package/dist/modules/eudr/backend/eudr/evidence-submissions/page.js.map +2 -2
  308. package/dist/modules/eudr/backend/eudr/evidence-submissions/page.meta.js +4 -1
  309. package/dist/modules/eudr/backend/eudr/evidence-submissions/page.meta.js.map +2 -2
  310. package/dist/modules/eudr/backend/eudr/page.meta.js +2 -2
  311. package/dist/modules/eudr/backend/eudr/page.meta.js.map +2 -2
  312. package/dist/modules/eudr/backend/eudr/plots/[id]/page.js +8 -2
  313. package/dist/modules/eudr/backend/eudr/plots/[id]/page.js.map +2 -2
  314. package/dist/modules/eudr/backend/eudr/plots/[id]/page.meta.js +3 -1
  315. package/dist/modules/eudr/backend/eudr/plots/[id]/page.meta.js.map +2 -2
  316. package/dist/modules/eudr/backend/eudr/plots/create/page.js +8 -2
  317. package/dist/modules/eudr/backend/eudr/plots/create/page.js.map +2 -2
  318. package/dist/modules/eudr/backend/eudr/plots/create/page.meta.js +1 -0
  319. package/dist/modules/eudr/backend/eudr/plots/create/page.meta.js.map +2 -2
  320. package/dist/modules/eudr/backend/eudr/plots/page.js +0 -3
  321. package/dist/modules/eudr/backend/eudr/plots/page.js.map +2 -2
  322. package/dist/modules/eudr/backend/eudr/plots/page.meta.js +4 -1
  323. package/dist/modules/eudr/backend/eudr/plots/page.meta.js.map +2 -2
  324. package/dist/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.js +3 -1
  325. package/dist/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.js.map +2 -2
  326. package/dist/modules/eudr/backend/eudr/product-mappings/create/page.meta.js +1 -0
  327. package/dist/modules/eudr/backend/eudr/product-mappings/create/page.meta.js.map +2 -2
  328. package/dist/modules/eudr/backend/eudr/product-mappings/page.js +0 -3
  329. package/dist/modules/eudr/backend/eudr/product-mappings/page.js.map +2 -2
  330. package/dist/modules/eudr/backend/eudr/product-mappings/page.meta.js +4 -1
  331. package/dist/modules/eudr/backend/eudr/product-mappings/page.meta.js.map +2 -2
  332. package/dist/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.js +3 -1
  333. package/dist/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.js.map +2 -2
  334. package/dist/modules/eudr/backend/eudr/risk-assessments/create/page.meta.js +1 -0
  335. package/dist/modules/eudr/backend/eudr/risk-assessments/create/page.meta.js.map +2 -2
  336. package/dist/modules/eudr/backend/eudr/risk-assessments/page.js +0 -3
  337. package/dist/modules/eudr/backend/eudr/risk-assessments/page.js.map +2 -2
  338. package/dist/modules/eudr/backend/eudr/risk-assessments/page.meta.js +4 -1
  339. package/dist/modules/eudr/backend/eudr/risk-assessments/page.meta.js.map +2 -2
  340. package/dist/modules/eudr/backend/eudr/statements/[id]/page.js +2 -0
  341. package/dist/modules/eudr/backend/eudr/statements/[id]/page.js.map +2 -2
  342. package/dist/modules/eudr/backend/eudr/statements/[id]/page.meta.js +3 -1
  343. package/dist/modules/eudr/backend/eudr/statements/[id]/page.meta.js.map +2 -2
  344. package/dist/modules/eudr/backend/eudr/statements/create/page.meta.js +1 -0
  345. package/dist/modules/eudr/backend/eudr/statements/create/page.meta.js.map +2 -2
  346. package/dist/modules/eudr/backend/eudr/statements/page.js +30 -28
  347. package/dist/modules/eudr/backend/eudr/statements/page.js.map +2 -2
  348. package/dist/modules/eudr/backend/eudr/statements/page.meta.js +4 -1
  349. package/dist/modules/eudr/backend/eudr/statements/page.meta.js.map +2 -2
  350. package/dist/modules/eudr/commands/statements.js +8 -3
  351. package/dist/modules/eudr/commands/statements.js.map +2 -2
  352. package/dist/modules/eudr/components/crudErrorI18n.js +21 -1
  353. package/dist/modules/eudr/components/crudErrorI18n.js.map +2 -2
  354. package/dist/modules/eudr/components/formConfig.js +6 -2
  355. package/dist/modules/eudr/components/formConfig.js.map +2 -2
  356. package/dist/modules/eudr/data/validators.js +1 -4
  357. package/dist/modules/eudr/data/validators.js.map +2 -2
  358. package/dist/modules/eudr/lib/statement-lifecycle.js +9 -1
  359. package/dist/modules/eudr/lib/statement-lifecycle.js.map +2 -2
  360. package/dist/modules/feature_toggles/components/FeatureTogglesTable.js +0 -1
  361. package/dist/modules/feature_toggles/components/FeatureTogglesTable.js.map +2 -2
  362. package/dist/modules/feature_toggles/components/OverridesTable.js +0 -1
  363. package/dist/modules/feature_toggles/components/OverridesTable.js.map +2 -2
  364. package/dist/modules/feature_toggles/defaults.json +8 -0
  365. package/dist/modules/inbox_ops/backend/inbox-ops/log/page.js +0 -3
  366. package/dist/modules/inbox_ops/backend/inbox-ops/log/page.js.map +2 -2
  367. package/dist/modules/inbox_ops/backend/inbox-ops/page.js +0 -3
  368. package/dist/modules/inbox_ops/backend/inbox-ops/page.js.map +2 -2
  369. package/dist/modules/inbox_ops/lib/htmlToPlainText.js +12 -1
  370. package/dist/modules/inbox_ops/lib/htmlToPlainText.js.map +2 -2
  371. package/dist/modules/integrations/api/[id]/credentials/route.js +1 -6
  372. package/dist/modules/integrations/api/[id]/credentials/route.js.map +2 -2
  373. package/dist/modules/integrations/backend/integrations/[id]/page.js +29 -38
  374. package/dist/modules/integrations/backend/integrations/[id]/page.js.map +2 -2
  375. package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js +9 -36
  376. package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js.map +2 -2
  377. package/dist/modules/integrations/data/validators.js +3 -11
  378. package/dist/modules/integrations/data/validators.js.map +2 -2
  379. package/dist/modules/integrations/lib/credentials-masking.js +2 -6
  380. package/dist/modules/integrations/lib/credentials-masking.js.map +2 -2
  381. package/dist/modules/messages/api/[id]/route.js +1 -29
  382. package/dist/modules/messages/api/[id]/route.js.map +2 -2
  383. package/dist/modules/messages/api/openapi.js +2 -17
  384. package/dist/modules/messages/api/openapi.js.map +2 -2
  385. package/dist/modules/messages/api/route.js +2 -17
  386. package/dist/modules/messages/api/route.js.map +2 -2
  387. package/dist/modules/messages/components/MessagesInboxPageClient.js +14 -7
  388. package/dist/modules/messages/components/MessagesInboxPageClient.js.map +2 -2
  389. package/dist/modules/messages/components/inboxFilters.js +0 -15
  390. package/dist/modules/messages/components/inboxFilters.js.map +2 -2
  391. package/dist/modules/messages/components/message-detail/hooks/useMessageDetailsConversation.js +1 -11
  392. package/dist/modules/messages/components/message-detail/hooks/useMessageDetailsConversation.js.map +2 -2
  393. package/dist/modules/messages/components/message-detail/panels/MessageHeader.js +1 -3
  394. package/dist/modules/messages/components/message-detail/panels/MessageHeader.js.map +2 -2
  395. package/dist/modules/messages/components/message-detail/panels/thread-panel.js +1 -2
  396. package/dist/modules/messages/components/message-detail/panels/thread-panel.js.map +2 -2
  397. package/dist/modules/messages/components/messageListLabels.js +2 -14
  398. package/dist/modules/messages/components/messageListLabels.js.map +2 -2
  399. package/dist/modules/messages/data/validators.js +4 -18
  400. package/dist/modules/messages/data/validators.js.map +2 -2
  401. package/dist/modules/payment_gateways/api/webhook/[provider]/route.js +6 -4
  402. package/dist/modules/payment_gateways/api/webhook/[provider]/route.js.map +2 -2
  403. package/dist/modules/payment_gateways/backend/payment-gateways/page.js +1 -3
  404. package/dist/modules/payment_gateways/backend/payment-gateways/page.js.map +2 -2
  405. package/dist/modules/payment_gateways/lib/webhook-processor.js +0 -7
  406. package/dist/modules/payment_gateways/lib/webhook-processor.js.map +2 -2
  407. package/dist/modules/planner/backend/planner/availability-rulesets/page.js +0 -3
  408. package/dist/modules/planner/backend/planner/availability-rulesets/page.js.map +2 -2
  409. package/dist/modules/push_notifications/backend/push_notifications/page.js +1 -3
  410. package/dist/modules/push_notifications/backend/push_notifications/page.js.map +2 -2
  411. package/dist/modules/push_notifications/backend/push_notifications/send/page.js +1 -1
  412. package/dist/modules/push_notifications/backend/push_notifications/send/page.js.map +2 -2
  413. package/dist/modules/query_index/lib/engine.js +51 -150
  414. package/dist/modules/query_index/lib/engine.js.map +2 -2
  415. package/dist/modules/query_index/lib/search-tokens.js +3 -79
  416. package/dist/modules/query_index/lib/search-tokens.js.map +2 -2
  417. package/dist/modules/resources/backend/resources/resource-types/page.js +1 -3
  418. package/dist/modules/resources/backend/resources/resource-types/page.js.map +2 -2
  419. package/dist/modules/resources/backend/resources/resources/page.js +1 -3
  420. package/dist/modules/resources/backend/resources/resources/page.js.map +2 -2
  421. package/dist/modules/sales/backend/sales/channels/offers/page.js +0 -3
  422. package/dist/modules/sales/backend/sales/channels/offers/page.js.map +2 -2
  423. package/dist/modules/sales/backend/sales/channels/page.js +0 -3
  424. package/dist/modules/sales/backend/sales/channels/page.js.map +2 -2
  425. package/dist/modules/sales/backend/sales/documents/[id]/page.js +8 -10
  426. package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
  427. package/dist/modules/sales/commands/documents.js +1 -79
  428. package/dist/modules/sales/commands/documents.js.map +2 -2
  429. package/dist/modules/sales/components/PriceWithCurrency.js +5 -7
  430. package/dist/modules/sales/components/PriceWithCurrency.js.map +2 -2
  431. package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js +0 -3
  432. package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js.map +2 -2
  433. package/dist/modules/sales/components/documents/AdjustmentsSection.js +6 -8
  434. package/dist/modules/sales/components/documents/AdjustmentsSection.js.map +2 -2
  435. package/dist/modules/sales/components/documents/ItemsSection.js +22 -51
  436. package/dist/modules/sales/components/documents/ItemsSection.js.map +2 -2
  437. package/dist/modules/sales/components/documents/LineItemDialog.js +19 -84
  438. package/dist/modules/sales/components/documents/LineItemDialog.js.map +2 -2
  439. package/dist/modules/sales/components/documents/PaymentsSection.js +9 -23
  440. package/dist/modules/sales/components/documents/PaymentsSection.js.map +2 -2
  441. package/dist/modules/sales/components/documents/ReturnsSection.js +6 -8
  442. package/dist/modules/sales/components/documents/ReturnsSection.js.map +2 -2
  443. package/dist/modules/sales/components/documents/SalesDocumentsTable.js +14 -68
  444. package/dist/modules/sales/components/documents/SalesDocumentsTable.js.map +2 -2
  445. package/dist/modules/sales/components/documents/SalesOrderDraftLines.js +5 -6
  446. package/dist/modules/sales/components/documents/SalesOrderDraftLines.js.map +2 -2
  447. package/dist/modules/sales/components/documents/ShipmentDialog.js +4 -5
  448. package/dist/modules/sales/components/documents/ShipmentDialog.js.map +2 -2
  449. package/dist/modules/sales/components/documents/ShipmentsSection.js +6 -8
  450. package/dist/modules/sales/components/documents/ShipmentsSection.js.map +2 -2
  451. package/dist/modules/sales/components/documents/lineItemUtils.js +2 -2
  452. package/dist/modules/sales/components/documents/lineItemUtils.js.map +2 -2
  453. package/dist/modules/sales/data/entities.js +2 -8
  454. package/dist/modules/sales/data/entities.js.map +2 -2
  455. package/dist/modules/sales/extension-points.js +0 -1
  456. package/dist/modules/sales/extension-points.js.map +2 -2
  457. package/dist/modules/sales/setup.js +0 -2
  458. package/dist/modules/sales/setup.js.map +2 -2
  459. package/dist/modules/sales/widgets/injection/document-history/widget.client.js +44 -2
  460. package/dist/modules/sales/widgets/injection/document-history/widget.client.js.map +2 -2
  461. package/dist/modules/sales/widgets/injection/payment-gateway-status-column/widget.js +2 -10
  462. package/dist/modules/sales/widgets/injection/payment-gateway-status-column/widget.js.map +2 -2
  463. package/dist/modules/sales/widgets/injection-table.js +7 -4
  464. package/dist/modules/sales/widgets/injection-table.js.map +2 -2
  465. package/dist/modules/staff/backend/staff/leave-requests/page.js +0 -3
  466. package/dist/modules/staff/backend/staff/leave-requests/page.js.map +2 -2
  467. package/dist/modules/staff/backend/staff/my-leave-requests/page.js +0 -3
  468. package/dist/modules/staff/backend/staff/my-leave-requests/page.js.map +2 -2
  469. package/dist/modules/staff/backend/staff/team-members/page.js +0 -3
  470. package/dist/modules/staff/backend/staff/team-members/page.js.map +2 -2
  471. package/dist/modules/staff/backend/staff/team-roles/page.js +0 -3
  472. package/dist/modules/staff/backend/staff/team-roles/page.js.map +2 -2
  473. package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js +0 -3
  474. package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js.map +2 -2
  475. package/dist/modules/staff/backend/staff/teams/page.js +0 -3
  476. package/dist/modules/staff/backend/staff/teams/page.js.map +2 -2
  477. package/dist/modules/staff/backend/staff/timesheets/page.js +18 -29
  478. package/dist/modules/staff/backend/staff/timesheets/page.js.map +2 -2
  479. package/dist/modules/staff/backend/staff/timesheets/projects/page.js +0 -3
  480. package/dist/modules/staff/backend/staff/timesheets/projects/page.js.map +2 -2
  481. package/dist/modules/sync_excel/lib/adapters/customers.js +0 -1
  482. package/dist/modules/sync_excel/lib/adapters/customers.js.map +2 -2
  483. package/dist/modules/warranty_claims/api/assignees/route.js +3 -3
  484. package/dist/modules/warranty_claims/api/assignees/route.js.map +2 -2
  485. package/dist/modules/warranty_claims/api/portal/attachments/route.js +2 -2
  486. package/dist/modules/warranty_claims/api/portal/attachments/route.js.map +2 -2
  487. package/dist/modules/warranty_claims/api/portal/claims/route.js +9 -12
  488. package/dist/modules/warranty_claims/api/portal/claims/route.js.map +2 -2
  489. package/dist/modules/warranty_claims/backend/page.js +0 -3
  490. package/dist/modules/warranty_claims/backend/page.js.map +2 -2
  491. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.js +0 -3
  492. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.js.map +2 -2
  493. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.js +0 -3
  494. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.js.map +2 -2
  495. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.js +0 -3
  496. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.js.map +2 -2
  497. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.js +0 -3
  498. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.js.map +2 -2
  499. package/dist/modules/wms/api/warehouses/route.js +9 -13
  500. package/dist/modules/wms/api/warehouses/route.js.map +2 -2
  501. package/dist/modules/wms/api/zones/route.js +2 -15
  502. package/dist/modules/wms/api/zones/route.js.map +2 -2
  503. package/dist/modules/wms/commands/configuration.js +9 -121
  504. package/dist/modules/wms/commands/configuration.js.map +2 -2
  505. package/dist/modules/wms/commands/inventory-actions.js +0 -3
  506. package/dist/modules/wms/commands/inventory-actions.js.map +2 -2
  507. package/dist/modules/wms/commands/shared.js +1 -9
  508. package/dist/modules/wms/commands/shared.js.map +2 -2
  509. package/dist/modules/wms/components/backend/WmsConfigurationPage.js +111 -76
  510. package/dist/modules/wms/components/backend/WmsConfigurationPage.js.map +3 -3
  511. package/dist/modules/wms/components/backend/WmsInventoryConsolePage.js +0 -1
  512. package/dist/modules/wms/components/backend/WmsInventoryConsolePage.js.map +2 -2
  513. package/dist/modules/wms/components/backend/WmsLocationDetailPage.js +20 -16
  514. package/dist/modules/wms/components/backend/WmsLocationDetailPage.js.map +2 -2
  515. package/dist/modules/wms/components/backend/WmsLotDetailPage.js +10 -6
  516. package/dist/modules/wms/components/backend/WmsLotDetailPage.js.map +2 -2
  517. package/dist/modules/wms/components/backend/WmsLotsListPage.js +0 -1
  518. package/dist/modules/wms/components/backend/WmsLotsListPage.js.map +2 -2
  519. package/dist/modules/wms/components/backend/WmsOperationalDashboardPage.js +11 -7
  520. package/dist/modules/wms/components/backend/WmsOperationalDashboardPage.js.map +2 -2
  521. package/dist/modules/wms/components/backend/WmsSkuDetailPage.js +10 -6
  522. package/dist/modules/wms/components/backend/WmsSkuDetailPage.js.map +2 -2
  523. package/dist/modules/wms/components/backend/inventoryMutationLoaders.js +20 -27
  524. package/dist/modules/wms/components/backend/inventoryMutationLoaders.js.map +2 -2
  525. package/dist/modules/workflows/backend/definitions/page.js +1 -3
  526. package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
  527. package/dist/modules/workflows/backend/events/page.js +1 -3
  528. package/dist/modules/workflows/backend/events/page.js.map +2 -2
  529. package/dist/modules/workflows/backend/instances/page.js +1 -3
  530. package/dist/modules/workflows/backend/instances/page.js.map +2 -2
  531. package/dist/modules/workflows/backend/tasks/page.js +1 -3
  532. package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
  533. package/dist/modules/workflows/lib/activity-executor.js +0 -4
  534. package/dist/modules/workflows/lib/activity-executor.js.map +2 -2
  535. package/package.json +10 -9
  536. package/src/helpers/integration/api.ts +1 -33
  537. package/src/helpers/integration/communicationChannelsFixtures.ts +1 -69
  538. package/src/modules/api_keys/api/keys/route.ts +1 -3
  539. package/src/modules/api_keys/backend/api-keys/page.tsx +1 -4
  540. package/src/modules/attachments/AGENTS.md +0 -15
  541. package/src/modules/attachments/api/route.ts +2 -2
  542. package/src/modules/attachments/components/AttachmentLibrary.tsx +0 -3
  543. package/src/modules/attachments/di.ts +0 -16
  544. package/src/modules/attachments/i18n/de.json +0 -5
  545. package/src/modules/attachments/i18n/en.json +0 -5
  546. package/src/modules/attachments/i18n/es.json +0 -5
  547. package/src/modules/attachments/i18n/ko.json +0 -5
  548. package/src/modules/attachments/i18n/pl.json +0 -5
  549. package/src/modules/attachments/index.ts +0 -10
  550. package/src/modules/attachments/lib/scoped-upload-service.ts +0 -46
  551. package/src/modules/attachments/lib/upload-limits.ts +2 -6
  552. package/src/modules/audit_logs/backend/audit-logs/page.tsx +0 -8
  553. package/src/modules/audit_logs/lib/display-helpers.tsx +32 -42
  554. package/src/modules/audit_logs/services/actionLogService.ts +11 -74
  555. package/src/modules/auth/acl.ts +6 -30
  556. package/src/modules/auth/api/feature-check.ts +3 -10
  557. package/src/modules/auth/api/login.ts +24 -9
  558. package/src/modules/auth/api/roles/acl/route.ts +39 -42
  559. package/src/modules/auth/api/routeError.ts +30 -0
  560. package/src/modules/auth/api/session/refresh.ts +1 -32
  561. package/src/modules/auth/api/users/acl/route.ts +101 -185
  562. package/src/modules/auth/backend/roles/[id]/edit/page.meta.ts +2 -5
  563. package/src/modules/auth/backend/roles/page.tsx +2 -4
  564. package/src/modules/auth/backend/users/[id]/edit/page.meta.ts +2 -5
  565. package/src/modules/auth/backend/users/page.tsx +2 -3
  566. package/src/modules/auth/components/AclEditor.tsx +33 -63
  567. package/src/modules/auth/data/entities.ts +1 -4
  568. package/src/modules/auth/data/validators.ts +0 -5
  569. package/src/modules/auth/di.ts +16 -46
  570. package/src/modules/auth/frontend/reset/[token]/page.tsx +0 -74
  571. package/src/modules/auth/i18n/de.json +0 -389
  572. package/src/modules/auth/i18n/en.json +0 -389
  573. package/src/modules/auth/i18n/es.json +0 -389
  574. package/src/modules/auth/i18n/ko.json +0 -389
  575. package/src/modules/auth/i18n/pl.json +2 -391
  576. package/src/modules/auth/lib/grantChecks.ts +0 -6
  577. package/src/modules/auth/services/authService.ts +2 -18
  578. package/src/modules/auth/services/rbacService.ts +24 -110
  579. package/src/modules/business_rules/backend/logs/page.tsx +1 -4
  580. package/src/modules/business_rules/backend/rules/[id]/page.meta.ts +5 -0
  581. package/src/modules/business_rules/backend/rules/create/page.meta.ts +5 -1
  582. package/src/modules/business_rules/backend/rules/page.tsx +1 -4
  583. package/src/modules/business_rules/backend/sets/[id]/page.meta.ts +5 -0
  584. package/src/modules/business_rules/backend/sets/create/page.meta.ts +5 -1
  585. package/src/modules/business_rules/backend/sets/page.tsx +1 -4
  586. package/src/modules/business_rules/lib/expression-evaluator.ts +9 -9
  587. package/src/modules/business_rules/lib/rule-evaluator.ts +9 -10
  588. package/src/modules/catalog/ai-agents.ts +1 -1
  589. package/src/modules/catalog/ai-tools/merchandising-pack.ts +2 -2
  590. package/src/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.tsx +5 -12
  591. package/src/modules/catalog/components/categories/CategoriesDataTable.tsx +0 -3
  592. package/src/modules/catalog/components/products/ProductsDataTable.tsx +0 -7
  593. package/src/modules/catalog/i18n/de.json +0 -1
  594. package/src/modules/catalog/i18n/en.json +0 -1
  595. package/src/modules/catalog/i18n/es.json +0 -1
  596. package/src/modules/catalog/i18n/ko.json +0 -1
  597. package/src/modules/catalog/i18n/pl.json +0 -1
  598. package/src/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.tsx +0 -4
  599. package/src/modules/communication_channels/api/post/channels/[id]/test-send/route.ts +1 -17
  600. package/src/modules/communication_channels/api/post/test-seed/route.ts +16 -155
  601. package/src/modules/communication_channels/backend/communication_channels/channels/page.tsx +0 -4
  602. package/src/modules/communication_channels/commands/ingest-inbound-message.ts +1 -38
  603. package/src/modules/communication_channels/di.ts +0 -7
  604. package/src/modules/communication_channels/lib/adapter.ts +0 -14
  605. package/src/modules/communication_channels/lib/email-capabilities.ts +0 -4
  606. package/src/modules/communication_channels/lib/test-seed.ts +4 -64
  607. package/src/modules/configs/i18n/de.json +0 -2
  608. package/src/modules/configs/i18n/en.json +0 -2
  609. package/src/modules/configs/i18n/es.json +0 -2
  610. package/src/modules/configs/i18n/ko.json +0 -2
  611. package/src/modules/configs/i18n/pl.json +0 -2
  612. package/src/modules/configs/lib/system-status.ts +0 -9
  613. package/src/modules/currencies/backend/currencies/page.tsx +1 -4
  614. package/src/modules/currencies/backend/exchange-rates/page.tsx +1 -4
  615. package/src/modules/customer_accounts/api/admin/domain-mappings.ts +0 -7
  616. package/src/modules/customer_accounts/backend/customer_accounts/roles/page.tsx +1 -4
  617. package/src/modules/customer_accounts/backend/customer_accounts/settings/CustomerAccountsSettingsPageClient.tsx +138 -0
  618. package/src/modules/customer_accounts/backend/customer_accounts/settings/page.tsx +8 -132
  619. package/src/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.tsx +598 -0
  620. package/src/modules/customer_accounts/backend/customer_accounts/users/[id]/PortalUserDetailPageClient.tsx +838 -0
  621. package/src/modules/customer_accounts/backend/customer_accounts/users/[id]/page.tsx +6 -838
  622. package/src/modules/customer_accounts/backend/customer_accounts/users/page.tsx +6 -590
  623. package/src/modules/customer_accounts/extension-points.ts +1 -1
  624. package/src/modules/customer_accounts/lib/portalUrl.ts +112 -0
  625. package/src/modules/customer_accounts/services/domainMappingService.ts +0 -10
  626. package/src/modules/customers/ai-tools/companies-pack.ts +1 -4
  627. package/src/modules/customers/ai-tools/deal-analyzer-pack.ts +2 -17
  628. package/src/modules/customers/ai-tools/deals-pack.ts +1 -66
  629. package/src/modules/customers/ai-tools/people-pack.ts +1 -4
  630. package/src/modules/customers/api/activities/route.ts +0 -45
  631. package/src/modules/customers/api/companies/[id]/people/route.ts +73 -24
  632. package/src/modules/customers/api/companies/[id]/route.ts +107 -24
  633. package/src/modules/customers/api/dashboard/widgets/customer-todos/route.ts +8 -16
  634. package/src/modules/customers/api/deals/[id]/companies/route.ts +1 -4
  635. package/src/modules/customers/api/deals/[id]/people/route.ts +1 -4
  636. package/src/modules/customers/api/deals/[id]/route.ts +28 -17
  637. package/src/modules/customers/api/deals/[id]/stats/route.ts +25 -10
  638. package/src/modules/customers/api/deals/aggregate/route.ts +4 -14
  639. package/src/modules/customers/api/deals/map/route.ts +0 -1
  640. package/src/modules/customers/api/deals/route.ts +1 -50
  641. package/src/modules/customers/api/entity-roles-factory.ts +4 -8
  642. package/src/modules/customers/api/interactions/route.ts +2 -8
  643. package/src/modules/customers/api/interactions/tasks/route.ts +1 -24
  644. package/src/modules/customers/api/people/[id]/companies/[linkId]/route.ts +4 -12
  645. package/src/modules/customers/api/people/[id]/companies/context.ts +1 -4
  646. package/src/modules/customers/api/people/[id]/companies/enriched/route.ts +1 -4
  647. package/src/modules/customers/api/people/[id]/route.ts +11 -16
  648. package/src/modules/customers/api/people/check-phone/route.ts +10 -75
  649. package/src/modules/customers/api/todos/route.ts +2 -27
  650. package/src/modules/customers/backend/customers/companies/page.tsx +4 -7
  651. package/src/modules/customers/backend/customers/deals/[id]/page.tsx +2 -7
  652. package/src/modules/customers/backend/customers/deals/page.tsx +4 -10
  653. package/src/modules/customers/backend/customers/deals/pipeline/components/Lane.tsx +14 -5
  654. package/src/modules/customers/backend/customers/deals/pipeline/components/StatusFilterPopover.tsx +27 -109
  655. package/src/modules/customers/backend/customers/people/page.tsx +4 -7
  656. package/src/modules/customers/backend/hooks/useEmailDuplicateCheck.ts +4 -12
  657. package/src/modules/customers/commands/deals.ts +59 -34
  658. package/src/modules/customers/commands/interactions.ts +1 -1
  659. package/src/modules/customers/commands/personCompanyLinks.ts +8 -224
  660. package/src/modules/customers/components/CustomerTodosTable.tsx +0 -2
  661. package/src/modules/customers/components/DealsKpiStrip.tsx +7 -7
  662. package/src/modules/customers/components/calendar/AgendaList.tsx +3 -3
  663. package/src/modules/customers/components/calendar/CalendarEventEditor.tsx +1 -1
  664. package/src/modules/customers/components/calendar/CalendarScreen.tsx +1 -1
  665. package/src/modules/customers/components/calendar/CalendarSettingsModal.tsx +1 -1
  666. package/src/modules/customers/components/calendar/EventBlock.tsx +2 -2
  667. package/src/modules/customers/components/calendar/EventPeekPopover.tsx +2 -4
  668. package/src/modules/customers/components/calendar/editor/PeopleField.tsx +5 -61
  669. package/src/modules/customers/components/calendar/editor/hooks.ts +1 -7
  670. package/src/modules/customers/components/calendar/types.ts +2 -2
  671. package/src/modules/customers/components/detail/AssignRoleDialog.tsx +12 -7
  672. package/src/modules/customers/components/detail/CompanyKpiBar.tsx +4 -5
  673. package/src/modules/customers/components/detail/CompanyPeopleSection.tsx +1 -8
  674. package/src/modules/customers/components/detail/DealForm.tsx +2 -22
  675. package/src/modules/customers/components/detail/DealsSection.tsx +5 -11
  676. package/src/modules/customers/components/detail/EntityTagsDialog.tsx +12 -58
  677. package/src/modules/customers/components/detail/PersonCompaniesSection.tsx +1 -8
  678. package/src/modules/customers/components/detail/hooks/usePersonTasks.ts +14 -23
  679. package/src/modules/customers/components/detail/schedule/ParticipantsField.tsx +5 -5
  680. package/src/modules/customers/components/detail/schedule/useScheduleFormState.ts +5 -5
  681. package/src/modules/customers/components/detail/types.ts +1 -1
  682. package/src/modules/customers/components/detail/utils.ts +5 -15
  683. package/src/modules/customers/data/entities.ts +1 -1
  684. package/src/modules/customers/data/validators.ts +9 -50
  685. package/src/modules/customers/events.ts +0 -5
  686. package/src/modules/customers/i18n/de.json +1 -9
  687. package/src/modules/customers/i18n/en.json +1 -9
  688. package/src/modules/customers/i18n/es.json +1 -9
  689. package/src/modules/customers/i18n/ko.json +1 -9
  690. package/src/modules/customers/i18n/pl.json +1 -9
  691. package/src/modules/customers/lib/calendar/conflicts.ts +2 -10
  692. package/src/modules/customers/lib/calendar/editorPayload.ts +3 -4
  693. package/src/modules/customers/lib/calendar/mapItem.ts +3 -8
  694. package/src/modules/customers/lib/dealStatus.ts +0 -42
  695. package/src/modules/customers/lib/findPeopleByAddresses.ts +6 -8
  696. package/src/modules/customers/lib/personCompanies.ts +1 -136
  697. package/src/modules/customers/lib/todoCompatibility.ts +1 -19
  698. package/src/modules/dashboards/i18n/es.json +4 -4
  699. package/src/modules/dashboards/i18n/pl.json +7 -7
  700. package/src/modules/dashboards/lib/widgetScope.ts +0 -6
  701. package/src/modules/data_sync/AGENTS.md +1 -1
  702. package/src/modules/data_sync/backend/data-sync/page.tsx +1 -4
  703. package/src/modules/data_sync/lib/adapter.ts +0 -36
  704. package/src/modules/data_sync/lib/sync-engine.ts +5 -113
  705. package/src/modules/data_sync/workers/sync-export.ts +0 -4
  706. package/src/modules/data_sync/workers/sync-import.ts +0 -4
  707. package/src/modules/devices/AGENTS.md +0 -8
  708. package/src/modules/devices/api/admin/devices/[id]/route.ts +34 -5
  709. package/src/modules/devices/api/admin/devices/route.ts +1 -14
  710. package/src/modules/devices/api/deviceList.ts +11 -135
  711. package/src/modules/devices/api/openapi.ts +1 -9
  712. package/src/modules/devices/api/route.ts +1 -9
  713. package/src/modules/devices/backend/devices/[id]/page.tsx +15 -15
  714. package/src/modules/devices/backend/devices/page.tsx +21 -24
  715. package/src/modules/directory/backend/directory/organizations/page.tsx +1 -3
  716. package/src/modules/directory/backend/directory/tenants/page.tsx +1 -3
  717. package/src/modules/directory/di.ts +2 -14
  718. package/src/modules/directory/utils/organizationScope.ts +15 -4
  719. package/src/modules/entities/api/records.ts +0 -2
  720. package/src/modules/entities/backend/entities/user/[entityId]/records/page.tsx +1 -4
  721. package/src/modules/eudr/api/plots/route.ts +0 -4
  722. package/src/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.ts +2 -0
  723. package/src/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.ts +1 -0
  724. package/src/modules/eudr/backend/eudr/evidence-submissions/page.meta.ts +4 -1
  725. package/src/modules/eudr/backend/eudr/evidence-submissions/page.tsx +0 -4
  726. package/src/modules/eudr/backend/eudr/page.meta.ts +2 -2
  727. package/src/modules/eudr/backend/eudr/plots/[id]/page.meta.ts +2 -0
  728. package/src/modules/eudr/backend/eudr/plots/[id]/page.tsx +8 -2
  729. package/src/modules/eudr/backend/eudr/plots/create/page.meta.ts +1 -0
  730. package/src/modules/eudr/backend/eudr/plots/create/page.tsx +8 -2
  731. package/src/modules/eudr/backend/eudr/plots/page.meta.ts +4 -1
  732. package/src/modules/eudr/backend/eudr/plots/page.tsx +0 -4
  733. package/src/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.ts +2 -0
  734. package/src/modules/eudr/backend/eudr/product-mappings/create/page.meta.ts +1 -0
  735. package/src/modules/eudr/backend/eudr/product-mappings/page.meta.ts +4 -1
  736. package/src/modules/eudr/backend/eudr/product-mappings/page.tsx +0 -4
  737. package/src/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.ts +2 -0
  738. package/src/modules/eudr/backend/eudr/risk-assessments/create/page.meta.ts +1 -0
  739. package/src/modules/eudr/backend/eudr/risk-assessments/page.meta.ts +4 -1
  740. package/src/modules/eudr/backend/eudr/risk-assessments/page.tsx +0 -4
  741. package/src/modules/eudr/backend/eudr/statements/[id]/page.meta.ts +2 -0
  742. package/src/modules/eudr/backend/eudr/statements/[id]/page.tsx +2 -0
  743. package/src/modules/eudr/backend/eudr/statements/create/page.meta.ts +1 -0
  744. package/src/modules/eudr/backend/eudr/statements/page.meta.ts +4 -1
  745. package/src/modules/eudr/backend/eudr/statements/page.tsx +32 -30
  746. package/src/modules/eudr/commands/statements.ts +7 -2
  747. package/src/modules/eudr/components/crudErrorI18n.ts +31 -0
  748. package/src/modules/eudr/components/formConfig.tsx +9 -1
  749. package/src/modules/eudr/data/validators.ts +1 -16
  750. package/src/modules/eudr/i18n/de.json +3 -2
  751. package/src/modules/eudr/i18n/en.json +3 -2
  752. package/src/modules/eudr/i18n/es.json +3 -2
  753. package/src/modules/eudr/i18n/ko.json +3 -2
  754. package/src/modules/eudr/i18n/pl.json +3 -2
  755. package/src/modules/eudr/lib/statement-lifecycle.ts +8 -0
  756. package/src/modules/feature_toggles/components/FeatureTogglesTable.tsx +1 -2
  757. package/src/modules/feature_toggles/components/OverridesTable.tsx +1 -2
  758. package/src/modules/feature_toggles/defaults.json +8 -0
  759. package/src/modules/inbox_ops/backend/inbox-ops/log/page.tsx +0 -4
  760. package/src/modules/inbox_ops/backend/inbox-ops/page.tsx +0 -4
  761. package/src/modules/inbox_ops/lib/htmlToPlainText.ts +17 -1
  762. package/src/modules/integrations/api/[id]/credentials/route.ts +4 -6
  763. package/src/modules/integrations/backend/integrations/[id]/page.tsx +31 -61
  764. package/src/modules/integrations/backend/integrations/bundle/[id]/page.tsx +9 -44
  765. package/src/modules/integrations/data/validators.ts +2 -12
  766. package/src/modules/integrations/i18n/de.json +0 -1
  767. package/src/modules/integrations/i18n/en.json +0 -1
  768. package/src/modules/integrations/i18n/es.json +0 -1
  769. package/src/modules/integrations/i18n/ko.json +0 -1
  770. package/src/modules/integrations/i18n/pl.json +0 -1
  771. package/src/modules/integrations/lib/credentials-masking.ts +6 -10
  772. package/src/modules/messages/api/[id]/route.ts +1 -55
  773. package/src/modules/messages/api/openapi.ts +0 -20
  774. package/src/modules/messages/api/route.ts +2 -31
  775. package/src/modules/messages/components/MessagesInboxPageClient.tsx +16 -9
  776. package/src/modules/messages/components/inboxFilters.ts +0 -36
  777. package/src/modules/messages/components/message-detail/hooks/useMessageDetailsConversation.ts +1 -14
  778. package/src/modules/messages/components/message-detail/panels/MessageHeader.tsx +1 -3
  779. package/src/modules/messages/components/message-detail/panels/thread-panel.tsx +1 -2
  780. package/src/modules/messages/components/message-detail/types.ts +0 -3
  781. package/src/modules/messages/components/messageListLabels.ts +3 -52
  782. package/src/modules/messages/data/validators.ts +4 -43
  783. package/src/modules/payment_gateways/api/webhook/[provider]/route.ts +6 -4
  784. package/src/modules/payment_gateways/backend/payment-gateways/page.tsx +1 -4
  785. package/src/modules/payment_gateways/lib/webhook-processor.ts +0 -11
  786. package/src/modules/planner/backend/planner/availability-rulesets/page.tsx +0 -4
  787. package/src/modules/push_notifications/backend/push_notifications/page.tsx +1 -4
  788. package/src/modules/push_notifications/backend/push_notifications/send/page.tsx +4 -4
  789. package/src/modules/query_index/lib/engine.ts +61 -249
  790. package/src/modules/query_index/lib/search-tokens.ts +3 -135
  791. package/src/modules/resources/backend/resources/resource-types/page.tsx +1 -4
  792. package/src/modules/resources/backend/resources/resources/page.tsx +1 -4
  793. package/src/modules/sales/backend/sales/channels/offers/page.tsx +0 -4
  794. package/src/modules/sales/backend/sales/channels/page.tsx +0 -4
  795. package/src/modules/sales/backend/sales/documents/[id]/page.tsx +8 -14
  796. package/src/modules/sales/commands/documents.ts +0 -93
  797. package/src/modules/sales/components/PriceWithCurrency.tsx +5 -17
  798. package/src/modules/sales/components/channels/SalesChannelOffersPanel.tsx +0 -4
  799. package/src/modules/sales/components/documents/AdjustmentsSection.tsx +5 -6
  800. package/src/modules/sales/components/documents/ItemsSection.tsx +18 -56
  801. package/src/modules/sales/components/documents/LineItemDialog.tsx +21 -138
  802. package/src/modules/sales/components/documents/PaymentsSection.tsx +9 -20
  803. package/src/modules/sales/components/documents/ReturnsSection.tsx +5 -6
  804. package/src/modules/sales/components/documents/SalesDocumentsTable.tsx +14 -106
  805. package/src/modules/sales/components/documents/SalesOrderDraftLines.tsx +5 -6
  806. package/src/modules/sales/components/documents/ShipmentDialog.tsx +4 -5
  807. package/src/modules/sales/components/documents/ShipmentsSection.tsx +5 -6
  808. package/src/modules/sales/components/documents/lineItemUtils.ts +2 -7
  809. package/src/modules/sales/data/entities.ts +0 -6
  810. package/src/modules/sales/extension-points.ts +0 -1
  811. package/src/modules/sales/i18n/de.json +37 -8
  812. package/src/modules/sales/i18n/en.json +37 -8
  813. package/src/modules/sales/i18n/es.json +37 -8
  814. package/src/modules/sales/i18n/ko.json +37 -8
  815. package/src/modules/sales/i18n/pl.json +37 -8
  816. package/src/modules/sales/migrations/.snapshot-open-mercato.json +0 -60
  817. package/src/modules/sales/setup.ts +0 -2
  818. package/src/modules/sales/widgets/injection/document-history/widget.client.tsx +42 -2
  819. package/src/modules/sales/widgets/injection/payment-gateway-status-column/widget.ts +1 -9
  820. package/src/modules/sales/widgets/injection-table.ts +7 -4
  821. package/src/modules/staff/backend/staff/leave-requests/page.tsx +0 -4
  822. package/src/modules/staff/backend/staff/my-leave-requests/page.tsx +0 -4
  823. package/src/modules/staff/backend/staff/team-members/page.tsx +0 -6
  824. package/src/modules/staff/backend/staff/team-roles/page.tsx +0 -4
  825. package/src/modules/staff/backend/staff/teams/[id]/edit/page.tsx +0 -4
  826. package/src/modules/staff/backend/staff/teams/page.tsx +0 -4
  827. package/src/modules/staff/backend/staff/timesheets/page.tsx +1 -12
  828. package/src/modules/staff/backend/staff/timesheets/projects/page.tsx +0 -4
  829. package/src/modules/sync_excel/lib/adapters/customers.ts +0 -5
  830. package/src/modules/warranty_claims/api/assignees/route.ts +3 -3
  831. package/src/modules/warranty_claims/api/portal/attachments/route.ts +2 -2
  832. package/src/modules/warranty_claims/api/portal/claims/route.ts +9 -12
  833. package/src/modules/warranty_claims/backend/page.tsx +0 -4
  834. package/src/modules/warranty_claims/backend/warranty_claims/registrations/page.tsx +0 -4
  835. package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.tsx +0 -4
  836. package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.tsx +0 -4
  837. package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.tsx +0 -4
  838. package/src/modules/wms/api/warehouses/route.ts +9 -13
  839. package/src/modules/wms/api/zones/route.ts +0 -16
  840. package/src/modules/wms/commands/configuration.ts +10 -159
  841. package/src/modules/wms/commands/inventory-actions.ts +0 -3
  842. package/src/modules/wms/commands/shared.ts +0 -17
  843. package/src/modules/wms/components/backend/WmsConfigurationPage.tsx +141 -95
  844. package/src/modules/wms/components/backend/WmsInventoryConsolePage.tsx +0 -2
  845. package/src/modules/wms/components/backend/WmsLocationDetailPage.tsx +30 -26
  846. package/src/modules/wms/components/backend/WmsLotDetailPage.tsx +21 -17
  847. package/src/modules/wms/components/backend/WmsLotsListPage.tsx +0 -2
  848. package/src/modules/wms/components/backend/WmsOperationalDashboardPage.tsx +17 -13
  849. package/src/modules/wms/components/backend/WmsSkuDetailPage.tsx +16 -12
  850. package/src/modules/wms/components/backend/inventoryMutationLoaders.ts +20 -36
  851. package/src/modules/wms/i18n/de.json +0 -2
  852. package/src/modules/wms/i18n/en.json +0 -2
  853. package/src/modules/wms/i18n/es.json +0 -2
  854. package/src/modules/wms/i18n/ko.json +0 -2
  855. package/src/modules/wms/i18n/pl.json +0 -2
  856. package/src/modules/workflows/backend/definitions/page.tsx +1 -4
  857. package/src/modules/workflows/backend/events/page.tsx +1 -4
  858. package/src/modules/workflows/backend/instances/page.tsx +1 -4
  859. package/src/modules/workflows/backend/tasks/page.tsx +1 -4
  860. package/src/modules/workflows/lib/activity-executor.ts +0 -9
  861. package/dist/modules/api_keys/di.js +0 -9
  862. package/dist/modules/api_keys/di.js.map +0 -7
  863. package/dist/modules/api_keys/services/principalService.js +0 -31
  864. package/dist/modules/api_keys/services/principalService.js.map +0 -7
  865. package/dist/modules/attachments/lib/attachment-service.js +0 -313
  866. package/dist/modules/attachments/lib/attachment-service.js.map +0 -7
  867. package/dist/modules/auth/api/reset/validate.js +0 -55
  868. package/dist/modules/auth/api/reset/validate.js.map +0 -7
  869. package/dist/modules/auth/commands/acl.js +0 -254
  870. package/dist/modules/auth/commands/acl.js.map +0 -7
  871. package/dist/modules/auth/services/principalService.js +0 -200
  872. package/dist/modules/auth/services/principalService.js.map +0 -7
  873. package/dist/modules/auth/services/roleOrganizationScope.js +0 -41
  874. package/dist/modules/auth/services/roleOrganizationScope.js.map +0 -7
  875. package/dist/modules/communication_channels/lib/outbound-recipient.js +0 -33
  876. package/dist/modules/communication_channels/lib/outbound-recipient.js.map +0 -7
  877. package/dist/modules/communication_channels/lib/resolve-channel-type.js +0 -51
  878. package/dist/modules/communication_channels/lib/resolve-channel-type.js.map +0 -7
  879. package/dist/modules/customers/backend/customers/deals/pipeline/components/toneClasses.js +0 -18
  880. package/dist/modules/customers/backend/customers/deals/pipeline/components/toneClasses.js.map +0 -7
  881. package/dist/modules/customers/lib/calendar/participantIdentity.js +0 -9
  882. package/dist/modules/customers/lib/calendar/participantIdentity.js.map +0 -7
  883. package/dist/modules/customers/lib/closureStage.js +0 -45
  884. package/dist/modules/customers/lib/closureStage.js.map +0 -7
  885. package/dist/modules/customers/lib/detailReadAccess.js +0 -12
  886. package/dist/modules/customers/lib/detailReadAccess.js.map +0 -7
  887. package/dist/modules/data_sync/lib/abandoned-run.js +0 -19
  888. package/dist/modules/data_sync/lib/abandoned-run.js.map +0 -7
  889. package/dist/modules/devices/api/deviceSerialization.js +0 -46
  890. package/dist/modules/devices/api/deviceSerialization.js.map +0 -7
  891. package/dist/modules/directory/services/organizationHierarchyService.js +0 -29
  892. package/dist/modules/directory/services/organizationHierarchyService.js.map +0 -7
  893. package/dist/modules/directory/services/organizationScopeService.js +0 -56
  894. package/dist/modules/directory/services/organizationScopeService.js.map +0 -7
  895. package/dist/modules/integrations/backend/integrations/credential-secret-fields.js +0 -55
  896. package/dist/modules/integrations/backend/integrations/credential-secret-fields.js.map +0 -7
  897. package/dist/modules/messages/lib/channel-sender-identity.js +0 -26
  898. package/dist/modules/messages/lib/channel-sender-identity.js.map +0 -7
  899. package/dist/modules/messages/lib/composeSourceChannelType.js +0 -41
  900. package/dist/modules/messages/lib/composeSourceChannelType.js.map +0 -7
  901. package/dist/modules/query_index/lib/search-entity-policy.js +0 -14
  902. package/dist/modules/query_index/lib/search-entity-policy.js.map +0 -7
  903. package/dist/modules/sales/components/documents/lineItemShipmentLock.js +0 -54
  904. package/dist/modules/sales/components/documents/lineItemShipmentLock.js.map +0 -7
  905. package/dist/modules/sales/lib/salesChannelsToggleSeed.js +0 -33
  906. package/dist/modules/sales/lib/salesChannelsToggleSeed.js.map +0 -7
  907. package/dist/modules/sales/migrations/Migration20260821120000_sales_notes_addresses_context_idx.js +0 -32
  908. package/dist/modules/sales/migrations/Migration20260821120000_sales_notes_addresses_context_idx.js.map +0 -7
  909. package/dist/modules/wms/api/warehouseSearch.js +0 -21
  910. package/dist/modules/wms/api/warehouseSearch.js.map +0 -7
  911. package/dist/modules/wms/components/backend/WarehouseEditDialog.js +0 -158
  912. package/dist/modules/wms/components/backend/WarehouseEditDialog.js.map +0 -7
  913. package/dist/modules/wms/components/backend/warehouseFormOptions.js +0 -66
  914. package/dist/modules/wms/components/backend/warehouseFormOptions.js.map +0 -7
  915. package/src/modules/api_keys/di.ts +0 -7
  916. package/src/modules/api_keys/services/principalService.ts +0 -33
  917. package/src/modules/attachments/lib/attachment-service.ts +0 -468
  918. package/src/modules/auth/api/reset/validate.ts +0 -57
  919. package/src/modules/auth/commands/acl.ts +0 -495
  920. package/src/modules/auth/services/principalService.ts +0 -266
  921. package/src/modules/auth/services/roleOrganizationScope.ts +0 -70
  922. package/src/modules/communication_channels/lib/outbound-recipient.ts +0 -71
  923. package/src/modules/communication_channels/lib/resolve-channel-type.ts +0 -99
  924. package/src/modules/customers/backend/customers/deals/pipeline/components/toneClasses.ts +0 -21
  925. package/src/modules/customers/lib/calendar/participantIdentity.ts +0 -17
  926. package/src/modules/customers/lib/closureStage.ts +0 -76
  927. package/src/modules/customers/lib/detailReadAccess.ts +0 -35
  928. package/src/modules/data_sync/lib/abandoned-run.ts +0 -56
  929. package/src/modules/devices/api/deviceSerialization.ts +0 -50
  930. package/src/modules/directory/services/organizationHierarchyService.ts +0 -34
  931. package/src/modules/directory/services/organizationScopeService.ts +0 -85
  932. package/src/modules/integrations/backend/integrations/credential-secret-fields.ts +0 -84
  933. package/src/modules/messages/lib/channel-sender-identity.ts +0 -55
  934. package/src/modules/messages/lib/composeSourceChannelType.ts +0 -95
  935. package/src/modules/query_index/lib/search-entity-policy.ts +0 -46
  936. package/src/modules/sales/components/documents/lineItemShipmentLock.ts +0 -74
  937. package/src/modules/sales/lib/salesChannelsToggleSeed.ts +0 -42
  938. package/src/modules/sales/migrations/Migration20260821120000_sales_notes_addresses_context_idx.ts +0 -87
  939. package/src/modules/wms/api/warehouseSearch.ts +0 -23
  940. package/src/modules/wms/components/backend/WarehouseEditDialog.tsx +0 -216
  941. package/src/modules/wms/components/backend/warehouseFormOptions.ts +0 -72
@@ -1,847 +1,15 @@
1
- "use client"
2
-
3
- import * as React from 'react'
4
- import Link from 'next/link'
5
- import { useRouter } from 'next/navigation'
1
+ import { headers } from 'next/headers'
6
2
  import { Page, PageBody } from '@open-mercato/ui/backend/Page'
7
- import { FormHeader } from '@open-mercato/ui/backend/forms'
8
- import { Button } from '@open-mercato/ui/primitives/button'
9
- import { Input } from '@open-mercato/ui/primitives/input'
10
- import { PasswordInput } from '@open-mercato/ui/primitives/password-input'
11
- import { Spinner } from '@open-mercato/ui/primitives/spinner'
12
- import { SwitchField } from '@open-mercato/ui/primitives/switch-field'
13
- import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@open-mercato/ui/primitives/dialog'
14
- import { apiCall, readApiResultOrThrow, withScopedApiRequestHeaders } from '@open-mercato/ui/backend/utils/apiCall'
15
- import { buildOptimisticLockHeader } from '@open-mercato/ui/backend/utils/optimisticLock'
16
- import { surfaceRecordConflict } from '@open-mercato/ui/backend/conflicts'
17
- import { flash } from '@open-mercato/ui/backend/FlashMessages'
18
- import { useT } from '@open-mercato/shared/lib/i18n/context'
19
- import { useConfirmDialog } from '@open-mercato/ui/backend/confirm-dialog'
20
- import { useGuardedMutation } from '@open-mercato/ui/backend/injection/useGuardedMutation'
21
- import { RecordNotFoundState, ErrorMessage } from '@open-mercato/ui/backend/detail'
22
-
23
- type UserDetail = {
24
- id: string
25
- displayName: string
26
- email: string
27
- emailVerifiedAt: string | null
28
- isActive: boolean
29
- lastLoginAt: string | null
30
- personEntityId: string | null
31
- customerEntityId: string | null
32
- createdAt: string
33
- updatedAt: string | null
34
- roles: Array<{ id: string; name: string; slug: string }>
35
- sessions: Array<{
36
- id: string
37
- ipAddress: string | null
38
- userAgent: string | null
39
- lastUsedAt: string | null
40
- createdAt: string
41
- expiresAt: string
42
- }>
43
- }
44
-
45
- function formatDate(value: string | null | undefined, fallback: string): string {
46
- if (!value) return fallback
47
- const date = new Date(value)
48
- if (Number.isNaN(date.getTime())) return fallback
49
- return date.toLocaleString()
50
- }
51
-
52
- function ResetPasswordDialog({
53
- open,
54
- onOpenChange,
55
- userId,
56
- onRunMutation,
57
- }: {
58
- open: boolean
59
- onOpenChange: (next: boolean) => void
60
- userId: string
61
- onRunMutation: <T>(operation: () => Promise<T>) => Promise<T>
62
- }) {
63
- const t = useT()
64
- const [newPassword, setNewPassword] = React.useState('')
65
- const [isSubmitting, setIsSubmitting] = React.useState(false)
66
-
67
- const handleSubmit = React.useCallback(async (event: React.FormEvent) => {
68
- event.preventDefault()
69
- if (!newPassword.trim() || newPassword.length < 8) {
70
- flash(t('customer_accounts.admin.detail.resetPassword.error.minLength', 'Password must be at least 8 characters'), 'error')
71
- return
72
- }
73
- setIsSubmitting(true)
74
- try {
75
- await onRunMutation(async () => {
76
- const call = await apiCall<{ ok: boolean; error?: string }>(
77
- `/api/customer_accounts/admin/users/${encodeURIComponent(userId)}/reset-password`,
78
- {
79
- method: 'POST',
80
- headers: { 'content-type': 'application/json' },
81
- body: JSON.stringify({ newPassword }),
82
- },
83
- )
84
- if (!call.ok) {
85
- flash(call.result?.error || t('customer_accounts.admin.detail.resetPassword.error.save', 'Failed to reset password'), 'error')
86
- return
87
- }
88
- flash(t('customer_accounts.admin.detail.resetPassword.flash.success', 'Password reset successfully'), 'success')
89
- setNewPassword('')
90
- onOpenChange(false)
91
- })
92
- } catch (err) {
93
- const message = err instanceof Error ? err.message : t('customer_accounts.admin.detail.resetPassword.error.save', 'Failed to reset password')
94
- flash(message, 'error')
95
- } finally {
96
- setIsSubmitting(false)
97
- }
98
- }, [newPassword, onOpenChange, onRunMutation, t, userId])
99
-
100
- const handleKeyDown = React.useCallback((event: React.KeyboardEvent) => {
101
- if ((event.metaKey || event.ctrlKey) && event.key === 'Enter') {
102
- event.preventDefault()
103
- const form = (event.target as HTMLElement).closest('form')
104
- if (form) form.requestSubmit()
105
- }
106
- }, [])
107
-
108
- return (
109
- <Dialog open={open} onOpenChange={(next) => { if (!next) setNewPassword(''); onOpenChange(next) }}>
110
- <DialogContent className="sm:max-w-md">
111
- <DialogHeader>
112
- <DialogTitle>{t('customer_accounts.admin.detail.resetPassword.title', 'Reset Password')}</DialogTitle>
113
- </DialogHeader>
114
- <form onSubmit={(event) => { void handleSubmit(event) }} onKeyDown={handleKeyDown} className="space-y-4">
115
- <div className="space-y-2">
116
- <label className="text-sm font-medium" htmlFor="reset-password">
117
- {t('customer_accounts.admin.detail.resetPassword.fields.newPassword', 'New Password')}
118
- </label>
119
- <PasswordInput
120
- id="reset-password"
121
- required
122
- minLength={8}
123
- value={newPassword}
124
- onChange={(event) => setNewPassword(event.target.value)}
125
- placeholder={t('customer_accounts.admin.detail.resetPassword.fields.placeholder', 'Min. 8 characters')}
126
- autoComplete="new-password"
127
- />
128
- </div>
129
- <div className="flex justify-end gap-2 pt-2">
130
- <Button type="button" variant="outline" onClick={() => { setNewPassword(''); onOpenChange(false) }}>
131
- {t('customer_accounts.admin.detail.resetPassword.actions.cancel', 'Cancel')}
132
- </Button>
133
- <Button type="submit" disabled={isSubmitting}>
134
- {isSubmitting
135
- ? t('customer_accounts.admin.detail.resetPassword.actions.resetting', 'Resetting...')
136
- : t('customer_accounts.admin.detail.resetPassword.actions.reset', 'Reset Password')}
137
- </Button>
138
- </div>
139
- </form>
140
- </DialogContent>
141
- </Dialog>
142
- )
143
- }
144
-
145
- export default function CustomerUserDetailPage({ params }: { params?: { id?: string } }) {
146
- const id = params?.id
147
- const t = useT()
148
- const router = useRouter()
149
- const { confirm, ConfirmDialogElement } = useConfirmDialog()
150
- const [data, setData] = React.useState<UserDetail | null>(null)
151
- const [isLoading, setIsLoading] = React.useState(true)
152
- const [error, setError] = React.useState<string | null>(null)
153
- const [isNotFound, setIsNotFound] = React.useState(false)
154
- const [isSaving, setIsSaving] = React.useState(false)
155
- const [editActive, setEditActive] = React.useState<boolean | null>(null)
156
- const [editDisplayName, setEditDisplayName] = React.useState('')
157
- const [availableRoles, setAvailableRoles] = React.useState<Array<{ id: string; name: string }>>([])
158
- const [selectedRoleIds, setSelectedRoleIds] = React.useState<string[]>([])
159
- const [resetPasswordOpen, setResetPasswordOpen] = React.useState(false)
160
- const [isVerifying, setIsVerifying] = React.useState(false)
161
- const [editPersonEntityId, setEditPersonEntityId] = React.useState<string | null>(null)
162
- const [editCustomerEntityId, setEditCustomerEntityId] = React.useState<string | null>(null)
163
- const [personSearchQuery, setPersonSearchQuery] = React.useState('')
164
- const [companySearchQuery, setCompanySearchQuery] = React.useState('')
165
- const [personResults, setPersonResults] = React.useState<Array<{ id: string; label: string }>>([])
166
- const [companyResults, setCompanyResults] = React.useState<Array<{ id: string; label: string }>>([])
167
- const [personName, setPersonName] = React.useState<string | null>(null)
168
- const [companyName, setCompanyName] = React.useState<string | null>(null)
169
- const [isSendingResetLink, setIsSendingResetLink] = React.useState(false)
170
- const [resetLinkUrl, setResetLinkUrl] = React.useState<string | null>(null)
171
-
172
- const mutationContextId = `customer_accounts:user:${id ?? 'pending'}`
173
- const { runMutation, retryLastMutation } = useGuardedMutation<{
174
- entityType: string
175
- entityId?: string
176
- }>({
177
- contextId: mutationContextId,
178
- })
179
-
180
- const runMutationWithContext = React.useCallback(
181
- async <T,>(operation: () => Promise<T>, mutationPayload?: Record<string, unknown>): Promise<T> => {
182
- return runMutation({
183
- operation,
184
- mutationPayload,
185
- context: { entityType: 'customer_accounts:user', entityId: id },
186
- })
187
- },
188
- [id, runMutation],
189
- )
190
-
191
- React.useEffect(() => {
192
- if (!id) {
193
- setIsNotFound(true)
194
- setIsLoading(false)
195
- return
196
- }
197
- let cancelled = false
198
- async function load() {
199
- setIsLoading(true)
200
- setError(null)
201
- setIsNotFound(false)
202
- try {
203
- const payload = await readApiResultOrThrow<UserDetail>(
204
- `/api/customer_accounts/admin/users/${encodeURIComponent(id!)}`,
205
- undefined,
206
- { errorMessage: t('customer_accounts.admin.detail.error.load', 'Failed to load user') },
207
- )
208
- if (cancelled) return
209
- setData(payload)
210
- setEditActive(payload.isActive)
211
- setEditDisplayName(payload.displayName)
212
- setSelectedRoleIds(payload.roles.map((role) => role.id))
213
- setEditPersonEntityId(payload.personEntityId)
214
- setEditCustomerEntityId(payload.customerEntityId)
215
- } catch (err) {
216
- if (cancelled) return
217
- if ((err as { status?: number }).status === 404) {
218
- setIsNotFound(true)
219
- } else {
220
- const message = err instanceof Error ? err.message : t('customer_accounts.admin.detail.error.load', 'Failed to load user')
221
- setError(message)
222
- }
223
- } finally {
224
- if (!cancelled) setIsLoading(false)
225
- }
226
- }
227
- load()
228
- return () => { cancelled = true }
229
- }, [id, t])
230
-
231
- React.useEffect(() => {
232
- let cancelled = false
233
- async function loadRoles() {
234
- try {
235
- const call = await apiCall<{ items?: Array<{ id: string; name: string }> }>(
236
- '/api/customer_accounts/admin/roles?pageSize=100',
237
- )
238
- if (cancelled || !call.ok) return
239
- const items = Array.isArray(call.result?.items) ? call.result!.items : []
240
- setAvailableRoles(
241
- items.filter((item) => typeof item?.id === 'string' && typeof item?.name === 'string'),
242
- )
243
- } catch {
244
- // silently ignore role loading failures
245
- }
246
- }
247
- loadRoles()
248
- return () => { cancelled = true }
249
- }, [])
250
-
251
- React.useEffect(() => {
252
- if (!data) return
253
- let cancelled = false
254
- async function loadPersonName() {
255
- if (!data!.personEntityId) return
256
- try {
257
- const call = await apiCall<{ id?: string; firstName?: string; lastName?: string }>(`/api/customers/people/${encodeURIComponent(data!.personEntityId)}`)
258
- if (!cancelled && call.ok && call.result) {
259
- setPersonName([call.result.firstName, call.result.lastName].filter(Boolean).join(' ') || call.result.id || null)
260
- }
261
- } catch { /* ignore */ }
262
- }
263
- async function loadCompanyName() {
264
- if (!data!.customerEntityId) return
265
- try {
266
- const call = await apiCall<{ id?: string; name?: string }>(`/api/customers/${encodeURIComponent(data!.customerEntityId)}`)
267
- if (!cancelled && call.ok && call.result) {
268
- setCompanyName(call.result.name || call.result.id || null)
269
- }
270
- } catch { /* ignore */ }
271
- }
272
- void Promise.all([loadPersonName(), loadCompanyName()])
273
- return () => { cancelled = true }
274
- }, [data])
275
-
276
- const handleSearchPeople = React.useCallback(async (query: string) => {
277
- setPersonSearchQuery(query)
278
- if (query.trim().length < 2) { setPersonResults([]); return }
279
- try {
280
- const call = await apiCall<{ items?: Array<{ id: string; firstName?: string; lastName?: string; email?: string }> }>(
281
- `/api/customers/people?search=${encodeURIComponent(query.trim())}&pageSize=10`,
282
- )
283
- if (call.ok && Array.isArray(call.result?.items)) {
284
- setPersonResults(call.result!.items.map((person) => ({
285
- id: person.id,
286
- label: [person.firstName, person.lastName].filter(Boolean).join(' ') || person.email || person.id,
287
- })))
288
- }
289
- } catch { /* ignore */ }
290
- }, [])
291
-
292
- const handleSearchCompanies = React.useCallback(async (query: string) => {
293
- setCompanySearchQuery(query)
294
- if (query.trim().length < 2) { setCompanyResults([]); return }
295
- try {
296
- const call = await apiCall<{ items?: Array<{ id: string; name?: string }> }>(
297
- `/api/customers?search=${encodeURIComponent(query.trim())}&pageSize=10`,
298
- )
299
- if (call.ok && Array.isArray(call.result?.items)) {
300
- setCompanyResults(call.result!.items.map((company) => ({
301
- id: company.id,
302
- label: company.name || company.id,
303
- })))
304
- }
305
- } catch { /* ignore */ }
306
- }, [])
307
-
308
- const handleSendResetLink = React.useCallback(async () => {
309
- if (!id) return
310
- setIsSendingResetLink(true)
311
- try {
312
- await runMutationWithContext(async () => {
313
- const call = await apiCall<{ ok: boolean; resetLink?: string; error?: string }>(
314
- `/api/customer_accounts/admin/users/${encodeURIComponent(id)}/send-reset-link`,
315
- { method: 'POST' },
316
- )
317
- if (!call.ok || !call.result?.resetLink) {
318
- flash(call.result?.error || t('customer_accounts.admin.detail.sendResetLink.error', 'Failed to generate reset link'), 'error')
319
- return
320
- }
321
- setResetLinkUrl(call.result.resetLink)
322
- flash(t('customer_accounts.admin.detail.sendResetLink.flash.success', 'Reset link generated'), 'success')
323
- }, { id })
324
- } catch (err) {
325
- const message = err instanceof Error ? err.message : t('customer_accounts.admin.detail.sendResetLink.error', 'Failed to generate reset link')
326
- flash(message, 'error')
327
- } finally {
328
- setIsSendingResetLink(false)
329
- }
330
- }, [id, runMutationWithContext, t])
331
-
332
- const handleSave = React.useCallback(async () => {
333
- if (!data || !id) return
334
- setIsSaving(true)
335
- try {
336
- await runMutationWithContext(async () => {
337
- const call = await withScopedApiRequestHeaders(
338
- buildOptimisticLockHeader(data.updatedAt),
339
- () => apiCall<{ ok: boolean; error?: string; updatedAt?: string | null }>(
340
- `/api/customer_accounts/admin/users/${encodeURIComponent(id)}`,
341
- {
342
- method: 'PUT',
343
- headers: { 'content-type': 'application/json' },
344
- body: JSON.stringify({
345
- displayName: editDisplayName.trim() || undefined,
346
- isActive: editActive,
347
- roleIds: selectedRoleIds,
348
- personEntityId: editPersonEntityId,
349
- customerEntityId: editCustomerEntityId,
350
- }),
351
- },
352
- ),
353
- )
354
- if (!call.ok) {
355
- if (surfaceRecordConflict({ status: call.status, body: call.result }, t)) return
356
- flash(call.result?.error || t('customer_accounts.admin.detail.error.save', 'Failed to save user'), 'error')
357
- return
358
- }
359
- flash(t('customer_accounts.admin.detail.flash.saved', 'User updated'), 'success')
360
- setData((prev) => prev ? {
361
- ...prev,
362
- isActive: editActive ?? prev.isActive,
363
- displayName: editDisplayName.trim() || prev.displayName,
364
- personEntityId: editPersonEntityId,
365
- customerEntityId: editCustomerEntityId,
366
- updatedAt: call.result?.updatedAt ?? prev.updatedAt,
367
- } : prev)
368
- }, { displayName: editDisplayName, isActive: editActive, roleIds: selectedRoleIds, personEntityId: editPersonEntityId, customerEntityId: editCustomerEntityId })
369
- } catch (err) {
370
- const message = err instanceof Error ? err.message : t('customer_accounts.admin.detail.error.save', 'Failed to save user')
371
- flash(message, 'error')
372
- } finally {
373
- setIsSaving(false)
374
- }
375
- }, [data, editActive, editCustomerEntityId, editDisplayName, editPersonEntityId, id, runMutationWithContext, selectedRoleIds, t])
376
-
377
- const handleDelete = React.useCallback(async () => {
378
- if (!data || !id) return
379
- const confirmed = await confirm({
380
- title: t('customer_accounts.admin.confirm.delete', 'Delete user "{{name}}"?', {
381
- name: data.displayName || data.email,
382
- }),
383
- variant: 'destructive',
384
- })
385
- if (!confirmed) return
386
- try {
387
- await runMutationWithContext(async () => {
388
- const call = await withScopedApiRequestHeaders(
389
- buildOptimisticLockHeader(data.updatedAt),
390
- () => apiCall(
391
- `/api/customer_accounts/admin/users/${encodeURIComponent(id)}`,
392
- { method: 'DELETE' },
393
- ),
394
- )
395
- if (!call.ok) {
396
- if (surfaceRecordConflict({ status: call.status, body: call.result }, t)) return
397
- flash(t('customer_accounts.admin.error.delete', 'Failed to delete user'), 'error')
398
- return
399
- }
400
- flash(t('customer_accounts.admin.flash.deleted', 'User deleted'), 'success')
401
- router.push('/backend/customer_accounts/users')
402
- }, { id })
403
- } catch (err) {
404
- const message = err instanceof Error ? err.message : t('customer_accounts.admin.error.delete', 'Failed to delete user')
405
- flash(message, 'error')
406
- }
407
- }, [confirm, data, id, router, runMutationWithContext, t])
408
-
409
- const handleVerifyEmail = React.useCallback(async () => {
410
- if (!data || !id) return
411
- const confirmed = await confirm({
412
- title: t('customer_accounts.admin.detail.verifyEmail.confirm', 'Mark email as verified for "{{name}}"?', {
413
- name: data.displayName || data.email,
414
- }),
415
- })
416
- if (!confirmed) return
417
- setIsVerifying(true)
418
- try {
419
- await runMutationWithContext(async () => {
420
- const call = await apiCall<{ ok: boolean; error?: string }>(
421
- `/api/customer_accounts/admin/users/${encodeURIComponent(id)}/verify-email`,
422
- { method: 'POST' },
423
- )
424
- if (!call.ok) {
425
- flash(call.result?.error || t('customer_accounts.admin.detail.verifyEmail.error', 'Failed to verify email'), 'error')
426
- return
427
- }
428
- flash(t('customer_accounts.admin.detail.verifyEmail.flash.success', 'Email marked as verified'), 'success')
429
- setData((prev) => prev ? { ...prev, emailVerifiedAt: new Date().toISOString() } : prev)
430
- }, { id })
431
- } catch (err) {
432
- const message = err instanceof Error ? err.message : t('customer_accounts.admin.detail.verifyEmail.error', 'Failed to verify email')
433
- flash(message, 'error')
434
- } finally {
435
- setIsVerifying(false)
436
- }
437
- }, [confirm, data, id, runMutationWithContext, t])
438
-
439
- const handleRevokeSession = React.useCallback(async (sessionId: string) => {
440
- if (!id) return
441
- try {
442
- await runMutationWithContext(async () => {
443
- const call = await apiCall(
444
- `/api/customer_accounts/admin/users/${encodeURIComponent(id)}/sessions/${encodeURIComponent(sessionId)}`,
445
- { method: 'DELETE' },
446
- )
447
- if (!call.ok) {
448
- flash(t('customer_accounts.admin.detail.error.revokeSession', 'Failed to revoke session'), 'error')
449
- return
450
- }
451
- flash(t('customer_accounts.admin.detail.flash.sessionRevoked', 'Session revoked'), 'success')
452
- setData((prev) => {
453
- if (!prev) return prev
454
- return { ...prev, sessions: prev.sessions.filter((session) => session.id !== sessionId) }
455
- })
456
- }, { sessionId })
457
- } catch (err) {
458
- const message = err instanceof Error ? err.message : t('customer_accounts.admin.detail.error.revokeSession', 'Failed to revoke session')
459
- flash(message, 'error')
460
- }
461
- }, [id, runMutationWithContext, t])
462
-
463
- const handleRoleToggle = React.useCallback((roleId: string) => {
464
- setSelectedRoleIds((prev) =>
465
- prev.includes(roleId)
466
- ? prev.filter((existingId) => existingId !== roleId)
467
- : [...prev, roleId],
468
- )
469
- }, [])
470
-
471
- if (isLoading) {
472
- return (
473
- <Page>
474
- <PageBody>
475
- <div className="flex h-[50vh] flex-col items-center justify-center gap-2 text-muted-foreground">
476
- <Spinner className="h-6 w-6" />
477
- <span>{t('customer_accounts.admin.detail.loading', 'Loading user...')}</span>
478
- </div>
479
- </PageBody>
480
- </Page>
481
- )
482
- }
483
-
484
- if (isNotFound) {
485
- return (
486
- <Page>
487
- <PageBody>
488
- <RecordNotFoundState
489
- label={t('customer_accounts.admin.detail.error.notFound', 'User not found')}
490
- backHref="/backend/customer_accounts/users"
491
- backLabel={t('customer_accounts.admin.detail.actions.backToList', 'Back to list')}
492
- />
493
- </PageBody>
494
- </Page>
495
- )
496
- }
497
-
498
- if (error || !data) {
499
- return (
500
- <Page>
501
- <PageBody>
502
- <ErrorMessage
503
- label={error ?? t('customer_accounts.admin.detail.error.notFound', 'User not found')}
504
- action={
505
- <Button asChild variant="outline" size="sm">
506
- <Link href="/backend/customer_accounts/users">
507
- {t('customer_accounts.admin.detail.actions.backToList', 'Back to list')}
508
- </Link>
509
- </Button>
510
- }
511
- />
512
- </PageBody>
513
- </Page>
514
- )
515
- }
3
+ import { resolvePortalRequestOrigin } from '../../../../lib/portalUrl'
4
+ import { PortalUserDetailPageClient } from './PortalUserDetailPageClient'
516
5
 
6
+ export default async function CustomerUserDetailPage({ params }: { params?: { id?: string } }) {
7
+ const portalOrigin = resolvePortalRequestOrigin(await headers())
517
8
  return (
518
9
  <Page>
519
10
  <PageBody className="space-y-6">
520
- <FormHeader
521
- mode="detail"
522
- backHref="/backend/customer_accounts/users"
523
- backLabel={t('customer_accounts.admin.detail.actions.backToList', 'Back to list')}
524
- title={data.displayName}
525
- subtitle={data.email}
526
- onDelete={() => { void handleDelete() }}
527
- deleteLabel={t('customer_accounts.admin.detail.actions.delete', 'Delete')}
528
- />
529
-
530
- <div className="rounded-lg border border-status-info-border bg-status-info-bg p-4">
531
- <div className="flex items-start gap-3">
532
- <div className="flex-1">
533
- <h3 className="text-sm font-medium text-status-info-text">
534
- {t('customer_accounts.admin.detail.portalAccess.title', 'Customer Portal Access')}
535
- </h3>
536
- <p className="mt-1 text-sm text-status-info-text">
537
- {t('customer_accounts.admin.detail.portalAccess.description', 'This user can access the customer portal at the URL below. The portal provides self-service access to orders, invoices, quotes, and account management.')}
538
- </p>
539
- <p className="mt-2 text-xs text-status-info-text">
540
- {t('customer_accounts.admin.detail.portalAccess.url', 'Portal URL: {url}', {
541
- url: `${typeof window !== 'undefined' ? window.location.origin : ''}/[org-slug]/portal`,
542
- })}
543
- </p>
544
- </div>
545
- </div>
546
- </div>
547
-
548
- <div className="grid gap-6 md:grid-cols-2">
549
- <div className="rounded-lg border p-4 space-y-3">
550
- <h2 className="text-sm font-semibold">{t('customer_accounts.admin.detail.sections.info', 'User Information')}</h2>
551
- <dl className="space-y-2 text-sm">
552
- <div className="flex justify-between">
553
- <dt className="text-muted-foreground">{t('customer_accounts.admin.detail.fields.email', 'Email')}</dt>
554
- <dd>{data.email}</dd>
555
- </div>
556
- <div className="flex justify-between items-center">
557
- <dt className="text-muted-foreground">{t('customer_accounts.admin.detail.fields.emailVerified', 'Email Verified')}</dt>
558
- <dd className="flex items-center gap-2">
559
- <span className={`inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium ${
560
- data.emailVerifiedAt
561
- ? 'bg-status-success-bg text-status-success-text'
562
- : 'bg-status-warning-bg text-status-warning-text'
563
- }`}>
564
- {data.emailVerifiedAt
565
- ? t('customer_accounts.admin.verified', 'Yes')
566
- : t('customer_accounts.admin.unverified', 'No')}
567
- </span>
568
- {!data.emailVerifiedAt && (
569
- <Button
570
- variant="outline"
571
- size="sm"
572
- onClick={() => { void handleVerifyEmail() }}
573
- disabled={isVerifying}
574
- >
575
- {isVerifying
576
- ? t('customer_accounts.admin.detail.verifyEmail.actions.verifying', 'Verifying...')
577
- : t('customer_accounts.admin.detail.verifyEmail.actions.verify', 'Mark Verified')}
578
- </Button>
579
- )}
580
- </dd>
581
- </div>
582
- <div className="flex justify-between">
583
- <dt className="text-muted-foreground">{t('customer_accounts.admin.detail.fields.lastLogin', 'Last Login')}</dt>
584
- <dd>{formatDate(data.lastLoginAt, '-')}</dd>
585
- </div>
586
- <div className="flex justify-between">
587
- <dt className="text-muted-foreground">{t('customer_accounts.admin.detail.fields.createdAt', 'Created')}</dt>
588
- <dd>{formatDate(data.createdAt, '-')}</dd>
589
- </div>
590
- </dl>
591
- </div>
592
-
593
- <div className="rounded-lg border p-4 space-y-3">
594
- <h2 className="text-sm font-semibold">{t('customer_accounts.admin.detail.sections.crmLinks', 'CRM Links')}</h2>
595
- <div className="space-y-3 text-sm">
596
- <div className="space-y-1.5">
597
- <p className="text-muted-foreground">{t('customer_accounts.admin.detail.fields.personEntity', 'Linked Person')}</p>
598
- {editPersonEntityId ? (
599
- <div className="flex items-center gap-2">
600
- <Link href={`/backend/customers/people/${editPersonEntityId}`} className="text-primary hover:underline">
601
- {personName || editPersonEntityId}
602
- </Link>
603
- <Button type="button" variant="outline" size="sm" onClick={() => { setEditPersonEntityId(null); setPersonName(null) }}>
604
- {t('customer_accounts.admin.detail.actions.unlink', 'Unlink')}
605
- </Button>
606
- </div>
607
- ) : (
608
- <div className="space-y-1">
609
- <div className="relative">
610
- <Input
611
- type="text"
612
- value={personSearchQuery}
613
- onChange={(event) => { void handleSearchPeople(event.target.value) }}
614
- placeholder={t('customer_accounts.admin.detail.fields.searchPerson', 'Search people by name...')}
615
- />
616
- {personResults.length > 0 && (
617
- <div className="absolute z-10 mt-1 w-full rounded-md border bg-background shadow-lg max-h-40 overflow-y-auto">
618
- {personResults.map((person) => (
619
- <button
620
- key={person.id}
621
- type="button"
622
- className="w-full px-3 py-2 text-left text-sm hover:bg-muted"
623
- onClick={() => {
624
- setEditPersonEntityId(person.id)
625
- setPersonName(person.label)
626
- setPersonSearchQuery('')
627
- setPersonResults([])
628
- }}
629
- >
630
- {person.label}
631
- </button>
632
- ))}
633
- </div>
634
- )}
635
- </div>
636
- </div>
637
- )}
638
- </div>
639
- <div className="space-y-1.5">
640
- <p className="text-muted-foreground">{t('customer_accounts.admin.detail.fields.customerEntity', 'Linked Company')}</p>
641
- {editCustomerEntityId ? (
642
- <div className="flex items-center gap-2">
643
- <Link href={`/backend/customers/companies/${editCustomerEntityId}`} className="text-primary hover:underline">
644
- {companyName || editCustomerEntityId}
645
- </Link>
646
- <Button type="button" variant="outline" size="sm" onClick={() => { setEditCustomerEntityId(null); setCompanyName(null) }}>
647
- {t('customer_accounts.admin.detail.actions.unlink', 'Unlink')}
648
- </Button>
649
- </div>
650
- ) : (
651
- <div className="space-y-1">
652
- <div className="relative">
653
- <Input
654
- type="text"
655
- value={companySearchQuery}
656
- onChange={(event) => { void handleSearchCompanies(event.target.value) }}
657
- placeholder={t('customer_accounts.admin.detail.fields.searchCompany', 'Search companies by name...')}
658
- />
659
- {companyResults.length > 0 && (
660
- <div className="absolute z-10 mt-1 w-full rounded-md border bg-background shadow-lg max-h-40 overflow-y-auto">
661
- {companyResults.map((company) => (
662
- <button
663
- key={company.id}
664
- type="button"
665
- className="w-full px-3 py-2 text-left text-sm hover:bg-muted"
666
- onClick={() => {
667
- setEditCustomerEntityId(company.id)
668
- setCompanyName(company.label)
669
- setCompanySearchQuery('')
670
- setCompanyResults([])
671
- }}
672
- >
673
- {company.label}
674
- </button>
675
- ))}
676
- </div>
677
- )}
678
- </div>
679
- </div>
680
- )}
681
- </div>
682
- <p className="text-xs text-muted-foreground">
683
- {t('customer_accounts.admin.detail.crmLinks.hint', 'Changes to CRM links are saved when you click Save Changes below.')}
684
- </p>
685
- </div>
686
- </div>
687
- </div>
688
-
689
- <div className="rounded-lg border p-4 space-y-4">
690
- <h2 className="text-sm font-semibold">{t('customer_accounts.admin.detail.sections.settings', 'Account Settings')}</h2>
691
- <div className="grid gap-4 md:grid-cols-2">
692
- <div className="space-y-3">
693
- <div className="space-y-2">
694
- <label className="text-sm font-medium" htmlFor="user-display-name">
695
- {t('customer_accounts.admin.detail.fields.displayName', 'Display Name')}
696
- </label>
697
- <Input
698
- id="user-display-name"
699
- type="text"
700
- value={editDisplayName}
701
- onChange={(event) => setEditDisplayName(event.target.value)}
702
- />
703
- </div>
704
-
705
- <SwitchField
706
- id="user-active-toggle"
707
- label={t('customer_accounts.admin.detail.fields.isActive', 'Active')}
708
- checked={editActive ?? data.isActive}
709
- onCheckedChange={(next) => setEditActive(next)}
710
- />
711
- </div>
712
-
713
- <div className="space-y-2">
714
- <p className="text-sm font-medium">{t('customer_accounts.admin.detail.fields.roles', 'Roles')}</p>
715
- <div className="flex flex-wrap gap-2">
716
- {availableRoles.map((role) => {
717
- const isSelected = selectedRoleIds.includes(role.id)
718
- return (
719
- <Button
720
- key={role.id}
721
- type="button"
722
- variant="outline"
723
- size="sm"
724
- onClick={() => handleRoleToggle(role.id)}
725
- className={`rounded-full ${
726
- isSelected
727
- ? 'border-primary bg-primary/10 text-primary'
728
- : ''
729
- }`}
730
- >
731
- {role.name}
732
- </Button>
733
- )
734
- })}
735
- {availableRoles.length === 0 && (
736
- <span className="text-sm text-muted-foreground">
737
- {t('customer_accounts.admin.detail.noRolesAvailable', 'No roles available')}
738
- </span>
739
- )}
740
- </div>
741
- </div>
742
- </div>
743
- <div className="pt-2">
744
- <Button onClick={() => { void handleSave() }} disabled={isSaving}>
745
- {isSaving
746
- ? t('customer_accounts.admin.detail.actions.saving', 'Saving...')
747
- : t('customer_accounts.admin.detail.actions.save', 'Save Changes')}
748
- </Button>
749
- </div>
750
- </div>
751
-
752
- <div className="rounded-lg border p-4 space-y-3">
753
- <div className="flex items-center justify-between">
754
- <h2 className="text-sm font-semibold">{t('customer_accounts.admin.detail.sections.security', 'Security')}</h2>
755
- </div>
756
- <div className="flex flex-wrap gap-2">
757
- <Button variant="outline" onClick={() => setResetPasswordOpen(true)}>
758
- {t('customer_accounts.admin.detail.resetPassword.actions.open', 'Reset Password')}
759
- </Button>
760
- <Button
761
- variant="outline"
762
- onClick={() => { void handleSendResetLink() }}
763
- disabled={isSendingResetLink}
764
- >
765
- {isSendingResetLink
766
- ? t('customer_accounts.admin.detail.sendResetLink.actions.sending', 'Generating...')
767
- : t('customer_accounts.admin.detail.sendResetLink.actions.send', 'Send Reset Link')}
768
- </Button>
769
- </div>
770
- {resetLinkUrl && (
771
- <div className="rounded-md border border-status-info-border bg-status-info-bg p-3">
772
- <p className="mb-1.5 text-sm font-medium text-status-info-text">
773
- {t('customer_accounts.admin.detail.sendResetLink.linkLabel', 'Password reset link (valid for 60 minutes):')}
774
- </p>
775
- <div className="flex items-center gap-2">
776
- <code className="flex-1 break-all rounded bg-status-info-bg px-2 py-1 text-xs text-status-info-text">
777
- {resetLinkUrl}
778
- </code>
779
- <Button
780
- type="button"
781
- variant="outline"
782
- size="sm"
783
- onClick={() => {
784
- void navigator.clipboard.writeText(resetLinkUrl)
785
- flash(t('customer_accounts.admin.detail.sendResetLink.flash.copied', 'Link copied to clipboard'), 'success')
786
- }}
787
- >
788
- {t('customer_accounts.admin.detail.sendResetLink.actions.copy', 'Copy')}
789
- </Button>
790
- </div>
791
- <p className="mt-1.5 text-xs text-status-info-text">
792
- {t('customer_accounts.admin.detail.sendResetLink.hint', 'Share this link with the customer to let them set a new password.')}
793
- </p>
794
- </div>
795
- )}
796
- </div>
797
-
798
- <div className="rounded-lg border p-4 space-y-3">
799
- <h2 className="text-sm font-semibold">
800
- {t('customer_accounts.admin.detail.sections.sessions', 'Active Sessions')}
801
- {data.sessions.length > 0 && (
802
- <span className="ml-2 text-xs font-normal text-muted-foreground">({data.sessions.length})</span>
803
- )}
804
- </h2>
805
- {data.sessions.length === 0 ? (
806
- <p className="text-sm text-muted-foreground">
807
- {t('customer_accounts.admin.detail.noSessions', 'No active sessions')}
808
- </p>
809
- ) : (
810
- <div className="divide-y">
811
- {data.sessions.map((session) => (
812
- <div key={session.id} className="flex items-center justify-between py-2 text-sm">
813
- <div className="space-y-0.5">
814
- <p className="font-medium">
815
- {session.ipAddress || t('customer_accounts.admin.detail.unknownIp', 'Unknown IP')}
816
- </p>
817
- <p className="text-xs text-muted-foreground truncate max-w-xs">
818
- {session.userAgent || t('customer_accounts.admin.detail.unknownDevice', 'Unknown device')}
819
- </p>
820
- <p className="text-xs text-muted-foreground">
821
- {t('customer_accounts.admin.detail.fields.lastUsed', 'Last used')}: {formatDate(session.lastUsedAt, '-')}
822
- </p>
823
- </div>
824
- <Button
825
- variant="outline"
826
- size="sm"
827
- onClick={() => { void handleRevokeSession(session.id) }}
828
- >
829
- {t('customer_accounts.admin.detail.actions.revoke', 'Revoke')}
830
- </Button>
831
- </div>
832
- ))}
833
- </div>
834
- )}
835
- </div>
836
-
837
- <ResetPasswordDialog
838
- open={resetPasswordOpen}
839
- onOpenChange={setResetPasswordOpen}
840
- userId={id!}
841
- onRunMutation={runMutationWithContext}
842
- />
11
+ <PortalUserDetailPageClient params={params} portalOrigin={portalOrigin} />
843
12
  </PageBody>
844
- {ConfirmDialogElement}
845
13
  </Page>
846
14
  )
847
15
  }