@endora-commerce/mod-catalog 0.100.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 (443) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +63 -0
  3. package/dist/admin/components/PackagingUnitsEditor.d.ts +12 -0
  4. package/dist/admin/components/PackagingUnitsEditor.d.ts.map +1 -0
  5. package/dist/admin/components/PackagingUnitsEditor.js +99 -0
  6. package/dist/admin/components/PackagingUnitsEditor.js.map +1 -0
  7. package/dist/admin/components/ProductAttributesTab.d.ts +13 -0
  8. package/dist/admin/components/ProductAttributesTab.d.ts.map +1 -0
  9. package/dist/admin/components/ProductAttributesTab.js +140 -0
  10. package/dist/admin/components/ProductAttributesTab.js.map +1 -0
  11. package/dist/admin/components/ProductInventoryTab.d.ts +14 -0
  12. package/dist/admin/components/ProductInventoryTab.d.ts.map +1 -0
  13. package/dist/admin/components/ProductInventoryTab.js +284 -0
  14. package/dist/admin/components/ProductInventoryTab.js.map +1 -0
  15. package/dist/admin/components/ProductScopeEditor.d.ts +94 -0
  16. package/dist/admin/components/ProductScopeEditor.d.ts.map +1 -0
  17. package/dist/admin/components/ProductScopeEditor.js +395 -0
  18. package/dist/admin/components/ProductScopeEditor.js.map +1 -0
  19. package/dist/admin/components/ProductsBulkEditDialog.d.ts +11 -0
  20. package/dist/admin/components/ProductsBulkEditDialog.d.ts.map +1 -0
  21. package/dist/admin/components/ProductsBulkEditDialog.js +304 -0
  22. package/dist/admin/components/ProductsBulkEditDialog.js.map +1 -0
  23. package/dist/admin/index.d.ts +45 -0
  24. package/dist/admin/index.d.ts.map +1 -0
  25. package/dist/admin/index.js +184 -0
  26. package/dist/admin/index.js.map +1 -0
  27. package/dist/admin/lib/resolve-product-selection.d.ts +21 -0
  28. package/dist/admin/lib/resolve-product-selection.d.ts.map +1 -0
  29. package/dist/admin/lib/resolve-product-selection.js +25 -0
  30. package/dist/admin/lib/resolve-product-selection.js.map +1 -0
  31. package/dist/admin/pages/AttachmentTypesPage.d.ts +18 -0
  32. package/dist/admin/pages/AttachmentTypesPage.d.ts.map +1 -0
  33. package/dist/admin/pages/AttachmentTypesPage.js +92 -0
  34. package/dist/admin/pages/AttachmentTypesPage.js.map +1 -0
  35. package/dist/admin/pages/AttributeSetsPage.d.ts +21 -0
  36. package/dist/admin/pages/AttributeSetsPage.d.ts.map +1 -0
  37. package/dist/admin/pages/AttributeSetsPage.js +158 -0
  38. package/dist/admin/pages/AttributeSetsPage.js.map +1 -0
  39. package/dist/admin/pages/AttributesManager.d.ts +9 -0
  40. package/dist/admin/pages/AttributesManager.d.ts.map +1 -0
  41. package/dist/admin/pages/AttributesManager.js +305 -0
  42. package/dist/admin/pages/AttributesManager.js.map +1 -0
  43. package/dist/admin/pages/BulkOperationDetailPage.d.ts +9 -0
  44. package/dist/admin/pages/BulkOperationDetailPage.d.ts.map +1 -0
  45. package/dist/admin/pages/BulkOperationDetailPage.js +187 -0
  46. package/dist/admin/pages/BulkOperationDetailPage.js.map +1 -0
  47. package/dist/admin/pages/BulkOperationsPage.d.ts +9 -0
  48. package/dist/admin/pages/BulkOperationsPage.d.ts.map +1 -0
  49. package/dist/admin/pages/BulkOperationsPage.js +98 -0
  50. package/dist/admin/pages/BulkOperationsPage.js.map +1 -0
  51. package/dist/admin/pages/CategoriesTree.d.ts +9 -0
  52. package/dist/admin/pages/CategoriesTree.d.ts.map +1 -0
  53. package/dist/admin/pages/CategoriesTree.js +176 -0
  54. package/dist/admin/pages/CategoriesTree.js.map +1 -0
  55. package/dist/admin/pages/ProductEditor.d.ts +13 -0
  56. package/dist/admin/pages/ProductEditor.d.ts.map +1 -0
  57. package/dist/admin/pages/ProductEditor.js +1050 -0
  58. package/dist/admin/pages/ProductEditor.js.map +1 -0
  59. package/dist/admin/pages/ProductsList.d.ts +9 -0
  60. package/dist/admin/pages/ProductsList.d.ts.map +1 -0
  61. package/dist/admin/pages/ProductsList.js +399 -0
  62. package/dist/admin/pages/ProductsList.js.map +1 -0
  63. package/dist/backend/commands/attribute-commands.d.ts +111 -0
  64. package/dist/backend/commands/attribute-commands.d.ts.map +1 -0
  65. package/dist/backend/commands/attribute-commands.js +482 -0
  66. package/dist/backend/commands/attribute-commands.js.map +1 -0
  67. package/dist/backend/demo/reset.d.ts +23 -0
  68. package/dist/backend/demo/reset.d.ts.map +1 -0
  69. package/dist/backend/demo/reset.js +41 -0
  70. package/dist/backend/demo/reset.js.map +1 -0
  71. package/dist/backend/demo/rows.d.ts +103 -0
  72. package/dist/backend/demo/rows.d.ts.map +1 -0
  73. package/dist/backend/demo/rows.js +162 -0
  74. package/dist/backend/demo/rows.js.map +1 -0
  75. package/dist/backend/demo/seed.d.ts +35 -0
  76. package/dist/backend/demo/seed.d.ts.map +1 -0
  77. package/dist/backend/demo/seed.js +177 -0
  78. package/dist/backend/demo/seed.js.map +1 -0
  79. package/dist/backend/entities/attachment-type.entity.d.ts +16 -0
  80. package/dist/backend/entities/attachment-type.entity.d.ts.map +1 -0
  81. package/dist/backend/entities/attachment-type.entity.js +57 -0
  82. package/dist/backend/entities/attachment-type.entity.js.map +1 -0
  83. package/dist/backend/entities/attribute-set-attribute.entity.d.ts +26 -0
  84. package/dist/backend/entities/attribute-set-attribute.entity.d.ts.map +1 -0
  85. package/dist/backend/entities/attribute-set-attribute.entity.js +55 -0
  86. package/dist/backend/entities/attribute-set-attribute.entity.js.map +1 -0
  87. package/dist/backend/entities/attribute-set.entity.d.ts +22 -0
  88. package/dist/backend/entities/attribute-set.entity.d.ts.map +1 -0
  89. package/dist/backend/entities/attribute-set.entity.js +67 -0
  90. package/dist/backend/entities/attribute-set.entity.js.map +1 -0
  91. package/dist/backend/entities/bulk-operation.entity.d.ts +78 -0
  92. package/dist/backend/entities/bulk-operation.entity.d.ts.map +1 -0
  93. package/dist/backend/entities/bulk-operation.entity.js +138 -0
  94. package/dist/backend/entities/bulk-operation.entity.js.map +1 -0
  95. package/dist/backend/entities/bundle-slot-option.entity.d.ts +23 -0
  96. package/dist/backend/entities/bundle-slot-option.entity.d.ts.map +1 -0
  97. package/dist/backend/entities/bundle-slot-option.entity.js +68 -0
  98. package/dist/backend/entities/bundle-slot-option.entity.js.map +1 -0
  99. package/dist/backend/entities/bundle-slot.entity.d.ts +25 -0
  100. package/dist/backend/entities/bundle-slot.entity.d.ts.map +1 -0
  101. package/dist/backend/entities/bundle-slot.entity.js +74 -0
  102. package/dist/backend/entities/bundle-slot.entity.js.map +1 -0
  103. package/dist/backend/entities/category.entity.d.ts +26 -0
  104. package/dist/backend/entities/category.entity.d.ts.map +1 -0
  105. package/dist/backend/entities/category.entity.js +119 -0
  106. package/dist/backend/entities/category.entity.js.map +1 -0
  107. package/dist/backend/entities/gallery-item-label.entity.d.ts +22 -0
  108. package/dist/backend/entities/gallery-item-label.entity.d.ts.map +1 -0
  109. package/dist/backend/entities/gallery-item-label.entity.js +50 -0
  110. package/dist/backend/entities/gallery-item-label.entity.js.map +1 -0
  111. package/dist/backend/entities/gallery-item.entity.d.ts +17 -0
  112. package/dist/backend/entities/gallery-item.entity.d.ts.map +1 -0
  113. package/dist/backend/entities/gallery-item.entity.js +58 -0
  114. package/dist/backend/entities/gallery-item.entity.js.map +1 -0
  115. package/dist/backend/entities/grouped-item.entity.d.ts +23 -0
  116. package/dist/backend/entities/grouped-item.entity.d.ts.map +1 -0
  117. package/dist/backend/entities/grouped-item.entity.js +68 -0
  118. package/dist/backend/entities/grouped-item.entity.js.map +1 -0
  119. package/dist/backend/entities/product-attachment.entity.d.ts +23 -0
  120. package/dist/backend/entities/product-attachment.entity.d.ts.map +1 -0
  121. package/dist/backend/entities/product-attachment.entity.js +77 -0
  122. package/dist/backend/entities/product-attachment.entity.js.map +1 -0
  123. package/dist/backend/entities/product-attribute.entity.d.ts +72 -0
  124. package/dist/backend/entities/product-attribute.entity.d.ts.map +1 -0
  125. package/dist/backend/entities/product-attribute.entity.js +161 -0
  126. package/dist/backend/entities/product-attribute.entity.js.map +1 -0
  127. package/dist/backend/entities/product-editor-preference.entity.d.ts +28 -0
  128. package/dist/backend/entities/product-editor-preference.entity.d.ts.map +1 -0
  129. package/dist/backend/entities/product-editor-preference.entity.js +63 -0
  130. package/dist/backend/entities/product-editor-preference.entity.js.map +1 -0
  131. package/dist/backend/entities/product-link.entity.d.ts +25 -0
  132. package/dist/backend/entities/product-link.entity.d.ts.map +1 -0
  133. package/dist/backend/entities/product-link.entity.js +70 -0
  134. package/dist/backend/entities/product-link.entity.js.map +1 -0
  135. package/dist/backend/entities/product-packaging-unit.entity.d.ts +26 -0
  136. package/dist/backend/entities/product-packaging-unit.entity.d.ts.map +1 -0
  137. package/dist/backend/entities/product-packaging-unit.entity.js +76 -0
  138. package/dist/backend/entities/product-packaging-unit.entity.js.map +1 -0
  139. package/dist/backend/entities/product-value-override.entity.d.ts +43 -0
  140. package/dist/backend/entities/product-value-override.entity.d.ts.map +1 -0
  141. package/dist/backend/entities/product-value-override.entity.js +90 -0
  142. package/dist/backend/entities/product-value-override.entity.js.map +1 -0
  143. package/dist/backend/entities/product-variant.entity.d.ts +18 -0
  144. package/dist/backend/entities/product-variant.entity.d.ts.map +1 -0
  145. package/dist/backend/entities/product-variant.entity.js +68 -0
  146. package/dist/backend/entities/product-variant.entity.js.map +1 -0
  147. package/dist/backend/entities/product.entity.d.ts +108 -0
  148. package/dist/backend/entities/product.entity.d.ts.map +1 -0
  149. package/dist/backend/entities/product.entity.js +230 -0
  150. package/dist/backend/entities/product.entity.js.map +1 -0
  151. package/dist/backend/index.d.ts +262 -0
  152. package/dist/backend/index.d.ts.map +1 -0
  153. package/dist/backend/index.js +642 -0
  154. package/dist/backend/index.js.map +1 -0
  155. package/dist/backend/plugin.d.ts +216 -0
  156. package/dist/backend/plugin.d.ts.map +1 -0
  157. package/dist/backend/plugin.js +223 -0
  158. package/dist/backend/plugin.js.map +1 -0
  159. package/dist/backend/prompt-tools.d.ts +47 -0
  160. package/dist/backend/prompt-tools.d.ts.map +1 -0
  161. package/dist/backend/prompt-tools.js +284 -0
  162. package/dist/backend/prompt-tools.js.map +1 -0
  163. package/dist/backend/routes.admin.d.ts +105 -0
  164. package/dist/backend/routes.admin.d.ts.map +1 -0
  165. package/dist/backend/routes.admin.js +1162 -0
  166. package/dist/backend/routes.admin.js.map +1 -0
  167. package/dist/backend/routes.api-key.d.ts +33 -0
  168. package/dist/backend/routes.api-key.d.ts.map +1 -0
  169. package/dist/backend/routes.api-key.js +43 -0
  170. package/dist/backend/routes.api-key.js.map +1 -0
  171. package/dist/backend/routes.external.d.ts +32 -0
  172. package/dist/backend/routes.external.d.ts.map +1 -0
  173. package/dist/backend/routes.external.js +115 -0
  174. package/dist/backend/routes.external.js.map +1 -0
  175. package/dist/backend/routes.public.d.ts +46 -0
  176. package/dist/backend/routes.public.d.ts.map +1 -0
  177. package/dist/backend/routes.public.js +318 -0
  178. package/dist/backend/routes.public.js.map +1 -0
  179. package/dist/backend/services/asset-references.d.ts +4 -0
  180. package/dist/backend/services/asset-references.d.ts.map +1 -0
  181. package/dist/backend/services/asset-references.js +104 -0
  182. package/dist/backend/services/asset-references.js.map +1 -0
  183. package/dist/backend/services/attachment.service.d.ts +45 -0
  184. package/dist/backend/services/attachment.service.d.ts.map +1 -0
  185. package/dist/backend/services/attachment.service.js +268 -0
  186. package/dist/backend/services/attachment.service.js.map +1 -0
  187. package/dist/backend/services/attribute-option-validator.d.ts +47 -0
  188. package/dist/backend/services/attribute-option-validator.d.ts.map +1 -0
  189. package/dist/backend/services/attribute-option-validator.js +69 -0
  190. package/dist/backend/services/attribute-option-validator.js.map +1 -0
  191. package/dist/backend/services/attribute-set-validations.d.ts +65 -0
  192. package/dist/backend/services/attribute-set-validations.d.ts.map +1 -0
  193. package/dist/backend/services/attribute-set-validations.js +89 -0
  194. package/dist/backend/services/attribute-set-validations.js.map +1 -0
  195. package/dist/backend/services/attribute-set.service.d.ts +50 -0
  196. package/dist/backend/services/attribute-set.service.d.ts.map +1 -0
  197. package/dist/backend/services/attribute-set.service.js +401 -0
  198. package/dist/backend/services/attribute-set.service.js.map +1 -0
  199. package/dist/backend/services/attribute-type-mapping.d.ts +66 -0
  200. package/dist/backend/services/attribute-type-mapping.d.ts.map +1 -0
  201. package/dist/backend/services/attribute-type-mapping.js +121 -0
  202. package/dist/backend/services/attribute-type-mapping.js.map +1 -0
  203. package/dist/backend/services/attribute-value-key.service.d.ts +48 -0
  204. package/dist/backend/services/attribute-value-key.service.d.ts.map +1 -0
  205. package/dist/backend/services/attribute-value-key.service.js +118 -0
  206. package/dist/backend/services/attribute-value-key.service.js.map +1 -0
  207. package/dist/backend/services/audit-references.d.ts +13 -0
  208. package/dist/backend/services/audit-references.d.ts.map +1 -0
  209. package/dist/backend/services/audit-references.js +51 -0
  210. package/dist/backend/services/audit-references.js.map +1 -0
  211. package/dist/backend/services/bulk-operation-queue.d.ts +26 -0
  212. package/dist/backend/services/bulk-operation-queue.d.ts.map +1 -0
  213. package/dist/backend/services/bulk-operation-queue.js +34 -0
  214. package/dist/backend/services/bulk-operation-queue.js.map +1 -0
  215. package/dist/backend/services/bulk-operation.service.d.ts +195 -0
  216. package/dist/backend/services/bulk-operation.service.d.ts.map +1 -0
  217. package/dist/backend/services/bulk-operation.service.js +510 -0
  218. package/dist/backend/services/bulk-operation.service.js.map +1 -0
  219. package/dist/backend/services/bundle.service.d.ts +87 -0
  220. package/dist/backend/services/bundle.service.d.ts.map +1 -0
  221. package/dist/backend/services/bundle.service.js +286 -0
  222. package/dist/backend/services/bundle.service.js.map +1 -0
  223. package/dist/backend/services/catalog-admin.service.d.ts +398 -0
  224. package/dist/backend/services/catalog-admin.service.d.ts.map +1 -0
  225. package/dist/backend/services/catalog-admin.service.js +1516 -0
  226. package/dist/backend/services/catalog-admin.service.js.map +1 -0
  227. package/dist/backend/services/catalog-attribute-read.service.d.ts +78 -0
  228. package/dist/backend/services/catalog-attribute-read.service.d.ts.map +1 -0
  229. package/dist/backend/services/catalog-attribute-read.service.js +216 -0
  230. package/dist/backend/services/catalog-attribute-read.service.js.map +1 -0
  231. package/dist/backend/services/catalog-bulk-import.service.d.ts +30 -0
  232. package/dist/backend/services/catalog-bulk-import.service.d.ts.map +1 -0
  233. package/dist/backend/services/catalog-bulk-import.service.js +136 -0
  234. package/dist/backend/services/catalog-bulk-import.service.js.map +1 -0
  235. package/dist/backend/services/catalog-bulk-update.service.d.ts +91 -0
  236. package/dist/backend/services/catalog-bulk-update.service.d.ts.map +1 -0
  237. package/dist/backend/services/catalog-bulk-update.service.js +330 -0
  238. package/dist/backend/services/catalog-bulk-update.service.js.map +1 -0
  239. package/dist/backend/services/catalog-category-read.service.d.ts +66 -0
  240. package/dist/backend/services/catalog-category-read.service.d.ts.map +1 -0
  241. package/dist/backend/services/catalog-category-read.service.js +248 -0
  242. package/dist/backend/services/catalog-category-read.service.js.map +1 -0
  243. package/dist/backend/services/catalog-org-price-decorator.d.ts +90 -0
  244. package/dist/backend/services/catalog-org-price-decorator.d.ts.map +1 -0
  245. package/dist/backend/services/catalog-org-price-decorator.js +184 -0
  246. package/dist/backend/services/catalog-org-price-decorator.js.map +1 -0
  247. package/dist/backend/services/catalog-product-filter.service.d.ts +82 -0
  248. package/dist/backend/services/catalog-product-filter.service.d.ts.map +1 -0
  249. package/dist/backend/services/catalog-product-filter.service.js +275 -0
  250. package/dist/backend/services/catalog-product-filter.service.js.map +1 -0
  251. package/dist/backend/services/catalog-product-read.service.d.ts +46 -0
  252. package/dist/backend/services/catalog-product-read.service.d.ts.map +1 -0
  253. package/dist/backend/services/catalog-product-read.service.js +197 -0
  254. package/dist/backend/services/catalog-product-read.service.js.map +1 -0
  255. package/dist/backend/services/catalog-query.service.d.ts +444 -0
  256. package/dist/backend/services/catalog-query.service.d.ts.map +1 -0
  257. package/dist/backend/services/catalog-query.service.js +1633 -0
  258. package/dist/backend/services/catalog-query.service.js.map +1 -0
  259. package/dist/backend/services/catalog-quick-search.service.d.ts +78 -0
  260. package/dist/backend/services/catalog-quick-search.service.d.ts.map +1 -0
  261. package/dist/backend/services/catalog-quick-search.service.js +159 -0
  262. package/dist/backend/services/catalog-quick-search.service.js.map +1 -0
  263. package/dist/backend/services/catalog-write-ports.d.ts +25 -0
  264. package/dist/backend/services/catalog-write-ports.d.ts.map +1 -0
  265. package/dist/backend/services/catalog-write-ports.js +63 -0
  266. package/dist/backend/services/catalog-write-ports.js.map +1 -0
  267. package/dist/backend/services/category-admin.service.d.ts +102 -0
  268. package/dist/backend/services/category-admin.service.d.ts.map +1 -0
  269. package/dist/backend/services/category-admin.service.js +271 -0
  270. package/dist/backend/services/category-admin.service.js.map +1 -0
  271. package/dist/backend/services/gallery.service.d.ts +85 -0
  272. package/dist/backend/services/gallery.service.d.ts.map +1 -0
  273. package/dist/backend/services/gallery.service.js +326 -0
  274. package/dist/backend/services/gallery.service.js.map +1 -0
  275. package/dist/backend/services/grouped.service.d.ts +39 -0
  276. package/dist/backend/services/grouped.service.d.ts.map +1 -0
  277. package/dist/backend/services/grouped.service.js +136 -0
  278. package/dist/backend/services/grouped.service.js.map +1 -0
  279. package/dist/backend/services/label-resolver.d.ts +16 -0
  280. package/dist/backend/services/label-resolver.d.ts.map +1 -0
  281. package/dist/backend/services/label-resolver.js +43 -0
  282. package/dist/backend/services/label-resolver.js.map +1 -0
  283. package/dist/backend/services/packaging-unit.service.d.ts +28 -0
  284. package/dist/backend/services/packaging-unit.service.d.ts.map +1 -0
  285. package/dist/backend/services/packaging-unit.service.js +197 -0
  286. package/dist/backend/services/packaging-unit.service.js.map +1 -0
  287. package/dist/backend/services/primary-asset-url.d.ts +4 -0
  288. package/dist/backend/services/primary-asset-url.d.ts.map +1 -0
  289. package/dist/backend/services/primary-asset-url.js +55 -0
  290. package/dist/backend/services/primary-asset-url.js.map +1 -0
  291. package/dist/backend/services/product-editor-preferences.service.d.ts +20 -0
  292. package/dist/backend/services/product-editor-preferences.service.d.ts.map +1 -0
  293. package/dist/backend/services/product-editor-preferences.service.js +44 -0
  294. package/dist/backend/services/product-editor-preferences.service.js.map +1 -0
  295. package/dist/backend/services/product-link.service.d.ts +169 -0
  296. package/dist/backend/services/product-link.service.d.ts.map +1 -0
  297. package/dist/backend/services/product-link.service.js +297 -0
  298. package/dist/backend/services/product-link.service.js.map +1 -0
  299. package/dist/backend/services/product-overrides.service.d.ts +77 -0
  300. package/dist/backend/services/product-overrides.service.d.ts.map +1 -0
  301. package/dist/backend/services/product-overrides.service.js +204 -0
  302. package/dist/backend/services/product-overrides.service.js.map +1 -0
  303. package/dist/backend/services/product-scope-context.service.d.ts +36 -0
  304. package/dist/backend/services/product-scope-context.service.d.ts.map +1 -0
  305. package/dist/backend/services/product-scope-context.service.js +106 -0
  306. package/dist/backend/services/product-scope-context.service.js.map +1 -0
  307. package/dist/backend/services/product-type-validations.d.ts +42 -0
  308. package/dist/backend/services/product-type-validations.d.ts.map +1 -0
  309. package/dist/backend/services/product-type-validations.js +55 -0
  310. package/dist/backend/services/product-type-validations.js.map +1 -0
  311. package/dist/backend/services/product-value-resolver.service.d.ts +59 -0
  312. package/dist/backend/services/product-value-resolver.service.d.ts.map +1 -0
  313. package/dist/backend/services/product-value-resolver.service.js +111 -0
  314. package/dist/backend/services/product-value-resolver.service.js.map +1 -0
  315. package/dist/backend/services/system-attribute-scopes.d.ts +18 -0
  316. package/dist/backend/services/system-attribute-scopes.d.ts.map +1 -0
  317. package/dist/backend/services/system-attribute-scopes.js +18 -0
  318. package/dist/backend/services/system-attribute-scopes.js.map +1 -0
  319. package/dist/backend/services/viewer-organization.d.ts +25 -0
  320. package/dist/backend/services/viewer-organization.d.ts.map +1 -0
  321. package/dist/backend/services/viewer-organization.js +31 -0
  322. package/dist/backend/services/viewer-organization.js.map +1 -0
  323. package/dist/manifest.d.ts +204 -0
  324. package/dist/manifest.d.ts.map +1 -0
  325. package/dist/manifest.js +686 -0
  326. package/dist/manifest.js.map +1 -0
  327. package/dist/migrations/20260429T064146_catalog_attribute_sets_init.d.ts +33 -0
  328. package/dist/migrations/20260429T064146_catalog_attribute_sets_init.d.ts.map +1 -0
  329. package/dist/migrations/20260429T064146_catalog_attribute_sets_init.js +118 -0
  330. package/dist/migrations/20260429T064146_catalog_attribute_sets_init.js.map +1 -0
  331. package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.d.ts +24 -0
  332. package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.d.ts.map +1 -0
  333. package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.js +31 -0
  334. package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.js.map +1 -0
  335. package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.d.ts +32 -0
  336. package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.d.ts.map +1 -0
  337. package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.js +58 -0
  338. package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.js.map +1 -0
  339. package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.d.ts +22 -0
  340. package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.d.ts.map +1 -0
  341. package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.js +66 -0
  342. package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.js.map +1 -0
  343. package/dist/migrations/20260429T112543_catalog_product_attachments.d.ts +18 -0
  344. package/dist/migrations/20260429T112543_catalog_product_attachments.d.ts.map +1 -0
  345. package/dist/migrations/20260429T112543_catalog_product_attachments.js +73 -0
  346. package/dist/migrations/20260429T112543_catalog_product_attachments.js.map +1 -0
  347. package/dist/migrations/20260429T123726_catalog_product_links.d.ts +21 -0
  348. package/dist/migrations/20260429T123726_catalog_product_links.d.ts.map +1 -0
  349. package/dist/migrations/20260429T123726_catalog_product_links.js +48 -0
  350. package/dist/migrations/20260429T123726_catalog_product_links.js.map +1 -0
  351. package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.d.ts +23 -0
  352. package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.d.ts.map +1 -0
  353. package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.js +94 -0
  354. package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.js.map +1 -0
  355. package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.d.ts +24 -0
  356. package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.d.ts.map +1 -0
  357. package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.js +31 -0
  358. package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.js.map +1 -0
  359. package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.d.ts +31 -0
  360. package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.d.ts.map +1 -0
  361. package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.js +133 -0
  362. package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.js.map +1 -0
  363. package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.d.ts +16 -0
  364. package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.d.ts.map +1 -0
  365. package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.js +23 -0
  366. package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.js.map +1 -0
  367. package/dist/migrations/20260526T124736_catalog_product_status_inactive.d.ts +10 -0
  368. package/dist/migrations/20260526T124736_catalog_product_status_inactive.d.ts.map +1 -0
  369. package/dist/migrations/20260526T124736_catalog_product_status_inactive.js +22 -0
  370. package/dist/migrations/20260526T124736_catalog_product_status_inactive.js.map +1 -0
  371. package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.d.ts +38 -0
  372. package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.d.ts.map +1 -0
  373. package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.js +98 -0
  374. package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.js.map +1 -0
  375. package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.d.ts +13 -0
  376. package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.d.ts.map +1 -0
  377. package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.js +17 -0
  378. package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.js.map +1 -0
  379. package/dist/migrations/20260611T140407_catalog_bulk_operations.d.ts +16 -0
  380. package/dist/migrations/20260611T140407_catalog_bulk_operations.d.ts.map +1 -0
  381. package/dist/migrations/20260611T140407_catalog_bulk_operations.js +42 -0
  382. package/dist/migrations/20260611T140407_catalog_bulk_operations.js.map +1 -0
  383. package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.d.ts +14 -0
  384. package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.d.ts.map +1 -0
  385. package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.js +18 -0
  386. package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.js.map +1 -0
  387. package/dist/migrations/20260611T140412_catalog_product_packaging_units.d.ts +11 -0
  388. package/dist/migrations/20260611T140412_catalog_product_packaging_units.d.ts.map +1 -0
  389. package/dist/migrations/20260611T140412_catalog_product_packaging_units.js +29 -0
  390. package/dist/migrations/20260611T140412_catalog_product_packaging_units.js.map +1 -0
  391. package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.d.ts +23 -0
  392. package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.d.ts.map +1 -0
  393. package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.js +35 -0
  394. package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.js.map +1 -0
  395. package/dist/migrations/20260718T200343_catalog_category_custom_field_values.d.ts +12 -0
  396. package/dist/migrations/20260718T200343_catalog_category_custom_field_values.d.ts.map +1 -0
  397. package/dist/migrations/20260718T200343_catalog_category_custom_field_values.js +16 -0
  398. package/dist/migrations/20260718T200343_catalog_category_custom_field_values.js.map +1 -0
  399. package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.d.ts +32 -0
  400. package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.d.ts.map +1 -0
  401. package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.js +286 -0
  402. package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.js.map +1 -0
  403. package/dist/migrations/20260804T152604_catalog_widen_product_sku.d.ts +36 -0
  404. package/dist/migrations/20260804T152604_catalog_widen_product_sku.d.ts.map +1 -0
  405. package/dist/migrations/20260804T152604_catalog_widen_product_sku.js +63 -0
  406. package/dist/migrations/20260804T152604_catalog_widen_product_sku.js.map +1 -0
  407. package/dist/migrations/20260804T160244_catalog_category_activation.d.ts +18 -0
  408. package/dist/migrations/20260804T160244_catalog_category_activation.d.ts.map +1 -0
  409. package/dist/migrations/20260804T160244_catalog_category_activation.js +22 -0
  410. package/dist/migrations/20260804T160244_catalog_category_activation.js.map +1 -0
  411. package/dist/migrations/20260912T094557_catalog_sales_channel_products.d.ts +27 -0
  412. package/dist/migrations/20260912T094557_catalog_sales_channel_products.d.ts.map +1 -0
  413. package/dist/migrations/20260912T094557_catalog_sales_channel_products.js +44 -0
  414. package/dist/migrations/20260912T094557_catalog_sales_channel_products.js.map +1 -0
  415. package/dist/migrations/20260912T094623_catalog_sales_channel_categories.d.ts +27 -0
  416. package/dist/migrations/20260912T094623_catalog_sales_channel_categories.d.ts.map +1 -0
  417. package/dist/migrations/20260912T094623_catalog_sales_channel_categories.js +44 -0
  418. package/dist/migrations/20260912T094623_catalog_sales_channel_categories.js.map +1 -0
  419. package/dist/migrations/20260925T125527_catalog_inventory_columns.d.ts +36 -0
  420. package/dist/migrations/20260925T125527_catalog_inventory_columns.d.ts.map +1 -0
  421. package/dist/migrations/20260925T125527_catalog_inventory_columns.js +87 -0
  422. package/dist/migrations/20260925T125527_catalog_inventory_columns.js.map +1 -0
  423. package/dist/migrations/index.d.ts +55 -0
  424. package/dist/migrations/index.d.ts.map +1 -0
  425. package/dist/migrations/index.js +80 -0
  426. package/dist/migrations/index.js.map +1 -0
  427. package/dist/ports/index.d.ts +96 -0
  428. package/dist/ports/index.d.ts.map +1 -0
  429. package/dist/ports/index.js +2 -0
  430. package/dist/ports/index.js.map +1 -0
  431. package/docs/catalog/attachments.md +69 -0
  432. package/docs/catalog/attribute-sets.md +63 -0
  433. package/docs/catalog/attributes.md +244 -0
  434. package/docs/catalog/composite-products.md +115 -0
  435. package/docs/catalog/gallery-and-labels.md +73 -0
  436. package/docs/catalog/packaging-units.md +67 -0
  437. package/docs/catalog/per-channel-per-language-overrides.md +234 -0
  438. package/docs/catalog/product-links.md +79 -0
  439. package/docs/catalog.md +207 -0
  440. package/i18n/en.json +649 -0
  441. package/i18n/pl.json +649 -0
  442. package/package.json +109 -0
  443. package/tailwind.css +14 -0
