@oronts/vendure-data-hub-plugin 0.1.3 → 0.1.5

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 (491) hide show
  1. package/CHANGELOG.md +46 -1
  2. package/README.md +30 -8
  3. package/dashboard/components/pipelines/PipelineEditor.tsx +159 -5
  4. package/dashboard/components/pipelines/ReactFlowPipelineEditor.tsx +3 -3
  5. package/dashboard/components/pipelines/shared/NodePropertiesPanel.tsx +42 -4
  6. package/dashboard/components/pipelines/shared/StepListItem.tsx +2 -2
  7. package/dashboard/components/shared/CodeEditor.tsx +289 -0
  8. package/dashboard/components/shared/schema-form/fields/TextareaField.tsx +19 -4
  9. package/dashboard/components/shared/step-config/AdapterSelector.tsx +2 -2
  10. package/dashboard/components/shared/step-config/OperatorFieldInput.tsx +19 -0
  11. package/dashboard/components/shared/step-config/RouteConfigComponent.tsx +218 -29
  12. package/dashboard/components/shared/step-config/StepConfigPanel.tsx +37 -17
  13. package/dashboard/components/shared/step-config/ValidateConfigComponent.tsx +2 -2
  14. package/dashboard/constants/ui-dimensions.ts +2 -1
  15. package/dashboard/constants/ui-states.ts +1 -0
  16. package/dashboard/gql/graphql.ts +13 -1
  17. package/dashboard/hooks/use-adapter-catalog.ts +4 -32
  18. package/dashboard/routes/connections/ConnectionDetail.tsx +7 -1
  19. package/dashboard/routes/pipelines/RunDetailsPanel.tsx +1 -1
  20. package/dashboard/routes/pipelines/components/PipelineActionButtons.tsx +3 -3
  21. package/dashboard/routes/pipelines/utils/pipeline-conversion.ts +3 -5
  22. package/dashboard/utils/formatters.ts +6 -4
  23. package/dist/dashboard/components/pipelines/PipelineEditor.tsx +159 -5
  24. package/dist/dashboard/components/pipelines/ReactFlowPipelineEditor.tsx +3 -3
  25. package/dist/dashboard/components/pipelines/shared/NodePropertiesPanel.tsx +42 -4
  26. package/dist/dashboard/components/pipelines/shared/StepListItem.tsx +2 -2
  27. package/dist/dashboard/components/shared/CodeEditor.tsx +289 -0
  28. package/dist/dashboard/components/shared/schema-form/fields/TextareaField.tsx +19 -4
  29. package/dist/dashboard/components/shared/step-config/AdapterSelector.tsx +2 -2
  30. package/dist/dashboard/components/shared/step-config/OperatorFieldInput.tsx +19 -0
  31. package/dist/dashboard/components/shared/step-config/RouteConfigComponent.tsx +218 -29
  32. package/dist/dashboard/components/shared/step-config/StepConfigPanel.tsx +37 -17
  33. package/dist/dashboard/components/shared/step-config/ValidateConfigComponent.tsx +2 -2
  34. package/dist/dashboard/constants/ui-dimensions.ts +2 -1
  35. package/dist/dashboard/constants/ui-states.ts +1 -0
  36. package/dist/dashboard/gql/graphql.ts +13 -1
  37. package/dist/dashboard/hooks/use-adapter-catalog.ts +4 -32
  38. package/dist/dashboard/routes/connections/ConnectionDetail.tsx +7 -1
  39. package/dist/dashboard/routes/pipelines/RunDetailsPanel.tsx +1 -1
  40. package/dist/dashboard/routes/pipelines/components/PipelineActionButtons.tsx +3 -3
  41. package/dist/dashboard/routes/pipelines/utils/pipeline-conversion.ts +3 -5
  42. package/dist/dashboard/utils/formatters.ts +6 -4
  43. package/dist/shared/types/adapter-config.types.d.ts +148 -4
  44. package/dist/shared/types/adapter-config.types.d.ts.map +1 -1
  45. package/dist/shared/types/index.d.ts +1 -1
  46. package/dist/shared/types/index.d.ts.map +1 -1
  47. package/dist/shared/types/index.js.map +1 -1
  48. package/dist/shared/types/loader.types.d.ts +4 -0
  49. package/dist/shared/types/loader.types.d.ts.map +1 -1
  50. package/dist/shared/types/step.types.d.ts +6 -0
  51. package/dist/shared/types/step.types.d.ts.map +1 -1
  52. package/dist/shared/types/trigger.types.d.ts +0 -4
  53. package/dist/shared/types/trigger.types.d.ts.map +1 -1
  54. package/dist/src/adapters/registry.d.ts.map +1 -1
  55. package/dist/src/adapters/registry.js +2 -1
  56. package/dist/src/adapters/registry.js.map +1 -1
  57. package/dist/src/api/controllers/webhook.controller.d.ts +10 -0
  58. package/dist/src/api/controllers/webhook.controller.d.ts.map +1 -1
  59. package/dist/src/api/controllers/webhook.controller.js +50 -10
  60. package/dist/src/api/controllers/webhook.controller.js.map +1 -1
  61. package/dist/src/api/resolvers/queue.resolver.d.ts +3 -1
  62. package/dist/src/api/resolvers/queue.resolver.d.ts.map +1 -1
  63. package/dist/src/api/resolvers/queue.resolver.js +6 -5
  64. package/dist/src/api/resolvers/queue.resolver.js.map +1 -1
  65. package/dist/src/api/schema/pipeline.schema.d.ts +1 -1
  66. package/dist/src/api/schema/pipeline.schema.d.ts.map +1 -1
  67. package/dist/src/api/schema/pipeline.schema.js +4 -0
  68. package/dist/src/api/schema/pipeline.schema.js.map +1 -1
  69. package/dist/src/api/schema/test.schema.d.ts +1 -1
  70. package/dist/src/api/schema/test.schema.d.ts.map +1 -1
  71. package/dist/src/api/schema/test.schema.js +5 -1
  72. package/dist/src/api/schema/test.schema.js.map +1 -1
  73. package/dist/src/bootstrap/seed-data.js +1 -1
  74. package/dist/src/bootstrap/seed-data.js.map +1 -1
  75. package/dist/src/constants/adapter-schema-options.d.ts +65 -0
  76. package/dist/src/constants/adapter-schema-options.d.ts.map +1 -1
  77. package/dist/src/constants/adapter-schema-options.js +91 -7
  78. package/dist/src/constants/adapter-schema-options.js.map +1 -1
  79. package/dist/src/constants/builtin-adapters.d.ts +1 -1
  80. package/dist/src/constants/builtin-adapters.d.ts.map +1 -1
  81. package/dist/src/constants/builtin-adapters.js +19 -1
  82. package/dist/src/constants/builtin-adapters.js.map +1 -1
  83. package/dist/src/constants/core.d.ts +10 -0
  84. package/dist/src/constants/core.d.ts.map +1 -1
  85. package/dist/src/constants/core.js +10 -0
  86. package/dist/src/constants/core.js.map +1 -1
  87. package/dist/src/constants/defaults/webhook-defaults.d.ts +2 -0
  88. package/dist/src/constants/defaults/webhook-defaults.d.ts.map +1 -1
  89. package/dist/src/constants/defaults/webhook-defaults.js +2 -0
  90. package/dist/src/constants/defaults/webhook-defaults.js.map +1 -1
  91. package/dist/src/constants/enum-metadata.d.ts.map +1 -1
  92. package/dist/src/constants/enum-metadata.js +3 -0
  93. package/dist/src/constants/enum-metadata.js.map +1 -1
  94. package/dist/src/constants/hook-stage-metadata.d.ts.map +1 -1
  95. package/dist/src/constants/hook-stage-metadata.js +42 -0
  96. package/dist/src/constants/hook-stage-metadata.js.map +1 -1
  97. package/dist/src/constants/services.d.ts.map +1 -1
  98. package/dist/src/constants/services.js +7 -0
  99. package/dist/src/constants/services.js.map +1 -1
  100. package/dist/src/constants/time.d.ts +2 -0
  101. package/dist/src/constants/time.d.ts.map +1 -1
  102. package/dist/src/constants/time.js +2 -0
  103. package/dist/src/constants/time.js.map +1 -1
  104. package/dist/src/data-hub.plugin.d.ts.map +1 -1
  105. package/dist/src/data-hub.plugin.js +2 -2
  106. package/dist/src/data-hub.plugin.js.map +1 -1
  107. package/dist/src/entities/pipeline/pipeline-run.entity.d.ts +4 -0
  108. package/dist/src/entities/pipeline/pipeline-run.entity.d.ts.map +1 -1
  109. package/dist/src/entities/pipeline/pipeline-run.entity.js +8 -0
  110. package/dist/src/entities/pipeline/pipeline-run.entity.js.map +1 -1
  111. package/dist/src/extractors/cdc/cdc.extractor.d.ts.map +1 -1
  112. package/dist/src/extractors/cdc/cdc.extractor.js +7 -2
  113. package/dist/src/extractors/cdc/cdc.extractor.js.map +1 -1
  114. package/dist/src/extractors/cdc/types.d.ts +1 -1
  115. package/dist/src/extractors/cdc/types.d.ts.map +1 -1
  116. package/dist/src/extractors/extractor-handler-registry.d.ts.map +1 -1
  117. package/dist/src/extractors/extractor-handler-registry.js +3 -0
  118. package/dist/src/extractors/extractor-handler-registry.js.map +1 -1
  119. package/dist/src/extractors/vendure-query/helpers.d.ts +9 -4
  120. package/dist/src/extractors/vendure-query/helpers.d.ts.map +1 -1
  121. package/dist/src/extractors/vendure-query/helpers.js +98 -32
  122. package/dist/src/extractors/vendure-query/helpers.js.map +1 -1
  123. package/dist/src/extractors/vendure-query/schema.d.ts.map +1 -1
  124. package/dist/src/extractors/vendure-query/schema.js +13 -0
  125. package/dist/src/extractors/vendure-query/schema.js.map +1 -1
  126. package/dist/src/feeds/generators/csv-feed.generator.d.ts.map +1 -1
  127. package/dist/src/feeds/generators/csv-feed.generator.js +5 -4
  128. package/dist/src/feeds/generators/csv-feed.generator.js.map +1 -1
  129. package/dist/src/feeds/generators/facebook-catalog.generator.d.ts.map +1 -1
  130. package/dist/src/feeds/generators/facebook-catalog.generator.js +83 -114
  131. package/dist/src/feeds/generators/facebook-catalog.generator.js.map +1 -1
  132. package/dist/src/feeds/generators/feed-constants.d.ts +1 -0
  133. package/dist/src/feeds/generators/feed-constants.d.ts.map +1 -1
  134. package/dist/src/feeds/generators/feed-constants.js +1 -0
  135. package/dist/src/feeds/generators/feed-constants.js.map +1 -1
  136. package/dist/src/feeds/generators/feed-helpers.d.ts +10 -8
  137. package/dist/src/feeds/generators/feed-helpers.d.ts.map +1 -1
  138. package/dist/src/feeds/generators/feed-helpers.js +24 -4
  139. package/dist/src/feeds/generators/feed-helpers.js.map +1 -1
  140. package/dist/src/feeds/generators/feed-item-builder.d.ts +59 -0
  141. package/dist/src/feeds/generators/feed-item-builder.d.ts.map +1 -0
  142. package/dist/src/feeds/generators/feed-item-builder.js +93 -0
  143. package/dist/src/feeds/generators/feed-item-builder.js.map +1 -0
  144. package/dist/src/feeds/generators/google-shopping.generator.d.ts.map +1 -1
  145. package/dist/src/feeds/generators/google-shopping.generator.js +52 -64
  146. package/dist/src/feeds/generators/google-shopping.generator.js.map +1 -1
  147. package/dist/src/feeds/generators/json-feed.generator.d.ts.map +1 -1
  148. package/dist/src/feeds/generators/json-feed.generator.js +4 -3
  149. package/dist/src/feeds/generators/json-feed.generator.js.map +1 -1
  150. package/dist/src/feeds/generators/xml-feed.generator.d.ts.map +1 -1
  151. package/dist/src/feeds/generators/xml-feed.generator.js +6 -5
  152. package/dist/src/feeds/generators/xml-feed.generator.js.map +1 -1
  153. package/dist/src/gql/generated.d.ts +13 -1
  154. package/dist/src/gql/generated.d.ts.map +1 -1
  155. package/dist/src/gql/generated.js.map +1 -1
  156. package/dist/src/index.d.ts +3 -1
  157. package/dist/src/index.d.ts.map +1 -1
  158. package/dist/src/index.js +7 -4
  159. package/dist/src/index.js.map +1 -1
  160. package/dist/src/loaders/asset/asset.loader.d.ts.map +1 -1
  161. package/dist/src/loaders/asset/asset.loader.js +5 -1
  162. package/dist/src/loaders/asset/asset.loader.js.map +1 -1
  163. package/dist/src/loaders/base/validation-builder.d.ts +128 -3
  164. package/dist/src/loaders/base/validation-builder.d.ts.map +1 -1
  165. package/dist/src/loaders/base/validation-builder.js +177 -6
  166. package/dist/src/loaders/base/validation-builder.js.map +1 -1
  167. package/dist/src/loaders/collection/collection.loader.d.ts.map +1 -1
  168. package/dist/src/loaders/collection/collection.loader.js +22 -1
  169. package/dist/src/loaders/collection/collection.loader.js.map +1 -1
  170. package/dist/src/loaders/collection/helpers.d.ts +16 -1
  171. package/dist/src/loaders/collection/helpers.d.ts.map +1 -1
  172. package/dist/src/loaders/collection/helpers.js +37 -0
  173. package/dist/src/loaders/collection/helpers.js.map +1 -1
  174. package/dist/src/loaders/customer/customer.loader.d.ts.map +1 -1
  175. package/dist/src/loaders/customer/customer.loader.js +13 -1
  176. package/dist/src/loaders/customer/customer.loader.js.map +1 -1
  177. package/dist/src/loaders/customer/helpers.d.ts +15 -3
  178. package/dist/src/loaders/customer/helpers.d.ts.map +1 -1
  179. package/dist/src/loaders/customer/helpers.js +188 -7
  180. package/dist/src/loaders/customer/helpers.js.map +1 -1
  181. package/dist/src/loaders/facet-value/facet-value.loader.d.ts.map +1 -1
  182. package/dist/src/loaders/facet-value/facet-value.loader.js +18 -0
  183. package/dist/src/loaders/facet-value/facet-value.loader.js.map +1 -1
  184. package/dist/src/loaders/facet-value/types.d.ts +1 -1
  185. package/dist/src/loaders/facet-value/types.js +1 -1
  186. package/dist/src/loaders/facet-value/types.js.map +1 -1
  187. package/dist/src/loaders/order/helpers.d.ts +16 -2
  188. package/dist/src/loaders/order/helpers.d.ts.map +1 -1
  189. package/dist/src/loaders/order/helpers.js +108 -0
  190. package/dist/src/loaders/order/helpers.js.map +1 -1
  191. package/dist/src/loaders/order/order.loader.d.ts +38 -0
  192. package/dist/src/loaders/order/order.loader.d.ts.map +1 -1
  193. package/dist/src/loaders/order/order.loader.js +238 -24
  194. package/dist/src/loaders/order/order.loader.js.map +1 -1
  195. package/dist/src/loaders/order/types.d.ts +10 -3
  196. package/dist/src/loaders/order/types.d.ts.map +1 -1
  197. package/dist/src/loaders/order/types.js +13 -2
  198. package/dist/src/loaders/order/types.js.map +1 -1
  199. package/dist/src/loaders/product/product.loader.d.ts.map +1 -1
  200. package/dist/src/loaders/product/product.loader.js +18 -2
  201. package/dist/src/loaders/product/product.loader.js.map +1 -1
  202. package/dist/src/loaders/product-variant/helpers.d.ts +20 -0
  203. package/dist/src/loaders/product-variant/helpers.d.ts.map +1 -0
  204. package/dist/src/loaders/product-variant/helpers.js +103 -0
  205. package/dist/src/loaders/product-variant/helpers.js.map +1 -0
  206. package/dist/src/loaders/product-variant/product-variant.loader.d.ts.map +1 -1
  207. package/dist/src/loaders/product-variant/product-variant.loader.js +76 -10
  208. package/dist/src/loaders/product-variant/product-variant.loader.js.map +1 -1
  209. package/dist/src/loaders/product-variant/types.d.ts +7 -0
  210. package/dist/src/loaders/product-variant/types.d.ts.map +1 -1
  211. package/dist/src/loaders/product-variant/types.js.map +1 -1
  212. package/dist/src/loaders/promotion/helpers.d.ts +29 -0
  213. package/dist/src/loaders/promotion/helpers.d.ts.map +1 -1
  214. package/dist/src/loaders/promotion/helpers.js +68 -0
  215. package/dist/src/loaders/promotion/helpers.js.map +1 -1
  216. package/dist/src/loaders/promotion/promotion.loader.d.ts.map +1 -1
  217. package/dist/src/loaders/promotion/promotion.loader.js +12 -2
  218. package/dist/src/loaders/promotion/promotion.loader.js.map +1 -1
  219. package/dist/src/loaders/shared-helpers.d.ts +42 -2
  220. package/dist/src/loaders/shared-helpers.d.ts.map +1 -1
  221. package/dist/src/loaders/shared-helpers.js +384 -5
  222. package/dist/src/loaders/shared-helpers.js.map +1 -1
  223. package/dist/src/operators/data/copy.operator.js +2 -2
  224. package/dist/src/operators/data/copy.operator.js.map +1 -1
  225. package/dist/src/operators/data/rename.operator.js +1 -1
  226. package/dist/src/operators/data/rename.operator.js.map +1 -1
  227. package/dist/src/operators/helpers.d.ts.map +1 -1
  228. package/dist/src/operators/helpers.js +11 -1
  229. package/dist/src/operators/helpers.js.map +1 -1
  230. package/dist/src/operators/operator-runtime-registry.d.ts +2 -2
  231. package/dist/src/operators/operator-runtime-registry.d.ts.map +1 -1
  232. package/dist/src/operators/operator-runtime-registry.js +1 -1
  233. package/dist/src/operators/operator-runtime-registry.js.map +1 -1
  234. package/dist/src/operators/script/script.operators.d.ts.map +1 -1
  235. package/dist/src/operators/script/script.operators.js +9 -3
  236. package/dist/src/operators/script/script.operators.js.map +1 -1
  237. package/dist/src/runtime/config-types.d.ts +6 -0
  238. package/dist/src/runtime/config-types.d.ts.map +1 -1
  239. package/dist/src/runtime/executor-helpers.d.ts +77 -0
  240. package/dist/src/runtime/executor-helpers.d.ts.map +1 -0
  241. package/dist/src/runtime/executor-helpers.js +143 -0
  242. package/dist/src/runtime/executor-helpers.js.map +1 -0
  243. package/dist/src/runtime/executors/export.executor.d.ts +3 -1
  244. package/dist/src/runtime/executors/export.executor.d.ts.map +1 -1
  245. package/dist/src/runtime/executors/export.executor.js +15 -3
  246. package/dist/src/runtime/executors/export.executor.js.map +1 -1
  247. package/dist/src/runtime/executors/exporters/export-handler-registry.d.ts.map +1 -1
  248. package/dist/src/runtime/executors/exporters/export-handler-registry.js +5 -0
  249. package/dist/src/runtime/executors/exporters/export-handler-registry.js.map +1 -1
  250. package/dist/src/runtime/executors/exporters/export-handler.types.d.ts +3 -0
  251. package/dist/src/runtime/executors/exporters/export-handler.types.d.ts.map +1 -1
  252. package/dist/src/runtime/executors/exporters/export-handler.types.js.map +1 -1
  253. package/dist/src/runtime/executors/exporters/export-helpers.d.ts +1 -0
  254. package/dist/src/runtime/executors/exporters/export-helpers.d.ts.map +1 -1
  255. package/dist/src/runtime/executors/exporters/export-helpers.js +32 -3
  256. package/dist/src/runtime/executors/exporters/export-helpers.js.map +1 -1
  257. package/dist/src/runtime/executors/exporters/http-export.handler.js +4 -4
  258. package/dist/src/runtime/executors/exporters/http-export.handler.js.map +1 -1
  259. package/dist/src/runtime/executors/extractors/file-extract.handler.d.ts.map +1 -1
  260. package/dist/src/runtime/executors/extractors/file-extract.handler.js +33 -13
  261. package/dist/src/runtime/executors/extractors/file-extract.handler.js.map +1 -1
  262. package/dist/src/runtime/executors/extractors/memory-extract.handler.d.ts.map +1 -1
  263. package/dist/src/runtime/executors/extractors/memory-extract.handler.js +17 -9
  264. package/dist/src/runtime/executors/extractors/memory-extract.handler.js.map +1 -1
  265. package/dist/src/runtime/executors/feed.executor.d.ts.map +1 -1
  266. package/dist/src/runtime/executors/feed.executor.js +11 -2
  267. package/dist/src/runtime/executors/feed.executor.js.map +1 -1
  268. package/dist/src/runtime/executors/feeds/feed-handler-registry.d.ts.map +1 -1
  269. package/dist/src/runtime/executors/feeds/feed-handler-registry.js +4 -0
  270. package/dist/src/runtime/executors/feeds/feed-handler-registry.js.map +1 -1
  271. package/dist/src/runtime/executors/gate.executor.d.ts +3 -1
  272. package/dist/src/runtime/executors/gate.executor.d.ts.map +1 -1
  273. package/dist/src/runtime/executors/gate.executor.js +47 -26
  274. package/dist/src/runtime/executors/gate.executor.js.map +1 -1
  275. package/dist/src/runtime/executors/loaders/channel-handler.d.ts +3 -1
  276. package/dist/src/runtime/executors/loaders/channel-handler.d.ts.map +1 -1
  277. package/dist/src/runtime/executors/loaders/channel-handler.js +14 -4
  278. package/dist/src/runtime/executors/loaders/channel-handler.js.map +1 -1
  279. package/dist/src/runtime/executors/loaders/collection-handler.d.ts +14 -2
  280. package/dist/src/runtime/executors/loaders/collection-handler.d.ts.map +1 -1
  281. package/dist/src/runtime/executors/loaders/collection-handler.js +93 -22
  282. package/dist/src/runtime/executors/loaders/collection-handler.js.map +1 -1
  283. package/dist/src/runtime/executors/loaders/customer-group-handler.d.ts.map +1 -1
  284. package/dist/src/runtime/executors/loaders/customer-group-handler.js +2 -27
  285. package/dist/src/runtime/executors/loaders/customer-group-handler.js.map +1 -1
  286. package/dist/src/runtime/executors/loaders/customer-handler.d.ts +6 -1
  287. package/dist/src/runtime/executors/loaders/customer-handler.d.ts.map +1 -1
  288. package/dist/src/runtime/executors/loaders/customer-handler.js +95 -13
  289. package/dist/src/runtime/executors/loaders/customer-handler.js.map +1 -1
  290. package/dist/src/runtime/executors/loaders/deletion-handler.d.ts +39 -0
  291. package/dist/src/runtime/executors/loaders/deletion-handler.d.ts.map +1 -0
  292. package/dist/src/runtime/executors/loaders/deletion-handler.js +414 -0
  293. package/dist/src/runtime/executors/loaders/deletion-handler.js.map +1 -0
  294. package/dist/src/runtime/executors/loaders/facet-handler.d.ts +18 -3
  295. package/dist/src/runtime/executors/loaders/facet-handler.d.ts.map +1 -1
  296. package/dist/src/runtime/executors/loaders/facet-handler.js +127 -26
  297. package/dist/src/runtime/executors/loaders/facet-handler.js.map +1 -1
  298. package/dist/src/runtime/executors/loaders/index.d.ts +2 -0
  299. package/dist/src/runtime/executors/loaders/index.d.ts.map +1 -1
  300. package/dist/src/runtime/executors/loaders/index.js +5 -1
  301. package/dist/src/runtime/executors/loaders/index.js.map +1 -1
  302. package/dist/src/runtime/executors/loaders/inventory-adjust-handler.d.ts.map +1 -1
  303. package/dist/src/runtime/executors/loaders/inventory-adjust-handler.js +2 -28
  304. package/dist/src/runtime/executors/loaders/inventory-adjust-handler.js.map +1 -1
  305. package/dist/src/runtime/executors/loaders/inventory-handler.d.ts +2 -1
  306. package/dist/src/runtime/executors/loaders/inventory-handler.d.ts.map +1 -1
  307. package/dist/src/runtime/executors/loaders/inventory-handler.js +8 -6
  308. package/dist/src/runtime/executors/loaders/inventory-handler.js.map +1 -1
  309. package/dist/src/runtime/executors/loaders/loader-handler-registry.d.ts.map +1 -1
  310. package/dist/src/runtime/executors/loaders/loader-handler-registry.js +117 -3
  311. package/dist/src/runtime/executors/loaders/loader-handler-registry.js.map +1 -1
  312. package/dist/src/runtime/executors/loaders/order-handler.d.ts +31 -3
  313. package/dist/src/runtime/executors/loaders/order-handler.d.ts.map +1 -1
  314. package/dist/src/runtime/executors/loaders/order-handler.js +194 -14
  315. package/dist/src/runtime/executors/loaders/order-handler.js.map +1 -1
  316. package/dist/src/runtime/executors/loaders/order-upsert-handler.d.ts +15 -0
  317. package/dist/src/runtime/executors/loaders/order-upsert-handler.d.ts.map +1 -0
  318. package/dist/src/runtime/executors/loaders/order-upsert-handler.js +89 -0
  319. package/dist/src/runtime/executors/loaders/order-upsert-handler.js.map +1 -0
  320. package/dist/src/runtime/executors/loaders/payment-method-handler.d.ts +11 -2
  321. package/dist/src/runtime/executors/loaders/payment-method-handler.d.ts.map +1 -1
  322. package/dist/src/runtime/executors/loaders/payment-method-handler.js +78 -33
  323. package/dist/src/runtime/executors/loaders/payment-method-handler.js.map +1 -1
  324. package/dist/src/runtime/executors/loaders/product-handler.d.ts +14 -0
  325. package/dist/src/runtime/executors/loaders/product-handler.d.ts.map +1 -1
  326. package/dist/src/runtime/executors/loaders/product-handler.js +91 -19
  327. package/dist/src/runtime/executors/loaders/product-handler.js.map +1 -1
  328. package/dist/src/runtime/executors/loaders/promotion-handler.d.ts +9 -2
  329. package/dist/src/runtime/executors/loaders/promotion-handler.d.ts.map +1 -1
  330. package/dist/src/runtime/executors/loaders/promotion-handler.js +115 -68
  331. package/dist/src/runtime/executors/loaders/promotion-handler.js.map +1 -1
  332. package/dist/src/runtime/executors/loaders/shared-lookups.d.ts +35 -1
  333. package/dist/src/runtime/executors/loaders/shared-lookups.d.ts.map +1 -1
  334. package/dist/src/runtime/executors/loaders/shared-lookups.js +102 -0
  335. package/dist/src/runtime/executors/loaders/shared-lookups.js.map +1 -1
  336. package/dist/src/runtime/executors/loaders/shipping-method-handler.d.ts +11 -6
  337. package/dist/src/runtime/executors/loaders/shipping-method-handler.d.ts.map +1 -1
  338. package/dist/src/runtime/executors/loaders/shipping-method-handler.js +168 -61
  339. package/dist/src/runtime/executors/loaders/shipping-method-handler.js.map +1 -1
  340. package/dist/src/runtime/executors/loaders/stock-location-handler.d.ts.map +1 -1
  341. package/dist/src/runtime/executors/loaders/stock-location-handler.js +2 -27
  342. package/dist/src/runtime/executors/loaders/stock-location-handler.js.map +1 -1
  343. package/dist/src/runtime/executors/loaders/variant-handler.d.ts.map +1 -1
  344. package/dist/src/runtime/executors/loaders/variant-handler.js +85 -12
  345. package/dist/src/runtime/executors/loaders/variant-handler.js.map +1 -1
  346. package/dist/src/runtime/executors/sink-handler-registry.d.ts +7 -11
  347. package/dist/src/runtime/executors/sink-handler-registry.d.ts.map +1 -1
  348. package/dist/src/runtime/executors/sink-handler-registry.js +374 -8
  349. package/dist/src/runtime/executors/sink-handler-registry.js.map +1 -1
  350. package/dist/src/runtime/executors/sink.executor.d.ts +1 -0
  351. package/dist/src/runtime/executors/sink.executor.d.ts.map +1 -1
  352. package/dist/src/runtime/executors/sink.executor.js +82 -12
  353. package/dist/src/runtime/executors/sink.executor.js.map +1 -1
  354. package/dist/src/runtime/executors/transform.executor.d.ts.map +1 -1
  355. package/dist/src/runtime/executors/transform.executor.js +31 -2
  356. package/dist/src/runtime/executors/transform.executor.js.map +1 -1
  357. package/dist/src/runtime/orchestration/graph-executor.d.ts.map +1 -1
  358. package/dist/src/runtime/orchestration/graph-executor.js +3 -2
  359. package/dist/src/runtime/orchestration/graph-executor.js.map +1 -1
  360. package/dist/src/runtime/orchestration/helpers.d.ts +4 -1
  361. package/dist/src/runtime/orchestration/helpers.d.ts.map +1 -1
  362. package/dist/src/runtime/orchestration/helpers.js +7 -2
  363. package/dist/src/runtime/orchestration/helpers.js.map +1 -1
  364. package/dist/src/runtime/orchestration/linear-executor.d.ts.map +1 -1
  365. package/dist/src/runtime/orchestration/linear-executor.js +3 -2
  366. package/dist/src/runtime/orchestration/linear-executor.js.map +1 -1
  367. package/dist/src/runtime/orchestration/replay-executor.d.ts.map +1 -1
  368. package/dist/src/runtime/orchestration/replay-executor.js +3 -2
  369. package/dist/src/runtime/orchestration/replay-executor.js.map +1 -1
  370. package/dist/src/runtime/orchestration/step-strategies/export-step.strategy.d.ts.map +1 -1
  371. package/dist/src/runtime/orchestration/step-strategies/export-step.strategy.js +12 -12
  372. package/dist/src/runtime/orchestration/step-strategies/export-step.strategy.js.map +1 -1
  373. package/dist/src/runtime/orchestration/step-strategies/feed-step.strategy.d.ts.map +1 -1
  374. package/dist/src/runtime/orchestration/step-strategies/feed-step.strategy.js +12 -12
  375. package/dist/src/runtime/orchestration/step-strategies/feed-step.strategy.js.map +1 -1
  376. package/dist/src/runtime/orchestration/step-strategies/load-step.strategy.js +2 -2
  377. package/dist/src/runtime/orchestration/step-strategies/load-step.strategy.js.map +1 -1
  378. package/dist/src/runtime/orchestration/step-strategies/sink-step.strategy.d.ts.map +1 -1
  379. package/dist/src/runtime/orchestration/step-strategies/sink-step.strategy.js +12 -12
  380. package/dist/src/runtime/orchestration/step-strategies/sink-step.strategy.js.map +1 -1
  381. package/dist/src/runtime/orchestration/step-strategies/step-dispatcher.d.ts.map +1 -1
  382. package/dist/src/runtime/orchestration/step-strategies/step-dispatcher.js +4 -3
  383. package/dist/src/runtime/orchestration/step-strategies/step-dispatcher.js.map +1 -1
  384. package/dist/src/runtime/orchestration/step-strategies/transform-step.strategy.js +4 -4
  385. package/dist/src/runtime/orchestration/step-strategies/transform-step.strategy.js.map +1 -1
  386. package/dist/src/runtime/orchestration/types.d.ts +1 -0
  387. package/dist/src/runtime/orchestration/types.d.ts.map +1 -1
  388. package/dist/src/runtime/utils.d.ts.map +1 -1
  389. package/dist/src/runtime/utils.js +8 -1
  390. package/dist/src/runtime/utils.js.map +1 -1
  391. package/dist/src/sdk/adapters/queue/index.d.ts +1 -0
  392. package/dist/src/sdk/adapters/queue/index.d.ts.map +1 -1
  393. package/dist/src/sdk/adapters/queue/index.js +1 -0
  394. package/dist/src/sdk/adapters/queue/index.js.map +1 -1
  395. package/dist/src/sdk/adapters/queue/internal.adapter.d.ts +32 -0
  396. package/dist/src/sdk/adapters/queue/internal.adapter.d.ts.map +1 -0
  397. package/dist/src/sdk/adapters/queue/internal.adapter.js +68 -0
  398. package/dist/src/sdk/adapters/queue/internal.adapter.js.map +1 -0
  399. package/dist/src/sdk/adapters/queue/queue-adapter.registry.d.ts.map +1 -1
  400. package/dist/src/sdk/adapters/queue/queue-adapter.registry.js +3 -0
  401. package/dist/src/sdk/adapters/queue/queue-adapter.registry.js.map +1 -1
  402. package/dist/src/sdk/adapters/queue/rabbitmq.adapter.d.ts.map +1 -1
  403. package/dist/src/sdk/adapters/queue/rabbitmq.adapter.js +2 -1
  404. package/dist/src/sdk/adapters/queue/rabbitmq.adapter.js.map +1 -1
  405. package/dist/src/sdk/constants.d.ts +2 -2
  406. package/dist/src/sdk/constants.d.ts.map +1 -1
  407. package/dist/src/sdk/dsl/pipeline-builder.d.ts +8 -2
  408. package/dist/src/sdk/dsl/pipeline-builder.d.ts.map +1 -1
  409. package/dist/src/sdk/dsl/pipeline-builder.js +115 -19
  410. package/dist/src/sdk/dsl/pipeline-builder.js.map +1 -1
  411. package/dist/src/sdk/dsl/step-configs.d.ts +73 -7
  412. package/dist/src/sdk/dsl/step-configs.d.ts.map +1 -1
  413. package/dist/src/services/events/consumer-discovery.d.ts.map +1 -1
  414. package/dist/src/services/events/consumer-discovery.js +13 -11
  415. package/dist/src/services/events/consumer-discovery.js.map +1 -1
  416. package/dist/src/services/events/consumer-lifecycle.d.ts.map +1 -1
  417. package/dist/src/services/events/consumer-lifecycle.js +19 -15
  418. package/dist/src/services/events/consumer-lifecycle.js.map +1 -1
  419. package/dist/src/services/events/event-trigger.service.d.ts.map +1 -1
  420. package/dist/src/services/events/event-trigger.service.js +8 -3
  421. package/dist/src/services/events/event-trigger.service.js.map +1 -1
  422. package/dist/src/services/events/hook.service.d.ts.map +1 -1
  423. package/dist/src/services/events/hook.service.js +7 -3
  424. package/dist/src/services/events/hook.service.js.map +1 -1
  425. package/dist/src/services/events/message-processing.d.ts.map +1 -1
  426. package/dist/src/services/events/message-processing.js +13 -8
  427. package/dist/src/services/events/message-processing.js.map +1 -1
  428. package/dist/src/services/logger/datahub-logger.d.ts +7 -0
  429. package/dist/src/services/logger/datahub-logger.d.ts.map +1 -1
  430. package/dist/src/services/logger/datahub-logger.js +9 -0
  431. package/dist/src/services/logger/datahub-logger.js.map +1 -1
  432. package/dist/src/services/pipeline/pipeline-runner.service.d.ts +3 -1
  433. package/dist/src/services/pipeline/pipeline-runner.service.d.ts.map +1 -1
  434. package/dist/src/services/pipeline/pipeline-runner.service.js +14 -4
  435. package/dist/src/services/pipeline/pipeline-runner.service.js.map +1 -1
  436. package/dist/src/services/pipeline/pipeline.service.d.ts.map +1 -1
  437. package/dist/src/services/pipeline/pipeline.service.js +8 -2
  438. package/dist/src/services/pipeline/pipeline.service.js.map +1 -1
  439. package/dist/src/services/storage/retention.service.d.ts.map +1 -1
  440. package/dist/src/services/storage/retention.service.js +22 -0
  441. package/dist/src/services/storage/retention.service.js.map +1 -1
  442. package/dist/src/services/testing/step-test.service.d.ts.map +1 -1
  443. package/dist/src/services/testing/step-test.service.js +17 -1
  444. package/dist/src/services/testing/step-test.service.js.map +1 -1
  445. package/dist/src/services/validation/definition-validation.service.d.ts.map +1 -1
  446. package/dist/src/services/validation/definition-validation.service.js +4 -1
  447. package/dist/src/services/validation/definition-validation.service.js.map +1 -1
  448. package/dist/src/services/validation/trigger-validation.d.ts.map +1 -1
  449. package/dist/src/services/validation/trigger-validation.js +79 -12
  450. package/dist/src/services/validation/trigger-validation.js.map +1 -1
  451. package/dist/src/types/index.d.ts +1 -0
  452. package/dist/src/types/index.d.ts.map +1 -1
  453. package/dist/src/types/index.js.map +1 -1
  454. package/dist/src/types/loader-configs.d.ts +1071 -0
  455. package/dist/src/types/loader-configs.d.ts.map +1 -0
  456. package/dist/src/types/loader-configs.js +54 -0
  457. package/dist/src/types/loader-configs.js.map +1 -0
  458. package/dist/src/types/step-configs.d.ts +14 -5
  459. package/dist/src/types/step-configs.d.ts.map +1 -1
  460. package/dist/src/types/step-configs.js +3 -0
  461. package/dist/src/types/step-configs.js.map +1 -1
  462. package/dist/src/utils/code-security.utils.d.ts +18 -0
  463. package/dist/src/utils/code-security.utils.d.ts.map +1 -1
  464. package/dist/src/utils/code-security.utils.js +125 -9
  465. package/dist/src/utils/code-security.utils.js.map +1 -1
  466. package/dist/src/validation/pipeline-definition.validator.js +2 -1
  467. package/dist/src/validation/pipeline-definition.validator.js.map +1 -1
  468. package/docs/developer-guide/README.md +2 -0
  469. package/docs/developer-guide/dsl/pipeline-builder.md +12 -0
  470. package/docs/developer-guide/extending/README.md +230 -10
  471. package/docs/developer-guide/extending/custom-sinks.md +87 -0
  472. package/docs/developer-guide/extending/events.md +4 -1
  473. package/docs/examples/validation-error-messages.md +246 -0
  474. package/docs/guides/multi-channel.md +1190 -0
  475. package/docs/guides/multi-currency.md +881 -0
  476. package/docs/guides/multi-entity.md +597 -0
  477. package/docs/guides/multi-language.md +957 -0
  478. package/docs/reference/README.md +11 -4
  479. package/docs/reference/extractors.md +30 -0
  480. package/docs/reference/loaders.md +359 -21
  481. package/docs/reference/operators-complete.md +1251 -0
  482. package/docs/reference/operators.md +36 -2
  483. package/docs/reference/sinks.md +7 -6
  484. package/docs/reference/step-types.md +12 -5
  485. package/docs/user-guide/pipelines.md +82 -13
  486. package/package.json +1 -1
  487. package/shared/types/adapter-config.types.ts +162 -2
  488. package/shared/types/index.ts +12 -0
  489. package/shared/types/loader.types.ts +4 -0
  490. package/shared/types/step.types.ts +6 -0
  491. package/shared/types/trigger.types.ts +0 -4
