@open-mercato/core 0.4.2-canary-968c919ed2 → 0.4.2-canary-bdaa640a68

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 (497) hide show
  1. package/dist/generated/entities.ids.generated.js +1 -5
  2. package/dist/generated/entities.ids.generated.js.map +2 -2
  3. package/dist/generated/entity-fields-registry.js +0 -2
  4. package/dist/generated/entity-fields-registry.js.map +2 -2
  5. package/dist/modules/api_docs/frontend/docs/api/page.js +2 -3
  6. package/dist/modules/api_docs/frontend/docs/api/page.js.map +2 -2
  7. package/dist/modules/api_keys/backend/api-keys/page.js +1 -1
  8. package/dist/modules/api_keys/backend/api-keys/page.js.map +2 -2
  9. package/dist/modules/attachments/components/AttachmentLibrary.js +0 -4
  10. package/dist/modules/attachments/components/AttachmentLibrary.js.map +2 -2
  11. package/dist/modules/attachments/components/AttachmentPartitionSettings.js +0 -2
  12. package/dist/modules/attachments/components/AttachmentPartitionSettings.js.map +2 -2
  13. package/dist/modules/auth/api/admin/nav.js +3 -4
  14. package/dist/modules/auth/api/admin/nav.js.map +2 -2
  15. package/dist/modules/auth/api/login.js +6 -25
  16. package/dist/modules/auth/api/login.js.map +2 -2
  17. package/dist/modules/auth/api/reset/confirm.js +2 -25
  18. package/dist/modules/auth/api/reset/confirm.js.map +2 -2
  19. package/dist/modules/auth/api/reset.js +0 -23
  20. package/dist/modules/auth/api/reset.js.map +2 -2
  21. package/dist/modules/auth/api/sidebar/preferences/route.js +9 -14
  22. package/dist/modules/auth/api/sidebar/preferences/route.js.map +2 -2
  23. package/dist/modules/auth/api/users/route.js +2 -4
  24. package/dist/modules/auth/api/users/route.js.map +2 -2
  25. package/dist/modules/auth/backend/roles/[id]/edit/page.js +1 -4
  26. package/dist/modules/auth/backend/roles/[id]/edit/page.js.map +2 -2
  27. package/dist/modules/auth/backend/roles/page.js +3 -3
  28. package/dist/modules/auth/backend/roles/page.js.map +2 -2
  29. package/dist/modules/auth/backend/users/[id]/edit/page.js +3 -18
  30. package/dist/modules/auth/backend/users/[id]/edit/page.js.map +2 -2
  31. package/dist/modules/auth/backend/users/create/page.js +2 -15
  32. package/dist/modules/auth/backend/users/create/page.js.map +2 -2
  33. package/dist/modules/auth/backend/users/page.js +3 -3
  34. package/dist/modules/auth/backend/users/page.js.map +2 -2
  35. package/dist/modules/auth/cli.js +11 -25
  36. package/dist/modules/auth/cli.js.map +2 -2
  37. package/dist/modules/auth/commands/users.js +2 -59
  38. package/dist/modules/auth/commands/users.js.map +2 -2
  39. package/dist/modules/auth/data/validators.js +3 -6
  40. package/dist/modules/auth/data/validators.js.map +2 -2
  41. package/dist/modules/auth/frontend/login.js +3 -105
  42. package/dist/modules/auth/frontend/login.js.map +2 -2
  43. package/dist/modules/auth/frontend/reset/[token]/page.js +10 -20
  44. package/dist/modules/auth/frontend/reset/[token]/page.js.map +2 -2
  45. package/dist/modules/auth/lib/setup-app.js +8 -42
  46. package/dist/modules/auth/lib/setup-app.js.map +2 -2
  47. package/dist/modules/auth/services/authService.js +3 -24
  48. package/dist/modules/auth/services/authService.js.map +2 -2
  49. package/dist/modules/business_rules/api/execute/route.js +1 -7
  50. package/dist/modules/business_rules/api/execute/route.js.map +2 -2
  51. package/dist/modules/business_rules/backend/rules/page.js +0 -4
  52. package/dist/modules/business_rules/backend/rules/page.js.map +2 -2
  53. package/dist/modules/business_rules/backend/sets/page.js +0 -3
  54. package/dist/modules/business_rules/backend/sets/page.js.map +2 -2
  55. package/dist/modules/business_rules/cli.js +1 -2
  56. package/dist/modules/business_rules/cli.js.map +2 -2
  57. package/dist/modules/business_rules/lib/rule-engine.js +3 -33
  58. package/dist/modules/business_rules/lib/rule-engine.js.map +2 -2
  59. package/dist/modules/catalog/components/PriceKindSettings.js +0 -2
  60. package/dist/modules/catalog/components/PriceKindSettings.js.map +2 -2
  61. package/dist/modules/catalog/components/categories/CategoriesDataTable.js +2 -2
  62. package/dist/modules/catalog/components/categories/CategoriesDataTable.js.map +2 -2
  63. package/dist/modules/catalog/components/products/ProductsDataTable.js +0 -2
  64. package/dist/modules/catalog/components/products/ProductsDataTable.js.map +2 -2
  65. package/dist/modules/configs/cli.js +0 -6
  66. package/dist/modules/configs/cli.js.map +2 -2
  67. package/dist/modules/configs/components/CachePanel.js +4 -4
  68. package/dist/modules/configs/components/CachePanel.js.map +2 -2
  69. package/dist/modules/configs/lib/system-status.js +1 -48
  70. package/dist/modules/configs/lib/system-status.js.map +2 -2
  71. package/dist/modules/configs/lib/upgrade-actions.js +0 -18
  72. package/dist/modules/configs/lib/upgrade-actions.js.map +2 -2
  73. package/dist/modules/currencies/backend/currencies/page.js +0 -3
  74. package/dist/modules/currencies/backend/currencies/page.js.map +2 -2
  75. package/dist/modules/currencies/backend/exchange-rates/page.js +0 -2
  76. package/dist/modules/currencies/backend/exchange-rates/page.js.map +2 -2
  77. package/dist/modules/customers/backend/customers/companies/page.js +0 -3
  78. package/dist/modules/customers/backend/customers/companies/page.js.map +2 -2
  79. package/dist/modules/customers/backend/customers/deals/page.js +0 -3
  80. package/dist/modules/customers/backend/customers/deals/page.js.map +2 -2
  81. package/dist/modules/customers/backend/customers/people/page.js +0 -3
  82. package/dist/modules/customers/backend/customers/people/page.js.map +2 -2
  83. package/dist/modules/customers/commands/deals.js +0 -31
  84. package/dist/modules/customers/commands/deals.js.map +2 -2
  85. package/dist/modules/customers/components/CustomerTodosTable.js +0 -1
  86. package/dist/modules/customers/components/CustomerTodosTable.js.map +2 -2
  87. package/dist/modules/customers/widgets/dashboard/customer-todos/widget.js +1 -2
  88. package/dist/modules/customers/widgets/dashboard/customer-todos/widget.js.map +2 -2
  89. package/dist/modules/customers/widgets/dashboard/new-customers/widget.js +1 -2
  90. package/dist/modules/customers/widgets/dashboard/new-customers/widget.js.map +2 -2
  91. package/dist/modules/customers/widgets/dashboard/new-deals/widget.js +1 -2
  92. package/dist/modules/customers/widgets/dashboard/new-deals/widget.js.map +2 -2
  93. package/dist/modules/customers/widgets/dashboard/next-interactions/widget.js +1 -2
  94. package/dist/modules/customers/widgets/dashboard/next-interactions/widget.js.map +2 -2
  95. package/dist/modules/dashboards/cli.js +5 -44
  96. package/dist/modules/dashboards/cli.js.map +2 -2
  97. package/dist/modules/dashboards/components/WidgetVisibilityEditor.js +11 -16
  98. package/dist/modules/dashboards/components/WidgetVisibilityEditor.js.map +3 -3
  99. package/dist/modules/dashboards/services/widgetDataService.js +3 -139
  100. package/dist/modules/dashboards/services/widgetDataService.js.map +2 -2
  101. package/dist/modules/dashboards/widgets/dashboard/aov-kpi/widget.js +1 -2
  102. package/dist/modules/dashboards/widgets/dashboard/aov-kpi/widget.js.map +2 -2
  103. package/dist/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.js +1 -2
  104. package/dist/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.js.map +2 -2
  105. package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.js +1 -2
  106. package/dist/modules/dashboards/widgets/dashboard/orders-by-status/widget.js.map +2 -2
  107. package/dist/modules/dashboards/widgets/dashboard/orders-kpi/widget.js +1 -2
  108. package/dist/modules/dashboards/widgets/dashboard/orders-kpi/widget.js.map +2 -2
  109. package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.js +1 -2
  110. package/dist/modules/dashboards/widgets/dashboard/pipeline-summary/widget.js.map +2 -2
  111. package/dist/modules/dashboards/widgets/dashboard/revenue-kpi/widget.js +1 -2
  112. package/dist/modules/dashboards/widgets/dashboard/revenue-kpi/widget.js.map +2 -2
  113. package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.js +1 -2
  114. package/dist/modules/dashboards/widgets/dashboard/revenue-trend/widget.js.map +2 -2
  115. package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.js +1 -2
  116. package/dist/modules/dashboards/widgets/dashboard/sales-by-region/widget.js.map +2 -2
  117. package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.js +1 -2
  118. package/dist/modules/dashboards/widgets/dashboard/top-customers/widget.js.map +2 -2
  119. package/dist/modules/dashboards/widgets/dashboard/top-products/widget.js +1 -2
  120. package/dist/modules/dashboards/widgets/dashboard/top-products/widget.js.map +2 -2
  121. package/dist/modules/dictionaries/components/DictionaryTable.js +0 -2
  122. package/dist/modules/dictionaries/components/DictionaryTable.js.map +2 -2
  123. package/dist/modules/directory/backend/directory/organizations/page.js +2 -2
  124. package/dist/modules/directory/backend/directory/organizations/page.js.map +2 -2
  125. package/dist/modules/directory/backend/directory/tenants/page.js +2 -2
  126. package/dist/modules/directory/backend/directory/tenants/page.js.map +2 -2
  127. package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js +2 -2
  128. package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js.map +2 -2
  129. package/dist/modules/entities/components/SystemEntitiesTable.js +1 -1
  130. package/dist/modules/entities/components/SystemEntitiesTable.js.map +2 -2
  131. package/dist/modules/entities/components/UserEntitiesTable.js +2 -2
  132. package/dist/modules/entities/components/UserEntitiesTable.js.map +2 -2
  133. package/dist/modules/feature_toggles/components/FeatureTogglesTable.js +3 -3
  134. package/dist/modules/feature_toggles/components/FeatureTogglesTable.js.map +2 -2
  135. package/dist/modules/feature_toggles/components/OverridesTable.js +1 -1
  136. package/dist/modules/feature_toggles/components/OverridesTable.js.map +2 -2
  137. package/dist/modules/planner/backend/planner/availability-rulesets/page.js +2 -2
  138. package/dist/modules/planner/backend/planner/availability-rulesets/page.js.map +2 -2
  139. package/dist/modules/query_index/cli.js +7 -63
  140. package/dist/modules/query_index/cli.js.map +2 -2
  141. package/dist/modules/query_index/components/QueryIndexesTable.js +1 -7
  142. package/dist/modules/query_index/components/QueryIndexesTable.js.map +2 -2
  143. package/dist/modules/resources/backend/resources/resource-types/page.js +2 -2
  144. package/dist/modules/resources/backend/resources/resource-types/page.js.map +2 -2
  145. package/dist/modules/resources/backend/resources/resources/page.js +2 -2
  146. package/dist/modules/resources/backend/resources/resources/page.js.map +2 -2
  147. package/dist/modules/sales/backend/sales/channels/offers/page.js +0 -2
  148. package/dist/modules/sales/backend/sales/channels/offers/page.js.map +2 -2
  149. package/dist/modules/sales/backend/sales/channels/page.js +0 -2
  150. package/dist/modules/sales/backend/sales/channels/page.js.map +2 -2
  151. package/dist/modules/sales/commands/documents.js +0 -53
  152. package/dist/modules/sales/commands/documents.js.map +2 -2
  153. package/dist/modules/sales/commands/payments.js +0 -26
  154. package/dist/modules/sales/commands/payments.js.map +2 -2
  155. package/dist/modules/sales/components/AdjustmentKindSettings.js +2 -2
  156. package/dist/modules/sales/components/AdjustmentKindSettings.js.map +2 -2
  157. package/dist/modules/sales/components/PaymentMethodsSettings.js +2 -2
  158. package/dist/modules/sales/components/PaymentMethodsSettings.js.map +2 -2
  159. package/dist/modules/sales/components/ShippingMethodsSettings.js +2 -2
  160. package/dist/modules/sales/components/ShippingMethodsSettings.js.map +2 -2
  161. package/dist/modules/sales/components/TaxRatesSettings.js +2 -2
  162. package/dist/modules/sales/components/TaxRatesSettings.js.map +2 -2
  163. package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js +0 -2
  164. package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js.map +2 -2
  165. package/dist/modules/sales/components/documents/AdjustmentsSection.js +0 -2
  166. package/dist/modules/sales/components/documents/AdjustmentsSection.js.map +2 -2
  167. package/dist/modules/sales/components/documents/PaymentsSection.js +1 -2
  168. package/dist/modules/sales/components/documents/PaymentsSection.js.map +2 -2
  169. package/dist/modules/sales/components/documents/SalesDocumentsTable.js +0 -2
  170. package/dist/modules/sales/components/documents/SalesDocumentsTable.js.map +2 -2
  171. package/dist/modules/staff/backend/staff/team-members/page.js +1 -1
  172. package/dist/modules/staff/backend/staff/team-members/page.js.map +2 -2
  173. package/dist/modules/staff/backend/staff/team-roles/page.js +2 -2
  174. package/dist/modules/staff/backend/staff/team-roles/page.js.map +2 -2
  175. package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js +2 -2
  176. package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js.map +2 -2
  177. package/dist/modules/staff/backend/staff/teams/page.js +2 -2
  178. package/dist/modules/staff/backend/staff/teams/page.js.map +2 -2
  179. package/dist/modules/staff/commands/leave-requests.js +0 -79
  180. package/dist/modules/staff/commands/leave-requests.js.map +2 -2
  181. package/dist/modules/workflows/backend/definitions/page.js +0 -5
  182. package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
  183. package/dist/modules/workflows/backend/instances/page.js +0 -3
  184. package/dist/modules/workflows/backend/instances/page.js.map +2 -2
  185. package/dist/modules/workflows/backend/tasks/page.js +0 -3
  186. package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
  187. package/dist/modules/workflows/cli.js +12 -12
  188. package/dist/modules/workflows/cli.js.map +2 -2
  189. package/dist/modules/workflows/lib/transition-handler.js +6 -14
  190. package/dist/modules/workflows/lib/transition-handler.js.map +2 -2
  191. package/generated/entities.ids.generated.ts +1 -5
  192. package/generated/entity-fields-registry.ts +0 -2
  193. package/package.json +2 -2
  194. package/src/modules/api_docs/frontend/docs/api/page.tsx +2 -3
  195. package/src/modules/api_keys/backend/api-keys/page.tsx +1 -1
  196. package/src/modules/attachments/components/AttachmentLibrary.tsx +0 -4
  197. package/src/modules/attachments/components/AttachmentPartitionSettings.tsx +0 -2
  198. package/src/modules/auth/README.md +1 -1
  199. package/src/modules/auth/__tests__/cli-setup-acl.test.ts +1 -1
  200. package/src/modules/auth/api/__tests__/login.test.ts +0 -2
  201. package/src/modules/auth/api/admin/nav.ts +6 -10
  202. package/src/modules/auth/api/login.ts +7 -26
  203. package/src/modules/auth/api/reset/confirm.ts +2 -25
  204. package/src/modules/auth/api/reset.ts +0 -23
  205. package/src/modules/auth/api/sidebar/preferences/route.ts +12 -21
  206. package/src/modules/auth/api/users/route.ts +2 -5
  207. package/src/modules/auth/backend/roles/[id]/edit/page.tsx +1 -4
  208. package/src/modules/auth/backend/roles/page.tsx +3 -3
  209. package/src/modules/auth/backend/users/[id]/edit/page.tsx +3 -22
  210. package/src/modules/auth/backend/users/create/page.tsx +2 -19
  211. package/src/modules/auth/backend/users/page.tsx +3 -3
  212. package/src/modules/auth/cli.ts +11 -38
  213. package/src/modules/auth/commands/users.ts +2 -73
  214. package/src/modules/auth/data/validators.ts +2 -6
  215. package/src/modules/auth/frontend/login.tsx +5 -131
  216. package/src/modules/auth/frontend/reset/[token]/page.tsx +11 -24
  217. package/src/modules/auth/i18n/de.json +1 -48
  218. package/src/modules/auth/i18n/en.json +1 -48
  219. package/src/modules/auth/i18n/es.json +1 -48
  220. package/src/modules/auth/i18n/pl.json +1 -48
  221. package/src/modules/auth/lib/setup-app.ts +9 -58
  222. package/src/modules/auth/services/authService.ts +4 -27
  223. package/src/modules/business_rules/api/execute/route.ts +1 -8
  224. package/src/modules/business_rules/backend/rules/page.tsx +0 -4
  225. package/src/modules/business_rules/backend/sets/page.tsx +0 -3
  226. package/src/modules/business_rules/cli.ts +1 -2
  227. package/src/modules/business_rules/i18n/en.json +1 -3
  228. package/src/modules/business_rules/lib/__tests__/rule-engine.test.ts +0 -51
  229. package/src/modules/business_rules/lib/rule-engine.ts +3 -57
  230. package/src/modules/catalog/components/PriceKindSettings.tsx +0 -2
  231. package/src/modules/catalog/components/categories/CategoriesDataTable.tsx +2 -2
  232. package/src/modules/catalog/components/products/ProductsDataTable.tsx +0 -2
  233. package/src/modules/catalog/i18n/en.json +1 -3
  234. package/src/modules/configs/cli.ts +0 -6
  235. package/src/modules/configs/components/CachePanel.tsx +4 -4
  236. package/src/modules/configs/i18n/en.json +2 -12
  237. package/src/modules/configs/i18n/pl.json +2 -12
  238. package/src/modules/configs/lib/system-status.ts +1 -48
  239. package/src/modules/configs/lib/system-status.types.ts +0 -1
  240. package/src/modules/configs/lib/upgrade-actions.ts +0 -18
  241. package/src/modules/currencies/backend/currencies/page.tsx +0 -3
  242. package/src/modules/currencies/backend/exchange-rates/page.tsx +0 -2
  243. package/src/modules/customers/backend/customers/companies/page.tsx +0 -3
  244. package/src/modules/customers/backend/customers/deals/page.tsx +0 -3
  245. package/src/modules/customers/backend/customers/people/page.tsx +0 -3
  246. package/src/modules/customers/commands/deals.ts +0 -39
  247. package/src/modules/customers/components/CustomerTodosTable.tsx +0 -1
  248. package/src/modules/customers/i18n/en.json +1 -5
  249. package/src/modules/customers/widgets/dashboard/customer-todos/widget.ts +2 -2
  250. package/src/modules/customers/widgets/dashboard/new-customers/widget.ts +2 -2
  251. package/src/modules/customers/widgets/dashboard/new-deals/widget.ts +2 -2
  252. package/src/modules/customers/widgets/dashboard/next-interactions/widget.ts +2 -2
  253. package/src/modules/dashboards/cli.ts +5 -55
  254. package/src/modules/dashboards/components/WidgetVisibilityEditor.tsx +11 -22
  255. package/src/modules/dashboards/services/widgetDataService.ts +4 -164
  256. package/src/modules/dashboards/widgets/dashboard/aov-kpi/widget.ts +2 -2
  257. package/src/modules/dashboards/widgets/dashboard/new-customers-kpi/widget.ts +2 -2
  258. package/src/modules/dashboards/widgets/dashboard/orders-by-status/widget.ts +2 -2
  259. package/src/modules/dashboards/widgets/dashboard/orders-kpi/widget.ts +2 -2
  260. package/src/modules/dashboards/widgets/dashboard/pipeline-summary/widget.ts +2 -2
  261. package/src/modules/dashboards/widgets/dashboard/revenue-kpi/widget.ts +2 -2
  262. package/src/modules/dashboards/widgets/dashboard/revenue-trend/widget.ts +2 -2
  263. package/src/modules/dashboards/widgets/dashboard/sales-by-region/widget.ts +2 -2
  264. package/src/modules/dashboards/widgets/dashboard/top-customers/widget.ts +2 -2
  265. package/src/modules/dashboards/widgets/dashboard/top-products/widget.ts +2 -2
  266. package/src/modules/dictionaries/components/DictionaryTable.tsx +0 -2
  267. package/src/modules/directory/backend/directory/organizations/page.tsx +2 -2
  268. package/src/modules/directory/backend/directory/tenants/page.tsx +2 -2
  269. package/src/modules/entities/backend/entities/user/[entityId]/records/page.tsx +2 -2
  270. package/src/modules/entities/components/SystemEntitiesTable.tsx +1 -1
  271. package/src/modules/entities/components/UserEntitiesTable.tsx +2 -2
  272. package/src/modules/feature_toggles/components/FeatureTogglesTable.tsx +4 -3
  273. package/src/modules/feature_toggles/components/OverridesTable.tsx +1 -1
  274. package/src/modules/planner/backend/planner/availability-rulesets/page.tsx +2 -2
  275. package/src/modules/query_index/cli.ts +13 -82
  276. package/src/modules/query_index/components/QueryIndexesTable.tsx +2 -8
  277. package/src/modules/resources/backend/resources/resource-types/page.tsx +2 -2
  278. package/src/modules/resources/backend/resources/resources/page.tsx +2 -2
  279. package/src/modules/sales/backend/sales/channels/offers/page.tsx +0 -2
  280. package/src/modules/sales/backend/sales/channels/page.tsx +0 -2
  281. package/src/modules/sales/commands/documents.ts +0 -65
  282. package/src/modules/sales/commands/payments.ts +0 -33
  283. package/src/modules/sales/components/AdjustmentKindSettings.tsx +2 -2
  284. package/src/modules/sales/components/PaymentMethodsSettings.tsx +2 -2
  285. package/src/modules/sales/components/ShippingMethodsSettings.tsx +2 -2
  286. package/src/modules/sales/components/TaxRatesSettings.tsx +2 -2
  287. package/src/modules/sales/components/channels/SalesChannelOffersPanel.tsx +0 -2
  288. package/src/modules/sales/components/documents/AdjustmentsSection.tsx +0 -2
  289. package/src/modules/sales/components/documents/PaymentsSection.tsx +1 -2
  290. package/src/modules/sales/components/documents/SalesDocumentsTable.tsx +0 -2
  291. package/src/modules/sales/i18n/de.json +0 -20
  292. package/src/modules/sales/i18n/en.json +1 -25
  293. package/src/modules/sales/i18n/es.json +0 -20
  294. package/src/modules/sales/i18n/pl.json +0 -20
  295. package/src/modules/staff/backend/staff/team-members/page.tsx +1 -1
  296. package/src/modules/staff/backend/staff/team-roles/page.tsx +2 -2
  297. package/src/modules/staff/backend/staff/teams/[id]/edit/page.tsx +2 -2
  298. package/src/modules/staff/backend/staff/teams/page.tsx +2 -2
  299. package/src/modules/staff/commands/leave-requests.ts +0 -94
  300. package/src/modules/staff/i18n/de.json +0 -4
  301. package/src/modules/staff/i18n/en.json +1 -9
  302. package/src/modules/staff/i18n/es.json +0 -4
  303. package/src/modules/staff/i18n/pl.json +0 -4
  304. package/src/modules/workflows/backend/definitions/page.tsx +0 -5
  305. package/src/modules/workflows/backend/instances/page.tsx +1 -4
  306. package/src/modules/workflows/backend/tasks/page.tsx +1 -4
  307. package/src/modules/workflows/cli.ts +12 -12
  308. package/src/modules/workflows/i18n/en.json +1 -3
  309. package/src/modules/workflows/lib/transition-handler.ts +6 -18
  310. package/dist/generated/entities/notification/index.js +0 -57
  311. package/dist/generated/entities/notification/index.js.map +0 -7
  312. package/dist/modules/auth/api/profile/route.js +0 -157
  313. package/dist/modules/auth/api/profile/route.js.map +0 -7
  314. package/dist/modules/auth/backend/auth/profile/page.js +0 -141
  315. package/dist/modules/auth/backend/auth/profile/page.js.map +0 -7
  316. package/dist/modules/auth/backend/auth/profile/page.meta.js +0 -13
  317. package/dist/modules/auth/backend/auth/profile/page.meta.js.map +0 -7
  318. package/dist/modules/auth/notifications.js +0 -112
  319. package/dist/modules/auth/notifications.js.map +0 -7
  320. package/dist/modules/business_rules/notifications.js +0 -28
  321. package/dist/modules/business_rules/notifications.js.map +0 -7
  322. package/dist/modules/business_rules/subscribers/rule-execution-failed-notification.js +0 -37
  323. package/dist/modules/business_rules/subscribers/rule-execution-failed-notification.js.map +0 -7
  324. package/dist/modules/catalog/notifications.js +0 -28
  325. package/dist/modules/catalog/notifications.js.map +0 -7
  326. package/dist/modules/catalog/subscribers/low-stock-notification.js +0 -38
  327. package/dist/modules/catalog/subscribers/low-stock-notification.js.map +0 -7
  328. package/dist/modules/customers/notifications.js +0 -48
  329. package/dist/modules/customers/notifications.js.map +0 -7
  330. package/dist/modules/dashboards/lib/role-widgets.js +0 -58
  331. package/dist/modules/dashboards/lib/role-widgets.js.map +0 -7
  332. package/dist/modules/directory/api/get/tenants/lookup.js +0 -70
  333. package/dist/modules/directory/api/get/tenants/lookup.js.map +0 -7
  334. package/dist/modules/notifications/acl.js +0 -11
  335. package/dist/modules/notifications/acl.js.map +0 -7
  336. package/dist/modules/notifications/api/[id]/action/route.js +0 -74
  337. package/dist/modules/notifications/api/[id]/action/route.js.map +0 -7
  338. package/dist/modules/notifications/api/[id]/dismiss/route.js +0 -15
  339. package/dist/modules/notifications/api/[id]/dismiss/route.js.map +0 -7
  340. package/dist/modules/notifications/api/[id]/read/route.js +0 -15
  341. package/dist/modules/notifications/api/[id]/read/route.js.map +0 -7
  342. package/dist/modules/notifications/api/[id]/restore/route.js +0 -53
  343. package/dist/modules/notifications/api/[id]/restore/route.js.map +0 -7
  344. package/dist/modules/notifications/api/batch/route.js +0 -17
  345. package/dist/modules/notifications/api/batch/route.js.map +0 -7
  346. package/dist/modules/notifications/api/feature/route.js +0 -17
  347. package/dist/modules/notifications/api/feature/route.js.map +0 -7
  348. package/dist/modules/notifications/api/mark-all-read/route.js +0 -35
  349. package/dist/modules/notifications/api/mark-all-read/route.js.map +0 -7
  350. package/dist/modules/notifications/api/openapi.js +0 -76
  351. package/dist/modules/notifications/api/openapi.js.map +0 -7
  352. package/dist/modules/notifications/api/role/route.js +0 -17
  353. package/dist/modules/notifications/api/role/route.js.map +0 -7
  354. package/dist/modules/notifications/api/route.js +0 -85
  355. package/dist/modules/notifications/api/route.js.map +0 -7
  356. package/dist/modules/notifications/api/settings/route.js +0 -155
  357. package/dist/modules/notifications/api/settings/route.js.map +0 -7
  358. package/dist/modules/notifications/api/unread-count/route.js +0 -38
  359. package/dist/modules/notifications/api/unread-count/route.js.map +0 -7
  360. package/dist/modules/notifications/backend/config/notifications/page.js +0 -10
  361. package/dist/modules/notifications/backend/config/notifications/page.js.map +0 -7
  362. package/dist/modules/notifications/backend/config/notifications/page.meta.js +0 -24
  363. package/dist/modules/notifications/backend/config/notifications/page.meta.js.map +0 -7
  364. package/dist/modules/notifications/cli.js +0 -16
  365. package/dist/modules/notifications/cli.js.map +0 -7
  366. package/dist/modules/notifications/data/entities.js +0 -112
  367. package/dist/modules/notifications/data/entities.js.map +0 -7
  368. package/dist/modules/notifications/data/validators.js +0 -98
  369. package/dist/modules/notifications/data/validators.js.map +0 -7
  370. package/dist/modules/notifications/di.js +0 -13
  371. package/dist/modules/notifications/di.js.map +0 -7
  372. package/dist/modules/notifications/emails/NotificationEmail.js +0 -58
  373. package/dist/modules/notifications/emails/NotificationEmail.js.map +0 -7
  374. package/dist/modules/notifications/frontend/NotificationInboxPageClient.js +0 -44
  375. package/dist/modules/notifications/frontend/NotificationInboxPageClient.js.map +0 -7
  376. package/dist/modules/notifications/frontend/NotificationSettingsPageClient.js +0 -220
  377. package/dist/modules/notifications/frontend/NotificationSettingsPageClient.js.map +0 -7
  378. package/dist/modules/notifications/index.js +0 -14
  379. package/dist/modules/notifications/index.js.map +0 -7
  380. package/dist/modules/notifications/lib/deliveryConfig.js +0 -107
  381. package/dist/modules/notifications/lib/deliveryConfig.js.map +0 -7
  382. package/dist/modules/notifications/lib/deliveryStrategies.js +0 -14
  383. package/dist/modules/notifications/lib/deliveryStrategies.js.map +0 -7
  384. package/dist/modules/notifications/lib/events.js +0 -12
  385. package/dist/modules/notifications/lib/events.js.map +0 -7
  386. package/dist/modules/notifications/lib/notificationBuilder.js +0 -66
  387. package/dist/modules/notifications/lib/notificationBuilder.js.map +0 -7
  388. package/dist/modules/notifications/lib/notificationFactory.js +0 -54
  389. package/dist/modules/notifications/lib/notificationFactory.js.map +0 -7
  390. package/dist/modules/notifications/lib/notificationMapper.js +0 -34
  391. package/dist/modules/notifications/lib/notificationMapper.js.map +0 -7
  392. package/dist/modules/notifications/lib/notificationRecipients.js +0 -35
  393. package/dist/modules/notifications/lib/notificationRecipients.js.map +0 -7
  394. package/dist/modules/notifications/lib/notificationService.js +0 -279
  395. package/dist/modules/notifications/lib/notificationService.js.map +0 -7
  396. package/dist/modules/notifications/lib/routeHelpers.js +0 -101
  397. package/dist/modules/notifications/lib/routeHelpers.js.map +0 -7
  398. package/dist/modules/notifications/lib/safeHref.js +0 -24
  399. package/dist/modules/notifications/lib/safeHref.js.map +0 -7
  400. package/dist/modules/notifications/migrations/Migration20260123000001.js +0 -70
  401. package/dist/modules/notifications/migrations/Migration20260123000001.js.map +0 -7
  402. package/dist/modules/notifications/migrations/Migration20260126150000.js +0 -37
  403. package/dist/modules/notifications/migrations/Migration20260126150000.js.map +0 -7
  404. package/dist/modules/notifications/migrations/Migration20260129082610.js +0 -13
  405. package/dist/modules/notifications/migrations/Migration20260129082610.js.map +0 -7
  406. package/dist/modules/notifications/subscribers/deliver-notification.js +0 -165
  407. package/dist/modules/notifications/subscribers/deliver-notification.js.map +0 -7
  408. package/dist/modules/notifications/workers/create-notification.worker.js +0 -70
  409. package/dist/modules/notifications/workers/create-notification.worker.js.map +0 -7
  410. package/dist/modules/sales/notifications.client.js +0 -51
  411. package/dist/modules/sales/notifications.client.js.map +0 -7
  412. package/dist/modules/sales/notifications.js +0 -88
  413. package/dist/modules/sales/notifications.js.map +0 -7
  414. package/dist/modules/sales/subscribers/quote-expiring-notification.js +0 -38
  415. package/dist/modules/sales/subscribers/quote-expiring-notification.js.map +0 -7
  416. package/dist/modules/sales/widgets/notifications/SalesOrderCreatedRenderer.js +0 -137
  417. package/dist/modules/sales/widgets/notifications/SalesOrderCreatedRenderer.js.map +0 -7
  418. package/dist/modules/sales/widgets/notifications/SalesQuoteCreatedRenderer.js +0 -137
  419. package/dist/modules/sales/widgets/notifications/SalesQuoteCreatedRenderer.js.map +0 -7
  420. package/dist/modules/sales/widgets/notifications/index.js +0 -7
  421. package/dist/modules/sales/widgets/notifications/index.js.map +0 -7
  422. package/dist/modules/sales/widgets/notifications/useSalesDocumentTotals.js +0 -60
  423. package/dist/modules/sales/widgets/notifications/useSalesDocumentTotals.js.map +0 -7
  424. package/dist/modules/staff/notifications.js +0 -75
  425. package/dist/modules/staff/notifications.js.map +0 -7
  426. package/dist/modules/workflows/notifications.js +0 -28
  427. package/dist/modules/workflows/notifications.js.map +0 -7
  428. package/dist/modules/workflows/subscribers/task-assigned-notification.js +0 -38
  429. package/dist/modules/workflows/subscribers/task-assigned-notification.js.map +0 -7
  430. package/generated/entities/notification/index.ts +0 -27
  431. package/src/modules/auth/api/profile/route.ts +0 -163
  432. package/src/modules/auth/backend/auth/profile/page.meta.ts +0 -9
  433. package/src/modules/auth/backend/auth/profile/page.tsx +0 -174
  434. package/src/modules/auth/notifications.ts +0 -109
  435. package/src/modules/business_rules/notifications.ts +0 -25
  436. package/src/modules/business_rules/subscribers/rule-execution-failed-notification.ts +0 -50
  437. package/src/modules/catalog/notifications.ts +0 -25
  438. package/src/modules/catalog/subscribers/low-stock-notification.ts +0 -52
  439. package/src/modules/customers/notifications.ts +0 -44
  440. package/src/modules/dashboards/lib/role-widgets.ts +0 -80
  441. package/src/modules/directory/api/get/tenants/lookup.ts +0 -75
  442. package/src/modules/notifications/__tests__/deliver-notification.test.ts +0 -195
  443. package/src/modules/notifications/__tests__/deliveryStrategies.test.ts +0 -19
  444. package/src/modules/notifications/__tests__/notificationService.test.ts +0 -208
  445. package/src/modules/notifications/acl.ts +0 -7
  446. package/src/modules/notifications/api/[id]/action/route.ts +0 -75
  447. package/src/modules/notifications/api/[id]/dismiss/route.ts +0 -12
  448. package/src/modules/notifications/api/[id]/read/route.ts +0 -12
  449. package/src/modules/notifications/api/[id]/restore/route.ts +0 -53
  450. package/src/modules/notifications/api/batch/route.ts +0 -14
  451. package/src/modules/notifications/api/feature/route.ts +0 -14
  452. package/src/modules/notifications/api/mark-all-read/route.ts +0 -34
  453. package/src/modules/notifications/api/openapi.ts +0 -76
  454. package/src/modules/notifications/api/role/route.ts +0 -14
  455. package/src/modules/notifications/api/route.ts +0 -92
  456. package/src/modules/notifications/api/settings/route.ts +0 -157
  457. package/src/modules/notifications/api/unread-count/route.ts +0 -38
  458. package/src/modules/notifications/backend/config/notifications/page.meta.ts +0 -22
  459. package/src/modules/notifications/backend/config/notifications/page.tsx +0 -12
  460. package/src/modules/notifications/cli.ts +0 -18
  461. package/src/modules/notifications/data/entities.ts +0 -99
  462. package/src/modules/notifications/data/validators.ts +0 -115
  463. package/src/modules/notifications/di.ts +0 -11
  464. package/src/modules/notifications/emails/NotificationEmail.tsx +0 -98
  465. package/src/modules/notifications/frontend/NotificationInboxPageClient.tsx +0 -42
  466. package/src/modules/notifications/frontend/NotificationSettingsPageClient.tsx +0 -233
  467. package/src/modules/notifications/i18n/de.json +0 -50
  468. package/src/modules/notifications/i18n/en.json +0 -50
  469. package/src/modules/notifications/i18n/es.json +0 -50
  470. package/src/modules/notifications/i18n/pl.json +0 -50
  471. package/src/modules/notifications/index.ts +0 -12
  472. package/src/modules/notifications/lib/deliveryConfig.ts +0 -153
  473. package/src/modules/notifications/lib/deliveryStrategies.ts +0 -50
  474. package/src/modules/notifications/lib/events.ts +0 -48
  475. package/src/modules/notifications/lib/notificationBuilder.ts +0 -121
  476. package/src/modules/notifications/lib/notificationFactory.ts +0 -76
  477. package/src/modules/notifications/lib/notificationMapper.ts +0 -33
  478. package/src/modules/notifications/lib/notificationRecipients.ts +0 -83
  479. package/src/modules/notifications/lib/notificationService.ts +0 -414
  480. package/src/modules/notifications/lib/routeHelpers.ts +0 -151
  481. package/src/modules/notifications/lib/safeHref.ts +0 -29
  482. package/src/modules/notifications/migrations/.snapshot-open-mercato.json +0 -336
  483. package/src/modules/notifications/migrations/Migration20260123000001.ts +0 -73
  484. package/src/modules/notifications/migrations/Migration20260126150000.ts +0 -39
  485. package/src/modules/notifications/migrations/Migration20260129082610.ts +0 -13
  486. package/src/modules/notifications/subscribers/deliver-notification.ts +0 -204
  487. package/src/modules/notifications/workers/create-notification.worker.ts +0 -122
  488. package/src/modules/sales/notifications.client.ts +0 -65
  489. package/src/modules/sales/notifications.ts +0 -82
  490. package/src/modules/sales/subscribers/quote-expiring-notification.ts +0 -53
  491. package/src/modules/sales/widgets/notifications/SalesOrderCreatedRenderer.tsx +0 -156
  492. package/src/modules/sales/widgets/notifications/SalesQuoteCreatedRenderer.tsx +0 -156
  493. package/src/modules/sales/widgets/notifications/index.ts +0 -2
  494. package/src/modules/sales/widgets/notifications/useSalesDocumentTotals.ts +0 -81
  495. package/src/modules/staff/notifications.ts +0 -71
  496. package/src/modules/workflows/notifications.ts +0 -25
  497. package/src/modules/workflows/subscribers/task-assigned-notification.ts +0 -53
