@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.
- package/CHANGELOG.md +46 -1
- package/README.md +30 -8
- package/dashboard/components/pipelines/PipelineEditor.tsx +159 -5
- package/dashboard/components/pipelines/ReactFlowPipelineEditor.tsx +3 -3
- package/dashboard/components/pipelines/shared/NodePropertiesPanel.tsx +42 -4
- package/dashboard/components/pipelines/shared/StepListItem.tsx +2 -2
- package/dashboard/components/shared/CodeEditor.tsx +289 -0
- package/dashboard/components/shared/schema-form/fields/TextareaField.tsx +19 -4
- package/dashboard/components/shared/step-config/AdapterSelector.tsx +2 -2
- package/dashboard/components/shared/step-config/OperatorFieldInput.tsx +19 -0
- package/dashboard/components/shared/step-config/RouteConfigComponent.tsx +218 -29
- package/dashboard/components/shared/step-config/StepConfigPanel.tsx +37 -17
- package/dashboard/components/shared/step-config/ValidateConfigComponent.tsx +2 -2
- package/dashboard/constants/ui-dimensions.ts +2 -1
- package/dashboard/constants/ui-states.ts +1 -0
- package/dashboard/gql/graphql.ts +13 -1
- package/dashboard/hooks/use-adapter-catalog.ts +4 -32
- package/dashboard/routes/connections/ConnectionDetail.tsx +7 -1
- package/dashboard/routes/pipelines/RunDetailsPanel.tsx +1 -1
- package/dashboard/routes/pipelines/components/PipelineActionButtons.tsx +3 -3
- package/dashboard/routes/pipelines/utils/pipeline-conversion.ts +3 -5
- package/dashboard/utils/formatters.ts +6 -4
- package/dist/dashboard/components/pipelines/PipelineEditor.tsx +159 -5
- package/dist/dashboard/components/pipelines/ReactFlowPipelineEditor.tsx +3 -3
- package/dist/dashboard/components/pipelines/shared/NodePropertiesPanel.tsx +42 -4
- package/dist/dashboard/components/pipelines/shared/StepListItem.tsx +2 -2
- package/dist/dashboard/components/shared/CodeEditor.tsx +289 -0
- package/dist/dashboard/components/shared/schema-form/fields/TextareaField.tsx +19 -4
- package/dist/dashboard/components/shared/step-config/AdapterSelector.tsx +2 -2
- package/dist/dashboard/components/shared/step-config/OperatorFieldInput.tsx +19 -0
- package/dist/dashboard/components/shared/step-config/RouteConfigComponent.tsx +218 -29
- package/dist/dashboard/components/shared/step-config/StepConfigPanel.tsx +37 -17
- package/dist/dashboard/components/shared/step-config/ValidateConfigComponent.tsx +2 -2
- package/dist/dashboard/constants/ui-dimensions.ts +2 -1
- package/dist/dashboard/constants/ui-states.ts +1 -0
- package/dist/dashboard/gql/graphql.ts +13 -1
- package/dist/dashboard/hooks/use-adapter-catalog.ts +4 -32
- package/dist/dashboard/routes/connections/ConnectionDetail.tsx +7 -1
- package/dist/dashboard/routes/pipelines/RunDetailsPanel.tsx +1 -1
- package/dist/dashboard/routes/pipelines/components/PipelineActionButtons.tsx +3 -3
- package/dist/dashboard/routes/pipelines/utils/pipeline-conversion.ts +3 -5
- package/dist/dashboard/utils/formatters.ts +6 -4
- package/dist/shared/types/adapter-config.types.d.ts +148 -4
- package/dist/shared/types/adapter-config.types.d.ts.map +1 -1
- package/dist/shared/types/index.d.ts +1 -1
- package/dist/shared/types/index.d.ts.map +1 -1
- package/dist/shared/types/index.js.map +1 -1
- package/dist/shared/types/loader.types.d.ts +4 -0
- package/dist/shared/types/loader.types.d.ts.map +1 -1
- package/dist/shared/types/step.types.d.ts +6 -0
- package/dist/shared/types/step.types.d.ts.map +1 -1
- package/dist/shared/types/trigger.types.d.ts +0 -4
- package/dist/shared/types/trigger.types.d.ts.map +1 -1
- package/dist/src/adapters/registry.d.ts.map +1 -1
- package/dist/src/adapters/registry.js +2 -1
- package/dist/src/adapters/registry.js.map +1 -1
- package/dist/src/api/controllers/webhook.controller.d.ts +10 -0
- package/dist/src/api/controllers/webhook.controller.d.ts.map +1 -1
- package/dist/src/api/controllers/webhook.controller.js +50 -10
- package/dist/src/api/controllers/webhook.controller.js.map +1 -1
- package/dist/src/api/resolvers/queue.resolver.d.ts +3 -1
- package/dist/src/api/resolvers/queue.resolver.d.ts.map +1 -1
- package/dist/src/api/resolvers/queue.resolver.js +6 -5
- package/dist/src/api/resolvers/queue.resolver.js.map +1 -1
- package/dist/src/api/schema/pipeline.schema.d.ts +1 -1
- package/dist/src/api/schema/pipeline.schema.d.ts.map +1 -1
- package/dist/src/api/schema/pipeline.schema.js +4 -0
- package/dist/src/api/schema/pipeline.schema.js.map +1 -1
- package/dist/src/api/schema/test.schema.d.ts +1 -1
- package/dist/src/api/schema/test.schema.d.ts.map +1 -1
- package/dist/src/api/schema/test.schema.js +5 -1
- package/dist/src/api/schema/test.schema.js.map +1 -1
- package/dist/src/bootstrap/seed-data.js +1 -1
- package/dist/src/bootstrap/seed-data.js.map +1 -1
- package/dist/src/constants/adapter-schema-options.d.ts +65 -0
- package/dist/src/constants/adapter-schema-options.d.ts.map +1 -1
- package/dist/src/constants/adapter-schema-options.js +91 -7
- package/dist/src/constants/adapter-schema-options.js.map +1 -1
- package/dist/src/constants/builtin-adapters.d.ts +1 -1
- package/dist/src/constants/builtin-adapters.d.ts.map +1 -1
- package/dist/src/constants/builtin-adapters.js +19 -1
- package/dist/src/constants/builtin-adapters.js.map +1 -1
- package/dist/src/constants/core.d.ts +10 -0
- package/dist/src/constants/core.d.ts.map +1 -1
- package/dist/src/constants/core.js +10 -0
- package/dist/src/constants/core.js.map +1 -1
- package/dist/src/constants/defaults/webhook-defaults.d.ts +2 -0
- package/dist/src/constants/defaults/webhook-defaults.d.ts.map +1 -1
- package/dist/src/constants/defaults/webhook-defaults.js +2 -0
- package/dist/src/constants/defaults/webhook-defaults.js.map +1 -1
- package/dist/src/constants/enum-metadata.d.ts.map +1 -1
- package/dist/src/constants/enum-metadata.js +3 -0
- package/dist/src/constants/enum-metadata.js.map +1 -1
- package/dist/src/constants/hook-stage-metadata.d.ts.map +1 -1
- package/dist/src/constants/hook-stage-metadata.js +42 -0
- package/dist/src/constants/hook-stage-metadata.js.map +1 -1
- package/dist/src/constants/services.d.ts.map +1 -1
- package/dist/src/constants/services.js +7 -0
- package/dist/src/constants/services.js.map +1 -1
- package/dist/src/constants/time.d.ts +2 -0
- package/dist/src/constants/time.d.ts.map +1 -1
- package/dist/src/constants/time.js +2 -0
- package/dist/src/constants/time.js.map +1 -1
- package/dist/src/data-hub.plugin.d.ts.map +1 -1
- package/dist/src/data-hub.plugin.js +2 -2
- package/dist/src/data-hub.plugin.js.map +1 -1
- package/dist/src/entities/pipeline/pipeline-run.entity.d.ts +4 -0
- package/dist/src/entities/pipeline/pipeline-run.entity.d.ts.map +1 -1
- package/dist/src/entities/pipeline/pipeline-run.entity.js +8 -0
- package/dist/src/entities/pipeline/pipeline-run.entity.js.map +1 -1
- package/dist/src/extractors/cdc/cdc.extractor.d.ts.map +1 -1
- package/dist/src/extractors/cdc/cdc.extractor.js +7 -2
- package/dist/src/extractors/cdc/cdc.extractor.js.map +1 -1
- package/dist/src/extractors/cdc/types.d.ts +1 -1
- package/dist/src/extractors/cdc/types.d.ts.map +1 -1
- package/dist/src/extractors/extractor-handler-registry.d.ts.map +1 -1
- package/dist/src/extractors/extractor-handler-registry.js +3 -0
- package/dist/src/extractors/extractor-handler-registry.js.map +1 -1
- package/dist/src/extractors/vendure-query/helpers.d.ts +9 -4
- package/dist/src/extractors/vendure-query/helpers.d.ts.map +1 -1
- package/dist/src/extractors/vendure-query/helpers.js +98 -32
- package/dist/src/extractors/vendure-query/helpers.js.map +1 -1
- package/dist/src/extractors/vendure-query/schema.d.ts.map +1 -1
- package/dist/src/extractors/vendure-query/schema.js +13 -0
- package/dist/src/extractors/vendure-query/schema.js.map +1 -1
- package/dist/src/feeds/generators/csv-feed.generator.d.ts.map +1 -1
- package/dist/src/feeds/generators/csv-feed.generator.js +5 -4
- package/dist/src/feeds/generators/csv-feed.generator.js.map +1 -1
- package/dist/src/feeds/generators/facebook-catalog.generator.d.ts.map +1 -1
- package/dist/src/feeds/generators/facebook-catalog.generator.js +83 -114
- package/dist/src/feeds/generators/facebook-catalog.generator.js.map +1 -1
- package/dist/src/feeds/generators/feed-constants.d.ts +1 -0
- package/dist/src/feeds/generators/feed-constants.d.ts.map +1 -1
- package/dist/src/feeds/generators/feed-constants.js +1 -0
- package/dist/src/feeds/generators/feed-constants.js.map +1 -1
- package/dist/src/feeds/generators/feed-helpers.d.ts +10 -8
- package/dist/src/feeds/generators/feed-helpers.d.ts.map +1 -1
- package/dist/src/feeds/generators/feed-helpers.js +24 -4
- package/dist/src/feeds/generators/feed-helpers.js.map +1 -1
- package/dist/src/feeds/generators/feed-item-builder.d.ts +59 -0
- package/dist/src/feeds/generators/feed-item-builder.d.ts.map +1 -0
- package/dist/src/feeds/generators/feed-item-builder.js +93 -0
- package/dist/src/feeds/generators/feed-item-builder.js.map +1 -0
- package/dist/src/feeds/generators/google-shopping.generator.d.ts.map +1 -1
- package/dist/src/feeds/generators/google-shopping.generator.js +52 -64
- package/dist/src/feeds/generators/google-shopping.generator.js.map +1 -1
- package/dist/src/feeds/generators/json-feed.generator.d.ts.map +1 -1
- package/dist/src/feeds/generators/json-feed.generator.js +4 -3
- package/dist/src/feeds/generators/json-feed.generator.js.map +1 -1
- package/dist/src/feeds/generators/xml-feed.generator.d.ts.map +1 -1
- package/dist/src/feeds/generators/xml-feed.generator.js +6 -5
- package/dist/src/feeds/generators/xml-feed.generator.js.map +1 -1
- package/dist/src/gql/generated.d.ts +13 -1
- package/dist/src/gql/generated.d.ts.map +1 -1
- package/dist/src/gql/generated.js.map +1 -1
- package/dist/src/index.d.ts +3 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/loaders/asset/asset.loader.d.ts.map +1 -1
- package/dist/src/loaders/asset/asset.loader.js +5 -1
- package/dist/src/loaders/asset/asset.loader.js.map +1 -1
- package/dist/src/loaders/base/validation-builder.d.ts +128 -3
- package/dist/src/loaders/base/validation-builder.d.ts.map +1 -1
- package/dist/src/loaders/base/validation-builder.js +177 -6
- package/dist/src/loaders/base/validation-builder.js.map +1 -1
- package/dist/src/loaders/collection/collection.loader.d.ts.map +1 -1
- package/dist/src/loaders/collection/collection.loader.js +22 -1
- package/dist/src/loaders/collection/collection.loader.js.map +1 -1
- package/dist/src/loaders/collection/helpers.d.ts +16 -1
- package/dist/src/loaders/collection/helpers.d.ts.map +1 -1
- package/dist/src/loaders/collection/helpers.js +37 -0
- package/dist/src/loaders/collection/helpers.js.map +1 -1
- package/dist/src/loaders/customer/customer.loader.d.ts.map +1 -1
- package/dist/src/loaders/customer/customer.loader.js +13 -1
- package/dist/src/loaders/customer/customer.loader.js.map +1 -1
- package/dist/src/loaders/customer/helpers.d.ts +15 -3
- package/dist/src/loaders/customer/helpers.d.ts.map +1 -1
- package/dist/src/loaders/customer/helpers.js +188 -7
- package/dist/src/loaders/customer/helpers.js.map +1 -1
- package/dist/src/loaders/facet-value/facet-value.loader.d.ts.map +1 -1
- package/dist/src/loaders/facet-value/facet-value.loader.js +18 -0
- package/dist/src/loaders/facet-value/facet-value.loader.js.map +1 -1
- package/dist/src/loaders/facet-value/types.d.ts +1 -1
- package/dist/src/loaders/facet-value/types.js +1 -1
- package/dist/src/loaders/facet-value/types.js.map +1 -1
- package/dist/src/loaders/order/helpers.d.ts +16 -2
- package/dist/src/loaders/order/helpers.d.ts.map +1 -1
- package/dist/src/loaders/order/helpers.js +108 -0
- package/dist/src/loaders/order/helpers.js.map +1 -1
- package/dist/src/loaders/order/order.loader.d.ts +38 -0
- package/dist/src/loaders/order/order.loader.d.ts.map +1 -1
- package/dist/src/loaders/order/order.loader.js +238 -24
- package/dist/src/loaders/order/order.loader.js.map +1 -1
- package/dist/src/loaders/order/types.d.ts +10 -3
- package/dist/src/loaders/order/types.d.ts.map +1 -1
- package/dist/src/loaders/order/types.js +13 -2
- package/dist/src/loaders/order/types.js.map +1 -1
- package/dist/src/loaders/product/product.loader.d.ts.map +1 -1
- package/dist/src/loaders/product/product.loader.js +18 -2
- package/dist/src/loaders/product/product.loader.js.map +1 -1
- package/dist/src/loaders/product-variant/helpers.d.ts +20 -0
- package/dist/src/loaders/product-variant/helpers.d.ts.map +1 -0
- package/dist/src/loaders/product-variant/helpers.js +103 -0
- package/dist/src/loaders/product-variant/helpers.js.map +1 -0
- package/dist/src/loaders/product-variant/product-variant.loader.d.ts.map +1 -1
- package/dist/src/loaders/product-variant/product-variant.loader.js +76 -10
- package/dist/src/loaders/product-variant/product-variant.loader.js.map +1 -1
- package/dist/src/loaders/product-variant/types.d.ts +7 -0
- package/dist/src/loaders/product-variant/types.d.ts.map +1 -1
- package/dist/src/loaders/product-variant/types.js.map +1 -1
- package/dist/src/loaders/promotion/helpers.d.ts +29 -0
- package/dist/src/loaders/promotion/helpers.d.ts.map +1 -1
- package/dist/src/loaders/promotion/helpers.js +68 -0
- package/dist/src/loaders/promotion/helpers.js.map +1 -1
- package/dist/src/loaders/promotion/promotion.loader.d.ts.map +1 -1
- package/dist/src/loaders/promotion/promotion.loader.js +12 -2
- package/dist/src/loaders/promotion/promotion.loader.js.map +1 -1
- package/dist/src/loaders/shared-helpers.d.ts +42 -2
- package/dist/src/loaders/shared-helpers.d.ts.map +1 -1
- package/dist/src/loaders/shared-helpers.js +384 -5
- package/dist/src/loaders/shared-helpers.js.map +1 -1
- package/dist/src/operators/data/copy.operator.js +2 -2
- package/dist/src/operators/data/copy.operator.js.map +1 -1
- package/dist/src/operators/data/rename.operator.js +1 -1
- package/dist/src/operators/data/rename.operator.js.map +1 -1
- package/dist/src/operators/helpers.d.ts.map +1 -1
- package/dist/src/operators/helpers.js +11 -1
- package/dist/src/operators/helpers.js.map +1 -1
- package/dist/src/operators/operator-runtime-registry.d.ts +2 -2
- package/dist/src/operators/operator-runtime-registry.d.ts.map +1 -1
- package/dist/src/operators/operator-runtime-registry.js +1 -1
- package/dist/src/operators/operator-runtime-registry.js.map +1 -1
- package/dist/src/operators/script/script.operators.d.ts.map +1 -1
- package/dist/src/operators/script/script.operators.js +9 -3
- package/dist/src/operators/script/script.operators.js.map +1 -1
- package/dist/src/runtime/config-types.d.ts +6 -0
- package/dist/src/runtime/config-types.d.ts.map +1 -1
- package/dist/src/runtime/executor-helpers.d.ts +77 -0
- package/dist/src/runtime/executor-helpers.d.ts.map +1 -0
- package/dist/src/runtime/executor-helpers.js +143 -0
- package/dist/src/runtime/executor-helpers.js.map +1 -0
- package/dist/src/runtime/executors/export.executor.d.ts +3 -1
- package/dist/src/runtime/executors/export.executor.d.ts.map +1 -1
- package/dist/src/runtime/executors/export.executor.js +15 -3
- package/dist/src/runtime/executors/export.executor.js.map +1 -1
- package/dist/src/runtime/executors/exporters/export-handler-registry.d.ts.map +1 -1
- package/dist/src/runtime/executors/exporters/export-handler-registry.js +5 -0
- package/dist/src/runtime/executors/exporters/export-handler-registry.js.map +1 -1
- package/dist/src/runtime/executors/exporters/export-handler.types.d.ts +3 -0
- package/dist/src/runtime/executors/exporters/export-handler.types.d.ts.map +1 -1
- package/dist/src/runtime/executors/exporters/export-handler.types.js.map +1 -1
- package/dist/src/runtime/executors/exporters/export-helpers.d.ts +1 -0
- package/dist/src/runtime/executors/exporters/export-helpers.d.ts.map +1 -1
- package/dist/src/runtime/executors/exporters/export-helpers.js +32 -3
- package/dist/src/runtime/executors/exporters/export-helpers.js.map +1 -1
- package/dist/src/runtime/executors/exporters/http-export.handler.js +4 -4
- package/dist/src/runtime/executors/exporters/http-export.handler.js.map +1 -1
- package/dist/src/runtime/executors/extractors/file-extract.handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/extractors/file-extract.handler.js +33 -13
- package/dist/src/runtime/executors/extractors/file-extract.handler.js.map +1 -1
- package/dist/src/runtime/executors/extractors/memory-extract.handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/extractors/memory-extract.handler.js +17 -9
- package/dist/src/runtime/executors/extractors/memory-extract.handler.js.map +1 -1
- package/dist/src/runtime/executors/feed.executor.d.ts.map +1 -1
- package/dist/src/runtime/executors/feed.executor.js +11 -2
- package/dist/src/runtime/executors/feed.executor.js.map +1 -1
- package/dist/src/runtime/executors/feeds/feed-handler-registry.d.ts.map +1 -1
- package/dist/src/runtime/executors/feeds/feed-handler-registry.js +4 -0
- package/dist/src/runtime/executors/feeds/feed-handler-registry.js.map +1 -1
- package/dist/src/runtime/executors/gate.executor.d.ts +3 -1
- package/dist/src/runtime/executors/gate.executor.d.ts.map +1 -1
- package/dist/src/runtime/executors/gate.executor.js +47 -26
- package/dist/src/runtime/executors/gate.executor.js.map +1 -1
- package/dist/src/runtime/executors/loaders/channel-handler.d.ts +3 -1
- package/dist/src/runtime/executors/loaders/channel-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/channel-handler.js +14 -4
- package/dist/src/runtime/executors/loaders/channel-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/collection-handler.d.ts +14 -2
- package/dist/src/runtime/executors/loaders/collection-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/collection-handler.js +93 -22
- package/dist/src/runtime/executors/loaders/collection-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/customer-group-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/customer-group-handler.js +2 -27
- package/dist/src/runtime/executors/loaders/customer-group-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/customer-handler.d.ts +6 -1
- package/dist/src/runtime/executors/loaders/customer-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/customer-handler.js +95 -13
- package/dist/src/runtime/executors/loaders/customer-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/deletion-handler.d.ts +39 -0
- package/dist/src/runtime/executors/loaders/deletion-handler.d.ts.map +1 -0
- package/dist/src/runtime/executors/loaders/deletion-handler.js +414 -0
- package/dist/src/runtime/executors/loaders/deletion-handler.js.map +1 -0
- package/dist/src/runtime/executors/loaders/facet-handler.d.ts +18 -3
- package/dist/src/runtime/executors/loaders/facet-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/facet-handler.js +127 -26
- package/dist/src/runtime/executors/loaders/facet-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/index.d.ts +2 -0
- package/dist/src/runtime/executors/loaders/index.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/index.js +5 -1
- package/dist/src/runtime/executors/loaders/index.js.map +1 -1
- package/dist/src/runtime/executors/loaders/inventory-adjust-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/inventory-adjust-handler.js +2 -28
- package/dist/src/runtime/executors/loaders/inventory-adjust-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/inventory-handler.d.ts +2 -1
- package/dist/src/runtime/executors/loaders/inventory-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/inventory-handler.js +8 -6
- package/dist/src/runtime/executors/loaders/inventory-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/loader-handler-registry.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/loader-handler-registry.js +117 -3
- package/dist/src/runtime/executors/loaders/loader-handler-registry.js.map +1 -1
- package/dist/src/runtime/executors/loaders/order-handler.d.ts +31 -3
- package/dist/src/runtime/executors/loaders/order-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/order-handler.js +194 -14
- package/dist/src/runtime/executors/loaders/order-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/order-upsert-handler.d.ts +15 -0
- package/dist/src/runtime/executors/loaders/order-upsert-handler.d.ts.map +1 -0
- package/dist/src/runtime/executors/loaders/order-upsert-handler.js +89 -0
- package/dist/src/runtime/executors/loaders/order-upsert-handler.js.map +1 -0
- package/dist/src/runtime/executors/loaders/payment-method-handler.d.ts +11 -2
- package/dist/src/runtime/executors/loaders/payment-method-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/payment-method-handler.js +78 -33
- package/dist/src/runtime/executors/loaders/payment-method-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/product-handler.d.ts +14 -0
- package/dist/src/runtime/executors/loaders/product-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/product-handler.js +91 -19
- package/dist/src/runtime/executors/loaders/product-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/promotion-handler.d.ts +9 -2
- package/dist/src/runtime/executors/loaders/promotion-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/promotion-handler.js +115 -68
- package/dist/src/runtime/executors/loaders/promotion-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/shared-lookups.d.ts +35 -1
- package/dist/src/runtime/executors/loaders/shared-lookups.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/shared-lookups.js +102 -0
- package/dist/src/runtime/executors/loaders/shared-lookups.js.map +1 -1
- package/dist/src/runtime/executors/loaders/shipping-method-handler.d.ts +11 -6
- package/dist/src/runtime/executors/loaders/shipping-method-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/shipping-method-handler.js +168 -61
- package/dist/src/runtime/executors/loaders/shipping-method-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/stock-location-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/stock-location-handler.js +2 -27
- package/dist/src/runtime/executors/loaders/stock-location-handler.js.map +1 -1
- package/dist/src/runtime/executors/loaders/variant-handler.d.ts.map +1 -1
- package/dist/src/runtime/executors/loaders/variant-handler.js +85 -12
- package/dist/src/runtime/executors/loaders/variant-handler.js.map +1 -1
- package/dist/src/runtime/executors/sink-handler-registry.d.ts +7 -11
- package/dist/src/runtime/executors/sink-handler-registry.d.ts.map +1 -1
- package/dist/src/runtime/executors/sink-handler-registry.js +374 -8
- package/dist/src/runtime/executors/sink-handler-registry.js.map +1 -1
- package/dist/src/runtime/executors/sink.executor.d.ts +1 -0
- package/dist/src/runtime/executors/sink.executor.d.ts.map +1 -1
- package/dist/src/runtime/executors/sink.executor.js +82 -12
- package/dist/src/runtime/executors/sink.executor.js.map +1 -1
- package/dist/src/runtime/executors/transform.executor.d.ts.map +1 -1
- package/dist/src/runtime/executors/transform.executor.js +31 -2
- package/dist/src/runtime/executors/transform.executor.js.map +1 -1
- package/dist/src/runtime/orchestration/graph-executor.d.ts.map +1 -1
- package/dist/src/runtime/orchestration/graph-executor.js +3 -2
- package/dist/src/runtime/orchestration/graph-executor.js.map +1 -1
- package/dist/src/runtime/orchestration/helpers.d.ts +4 -1
- package/dist/src/runtime/orchestration/helpers.d.ts.map +1 -1
- package/dist/src/runtime/orchestration/helpers.js +7 -2
- package/dist/src/runtime/orchestration/helpers.js.map +1 -1
- package/dist/src/runtime/orchestration/linear-executor.d.ts.map +1 -1
- package/dist/src/runtime/orchestration/linear-executor.js +3 -2
- package/dist/src/runtime/orchestration/linear-executor.js.map +1 -1
- package/dist/src/runtime/orchestration/replay-executor.d.ts.map +1 -1
- package/dist/src/runtime/orchestration/replay-executor.js +3 -2
- package/dist/src/runtime/orchestration/replay-executor.js.map +1 -1
- package/dist/src/runtime/orchestration/step-strategies/export-step.strategy.d.ts.map +1 -1
- package/dist/src/runtime/orchestration/step-strategies/export-step.strategy.js +12 -12
- package/dist/src/runtime/orchestration/step-strategies/export-step.strategy.js.map +1 -1
- package/dist/src/runtime/orchestration/step-strategies/feed-step.strategy.d.ts.map +1 -1
- package/dist/src/runtime/orchestration/step-strategies/feed-step.strategy.js +12 -12
- package/dist/src/runtime/orchestration/step-strategies/feed-step.strategy.js.map +1 -1
- package/dist/src/runtime/orchestration/step-strategies/load-step.strategy.js +2 -2
- package/dist/src/runtime/orchestration/step-strategies/load-step.strategy.js.map +1 -1
- package/dist/src/runtime/orchestration/step-strategies/sink-step.strategy.d.ts.map +1 -1
- package/dist/src/runtime/orchestration/step-strategies/sink-step.strategy.js +12 -12
- package/dist/src/runtime/orchestration/step-strategies/sink-step.strategy.js.map +1 -1
- package/dist/src/runtime/orchestration/step-strategies/step-dispatcher.d.ts.map +1 -1
- package/dist/src/runtime/orchestration/step-strategies/step-dispatcher.js +4 -3
- package/dist/src/runtime/orchestration/step-strategies/step-dispatcher.js.map +1 -1
- package/dist/src/runtime/orchestration/step-strategies/transform-step.strategy.js +4 -4
- package/dist/src/runtime/orchestration/step-strategies/transform-step.strategy.js.map +1 -1
- package/dist/src/runtime/orchestration/types.d.ts +1 -0
- package/dist/src/runtime/orchestration/types.d.ts.map +1 -1
- package/dist/src/runtime/utils.d.ts.map +1 -1
- package/dist/src/runtime/utils.js +8 -1
- package/dist/src/runtime/utils.js.map +1 -1
- package/dist/src/sdk/adapters/queue/index.d.ts +1 -0
- package/dist/src/sdk/adapters/queue/index.d.ts.map +1 -1
- package/dist/src/sdk/adapters/queue/index.js +1 -0
- package/dist/src/sdk/adapters/queue/index.js.map +1 -1
- package/dist/src/sdk/adapters/queue/internal.adapter.d.ts +32 -0
- package/dist/src/sdk/adapters/queue/internal.adapter.d.ts.map +1 -0
- package/dist/src/sdk/adapters/queue/internal.adapter.js +68 -0
- package/dist/src/sdk/adapters/queue/internal.adapter.js.map +1 -0
- package/dist/src/sdk/adapters/queue/queue-adapter.registry.d.ts.map +1 -1
- package/dist/src/sdk/adapters/queue/queue-adapter.registry.js +3 -0
- package/dist/src/sdk/adapters/queue/queue-adapter.registry.js.map +1 -1
- package/dist/src/sdk/adapters/queue/rabbitmq.adapter.d.ts.map +1 -1
- package/dist/src/sdk/adapters/queue/rabbitmq.adapter.js +2 -1
- package/dist/src/sdk/adapters/queue/rabbitmq.adapter.js.map +1 -1
- package/dist/src/sdk/constants.d.ts +2 -2
- package/dist/src/sdk/constants.d.ts.map +1 -1
- package/dist/src/sdk/dsl/pipeline-builder.d.ts +8 -2
- package/dist/src/sdk/dsl/pipeline-builder.d.ts.map +1 -1
- package/dist/src/sdk/dsl/pipeline-builder.js +115 -19
- package/dist/src/sdk/dsl/pipeline-builder.js.map +1 -1
- package/dist/src/sdk/dsl/step-configs.d.ts +73 -7
- package/dist/src/sdk/dsl/step-configs.d.ts.map +1 -1
- package/dist/src/services/events/consumer-discovery.d.ts.map +1 -1
- package/dist/src/services/events/consumer-discovery.js +13 -11
- package/dist/src/services/events/consumer-discovery.js.map +1 -1
- package/dist/src/services/events/consumer-lifecycle.d.ts.map +1 -1
- package/dist/src/services/events/consumer-lifecycle.js +19 -15
- package/dist/src/services/events/consumer-lifecycle.js.map +1 -1
- package/dist/src/services/events/event-trigger.service.d.ts.map +1 -1
- package/dist/src/services/events/event-trigger.service.js +8 -3
- package/dist/src/services/events/event-trigger.service.js.map +1 -1
- package/dist/src/services/events/hook.service.d.ts.map +1 -1
- package/dist/src/services/events/hook.service.js +7 -3
- package/dist/src/services/events/hook.service.js.map +1 -1
- package/dist/src/services/events/message-processing.d.ts.map +1 -1
- package/dist/src/services/events/message-processing.js +13 -8
- package/dist/src/services/events/message-processing.js.map +1 -1
- package/dist/src/services/logger/datahub-logger.d.ts +7 -0
- package/dist/src/services/logger/datahub-logger.d.ts.map +1 -1
- package/dist/src/services/logger/datahub-logger.js +9 -0
- package/dist/src/services/logger/datahub-logger.js.map +1 -1
- package/dist/src/services/pipeline/pipeline-runner.service.d.ts +3 -1
- package/dist/src/services/pipeline/pipeline-runner.service.d.ts.map +1 -1
- package/dist/src/services/pipeline/pipeline-runner.service.js +14 -4
- package/dist/src/services/pipeline/pipeline-runner.service.js.map +1 -1
- package/dist/src/services/pipeline/pipeline.service.d.ts.map +1 -1
- package/dist/src/services/pipeline/pipeline.service.js +8 -2
- package/dist/src/services/pipeline/pipeline.service.js.map +1 -1
- package/dist/src/services/storage/retention.service.d.ts.map +1 -1
- package/dist/src/services/storage/retention.service.js +22 -0
- package/dist/src/services/storage/retention.service.js.map +1 -1
- package/dist/src/services/testing/step-test.service.d.ts.map +1 -1
- package/dist/src/services/testing/step-test.service.js +17 -1
- package/dist/src/services/testing/step-test.service.js.map +1 -1
- package/dist/src/services/validation/definition-validation.service.d.ts.map +1 -1
- package/dist/src/services/validation/definition-validation.service.js +4 -1
- package/dist/src/services/validation/definition-validation.service.js.map +1 -1
- package/dist/src/services/validation/trigger-validation.d.ts.map +1 -1
- package/dist/src/services/validation/trigger-validation.js +79 -12
- package/dist/src/services/validation/trigger-validation.js.map +1 -1
- package/dist/src/types/index.d.ts +1 -0
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/types/index.js.map +1 -1
- package/dist/src/types/loader-configs.d.ts +1071 -0
- package/dist/src/types/loader-configs.d.ts.map +1 -0
- package/dist/src/types/loader-configs.js +54 -0
- package/dist/src/types/loader-configs.js.map +1 -0
- package/dist/src/types/step-configs.d.ts +14 -5
- package/dist/src/types/step-configs.d.ts.map +1 -1
- package/dist/src/types/step-configs.js +3 -0
- package/dist/src/types/step-configs.js.map +1 -1
- package/dist/src/utils/code-security.utils.d.ts +18 -0
- package/dist/src/utils/code-security.utils.d.ts.map +1 -1
- package/dist/src/utils/code-security.utils.js +125 -9
- package/dist/src/utils/code-security.utils.js.map +1 -1
- package/dist/src/validation/pipeline-definition.validator.js +2 -1
- package/dist/src/validation/pipeline-definition.validator.js.map +1 -1
- package/docs/developer-guide/README.md +2 -0
- package/docs/developer-guide/dsl/pipeline-builder.md +12 -0
- package/docs/developer-guide/extending/README.md +230 -10
- package/docs/developer-guide/extending/custom-sinks.md +87 -0
- package/docs/developer-guide/extending/events.md +4 -1
- package/docs/examples/validation-error-messages.md +246 -0
- package/docs/guides/multi-channel.md +1190 -0
- package/docs/guides/multi-currency.md +881 -0
- package/docs/guides/multi-entity.md +597 -0
- package/docs/guides/multi-language.md +957 -0
- package/docs/reference/README.md +11 -4
- package/docs/reference/extractors.md +30 -0
- package/docs/reference/loaders.md +359 -21
- package/docs/reference/operators-complete.md +1251 -0
- package/docs/reference/operators.md +36 -2
- package/docs/reference/sinks.md +7 -6
- package/docs/reference/step-types.md +12 -5
- package/docs/user-guide/pipelines.md +82 -13
- package/package.json +1 -1
- package/shared/types/adapter-config.types.ts +162 -2
- package/shared/types/index.ts +12 -0
- package/shared/types/loader.types.ts +4 -0
- package/shared/types/step.types.ts +6 -0
- 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":"
|
|
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
|
|
123
|
-
const host =
|
|
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
|
|
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 =
|
|
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
|
|
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
|
|
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
|
},
|