@endora-commerce/mod-product-feeds 0.0.0-stage → 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 (507) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +65 -2
  3. package/dist/admin/api.d.ts +445 -0
  4. package/dist/admin/api.d.ts.map +1 -0
  5. package/dist/admin/api.js +275 -0
  6. package/dist/admin/api.js.map +1 -0
  7. package/dist/admin/components/CategoryMappingRow.d.ts +29 -0
  8. package/dist/admin/components/CategoryMappingRow.d.ts.map +1 -0
  9. package/dist/admin/components/CategoryMappingRow.js +34 -0
  10. package/dist/admin/components/CategoryMappingRow.js.map +1 -0
  11. package/dist/admin/components/ConsequenceDialog.d.ts +30 -0
  12. package/dist/admin/components/ConsequenceDialog.d.ts.map +1 -0
  13. package/dist/admin/components/ConsequenceDialog.js +32 -0
  14. package/dist/admin/components/ConsequenceDialog.js.map +1 -0
  15. package/dist/admin/components/CronBuilderField.d.ts +10 -0
  16. package/dist/admin/components/CronBuilderField.d.ts.map +1 -0
  17. package/dist/admin/components/CronBuilderField.js +72 -0
  18. package/dist/admin/components/CronBuilderField.js.map +1 -0
  19. package/dist/admin/components/FeedCriteriaPanel.d.ts +12 -0
  20. package/dist/admin/components/FeedCriteriaPanel.d.ts.map +1 -0
  21. package/dist/admin/components/FeedCriteriaPanel.js +171 -0
  22. package/dist/admin/components/FeedCriteriaPanel.js.map +1 -0
  23. package/dist/admin/components/FeedDeliveryPanel.d.ts +31 -0
  24. package/dist/admin/components/FeedDeliveryPanel.d.ts.map +1 -0
  25. package/dist/admin/components/FeedDeliveryPanel.js +217 -0
  26. package/dist/admin/components/FeedDeliveryPanel.js.map +1 -0
  27. package/dist/admin/components/FeedLinkCard.d.ts +28 -0
  28. package/dist/admin/components/FeedLinkCard.d.ts.map +1 -0
  29. package/dist/admin/components/FeedLinkCard.js +66 -0
  30. package/dist/admin/components/FeedLinkCard.js.map +1 -0
  31. package/dist/admin/components/FeedSectionTabs.d.ts +15 -0
  32. package/dist/admin/components/FeedSectionTabs.d.ts.map +1 -0
  33. package/dist/admin/components/FeedSectionTabs.js +27 -0
  34. package/dist/admin/components/FeedSectionTabs.js.map +1 -0
  35. package/dist/admin/components/FeedSettingsForm.d.ts +17 -0
  36. package/dist/admin/components/FeedSettingsForm.d.ts.map +1 -0
  37. package/dist/admin/components/FeedSettingsForm.js +50 -0
  38. package/dist/admin/components/FeedSettingsForm.js.map +1 -0
  39. package/dist/admin/components/FeedStatusBadge.d.ts +6 -0
  40. package/dist/admin/components/FeedStatusBadge.d.ts.map +1 -0
  41. package/dist/admin/components/FeedStatusBadge.js +53 -0
  42. package/dist/admin/components/FeedStatusBadge.js.map +1 -0
  43. package/dist/admin/components/FieldSourceCombobox.d.ts +45 -0
  44. package/dist/admin/components/FieldSourceCombobox.d.ts.map +1 -0
  45. package/dist/admin/components/FieldSourceCombobox.js +77 -0
  46. package/dist/admin/components/FieldSourceCombobox.js.map +1 -0
  47. package/dist/admin/components/NeedsAttentionBar.d.ts +25 -0
  48. package/dist/admin/components/NeedsAttentionBar.d.ts.map +1 -0
  49. package/dist/admin/components/NeedsAttentionBar.js +24 -0
  50. package/dist/admin/components/NeedsAttentionBar.js.map +1 -0
  51. package/dist/admin/components/RevisionImpactDrawer.d.ts +35 -0
  52. package/dist/admin/components/RevisionImpactDrawer.d.ts.map +1 -0
  53. package/dist/admin/components/RevisionImpactDrawer.js +193 -0
  54. package/dist/admin/components/RevisionImpactDrawer.js.map +1 -0
  55. package/dist/admin/components/RunIssueGroups.d.ts +27 -0
  56. package/dist/admin/components/RunIssueGroups.d.ts.map +1 -0
  57. package/dist/admin/components/RunIssueGroups.js +70 -0
  58. package/dist/admin/components/RunIssueGroups.js.map +1 -0
  59. package/dist/admin/components/SchedulePresetField.d.ts +39 -0
  60. package/dist/admin/components/SchedulePresetField.d.ts.map +1 -0
  61. package/dist/admin/components/SchedulePresetField.js +89 -0
  62. package/dist/admin/components/SchedulePresetField.js.map +1 -0
  63. package/dist/admin/components/TemplateFieldInspector.d.ts +22 -0
  64. package/dist/admin/components/TemplateFieldInspector.d.ts.map +1 -0
  65. package/dist/admin/components/TemplateFieldInspector.js +61 -0
  66. package/dist/admin/components/TemplateFieldInspector.js.map +1 -0
  67. package/dist/admin/components/TemplateFieldList.d.ts +40 -0
  68. package/dist/admin/components/TemplateFieldList.d.ts.map +1 -0
  69. package/dist/admin/components/TemplateFieldList.js +51 -0
  70. package/dist/admin/components/TemplateFieldList.js.map +1 -0
  71. package/dist/admin/components/TemplateFieldRow.d.ts +49 -0
  72. package/dist/admin/components/TemplateFieldRow.d.ts.map +1 -0
  73. package/dist/admin/components/TemplateFieldRow.js +61 -0
  74. package/dist/admin/components/TemplateFieldRow.js.map +1 -0
  75. package/dist/admin/components/TemplatePreviewController.d.ts +54 -0
  76. package/dist/admin/components/TemplatePreviewController.d.ts.map +1 -0
  77. package/dist/admin/components/TemplatePreviewController.js +90 -0
  78. package/dist/admin/components/TemplatePreviewController.js.map +1 -0
  79. package/dist/admin/delivery-headers.d.ts +24 -0
  80. package/dist/admin/delivery-headers.d.ts.map +1 -0
  81. package/dist/admin/delivery-headers.js +62 -0
  82. package/dist/admin/delivery-headers.js.map +1 -0
  83. package/dist/admin/index.d.ts +43 -0
  84. package/dist/admin/index.d.ts.map +1 -0
  85. package/dist/admin/index.js +87 -0
  86. package/dist/admin/index.js.map +1 -0
  87. package/dist/admin/pages/CategoryMappingPage.d.ts +9 -0
  88. package/dist/admin/pages/CategoryMappingPage.d.ts.map +1 -0
  89. package/dist/admin/pages/CategoryMappingPage.js +167 -0
  90. package/dist/admin/pages/CategoryMappingPage.js.map +1 -0
  91. package/dist/admin/pages/FeedRunDetailPage.d.ts +9 -0
  92. package/dist/admin/pages/FeedRunDetailPage.d.ts.map +1 -0
  93. package/dist/admin/pages/FeedRunDetailPage.js +94 -0
  94. package/dist/admin/pages/FeedRunDetailPage.js.map +1 -0
  95. package/dist/admin/pages/FeedTemplateEditorPage.d.ts +9 -0
  96. package/dist/admin/pages/FeedTemplateEditorPage.d.ts.map +1 -0
  97. package/dist/admin/pages/FeedTemplateEditorPage.js +414 -0
  98. package/dist/admin/pages/FeedTemplateEditorPage.js.map +1 -0
  99. package/dist/admin/pages/FeedTemplateImportPage.d.ts +9 -0
  100. package/dist/admin/pages/FeedTemplateImportPage.d.ts.map +1 -0
  101. package/dist/admin/pages/FeedTemplateImportPage.js +118 -0
  102. package/dist/admin/pages/FeedTemplateImportPage.js.map +1 -0
  103. package/dist/admin/pages/FeedTemplateStartFromPage.d.ts +18 -0
  104. package/dist/admin/pages/FeedTemplateStartFromPage.d.ts.map +1 -0
  105. package/dist/admin/pages/FeedTemplateStartFromPage.js +87 -0
  106. package/dist/admin/pages/FeedTemplateStartFromPage.js.map +1 -0
  107. package/dist/admin/pages/FeedTemplatesListPage.d.ts +9 -0
  108. package/dist/admin/pages/FeedTemplatesListPage.d.ts.map +1 -0
  109. package/dist/admin/pages/FeedTemplatesListPage.js +130 -0
  110. package/dist/admin/pages/FeedTemplatesListPage.js.map +1 -0
  111. package/dist/admin/pages/ProductFeedCreatePage.d.ts +30 -0
  112. package/dist/admin/pages/ProductFeedCreatePage.d.ts.map +1 -0
  113. package/dist/admin/pages/ProductFeedCreatePage.js +127 -0
  114. package/dist/admin/pages/ProductFeedCreatePage.js.map +1 -0
  115. package/dist/admin/pages/ProductFeedDetailPage.d.ts +20 -0
  116. package/dist/admin/pages/ProductFeedDetailPage.d.ts.map +1 -0
  117. package/dist/admin/pages/ProductFeedDetailPage.js +167 -0
  118. package/dist/admin/pages/ProductFeedDetailPage.js.map +1 -0
  119. package/dist/admin/pages/ProductFeedsListPage.d.ts +9 -0
  120. package/dist/admin/pages/ProductFeedsListPage.d.ts.map +1 -0
  121. package/dist/admin/pages/ProductFeedsListPage.js +153 -0
  122. package/dist/admin/pages/ProductFeedsListPage.js.map +1 -0
  123. package/dist/admin/pages/TaxonomyRevisionsPage.d.ts +9 -0
  124. package/dist/admin/pages/TaxonomyRevisionsPage.d.ts.map +1 -0
  125. package/dist/admin/pages/TaxonomyRevisionsPage.js +175 -0
  126. package/dist/admin/pages/TaxonomyRevisionsPage.js.map +1 -0
  127. package/dist/admin/taxonomy-api.d.ts +127 -0
  128. package/dist/admin/taxonomy-api.d.ts.map +1 -0
  129. package/dist/admin/taxonomy-api.js +73 -0
  130. package/dist/admin/taxonomy-api.js.map +1 -0
  131. package/dist/admin/template-draft.d.ts +88 -0
  132. package/dist/admin/template-draft.d.ts.map +1 -0
  133. package/dist/admin/template-draft.js +185 -0
  134. package/dist/admin/template-draft.js.map +1 -0
  135. package/dist/backend/commands/feed-delivery.commands.d.ts +38 -0
  136. package/dist/backend/commands/feed-delivery.commands.d.ts.map +1 -0
  137. package/dist/backend/commands/feed-delivery.commands.js +113 -0
  138. package/dist/backend/commands/feed-delivery.commands.js.map +1 -0
  139. package/dist/backend/commands/feed-template.commands.d.ts +63 -0
  140. package/dist/backend/commands/feed-template.commands.d.ts.map +1 -0
  141. package/dist/backend/commands/feed-template.commands.js +282 -0
  142. package/dist/backend/commands/feed-template.commands.js.map +1 -0
  143. package/dist/backend/commands/product-feed.commands.d.ts +56 -0
  144. package/dist/backend/commands/product-feed.commands.d.ts.map +1 -0
  145. package/dist/backend/commands/product-feed.commands.js +270 -0
  146. package/dist/backend/commands/product-feed.commands.js.map +1 -0
  147. package/dist/backend/commands/taxonomy-mapping.commands.d.ts +17 -0
  148. package/dist/backend/commands/taxonomy-mapping.commands.d.ts.map +1 -0
  149. package/dist/backend/commands/taxonomy-mapping.commands.js +107 -0
  150. package/dist/backend/commands/taxonomy-mapping.commands.js.map +1 -0
  151. package/dist/backend/commands/taxonomy-revision.commands.d.ts +48 -0
  152. package/dist/backend/commands/taxonomy-revision.commands.d.ts.map +1 -0
  153. package/dist/backend/commands/taxonomy-revision.commands.js +158 -0
  154. package/dist/backend/commands/taxonomy-revision.commands.js.map +1 -0
  155. package/dist/backend/data/taxonomies/google_merchant/2021-09-21/en.txt +5596 -0
  156. package/dist/backend/data/taxonomies/google_merchant/2021-09-21/pl.txt +5596 -0
  157. package/dist/backend/data/taxonomies/meta/2026-08-02/en.txt +2968 -0
  158. package/dist/backend/data/taxonomies/meta/2026-08-02/pl.txt +2968 -0
  159. package/dist/backend/entities/feed-artefact.entity.d.ts +38 -0
  160. package/dist/backend/entities/feed-artefact.entity.d.ts.map +1 -0
  161. package/dist/backend/entities/feed-artefact.entity.js +105 -0
  162. package/dist/backend/entities/feed-artefact.entity.js.map +1 -0
  163. package/dist/backend/entities/feed-delivery-attempt.entity.d.ts +43 -0
  164. package/dist/backend/entities/feed-delivery-attempt.entity.d.ts.map +1 -0
  165. package/dist/backend/entities/feed-delivery-attempt.entity.js +119 -0
  166. package/dist/backend/entities/feed-delivery-attempt.entity.js.map +1 -0
  167. package/dist/backend/entities/feed-delivery.entity.d.ts +56 -0
  168. package/dist/backend/entities/feed-delivery.entity.d.ts.map +1 -0
  169. package/dist/backend/entities/feed-delivery.entity.js +141 -0
  170. package/dist/backend/entities/feed-delivery.entity.js.map +1 -0
  171. package/dist/backend/entities/feed-run-issue.entity.d.ts +35 -0
  172. package/dist/backend/entities/feed-run-issue.entity.d.ts.map +1 -0
  173. package/dist/backend/entities/feed-run-issue.entity.js +90 -0
  174. package/dist/backend/entities/feed-run-issue.entity.js.map +1 -0
  175. package/dist/backend/entities/feed-run.entity.d.ts +49 -0
  176. package/dist/backend/entities/feed-run.entity.d.ts.map +1 -0
  177. package/dist/backend/entities/feed-run.entity.js +144 -0
  178. package/dist/backend/entities/feed-run.entity.js.map +1 -0
  179. package/dist/backend/entities/feed-taxonomy-check.entity.d.ts +49 -0
  180. package/dist/backend/entities/feed-taxonomy-check.entity.d.ts.map +1 -0
  181. package/dist/backend/entities/feed-taxonomy-check.entity.js +117 -0
  182. package/dist/backend/entities/feed-taxonomy-check.entity.js.map +1 -0
  183. package/dist/backend/entities/feed-taxonomy-mapping.entity.d.ts +31 -0
  184. package/dist/backend/entities/feed-taxonomy-mapping.entity.d.ts.map +1 -0
  185. package/dist/backend/entities/feed-taxonomy-mapping.entity.js +80 -0
  186. package/dist/backend/entities/feed-taxonomy-mapping.entity.js.map +1 -0
  187. package/dist/backend/entities/feed-taxonomy-node.entity.d.ts +30 -0
  188. package/dist/backend/entities/feed-taxonomy-node.entity.d.ts.map +1 -0
  189. package/dist/backend/entities/feed-taxonomy-node.entity.js +79 -0
  190. package/dist/backend/entities/feed-taxonomy-node.entity.js.map +1 -0
  191. package/dist/backend/entities/feed-taxonomy.entity.d.ts +73 -0
  192. package/dist/backend/entities/feed-taxonomy.entity.d.ts.map +1 -0
  193. package/dist/backend/entities/feed-taxonomy.entity.js +149 -0
  194. package/dist/backend/entities/feed-taxonomy.entity.js.map +1 -0
  195. package/dist/backend/entities/feed-template-field.entity.d.ts +44 -0
  196. package/dist/backend/entities/feed-template-field.entity.d.ts.map +1 -0
  197. package/dist/backend/entities/feed-template-field.entity.js +125 -0
  198. package/dist/backend/entities/feed-template-field.entity.js.map +1 -0
  199. package/dist/backend/entities/feed-template.entity.d.ts +44 -0
  200. package/dist/backend/entities/feed-template.entity.d.ts.map +1 -0
  201. package/dist/backend/entities/feed-template.entity.js +117 -0
  202. package/dist/backend/entities/feed-template.entity.js.map +1 -0
  203. package/dist/backend/entities/product-feed.entity.d.ts +73 -0
  204. package/dist/backend/entities/product-feed.entity.d.ts.map +1 -0
  205. package/dist/backend/entities/product-feed.entity.js +203 -0
  206. package/dist/backend/entities/product-feed.entity.js.map +1 -0
  207. package/dist/backend/index.d.ts +134 -0
  208. package/dist/backend/index.d.ts.map +1 -0
  209. package/dist/backend/index.js +272 -0
  210. package/dist/backend/index.js.map +1 -0
  211. package/dist/backend/plugin.d.ts +338 -0
  212. package/dist/backend/plugin.d.ts.map +1 -0
  213. package/dist/backend/plugin.js +648 -0
  214. package/dist/backend/plugin.js.map +1 -0
  215. package/dist/backend/routes.admin.d.ts +57 -0
  216. package/dist/backend/routes.admin.d.ts.map +1 -0
  217. package/dist/backend/routes.admin.js +380 -0
  218. package/dist/backend/routes.admin.js.map +1 -0
  219. package/dist/backend/routes.delivery.d.ts +38 -0
  220. package/dist/backend/routes.delivery.d.ts.map +1 -0
  221. package/dist/backend/routes.delivery.js +42 -0
  222. package/dist/backend/routes.delivery.js.map +1 -0
  223. package/dist/backend/routes.public.d.ts +13 -0
  224. package/dist/backend/routes.public.d.ts.map +1 -0
  225. package/dist/backend/routes.public.js +143 -0
  226. package/dist/backend/routes.public.js.map +1 -0
  227. package/dist/backend/routes.taxonomies.d.ts +45 -0
  228. package/dist/backend/routes.taxonomies.d.ts.map +1 -0
  229. package/dist/backend/routes.taxonomies.js +176 -0
  230. package/dist/backend/routes.taxonomies.js.map +1 -0
  231. package/dist/backend/routes.templates.d.ts +47 -0
  232. package/dist/backend/routes.templates.d.ts.map +1 -0
  233. package/dist/backend/routes.templates.js +160 -0
  234. package/dist/backend/routes.templates.js.map +1 -0
  235. package/dist/backend/seeds/predefined-templates.d.ts +56 -0
  236. package/dist/backend/seeds/predefined-templates.d.ts.map +1 -0
  237. package/dist/backend/seeds/predefined-templates.js +215 -0
  238. package/dist/backend/seeds/predefined-templates.js.map +1 -0
  239. package/dist/backend/services/artefact-filename.d.ts +17 -0
  240. package/dist/backend/services/artefact-filename.d.ts.map +1 -0
  241. package/dist/backend/services/artefact-filename.js +31 -0
  242. package/dist/backend/services/artefact-filename.js.map +1 -0
  243. package/dist/backend/services/artefact-retention.service.d.ts +32 -0
  244. package/dist/backend/services/artefact-retention.service.d.ts.map +1 -0
  245. package/dist/backend/services/artefact-retention.service.js +124 -0
  246. package/dist/backend/services/artefact-retention.service.js.map +1 -0
  247. package/dist/backend/services/artefact-store.d.ts +91 -0
  248. package/dist/backend/services/artefact-store.d.ts.map +1 -0
  249. package/dist/backend/services/artefact-store.js +51 -0
  250. package/dist/backend/services/artefact-store.js.map +1 -0
  251. package/dist/backend/services/cron-expression.d.ts +30 -0
  252. package/dist/backend/services/cron-expression.d.ts.map +1 -0
  253. package/dist/backend/services/cron-expression.js +30 -0
  254. package/dist/backend/services/cron-expression.js.map +1 -0
  255. package/dist/backend/services/delivery/adapters/ftp-delivery-adapter.d.ts +26 -0
  256. package/dist/backend/services/delivery/adapters/ftp-delivery-adapter.d.ts.map +1 -0
  257. package/dist/backend/services/delivery/adapters/ftp-delivery-adapter.js +151 -0
  258. package/dist/backend/services/delivery/adapters/ftp-delivery-adapter.js.map +1 -0
  259. package/dist/backend/services/delivery/adapters/http-delivery-adapter.d.ts +72 -0
  260. package/dist/backend/services/delivery/adapters/http-delivery-adapter.d.ts.map +1 -0
  261. package/dist/backend/services/delivery/adapters/http-delivery-adapter.js +189 -0
  262. package/dist/backend/services/delivery/adapters/http-delivery-adapter.js.map +1 -0
  263. package/dist/backend/services/delivery/adapters/sftp-delivery-adapter.d.ts +28 -0
  264. package/dist/backend/services/delivery/adapters/sftp-delivery-adapter.d.ts.map +1 -0
  265. package/dist/backend/services/delivery/adapters/sftp-delivery-adapter.js +155 -0
  266. package/dist/backend/services/delivery/adapters/sftp-delivery-adapter.js.map +1 -0
  267. package/dist/backend/services/delivery/delivery-adapter.interface.d.ts +84 -0
  268. package/dist/backend/services/delivery/delivery-adapter.interface.d.ts.map +1 -0
  269. package/dist/backend/services/delivery/delivery-adapter.interface.js +46 -0
  270. package/dist/backend/services/delivery/delivery-adapter.interface.js.map +1 -0
  271. package/dist/backend/services/delivery/delivery-config.service.d.ts +84 -0
  272. package/dist/backend/services/delivery/delivery-config.service.d.ts.map +1 -0
  273. package/dist/backend/services/delivery/delivery-config.service.js +333 -0
  274. package/dist/backend/services/delivery/delivery-config.service.js.map +1 -0
  275. package/dist/backend/services/delivery/delivery-credential.type.d.ts +36 -0
  276. package/dist/backend/services/delivery/delivery-credential.type.d.ts.map +1 -0
  277. package/dist/backend/services/delivery/delivery-credential.type.js +70 -0
  278. package/dist/backend/services/delivery/delivery-credential.type.js.map +1 -0
  279. package/dist/backend/services/delivery/delivery-redaction.d.ts +37 -0
  280. package/dist/backend/services/delivery/delivery-redaction.d.ts.map +1 -0
  281. package/dist/backend/services/delivery/delivery-redaction.js +90 -0
  282. package/dist/backend/services/delivery/delivery-redaction.js.map +1 -0
  283. package/dist/backend/services/delivery/delivery-target-url.d.ts +53 -0
  284. package/dist/backend/services/delivery/delivery-target-url.d.ts.map +1 -0
  285. package/dist/backend/services/delivery/delivery-target-url.js +74 -0
  286. package/dist/backend/services/delivery/delivery-target-url.js.map +1 -0
  287. package/dist/backend/services/delivery/delivery.service.d.ts +133 -0
  288. package/dist/backend/services/delivery/delivery.service.d.ts.map +1 -0
  289. package/dist/backend/services/delivery/delivery.service.js +397 -0
  290. package/dist/backend/services/delivery/delivery.service.js.map +1 -0
  291. package/dist/backend/services/failed-run-notifier.d.ts +171 -0
  292. package/dist/backend/services/failed-run-notifier.d.ts.map +1 -0
  293. package/dist/backend/services/failed-run-notifier.js +221 -0
  294. package/dist/backend/services/failed-run-notifier.js.map +1 -0
  295. package/dist/backend/services/feed-cache-invalidator.d.ts +52 -0
  296. package/dist/backend/services/feed-cache-invalidator.d.ts.map +1 -0
  297. package/dist/backend/services/feed-cache-invalidator.js +109 -0
  298. package/dist/backend/services/feed-cache-invalidator.js.map +1 -0
  299. package/dist/backend/services/feed-dto.d.ts +47 -0
  300. package/dist/backend/services/feed-dto.d.ts.map +1 -0
  301. package/dist/backend/services/feed-dto.js +127 -0
  302. package/dist/backend/services/feed-dto.js.map +1 -0
  303. package/dist/backend/services/feed-generation.service.d.ts +200 -0
  304. package/dist/backend/services/feed-generation.service.d.ts.map +1 -0
  305. package/dist/backend/services/feed-generation.service.js +652 -0
  306. package/dist/backend/services/feed-generation.service.js.map +1 -0
  307. package/dist/backend/services/feed-run-reaper.service.d.ts +85 -0
  308. package/dist/backend/services/feed-run-reaper.service.d.ts.map +1 -0
  309. package/dist/backend/services/feed-run-reaper.service.js +152 -0
  310. package/dist/backend/services/feed-run-reaper.service.js.map +1 -0
  311. package/dist/backend/services/feed-run.service.d.ts +100 -0
  312. package/dist/backend/services/feed-run.service.d.ts.map +1 -0
  313. package/dist/backend/services/feed-run.service.js +208 -0
  314. package/dist/backend/services/feed-run.service.js.map +1 -0
  315. package/dist/backend/services/feed-schedule-reconciler.d.ts +136 -0
  316. package/dist/backend/services/feed-schedule-reconciler.d.ts.map +1 -0
  317. package/dist/backend/services/feed-schedule-reconciler.js +201 -0
  318. package/dist/backend/services/feed-schedule-reconciler.js.map +1 -0
  319. package/dist/backend/services/feed-template-io.service.d.ts +167 -0
  320. package/dist/backend/services/feed-template-io.service.d.ts.map +1 -0
  321. package/dist/backend/services/feed-template-io.service.js +270 -0
  322. package/dist/backend/services/feed-template-io.service.js.map +1 -0
  323. package/dist/backend/services/feed-template.service.d.ts +89 -0
  324. package/dist/backend/services/feed-template.service.d.ts.map +1 -0
  325. package/dist/backend/services/feed-template.service.js +292 -0
  326. package/dist/backend/services/feed-template.service.js.map +1 -0
  327. package/dist/backend/services/feed-token.service.d.ts +43 -0
  328. package/dist/backend/services/feed-token.service.d.ts.map +1 -0
  329. package/dist/backend/services/feed-token.service.js +76 -0
  330. package/dist/backend/services/feed-token.service.js.map +1 -0
  331. package/dist/backend/services/field-source-catalogue.d.ts +27 -0
  332. package/dist/backend/services/field-source-catalogue.d.ts.map +1 -0
  333. package/dist/backend/services/field-source-catalogue.js +77 -0
  334. package/dist/backend/services/field-source-catalogue.js.map +1 -0
  335. package/dist/backend/services/item-field-resolver.d.ts +7 -0
  336. package/dist/backend/services/item-field-resolver.d.ts.map +1 -0
  337. package/dist/backend/services/item-field-resolver.interface.d.ts +118 -0
  338. package/dist/backend/services/item-field-resolver.interface.d.ts.map +1 -0
  339. package/dist/backend/services/item-field-resolver.interface.js +2 -0
  340. package/dist/backend/services/item-field-resolver.interface.js.map +1 -0
  341. package/dist/backend/services/item-field-resolver.js +267 -0
  342. package/dist/backend/services/item-field-resolver.js.map +1 -0
  343. package/dist/backend/services/named-list-price-resolver.d.ts +38 -0
  344. package/dist/backend/services/named-list-price-resolver.d.ts.map +1 -0
  345. package/dist/backend/services/named-list-price-resolver.js +44 -0
  346. package/dist/backend/services/named-list-price-resolver.js.map +1 -0
  347. package/dist/backend/services/product-feed.service.d.ts +95 -0
  348. package/dist/backend/services/product-feed.service.d.ts.map +1 -0
  349. package/dist/backend/services/product-feed.service.js +289 -0
  350. package/dist/backend/services/product-feed.service.js.map +1 -0
  351. package/dist/backend/services/product-selection.service.d.ts +116 -0
  352. package/dist/backend/services/product-selection.service.d.ts.map +1 -0
  353. package/dist/backend/services/product-selection.service.js +238 -0
  354. package/dist/backend/services/product-selection.service.js.map +1 -0
  355. package/dist/backend/services/queues/feed-delivery-queue.d.ts +27 -0
  356. package/dist/backend/services/queues/feed-delivery-queue.d.ts.map +1 -0
  357. package/dist/backend/services/queues/feed-delivery-queue.js +39 -0
  358. package/dist/backend/services/queues/feed-delivery-queue.js.map +1 -0
  359. package/dist/backend/services/queues/feed-generation-queue.d.ts +35 -0
  360. package/dist/backend/services/queues/feed-generation-queue.d.ts.map +1 -0
  361. package/dist/backend/services/queues/feed-generation-queue.js +56 -0
  362. package/dist/backend/services/queues/feed-generation-queue.js.map +1 -0
  363. package/dist/backend/services/queues/feed-scheduler.d.ts +134 -0
  364. package/dist/backend/services/queues/feed-scheduler.d.ts.map +1 -0
  365. package/dist/backend/services/queues/feed-scheduler.js +188 -0
  366. package/dist/backend/services/queues/feed-scheduler.js.map +1 -0
  367. package/dist/backend/services/queues/taxonomy-refresh-queue.d.ts +27 -0
  368. package/dist/backend/services/queues/taxonomy-refresh-queue.d.ts.map +1 -0
  369. package/dist/backend/services/queues/taxonomy-refresh-queue.js +37 -0
  370. package/dist/backend/services/queues/taxonomy-refresh-queue.js.map +1 -0
  371. package/dist/backend/services/selection-rule-compiler.d.ts +86 -0
  372. package/dist/backend/services/selection-rule-compiler.d.ts.map +1 -0
  373. package/dist/backend/services/selection-rule-compiler.js +364 -0
  374. package/dist/backend/services/selection-rule-compiler.js.map +1 -0
  375. package/dist/backend/services/serializers/delimited-feed-serializer.d.ts +49 -0
  376. package/dist/backend/services/serializers/delimited-feed-serializer.d.ts.map +1 -0
  377. package/dist/backend/services/serializers/delimited-feed-serializer.js +50 -0
  378. package/dist/backend/services/serializers/delimited-feed-serializer.js.map +1 -0
  379. package/dist/backend/services/serializers/feed-stream.d.ts +41 -0
  380. package/dist/backend/services/serializers/feed-stream.d.ts.map +1 -0
  381. package/dist/backend/services/serializers/feed-stream.js +74 -0
  382. package/dist/backend/services/serializers/feed-stream.js.map +1 -0
  383. package/dist/backend/services/serializers/serializer.interface.d.ts +64 -0
  384. package/dist/backend/services/serializers/serializer.interface.d.ts.map +1 -0
  385. package/dist/backend/services/serializers/serializer.interface.js +4 -0
  386. package/dist/backend/services/serializers/serializer.interface.js.map +1 -0
  387. package/dist/backend/services/serializers/xlsx-feed-serializer.d.ts +14 -0
  388. package/dist/backend/services/serializers/xlsx-feed-serializer.d.ts.map +1 -0
  389. package/dist/backend/services/serializers/xlsx-feed-serializer.js +71 -0
  390. package/dist/backend/services/serializers/xlsx-feed-serializer.js.map +1 -0
  391. package/dist/backend/services/serializers/xml-feed-serializer.d.ts +36 -0
  392. package/dist/backend/services/serializers/xml-feed-serializer.d.ts.map +1 -0
  393. package/dist/backend/services/serializers/xml-feed-serializer.js +90 -0
  394. package/dist/backend/services/serializers/xml-feed-serializer.js.map +1 -0
  395. package/dist/backend/services/taxonomy-file-parser.d.ts +57 -0
  396. package/dist/backend/services/taxonomy-file-parser.d.ts.map +1 -0
  397. package/dist/backend/services/taxonomy-file-parser.js +155 -0
  398. package/dist/backend/services/taxonomy-file-parser.js.map +1 -0
  399. package/dist/backend/services/taxonomy-mapping-resolver.d.ts +61 -0
  400. package/dist/backend/services/taxonomy-mapping-resolver.d.ts.map +1 -0
  401. package/dist/backend/services/taxonomy-mapping-resolver.js +130 -0
  402. package/dist/backend/services/taxonomy-mapping-resolver.js.map +1 -0
  403. package/dist/backend/services/taxonomy-mapping.service.d.ts +95 -0
  404. package/dist/backend/services/taxonomy-mapping.service.d.ts.map +1 -0
  405. package/dist/backend/services/taxonomy-mapping.service.js +250 -0
  406. package/dist/backend/services/taxonomy-mapping.service.js.map +1 -0
  407. package/dist/backend/services/taxonomy-reconciler.service.d.ts +92 -0
  408. package/dist/backend/services/taxonomy-reconciler.service.d.ts.map +1 -0
  409. package/dist/backend/services/taxonomy-reconciler.service.js +278 -0
  410. package/dist/backend/services/taxonomy-reconciler.service.js.map +1 -0
  411. package/dist/backend/services/taxonomy-refresh.service.d.ts +124 -0
  412. package/dist/backend/services/taxonomy-refresh.service.d.ts.map +1 -0
  413. package/dist/backend/services/taxonomy-refresh.service.js +393 -0
  414. package/dist/backend/services/taxonomy-refresh.service.js.map +1 -0
  415. package/dist/backend/services/taxonomy-revision-identity.d.ts +33 -0
  416. package/dist/backend/services/taxonomy-revision-identity.d.ts.map +1 -0
  417. package/dist/backend/services/taxonomy-revision-identity.js +93 -0
  418. package/dist/backend/services/taxonomy-revision-identity.js.map +1 -0
  419. package/dist/backend/services/taxonomy-revision-impact.d.ts +46 -0
  420. package/dist/backend/services/taxonomy-revision-impact.d.ts.map +1 -0
  421. package/dist/backend/services/taxonomy-revision-impact.js +155 -0
  422. package/dist/backend/services/taxonomy-revision-impact.js.map +1 -0
  423. package/dist/backend/services/taxonomy-revision-retention.service.d.ts +33 -0
  424. package/dist/backend/services/taxonomy-revision-retention.service.d.ts.map +1 -0
  425. package/dist/backend/services/taxonomy-revision-retention.service.js +106 -0
  426. package/dist/backend/services/taxonomy-revision-retention.service.js.map +1 -0
  427. package/dist/backend/services/taxonomy-revision.service.d.ts +76 -0
  428. package/dist/backend/services/taxonomy-revision.service.d.ts.map +1 -0
  429. package/dist/backend/services/taxonomy-revision.service.js +172 -0
  430. package/dist/backend/services/taxonomy-revision.service.js.map +1 -0
  431. package/dist/backend/services/taxonomy-source-fetcher.d.ts +31 -0
  432. package/dist/backend/services/taxonomy-source-fetcher.d.ts.map +1 -0
  433. package/dist/backend/services/taxonomy-source-fetcher.interface.d.ts +47 -0
  434. package/dist/backend/services/taxonomy-source-fetcher.interface.d.ts.map +1 -0
  435. package/dist/backend/services/taxonomy-source-fetcher.interface.js +2 -0
  436. package/dist/backend/services/taxonomy-source-fetcher.interface.js.map +1 -0
  437. package/dist/backend/services/taxonomy-source-fetcher.js +297 -0
  438. package/dist/backend/services/taxonomy-source-fetcher.js.map +1 -0
  439. package/dist/backend/services/taxonomy-source-url.d.ts +40 -0
  440. package/dist/backend/services/taxonomy-source-url.d.ts.map +1 -0
  441. package/dist/backend/services/taxonomy-source-url.js +126 -0
  442. package/dist/backend/services/taxonomy-source-url.js.map +1 -0
  443. package/dist/backend/services/template-preview.service.d.ts +60 -0
  444. package/dist/backend/services/template-preview.service.d.ts.map +1 -0
  445. package/dist/backend/services/template-preview.service.js +231 -0
  446. package/dist/backend/services/template-preview.service.js.map +1 -0
  447. package/dist/backend/services/token-secret-codec.d.ts +46 -0
  448. package/dist/backend/services/token-secret-codec.d.ts.map +1 -0
  449. package/dist/backend/services/token-secret-codec.js +89 -0
  450. package/dist/backend/services/token-secret-codec.js.map +1 -0
  451. package/dist/backend/workers/feed-delivery-worker.d.ts +43 -0
  452. package/dist/backend/workers/feed-delivery-worker.d.ts.map +1 -0
  453. package/dist/backend/workers/feed-delivery-worker.js +49 -0
  454. package/dist/backend/workers/feed-delivery-worker.js.map +1 -0
  455. package/dist/backend/workers/feed-generation-worker.d.ts +45 -0
  456. package/dist/backend/workers/feed-generation-worker.d.ts.map +1 -0
  457. package/dist/backend/workers/feed-generation-worker.js +33 -0
  458. package/dist/backend/workers/feed-generation-worker.js.map +1 -0
  459. package/dist/backend/workers/feed-run-reaper-worker.d.ts +39 -0
  460. package/dist/backend/workers/feed-run-reaper-worker.d.ts.map +1 -0
  461. package/dist/backend/workers/feed-run-reaper-worker.js +47 -0
  462. package/dist/backend/workers/feed-run-reaper-worker.js.map +1 -0
  463. package/dist/backend/workers/taxonomy-refresh-worker.d.ts +43 -0
  464. package/dist/backend/workers/taxonomy-refresh-worker.d.ts.map +1 -0
  465. package/dist/backend/workers/taxonomy-refresh-worker.js +76 -0
  466. package/dist/backend/workers/taxonomy-refresh-worker.js.map +1 -0
  467. package/dist/manifest.d.ts +221 -0
  468. package/dist/manifest.d.ts.map +1 -0
  469. package/dist/manifest.js +331 -0
  470. package/dist/manifest.js.map +1 -0
  471. package/dist/migrations/20260802T073547_product_feeds_init.d.ts +24 -0
  472. package/dist/migrations/20260802T073547_product_feeds_init.d.ts.map +1 -0
  473. package/dist/migrations/20260802T073547_product_feeds_init.js +136 -0
  474. package/dist/migrations/20260802T073547_product_feeds_init.js.map +1 -0
  475. package/dist/migrations/20260802T073627_product_feeds_runs.d.ts +23 -0
  476. package/dist/migrations/20260802T073627_product_feeds_runs.d.ts.map +1 -0
  477. package/dist/migrations/20260802T073627_product_feeds_runs.js +133 -0
  478. package/dist/migrations/20260802T073627_product_feeds_runs.js.map +1 -0
  479. package/dist/migrations/20260802T110630_product_feeds_taxonomies.d.ts +31 -0
  480. package/dist/migrations/20260802T110630_product_feeds_taxonomies.d.ts.map +1 -0
  481. package/dist/migrations/20260802T110630_product_feeds_taxonomies.js +99 -0
  482. package/dist/migrations/20260802T110630_product_feeds_taxonomies.js.map +1 -0
  483. package/dist/migrations/20260803T060153_product_feeds_taxonomy_refresh.d.ts +33 -0
  484. package/dist/migrations/20260803T060153_product_feeds_taxonomy_refresh.d.ts.map +1 -0
  485. package/dist/migrations/20260803T060153_product_feeds_taxonomy_refresh.js +93 -0
  486. package/dist/migrations/20260803T060153_product_feeds_taxonomy_refresh.js.map +1 -0
  487. package/dist/migrations/20260804T152741_product_feeds_widen_issue_sku.d.ts +26 -0
  488. package/dist/migrations/20260804T152741_product_feeds_widen_issue_sku.d.ts.map +1 -0
  489. package/dist/migrations/20260804T152741_product_feeds_widen_issue_sku.js +45 -0
  490. package/dist/migrations/20260804T152741_product_feeds_widen_issue_sku.js.map +1 -0
  491. package/dist/migrations/20260806T105956_product_feeds_feed_token_secret.d.ts +32 -0
  492. package/dist/migrations/20260806T105956_product_feeds_feed_token_secret.d.ts.map +1 -0
  493. package/dist/migrations/20260806T105956_product_feeds_feed_token_secret.js +36 -0
  494. package/dist/migrations/20260806T105956_product_feeds_feed_token_secret.js.map +1 -0
  495. package/dist/migrations/20260806T125806_product_feeds_delivery.d.ts +34 -0
  496. package/dist/migrations/20260806T125806_product_feeds_delivery.d.ts.map +1 -0
  497. package/dist/migrations/20260806T125806_product_feeds_delivery.js +99 -0
  498. package/dist/migrations/20260806T125806_product_feeds_delivery.js.map +1 -0
  499. package/dist/migrations/index.d.ts +35 -0
  500. package/dist/migrations/index.d.ts.map +1 -0
  501. package/dist/migrations/index.js +43 -0
  502. package/dist/migrations/index.js.map +1 -0
  503. package/docs/product_feeds.md +537 -0
  504. package/i18n/en.json +622 -0
  505. package/i18n/pl.json +622 -0
  506. package/package.json +110 -3
  507. package/tailwind.css +14 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Endora sp. z o.o. and the Endora Commerce contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,66 @@
