@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,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/modules/communication_channels/lib/outbound-recipient.ts"],
4
- "sourcesContent": ["import { z } from 'zod'\nimport type { ChannelCapabilities } from './adapter'\n\n/**\n * Upper bound shared by both recipient shapes. 320 is the RFC 5321 maximum for\n * an email address (64 local + `@` + 255 domain); provider-native identifiers\n * are far shorter, so one ceiling covers both.\n */\nexport const MAX_OUTBOUND_RECIPIENT_LENGTH = 320\n\nconst emailRecipientSchema = z.string().email()\n\n/**\n * Characters a provider-native recipient may contain. This is an allowlist, not a\n * denylist, because the recipient reaches adapters that interpolate it into a REST\n * path (Discord posts to `/channels/{recipient}/messages`), and a denylist fails\n * open on every character nobody thought of \u2014 percent-encoded separators\n * (`%2F`, `%2e%2e%2f`) and control bytes (NUL, DEL) all walked through the\n * previous `[\\r\\n\\s/\\\\?#]` class. An allowlist fails closed instead: the worst\n * case is a provider whose identifier alphabet needs widening, which is a\n * reviewable one-line change rather than a silent path-steering primitive.\n *\n * The set covers every provider-native identifier shape the hub has to carry\n * today \u2014 Discord snowflakes (digits), Slack-style ids (alphanumerics), and email\n * addresses, since `'provider-native'` must never narrow what `'email'` accepts.\n */\nconst PROVIDER_NATIVE_ALLOWED = /^[A-Za-z0-9._:@+-]+$/\n\nexport type OutboundRecipientCheck = { ok: true } | { ok: false; error: string }\n\n/**\n * Validate an outbound recipient against the provider's declared recipient\n * shape.\n *\n * The hub used to hard-wire `z.string().email()` on every outbound endpoint,\n * which left providers whose recipients are not email addresses with no product\n * path to send at all (#4976). Validation now follows the adapter's\n * `capabilities.recipientFormat`, defaulting to `'email'` so every existing\n * provider keeps byte-identical behavior.\n */\nexport function validateOutboundRecipient(\n recipient: unknown,\n capabilities: Pick<ChannelCapabilities, 'recipientFormat'> | null | undefined,\n): OutboundRecipientCheck {\n if (typeof recipient !== 'string' || recipient.length === 0) {\n return { ok: false, error: 'Recipient is required' }\n }\n if (recipient.length > MAX_OUTBOUND_RECIPIENT_LENGTH) {\n return {\n ok: false,\n error: `Recipient must be at most ${MAX_OUTBOUND_RECIPIENT_LENGTH} characters`,\n }\n }\n if (capabilities?.recipientFormat !== 'provider-native') {\n return emailRecipientSchema.safeParse(recipient).success\n ? { ok: true }\n : { ok: false, error: 'Recipient must be a valid email address' }\n }\n if (!PROVIDER_NATIVE_ALLOWED.test(recipient)) {\n return {\n ok: false,\n error: 'Recipient may only contain letters, digits, and the characters . _ : @ + -',\n }\n }\n // `.` is allowed (email addresses need it), so traversal still has to be\n // rejected explicitly even though the separators it would need are not.\n if (recipient.includes('..')) {\n return { ok: false, error: 'Recipient must not contain \"..\"' }\n }\n return { ok: true }\n}\n"],
5
- "mappings": "AAAA,SAAS,SAAS;AAQX,MAAM,gCAAgC;AAE7C,MAAM,uBAAuB,EAAE,OAAO,EAAE,MAAM;AAgB9C,MAAM,0BAA0B;AAczB,SAAS,0BACd,WACA,cACwB;AACxB,MAAI,OAAO,cAAc,YAAY,UAAU,WAAW,GAAG;AAC3D,WAAO,EAAE,IAAI,OAAO,OAAO,wBAAwB;AAAA,EACrD;AACA,MAAI,UAAU,SAAS,+BAA+B;AACpD,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,OAAO,6BAA6B,6BAA6B;AAAA,IACnE;AAAA,EACF;AACA,MAAI,cAAc,oBAAoB,mBAAmB;AACvD,WAAO,qBAAqB,UAAU,SAAS,EAAE,UAC7C,EAAE,IAAI,KAAK,IACX,EAAE,IAAI,OAAO,OAAO,0CAA0C;AAAA,EACpE;AACA,MAAI,CAAC,wBAAwB,KAAK,SAAS,GAAG;AAC5C,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,OAAO;AAAA,IACT;AAAA,EACF;AAGA,MAAI,UAAU,SAAS,IAAI,GAAG;AAC5B,WAAO,EAAE,IAAI,OAAO,OAAO,kCAAkC;AAAA,EAC/D;AACA,SAAO,EAAE,IAAI,KAAK;AACpB;",
6
- "names": []
7
- }
@@ -1,51 +0,0 @@
1
- import { findOneWithDecryption } from "@open-mercato/shared/lib/encryption/find";
2
- import { createLogger } from "@open-mercato/shared/lib/logger";
3
- import { CommunicationChannel, ExternalConversation, MessageChannelLink } from "../data/entities.js";
4
- const logger = createLogger("communication_channels").child({ component: "resolve-channel-type" });
5
- async function resolveChannelType(container, scope, reference) {
6
- const em = container.resolve("em").fork();
7
- const dscope = { tenantId: scope.tenantId, organizationId: scope.organizationId ?? null };
8
- const baseFilter = { tenantId: scope.tenantId, organizationId: scope.organizationId ?? null };
9
- let externalConversationId = reference.externalConversationId ?? null;
10
- if (!externalConversationId && reference.messageId) {
11
- const link = await findOneWithDecryption(
12
- em,
13
- MessageChannelLink,
14
- { messageId: reference.messageId, ...baseFilter },
15
- void 0,
16
- dscope
17
- );
18
- if (link?.channelType) return link.channelType;
19
- externalConversationId = link?.externalConversationId ?? null;
20
- }
21
- if (!externalConversationId) return null;
22
- const conversation = await findOneWithDecryption(
23
- em,
24
- ExternalConversation,
25
- { id: externalConversationId, ...baseFilter },
26
- void 0,
27
- dscope
28
- );
29
- if (!conversation?.channelId) return null;
30
- const channel = await findOneWithDecryption(
31
- em,
32
- CommunicationChannel,
33
- { id: conversation.channelId, ...baseFilter, deletedAt: null },
34
- void 0,
35
- dscope
36
- );
37
- return channel?.channelType ?? null;
38
- }
39
- async function resolveChannelTypeSafely(container, scope, reference) {
40
- try {
41
- return await resolveChannelType(container, scope, reference);
42
- } catch (err) {
43
- logger.warn("channel type resolution failed, treating the channel as unknown", { err });
44
- return null;
45
- }
46
- }
47
- export {
48
- resolveChannelType,
49
- resolveChannelTypeSafely
50
- };
51
- //# sourceMappingURL=resolve-channel-type.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/modules/communication_channels/lib/resolve-channel-type.ts"],
4
- "sourcesContent": ["import type { EntityManager } from '@mikro-orm/postgresql'\nimport type { AppContainer } from '@open-mercato/shared/lib/di/container'\nimport { findOneWithDecryption } from '@open-mercato/shared/lib/encryption/find'\nimport { createLogger } from '@open-mercato/shared/lib/logger'\nimport { CommunicationChannel, ExternalConversation, MessageChannelLink } from '../data/entities'\n\nconst logger = createLogger('communication_channels').child({ component: 'resolve-channel-type' })\n\nexport type ChannelTypeScope = {\n tenantId: string\n organizationId: string | null\n}\n\nexport type ChannelTypeReference = {\n /** `ExternalConversation.id`, as carried by a message's `sourceEntityId`. */\n externalConversationId?: string | null\n /** A platform `messages.message` id that may be linked to a channel. */\n messageId?: string | null\n}\n\n/**\n * Resolve the channel type behind a platform message or conversation (#4975).\n *\n * Cross-module callers (the `messages` compose route) need to know whether an\n * external correspondent is reachable by email before validating a compose\n * payload, but `messages` may not reach into this module's entities. They\n * resolve this facade from DI instead \u2014 mirroring `communicationChannelsSendAsUser`\n * \u2014 and treat a `null` result as \"unknown\", which the messages validator\n * handles fail-closed.\n *\n * Always tenant/organization scoped: a reference that does not resolve inside\n * the caller's scope is reported as unknown rather than looked up globally.\n */\nexport async function resolveChannelType(\n container: AppContainer,\n scope: ChannelTypeScope,\n reference: ChannelTypeReference,\n): Promise<string | null> {\n const em = (container.resolve('em') as EntityManager).fork()\n const dscope = { tenantId: scope.tenantId, organizationId: scope.organizationId ?? null }\n const baseFilter = { tenantId: scope.tenantId, organizationId: scope.organizationId ?? null }\n\n let externalConversationId = reference.externalConversationId ?? null\n\n if (!externalConversationId && reference.messageId) {\n // The message is linked to a channel directly \u2014 `MessageChannelLink` carries\n // a denormalized channel type, so this is the cheapest hop when it exists.\n const link = await findOneWithDecryption(\n em,\n MessageChannelLink,\n { messageId: reference.messageId, ...baseFilter },\n undefined,\n dscope,\n )\n if (link?.channelType) return link.channelType\n externalConversationId = link?.externalConversationId ?? null\n }\n\n if (!externalConversationId) return null\n\n const conversation = await findOneWithDecryption(\n em,\n ExternalConversation,\n { id: externalConversationId, ...baseFilter },\n undefined,\n dscope,\n )\n if (!conversation?.channelId) return null\n\n const channel = await findOneWithDecryption(\n em,\n CommunicationChannel,\n { id: conversation.channelId, ...baseFilter, deletedAt: null },\n undefined,\n dscope,\n )\n return channel?.channelType ?? null\n}\n\n/**\n * Same contract, but never throws: a lookup failure degrades to \"unknown\" so a\n * transient database error cannot turn into a 500 on an otherwise valid compose.\n * Unknown is the safe answer \u2014 the messages validator fails closed on it.\n */\nexport async function resolveChannelTypeSafely(\n container: AppContainer,\n scope: ChannelTypeScope,\n reference: ChannelTypeReference,\n): Promise<string | null> {\n try {\n return await resolveChannelType(container, scope, reference)\n } catch (err) {\n logger.warn('channel type resolution failed, treating the channel as unknown', { err })\n return null\n }\n}\n\n/** DI service type for cross-module callers (resolve `communicationChannelsResolveChannelType`). */\nexport type ResolveChannelTypeService = typeof resolveChannelTypeSafely\n"],
5
- "mappings": "AAEA,SAAS,6BAA6B;AACtC,SAAS,oBAAoB;AAC7B,SAAS,sBAAsB,sBAAsB,0BAA0B;AAE/E,MAAM,SAAS,aAAa,wBAAwB,EAAE,MAAM,EAAE,WAAW,uBAAuB,CAAC;AA2BjG,eAAsB,mBACpB,WACA,OACA,WACwB;AACxB,QAAM,KAAM,UAAU,QAAQ,IAAI,EAAoB,KAAK;AAC3D,QAAM,SAAS,EAAE,UAAU,MAAM,UAAU,gBAAgB,MAAM,kBAAkB,KAAK;AACxF,QAAM,aAAa,EAAE,UAAU,MAAM,UAAU,gBAAgB,MAAM,kBAAkB,KAAK;AAE5F,MAAI,yBAAyB,UAAU,0BAA0B;AAEjE,MAAI,CAAC,0BAA0B,UAAU,WAAW;AAGlD,UAAM,OAAO,MAAM;AAAA,MACjB;AAAA,MACA;AAAA,MACA,EAAE,WAAW,UAAU,WAAW,GAAG,WAAW;AAAA,MAChD;AAAA,MACA;AAAA,IACF;AACA,QAAI,MAAM,YAAa,QAAO,KAAK;AACnC,6BAAyB,MAAM,0BAA0B;AAAA,EAC3D;AAEA,MAAI,CAAC,uBAAwB,QAAO;AAEpC,QAAM,eAAe,MAAM;AAAA,IACzB;AAAA,IACA;AAAA,IACA,EAAE,IAAI,wBAAwB,GAAG,WAAW;AAAA,IAC5C;AAAA,IACA;AAAA,EACF;AACA,MAAI,CAAC,cAAc,UAAW,QAAO;AAErC,QAAM,UAAU,MAAM;AAAA,IACpB;AAAA,IACA;AAAA,IACA,EAAE,IAAI,aAAa,WAAW,GAAG,YAAY,WAAW,KAAK;AAAA,IAC7D;AAAA,IACA;AAAA,EACF;AACA,SAAO,SAAS,eAAe;AACjC;AAOA,eAAsB,yBACpB,WACA,OACA,WACwB;AACxB,MAAI;AACF,WAAO,MAAM,mBAAmB,WAAW,OAAO,SAAS;AAAA,EAC7D,SAAS,KAAK;AACZ,WAAO,KAAK,mEAAmE,EAAE,IAAI,CAAC;AACtF,WAAO;AAAA,EACT;AACF;",
6
- "names": []
7
- }
@@ -1,18 +0,0 @@
1
- const TONE_DOT_CLASS = {
2
- success: "bg-status-success-icon",
3
- error: "bg-status-error-icon",
4
- warning: "bg-status-warning-icon",
5
- info: "bg-status-info-icon",
6
- neutral: "bg-status-neutral-icon",
7
- brand: "bg-brand-violet",
8
- pink: "bg-status-pink-icon"
9
- };
10
- function toneToDotClass(tone, fallback = "bg-status-neutral-icon") {
11
- if (tone && tone in TONE_DOT_CLASS) return TONE_DOT_CLASS[tone];
12
- return fallback;
13
- }
14
- export {
15
- TONE_DOT_CLASS,
16
- toneToDotClass
17
- };
18
- //# sourceMappingURL=toneClasses.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../../../../src/modules/customers/backend/customers/deals/pipeline/components/toneClasses.ts"],
4
- "sourcesContent": ["import type { FilterOptionTone } from '@open-mercato/shared/lib/query/advanced-filter'\n\n// Saturated icon tokens shared by the kanban lane accent bar and the status filter\n// pills, so both surfaces render the same tone identically (#5107 review).\nexport const TONE_DOT_CLASS: Record<FilterOptionTone, string> = {\n success: 'bg-status-success-icon',\n error: 'bg-status-error-icon',\n warning: 'bg-status-warning-icon',\n info: 'bg-status-info-icon',\n neutral: 'bg-status-neutral-icon',\n brand: 'bg-brand-violet',\n pink: 'bg-status-pink-icon',\n}\n\nexport function toneToDotClass(\n tone: FilterOptionTone | null | undefined,\n fallback = 'bg-status-neutral-icon',\n): string {\n if (tone && tone in TONE_DOT_CLASS) return TONE_DOT_CLASS[tone]\n return fallback\n}\n"],
5
- "mappings": "AAIO,MAAM,iBAAmD;AAAA,EAC9D,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,MAAM;AACR;AAEO,SAAS,eACd,MACA,WAAW,0BACH;AACR,MAAI,QAAQ,QAAQ,eAAgB,QAAO,eAAe,IAAI;AAC9D,SAAO;AACT;",
6
- "names": []
7
- }
@@ -1,9 +0,0 @@
1
- function participantActorKey(participant) {
2
- if (participant.userId) return `user:${participant.userId}`;
3
- const email = participant.email?.trim().toLowerCase();
4
- return email ? `email:${email}` : null;
5
- }
6
- export {
7
- participantActorKey
8
- };
9
- //# sourceMappingURL=participantIdentity.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../src/modules/customers/lib/calendar/participantIdentity.ts"],
4
- "sourcesContent": ["/**\n * The one canonical actor key for a calendar participant.\n *\n * A staff/customer attendee is identified by `userId`. An external guest has no\n * record in the system, so the normalized email is the only stable identity it\n * carries. Mapping, dedupe, conflict detection and the editor's conflict-probe\n * dependency key all derive their key from here, so a guest is treated as the\n * same actor across events instead of dropping out of actor comparisons.\n *\n * Returns `null` for a participant with neither \u2014 such a participant cannot be\n * compared to any other and must never collide with one that can.\n */\nexport function participantActorKey(participant: { userId?: string; email?: string }): string | null {\n if (participant.userId) return `user:${participant.userId}`\n const email = participant.email?.trim().toLowerCase()\n return email ? `email:${email}` : null\n}\n"],
5
- "mappings": "AAYO,SAAS,oBAAoB,aAAiE;AACnG,MAAI,YAAY,OAAQ,QAAO,QAAQ,YAAY,MAAM;AACzD,QAAM,QAAQ,YAAY,OAAO,KAAK,EAAE,YAAY;AACpD,SAAO,QAAQ,SAAS,KAAK,KAAK;AACpC;",
6
- "names": []
7
- }
@@ -1,45 +0,0 @@
1
- import { findWithDecryption } from "@open-mercato/shared/lib/encryption/find";
2
- import { CustomerPipelineStage } from "../data/entities.js";
3
- const TERMINAL_PIPELINE_STAGE_LABELS = {
4
- won: /* @__PURE__ */ new Set(["won", "win", "closed won", "closed win"]),
5
- lost: /* @__PURE__ */ new Set(["lost", "loose", "closed lost", "closed loose"])
6
- };
7
- function dealClosureOutcomeFromStatus(status) {
8
- const normalized = typeof status === "string" ? status.trim().toLowerCase() : status;
9
- if (normalized === "win" || normalized === "won") return "won";
10
- if (normalized === "loose" || normalized === "lost") return "lost";
11
- return null;
12
- }
13
- function normalizePipelineStageLabel(value) {
14
- return value.trim().toLowerCase().replace(/[^a-z0-9]+/g, " ").trim();
15
- }
16
- async function loadClosurePipelineStageSnapshot(em, input) {
17
- if (!input.pipelineId) return null;
18
- const stages = await findWithDecryption(
19
- em,
20
- CustomerPipelineStage,
21
- {
22
- pipelineId: input.pipelineId,
23
- tenantId: input.tenantId,
24
- organizationId: input.organizationId
25
- },
26
- { orderBy: { order: "ASC" } },
27
- { tenantId: input.tenantId, organizationId: input.organizationId }
28
- );
29
- const aliases = TERMINAL_PIPELINE_STAGE_LABELS[input.closureOutcome];
30
- const stage = stages.find((candidate) => aliases.has(normalizePipelineStageLabel(candidate.label)));
31
- if (!stage) return null;
32
- return {
33
- id: stage.id,
34
- pipelineId: stage.pipelineId,
35
- label: stage.label,
36
- order: stage.order
37
- };
38
- }
39
- export {
40
- TERMINAL_PIPELINE_STAGE_LABELS,
41
- dealClosureOutcomeFromStatus,
42
- loadClosurePipelineStageSnapshot,
43
- normalizePipelineStageLabel
44
- };
45
- //# sourceMappingURL=closureStage.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/modules/customers/lib/closureStage.ts"],
4
- "sourcesContent": ["import type { EntityManager } from '@mikro-orm/postgresql'\nimport { findWithDecryption } from '@open-mercato/shared/lib/encryption/find'\nimport { CustomerPipelineStage } from '../data/entities'\n\nexport type DealClosureOutcome = 'won' | 'lost'\n\nexport type PipelineStageSnapshot = {\n id: string\n pipelineId: string\n label: string\n order: number\n}\n\n// Stage labels that mark a pipeline as terminal for a given closure outcome. Matching is\n// label-based because stages are tenant-configurable rows; see #5107.\nexport const TERMINAL_PIPELINE_STAGE_LABELS: Record<DealClosureOutcome, ReadonlySet<string>> = {\n won: new Set(['won', 'win', 'closed won', 'closed win']),\n lost: new Set(['lost', 'loose', 'closed lost', 'closed loose']),\n}\n\n/**\n * Map a deal status spelling (UI `win`/`loose` or AI `won`/`lost`) to its closure\n * outcome. Case-insensitive because callers such as the AI tool pass free-form model\n * text through, while every persisted status is lower-case.\n */\nexport function dealClosureOutcomeFromStatus(status: string | null | undefined): DealClosureOutcome | null {\n const normalized = typeof status === 'string' ? status.trim().toLowerCase() : status\n if (normalized === 'win' || normalized === 'won') return 'won'\n if (normalized === 'loose' || normalized === 'lost') return 'lost'\n return null\n}\n\nexport function normalizePipelineStageLabel(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, ' ')\n .trim()\n}\n\n/**\n * Resolve the terminal stage of the deal's pipeline for a closure outcome, so every\n * writer (command, AI tool preview) agrees on where a closed deal lands (#5107).\n */\nexport async function loadClosurePipelineStageSnapshot(\n em: EntityManager,\n input: {\n pipelineId: string | null\n closureOutcome: DealClosureOutcome\n tenantId: string\n organizationId: string\n },\n): Promise<PipelineStageSnapshot | null> {\n if (!input.pipelineId) return null\n\n const stages = await findWithDecryption(\n em,\n CustomerPipelineStage,\n {\n pipelineId: input.pipelineId,\n tenantId: input.tenantId,\n organizationId: input.organizationId,\n },\n { orderBy: { order: 'ASC' } },\n { tenantId: input.tenantId, organizationId: input.organizationId },\n )\n const aliases = TERMINAL_PIPELINE_STAGE_LABELS[input.closureOutcome]\n const stage = stages.find((candidate) => aliases.has(normalizePipelineStageLabel(candidate.label)))\n if (!stage) return null\n return {\n id: stage.id,\n pipelineId: stage.pipelineId,\n label: stage.label,\n order: stage.order,\n }\n}\n"],
5
- "mappings": "AACA,SAAS,0BAA0B;AACnC,SAAS,6BAA6B;AAa/B,MAAM,iCAAkF;AAAA,EAC7F,KAAK,oBAAI,IAAI,CAAC,OAAO,OAAO,cAAc,YAAY,CAAC;AAAA,EACvD,MAAM,oBAAI,IAAI,CAAC,QAAQ,SAAS,eAAe,cAAc,CAAC;AAChE;AAOO,SAAS,6BAA6B,QAA8D;AACzG,QAAM,aAAa,OAAO,WAAW,WAAW,OAAO,KAAK,EAAE,YAAY,IAAI;AAC9E,MAAI,eAAe,SAAS,eAAe,MAAO,QAAO;AACzD,MAAI,eAAe,WAAW,eAAe,OAAQ,QAAO;AAC5D,SAAO;AACT;AAEO,SAAS,4BAA4B,OAAuB;AACjE,SAAO,MACJ,KAAK,EACL,YAAY,EACZ,QAAQ,eAAe,GAAG,EAC1B,KAAK;AACV;AAMA,eAAsB,iCACpB,IACA,OAMuC;AACvC,MAAI,CAAC,MAAM,WAAY,QAAO;AAE9B,QAAM,SAAS,MAAM;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,MACE,YAAY,MAAM;AAAA,MAClB,UAAU,MAAM;AAAA,MAChB,gBAAgB,MAAM;AAAA,IACxB;AAAA,IACA,EAAE,SAAS,EAAE,OAAO,MAAM,EAAE;AAAA,IAC5B,EAAE,UAAU,MAAM,UAAU,gBAAgB,MAAM,eAAe;AAAA,EACnE;AACA,QAAM,UAAU,+BAA+B,MAAM,cAAc;AACnE,QAAM,QAAQ,OAAO,KAAK,CAAC,cAAc,QAAQ,IAAI,4BAA4B,UAAU,KAAK,CAAC,CAAC;AAClG,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO;AAAA,IACL,IAAI,MAAM;AAAA,IACV,YAAY,MAAM;AAAA,IAClB,OAAO,MAAM;AAAA,IACb,OAAO,MAAM;AAAA,EACf;AACF;",
6
- "names": []
7
- }
@@ -1,12 +0,0 @@
1
- import { NextResponse } from "next/server";
2
- import {
3
- isOrganizationReadAccessAllowed
4
- } from "@open-mercato/core/modules/directory/utils/organizationScopeGuard";
5
- function denyCustomerDetailReadAsNotFound(input, notFoundMessage) {
6
- if (isOrganizationReadAccessAllowed(input)) return null;
7
- return NextResponse.json({ error: notFoundMessage }, { status: 404 });
8
- }
9
- export {
10
- denyCustomerDetailReadAsNotFound
11
- };
12
- //# sourceMappingURL=detailReadAccess.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/modules/customers/lib/detailReadAccess.ts"],
4
- "sourcesContent": ["import { NextResponse } from 'next/server'\nimport {\n isOrganizationReadAccessAllowed,\n type OrganizationReadAccessInput,\n} from '@open-mercato/core/modules/directory/utils/organizationScopeGuard'\n\n/**\n * Single-record customers detail routes (person / company / deal) must not leak\n * whether a record exists through the organization-scope check.\n *\n * The API dispatcher already enforces each route's `metadata.requireFeatures`\n * before the handler runs, returning a uniform `403` for callers who lack the\n * grant \u2014 so that path never distinguishes an existing id from a missing one.\n * The only remaining existence signal is the *post-load* organization guard: a\n * caller who holds the feature but whose scope excludes the record's\n * organization previously received `403` (record exists in another org) while a\n * non-existent id received `404`. That 403-vs-404 split is an existence oracle\n * (issue #5504).\n *\n * Collapse the organization-scope denial into the route's own not-found\n * response so an out-of-scope caller cannot tell \"exists in an organization you\n * cannot see\" from \"does not exist\" \u2014 the shape the api_keys hardening\n * (#4033 / PR-4051) established. Sharing this decision keeps the three customers\n * detail routes from drifting apart again.\n *\n * @returns the `404` response to return when read access is denied, or `null`\n * when the caller may read the record.\n */\nexport function denyCustomerDetailReadAsNotFound(\n input: OrganizationReadAccessInput,\n notFoundMessage: string,\n): NextResponse | null {\n if (isOrganizationReadAccessAllowed(input)) return null\n return NextResponse.json({ error: notFoundMessage }, { status: 404 })\n}\n"],
5
- "mappings": "AAAA,SAAS,oBAAoB;AAC7B;AAAA,EACE;AAAA,OAEK;AAwBA,SAAS,iCACd,OACA,iBACqB;AACrB,MAAI,gCAAgC,KAAK,EAAG,QAAO;AACnD,SAAO,aAAa,KAAK,EAAE,OAAO,gBAAgB,GAAG,EAAE,QAAQ,IAAI,CAAC;AACtE;",
6
- "names": []
7
- }
@@ -1,19 +0,0 @@
1
- async function failAbandonedRun(payload, info) {
2
- const data = payload;
3
- const runId = data?.payload?.runId;
4
- const scope = data?.payload?.scope;
5
- if (typeof runId !== "string" || typeof scope?.organizationId !== "string" || typeof scope?.tenantId !== "string") return;
6
- const runScope = { organizationId: scope.organizationId, tenantId: scope.tenantId };
7
- const errorMessage = `the queue abandoned this run's job without running it: ${info.reason}`;
8
- const { createRequestContainer } = await import("@open-mercato/shared/lib/di/container");
9
- const container = await createRequestContainer();
10
- const runService = container.resolve("dataSyncRunService");
11
- const run = await runService.markStatus(runId, "failed", runScope, errorMessage);
12
- if (!run?.progressJobId) return;
13
- const progressService = container.resolve("progressService");
14
- await progressService.failJob(run.progressJobId, { errorMessage }, runScope);
15
- }
16
- export {
17
- failAbandonedRun
18
- };
19
- //# sourceMappingURL=abandoned-run.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/modules/data_sync/lib/abandoned-run.ts"],
4
- "sourcesContent": ["import type { AbandonedJobInfo } from '@open-mercato/queue'\n\n/**\n * Fail the run behind a job the queue gave up on.\n *\n * A resumable data_sync job is ONE long-lived job for a whole run \u2014 `runImport` is entered once and\n * stays there for the duration, which for a full backfill is days. Every worker death (a deploy, an\n * OOM) therefore stalls that job, and BullMQ's stalled counter is cumulative for the job's life:\n * past `DATA_SYNC_MAX_STALLED_COUNT` it writes a deferred failure and the next worker fails the job\n * BEFORE calling the processor.\n *\n * So `runImport` never runs, never throws, and never finalizes \u2014 and `sync_runs` is left saying\n * `running` for a run nothing is running, forever. That is the residual state `queue-policy.ts`\n * describes as what remains after a job exhausts its stall budget; this repairs it.\n *\n * It only ever moves a non-terminal run: `markStatus` refuses to overwrite `completed` / `failed` /\n * `cancelled`, so a job abandoned after its run has ended is a no-op. `onJobAbandoned` may deliver\n * the same job more than once, which for the same reason is also a no-op.\n *\n * The run's progress job is failed alongside it, the way the worker's own catch path does in\n * `workers/sync-import.ts`. Without that the two halves disagree \u2014 the run reads `failed` while the\n * operation still shows as in flight in the top bar \u2014 until the progress staleness sweep eventually\n * fails it with a generic no-heartbeat message instead of the reason the queue recorded.\n */\nexport async function failAbandonedRun(payload: unknown, info: AbandonedJobInfo): Promise<void> {\n const data = payload as { payload?: { runId?: unknown; scope?: { organizationId?: unknown; tenantId?: unknown } } } | undefined\n const runId = data?.payload?.runId\n const scope = data?.payload?.scope\n // Nothing to repair without both: the run row is keyed by id AND tenant scope.\n if (typeof runId !== 'string' || typeof scope?.organizationId !== 'string' || typeof scope?.tenantId !== 'string') return\n\n const runScope = { organizationId: scope.organizationId, tenantId: scope.tenantId }\n const errorMessage = `the queue abandoned this run's job without running it: ${info.reason}`\n\n const { createRequestContainer } = await import('@open-mercato/shared/lib/di/container')\n const container = await createRequestContainer()\n const runService = container.resolve('dataSyncRunService') as {\n markStatus(\n runId: string,\n status: string,\n scope: { organizationId: string; tenantId: string },\n error?: string,\n ): Promise<{ progressJobId?: string | null } | null>\n }\n const run = await runService.markStatus(runId, 'failed', runScope, errorMessage)\n if (!run?.progressJobId) return\n\n const progressService = container.resolve('progressService') as {\n failJob(\n jobId: string,\n input: { errorMessage: string },\n ctx: { organizationId: string; tenantId: string },\n ): Promise<unknown>\n }\n await progressService.failJob(run.progressJobId, { errorMessage }, runScope)\n}\n"],
5
- "mappings": "AAwBA,eAAsB,iBAAiB,SAAkB,MAAuC;AAC9F,QAAM,OAAO;AACb,QAAM,QAAQ,MAAM,SAAS;AAC7B,QAAM,QAAQ,MAAM,SAAS;AAE7B,MAAI,OAAO,UAAU,YAAY,OAAO,OAAO,mBAAmB,YAAY,OAAO,OAAO,aAAa,SAAU;AAEnH,QAAM,WAAW,EAAE,gBAAgB,MAAM,gBAAgB,UAAU,MAAM,SAAS;AAClF,QAAM,eAAe,0DAA0D,KAAK,MAAM;AAE1F,QAAM,EAAE,uBAAuB,IAAI,MAAM,OAAO,uCAAuC;AACvF,QAAM,YAAY,MAAM,uBAAuB;AAC/C,QAAM,aAAa,UAAU,QAAQ,oBAAoB;AAQzD,QAAM,MAAM,MAAM,WAAW,WAAW,OAAO,UAAU,UAAU,YAAY;AAC/E,MAAI,CAAC,KAAK,cAAe;AAEzB,QAAM,kBAAkB,UAAU,QAAQ,iBAAiB;AAO3D,QAAM,gBAAgB,QAAQ,IAAI,eAAe,EAAE,aAAa,GAAG,QAAQ;AAC7E;",
6
- "names": []
7
- }
@@ -1,46 +0,0 @@
1
- import { z } from "zod";
2
- import { toDeprecatedSnakeCaseAliases, toIso } from "./deviceList.js";
3
- function serializeDeviceDetail(device) {
4
- const camel = {
5
- id: device.id,
6
- userId: device.userId,
7
- deviceId: device.deviceId,
8
- platform: device.platform,
9
- clientAppVersion: device.clientAppVersion ?? null,
10
- osVersion: device.osVersion ?? null,
11
- pushProvider: device.pushProvider ?? null,
12
- pushTokenUpdatedAt: toIso(device.pushTokenUpdatedAt),
13
- lastSeenAt: toIso(device.lastSeenAt),
14
- createdAt: toIso(device.createdAt),
15
- updatedAt: toIso(device.updatedAt)
16
- };
17
- return { ...camel, ...toDeprecatedSnakeCaseAliases(camel) };
18
- }
19
- const deprecatedAlias = (of) => `Deprecated alias for \`${of}\`; removed in the next minor release.`;
20
- const deviceDetailItemSchema = z.object({
21
- id: z.string().uuid(),
22
- userId: z.string().uuid(),
23
- deviceId: z.string(),
24
- platform: z.enum(["ios", "android", "web"]),
25
- clientAppVersion: z.string().nullable(),
26
- osVersion: z.string().nullable(),
27
- pushProvider: z.string().nullable(),
28
- pushTokenUpdatedAt: z.string().nullable(),
29
- lastSeenAt: z.string().nullable(),
30
- createdAt: z.string().nullable(),
31
- updatedAt: z.string().nullable(),
32
- user_id: z.string().uuid().describe(deprecatedAlias("userId")),
33
- device_id: z.string().describe(deprecatedAlias("deviceId")),
34
- client_app_version: z.string().nullable().describe(deprecatedAlias("clientAppVersion")),
35
- os_version: z.string().nullable().describe(deprecatedAlias("osVersion")),
36
- push_provider: z.string().nullable().describe(deprecatedAlias("pushProvider")),
37
- push_token_updated_at: z.string().nullable().describe(deprecatedAlias("pushTokenUpdatedAt")),
38
- last_seen_at: z.string().nullable().describe(deprecatedAlias("lastSeenAt")),
39
- created_at: z.string().nullable().describe(deprecatedAlias("createdAt")),
40
- updated_at: z.string().nullable().describe(deprecatedAlias("updatedAt"))
41
- });
42
- export {
43
- deviceDetailItemSchema,
44
- serializeDeviceDetail
45
- };
46
- //# sourceMappingURL=deviceSerialization.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/modules/devices/api/deviceSerialization.ts"],
4
- "sourcesContent": ["import { z } from 'zod'\nimport type { UserDevice } from '../data/entities'\nimport { toDeprecatedSnakeCaseAliases, toIso } from './deviceList'\n\n// Detail contract for `GET /api/devices/admin/devices/:id`. Keys are camelCase like every other\n// module's responses (#5513); the snake_case keys stay alongside as deprecated aliases for one minor\n// version, per the deprecation protocol in BACKWARD_COMPATIBILITY.md \u00A7 7.\n// push_token is a secret and is never returned.\nexport function serializeDeviceDetail(device: UserDevice): Record<string, unknown> {\n const camel = {\n id: device.id,\n userId: device.userId,\n deviceId: device.deviceId,\n platform: device.platform,\n clientAppVersion: device.clientAppVersion ?? null,\n osVersion: device.osVersion ?? null,\n pushProvider: device.pushProvider ?? null,\n pushTokenUpdatedAt: toIso(device.pushTokenUpdatedAt),\n lastSeenAt: toIso(device.lastSeenAt),\n createdAt: toIso(device.createdAt),\n updatedAt: toIso(device.updatedAt),\n }\n return { ...camel, ...toDeprecatedSnakeCaseAliases(camel) }\n}\n\n// See the note in ./deviceList \u2014 the rendered deprecation notice lives on the endpoint description.\nconst deprecatedAlias = (of: string) => `Deprecated alias for \\`${of}\\`; removed in the next minor release.`\n\nexport const deviceDetailItemSchema = z.object({\n id: z.string().uuid(),\n userId: z.string().uuid(),\n deviceId: z.string(),\n platform: z.enum(['ios', 'android', 'web']),\n clientAppVersion: z.string().nullable(),\n osVersion: z.string().nullable(),\n pushProvider: z.string().nullable(),\n pushTokenUpdatedAt: z.string().nullable(),\n lastSeenAt: z.string().nullable(),\n createdAt: z.string().nullable(),\n updatedAt: z.string().nullable(),\n user_id: z.string().uuid().describe(deprecatedAlias('userId')),\n device_id: z.string().describe(deprecatedAlias('deviceId')),\n client_app_version: z.string().nullable().describe(deprecatedAlias('clientAppVersion')),\n os_version: z.string().nullable().describe(deprecatedAlias('osVersion')),\n push_provider: z.string().nullable().describe(deprecatedAlias('pushProvider')),\n push_token_updated_at: z.string().nullable().describe(deprecatedAlias('pushTokenUpdatedAt')),\n last_seen_at: z.string().nullable().describe(deprecatedAlias('lastSeenAt')),\n created_at: z.string().nullable().describe(deprecatedAlias('createdAt')),\n updated_at: z.string().nullable().describe(deprecatedAlias('updatedAt')),\n})\n"],
5
- "mappings": "AAAA,SAAS,SAAS;AAElB,SAAS,8BAA8B,aAAa;AAM7C,SAAS,sBAAsB,QAA6C;AACjF,QAAM,QAAQ;AAAA,IACZ,IAAI,OAAO;AAAA,IACX,QAAQ,OAAO;AAAA,IACf,UAAU,OAAO;AAAA,IACjB,UAAU,OAAO;AAAA,IACjB,kBAAkB,OAAO,oBAAoB;AAAA,IAC7C,WAAW,OAAO,aAAa;AAAA,IAC/B,cAAc,OAAO,gBAAgB;AAAA,IACrC,oBAAoB,MAAM,OAAO,kBAAkB;AAAA,IACnD,YAAY,MAAM,OAAO,UAAU;AAAA,IACnC,WAAW,MAAM,OAAO,SAAS;AAAA,IACjC,WAAW,MAAM,OAAO,SAAS;AAAA,EACnC;AACA,SAAO,EAAE,GAAG,OAAO,GAAG,6BAA6B,KAAK,EAAE;AAC5D;AAGA,MAAM,kBAAkB,CAAC,OAAe,0BAA0B,EAAE;AAE7D,MAAM,yBAAyB,EAAE,OAAO;AAAA,EAC7C,IAAI,EAAE,OAAO,EAAE,KAAK;AAAA,EACpB,QAAQ,EAAE,OAAO,EAAE,KAAK;AAAA,EACxB,UAAU,EAAE,OAAO;AAAA,EACnB,UAAU,EAAE,KAAK,CAAC,OAAO,WAAW,KAAK,CAAC;AAAA,EAC1C,kBAAkB,EAAE,OAAO,EAAE,SAAS;AAAA,EACtC,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,cAAc,EAAE,OAAO,EAAE,SAAS;AAAA,EAClC,oBAAoB,EAAE,OAAO,EAAE,SAAS;AAAA,EACxC,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAChC,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,gBAAgB,QAAQ,CAAC;AAAA,EAC7D,WAAW,EAAE,OAAO,EAAE,SAAS,gBAAgB,UAAU,CAAC;AAAA,EAC1D,oBAAoB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gBAAgB,kBAAkB,CAAC;AAAA,EACtF,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gBAAgB,WAAW,CAAC;AAAA,EACvE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gBAAgB,cAAc,CAAC;AAAA,EAC7E,uBAAuB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gBAAgB,oBAAoB,CAAC;AAAA,EAC3F,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gBAAgB,YAAY,CAAC;AAAA,EAC1E,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gBAAgB,WAAW,CAAC;AAAA,EACvE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gBAAgB,WAAW,CAAC;AACzE,CAAC;",
6
- "names": []
7
- }
@@ -1,29 +0,0 @@
1
- import { findOneWithDecryption } from "@open-mercato/shared/lib/encryption/find";
2
- import { Organization } from "../data/entities.js";
3
- function normalizeIds(values) {
4
- if (!Array.isArray(values)) return [];
5
- return Array.from(new Set(values.map((value) => typeof value === "string" ? value.trim() : "").filter(Boolean)));
6
- }
7
- class DefaultOrganizationHierarchyService {
8
- constructor(em) {
9
- this.em = em;
10
- }
11
- async resolveAncestorIds(input) {
12
- const organization = await findOneWithDecryption(
13
- this.em,
14
- Organization,
15
- {
16
- id: input.organizationId,
17
- tenant: input.tenantId,
18
- deletedAt: null
19
- },
20
- { fields: ["id", "ancestorIds"] },
21
- { tenantId: input.tenantId, organizationId: input.organizationId }
22
- );
23
- return organization ? normalizeIds(organization.ancestorIds) : null;
24
- }
25
- }
26
- export {
27
- DefaultOrganizationHierarchyService
28
- };
29
- //# sourceMappingURL=organizationHierarchyService.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/modules/directory/services/organizationHierarchyService.ts"],
4
- "sourcesContent": ["import type { FilterQuery } from '@mikro-orm/core'\nimport type { EntityManager } from '@mikro-orm/postgresql'\nimport type { OrganizationHierarchyService } from '@open-mercato/shared/lib/auth/principal-service'\nimport { findOneWithDecryption } from '@open-mercato/shared/lib/encryption/find'\nimport { Organization } from '../data/entities'\n\nfunction normalizeIds(values: unknown): string[] {\n if (!Array.isArray(values)) return []\n return Array.from(new Set(values\n .map((value) => typeof value === 'string' ? value.trim() : '')\n .filter(Boolean)))\n}\n\nexport class DefaultOrganizationHierarchyService implements OrganizationHierarchyService {\n constructor(private readonly em: EntityManager) {}\n\n async resolveAncestorIds(input: {\n tenantId: string\n organizationId: string\n }): Promise<string[] | null> {\n const organization = await findOneWithDecryption(\n this.em,\n Organization,\n {\n id: input.organizationId,\n tenant: input.tenantId,\n deletedAt: null,\n } as FilterQuery<Organization>,\n { fields: ['id', 'ancestorIds'] },\n { tenantId: input.tenantId, organizationId: input.organizationId },\n )\n return organization ? normalizeIds(organization.ancestorIds) : null\n }\n}\n"],
5
- "mappings": "AAGA,SAAS,6BAA6B;AACtC,SAAS,oBAAoB;AAE7B,SAAS,aAAa,QAA2B;AAC/C,MAAI,CAAC,MAAM,QAAQ,MAAM,EAAG,QAAO,CAAC;AACpC,SAAO,MAAM,KAAK,IAAI,IAAI,OACvB,IAAI,CAAC,UAAU,OAAO,UAAU,WAAW,MAAM,KAAK,IAAI,EAAE,EAC5D,OAAO,OAAO,CAAC,CAAC;AACrB;AAEO,MAAM,oCAA4E;AAAA,EACvF,YAA6B,IAAmB;AAAnB;AAAA,EAAoB;AAAA,EAEjD,MAAM,mBAAmB,OAGI;AAC3B,UAAM,eAAe,MAAM;AAAA,MACzB,KAAK;AAAA,MACL;AAAA,MACA;AAAA,QACE,IAAI,MAAM;AAAA,QACV,QAAQ,MAAM;AAAA,QACd,WAAW;AAAA,MACb;AAAA,MACA,EAAE,QAAQ,CAAC,MAAM,aAAa,EAAE;AAAA,MAChC,EAAE,UAAU,MAAM,UAAU,gBAAgB,MAAM,eAAe;AAAA,IACnE;AACA,WAAO,eAAe,aAAa,aAAa,WAAW,IAAI;AAAA,EACjE;AACF;",
6
- "names": []
7
- }
@@ -1,56 +0,0 @@
1
- import { resolveOrganizationScope, resolveOrganizationScopeForRequest } from "../utils/organizationScope.js";
2
- class DefaultOrganizationScopeService {
3
- constructor(em, rbac, container) {
4
- this.em = em;
5
- this.rbac = rbac;
6
- this.container = container;
7
- }
8
- resolve(input) {
9
- const auth = input.auth;
10
- if (input.freshAcl && auth?.sub) {
11
- return this.resolveFresh({
12
- auth,
13
- selectedId: input.selectedId,
14
- tenantId: input.tenantId
15
- }).then((result) => result.scope);
16
- }
17
- return resolveOrganizationScope({
18
- em: this.em,
19
- rbac: this.rbac,
20
- auth: input.auth,
21
- selectedId: input.selectedId,
22
- tenantId: input.tenantId
23
- });
24
- }
25
- async resolveFresh(input) {
26
- await this.rbac.invalidateUserCache(input.auth.sub);
27
- const acl = await this.rbac.loadAcl(input.auth.sub, {
28
- tenantId: input.tenantId ?? input.auth.tenantId ?? null,
29
- organizationId: input.selectedId ?? input.auth.orgId ?? null
30
- });
31
- const freshRbac = {
32
- loadAcl: async () => acl
33
- };
34
- const scope = await resolveOrganizationScope({
35
- em: this.em,
36
- rbac: freshRbac,
37
- auth: input.auth,
38
- selectedId: input.selectedId,
39
- tenantId: input.tenantId
40
- });
41
- return { scope, acl };
42
- }
43
- resolveForRequest(input) {
44
- return resolveOrganizationScopeForRequest({
45
- container: this.container,
46
- auth: input.auth,
47
- request: input.request,
48
- selectedId: input.selectedId,
49
- tenantId: input.tenantId
50
- });
51
- }
52
- }
53
- export {
54
- DefaultOrganizationScopeService
55
- };
56
- //# sourceMappingURL=organizationScopeService.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/modules/directory/services/organizationScopeService.ts"],
4
- "sourcesContent": ["import type { EntityManager } from '@mikro-orm/postgresql'\nimport type { AwilixContainer } from 'awilix'\nimport type {\n OrganizationScopeService,\n OrganizationScopeRequest,\n} from '@open-mercato/shared/lib/auth/principal-service'\nimport type { AuthContext } from '@open-mercato/shared/lib/auth/server'\nimport { resolveOrganizationScope, resolveOrganizationScopeForRequest } from '../utils/organizationScope'\n\ntype OrganizationScopeRbac = {\n invalidateUserCache(userId: string): Promise<void>\n loadAcl(\n userId: string,\n scope: { tenantId: string | null; organizationId: string | null },\n ): Promise<{ isSuperAdmin: boolean; features: string[]; organizations: string[] | null }>\n}\n\nexport class DefaultOrganizationScopeService implements OrganizationScopeService {\n constructor(\n private readonly em: EntityManager,\n private readonly rbac: OrganizationScopeRbac,\n private readonly container: AwilixContainer,\n ) {}\n\n resolve(input: {\n auth: AuthContext | null | undefined\n selectedId?: string | null\n tenantId?: string | null\n freshAcl?: boolean\n }) {\n const auth = input.auth\n if (input.freshAcl && auth?.sub) {\n return this.resolveFresh({\n auth,\n selectedId: input.selectedId,\n tenantId: input.tenantId,\n }).then((result) => result.scope)\n }\n return resolveOrganizationScope({\n em: this.em,\n rbac: this.rbac as Parameters<typeof resolveOrganizationScope>[0]['rbac'],\n auth: input.auth,\n selectedId: input.selectedId,\n tenantId: input.tenantId,\n })\n }\n\n async resolveFresh(input: {\n auth: NonNullable<AuthContext>\n selectedId?: string | null\n tenantId?: string | null\n }) {\n await this.rbac.invalidateUserCache(input.auth.sub)\n const acl = await this.rbac.loadAcl(input.auth.sub, {\n tenantId: input.tenantId ?? input.auth.tenantId ?? null,\n organizationId: input.selectedId ?? input.auth.orgId ?? null,\n })\n const freshRbac: Parameters<typeof resolveOrganizationScope>[0]['rbac'] = {\n loadAcl: async () => acl,\n }\n const scope = await resolveOrganizationScope({\n em: this.em,\n rbac: freshRbac,\n auth: input.auth,\n selectedId: input.selectedId,\n tenantId: input.tenantId,\n })\n return { scope, acl }\n }\n\n resolveForRequest(input: {\n auth: AuthContext | null | undefined\n request?: OrganizationScopeRequest\n selectedId?: string | null\n tenantId?: string | null\n }) {\n return resolveOrganizationScopeForRequest({\n container: this.container,\n auth: input.auth,\n request: input.request,\n selectedId: input.selectedId,\n tenantId: input.tenantId,\n })\n }\n}\n"],
5
- "mappings": "AAOA,SAAS,0BAA0B,0CAA0C;AAUtE,MAAM,gCAAoE;AAAA,EAC/E,YACmB,IACA,MACA,WACjB;AAHiB;AACA;AACA;AAAA,EAChB;AAAA,EAEH,QAAQ,OAKL;AACD,UAAM,OAAO,MAAM;AACnB,QAAI,MAAM,YAAY,MAAM,KAAK;AAC/B,aAAO,KAAK,aAAa;AAAA,QACvB;AAAA,QACA,YAAY,MAAM;AAAA,QAClB,UAAU,MAAM;AAAA,MAClB,CAAC,EAAE,KAAK,CAAC,WAAW,OAAO,KAAK;AAAA,IAClC;AACA,WAAO,yBAAyB;AAAA,MAC9B,IAAI,KAAK;AAAA,MACT,MAAM,KAAK;AAAA,MACX,MAAM,MAAM;AAAA,MACZ,YAAY,MAAM;AAAA,MAClB,UAAU,MAAM;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,aAAa,OAIhB;AACD,UAAM,KAAK,KAAK,oBAAoB,MAAM,KAAK,GAAG;AAClD,UAAM,MAAM,MAAM,KAAK,KAAK,QAAQ,MAAM,KAAK,KAAK;AAAA,MAClD,UAAU,MAAM,YAAY,MAAM,KAAK,YAAY;AAAA,MACnD,gBAAgB,MAAM,cAAc,MAAM,KAAK,SAAS;AAAA,IAC1D,CAAC;AACD,UAAM,YAAoE;AAAA,MACxE,SAAS,YAAY;AAAA,IACvB;AACA,UAAM,QAAQ,MAAM,yBAAyB;AAAA,MAC3C,IAAI,KAAK;AAAA,MACT,MAAM;AAAA,MACN,MAAM,MAAM;AAAA,MACZ,YAAY,MAAM;AAAA,MAClB,UAAU,MAAM;AAAA,IAClB,CAAC;AACD,WAAO,EAAE,OAAO,IAAI;AAAA,EACtB;AAAA,EAEA,kBAAkB,OAKf;AACD,WAAO,mCAAmC;AAAA,MACxC,WAAW,KAAK;AAAA,MAChB,MAAM,MAAM;AAAA,MACZ,SAAS,MAAM;AAAA,MACf,YAAY,MAAM;AAAA,MAClB,UAAU,MAAM;AAAA,IAClB,CAAC;AAAA,EACH;AACF;",
6
- "names": []
7
- }
@@ -1,55 +0,0 @@
1
- import { SECRET_CREDENTIAL_FIELD_TYPES } from "../../lib/credentials-masking.js";
2
- function buildCredentialEditValues(credentials, secretFieldsConfigured) {
3
- const editValues = { ...credentials };
4
- for (const [fieldKey, configured] of Object.entries(secretFieldsConfigured)) {
5
- if (configured) delete editValues[fieldKey];
6
- }
7
- return editValues;
8
- }
9
- function buildCredentialSavePayload(values, fields, secretFieldsConfigured, deliberatelyClearedSecretFields = /* @__PURE__ */ new Set()) {
10
- const credentials = { ...values };
11
- const unchangedSecretFields = /* @__PURE__ */ new Set();
12
- for (const field of fields) {
13
- if (!SECRET_CREDENTIAL_FIELD_TYPES.has(field.type)) continue;
14
- if (deliberatelyClearedSecretFields.has(field.key)) {
15
- delete credentials[field.key];
16
- continue;
17
- }
18
- if (!secretFieldsConfigured[field.key]) continue;
19
- const value = credentials[field.key];
20
- if (value !== void 0 && value !== "") continue;
21
- delete credentials[field.key];
22
- unchangedSecretFields.add(field.key);
23
- }
24
- return unchangedSecretFields.size > 0 ? { credentials, unchangedSecretFields: [...unchangedSecretFields] } : { credentials };
25
- }
26
- function buildIntegrationCredentialSavePayload(integrationId, values, fields, secretFieldsConfigured) {
27
- const normalizedValues = { ...values };
28
- const deliberatelyClearedSecretFields = /* @__PURE__ */ new Set();
29
- if (integrationId === "storage_s3") {
30
- const authMode = normalizedValues.authMode;
31
- if (authMode !== "access_keys" && authMode !== "ambient") {
32
- const hasKeys = Boolean(normalizedValues.accessKeyId || normalizedValues.secretAccessKey);
33
- normalizedValues.authMode = hasKeys ? "access_keys" : "ambient";
34
- }
35
- if (normalizedValues.authMode === "ambient") {
36
- delete normalizedValues.accessKeyId;
37
- delete normalizedValues.secretAccessKey;
38
- delete normalizedValues.sessionToken;
39
- deliberatelyClearedSecretFields.add("secretAccessKey");
40
- deliberatelyClearedSecretFields.add("sessionToken");
41
- }
42
- }
43
- return buildCredentialSavePayload(
44
- normalizedValues,
45
- fields,
46
- secretFieldsConfigured,
47
- deliberatelyClearedSecretFields
48
- );
49
- }
50
- export {
51
- buildCredentialEditValues,
52
- buildCredentialSavePayload,
53
- buildIntegrationCredentialSavePayload
54
- };
55
- //# sourceMappingURL=credential-secret-fields.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../src/modules/integrations/backend/integrations/credential-secret-fields.ts"],
4
- "sourcesContent": ["import type { IntegrationCredentialField } from '@open-mercato/shared/modules/integrations/types'\nimport { SECRET_CREDENTIAL_FIELD_TYPES } from '../../lib/credentials-masking'\n\nexport type SecretFieldsConfigured = Record<string, boolean>\n\nexport type CredentialSavePayload = {\n credentials: Record<string, unknown>\n unchangedSecretFields?: string[]\n}\n\nexport function buildCredentialEditValues(\n credentials: Record<string, unknown>,\n secretFieldsConfigured: SecretFieldsConfigured,\n): Record<string, unknown> {\n const editValues = { ...credentials }\n\n for (const [fieldKey, configured] of Object.entries(secretFieldsConfigured)) {\n if (configured) delete editValues[fieldKey]\n }\n\n return editValues\n}\n\nexport function buildCredentialSavePayload(\n values: Record<string, unknown>,\n fields: readonly IntegrationCredentialField[],\n secretFieldsConfigured: SecretFieldsConfigured,\n deliberatelyClearedSecretFields: ReadonlySet<string> = new Set(),\n): CredentialSavePayload {\n const credentials = { ...values }\n const unchangedSecretFields = new Set<string>()\n\n for (const field of fields) {\n if (!SECRET_CREDENTIAL_FIELD_TYPES.has(field.type)) continue\n\n if (deliberatelyClearedSecretFields.has(field.key)) {\n delete credentials[field.key]\n continue\n }\n\n if (!secretFieldsConfigured[field.key]) continue\n const value = credentials[field.key]\n if (value !== undefined && value !== '') continue\n\n delete credentials[field.key]\n unchangedSecretFields.add(field.key)\n }\n\n return unchangedSecretFields.size > 0\n ? { credentials, unchangedSecretFields: [...unchangedSecretFields] }\n : { credentials }\n}\n\nexport function buildIntegrationCredentialSavePayload(\n integrationId: string,\n values: Record<string, unknown>,\n fields: readonly IntegrationCredentialField[],\n secretFieldsConfigured: SecretFieldsConfigured,\n): CredentialSavePayload {\n const normalizedValues = { ...values }\n const deliberatelyClearedSecretFields = new Set<string>()\n\n if (integrationId === 'storage_s3') {\n const authMode = normalizedValues.authMode\n if (authMode !== 'access_keys' && authMode !== 'ambient') {\n const hasKeys = Boolean(normalizedValues.accessKeyId || normalizedValues.secretAccessKey)\n normalizedValues.authMode = hasKeys ? 'access_keys' : 'ambient'\n }\n if (normalizedValues.authMode === 'ambient') {\n delete normalizedValues.accessKeyId\n delete normalizedValues.secretAccessKey\n delete normalizedValues.sessionToken\n deliberatelyClearedSecretFields.add('secretAccessKey')\n deliberatelyClearedSecretFields.add('sessionToken')\n }\n }\n\n return buildCredentialSavePayload(\n normalizedValues,\n fields,\n secretFieldsConfigured,\n deliberatelyClearedSecretFields,\n )\n}\n"],
5
- "mappings": "AACA,SAAS,qCAAqC;AASvC,SAAS,0BACd,aACA,wBACyB;AACzB,QAAM,aAAa,EAAE,GAAG,YAAY;AAEpC,aAAW,CAAC,UAAU,UAAU,KAAK,OAAO,QAAQ,sBAAsB,GAAG;AAC3E,QAAI,WAAY,QAAO,WAAW,QAAQ;AAAA,EAC5C;AAEA,SAAO;AACT;AAEO,SAAS,2BACd,QACA,QACA,wBACA,kCAAuD,oBAAI,IAAI,GACxC;AACvB,QAAM,cAAc,EAAE,GAAG,OAAO;AAChC,QAAM,wBAAwB,oBAAI,IAAY;AAE9C,aAAW,SAAS,QAAQ;AAC1B,QAAI,CAAC,8BAA8B,IAAI,MAAM,IAAI,EAAG;AAEpD,QAAI,gCAAgC,IAAI,MAAM,GAAG,GAAG;AAClD,aAAO,YAAY,MAAM,GAAG;AAC5B;AAAA,IACF;AAEA,QAAI,CAAC,uBAAuB,MAAM,GAAG,EAAG;AACxC,UAAM,QAAQ,YAAY,MAAM,GAAG;AACnC,QAAI,UAAU,UAAa,UAAU,GAAI;AAEzC,WAAO,YAAY,MAAM,GAAG;AAC5B,0BAAsB,IAAI,MAAM,GAAG;AAAA,EACrC;AAEA,SAAO,sBAAsB,OAAO,IAChC,EAAE,aAAa,uBAAuB,CAAC,GAAG,qBAAqB,EAAE,IACjE,EAAE,YAAY;AACpB;AAEO,SAAS,sCACd,eACA,QACA,QACA,wBACuB;AACvB,QAAM,mBAAmB,EAAE,GAAG,OAAO;AACrC,QAAM,kCAAkC,oBAAI,IAAY;AAExD,MAAI,kBAAkB,cAAc;AAClC,UAAM,WAAW,iBAAiB;AAClC,QAAI,aAAa,iBAAiB,aAAa,WAAW;AACxD,YAAM,UAAU,QAAQ,iBAAiB,eAAe,iBAAiB,eAAe;AACxF,uBAAiB,WAAW,UAAU,gBAAgB;AAAA,IACxD;AACA,QAAI,iBAAiB,aAAa,WAAW;AAC3C,aAAO,iBAAiB;AACxB,aAAO,iBAAiB;AACxB,aAAO,iBAAiB;AACxB,sCAAgC,IAAI,iBAAiB;AACrD,sCAAgC,IAAI,cAAc;AAAA,IACpD;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
6
- "names": []
7
- }
@@ -1,26 +0,0 @@
1
- const NON_EMAIL_SENDER_CHANNEL_TYPES = /* @__PURE__ */ new Set([
2
- "discord",
3
- "slack",
4
- "teams",
5
- "telegram",
6
- "signal",
7
- "whatsapp",
8
- "messenger",
9
- "instagram",
10
- "sms",
11
- "push"
12
- ]);
13
- function channelTypeRequiresExternalEmail(channelType) {
14
- if (typeof channelType !== "string") return true;
15
- const normalized = channelType.trim().toLowerCase();
16
- if (!normalized) return true;
17
- return !NON_EMAIL_SENDER_CHANNEL_TYPES.has(normalized);
18
- }
19
- function listNonEmailSenderChannelTypes() {
20
- return Array.from(NON_EMAIL_SENDER_CHANNEL_TYPES).sort((left, right) => left.localeCompare(right));
21
- }
22
- export {
23
- channelTypeRequiresExternalEmail,
24
- listNonEmailSenderChannelTypes
25
- };
26
- //# sourceMappingURL=channel-sender-identity.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/modules/messages/lib/channel-sender-identity.ts"],
4
- "sourcesContent": ["/**\n * How the hub decides whether an external correspondent must be identified by an\n * email address.\n *\n * Background (#4975): `composeMessageSchema` used to require `externalEmail` for\n * every non-draft message with `visibility: 'public'` \u2014 which is every message\n * from an external sender. That assumption holds only for email-typed channels.\n * A Discord sender is a snowflake and has no address at all, so inbound Discord\n * failed validation deterministically and the ingest job died in the queue while\n * the channel still reported `Connected`.\n *\n * Variant A of the spec's \u00A7 Open decision \u2014 hub sender-identity contract makes\n * the requirement conditional on the originating channel type, and **fails\n * closed**: only a channel type this list positively recognizes as non-email\n * waives the requirement. An unrecognized, empty or absent channel type keeps\n * the pre-existing behaviour, so no current caller changes and a typo'd or\n * caller-asserted type cannot quietly switch a validation rule off.\n *\n * For these channels the sender identity is not lost \u2014 it is carried by\n * `ExternalMessage.sender_identifier` and joined 1:1 to the platform message\n * through `MessageChannelLink`.\n *\n * Adding a channel type here is additive and non-breaking: it only widens the\n * set of inputs the hub accepts.\n */\nconst NON_EMAIL_SENDER_CHANNEL_TYPES = new Set([\n 'discord',\n 'slack',\n 'teams',\n 'telegram',\n 'signal',\n 'whatsapp',\n 'messenger',\n 'instagram',\n 'sms',\n 'push',\n])\n\n/**\n * True when a message originating from `channelType` must carry an\n * `externalEmail` to be composed with `visibility: 'public'`.\n *\n * Fail-closed by design \u2014 see the note above.\n */\nexport function channelTypeRequiresExternalEmail(channelType?: string | null): boolean {\n if (typeof channelType !== 'string') return true\n const normalized = channelType.trim().toLowerCase()\n if (!normalized) return true\n return !NON_EMAIL_SENDER_CHANNEL_TYPES.has(normalized)\n}\n\n/** The recognized non-email channel types, for tests and diagnostics. */\nexport function listNonEmailSenderChannelTypes(): string[] {\n return Array.from(NON_EMAIL_SENDER_CHANNEL_TYPES).sort((left, right) => left.localeCompare(right))\n}\n"],
5
- "mappings": "AAyBA,MAAM,iCAAiC,oBAAI,IAAI;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAQM,SAAS,iCAAiC,aAAsC;AACrF,MAAI,OAAO,gBAAgB,SAAU,QAAO;AAC5C,QAAM,aAAa,YAAY,KAAK,EAAE,YAAY;AAClD,MAAI,CAAC,WAAY,QAAO;AACxB,SAAO,CAAC,+BAA+B,IAAI,UAAU;AACvD;AAGO,SAAS,iCAA2C;AACzD,SAAO,MAAM,KAAK,8BAA8B,EAAE,KAAK,CAAC,MAAM,UAAU,KAAK,cAAc,KAAK,CAAC;AACnG;",
6
- "names": []
7
- }
@@ -1,41 +0,0 @@
1
- import { z } from "zod";
2
- const EXTERNAL_CONVERSATION_SOURCE_ENTITY_TYPE = "communication_channels.external_conversation";
3
- const composeSourceHintSchema = z.object({
4
- sourceEntityType: z.string().optional(),
5
- sourceEntityId: z.string().uuid().optional(),
6
- parentMessageId: z.string().uuid().optional()
7
- });
8
- function composeRequiresChannelTypeResolution(body) {
9
- if (!body || typeof body !== "object") return false;
10
- const raw = body;
11
- if (raw.visibility !== "public") return false;
12
- if (raw.isDraft === true) return false;
13
- const externalEmail = raw.externalEmail;
14
- return !(typeof externalEmail === "string" && externalEmail.trim().length > 0);
15
- }
16
- function tryResolveChannelTypeService(container) {
17
- try {
18
- return container.resolve("communicationChannelsResolveChannelType");
19
- } catch {
20
- return void 0;
21
- }
22
- }
23
- async function resolveComposeSourceChannelType(container, scope, hint) {
24
- const externalConversationId = hint.sourceEntityType === EXTERNAL_CONVERSATION_SOURCE_ENTITY_TYPE ? hint.sourceEntityId ?? null : null;
25
- const messageId = hint.parentMessageId ?? null;
26
- if (!externalConversationId && !messageId) return void 0;
27
- const resolveChannelType = tryResolveChannelTypeService(container);
28
- if (!resolveChannelType) return void 0;
29
- const channelType = await resolveChannelType(container, scope, {
30
- externalConversationId,
31
- messageId
32
- });
33
- return channelType ?? void 0;
34
- }
35
- export {
36
- EXTERNAL_CONVERSATION_SOURCE_ENTITY_TYPE,
37
- composeRequiresChannelTypeResolution,
38
- composeSourceHintSchema,
39
- resolveComposeSourceChannelType
40
- };
41
- //# sourceMappingURL=composeSourceChannelType.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/modules/messages/lib/composeSourceChannelType.ts"],
4
- "sourcesContent": ["import { z } from 'zod'\n\n/**\n * Entity type a channel-backed conversation is exposed under on a message's\n * `sourceEntityType`. Written by `communication_channels`' inbound ingest.\n */\nconst EXTERNAL_CONVERSATION_SOURCE_ENTITY_TYPE = 'communication_channels.external_conversation'\n\n/**\n * The only parts of a compose body this resolution needs. Read defensively from\n * the raw request body, before the body is validated, because the validation\n * outcome itself depends on the answer (#4975).\n */\nexport const composeSourceHintSchema = z.object({\n sourceEntityType: z.string().optional(),\n sourceEntityId: z.string().uuid().optional(),\n parentMessageId: z.string().uuid().optional(),\n})\n\nexport type ComposeSourceHint = z.infer<typeof composeSourceHintSchema>\n\n/**\n * Whether the compose validator can consult a resolved channel type at all.\n *\n * `sourceChannelType` is read in exactly one branch \u2014 a non-draft, public\n * message that carries no address. Every internal reply, every draft and every\n * public message that already supplies an address ignores it, so resolving it\n * for them is a DI resolve plus a database round-trip whose answer is\n * discarded. Mirrors `refineComposeMessage` and reads the raw body defensively,\n * because this runs before validation. Skipping resolution yields `undefined`,\n * which is already the fail-closed value.\n */\nexport function composeRequiresChannelTypeResolution(body: unknown): boolean {\n if (!body || typeof body !== 'object') return false\n const raw = body as Record<string, unknown>\n if (raw.visibility !== 'public') return false\n if (raw.isDraft === true) return false\n const externalEmail = raw.externalEmail\n return !(typeof externalEmail === 'string' && externalEmail.trim().length > 0)\n}\n\ntype ResolveChannelTypeService = (\n container: ContainerLike,\n scope: { tenantId: string; organizationId: string | null },\n reference: { externalConversationId?: string | null; messageId?: string | null },\n) => Promise<string | null>\n\ntype ContainerLike = { resolve: <T = unknown>(name: string) => T }\n\nfunction tryResolveChannelTypeService(\n container: ContainerLike,\n): ResolveChannelTypeService | undefined {\n try {\n return container.resolve<ResolveChannelTypeService>('communicationChannelsResolveChannelType')\n } catch {\n // `communication_channels` is optional: without it no message can originate\n // from a channel, so \"unknown\" is both correct and fail-closed.\n return undefined\n }\n}\n\n/**\n * Resolve the channel type a compose request originates from, server-side.\n *\n * Never derived from the request body's own `sourceChannelType` \u2014 that would let\n * any caller waive the `externalEmail` requirement by asserting a channel type.\n * It is looked up from the conversation the message is being composed on, or\n * from the parent message it replies to.\n *\n * Returns `undefined` when nothing can be established, which the compose\n * validator treats as \"unknown\" and therefore keeps the pre-#4975 rule.\n */\nexport async function resolveComposeSourceChannelType(\n container: ContainerLike,\n scope: { tenantId: string; organizationId: string | null },\n hint: ComposeSourceHint,\n): Promise<string | undefined> {\n const externalConversationId =\n hint.sourceEntityType === EXTERNAL_CONVERSATION_SOURCE_ENTITY_TYPE\n ? hint.sourceEntityId ?? null\n : null\n const messageId = hint.parentMessageId ?? null\n if (!externalConversationId && !messageId) return undefined\n\n const resolveChannelType = tryResolveChannelTypeService(container)\n if (!resolveChannelType) return undefined\n\n const channelType = await resolveChannelType(container, scope, {\n externalConversationId,\n messageId,\n })\n return channelType ?? undefined\n}\n\nexport { EXTERNAL_CONVERSATION_SOURCE_ENTITY_TYPE }\n"],
5
- "mappings": "AAAA,SAAS,SAAS;AAMlB,MAAM,2CAA2C;AAO1C,MAAM,0BAA0B,EAAE,OAAO;AAAA,EAC9C,kBAAkB,EAAE,OAAO,EAAE,SAAS;AAAA,EACtC,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS;AAAA,EAC3C,iBAAiB,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS;AAC9C,CAAC;AAeM,SAAS,qCAAqC,MAAwB;AAC3E,MAAI,CAAC,QAAQ,OAAO,SAAS,SAAU,QAAO;AAC9C,QAAM,MAAM;AACZ,MAAI,IAAI,eAAe,SAAU,QAAO;AACxC,MAAI,IAAI,YAAY,KAAM,QAAO;AACjC,QAAM,gBAAgB,IAAI;AAC1B,SAAO,EAAE,OAAO,kBAAkB,YAAY,cAAc,KAAK,EAAE,SAAS;AAC9E;AAUA,SAAS,6BACP,WACuC;AACvC,MAAI;AACF,WAAO,UAAU,QAAmC,yCAAyC;AAAA,EAC/F,QAAQ;AAGN,WAAO;AAAA,EACT;AACF;AAaA,eAAsB,gCACpB,WACA,OACA,MAC6B;AAC7B,QAAM,yBACJ,KAAK,qBAAqB,2CACtB,KAAK,kBAAkB,OACvB;AACN,QAAM,YAAY,KAAK,mBAAmB;AAC1C,MAAI,CAAC,0BAA0B,CAAC,UAAW,QAAO;AAElD,QAAM,qBAAqB,6BAA6B,SAAS;AACjE,MAAI,CAAC,mBAAoB,QAAO;AAEhC,QAAM,cAAc,MAAM,mBAAmB,WAAW,OAAO;AAAA,IAC7D;AAAA,IACA;AAAA,EACF,CAAC;AACD,SAAO,eAAe;AACxB;",
6
- "names": []
7
- }
@@ -1,14 +0,0 @@
1
- import { parseBooleanWithDefault } from "@open-mercato/shared/lib/boolean";
2
- const CUSTOMERS_BASE_ENTITY_TYPE = "customers:customer_entity";
3
- function indexesCustomerBaseEntity() {
4
- return parseBooleanWithDefault(process.env.OM_SEARCH_CUSTOMERS_INDEX_BASE_ENTITY, false);
5
- }
6
- function listSearchTokenExcludedEntityTypes() {
7
- return indexesCustomerBaseEntity() ? [] : [CUSTOMERS_BASE_ENTITY_TYPE];
8
- }
9
- export {
10
- CUSTOMERS_BASE_ENTITY_TYPE,
11
- indexesCustomerBaseEntity,
12
- listSearchTokenExcludedEntityTypes
13
- };
14
- //# sourceMappingURL=search-entity-policy.js.map