@@ -1,14 +1,3 @@
1
- /**
2
- * Sink Handler Registry
3
- *
4
- * Single source of truth for sink adapter definitions AND handler functions.
5
- * Adding a new sink handler requires only:
6
- * 1. Create the handler function in this file (or a separate file and import it)
7
- * 2. Add its entry to SINK_HANDLER_REGISTRY below
8
- *
9
- * BUILTIN_ADAPTERS, SINK_CODE, and the SinkExecutor
10
- * all derive from this registry automatically.
11
- */
12
1
  import { RequestContext } from '@vendure/core';
13
2
  import { AdapterDefinition } from '../../sdk/types';
14
3
  import { PipelineStepDefinition } from '../../types/index';
@@ -43,12 +32,16 @@ interface BaseSinkCfg {
43
32
  excludeFields?: string[];
44
33
  host?: string;
45
34
  hosts?: string[];
35
+ node?: string;
36
+ port?: number;
37
+ protocol?: string;
46
38
  apiKeySecretCode?: string;
47
39
  basicSecretCode?: string;
48
40
  applicationId?: string;
49
41
  appId?: string;
50
42
  collectionName?: string;
51
43
  primaryKey?: string;
44
+ defaultOperation?: string;
52
45
  }
53
46
  /**
54
47
  * Context passed to sink handler functions for executing a single sink type
@@ -63,6 +56,7 @@ export interface SinkHandlerContext {
63
56
  bulkSize: number;
64
57
  prepareDoc: (rec: RecordObject) => RecordObject;
65
58
  onRecordError?: OnRecordErrorCallback;
59
+ operation?: string;
66
60
  }
67
61
  /**
68
62
  * Service dependencies injected into handler functions
@@ -77,11 +71,13 @@ export interface SinkServices {
77
71
  * Handler function type for built-in sink adapters
78
72
  */