1
- # Temporary Holding Version
1
+ <!-- Generated by `pnpm --filter backend run manifests:generate`. Delete this line to take the file over; a README without it is never regenerated. -->
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ # @endora-commerce/mod-product-feeds
4
+
5
+ Publishes the catalogue of a sales channel as a provider-shaped feed file (Google Merchant Center, Meta, Amazon, eBay, Allegro) at a stable tokenised URL, on a per-feed schedule.
6
+
7
+ ## What this is
8
+
9
+ An **Endora Commerce module package**. Its module id is `product_feeds` — the identity of record in the platform's registries, in its migrations and in its setting, permission and translation codes.
10
+
11
+ A module is not imported by application code. The platform discovers the extension packages an instance has installed, reads the manifest on the root subpath and composes the module from it, so installing this package and starting the instance is the whole integration.
12
+
13
+ ## Entry points
14
+
15
+ | Import | Contents |
16
+ | --- | --- |
17
+ | `@endora-commerce/mod-product-feeds` | the module manifest — its id, version, dependencies, settings and activation |
18
+ | `@endora-commerce/mod-product-feeds/admin` | the Admin UI contribution: the screens, navigation and palette actions it adds |
19
+ | `@endora-commerce/mod-product-feeds/backend` | the composition root the platform calls, with the entities, services, routes and workers it registers |
20
+ | `@endora-commerce/mod-product-feeds/migrations` | the module’s own schema migrations, in the order the platform runs them |
21
+ | `@endora-commerce/mod-product-feeds/tailwind.css` | the Tailwind source declaration for the admin code above |
22
+
23
+ ## Depends on
24
+
25
+ Everything below is a **peer** dependency, so the application resolves exactly one copy of each — two copies of a host or of React are a runtime failure rather than a type error. An entry marked *optional* is needed only by the layers that use it.
26
+
27
+ **Endora packages**
28
+
29
+ - `@endora-commerce/admin-kit` — *optional*
30
+ - `@endora-commerce/contracts`
31
+ - `@endora-commerce/platform`
32
+
33
+ **Third-party**
34
+
35
+ - `@fastify/rate-limit` ^10
36
+ - `@mikro-orm/core` ^6
37
+ - `@mikro-orm/migrations` ^6
38
+ - `@mikro-orm/postgresql` ^6
39
+ - `@types/ssh2-sftp-client` ^9
40
+ - `basic-ftp` ^6
41
+ - `bullmq` ^5
42
+ - `exceljs` ^4
43
+ - `fastify` ^5
44
+ - `ioredis` ^5
45
+ - `lucide-react` ^1 — *optional*
46
+ - `react` ^19 — *optional*
47
+ - `react-router-dom` ^7 — *optional*
48
+ - `ssh2-sftp-client` ^12
49
+ - `zod` ^4
50
+
51
+ ## What the tarball carries
52
+
53
+ - `dist/` — the compiled JavaScript and its type declarations
54
+ - `i18n/` — the translation bundles this package ships (`en`, `pl`), loaded by the platform
55
+ - `docs/` — the package’s own pages in the Endora Commerce documentation site
56
+ - `tailwind.css` — the Tailwind source declaration
57
+
58
+ ## Install
59
+
60
+ ```bash
61
+ pnpm add @endora-commerce/mod-product-feeds
62
+ ```
63
+
64
+ ## Licence
65
+
66
+ MIT — the text is in `LICENSE`, beside this file.
@@ -0,0 +1,445 @@
1
+ import type { FeedDeliveryAttempt, FeedDeliveryConfig, FeedDeliveryFailureReason, FeedFieldSourceCatalogue, FeedFieldSourceKind, FeedFieldTransform, FeedOutputFormat, FeedItemGranularity, FeedProviderCode, FeedRunStatus, FeedRunTrigger, FeedPricePresentation, ProductSelectionRule, SalesChannelDetail, SalesChannelListResponse, TaxonomyProviderCode, UpsertFeedDeliveryRequest } from '@endora-commerce/contracts';
2
+ export interface FeedTokenView {
3
+ prefix: string | null;
4
+ rotatedAt: string | null;
5
+ revokedAt: string | null;
6
+ /**
7
+ * The feed's absolute public URL, or null when revoked. It is the real,
8
+ * working link whenever {@link urlIsLive} is true; otherwise it is a masked
9
+ * display form built from the prefix.
10
+ */
11
+ url: string | null;
12
+ /**
13
+ * False for tokens issued before the plaintext became recoverable, and on a
14
+ * deployment with no encryption key. The card must not offer to copy a URL
15
+ * that would 404.
16
+ */
17
+ urlIsLive: boolean;
18
+ }
19
+ export interface FeedRunSummary {
20
+ id: string;
21
+ status: FeedRunStatus;
22
+ trigger: FeedRunTrigger;
23
+ startedAt: string | null;
24
+ finishedAt: string | null;
25
+ emittedCount: number;
26
+ skippedCount: number;
27
+ warningCount: number;
28
+ failureCode: string | null;
29
+ }
30
+ /**
31
+ * FR-054 — one item-level skip or warning.
32
+ *
33
+ * `sku` is a **snapshot** taken when the run happened, and `productId` carries
34
+ * no foreign key, so the row stays readable after the product is renamed or
35
+ * deleted. The run detail therefore never links a SKU to a product page it
36
+ * cannot promise still exists.
37
+ */
38
+ export interface FeedRunIssueDto {
39
+ id: string;
40
+ severity: 'skip' | 'warning';
41
+ reason: string;
42
+ productId: string | null;
43
+ variantId: string | null;
44
+ sku: string | null;
45
+ outputName: string | null;
46
+ detail: string | null;
47
+ }
48
+ export interface FeedRunDetail extends FeedRunSummary {
49
+ productFeedId: string;
50
+ triggeredByAdminUserId: string | null;
51
+ consideredCount: number;
52
+ durationMs: number | null;
53
+ failureDetail: string | null;
54
+ skipReason: string | null;
55
+ issueOverflow: boolean;
56
+ artefact: {
57
+ id: string;
58
+ byteSize: number;
59
+ itemCount: number;
60
+ contentType: string;
61
+ producedAt: string;
62
+ isPublished: boolean;
63
+ } | null;
64
+ createdAt: string;
65
+ }
66
+ export interface ProductFeedDto {
67
+ id: string;
68
+ name: string;
69
+ slug: string;
70
+ feedTemplateId: string;
71
+ feedTemplateName: string;
72
+ salesChannelId: string;
73
+ salesChannelCode: string;
74
+ languageCode: string;
75
+ currencyCode: string;
76
+ priceListId: string | null;
77
+ pricePresentation: FeedPricePresentation;
78
+ taxCountry: string | null;
79
+ selectionRule: ProductSelectionRule;
80
+ schedule: {
81
+ cron: string;
82
+ timezone: string;
83
+ } | null;
84
+ enabled: boolean;
85
+ token: FeedTokenView;
86
+ lastRun: FeedRunSummary | null;
87
+ nextRunAt: string | null;
88
+ publishedArtefactId: string | null;
89
+ publishedItemCount: number | null;
90
+ publishedAt: string | null;
91
+ isRunning: boolean;
92
+ scheduleTooTightWarning: boolean;
93
+ version: number;
94
+ createdAt: string;
95
+ updatedAt: string;
96
+ }
97
+ export interface IssuedFeedToken {
98
+ token: string;
99
+ url: string;
100
+ prefix: string;
101
+ rotatedAt: string;
102
+ }
103
+ export interface FeedTemplateSummary {
104
+ id: string;
105
+ name: string;
106
+ description: string | null;
107
+ providerCode: FeedProviderCode;
108
+ outputFormat: FeedOutputFormat;
109
+ itemGranularity: FeedItemGranularity;
110
+ taxonomyProviderCode: TaxonomyProviderCode | null;
111
+ isSystem: boolean;
112
+ systemCode: string | null;
113
+ usedByFeedCount: number;
114
+ fieldCount: number;
115
+ version: number;
116
+ updatedAt: string;
117
+ }
118
+ export interface FeedTemplateFieldDto {
119
+ id: string;
120
+ outputName: string;
121
+ sourceKind: FeedFieldSourceKind;
122
+ sourceKey: string | null;
123
+ constantValue: string | null;
124
+ fallbackValue: string | null;
125
+ providerRequired: boolean;
126
+ transform: FeedFieldTransform | null;
127
+ transformArg: string | null;
128
+ sortOrder: number;
129
+ helpKey: string | null;
130
+ unbound: boolean;
131
+ }
132
+ export interface FeedTemplateDetail extends FeedTemplateSummary {
133
+ fields: FeedTemplateFieldDto[];
134
+ }
135
+ /** FR-074 — what the operator has to acknowledge before a save goes through. */
136
+ export interface TemplateSaveWarning {
137
+ code: 'provider_required_field_removed';
138
+ outputName: string;
139
+ }
140
+ export interface TemplateWriteBody {
141
+ name?: string;
142
+ description?: string | null;
143
+ providerCode?: FeedProviderCode;
144
+ outputFormat?: FeedOutputFormat;
145
+ itemGranularity?: FeedItemGranularity;
146
+ taxonomyProviderCode?: TaxonomyProviderCode | null;
147
+ fields?: Array<Record<string, unknown>>;
148
+ }
149
+ /** FR-072 — the resolved value of one field for the operator's sample product. */
150
+ export interface TemplatePreviewField {
151
+ outputName: string;
152
+ value: string | null;
153
+ resolvedFrom: 'source' | 'fallback' | 'omitted';
154
+ wouldSkipItem: boolean;
155
+ issueReason: string | null;
156
+ unbound: boolean;
157
+ helpKey: string | null;
158
+ }
159
+ export interface TemplatePreview {
160
+ fields: TemplatePreviewField[];
161
+ wouldEmitItem: boolean;
162
+ skipReason: string | null;
163
+ renderedItem: string;
164
+ resolvedContext: {
165
+ salesChannelId: string;
166
+ languageCode: string;
167
+ currencyCode: string;
168
+ priceListId: string | null;
169
+ pricePresentation: FeedPricePresentation;
170
+ taxCountry: string | null;
171
+ };
172
+ }
173
+ export interface CreateFeedBody {
174
+ name: string;
175
+ slug: string;
176
+ feedTemplateId: string;
177
+ salesChannelId: string;
178
+ languageCode: string;
179
+ currencyCode: string;
180
+ pricePresentation?: FeedPricePresentation;
181
+ taxCountry?: string | null;
182
+ }
183
+ export interface UpdateFeedBody {
184
+ name?: string;
185
+ enabled?: boolean;
186
+ pricePresentation?: FeedPricePresentation;
187
+ taxCountry?: string | null;
188
+ priceListId?: string | null;
189
+ selectionRule?: ProductSelectionRule;
190
+ /** `null` clears the schedule; the server removes the Job Scheduler after commit. */
191
+ schedule?: {
192
+ cron: string;
193
+ timezone: string;
194
+ } | null;
195
+ }
196
+ /**
197
+ * FR-012 — the portability envelope, exactly as a file on disk carries it.
198
+ *
199
+ * Typed loosely on purpose: the browser has just read this out of a file the
200
+ * operator was handed, so the admin must not pretend to know its shape. The
201
+ * server is the only place that parses it (`feedTemplateDocumentSchema`), and
202
+ * the admin's job is to hand it over unmodified and render the refusal.
203
+ */
204
+ export type FeedTemplateDocumentBody = Record<string, unknown>;
205
+ /** FR-015 — a binding the target installation could not resolve. */
206
+ export interface UnresolvedBinding {
207
+ outputName: string;
208
+ sourceKind: FeedFieldSourceKind;
209
+ sourceKey: string;
210
+ }
211
+ /** FR-028 — the match count for an **unsaved** criteria set. Never takes a feed id. */
212
+ export interface SelectionPreview {
213
+ matchedCount: number;
214
+ sample: Array<{
215
+ id: string;
216
+ sku: string;
217
+ name: string;
218
+ }>;
219
+ }
220
+ /**
221
+ * The largest page `listQuerySchema` accepts (`packages/contracts/src/pagination.ts`).
222
+ * Exported so the run-detail page can tell "this run had 200 problems" from
223
+ * "this run had more problems than one page holds" — a full page means the
224
+ * list is truncated and the CSV export is the only complete view.
225
+ */
226
+ export declare const RUN_ISSUE_PAGE_LIMIT = 200;
227
+ export declare const productFeedsClient: {
228
+ list(limit?: number): Promise<{
229
+ data: ProductFeedDto[];
230
+ }>;
231
+ get(id: string): Promise<{
232
+ data: ProductFeedDto;
233
+ }>;
234
+ create(body: CreateFeedBody): Promise<{
235
+ data: {
236
+ feed: ProductFeedDto;
237
+ issuedToken: IssuedFeedToken;
238
+ };
239
+ }>;
240
+ update(id: string, body: UpdateFeedBody): Promise<{
241
+ data: ProductFeedDto;
242
+ }>;
243
+ duplicate(id: string, body: {
244
+ name: string;
245
+ slug: string;
246
+ }): Promise<{
247
+ data: {
248
+ feed: ProductFeedDto;
249
+ issuedToken: IssuedFeedToken;
250
+ };
251
+ }>;
252
+ remove(id: string): Promise<void>;
253
+ generate(id: string): Promise<{
254
+ data: {
255
+ runId: string;
256
+ status: "queued";
257
+ };
258
+ }>;
259
+ rotateToken(id: string): Promise<{
260
+ data: IssuedFeedToken;
261
+ }>;
262
+ revokeToken(id: string): Promise<{
263
+ data: ProductFeedDto;
264
+ }>;
265
+ listRuns(id: string, limit?: number): Promise<{
266
+ data: FeedRunDetail[];
267
+ }>;
268
+ getRun(id: string, runId: string): Promise<{
269
+ data: FeedRunDetail;
270
+ }>;
271
+ /**
272
+ * FR-054 — the per-item diagnostics. `:read`, deliberately: a read-only
273
+ * operator has to be able to answer "why were 61 products left out" without
274
+ * being handed the priced catalogue the artefact carries.
275
+ *
276
+ * Capped at `RUN_ISSUE_PAGE_LIMIT`: the shared `listQuerySchema` rejects
277
+ * anything larger, and the run-detail page loads this alongside the feed and
278
+ * the run in one `Promise.all`, so a 400 here hid the whole run.
279
+ */
280
+ listRunIssues(id: string, runId: string, limit?: number): Promise<{
281
+ data: FeedRunIssueDto[];
282
+ }>;
283
+ /** Absolute URL of the admin download. Gated on `product_feeds:write`. */
284
+ artefactUrl(id: string): string;
285
+ /** The file one specific run produced, which may not be the published one. */
286
+ runArtefactUrl(id: string, runId: string): string;
287
+ /** The complete recorded issue list as CSV. `:write` — it names every SKU. */
288
+ runIssueExportUrl(id: string, runId: string): string;
289
+ /**
290
+ * Match count for a criteria set the operator has not saved yet (FR-028).
291
+ * Draft-shaped on purpose — a channel and a rule, no feed id — so it answers
292
+ * on `/product-feeds/new` too. Side-effect-free.
293
+ */
294
+ previewSelection(input: {
295
+ salesChannelId: string;
296
+ selectionRule: ProductSelectionRule;
297
+ }): Promise<{
298
+ data: SelectionPreview;
299
+ }>;
300
+ listTemplates(): Promise<{
301
+ data: FeedTemplateSummary[];
302
+ }>;
303
+ getTemplate(id: string): Promise<{
304
+ data: FeedTemplateDetail;
305
+ }>;
306
+ createTemplate(body: TemplateWriteBody): Promise<{
307
+ data: FeedTemplateDetail;
308
+ }>;
309
+ /**
310
+ * The whole ordered field list is saved at once (contract §2), guarded by the
311
+ * version the editor loaded — so fifteen minutes of work is never silently
312
+ * overwritten, and never silently overwrites (FR-076).
313
+ */
314
+ updateTemplate(id: string, version: number, body: TemplateWriteBody, options?: {
315
+ acknowledgeWarnings?: boolean;
316
+ }): Promise<{
317
+ data: FeedTemplateDetail;
318
+ warnings: TemplateSaveWarning[];
319
+ }>;
320
+ duplicateTemplate(id: string, name: string): Promise<{
321
+ data: FeedTemplateDetail;
322
+ }>;
323
+ removeTemplate(id: string, version: number): Promise<void>;
324
+ /** FR-070 — everything the operator may bind to, on this installation. */
325
+ listFieldSources(): Promise<{
326
+ data: FeedFieldSourceCatalogue;
327
+ }>;
328
+ /**
329
+ * FR-012 — the portability document, as a download.
330
+ *
331
+ * An absolute URL rather than a fetch: the document is a file the operator
332
+ * hands to another installation, so the browser's own download machinery
333
+ * (filename from `Content-Disposition`, no blob in memory) is the right one.
334
+ */
335
+ templateExportUrl(id: string): string;
336
+ /**
337
+ * FR-014 – FR-018. `onNameConflict` is deliberately absent on the first
338
+ * attempt: the server refuses a collision rather than guessing, and the
339
+ * operator is shown the choice before anything is written.
340
+ */
341
+ importTemplate(document: FeedTemplateDocumentBody, onNameConflict?: "create_copy" | "replace"): Promise<{
342
+ data: {
343
+ template: FeedTemplateDetail;
344
+ unresolvedBindings: UnresolvedBinding[];
345
+ };
346
+ }>;
347
+ /**
348
+ * FR-072 — evaluates the draft **on screen**, never a saved template id, so
349
+ * the operator never has to save a broken intermediate state to see a value.
350
+ */
351
+ previewTemplate(input: {
352
+ baseTemplateId?: string;
353
+ draft: {
354
+ providerCode: FeedProviderCode;
355
+ outputFormat: FeedOutputFormat;
356
+ itemGranularity: FeedItemGranularity;
357
+ taxonomyProviderCode: TaxonomyProviderCode | null;
358
+ fields: Array<Record<string, unknown>>;
359
+ };
360
+ context?: Record<string, unknown>;
361
+ productId: string;
362
+ variantId?: string;
363
+ }): Promise<{
364
+ data: TemplatePreview;
365
+ }>;
366
+ };
367
+ /**
368
+ * Kebab-cases a feed name into a slug candidate, the way the operator expects.
369
+ *
370
+ * The generator is `slugify` from `@endora-commerce/contracts`, **imported, never
371
+ * re-implemented** (issues #239, #245). !753 repaired the fold here by
372
+ * composing `lib/text-normalization.ts`; issue #245 found seven more copies of
373
+ * the same four-line chain and moved the whole thing — fold, collapse, cut,
374
+ * trim, fallback — into one function the backend, the admin and the storefront
375
+ * all import.
376
+ *
377
+ * The private one-liner this started as deleted `ł` instead of folding it:
378
+ * U+0142 has no canonical decomposition, so NFD left it standing and the
379
+ * `[^a-z0-9]` collapse swallowed it. `Kanał sprzedaży` produced
380
+ * `kana-sprzedazy`, a slug missing a letter for no reason the operator can see.
381
+ *
382
+ * **The shared generator is NFD, not NFKD, deliberately.** The compatibility
383
+ * mappings NFKD adds only reach a slug through characters that map *into*
384
+ * `[a-z0-9]` — the `fi` ligature, superscript digits, full-width forms. None of
385
+ * them is typed into a feed name, and where one is, it now collapses to the `-`
386
+ * separator rather than to a wrong letter, so the slug stays legal. That is a
387
+ * much smaller loss than deleting a letter out of every Polish name.
388
+ *
389
+ * The 160-character cut is this caller's own and is passed explicitly: the
390
+ * eight callers cap at 80, 150, 160, 180 or not at all, and a cap decides which
391
+ * new values collide under that caller's constraint.
392
+ *
393
+ * Slugs already published are **not** migrated (owner's ruling, 2026-08-19).
394
+ * A feed's slug is a URL somebody may have handed to Google; re-folding it is
395
+ * a rename, and with two developer environments in existence it buys nothing.
396
+ * New slugs are correct from here on.
397
+ */
398
+ export declare function slugify(value: string): string;
399
+ /**
400
+ * The delivery surface, split out from `productFeedsClient` because it is a
401
+ * separable capability: a deployment wired without the credentials module has
402
+ * no delivery routes at all, and the screen has to render that as "unavailable"
403
+ * rather than as a broken tab.
404
+ *
405
+ * The DTO types come from `@endora-commerce/contracts` — every secret on them is already a
406
+ * boolean, so there is nothing here to be careful about beyond not inventing a
407
+ * field the server does not send.
408
+ */
409
+ export declare const feedDeliveryClient: {
410
+ /** `null` data means this feed has no delivery configured, which is a state. */
411
+ get(feedId: string): Promise<{
412
+ data: FeedDeliveryConfig | null;
413
+ }>;
414
+ save(feedId: string, body: UpsertFeedDeliveryRequest): Promise<{
415
+ data: FeedDeliveryConfig;
416
+ }>;
417
+ remove(feedId: string): Promise<void>;
418
+ /** FR-106. Rate-limited server-side; a 429 is the expected refusal. */
419
+ test(feedId: string): Promise<{
420
+ data: {
421
+ ok: boolean;
422
+ failureReason: FeedDeliveryFailureReason | null;
423
+ failureDetail: string | null;
424
+ attempt: FeedDeliveryAttempt;
425
+ };
426
+ }>;
427
+ listAttempts(feedId: string, limit?: number): Promise<{
428
+ data: FeedDeliveryAttempt[];
429
+ }>;
430
+ };
431
+ export declare const feedSalesChannelReads: {
432
+ /**
433
+ * The channel list the create form resolves the picked id against.
434
+ *
435
+ * `pageSize` is the caller's, because the form asks for 200 in one request
436
+ * rather than paging a picker it has already rendered.
437
+ */
438
+ list(pageSize: number): Promise<SalesChannelListResponse>;
439
+ /**
440
+ * One channel in full — the form needs `languages`, `defaultLanguage` and
441
+ * `defaultCurrency`, which the summary does not carry.
442
+ */
443
+ getByCode(code: string): Promise<SalesChannelDetail>;
444
+ };
445
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/admin/api.ts"],"names":[],"mappings":"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"}