@@ -0,0 +1,284 @@
1
+ import { AssignProductsToCategoryParamsSchema, RemoveProductsFromCategoryParamsSchema, SearchCategoriesParamsSchema, SearchProductsParamsSchema, SetProductStatusParamsSchema, SetProductsVisibilityParamsSchema, } from '@endora-commerce/contracts';
2
+ import { HttpError } from '@endora-commerce/platform/http';
3
+ import { Category } from './entities/category.entity.js';
4
+ import { Product } from './entities/product.entity.js';
5
+ import { CatalogAdminService } from './services/catalog-admin.service.js';
6
+ import { CategoryAdminService } from './services/category-admin.service.js';
7
+ import { CatalogBulkUpdateService } from './services/catalog-bulk-update.service.js';
8
+ import { BulkOperationService } from './services/bulk-operation.service.js';
9
+ import { BULK_OPERATION_JOB_NAME, createBulkOperationQueue, } from './services/bulk-operation-queue.js';
10
+ /** Mirrors the feature-022 route threshold (catalog/routes.admin.ts). */
11
+ const BULK_ASYNC_THRESHOLD = 50;
12
+ const RESULT_LIMIT = 20;
13
+ function localizedLabel(name) {
14
+ return name['en'] ?? Object.values(name)[0] ?? '(unnamed)';
15
+ }
16
+ export function catalogPromptResolverTools(deps) {
17
+ // Same cast catalog's own plugin performs when constructing this service.
18
+ const adminService = new CatalogAdminService(deps.emFactory, deps.events, deps.auditLogService);
19
+ const categoryService = new CategoryAdminService(deps.emFactory);
20
+ const searchProducts = {
21
+ id: 'catalog.search_products',
22
+ moduleId: 'catalog',
23
+ kind: 'resolver',
24
+ description: 'Search products by a name, SKU or slug fragment (case- and diacritic-insensitive substring). Returns up to 20 matches as {id, sku, label, status}. Use the returned id in mutation tools; never invent ids.',
25
+ requiredPermission: 'catalog:read',
26
+ paramsSchema: SearchProductsParamsSchema,
27
+ execute: async (params) => {
28
+ const result = await adminService.listProducts({
29
+ q: params.q,
30
+ pageSize: Math.min(params.limit ?? 10, RESULT_LIMIT),
31
+ });
32
+ return result.items.map((p) => ({
33
+ id: p.id,
34
+ sku: p.sku,
35
+ label: localizedLabel(p.name),
36
+ status: p.status,
37
+ }));
38
+ },
39
+ };
40
+ const searchCategories = {
41
+ id: 'catalog.search_categories',
42
+ moduleId: 'catalog',
43
+ kind: 'resolver',
44
+ description: 'Search product categories by a name fragment (case-insensitive). Returns up to 20 matches as {id, label, slug}.',
45
+ requiredPermission: 'catalog:read',
46
+ paramsSchema: SearchCategoriesParamsSchema,
47
+ execute: async (params) => {
48
+ const all = await categoryService.listAll();
49
+ const needle = params.q.toLowerCase();
50
+ return all
51
+ .filter((c) => {
52
+ const labels = Object.values(c.name).join(' ').toLowerCase();
53
+ return labels.includes(needle) || c.slug.toLowerCase().includes(needle);
54
+ })
55
+ .slice(0, RESULT_LIMIT)
56
+ .map((c) => ({ id: c.id, label: localizedLabel(c.name), slug: c.slug }));
57
+ },
58
+ };
59
+ return [searchProducts, searchCategories];
60
+ }
61
+ // ---------------------------------------------------------------------------
62
+ // US2 — bulk category assignment (mutation) + delegated-progress resolver
63
+ // ---------------------------------------------------------------------------
64
+ function buildBulkServices(deps) {
65
+ const adminService = new CatalogAdminService(deps.emFactory, deps.events, deps.auditLogService, deps.salesChannelMembership);
66
+ const bulkUpdateService = new CatalogBulkUpdateService(deps.emFactory, adminService, deps.salesChannelMembership, deps.auditLogService);
67
+ const queue = deps.redis ? createBulkOperationQueue(deps.redis) : undefined;
68
+ const bulkOperationService = new BulkOperationService(deps.emFactory, bulkUpdateService, {
69
+ ...(queue
70
+ ? {
71
+ onEnqueued: async (operationId) => {
72
+ await queue.add(BULK_OPERATION_JOB_NAME, { operationId });
73
+ },
74
+ }
75
+ : {}),
76
+ });
77
+ return { bulkOperationService, bulkUpdateService };
78
+ }
79
+ /** Shared bulk-fields execution: ≤ threshold runs sync; larger delegates to the queue. */
80
+ async function runBulkFieldsUpdate(services, fields, productIds, ctx) {
81
+ const request = { productIds, fields };
82
+ if (productIds.length > BULK_ASYNC_THRESHOLD) {
83
+ const op = await services.bulkOperationService.create({
84
+ requestedByAdminUserId: ctx.adminUserId,
85
+ payload: request,
86
+ });
87
+ return { delegated: true, bulkOperationId: op.id };
88
+ }
89
+ const result = await services.bulkUpdateService.bulkUpdate(request, {
90
+ actorAdminUserId: ctx.adminUserId,
91
+ impersonatedCustomerAccountId: null,
92
+ ipAddress: ctx.auditCtx.ipAddress ?? null,
93
+ userAgent: ctx.auditCtx.userAgent ?? null,
94
+ requestId: ctx.auditCtx.requestId ?? null,
95
+ });
96
+ return {
97
+ summary: {
98
+ total: result.summary.total,
99
+ succeeded: result.summary.succeeded,
100
+ failed: result.summary.failed + result.summary.skipped,
101
+ failures: result.results
102
+ .filter((r) => r.status !== 'succeeded')
103
+ .slice(0, 50)
104
+ .map((r) => ({ id: r.productId, reason: r.details?.message ?? r.reason ?? 'failed' })),
105
+ },
106
+ };
107
+ }
108
+ /** Shared preview: validate all ids exist and build the affected-count + sample. */
109
+ async function previewProducts(em, productIds, headline) {
110
+ const products = await em.find(Product, { id: { $in: productIds } }, { fields: ['id', 'name', 'sku'] });
111
+ if (products.length !== productIds.length) {
112
+ throw new HttpError(404, 'PRODUCT_NOT_FOUND', 'One or more products were not found.');
113
+ }
114
+ return {
115
+ headline,
116
+ affectedCount: products.length,
117
+ sample: products.slice(0, 10).map((p) => ({ id: p.id, label: localizedLabel(p.name) })),
118
+ };
119
+ }
120
+ export function catalogPromptMutationTools(deps) {
121
+ const services = buildBulkServices(deps);
122
+ const { bulkOperationService, bulkUpdateService } = services;
123
+ const assignToCategory = {
124
+ id: 'catalog.assign_products_to_category',
125
+ moduleId: 'catalog',
126
+ kind: 'mutation',
127
+ description: 'Assign one or more products to a category (additive — existing category assignments are kept). Resolve products via catalog.search_products and the category via catalog.search_categories first. Captured into a plan the operator must confirm; not executed immediately.',
128
+ requiredPermission: 'catalog:write',
129
+ paramsSchema: AssignProductsToCategoryParamsSchema,
130
+ preview: async (params) => {
131
+ // D-75 — this module's own fork, not the caller's manager. A preview
132
+ // reads committed rows: the request row it would have shared a unit of
133
+ // work with is flushed before the interpreter runs, and nothing here
134
+ // writes.
135
+ const em = deps.emFactory();
136
+ const category = await em.findOne(Category, { id: params.categoryId, deletedAt: null });
137
+ if (!category)
138
+ throw new HttpError(404, 'NOT_FOUND', 'Category not found.');
139
+ // The preview runs the same membership query execution will use: the
140
+ // ids are validated to exist so the affected count is honest (FR-004).
141
+ const products = await em.find(Product, { id: { $in: params.productIds } }, { fields: ['id', 'name', 'sku'] });
142
+ if (products.length !== params.productIds.length) {
143
+ throw new HttpError(404, 'PRODUCT_NOT_FOUND', 'One or more products were not found.');
144
+ }
145
+ const label = category.name['en'] ?? Object.values(category.name)[0] ?? category.slug;
146
+ return {
147
+ headline: `Assign ${products.length} product(s) to category "${label}"`,
148
+ affectedCount: products.length,
149
+ sample: products.slice(0, 10).map((p) => ({
150
+ id: p.id,
151
+ label: p.name['en'] ?? Object.values(p.name)[0] ?? p.sku,
152
+ })),
153
+ };
154
+ },
155
+ execute: async (params, ctx) => {
156
+ const request = {
157
+ productIds: params.productIds,
158
+ fields: { categories: { mode: 'add', categoryIds: [params.categoryId] } },
159
+ };
160
+ if (params.productIds.length > BULK_ASYNC_THRESHOLD) {
161
+ const op = await bulkOperationService.create({
162
+ requestedByAdminUserId: ctx.adminUserId,
163
+ payload: request,
164
+ });
165
+ return { delegated: true, bulkOperationId: op.id };
166
+ }
167
+ const result = await bulkUpdateService.bulkUpdate(request, {
168
+ actorAdminUserId: ctx.adminUserId,
169
+ impersonatedCustomerAccountId: null,
170
+ ipAddress: ctx.auditCtx.ipAddress ?? null,
171
+ userAgent: ctx.auditCtx.userAgent ?? null,
172
+ requestId: ctx.auditCtx.requestId ?? null,
173
+ });
174
+ return {
175
+ summary: {
176
+ total: result.summary.total,
177
+ succeeded: result.summary.succeeded,
178
+ failed: result.summary.failed + result.summary.skipped,
179
+ failures: result.results
180
+ .filter((r) => r.status !== 'succeeded')
181
+ .slice(0, 50)
182
+ .map((r) => ({
183
+ id: r.productId,
184
+ reason: r.details?.message ?? r.reason ?? 'failed',
185
+ })),
186
+ },
187
+ };
188
+ },
189
+ };
190
+ const removeFromCategory = {
191
+ id: 'catalog.remove_products_from_category',
192
+ moduleId: 'catalog',
193
+ kind: 'mutation',
194
+ description: 'Remove one or more products from a category (subtractive — only the named category is removed, other category assignments are kept). Resolve products via catalog.search_products and the category via catalog.search_categories first. Captured into a plan the operator must confirm; not executed immediately.',
195
+ requiredPermission: 'catalog:write',
196
+ paramsSchema: RemoveProductsFromCategoryParamsSchema,
197
+ preview: async (params) => {
198
+ // D-75 — this module's own fork, not the caller's manager. A preview
199
+ // reads committed rows: the request row it would have shared a unit of
200
+ // work with is flushed before the interpreter runs, and nothing here
201
+ // writes.
202
+ const em = deps.emFactory();
203
+ const category = await em.findOne(Category, { id: params.categoryId, deletedAt: null });
204
+ if (!category)
205
+ throw new HttpError(404, 'NOT_FOUND', 'Category not found.');
206
+ const products = await em.find(Product, { id: { $in: params.productIds } }, { fields: ['id', 'name', 'sku'] });
207
+ if (products.length !== params.productIds.length) {
208
+ throw new HttpError(404, 'PRODUCT_NOT_FOUND', 'One or more products were not found.');
209
+ }
210
+ const label = category.name['en'] ?? Object.values(category.name)[0] ?? category.slug;
211
+ return {
212
+ headline: `Remove ${products.length} product(s) from category "${label}"`,
213
+ affectedCount: products.length,
214
+ sample: products.slice(0, 10).map((p) => ({
215
+ id: p.id,
216
+ label: p.name['en'] ?? Object.values(p.name)[0] ?? p.sku,
217
+ })),
218
+ };
219
+ },
220
+ execute: async (params, ctx) => runBulkFieldsUpdate(services, { categories: { mode: 'remove', categoryIds: [params.categoryId] } }, params.productIds, ctx),
221
+ };
222
+ const setProductStatus = {
223
+ id: 'catalog.set_product_status',
224
+ moduleId: 'catalog',
225
+ kind: 'mutation',
226
+ description: 'Set the status (draft | active | inactive) of one or more products. Resolve products via catalog.search_products first. Captured into a plan the operator must confirm; not executed immediately.',
227
+ requiredPermission: 'catalog:write',
228
+ paramsSchema: SetProductStatusParamsSchema,
229
+ preview: async (params) => previewProducts(deps.emFactory(), params.productIds, `Set status of ${params.productIds.length} product(s) to "${params.status}"`),
230
+ execute: async (params, ctx) => runBulkFieldsUpdate(services, { status: params.status }, params.productIds, ctx),
231
+ };
232
+ const setProductsVisibility = {
233
+ id: 'catalog.set_products_visibility',
234
+ moduleId: 'catalog',
235
+ kind: 'mutation',
236
+ description: 'Set the storefront visibility (public | logged_in_only | organization_restricted) of one or more products as a bulk action. Resolve products via catalog.search_products first. Captured into a plan the operator must confirm; not executed immediately.',
237
+ requiredPermission: 'catalog:write',
238
+ paramsSchema: SetProductsVisibilityParamsSchema,
239
+ preview: async (params) => previewProducts(deps.emFactory(), params.productIds, `Set visibility of ${params.productIds.length} product(s) to "${params.visibility}"`),
240
+ execute: async (params, ctx) => runBulkFieldsUpdate(services, { visibility: params.visibility }, params.productIds, ctx),
241
+ };
242
+ return [
243
+ assignToCategory,
244
+ removeFromCategory,
245
+ setProductStatus,
246
+ setProductsVisibility,
247
+ ];
248
+ }
249
+ /**
250
+ * Live `catalog_bulk_operations` progress for one delegated prompt request
251
+ * (research §R6, FR-011/FR-018), contributed as `prompt_actions`'
252
+ * `BulkProgressReader`.
253
+ *
254
+ * D-76 — data out, and nothing else. This used to take
255
+ * `(row: PromptActionRequest, em: EntityManager)` and write `row.result`,
256
+ * `row.status` and `row.error` on `prompt_actions`' own entity, which put that
257
+ * module's state machine in this module's hands; the `em` was never bound at
258
+ * all. What a bulk operation did is this module's fact, and this returns
259
+ * exactly that fact — whether the request is `completed`, `failed` or
260
+ * `completed_with_errors` is decided by its owner.
261
+ *
262
+ * `null` means "not one of mine": the id names no bulk operation here, so the
263
+ * host may ask the next contributor.
264
+ */
265
+ export function catalogBulkProgressReader(deps) {
266
+ const { bulkOperationService } = buildBulkServices(deps);
267
+ return async (bulkOperationId) => {
268
+ const op = await bulkOperationService.get(bulkOperationId);
269
+ if (!op)
270
+ return null;
271
+ return {
272
+ total: op.total,
273
+ succeeded: op.succeeded,
274
+ failed: op.failed + op.skipped,
275
+ failures: (op.results ?? [])
276
+ .filter((r) => r.status !== 'succeeded')
277
+ .slice(0, 50)
278
+ .map((r) => ({ id: r.productId, reason: r.details?.message ?? r.reason ?? 'failed' })),
279
+ terminal: op.status === 'completed' || op.status === 'failed' ? op.status : null,
280
+ error: op.error ?? null,
281
+ };
282
+ };
283
+ }
284
+ //# sourceMappingURL=prompt-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-tools.js","sourceRoot":"","sources":["../../src/backend/prompt-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ import type { FastifyInstance, FastifyRequest } from 'fastify';
2
+ import type { CatalogAdminService } from './services/catalog-admin.service.js';
3
+ import type { CatalogBulkUpdateService } from './services/catalog-bulk-update.service.js';
4
+ import type { BulkOperationService } from './services/bulk-operation.service.js';
5
+ import type { CategoryAdminService } from './services/category-admin.service.js';
6
+ import type { AttributeSetService } from './services/attribute-set.service.js';
7
+ import type { GalleryService } from './services/gallery.service.js';
8
+ import type { AttachmentService } from './services/attachment.service.js';
9
+ import type { PackagingUnitService } from './services/packaging-unit.service.js';
10
+ import type { ProductLinkService } from './services/product-link.service.js';
11
+ import type { GroupedService } from './services/grouped.service.js';
12
+ import type { BundleService } from './services/bundle.service.js';
13
+ import type { ProductScopeContextService } from './services/product-scope-context.service.js';
14
+ import type { ProductEditorPreferencesService } from './services/product-editor-preferences.service.js';
15
+ import type { ProductValueResolverService } from './services/product-value-resolver.service.js';
16
+ import type { ProductOverridesService } from './services/product-overrides.service.js';
17
+ import type { AuditPort } from '@endora-commerce/platform/kernel';
18
+ import type { RequireAdminFactory } from '@endora-commerce/platform/kernel';
19
+ export interface CatalogAdminDeps {
20
+ adminService: CatalogAdminService;
21
+ /** Optional — wired by the catalog plugin once instantiated. */
22
+ categoryAdminService?: CategoryAdminService;
23
+ /**
24
+ * Feature 002 — AttributeSet admin CRUD. Optional so dev/test composition
25
+ * roots can wire it up progressively without breaking foundation-era
26
+ * setups. When omitted, the attribute-set endpoints are NOT registered.
27
+ */
28
+ attributeSetService?: AttributeSetService;
29
+ /**
30
+ * Feature 002 — Gallery admin CRUD (US3). Optional for the same
31
+ * progressive-rollout reason as `attributeSetService`.
32
+ */
33
+ galleryService?: GalleryService;
34
+ /** Feature 002 — Attachments admin CRUD (US3). */
35
+ attachmentService?: AttachmentService;
36
+ /** Feature 043 — Packaging units admin CRUD. */
37
+ packagingUnitService?: PackagingUnitService;
38
+ /** Feature 002 — Product Links admin CRUD (US4). */
39
+ productLinkService?: ProductLinkService;
40
+ /** Feature 002 — Grouped product children admin CRUD (US5). */
41
+ groupedService?: GroupedService;
42
+ /** Feature 002 — Bundle slots + options admin CRUD (US5). */
43
+ bundleService?: BundleService;
44
+ /**
45
+ * Feature 023 — per-Sales-Channel + per-Language product scope
46
+ * context endpoint backing the product edit page switchers. When
47
+ * omitted, the scope-context route is NOT registered (back-compat).
48
+ */
49
+ productScopeContextService?: ProductScopeContextService;
50
+ /**
51
+ * Feature 023 — editor preference upsert backing the remembered
52
+ * switcher state. Optional same reason as above.
53
+ */
54
+ productEditorPreferencesService?: ProductEditorPreferencesService;
55
+ /**
56
+ * Feature 023 — resolver wrapper used by the modified
57
+ * `GET /admin/products/:id` to attach a `resolved` preview block
58
+ * when `channelId` / `languageCode` are passed.
59
+ */
60
+ productValueResolverService?: ProductValueResolverService;
61
+ /**
62
+ * Feature 023 — channel-aware override CRUD. Powers the
63
+ * `PATCH /admin/products/:id/value-overrides` endpoint. Optional so
64
+ * the read-only path (GET value-overrides) can ship without the
65
+ * write surface in dev/test setups that haven't wired it yet.
66
+ */
67
+ productOverridesService?: ProductOverridesService;
68
+ /**
69
+ * Feature 022 (products bulk edit) — POST /products/bulk-update. Optional
70
+ * so tests / dev composition roots that don't yet wire the service stay
71
+ * green; the route is only registered when this dep is present.
72
+ */
73
+ bulkUpdateService?: CatalogBulkUpdateService;
74
+ /**
75
+ * Queued bulk-edit. When present, selections above
76
+ * {@link BULK_ASYNC_THRESHOLD} are enqueued as background operations
77
+ * instead of being applied inline, and the bulk-operations
78
+ * list/detail endpoints are registered. Optional so dev/test
79
+ * composition roots can omit the queue infrastructure.
80
+ */
81
+ bulkOperationService?: BulkOperationService;
82
+ /**
83
+ * PreHandler gate — supplied by the composition root. Set to the real
84
+ * `requireAdmin('catalog:write')` factory at server boot. Optional so tests
85
+ * and dev-mode servers can wire this up progressively.
86
+ */
87
+ requireAdmin: RequireAdminFactory;
88
+ /**
89
+ * Resolves an admin actor (admin user id, optional impersonated customer)
90
+ * for audit-log entries — passed through to the catalog admin service.
91
+ */
92
+ resolveAdminAuditContext?: (req: FastifyRequest) => {
93
+ actorAdminUserId: string;
94
+ impersonatedCustomerAccountId?: string | null;
95
+ };
96
+ /**
97
+ * Audit-log writer used by the route layer to emit FR-084 entries for
98
+ * every catalog mutation introduced in feature 002 (AttributeSet,
99
+ * Gallery, Attachment, ProductLink, GroupedItem, BundleSlot CRUD).
100
+ * Optional so tests that don't wire it up stay green.
101
+ */
102
+ auditLogService?: AuditPort;
103
+ }
104
+ export declare function registerCatalogAdminRoutes(app: FastifyInstance, deps: CatalogAdminDeps): Promise<void>;
105
+ //# sourceMappingURL=routes.admin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.admin.d.ts","sourceRoot":"","sources":["../../src/backend/routes.admin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAqC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AAC1F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAGjF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAC;AAC9F,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,kDAAkD,CAAC;AACxG,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAChG,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAEvF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAMlE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AA2B5E,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,mBAAmB,CAAC;IAClC,gEAAgE;IAChE,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C;;;OAGG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,gDAAgD;IAChD,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,oDAAoD;IACpD,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,+DAA+D;IAC/D,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,6DAA6D;IAC7D,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;OAIG;IACH,0BAA0B,CAAC,EAAE,0BAA0B,CAAC;IACxD;;;OAGG;IACH,+BAA+B,CAAC,EAAE,+BAA+B,CAAC;IAClE;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,2BAA2B,CAAC;IAC1D;;;;;OAKG;IACH,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAClD;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAC7C;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C;;;;OAIG;IACH,YAAY,EAAE,mBAAmB,CAAC;IAClC;;;OAGG;IACH,wBAAwB,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK;QAClD,gBAAgB,EAAE,MAAM,CAAC;QACzB,6BAA6B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC/C,CAAC;IACF;;;;;OAKG;IACH,eAAe,CAAC,EAAE,SAAS,CAAC;CAC7B;AAED,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,IAAI,CAAC,CAmhDf"}