79
73
  export type SinkHandler = (handlerCtx: SinkHandlerContext, services: SinkServices) => Promise<ExecutionResult>;
74
+ export type SinkDeleteHandler = (handlerCtx: SinkHandlerContext, services: SinkServices, ids: string[]) => Promise<ExecutionResult>;
80
75
  /**
81
76
  * Registry entry carrying both the handler function and its adapter definition.
82
77
  */
83
78
  interface SinkRegistryEntry {
84
79
  handler: SinkHandler;
80
+ deleteHandler?: SinkDeleteHandler;
85
81
  definition: AdapterDefinition;
86
82
  }
87
83
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"sink-handler-registry.d.ts","sourceRoot":"","sources":["../../../../src/runtime/executors/sink-handler-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAc,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAOzF;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;CAQrB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,OAAO,kBAAkB,CAAC,MAAM,OAAO,kBAAkB,CAAC,CAAC;AAMzF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D;;GAEG;AACH,UAAU,WAAW;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AA+BD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,GAAG,EAAE,cAAc,CAAC;IACpB,IAAI,EAAE,sBAAsB,CAAC;IAC7B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,GAAG,EAAE,WAAW,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,YAAY,CAAC;IAChD,aAAa,CAAC,EAAE,qBAAqB,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,aAAa,EAAE,aAAa,CAAC;IAC7B,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,cAAc,EAAE,qBAAqB,CAAC;IACtC,MAAM,EAAE,aAAa,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,UAAU,EAAE,kBAAkB,EAAE,QAAQ,EAAE,YAAY,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;AAsY/G;;GAEG;AACH,UAAU,iBAAiB;IACvB,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,iBAAiB,CAAC;CACjC;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,gCAmRhC,CAAC;AAEH,mEAAmE;AACnE,eAAO,MAAM,aAAa,EAAE,iBAAiB,EACwB,CAAC;AAEtE;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAKjB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"sink-handler-registry.d.ts","sourceRoot":"","sources":["../../../../src/runtime/executors/sink-handler-registry.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAc,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAOzF;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;CAQrB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,OAAO,kBAAkB,CAAC,MAAM,OAAO,kBAAkB,CAAC,CAAC;AAMzF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D;;GAEG;AACH,UAAU,WAAW;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAiCD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,GAAG,EAAE,cAAc,CAAC;IACpB,IAAI,EAAE,sBAAsB,CAAC;IAC7B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,GAAG,EAAE,WAAW,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,YAAY,CAAC;IAChD,aAAa,CAAC,EAAE,qBAAqB,CAAC;IAEtC,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,aAAa,EAAE,aAAa,CAAC;IAC7B,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,cAAc,EAAE,qBAAqB,CAAC;IACtC,MAAM,EAAE,aAAa,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,UAAU,EAAE,kBAAkB,EAAE,QAAQ,EAAE,YAAY,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;AAE/G,MAAM,MAAM,iBAAiB,GAAG,CAC5B,UAAU,EAAE,kBAAkB,EAC9B,QAAQ,EAAE,YAAY,EACtB,GAAG,EAAE,MAAM,EAAE,KACZ,OAAO,CAAC,eAAe,CAAC,CAAC;AAsqB9B;;GAEG;AACH,UAAU,iBAAiB;IACvB,OAAO,EAAE,WAAW,CAAC;IACrB,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,UAAU,EAAE,iBAAiB,CAAC;CACjC;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,gCAiUhC,CAAC;AAEH,mEAAmE;AACnE,eAAO,MAAM,aAAa,EAAE,iBAAiB,EACwB,CAAC;AAEtE;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAKjB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC"}
@@ -1,6 +1,51 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.SINK_CODE = exports.SINK_ADAPTERS = exports.SINK_HANDLER_REGISTRY = exports.SINK_ADAPTER_CODES = void 0;
37
+ /**
38
+ * Sink Handler Registry
39
+ *
40
+ * Single source of truth for sink adapter definitions AND handler functions.
41
+ * Adding a new sink handler requires only:
42
+ * 1. Create the handler function in this file (or a separate file and import it)
43
+ * 2. Add its entry to SINK_HANDLER_REGISTRY below
44
+ *
45
+ * BUILTIN_ADAPTERS, SINK_CODE, and the SinkExecutor
46
+ * all derive from this registry automatically.
47
+ */
48
+ const crypto = __importStar(require("crypto"));
4
49
  const utils_1 = require("../utils");
5
50
  const defaults_1 = require("../../constants/defaults");
6
51
  const constants_1 = require("../../constants");
@@ -45,6 +90,14 @@ function getCircuitKey(adapterCode, host) {
45
90
  return `sink:${adapterCode}:${host.replace(/\/+$/, '')}`;
46
91
  }
47
92
  }