@@ -2,7 +2,6 @@ import ApiDocsExplorer from './Explorer'
2
2
  import { getModules } from '@open-mercato/shared/lib/i18n/server'
3
3
  import { buildOpenApiDocument } from '@open-mercato/shared/lib/openapi'
4
4
  import { resolveApiDocsBaseUrl } from '@open-mercato/core/modules/api_docs/lib/resources'
5
- import { APP_VERSION } from '@open-mercato/shared/lib/version'
6
5
 
7
6
  type ExplorerOperation = {
8
7
  id: string
@@ -55,7 +54,7 @@ export default async function ApiDocsViewerPage() {
55
54
  const modules = getModules()
56
55
  const doc = buildOpenApiDocument(modules, {
57
56
  title: 'Open Mercato API',
58
- version: APP_VERSION,
57
+ version: '1.0.0',
59
58
  description: 'Auto-generated OpenAPI definition for all enabled modules.',
60
59
  servers: [{ url: baseUrl, description: 'Default environment' }],
61
60
  baseUrlForExamples: baseUrl,
@@ -68,7 +67,7 @@ export default async function ApiDocsViewerPage() {
68
67
  return (
69
68
  <ApiDocsExplorer
70
69
  title={doc.info?.title ?? 'Open Mercato API'}
71
- version={doc.info?.version ?? APP_VERSION}
70
+ version={doc.info?.version ?? '1.0.0'}
72
71
  description={doc.info?.description}
73
72
  operations={operations}
74
73
  tagOrder={tagOrder}
@@ -175,7 +175,7 @@ export default function ApiKeysListPage() {
175
175
  perspective={{ tableId: 'api_keys.list' }}
176
176
  rowActions={(row) => (
177
177
  <RowActions items={[
178
- { id: 'delete', label: t('common.delete'), destructive: true, onSelect: () => { void handleDelete(row) } },
178
+ { label: t('common.delete'), destructive: true, onSelect: () => { void handleDelete(row) } },
179
179
  ]} />
180
180
  )}
181
181
  pagination={{ page, pageSize: 20, total, totalPages, onPageChange: setPage }}
@@ -1056,7 +1056,6 @@ export function AttachmentLibrary() {
1056
1056
  <RowActions
1057
1057
  items={[
1058
1058
  {
1059
- id: 'open',
1060
1059
  label: t('attachments.library.actions.open', 'Open'),
1061
1060
  onSelect: () => {
1062
1061
  if (!row.url) return
@@ -1064,12 +1063,10 @@ export function AttachmentLibrary() {
1064
1063
  },
1065
1064
  },
1066
1065
  {
1067
- id: 'edit',
1068
1066
  label: t('attachments.library.actions.edit', 'Edit metadata'),
1069
1067
  onSelect: () => openMetadataDialog(row),
1070
1068
  },
1071
1069
  {
1072
- id: 'copy-url',
1073
1070
  label: t('attachments.library.actions.copyUrl', 'Copy URL'),
1074
1071
  onSelect: () => {
1075
1072
  if (!row.url) {
@@ -1094,7 +1091,6 @@ export function AttachmentLibrary() {
1094
1091
  },
1095
1092
  },
1096
1093
  {
1097
- id: 'delete',
1098
1094
  label: t('attachments.library.actions.delete', 'Delete'),
1099
1095
  destructive: true,
1100
1096
  onSelect: () => openDeleteDialog(row),
@@ -305,12 +305,10 @@ export function AttachmentPartitionSettings() {
305
305
  <RowActions
306
306
  items={[
307
307
  {
308
- id: 'edit',
309
308
  label: t('attachments.partitions.actions.edit', 'Edit'),
310
309
  onSelect: () => openDialog({ mode: 'edit', entry }),
311
310
  },
312
311
  {
313
- id: 'delete',
314
312
  label: t('attachments.partitions.actions.delete', 'Delete'),
315
313
  destructive: true,
316
314
  onSelect: () => { void handleDelete(entry) },
@@ -8,7 +8,7 @@ Features:
8
8
  - `mercato auth add-user --email <e> --password <p> --organizationId <id> [--roles r1,r2]`
9
9
  - `mercato auth seed-roles`
10
10
  - `mercato auth add-org --name <org>`
11
- - `mercato auth setup --orgName <org> --email <e> --password <p> [--roles superadmin,admin] [--skip-password-policy]`
11
+ - `mercato auth setup --orgName <org> --email <e> --password <p> [--roles superadmin,admin]`
12
12
 
13
13
  DB entities used (defined in root schema):
14
14
  - `users` with: `email`, `password_hash`, `is_confirmed`, `last_login_at`, `organization_id`, timestamps.
@@ -46,7 +46,7 @@ describe('auth CLI setup seeds ACLs', () => {
46
46
  findOneOrFail.mockImplementation(async (_: any, where: any) => ({ id: 'role-' + where.name, name: where.name }))
47
47
 
48
48
  // Act
49
- await setup.run(['--orgName', 'Acme', '--email', 'root@acme.com', '--password', 'secret', '--skip-password-policy'])
49
+ await setup.run(['--orgName', 'Acme', '--email', 'root@acme.com', '--password', 'secret'])
50
50
 
51
51
  // Assert: persistAndFlush was called to create three RoleAcl rows with expected flags/features
52
52
  const calls = persistAndFlush.mock.calls.map((c) => c[0])
@@ -15,8 +15,6 @@ jest.mock('@open-mercato/shared/lib/di/container', () => ({
15
15
  createRequestContainer: async () => ({
16
16
  resolve: (_: string) => ({
17
17
  findUserByEmail: async (email: string) => ({ id: 1, email, passwordHash: 'hash', tenantId: tenantId, organizationId: orgId }),
18
- findUsersByEmail: async (email: string) => ([{ id: 1, email, passwordHash: 'hash', tenantId: tenantId, organizationId: orgId }]),
19
- findUserByEmailAndTenant: async (email: string) => ({ id: 1, email, passwordHash: 'hash', tenantId: tenantId, organizationId: orgId }),
20
18
  verifyPassword: async () => true,
21
19
  getUserRoles: async (_user: any, _tenant: string | null | undefined) => ['admin'],
22
20
  updateLastLoginAt: async () => undefined,
@@ -297,16 +297,12 @@ export async function GET(req: Request) {
297
297
  const groupsWithRole = rolePreference ? applySidebarPreference(groups, rolePreference) : groups
298
298
  const baseForUser = adoptSidebarDefaults(groupsWithRole)
299
299
 
300
- // For API key auth, use userId (the actual user) if available; otherwise skip user preferences
301
- const effectiveUserId = auth.isApiKey ? auth.userId : auth.sub
302
- const preference = effectiveUserId
303
- ? await loadSidebarPreference(em, {
304
- userId: effectiveUserId,
305
- tenantId: auth.tenantId ?? null,
306
- organizationId: auth.orgId ?? null,
307
- locale,
308
- })
309
- : null
300
+ const preference = await loadSidebarPreference(em, {
301
+ userId: auth.sub,
302
+ tenantId: auth.tenantId ?? null,
303
+ organizationId: auth.orgId ?? null,
304
+ locale,
305
+ })
310
306
 
311
307
  const withPreference = applySidebarPreference(baseForUser, preference)
312
308
 
@@ -17,33 +17,15 @@ export async function POST(req: Request) {
17
17
  const email = String(form.get('email') ?? '')
18
18
  const password = String(form.get('password') ?? '')
19
19
  const remember = parseBooleanToken(form.get('remember')?.toString()) === true
20
- const tenantIdRaw = String(form.get('tenantId') ?? form.get('tenant') ?? '').trim()
21
20
  const requireRoleRaw = (String(form.get('requireRole') ?? form.get('role') ?? '')).trim()
22
21
  const requiredRoles = requireRoleRaw ? requireRoleRaw.split(',').map((s) => s.trim()).filter(Boolean) : []
23
- const parsed = userLoginSchema.pick({ email: true, password: true, tenantId: true }).safeParse({
24
- email,
25
- password,
26
- tenantId: tenantIdRaw || undefined,
27
- })
22
+ const parsed = userLoginSchema.pick({ email: true, password: true }).safeParse({ email, password })
28
23
  if (!parsed.success) {
29
24
  return NextResponse.json({ ok: false, error: translate('auth.login.errors.invalidCredentials', 'Invalid credentials') }, { status: 400 })
30
25
  }
31
26
  const container = await createRequestContainer()
32
27
  const auth = (container.resolve('authService') as AuthService)
33
- const tenantId = parsed.data.tenantId ?? null
34
- let user = null
35
- if (tenantId) {
36
- user = await auth.findUserByEmailAndTenant(parsed.data.email, tenantId)
37
- } else {
38
- const users = await auth.findUsersByEmail(parsed.data.email)
39
- if (users.length > 1) {
40
- return NextResponse.json({
41
- ok: false,
42
- error: translate('auth.login.errors.tenantRequired', 'Use the login link provided with your tenant activation to continue.'),
43
- }, { status: 400 })
44
- }
45
- user = users[0] ?? null
46
- }
28
+ const user = await auth.findUserByEmail(parsed.data.email)
47
29
  if (!user || !user.passwordHash) {
48
30
  return NextResponse.json({ ok: false, error: translate('auth.login.errors.invalidCredentials', 'Invalid email or password') }, { status: 401 })
49
31
  }
@@ -53,27 +35,26 @@ export async function POST(req: Request) {
53
35
  }
54
36
  // Optional role requirement
55
37
  if (requiredRoles.length) {
56
- const userRoleNames = await auth.getUserRoles(user, tenantId ?? (user.tenantId ? String(user.tenantId) : null))
38
+ const userRoleNames = await auth.getUserRoles(user, user.tenantId ? String(user.tenantId) : null)
57
39
  const authorized = requiredRoles.some(r => userRoleNames.includes(r))
58
40
  if (!authorized) {
59
41
  return NextResponse.json({ ok: false, error: translate('auth.login.errors.permissionDenied', 'Not authorized for this area') }, { status: 403 })
60
42
  }
61
43
  }
62
44
  await auth.updateLastLoginAt(user)
63
- const resolvedTenantId = tenantId ?? (user.tenantId ? String(user.tenantId) : null)
64
- const userRoleNames = await auth.getUserRoles(user, resolvedTenantId)
45
+ const userRoleNames = await auth.getUserRoles(user, user.tenantId ? String(user.tenantId) : null)
65
46
  try {
66
47
  const eventBus = (container.resolve('eventBus') as EventBus)
67
48
  void eventBus.emitEvent('query_index.coverage.warmup', {
68
- tenantId: resolvedTenantId,
49
+ tenantId: user.tenantId ? String(user.tenantId) : null,
69
50
  }).catch(() => undefined)
70
51
  } catch {
71
52
  // optional warmup
72
53
  }
73
54
  const token = signJwt({
74
55
  sub: String(user.id),
75
- tenantId: resolvedTenantId,
76
- orgId: user.organizationId ? String(user.organizationId) : null,
56
+ tenantId: user.tenantId ? String(user.tenantId) : null,
57
+ orgId: user.organizationId ? String(user.organizationId) : null,
77
58
  email: user.email,
78
59
  roles: userRoleNames
79
60
  })
@@ -3,9 +3,6 @@ import { NextResponse } from 'next/server'
3
3
  import type { OpenApiRouteDoc } from '@open-mercato/shared/lib/openapi'
4
4
  import { createRequestContainer } from '@open-mercato/shared/lib/di/container'
5
5
  import { AuthService } from '@open-mercato/core/modules/auth/services/authService'
6
- import { buildNotificationFromType } from '@open-mercato/core/modules/notifications/lib/notificationBuilder'
7
- import { resolveNotificationService } from '@open-mercato/core/modules/notifications/lib/notificationService'
8
- import notificationTypes from '@open-mercato/core/modules/auth/notifications'
9
6
  import { z } from 'zod'
10
7
 
11
8
  // validation via confirmPasswordResetSchema
@@ -18,28 +15,8 @@ export async function POST(req: Request) {
18
15
  if (!parsed.success) return NextResponse.json({ ok: false, error: 'Invalid request' }, { status: 400 })
19
16
  const c = await createRequestContainer()
20
17
  const auth = c.resolve<AuthService>('authService')
21
- const user = await auth.confirmPasswordReset(parsed.data.token, parsed.data.password)
22
- if (!user) return NextResponse.json({ ok: false, error: 'Invalid or expired token' }, { status: 400 })
23
- try {
24
- const tenantId = user.tenantId ? String(user.tenantId) : null
25
- if (tenantId) {
26
- const notificationService = resolveNotificationService(c)
27
- const typeDef = notificationTypes.find((type) => type.type === 'auth.password_reset.completed')
28
- if (typeDef) {
29
- const notificationInput = buildNotificationFromType(typeDef, {
30
- recipientUserId: String(user.id),
31
- sourceEntityType: 'auth:user',
32
- sourceEntityId: String(user.id),
33
- })
34
- await notificationService.create(notificationInput, {
35
- tenantId,
36
- organizationId: user.organizationId ? String(user.organizationId) : null,
37
- })
38
- }
39
- }
40
- } catch (err) {
41
- console.error('[auth.reset.confirm] Failed to create notification:', err)
42
- }
18
+ const ok = await auth.confirmPasswordReset(parsed.data.token, parsed.data.password)
19
+ if (!ok) return NextResponse.json({ ok: false, error: 'Invalid or expired token' }, { status: 400 })
43
20
  return NextResponse.json({ ok: true, redirect: '/login' })
44
21
  }
45
22
 
@@ -6,9 +6,6 @@ import { AuthService } from '@open-mercato/core/modules/auth/services/authServic
6
6
  import { sendEmail } from '@open-mercato/shared/lib/email/send'
7
7
  import ResetPasswordEmail from '@open-mercato/core/modules/auth/emails/ResetPasswordEmail'
8
8
  import { resolveTranslations } from '@open-mercato/shared/lib/i18n/server'
9
- import { buildNotificationFromType } from '@open-mercato/core/modules/notifications/lib/notificationBuilder'
10
- import { resolveNotificationService } from '@open-mercato/core/modules/notifications/lib/notificationService'
11
- import notificationTypes from '@open-mercato/core/modules/auth/notifications'
12
9
  import { z } from 'zod'
13
10
 
14
11
  // validation via requestPasswordResetSchema
@@ -38,26 +35,6 @@ export async function POST(req: Request) {
38
35
  }
39
36
 
40
37
  await sendEmail({ to: user.email, subject, react: ResetPasswordEmail({ resetUrl, copy }) })
41
- try {
42
- const tenantId = user.tenantId ? String(user.tenantId) : null
43
- if (tenantId) {
44
- const notificationService = resolveNotificationService(c)
45
- const typeDef = notificationTypes.find((type) => type.type === 'auth.password_reset.requested')
46
- if (typeDef) {
47
- const notificationInput = buildNotificationFromType(typeDef, {
48
- recipientUserId: String(user.id),
49
- sourceEntityType: 'auth:user',
50
- sourceEntityId: String(user.id),
51
- })
52
- await notificationService.create(notificationInput, {
53
- tenantId,
54
- organizationId: user.organizationId ? String(user.organizationId) : null,
55
- })
56
- }
57
- }
58
- } catch (err) {
59
- console.error('[auth.reset] Failed to create notification:', err)
60
- }
61
38
  return NextResponse.json({ ok: true })
62
39
  }
63
40
 
@@ -64,16 +64,12 @@ export async function GET(req: Request) {
64
64
  { tenantId: auth.tenantId ?? null, organizationId: auth.orgId ?? null },
65
65
  ) ?? false
66
66
 
67
- // For API key auth, use userId (the actual user) if available
68
- const effectiveUserId = auth.isApiKey ? auth.userId : auth.sub
69
- const settings = effectiveUserId
70
- ? await loadSidebarPreference(em, {
71
- userId: effectiveUserId,
72
- tenantId: auth.tenantId ?? null,
73
- organizationId: auth.orgId ?? null,
74
- locale,
75
- })
76
- : null
67
+ const settings = await loadSidebarPreference(em, {
68
+ userId: auth.sub,
69
+ tenantId: auth.tenantId ?? null,
70
+ organizationId: auth.orgId ?? null,
71
+ locale,
72
+ })
77
73
 
78
74
  let rolesPayload: Array<{ id: string; name: string; hasPreference: boolean }> = []
79
75
  if (canApplyToRoles) {
@@ -96,11 +92,11 @@ export async function GET(req: Request) {
96
92
  return NextResponse.json({
97
93
  locale,
98
94
  settings: {
99
- version: settings?.version ?? SIDEBAR_PREFERENCES_VERSION,
100
- groupOrder: settings?.groupOrder ?? [],
101
- groupLabels: settings?.groupLabels ?? {},
102
- itemLabels: settings?.itemLabels ?? {},
103
- hiddenItems: settings?.hiddenItems ?? [],
95
+ version: settings.version ?? SIDEBAR_PREFERENCES_VERSION,
96
+ groupOrder: settings.groupOrder ?? [],
97
+ groupLabels: settings.groupLabels ?? {},
98
+ itemLabels: settings.itemLabels ?? {},
99
+ hiddenItems: settings.hiddenItems ?? [],
104
100
  },
105
101
  canApplyToRoles,
106
102
  roles: rolesPayload,
@@ -110,11 +106,6 @@ export async function GET(req: Request) {
110
106
  export async function PUT(req: Request) {
111
107
  const auth = await getAuthFromRequest(req)
112
108
  if (!auth) return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
113
- // For API key auth, use userId (the actual user) if available
114
- const effectiveUserId = auth.isApiKey ? auth.userId : auth.sub
115
- if (!effectiveUserId) {
116
- return NextResponse.json({ error: 'Cannot save preferences: no user associated with this API key' }, { status: 403 })
117
- }
118
109
 
119
110
  let parsedBody: unknown
120
111
  try {
@@ -191,7 +182,7 @@ export async function PUT(req: Request) {
191
182
  }
192
183
 
193
184
  const settings = await saveSidebarPreference(em, {
194
- userId: effectiveUserId,
185
+ userId: auth.sub,
195
186
  tenantId: auth.tenantId ?? null,
196
187
  organizationId: auth.orgId ?? null,
197
188
  locale,
@@ -15,7 +15,6 @@ import type { EntityManager } from '@mikro-orm/postgresql'
15
15
  import { userCrudEvents, userCrudIndexer } from '@open-mercato/core/modules/auth/commands/users'
16
16
  import { findWithDecryption } from '@open-mercato/shared/lib/encryption/find'
17
17
  import { escapeLikePattern } from '@open-mercato/shared/lib/db/escapeLikePattern'
18
- import { buildPasswordSchema } from '@open-mercato/shared/lib/auth/passwordPolicy'
19
18
 
20
19
  const querySchema = z.object({
21
20
  id: z.string().uuid().optional(),
@@ -28,11 +27,9 @@ const querySchema = z.object({
28
27
 
29
28
  const rawBodySchema = z.object({}).passthrough()
30
29
 
31
- const passwordSchema = buildPasswordSchema()
32
-
33
30
  const userCreateSchema = z.object({
34
31
  email: z.string().email(),
35
- password: passwordSchema,
32
+ password: z.string().min(6),
36
33
  organizationId: z.string().uuid(),
37
34
  roles: z.array(z.string()).optional(),
38
35
  })
@@ -40,7 +37,7 @@ const userCreateSchema = z.object({
40
37
  const userUpdateSchema = z.object({
41
38
  id: z.string().uuid(),
42
39
  email: z.string().email().optional(),
43
- password: passwordSchema.optional(),
40
+ password: z.string().min(6).optional(),
44
41
  organizationId: z.string().uuid().optional(),
45
42
  roles: z.array(z.string()).optional(),
46
43
  })
@@ -6,7 +6,7 @@ import { apiCall } from '@open-mercato/ui/backend/utils/apiCall'
6
6
  import { deleteCrud, updateCrud } from '@open-mercato/ui/backend/utils/crud'
7
7
  import { collectCustomFieldValues } from '@open-mercato/ui/backend/utils/customFieldValues'
8
8
  import { AclEditor, type AclData } from '@open-mercato/core/modules/auth/components/AclEditor'
9
- import { WidgetVisibilityEditor, type WidgetVisibilityEditorHandle } from '@open-mercato/core/modules/dashboards/components/WidgetVisibilityEditor'
9
+ import { WidgetVisibilityEditor } from '@open-mercato/core/modules/dashboards/components/WidgetVisibilityEditor'
10
10
  import { E } from '#generated/entities.ids.generated'
11
11
  import { TenantSelect } from '@open-mercato/core/modules/directory/components/TenantSelect'
12
12
  import { useT } from '@open-mercato/shared/lib/i18n/context'
@@ -37,7 +37,6 @@ export default function EditRolePage({ params }: { params?: { id?: string } }) {
37
37
  const [aclData, setAclData] = React.useState<AclData>({ isSuperAdmin: false, features: [], organizations: null })
38
38
  const [actorIsSuperAdmin, setActorIsSuperAdmin] = React.useState(false)
39
39
  const [selectedTenantId, setSelectedTenantId] = React.useState<string | null>(null)
40
- const widgetEditorRef = React.useRef<WidgetVisibilityEditorHandle | null>(null)
41
40
 
42
41
  React.useEffect(() => {
43
42
  if (!id) return
@@ -154,7 +153,6 @@ export default function EditRolePage({ params }: { params?: { id?: string } }) {
154
153
  kind="role"
155
154
  targetId={String(id)}
156
155
  tenantId={selectedTenantId ?? (initial?.tenantId ?? null)}
157
- ref={widgetEditorRef}
158
156
  />
159
157
  )
160
158
  : null),
@@ -193,7 +191,6 @@ export default function EditRolePage({ params }: { params?: { id?: string } }) {
193
191
  await updateCrud('auth/roles/acl', { roleId: id, tenantId: effectiveTenantId, ...aclData }, {
194
192
  errorMessage: t('auth.roles.form.errors.aclUpdate', 'Failed to update role access control'),
195
193
  })
196
- await widgetEditorRef.current?.save()
197
194
  try { window.dispatchEvent(new Event('om:refresh-sidebar')) } catch {}
198
195
  }}
199
196
  onDelete={async () => {
@@ -117,9 +117,9 @@ export default function RolesListPage() {
117
117
  onSearchChange={(v) => { setSearch(v); setPage(1) }}
118
118
  rowActions={(row) => (
119
119
  <RowActions items={[
120
- { id: 'edit', label: t('common.edit', 'Edit'), href: `/backend/roles/${row.id}/edit` },
121
- { id: 'show-users', label: t('auth.roles.list.actions.showUsers', 'Show users'), href: `/backend/users?roleId=${encodeURIComponent(row.id)}` },
122
- { id: 'delete', label: t('common.delete', 'Delete'), destructive: true, onSelect: () => { void handleDelete(row) } },
120
+ { label: t('common.edit', 'Edit'), href: `/backend/roles/${row.id}/edit` },
121
+ { label: t('auth.roles.list.actions.showUsers', 'Show users'), href: `/backend/users?roleId=${encodeURIComponent(row.id)}` },
122
+ { label: t('common.delete', 'Delete'), destructive: true, onSelect: () => { void handleDelete(row) } },
123
123
  ]} />
124
124
  )}
125
125
  sortable
@@ -10,9 +10,8 @@ import { AclEditor, type AclData } from '@open-mercato/core/modules/auth/compone
10
10
  import { OrganizationSelect } from '@open-mercato/core/modules/directory/components/OrganizationSelect'
11
11
  import { TenantSelect } from '@open-mercato/core/modules/directory/components/TenantSelect'
12
12
  import { fetchRoleOptions } from '@open-mercato/core/modules/auth/backend/users/roleOptions'
13
- import { WidgetVisibilityEditor, type WidgetVisibilityEditorHandle } from '@open-mercato/core/modules/dashboards/components/WidgetVisibilityEditor'
13
+ import { WidgetVisibilityEditor } from '@open-mercato/core/modules/dashboards/components/WidgetVisibilityEditor'
14
14
  import { useT } from '@open-mercato/shared/lib/i18n/context'
15
- import { formatPasswordRequirements, getPasswordPolicy } from '@open-mercato/shared/lib/auth/passwordPolicy'
16
15
 
17
16
  type EditUserFormValues = {
18
17
  email: string
@@ -109,17 +108,6 @@ export default function EditUserPage({ params }: { params?: { id?: string } }) {
109
108
  const [aclData, setAclData] = React.useState<AclData>({ isSuperAdmin: false, features: [], organizations: null })
110
109
  const [customFieldValues, setCustomFieldValues] = React.useState<Record<string, unknown>>({})
111
110
  const [actorIsSuperAdmin, setActorIsSuperAdmin] = React.useState(false)
112
- const widgetEditorRef = React.useRef<WidgetVisibilityEditorHandle | null>(null)
113
- const passwordPolicy = React.useMemo(() => getPasswordPolicy(), [])
114
- const passwordRequirements = React.useMemo(
115
- () => formatPasswordRequirements(passwordPolicy, t),
116
- [passwordPolicy, t],
117
- )
118
- const passwordDescription = React.useMemo(() => (
119
- passwordRequirements
120
- ? t('auth.password.requirements.help', 'Password requirements: {requirements}', { requirements: passwordRequirements })
121
- : undefined
122
- ), [passwordRequirements, t])
123
111
 
124
112
  React.useEffect(() => {
125
113
  if (!id) {
@@ -213,12 +201,7 @@ export default function EditUserPage({ params }: { params?: { id?: string } }) {
213
201
  const fields: CrudField[] = React.useMemo(() => {
214
202
  const items: CrudField[] = [
215
203
  { id: 'email', label: t('auth.users.form.field.email', 'Email'), type: 'text', required: true },
216
- {
217
- id: 'password',
218
- label: t('auth.users.form.field.password', 'Password'),
219
- type: 'text',
220
- description: passwordDescription,
221
- },
204
+ { id: 'password', label: t('auth.users.form.field.password', 'Password'), type: 'text' },
222
205
  ]
223
206
  if (actorIsSuperAdmin) {
224
207
  items.push({
@@ -268,7 +251,7 @@ export default function EditUserPage({ params }: { params?: { id?: string } }) {
268
251
  })
269
252
  items.push({ id: 'roles', label: t('auth.users.form.field.roles', 'Roles'), type: 'tags', loadOptions: loadRoleOptions })
270
253
  return items
271
- }, [actorIsSuperAdmin, loadRoleOptions, passwordDescription, preloadedTenants, selectedOrgId, selectedTenantId, t])
254
+ }, [actorIsSuperAdmin, loadRoleOptions, preloadedTenants, selectedOrgId, selectedTenantId, t])
272
255
 
273
256
  const detailFieldIds = React.useMemo(() => {
274
257
  const base: string[] = ['email', 'password', 'organizationId', 'roles']
@@ -309,7 +292,6 @@ export default function EditUserPage({ params }: { params?: { id?: string } }) {
309
292
  targetId={String(id)}
310
293
  tenantId={selectedTenantId ?? null}
311
294
  organizationId={initialUser?.organizationId ?? null}
312
- ref={widgetEditorRef}
313
295
  />
314
296
  ) : null
315
297
  ),
@@ -372,7 +354,6 @@ export default function EditUserPage({ params }: { params?: { id?: string } }) {
372
354
  await updateCrud('auth/users/acl', { userId: id, ...aclData }, {
373
355
  errorMessage: t('auth.users.form.errors.aclUpdate', 'Failed to update user access control'),
374
356
  })
375
- await widgetEditorRef.current?.save()
376
357
  try { window.dispatchEvent(new Event('om:refresh-sidebar')) } catch {}
377
358
  }}
378
359
  onDelete={async () => {
@@ -11,7 +11,6 @@ import { TenantSelect } from '@open-mercato/core/modules/directory/components/Te
11
11
  import { fetchRoleOptions } from '@open-mercato/core/modules/auth/backend/users/roleOptions'
12
12
  import { Spinner } from '@open-mercato/ui/primitives/spinner'
13
13
  import { useT } from '@open-mercato/shared/lib/i18n/context'
14
- import { formatPasswordRequirements, getPasswordPolicy } from '@open-mercato/shared/lib/auth/passwordPolicy'
15
14
 
16
15
  type CreateUserFormValues = {
17
16
  email: string
@@ -85,16 +84,6 @@ export default function CreateUserPage() {
85
84
  const [selectedWidgets, setSelectedWidgets] = React.useState<string[]>([])
86
85
  const [selectedTenantId, setSelectedTenantId] = React.useState<string | null>(null)
87
86
  const [actorIsSuperAdmin, setActorIsSuperAdmin] = React.useState(false)
88
- const passwordPolicy = React.useMemo(() => getPasswordPolicy(), [])
89
- const passwordRequirements = React.useMemo(
90
- () => formatPasswordRequirements(passwordPolicy, t),
91
- [passwordPolicy, t],
92
- )
93
- const passwordDescription = React.useMemo(() => (
94
- passwordRequirements
95
- ? t('auth.password.requirements.help', 'Password requirements: {requirements}', { requirements: passwordRequirements })
96
- : undefined
97
- ), [passwordRequirements, t])
98
87
 
99
88
  React.useEffect(() => {
100
89
  let cancelled = false
@@ -167,13 +156,7 @@ export default function CreateUserPage() {
167
156
  const fields: CrudField[] = React.useMemo(() => {
168
157
  const items: CrudField[] = [
169
158
  { id: 'email', label: t('auth.users.form.field.email', 'Email'), type: 'text', required: true },
170
- {
171
- id: 'password',
172
- label: t('auth.users.form.field.password', 'Password'),
173
- type: 'text',
174
- required: true,
175
- description: passwordDescription,
176
- },
159
+ { id: 'password', label: t('auth.users.form.field.password', 'Password'), type: 'text', required: true },
177
160
  ]
178
161
  if (actorIsSuperAdmin) {
179
162
  items.push({
@@ -220,7 +203,7 @@ export default function CreateUserPage() {
220
203
  })
221
204
  items.push({ id: 'roles', label: t('auth.users.form.field.roles', 'Roles'), type: 'tags', loadOptions: loadRoleOptions })
222
205
  return items
223
- }, [actorIsSuperAdmin, loadRoleOptions, passwordDescription, selectedTenantId, t])
206
+ }, [actorIsSuperAdmin, loadRoleOptions, selectedTenantId, t])
224
207
 
225
208
  const detailFieldIds = React.useMemo(() => {
226
209
  const base: string[] = ['email', 'password', 'organizationId', 'roles']
@@ -383,9 +383,9 @@ export default function UsersListPage() {
383
383
  perspective={{ tableId: 'auth.users.list' }}
384
384
  rowActions={(row) => (
385
385
  <RowActions items={[
386
- { id: 'edit', label: t('common.edit', 'Edit'), href: `/backend/users/${row.id}/edit` },
387
- { id: 'show-roles', label: t('auth.users.list.actions.showRoles', 'Show roles'), href: `/backend/roles?userId=${encodeURIComponent(row.id)}` },
388
- { id: 'delete', label: t('common.delete', 'Delete'), destructive: true, onSelect: () => { void handleDelete(row) } },
386
+ { label: t('common.edit', 'Edit'), href: `/backend/users/${row.id}/edit` },
387
+ { label: t('auth.users.list.actions.showRoles', 'Show roles'), href: `/backend/roles?userId=${encodeURIComponent(row.id)}` },
388
+ { label: t('common.delete', 'Delete'), destructive: true, onSelect: () => { void handleDelete(row) } },
389
389
  ]} />
390
390
  )}
391
391
  pagination={{ page, pageSize: 50, total, totalPages, onPageChange: setPage }}
@@ -16,8 +16,6 @@ import { decryptWithAesGcm } from '@open-mercato/shared/lib/encryption/aes'
16
16
  import { env } from 'process'
17
17
  import type { KmsService, TenantDek } from '@open-mercato/shared/lib/encryption/kms'
18
18
  import crypto from 'node:crypto'
19
- import { formatPasswordRequirements, getPasswordPolicy, validatePassword } from '@open-mercato/shared/lib/auth/passwordPolicy'
20
- import { parseBooleanToken } from '@open-mercato/shared/lib/boolean'
21
19
 
22
20
  const addUser: ModuleCli = {
23
21
  command: 'add-user',
@@ -36,7 +34,6 @@ const addUser: ModuleCli = {
36
34
  console.error('Usage: mercato auth add-user --email <email> --password <password> --organizationId <id> [--roles customer,employee]')
37
35
  return
38
36
  }
39
- if (!ensurePasswordPolicy(password)) return
40
37
  const { resolve } = await createRequestContainer()
41
38
  const em = resolve('em') as any
42
39
  const org =
@@ -105,16 +102,6 @@ function hashSecret(value: string | null | undefined): string | null {
105
102
  return crypto.createHash('sha256').update(normalizeKeyInput(value)).digest('hex').slice(0, 12)
106
103
  }
107
104
 
108
- function ensurePasswordPolicy(password: string): boolean {
109
- const policy = getPasswordPolicy()
110
- const result = validatePassword(password, policy)
111
- if (result.ok) return true
112
- const requirements = formatPasswordRequirements(policy, (_key, fallback) => fallback)
113
- const suffix = requirements ? `: ${requirements}` : ''
114
- console.error(`Password does not meet the requirements${suffix}.`)
115
- return false
116
- }
117
-
118
105
  async function withEncryptionDebugDisabled<T>(fn: () => Promise<T>): Promise<T> {
119
106
  const previous = process.env.TENANT_DATA_ENCRYPTION_DEBUG
120
107
  process.env.TENANT_DATA_ENCRYPTION_DEBUG = 'no'
@@ -405,33 +392,20 @@ const addOrganization: ModuleCli = {
405
392
  const setupApp: ModuleCli = {
406
393
  command: 'setup',
407
394
  async run(rest) {
408
- const args = parseArgs(rest)
409
- const orgName = typeof args.orgName === 'string'
410
- ? args.orgName
411
- : typeof args.name === 'string'
412
- ? args.name
413
- : undefined
414
- const email = typeof args.email === 'string' ? args.email : undefined
415
- const password = typeof args.password === 'string' ? args.password : undefined
416
- const rolesCsv = typeof args.roles === 'string'
417
- ? args.roles.trim()
418
- : 'superadmin,admin,employee'
419
- const skipPasswordPolicyRaw =
420
- args['skip-password-policy'] ??
421
- args.skipPasswordPolicy ??
422
- args['allow-weak-password'] ??
423
- args.allowWeakPassword
424
- const skipPasswordPolicy = typeof skipPasswordPolicyRaw === 'boolean'
425
- ? skipPasswordPolicyRaw
426
- : parseBooleanToken(typeof skipPasswordPolicyRaw === 'string' ? skipPasswordPolicyRaw : null) ?? false
395
+ const args: Record<string, string> = {}
396
+ for (let i = 0; i < rest.length; i += 2) {
397
+ const k = rest[i]?.replace(/^--/, '')
398
+ const v = rest[i + 1]
399
+ if (k) args[k] = v
400
+ }
401
+ const orgName = args.orgName || args.name
402
+ const email = args.email
403
+ const password = args.password
404
+ const rolesCsv = (args.roles ?? 'superadmin,admin,employee').trim()
427
405
  if (!orgName || !email || !password) {
428
- console.error('Usage: mercato auth setup --orgName <name> --email <email> --password <password> [--roles superadmin,admin,employee] [--skip-password-policy]')
406
+ console.error('Usage: mercato auth setup --orgName <name> --email <email> --password <password> [--roles superadmin,admin,employee]')
429
407
  return
430
408
  }
431
- if (!skipPasswordPolicy && !ensurePasswordPolicy(password)) return
432
- if (skipPasswordPolicy) {
433
- console.warn('⚠️ Password policy validation skipped for setup.')
434
- }
435
409
  const { resolve } = await createRequestContainer()
436
410
  const em = resolve<EntityManager>('em')
437
411
  const roleNames = rolesCsv
@@ -621,7 +595,6 @@ const setPassword: ModuleCli = {
621
595
  console.error('Usage: mercato auth set-password --email <email> --password <newPassword>')
622
596
  return
623
597
  }
624
- if (!ensurePasswordPolicy(password)) return
625
598
 
626
599
  const { resolve } = await createRequestContainer()
627
600
  const em = resolve('em') as any