93
+ function resolveTypesenseHost(cfg) {
94
+ if (cfg.host) {
95
+ const protocol = cfg.protocol ?? 'https';
96
+ const port = cfg.port ?? 8108;
97
+ return cfg.host.includes('://') ? cfg.host : `${protocol}://${cfg.host}:${port}`;
98
+ }
99
+ return constants_1.SERVICE_DEFAULTS.TYPESENSE_URL;
100
+ }
48
101
  function checkCircuit(services, circuitKey) {
49
102
  const state = services.circuitBreaker.getState(circuitKey);
50
103
  const allowed = services.circuitBreaker.canExecute(circuitKey);
@@ -103,6 +156,40 @@ async function handleMeiliSearch(hCtx, services) {
103
156
  const primaryKey = cfg.primaryKey ?? idField;
104
157
  const circuitKey = getCircuitKey(exports.SINK_ADAPTER_CODES.MEILISEARCH, host);
105
158
  await (0, url_security_utils_1.assertUrlSafe)(host);
159
+ // Configure index settings if provided
160
+ // Fields can be JSON arrays or comma-separated strings
161
+ const parseFieldList = (val) => {
162
+ if (Array.isArray(val))
163
+ return val.map(String);
164
+ if (typeof val === 'string' && val.trim())
165
+ return val.split(',').map(s => s.trim()).filter(Boolean);
166
+ return undefined;
167
+ };
168
+ const searchableFields = parseFieldList(hCtx.cfg.searchableFields);
169
+ const filterableFields = parseFieldList(hCtx.cfg.filterableFields);
170
+ const sortableFields = parseFieldList(hCtx.cfg.sortableFields);
171
+ if (searchableFields || filterableFields || sortableFields) {
172
+ const settingsHeaders = { [constants_1.HTTP_HEADERS.CONTENT_TYPE]: constants_1.CONTENT_TYPES.JSON };
173
+ if (apiKey)
174
+ settingsHeaders[constants_1.HTTP_HEADERS.AUTHORIZATION] = `${constants_1.AUTH_SCHEMES.BEARER} ${apiKey}`;
175
+ try {
176
+ const settingsResponse = await fetch(`${host}/indexes/${indexName}/settings`, {
177
+ method: enums_1.HttpMethod.PATCH,
178
+ headers: settingsHeaders,
179
+ body: JSON.stringify({
180
+ ...(searchableFields ? { searchableAttributes: searchableFields } : {}),
181
+ ...(filterableFields ? { filterableAttributes: filterableFields } : {}),
182
+ ...(sortableFields ? { sortableAttributes: sortableFields } : {}),
183
+ }),
184
+ });
185
+ if (!settingsResponse.ok) {
186
+ services.logger.warn(`MeiliSearch settings update failed: ${settingsResponse.status}`, { stepKey: hCtx.step.key, indexName });
187
+ }
188
+ }
189
+ catch (e) {
190
+ services.logger.warn(`Failed to update MeiliSearch index settings`, { error: (0, error_utils_1.getErrorMessage)(e), stepKey: hCtx.step.key });
191
+ }
192
+ }
106
193
  return executeBatchedSearchSink(services, input, bulkSize, circuitKey, 'MeiliSearch', host, step.key, onRecordError, async (batch) => {
107
194
  const docs = batch.map(prepareDoc);
108
195
  const headers = { [constants_1.HTTP_HEADERS.CONTENT_TYPE]: constants_1.CONTENT_TYPES.JSON };
@@ -119,8 +206,8 @@ async function handleMeiliSearch(hCtx, services) {
119
206
  async function handleElasticsearch(hCtx, services) {
120
207
  const { ctx, step, input, cfg, indexName, idField, bulkSize, prepareDoc, onRecordError } = hCtx;
121
208
  const adapterCode = (0, step_configs_1.getAdapterCode)(step) || undefined;
122
- const hosts = cfg.hosts ?? [cfg.host ?? constants_1.SERVICE_DEFAULTS.ELASTICSEARCH_URL];
123
- const host = hosts[0];
209
+ const nodes = cfg.node ? [cfg.node] : (cfg.hosts ?? (cfg.host ? [cfg.host] : [constants_1.SERVICE_DEFAULTS.ELASTICSEARCH_URL]));
210
+ const host = nodes[0];
124
211
  const apiKey = await resolveSecret(services, ctx, cfg.apiKeySecretCode);
125
212
  const basicAuth = await resolveSecret(services, ctx, cfg.basicSecretCode);
126
213
  const effectiveAdapterCode = adapterCode ?? exports.SINK_ADAPTER_CODES.ELASTICSEARCH;
@@ -177,7 +264,7 @@ async function handleAlgolia(hCtx, services) {
177
264
  }
178
265
  async function handleTypesense(hCtx, services) {
179
266
  const { ctx, step, input, cfg, indexName, idField, bulkSize, prepareDoc, onRecordError } = hCtx;
180
- const host = cfg.host ?? constants_1.SERVICE_DEFAULTS.TYPESENSE_URL;
267
+ const host = resolveTypesenseHost(cfg);
181
268
  const apiKey = await resolveSecret(services, ctx, cfg.apiKeySecretCode);
182
269
  const collectionName = cfg.collectionName ?? indexName;
183
270
  const circuitKey = getCircuitKey(exports.SINK_ADAPTER_CODES.TYPESENSE, host);
@@ -240,11 +327,12 @@ async function handleQueueProducer(hCtx, services) {
240
327
  let fail = 0;
241
328
  const batches = (0, utils_1.chunk)(input, batchSize);
242
329
  for (const batch of batches) {
330
+ const operationHeader = hCtx.operation ?? 'UPSERT';
243
331
  const messages = batch.map(record => ({
244
332
  id: idField ? String((0, utils_1.getPath)(record, idField) ?? crypto.randomUUID()) : crypto.randomUUID(),
245
333
  payload: record,
246
334
  routingKey,
247
- headers,
335
+ headers: { ...headers, 'x-datahub-operation': operationHeader },
248
336
  priority,
249
337
  ttlMs,
250
338
  persistent,
@@ -266,7 +354,7 @@ async function handleQueueProducer(hCtx, services) {
266
354
  }
267
355
  async function handleWebhook(hCtx, services) {
268
356
  const { ctx, step, input, onRecordError } = hCtx;
269
- const cfg = step.config;
357
+ const cfg = hCtx.cfg;
270
358
  const url = cfg.url;
271
359
  const method = (cfg.method ?? enums_1.HttpMethod.POST).toUpperCase();
272
360
  const staticHeaders = cfg.headers;
@@ -302,6 +390,10 @@ async function handleWebhook(hCtx, services) {
302
390
  headers[apiKeyHeader] = apiKey;
303
391
  }
304
392
  }
393
+ // Resolve HMAC signing secret (if configured)
394
+ const hmacSecretCode = cfg.hmacSecretCode;
395
+ const signatureHeaderName = cfg.signatureHeaderName ?? constants_1.WEBHOOK.SIGNATURE_HEADER;
396
+ const hmacSecret = hmacSecretCode ? await resolveSecret(services, ctx, hmacSecretCode) : undefined;
305
397
  const batches = (0, utils_1.chunk)(input, batchSize);
306
398
  for (const batch of batches) {
307
399
  const circuitResult = checkCircuit(services, circuitKey);
@@ -319,10 +411,17 @@ async function handleWebhook(hCtx, services) {
319
411
  const controller = new AbortController();
320
412
  const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
321
413
  try {
414
+ const body = JSON.stringify(batch);
415
+ const batchHeaders = { ...headers };
416
+ // Compute HMAC-SHA256 signature for the request body
417
+ if (hmacSecret) {
418
+ const signature = crypto.createHmac('sha256', hmacSecret).update(body).digest('hex');
419
+ batchHeaders[signatureHeaderName] = `sha256=${signature}`;
420
+ }
322
421
  const response = await fetch(url, {
323
422
  method,
324
- headers,
325
- body: JSON.stringify(batch),
423
+ headers: batchHeaders,
424
+ body,
326
425
  signal: controller.signal,
327
426
  });
328
427
  const responseText = await response.text().catch(() => '');
@@ -358,6 +457,227 @@ async function handleWebhook(hCtx, services) {
358
457
  }
359
458
  return { ok, fail };
360
459
  }
460
+ // ─── Delete handlers ─────────────────────────────────────────────────
461
+ async function handleMeiliSearchDelete(hCtx, services, ids) {
462
+ const { ctx, step, cfg, indexName, bulkSize, onRecordError } = hCtx;
463
+ const host = cfg.host ?? constants_1.SERVICE_DEFAULTS.MEILISEARCH_URL;
464
+ const apiKey = await resolveSecret(services, ctx, cfg.apiKeySecretCode);
465
+ const circuitKey = getCircuitKey(exports.SINK_ADAPTER_CODES.MEILISEARCH, host);
466
+ await (0, url_security_utils_1.assertUrlSafe)(host);
467
+ const batches = (0, utils_1.chunk)(ids, bulkSize);
468
+ let ok = 0;
469
+ let fail = 0;
470
+ for (const batch of batches) {
471
+ const circuitResult = checkCircuit(services, circuitKey);
472
+ if (!circuitResult.allowed) {
473
+ fail += batch.length;
474
+ const errorMsg = `Circuit breaker open for MeiliSearch (${host}), retry in ${Math.ceil(circuitResult.resetTimeoutMs / constants_1.TIME.SECOND)}s`;
475
+ services.logger.warn(errorMsg, { circuitKey, state: circuitResult.state, stepKey: step.key });
476
+ if (onRecordError)
477
+ await onRecordError(step.key, errorMsg, {});
478
+ continue;
479
+ }
480
+ try {
481
+ const headers = { [constants_1.HTTP_HEADERS.CONTENT_TYPE]: constants_1.CONTENT_TYPES.JSON };
482
+ if (apiKey)
483
+ headers[constants_1.HTTP_HEADERS.AUTHORIZATION] = `${constants_1.AUTH_SCHEMES.BEARER} ${apiKey}`;
484
+ const response = await fetch(`${host}/indexes/${indexName}/documents/delete-batch`, {
485
+ method: enums_1.HttpMethod.POST,
486
+ headers,
487
+ body: JSON.stringify(batch),
488
+ });
489
+ if (response.ok) {
490
+ ok += batch.length;
491
+ services.circuitBreaker.recordSuccess(circuitKey);
492
+ }
493
+ else {
494
+ fail += batch.length;
495
+ services.circuitBreaker.recordFailure(circuitKey);
496
+ if (onRecordError)
497
+ await onRecordError(step.key, `MeiliSearch delete error: ${response.status}`, {});
498
+ }
499
+ }
500
+ catch (e) {
501
+ fail += batch.length;
502
+ services.circuitBreaker.recordFailure(circuitKey);
503
+ if (onRecordError)
504
+ await onRecordError(step.key, (0, error_utils_1.getErrorMessage)(e), {}, (0, error_utils_1.getErrorStack)(e));
505
+ }
506
+ }
507
+ return { ok, fail };
508
+ }
509
+ async function handleElasticsearchDelete(hCtx, services, ids) {
510
+ const { ctx, step, cfg, indexName, bulkSize, onRecordError } = hCtx;
511
+ const adapterCode = (0, step_configs_1.getAdapterCode)(step) || undefined;
512
+ const nodes = cfg.node ? [cfg.node] : (cfg.hosts ?? (cfg.host ? [cfg.host] : [constants_1.SERVICE_DEFAULTS.ELASTICSEARCH_URL]));
513
+ const host = nodes[0];
514
+ const apiKey = await resolveSecret(services, ctx, cfg.apiKeySecretCode);
515
+ const basicAuth = await resolveSecret(services, ctx, cfg.basicSecretCode);
516
+ const effectiveAdapterCode = adapterCode ?? exports.SINK_ADAPTER_CODES.ELASTICSEARCH;
517
+ const circuitKey = getCircuitKey(effectiveAdapterCode, host);
518
+ await (0, url_security_utils_1.assertUrlSafe)(host);
519
+ const batches = (0, utils_1.chunk)(ids, bulkSize);
520
+ let ok = 0;
521
+ let fail = 0;
522
+ for (const batch of batches) {
523
+ const circuitResult = checkCircuit(services, circuitKey);
524
+ if (!circuitResult.allowed) {
525
+ fail += batch.length;
526
+ const errorMsg = `Circuit breaker open for ${effectiveAdapterCode} (${host}), retry in ${Math.ceil(circuitResult.resetTimeoutMs / constants_1.TIME.SECOND)}s`;
527
+ services.logger.warn(errorMsg, { circuitKey, state: circuitResult.state, stepKey: step.key });
528
+ if (onRecordError)
529
+ await onRecordError(step.key, errorMsg, {});
530
+ continue;
531
+ }
532
+ try {
533
+ const ndjson = batch.map(docId => JSON.stringify({ delete: { _index: indexName, _id: docId } })).join('\n') + '\n';
534
+ const headers = { [constants_1.HTTP_HEADERS.CONTENT_TYPE]: constants_1.CONTENT_TYPES.NDJSON };
535
+ if (apiKey)
536
+ headers[constants_1.HTTP_HEADERS.AUTHORIZATION] = `${constants_1.AUTH_SCHEMES.API_KEY} ${apiKey}`;
537
+ else if (basicAuth)
538
+ headers[constants_1.HTTP_HEADERS.AUTHORIZATION] = `${constants_1.AUTH_SCHEMES.BASIC} ${Buffer.from(basicAuth).toString('base64')}`;
539
+ const response = await fetch(`${host}/_bulk`, {
540
+ method: enums_1.HttpMethod.POST,
541
+ headers,
542
+ body: ndjson,
543
+ });
544
+ if (response.ok) {
545
+ ok += batch.length;
546
+ services.circuitBreaker.recordSuccess(circuitKey);
547
+ }
548
+ else {
549
+ fail += batch.length;
550
+ services.circuitBreaker.recordFailure(circuitKey);
551
+ if (onRecordError)
552
+ await onRecordError(step.key, `${effectiveAdapterCode} delete error: ${response.status}`, {});
553
+ }
554
+ }
555
+ catch (e) {
556
+ fail += batch.length;
557
+ services.circuitBreaker.recordFailure(circuitKey);
558
+ if (onRecordError)
559
+ await onRecordError(step.key, (0, error_utils_1.getErrorMessage)(e), {}, (0, error_utils_1.getErrorStack)(e));
560
+ }
561
+ }
562
+ return { ok, fail };
563
+ }
564
+ async function handleAlgoliaDelete(hCtx, services, ids) {
565
+ const { ctx, step, cfg, indexName, bulkSize, onRecordError } = hCtx;
566
+ const applicationId = cfg.appId ?? cfg.applicationId;
567
+ const apiKey = await resolveSecret(services, ctx, cfg.apiKeySecretCode);
568
+ if (!applicationId || !apiKey) {
569
+ if (onRecordError)
570
+ await onRecordError(step.key, 'Algolia applicationId and apiKey are required', {});
571
+ return { ok: 0, fail: ids.length };
572
+ }
573
+ const algoliaHost = constants_1.SERVICE_URL_TEMPLATES.ALGOLIA_API(applicationId);
574
+ const circuitKey = getCircuitKey(exports.SINK_ADAPTER_CODES.ALGOLIA, algoliaHost);
575
+ await (0, url_security_utils_1.assertUrlSafe)(algoliaHost);
576
+ const batches = (0, utils_1.chunk)(ids, bulkSize);
577
+ let ok = 0;
578
+ let fail = 0;
579
+ for (const batch of batches) {
580
+ const circuitResult = checkCircuit(services, circuitKey);
581
+ if (!circuitResult.allowed) {
582
+ fail += batch.length;
583
+ const errorMsg = `Circuit breaker open for Algolia (${applicationId}), retry in ${Math.ceil(circuitResult.resetTimeoutMs / constants_1.TIME.SECOND)}s`;
584
+ services.logger.warn(errorMsg, { circuitKey, state: circuitResult.state, stepKey: step.key });
585
+ if (onRecordError)
586
+ await onRecordError(step.key, errorMsg, {});
587
+ continue;
588
+ }
589
+ try {
590
+ const response = await fetch(`${algoliaHost}/1/indexes/${indexName}/batch`, {
591
+ method: enums_1.HttpMethod.POST,
592
+ headers: {
593
+ 'X-Algolia-Application-Id': applicationId,
594
+ 'X-Algolia-API-Key': apiKey,
595
+ [constants_1.HTTP_HEADERS.CONTENT_TYPE]: constants_1.CONTENT_TYPES.JSON,
596
+ },
597
+ body: JSON.stringify({
598
+ requests: batch.map(objectID => ({ action: 'deleteObject', body: { objectID } })),
599
+ }),
600
+ });
601
+ if (response.ok) {
602
+ ok += batch.length;
603
+ services.circuitBreaker.recordSuccess(circuitKey);
604
+ }
605
+ else {
606
+ fail += batch.length;
607
+ services.circuitBreaker.recordFailure(circuitKey);
608
+ if (onRecordError)
609
+ await onRecordError(step.key, `Algolia delete error: ${response.status}`, {});
610
+ }
611
+ }
612
+ catch (e) {
613
+ fail += batch.length;
614
+ services.circuitBreaker.recordFailure(circuitKey);
615
+ if (onRecordError)
616
+ await onRecordError(step.key, (0, error_utils_1.getErrorMessage)(e), {}, (0, error_utils_1.getErrorStack)(e));
617
+ }
618
+ }
619
+ return { ok, fail };
620
+ }
621
+ async function handleTypesenseDelete(hCtx, services, ids) {
622
+ const { ctx, step, cfg, indexName, onRecordError } = hCtx;
623
+ const host = resolveTypesenseHost(cfg);
624
+ const apiKey = await resolveSecret(services, ctx, cfg.apiKeySecretCode);
625
+ const collectionName = cfg.collectionName ?? indexName;
626
+ const circuitKey = getCircuitKey(exports.SINK_ADAPTER_CODES.TYPESENSE, host);
627
+ await (0, url_security_utils_1.assertUrlSafe)(host);
628
+ let ok = 0;
629
+ let fail = 0;
630
+ for (const id of ids) {
631
+ const circuitResult = checkCircuit(services, circuitKey);
632
+ if (!circuitResult.allowed) {
633
+ fail++;
634
+ const errorMsg = `Circuit breaker open for Typesense (${host}), retry in ${Math.ceil(circuitResult.resetTimeoutMs / constants_1.TIME.SECOND)}s`;
635
+ services.logger.warn(errorMsg, { circuitKey, state: circuitResult.state, stepKey: step.key });
636
+ if (onRecordError)
637
+ await onRecordError(step.key, errorMsg, {});
638
+ continue;
639
+ }
640
+ try {
641
+ const headers = {};
642
+ if (apiKey)
643
+ headers[constants_1.HTTP_HEADERS.X_TYPESENSE_API_KEY] = apiKey;
644
+ const response = await fetch(`${host}/collections/${collectionName}/documents/${encodeURIComponent(id)}`, { method: 'DELETE', headers });
645
+ if (response.ok) {
646
+ ok++;
647
+ services.circuitBreaker.recordSuccess(circuitKey);
648
+ }
649
+ else {
650
+ fail++;
651
+ services.circuitBreaker.recordFailure(circuitKey);
652
+ if (onRecordError)
653
+ await onRecordError(step.key, `Typesense delete error for ${id}: ${response.status}`, {});
654
+ }
655
+ }
656
+ catch (e) {
657
+ fail++;
658
+ services.circuitBreaker.recordFailure(circuitKey);
659
+ if (onRecordError)
660
+ await onRecordError(step.key, (0, error_utils_1.getErrorMessage)(e), {}, (0, error_utils_1.getErrorStack)(e));
661
+ }
662
+ }
663
+ return { ok, fail };
664
+ }
665
+ async function handleWebhookDelete(hCtx, services, ids) {
666
+ const modifiedCtx = {
667
+ ...hCtx,
668
+ input: ids.map(id => ({ [hCtx.idField]: id })),
669
+ cfg: { ...hCtx.cfg, method: 'DELETE' },
670
+ };
671
+ return handleWebhook(modifiedCtx, services);
672
+ }
673
+ async function handleQueueProducerDelete(hCtx, services, ids) {
674
+ const modifiedCtx = {
675
+ ...hCtx,
676
+ input: ids.map(id => ({ [hCtx.idField]: id })),
677
+ operation: 'DELETE',
678
+ };
679
+ return handleQueueProducer(modifiedCtx, services);
680
+ }
361
681
  /**
362
682
  * Maps each sink adapter code to its corresponding handler function and adapter definition.
363
683
  * Used by SinkExecutor for dispatch and BUILTIN_ADAPTERS for UI rendering.
@@ -365,6 +685,7 @@ async function handleWebhook(hCtx, services) {
365
685
  exports.SINK_HANDLER_REGISTRY = new Map([
366
686
  [exports.SINK_ADAPTER_CODES.MEILISEARCH, {
367
687
  handler: handleMeiliSearch,
688
+ deleteHandler: handleMeiliSearchDelete,
368
689
  definition: {
369
690
  type: 'SINK',
370
691
  code: exports.SINK_ADAPTER_CODES.MEILISEARCH,
@@ -378,16 +699,19 @@ exports.SINK_HANDLER_REGISTRY = new Map([
378
699
  { key: 'apiKeySecretCode', label: 'API key secret', type: 'string', required: true },
379
700
  { key: 'indexName', label: 'Index name', type: 'string', required: true },
380
701
  { key: 'primaryKey', label: 'Primary key field', type: 'string', required: true },
702
+ { key: 'defaultOperation', label: 'Default operation', type: 'select', options: adapter_schema_options_1.SINK_OPERATION_OPTIONS, description: 'Fallback when records have no __operation field.' },
381
703
  { key: 'batchSize', label: 'Batch size', type: 'number' },
382
704
  { key: 'searchableFields', label: 'Searchable fields', type: 'json', description: 'Array of field names' },
383
705
  { key: 'filterableFields', label: 'Filterable fields', type: 'json', description: 'Array of field names' },
384
706
  { key: 'sortableFields', label: 'Sortable fields', type: 'json', description: 'Array of field names' },
707
+ ...adapter_schema_options_1.LOCALIZATION_SCHEMA_FIELDS,
385
708
  ],
386
709
  },
387
710
  },
388
711
  }],
389
712
  [exports.SINK_ADAPTER_CODES.ELASTICSEARCH, {
390
713
  handler: handleElasticsearch,
714
+ deleteHandler: handleElasticsearchDelete,
391
715
  definition: {
392
716
  type: 'SINK',
393
717
  code: exports.SINK_ADAPTER_CODES.ELASTICSEARCH,
@@ -403,14 +727,17 @@ exports.SINK_HANDLER_REGISTRY = new Map([
403
727
  { key: 'passwordSecretCode', label: 'Password secret', type: 'string' },
404
728
  { key: 'indexName', label: 'Index name', type: 'string', required: true },
405
729
  { key: 'idField', label: 'Document ID field', type: 'string', required: true },
730
+ { key: 'defaultOperation', label: 'Default operation', type: 'select', options: adapter_schema_options_1.SINK_OPERATION_OPTIONS, description: 'Fallback when records have no __operation field.' },
406
731
  { key: 'batchSize', label: 'Batch size', type: 'number' },
407
732
  { key: 'refresh', label: 'Refresh after indexing', type: 'boolean' },
733
+ ...adapter_schema_options_1.LOCALIZATION_SCHEMA_FIELDS,
408
734
  ],
409
735
  },
410
736
  },
411
737
  }],
412
738
  [exports.SINK_ADAPTER_CODES.OPENSEARCH, {
413
739
  handler: handleElasticsearch,
740
+ deleteHandler: handleElasticsearchDelete,
414
741
  definition: {
415
742
  type: 'SINK',
416
743
  code: exports.SINK_ADAPTER_CODES.OPENSEARCH,
@@ -426,14 +753,17 @@ exports.SINK_HANDLER_REGISTRY = new Map([
426
753
  { key: 'passwordSecretCode', label: 'Password secret', type: 'string' },
427
754
  { key: 'indexName', label: 'Index name', type: 'string', required: true },
428
755
  { key: 'idField', label: 'Document ID field', type: 'string', required: true },
756
+ { key: 'defaultOperation', label: 'Default operation', type: 'select', options: adapter_schema_options_1.SINK_OPERATION_OPTIONS, description: 'Fallback when records have no __operation field.' },
429
757
  { key: 'batchSize', label: 'Batch size', type: 'number' },
430
758
  { key: 'refresh', label: 'Refresh after indexing', type: 'boolean' },
759
+ ...adapter_schema_options_1.LOCALIZATION_SCHEMA_FIELDS,
431
760
  ],
432
761
  },
433
762
  },
434
763
  }],
435
764
  [exports.SINK_ADAPTER_CODES.ALGOLIA, {
436
765
  handler: handleAlgolia,
766
+ deleteHandler: handleAlgoliaDelete,
437
767
  definition: {
438
768
  type: 'SINK',
439
769
  code: exports.SINK_ADAPTER_CODES.ALGOLIA,
@@ -447,13 +777,16 @@ exports.SINK_HANDLER_REGISTRY = new Map([
447
777
  { key: 'apiKeySecretCode', label: 'Admin API key secret', type: 'string', required: true },
448
778
  { key: 'indexName', label: 'Index name', type: 'string', required: true },
449
779
  { key: 'idField', label: 'Object ID field', type: 'string', required: true },
780
+ { key: 'defaultOperation', label: 'Default operation', type: 'select', options: adapter_schema_options_1.SINK_OPERATION_OPTIONS, description: 'Fallback when records have no __operation field.' },
450
781
  { key: 'batchSize', label: 'Batch size', type: 'number' },
782
+ ...adapter_schema_options_1.LOCALIZATION_SCHEMA_FIELDS,
451
783
  ],
452
784
  },
453
785
  },
454
786
  }],
455
787
  [exports.SINK_ADAPTER_CODES.TYPESENSE, {
456
788
  handler: handleTypesense,
789
+ deleteHandler: handleTypesenseDelete,
457
790
  definition: {
458
791
  type: 'SINK',
459
792
  code: exports.SINK_ADAPTER_CODES.TYPESENSE,
@@ -469,17 +802,20 @@ exports.SINK_HANDLER_REGISTRY = new Map([
469
802
  { key: 'apiKeySecretCode', label: 'API key secret', type: 'string', required: true },
470
803
  { key: 'collectionName', label: 'Collection name', type: 'string', required: true },
471
804
  { key: 'idField', label: 'Document ID field', type: 'string', required: true },
805
+ { key: 'defaultOperation', label: 'Default operation', type: 'select', options: adapter_schema_options_1.SINK_OPERATION_OPTIONS, description: 'Fallback when records have no __operation field.' },
472
806
  { key: 'batchSize', label: 'Batch size', type: 'number' },
807
+ ...adapter_schema_options_1.LOCALIZATION_SCHEMA_FIELDS,
473
808
  ],
474
809
  },
475
810
  },
476
811
  }],
477
812
  [exports.SINK_ADAPTER_CODES.QUEUE_PRODUCER, {
478
813
  handler: handleQueueProducer,
814
+ deleteHandler: handleQueueProducerDelete,
479
815
  definition: {
480
816
  type: 'SINK',
481
817
  code: exports.SINK_ADAPTER_CODES.QUEUE_PRODUCER,
482
- description: 'Publish records to RabbitMQ message queue via HTTP Management API (port 15672).',
818
+ description: 'Publish records to message queue. Propagates operation type as x-datahub-operation message header.',
483
819
  category: 'EXTERNAL',
484
820
  icon: 'rss',
485
821
  color: '#ff6600',
@@ -560,12 +896,21 @@ exports.SINK_HANDLER_REGISTRY = new Map([
560
896
  type: 'number',
561
897
  description: 'Message time-to-live in milliseconds.',
562
898
  },
899
+ {
900
+ key: 'defaultOperation',
901
+ label: 'Default Operation',
902
+ type: 'select',
903
+ options: adapter_schema_options_1.SINK_OPERATION_OPTIONS,
904
+ description: 'Fallback when records have no __operation field.',
905
+ },
906
+ ...adapter_schema_options_1.LOCALIZATION_SCHEMA_FIELDS,
563
907
  ],
564
908
  },
565
909
  },
566
910
  }],
567
911
  [exports.SINK_ADAPTER_CODES.WEBHOOK, {
568
912
  handler: handleWebhook,
913
+ deleteHandler: handleWebhookDelete,
569
914
  definition: {
570
915
  type: 'SINK',
571
916
  code: exports.SINK_ADAPTER_CODES.WEBHOOK,
@@ -613,6 +958,26 @@ exports.SINK_HANDLER_REGISTRY = new Map([
613
958
  placeholder: 'X-API-Key',
614
959
  description: 'Header name for API key.',
615
960
  },
961
+ {
962
+ key: 'hmacSecretCode',
963
+ label: 'HMAC Signing Secret',
964
+ type: 'string',
965
+ description: 'Secret code for HMAC-SHA256 request signing. Adds X-DataHub-Signature header.',
966
+ },
967
+ {
968
+ key: 'signatureHeaderName',
969
+ label: 'Signature Header',
970
+ type: 'string',
971
+ placeholder: 'X-DataHub-Signature',
972
+ description: 'Header name for HMAC signature (default: X-DataHub-Signature).',
973
+ },
974
+ {
975
+ key: 'defaultOperation',
976
+ label: 'Default Operation',
977
+ type: 'select',
978
+ options: adapter_schema_options_1.SINK_OPERATION_OPTIONS,
979
+ description: 'Fallback when records have no __operation field.',
980
+ },
616
981
  {
617
982
  key: 'batchSize',
618
983
  label: 'Batch Size',
@@ -633,6 +998,7 @@ exports.SINK_HANDLER_REGISTRY = new Map([
633
998
  placeholder: '3',
634
999
  description: 'Maximum retry attempts on failure.',
635
1000
  },
1001
+ ...adapter_schema_options_1.LOCALIZATION_SCHEMA_FIELDS,
636
1002
  ],
637
1003
  },
638
1004
  },