@fluentcommerce/fc-connect-sdk 0.1.53 → 0.1.55
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 +30 -2
- package/README.md +39 -0
- package/dist/cjs/auth/index.d.ts +3 -0
- package/dist/cjs/auth/index.js +13 -0
- package/dist/cjs/auth/profile-loader.d.ts +18 -0
- package/dist/cjs/auth/profile-loader.js +208 -0
- package/dist/cjs/client-factory.d.ts +4 -0
- package/dist/cjs/client-factory.js +10 -0
- package/dist/cjs/clients/fluent-client.js +13 -6
- package/dist/cjs/index.d.ts +3 -1
- package/dist/cjs/index.js +8 -2
- package/dist/cjs/utils/pagination-helpers.js +38 -2
- package/dist/cjs/versori/fluent-versori-client.js +11 -5
- package/dist/esm/auth/index.d.ts +3 -0
- package/dist/esm/auth/index.js +2 -0
- package/dist/esm/auth/profile-loader.d.ts +18 -0
- package/dist/esm/auth/profile-loader.js +169 -0
- package/dist/esm/client-factory.d.ts +4 -0
- package/dist/esm/client-factory.js +9 -0
- package/dist/esm/clients/fluent-client.js +13 -6
- package/dist/esm/index.d.ts +3 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/utils/pagination-helpers.js +38 -2
- package/dist/esm/versori/fluent-versori-client.js +11 -5
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/tsconfig.types.tsbuildinfo +1 -1
- package/dist/types/auth/index.d.ts +3 -0
- package/dist/types/auth/profile-loader.d.ts +18 -0
- package/dist/types/client-factory.d.ts +4 -0
- package/dist/types/index.d.ts +3 -1
- package/docs/00-START-HERE/EXPORT-VALIDATION.md +158 -158
- package/docs/00-START-HERE/cli-analyze-source-structure-guide.md +655 -655
- package/docs/00-START-HERE/cli-documentation-index.md +202 -202
- package/docs/00-START-HERE/cli-quick-reference.md +252 -252
- package/docs/00-START-HERE/decision-tree.md +552 -552
- package/docs/00-START-HERE/getting-started.md +1070 -1070
- package/docs/00-START-HERE/mapper-quick-decision-guide.md +235 -235
- package/docs/00-START-HERE/readme.md +237 -237
- package/docs/00-START-HERE/retailerid-configuration.md +404 -404
- package/docs/00-START-HERE/sdk-philosophy.md +794 -794
- package/docs/00-START-HERE/troubleshooting-quick-reference.md +1086 -1086
- package/docs/01-TEMPLATES/faq.md +686 -686
- package/docs/01-TEMPLATES/patterns/pattern-templates-guide.md +68 -68
- package/docs/01-TEMPLATES/patterns/patterns-csv-schema-validation-and-rejection-report.md +233 -233
- package/docs/01-TEMPLATES/patterns/patterns-custom-resolvers.md +407 -407
- package/docs/01-TEMPLATES/patterns/patterns-error-handling-retry.md +511 -511
- package/docs/01-TEMPLATES/patterns/patterns-field-mapping-universal.md +701 -701
- package/docs/01-TEMPLATES/patterns/patterns-large-file-splitting.md +1430 -1430
- package/docs/01-TEMPLATES/patterns/patterns-master-data-etl.md +2399 -2399
- package/docs/01-TEMPLATES/patterns/patterns-pagination-streaming.md +447 -447
- package/docs/01-TEMPLATES/patterns/patterns-state-duplicate-prevention.md +385 -385
- package/docs/01-TEMPLATES/readme.md +957 -957
- package/docs/01-TEMPLATES/standalone/standalone-asn-inbound-processing.md +1209 -1209
- package/docs/01-TEMPLATES/standalone/standalone-graphql-query-export.md +1140 -1140
- package/docs/01-TEMPLATES/standalone/standalone-graphql-to-parquet-partitioned-s3.md +432 -432
- package/docs/01-TEMPLATES/standalone/standalone-multi-channel-inventory-sync.md +1185 -1185
- package/docs/01-TEMPLATES/standalone/standalone-multi-source-aggregation.md +1462 -1462
- package/docs/01-TEMPLATES/standalone/standalone-s3-csv-batch-api.md +1390 -1390
- package/docs/01-TEMPLATES/standalone/standalone-s3-csv-inventory-to-batch.md +330 -330
- package/docs/01-TEMPLATES/standalone/standalone-scripts-guide.md +87 -87
- package/docs/01-TEMPLATES/standalone/standalone-sftp-xml-graphql.md +1444 -1444
- package/docs/01-TEMPLATES/standalone/standalone-webhook-payload-processing.md +688 -688
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-dropship-order-routing.md +193 -193
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-graphql-parquet-extraction.md +518 -518
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-inter-location-transfers.md +2162 -2162
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-pre-order-allocation.md +2226 -2226
- package/docs/01-TEMPLATES/versori/business-examples/business-scenarios-guide.md +87 -87
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-connection-validation-pattern.md +656 -656
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-dual-workflow-connector.md +835 -835
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-guide.md +108 -108
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-kv-state-management.md +1533 -1533
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-xml-response-patterns.md +1160 -1160
- package/docs/01-TEMPLATES/versori/versori-platform-guide.md +201 -201
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-asn-purchase-order.md +1906 -1906
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-dropship-routing.md +1074 -1074
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-flash-sale-reserve.md +1395 -1395
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-generic-xml-order.md +888 -888
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-payment-gateway-integration.md +2478 -2478
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-rma-returns-comprehensive.md +2240 -2240
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-xml-order-ingestion.md +2029 -2029
- package/docs/01-TEMPLATES/versori/webhooks/webhook-templates-guide.md +140 -140
- package/docs/01-TEMPLATES/versori/workflows/_examples/sample-data/inventory-mapping.json +20 -20
- package/docs/01-TEMPLATES/versori/workflows/_examples/sample-data/products_2025-01-22.csv +11 -11
- package/docs/01-TEMPLATES/versori/workflows/_examples/sample-data/sample-data-guide.md +34 -34
- package/docs/01-TEMPLATES/versori/workflows/_examples/workflow-examples-guide.md +36 -36
- package/docs/01-TEMPLATES/versori/workflows/extraction/extraction-modes-guide.md +1038 -1038
- package/docs/01-TEMPLATES/versori/workflows/extraction/extraction-workflows-guide.md +138 -138
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/graphql-extraction-guide.md +63 -63
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-fulfillments-to-sftp-csv.md +2062 -2062
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-fulfillments-to-sftp-xml.md +2294 -2294
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-positions-to-s3-csv.md +2461 -2461
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-positions-to-sftp-xml.md +2529 -2529
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-quantities-to-s3-csv.md +2464 -2464
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-quantities-to-s3-json.md +1959 -1959
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-orders-to-s3-csv.md +1953 -1953
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-orders-to-sftp-xml.md +2541 -2541
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-products-to-s3-json.md +2384 -2384
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-products-to-sftp-xml.md +2445 -2445
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-virtual-positions-to-s3-csv.md +2355 -2355
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-virtual-positions-to-s3-json.md +2042 -2042
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-virtual-positions-to-sftp-xml.md +2726 -2726
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/batch-api-guide.md +206 -206
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-cycle-count-reconciliation.md +2030 -2030
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-multi-channel-inventory-sync.md +1882 -1882
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-s3-csv-inventory-batch.md +2827 -2827
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-s3-json-inventory-batch.md +1952 -1952
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-s3-xml-inventory-batch.md +3289 -3289
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-sftp-csv-inventory-batch.md +3064 -3064
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-sftp-json-inventory-batch.md +3238 -3238
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-sftp-xml-inventory-batch.md +2977 -2977
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/event-api-guide.md +321 -321
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-payload-json-order-cancel-event.md +959 -959
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-payload-xml-order-cancel-event.md +1170 -1170
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-csv-product-event.md +2312 -2312
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-json-product-event.md +2999 -2999
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-parquet-product-event.md +2836 -2836
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-xml-product-event.md +2395 -2395
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-csv-product-event.md +2295 -2295
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-json-product-event.md +2602 -2602
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-parquet-product-event.md +2589 -2589
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-xml-product-event.md +3578 -3578
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/graphql-mutations-guide.md +93 -93
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-payload-json-order-update-graphql.md +1260 -1260
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-payload-xml-order-update-graphql.md +1472 -1472
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-control-graphql.md +2417 -2417
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-location-graphql.md +2811 -2811
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-price-graphql.md +2619 -2619
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-json-location-graphql.md +2807 -2807
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-xml-location-graphql.md +2373 -2373
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-sftp-csv-control-graphql.md +2740 -2740
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-sftp-csv-location-graphql.md +2760 -2760
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-sftp-json-location-graphql.md +1710 -1710
- package/docs/01-TEMPLATES/versori/workflows/ingestion/ingestion-workflows-guide.md +136 -136
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/rubix-webhooks-guide.md +520 -520
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/template-webhook-rubix-fulfilment-to-sftp-xml-inline.md +1418 -1418
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/template-webhook-rubix-fulfilment-to-sftp-xml-universal-mapper.md +1785 -1785
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/template-webhook-rubix-order-attribute-update.md +824 -824
- package/docs/01-TEMPLATES/versori/workflows/workflows-overview-guide.md +646 -646
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-batch-archival.md +724 -724
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-job-tracker.md +627 -627
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-partial-batch-recovery.md +561 -561
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-quick-reference.md +367 -367
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-readme.md +407 -407
- package/docs/02-CORE-GUIDES/advanced-services/readme.md +49 -49
- package/docs/02-CORE-GUIDES/api-reference/api-reference-quick-reference.md +548 -548
- package/docs/02-CORE-GUIDES/api-reference/event-api-input-output-reference.md +702 -1171
- package/docs/02-CORE-GUIDES/api-reference/examples/client-initialization.ts +286 -286
- package/docs/02-CORE-GUIDES/api-reference/graphql-error-classification.md +337 -337
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-01-client-api.md +399 -482
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-03-authentication.md +199 -199
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-04-graphql-mapping.md +925 -925
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-05-services.md +1198 -1198
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-06-data-sources.md +1083 -1083
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-07-parsers.md +1097 -1097
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-08-pagination.md +513 -513
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-08-types.md +545 -597
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-09-error-handling.md +527 -527
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-09-webhook-validation.md +514 -514
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-10-extraction.md +557 -557
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-10-utilities.md +412 -412
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-11-cli-tools.md +423 -423
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-11-error-handling.md +716 -716
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-12-analyze-source-structure.md +518 -518
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-12-partial-responses.md +212 -212
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-12-testing.md +300 -300
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-13-resolver-builder.md +322 -322
- package/docs/02-CORE-GUIDES/api-reference/readme.md +279 -279
- package/docs/02-CORE-GUIDES/auto-pagination/auto-pagination-quick-reference.md +351 -351
- package/docs/02-CORE-GUIDES/auto-pagination/auto-pagination-readme.md +277 -277
- package/docs/02-CORE-GUIDES/auto-pagination/examples/auto-pagination-readme.md +178 -178
- package/docs/02-CORE-GUIDES/auto-pagination/examples/common-patterns.ts +351 -351
- package/docs/02-CORE-GUIDES/auto-pagination/examples/paginate-products.ts +384 -384
- package/docs/02-CORE-GUIDES/auto-pagination/examples/paginate-virtual-positions.ts +308 -308
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-01-foundations.md +470 -470
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-02-quick-start.md +713 -713
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-03-configuration.md +754 -754
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-04-advanced-patterns.md +732 -732
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-05-sdk-integration.md +847 -847
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-06-troubleshooting.md +359 -359
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-07-api-reference.md +462 -462
- package/docs/02-CORE-GUIDES/auto-pagination/readme.md +54 -54
- package/docs/02-CORE-GUIDES/data-sources/data-sources-file-operations-error-handling.md +1487 -1487
- package/docs/02-CORE-GUIDES/data-sources/data-sources-quick-reference.md +836 -836
- package/docs/02-CORE-GUIDES/data-sources/data-sources-readme.md +276 -276
- package/docs/02-CORE-GUIDES/data-sources/data-sources-sftp-credential-access-security.md +553 -553
- package/docs/02-CORE-GUIDES/data-sources/examples/common-patterns.ts +409 -409
- package/docs/02-CORE-GUIDES/data-sources/examples/data-sources-readme.md +178 -178
- package/docs/02-CORE-GUIDES/data-sources/examples/s3-operations.ts +308 -308
- package/docs/02-CORE-GUIDES/data-sources/examples/sftp-operations.ts +371 -371
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-01-foundations.md +735 -735
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-02-s3-operations.md +1302 -1302
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-03-sftp-operations.md +1379 -1379
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-04-file-patterns.md +941 -941
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-05-advanced-topics.md +813 -813
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-06-integration-patterns.md +486 -486
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-07-troubleshooting.md +387 -387
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-08-api-reference.md +417 -417
- package/docs/02-CORE-GUIDES/data-sources/readme.md +77 -77
- package/docs/02-CORE-GUIDES/error-handling-guide.md +936 -936
- package/docs/02-CORE-GUIDES/extraction/examples/02-core-guides-extraction-readme.md +116 -116
- package/docs/02-CORE-GUIDES/extraction/examples/common-patterns.ts +428 -428
- package/docs/02-CORE-GUIDES/extraction/examples/extract-inventory-basic.ts +187 -187
- package/docs/02-CORE-GUIDES/extraction/extraction-quick-reference.md +596 -596
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-01-foundations.md +514 -514
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-02-basic-extraction.md +823 -823
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-03-parquet-processing.md +507 -507
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-04-data-enrichment.md +546 -546
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-05-transformation.md +494 -494
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-06-export-formats.md +458 -458
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-06-performance.md +138 -138
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-07-api-reference.md +148 -148
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-07-optimization.md +692 -692
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-08-extraction-orchestrator.md +1008 -1008
- package/docs/02-CORE-GUIDES/extraction/readme.md +151 -151
- package/docs/02-CORE-GUIDES/ingestion/examples/_simple-kv-store.ts +40 -40
- package/docs/02-CORE-GUIDES/ingestion/examples/error-recovery.ts +728 -728
- package/docs/02-CORE-GUIDES/ingestion/examples/event-driven.ts +501 -501
- package/docs/02-CORE-GUIDES/ingestion/examples/local-file-ingestion.ts +88 -88
- package/docs/02-CORE-GUIDES/ingestion/examples/parquet-ingestion.ts +117 -117
- package/docs/02-CORE-GUIDES/ingestion/examples/performance-optimized.ts +647 -647
- package/docs/02-CORE-GUIDES/ingestion/examples/s3-csv-ingestion.ts +169 -169
- package/docs/02-CORE-GUIDES/ingestion/examples/sftp-csv-ingestion.ts +134 -134
- package/docs/02-CORE-GUIDES/ingestion/ingestion-quick-reference.md +546 -546
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-01-introduction.md +626 -626
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-02-quick-start.md +658 -658
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-03-data-sources.md +1052 -1052
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-04-field-mapping.md +763 -763
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-05-advanced-parsers.md +676 -676
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-06-batch-api.md +1295 -1295
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-07-api-reference.md +138 -138
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-07-state-management.md +1037 -1037
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-08-performance-optimization.md +1349 -1349
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-09-best-practices.md +1893 -1893
- package/docs/02-CORE-GUIDES/ingestion/readme.md +160 -160
- package/docs/02-CORE-GUIDES/logging-guide.md +585 -585
- package/docs/02-CORE-GUIDES/mapping/error-handling-patterns.md +401 -401
- package/docs/02-CORE-GUIDES/mapping/examples/02-core-guides-mapping-readme.md +128 -128
- package/docs/02-CORE-GUIDES/mapping/examples/common-patterns.ts +273 -273
- package/docs/02-CORE-GUIDES/mapping/examples/csv-location-ingestion.json +36 -36
- package/docs/02-CORE-GUIDES/mapping/examples/csv-mapping.ts +242 -242
- package/docs/02-CORE-GUIDES/mapping/examples/graphql-to-parquet-extraction.json +36 -36
- package/docs/02-CORE-GUIDES/mapping/examples/json-mapping.ts +213 -213
- package/docs/02-CORE-GUIDES/mapping/examples/json-product-to-mutation.json +48 -48
- package/docs/02-CORE-GUIDES/mapping/examples/xml-mapping.ts +291 -291
- package/docs/02-CORE-GUIDES/mapping/examples/xml-order-to-mutation.json +45 -45
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/graphql-mutation-mapping-quick-reference.md +463 -463
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/graphql-mutation-mapping-readme.md +227 -227
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-01-introduction.md +222 -222
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-02-quick-start.md +351 -351
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-03-schema-validation.md +569 -569
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-04-mapping-patterns.md +471 -471
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-05-configuration-reference.md +611 -611
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-06-advanced-xpath.md +148 -148
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-06-path-syntax.md +464 -464
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-07-api-reference.md +94 -94
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-07-array-handling.md +307 -307
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-08-custom-resolvers.md +544 -544
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-09-advanced-patterns.md +427 -427
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-10-hooks-and-variables.md +336 -336
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-11-error-handling.md +488 -488
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-12-arguments-vs-nodes.md +383 -383
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-13-best-practices.md +477 -477
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/readme.md +62 -62
- package/docs/02-CORE-GUIDES/mapping/mapping-format-decision-tree.md +480 -480
- package/docs/02-CORE-GUIDES/mapping/mapping-graphql-alias-batching-guide.md +820 -820
- package/docs/02-CORE-GUIDES/mapping/mapping-javascript-objects.md +2369 -2369
- package/docs/02-CORE-GUIDES/mapping/mapping-mapper-comparison-guide.md +682 -682
- package/docs/02-CORE-GUIDES/mapping/modules/02-core-guides-mapping-07-api-reference.md +1327 -1327
- package/docs/02-CORE-GUIDES/mapping/modules/02-core-guides-mapping-08-error-handling.md +1142 -1142
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-04-use-cases.md +891 -891
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-06-helpers-resolvers.md +1126 -1126
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-06-sdk-resolvers.md +199 -199
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-07-api-reference.md +1319 -1319
- package/docs/02-CORE-GUIDES/mapping/readme.md +178 -178
- package/docs/02-CORE-GUIDES/mapping/resolver-registration.md +410 -410
- package/docs/02-CORE-GUIDES/mapping/resolvers/examples/common-patterns.ts +226 -226
- package/docs/02-CORE-GUIDES/mapping/resolvers/examples/custom-resolvers.ts +227 -227
- package/docs/02-CORE-GUIDES/mapping/resolvers/examples/sdk-resolvers-usage.ts +203 -203
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-readme.md +274 -274
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-api-reference.md +679 -679
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-cookbook.md +826 -826
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-guide.md +1330 -1330
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-helpers-reference.md +1437 -1437
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-parameters-reference.md +553 -553
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-troubleshooting.md +854 -854
- package/docs/02-CORE-GUIDES/mapping/resolvers/readme.md +75 -75
- package/docs/02-CORE-GUIDES/parsers/examples/02-core-guides-parsers-readme.md +161 -161
- package/docs/02-CORE-GUIDES/parsers/examples/csv-parser-examples.ts +110 -110
- package/docs/02-CORE-GUIDES/parsers/examples/json-parser-examples.ts +33 -33
- package/docs/02-CORE-GUIDES/parsers/examples/parquet-parser-examples.ts +47 -47
- package/docs/02-CORE-GUIDES/parsers/examples/xml-parser-examples.ts +38 -38
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-01-foundations.md +355 -355
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-02-csv-parser.md +772 -772
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-03-json-parser.md +789 -789
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-04-xml-parser.md +857 -857
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-05-parquet-parser.md +603 -603
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-06-integration-patterns.md +702 -702
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-06-streaming.md +121 -121
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-07-api-reference.md +89 -89
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-07-troubleshooting.md +727 -727
- package/docs/02-CORE-GUIDES/parsers/parsers-quick-reference.md +482 -482
- package/docs/02-CORE-GUIDES/parsers/parsers-readme.md +258 -258
- package/docs/02-CORE-GUIDES/parsers/readme.md +65 -65
- package/docs/02-CORE-GUIDES/readme.md +194 -194
- package/docs/02-CORE-GUIDES/webhook-validation/examples/basic-validation.ts +108 -108
- package/docs/02-CORE-GUIDES/webhook-validation/examples/common-patterns.ts +316 -316
- package/docs/02-CORE-GUIDES/webhook-validation/examples/webhook-validation-readme.md +61 -61
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-01-foundations.md +440 -440
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-02-quick-start.md +525 -525
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-03-versori-integration.md +741 -741
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-04-platform-integration.md +629 -629
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-05-configuration.md +535 -535
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-06-error-handling.md +611 -611
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-06-troubleshooting.md +124 -124
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-07-api-reference.md +511 -511
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-08-rubix-webhooks.md +590 -590
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-09-rubix-event-vs-http-call.md +432 -432
- package/docs/02-CORE-GUIDES/webhook-validation/readme.md +239 -239
- package/docs/02-CORE-GUIDES/webhook-validation/webhook-validation-quick-reference.md +392 -392
- package/docs/03-PATTERN-GUIDES/connector-scenarios/connector-scenarios-quick-reference.md +498 -498
- package/docs/03-PATTERN-GUIDES/connector-scenarios/connector-scenarios-readme.md +313 -313
- package/docs/03-PATTERN-GUIDES/connector-scenarios/examples/common-patterns.ts +612 -612
- package/docs/03-PATTERN-GUIDES/connector-scenarios/examples/connector-scenarios-readme.md +253 -253
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-01-foundations.md +452 -452
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-02-simple-scenarios.md +681 -681
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-03-intermediate-scenarios.md +637 -637
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-04-advanced-scenarios.md +650 -650
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-05-bidirectional-sync.md +233 -233
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-06-production-patterns.md +442 -442
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-07-reference.md +445 -445
- package/docs/03-PATTERN-GUIDES/connector-scenarios/readme.md +31 -31
- package/docs/03-PATTERN-GUIDES/enterprise-integration-patterns.md +1528 -1528
- package/docs/03-PATTERN-GUIDES/error-handling/comprehensive-error-handling-guide.md +1437 -1437
- package/docs/03-PATTERN-GUIDES/error-handling/error-handling-quick-reference.md +390 -390
- package/docs/03-PATTERN-GUIDES/error-handling/examples/common-patterns.ts +438 -438
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-01-foundations.md +362 -362
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-02-error-types.md +850 -850
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-03-utf8-handling.md +456 -456
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-04-error-scenarios.md +658 -658
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-05-calling-patterns.md +671 -671
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-06-retry-strategies.md +1034 -1034
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-07-monitoring.md +653 -653
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-08-api-reference.md +847 -847
- package/docs/03-PATTERN-GUIDES/error-handling/readme.md +36 -36
- package/docs/03-PATTERN-GUIDES/examples/__tests__/readme.md +40 -40
- package/docs/03-PATTERN-GUIDES/examples/__tests__/resolver-examples.test.js +282 -282
- package/docs/03-PATTERN-GUIDES/examples/test-data/03-pattern-guides-readme.md +110 -110
- package/docs/03-PATTERN-GUIDES/examples/test-data/canonical-inventory.json +123 -123
- package/docs/03-PATTERN-GUIDES/examples/test-data/canonical-order.json +171 -171
- package/docs/03-PATTERN-GUIDES/examples/test-data/readme.md +28 -28
- package/docs/03-PATTERN-GUIDES/extraction/extraction-readme.md +15 -15
- package/docs/03-PATTERN-GUIDES/extraction/readme.md +25 -25
- package/docs/03-PATTERN-GUIDES/file-operations/examples/common-patterns.ts +407 -407
- package/docs/03-PATTERN-GUIDES/file-operations/examples/file-operations-readme.md +142 -142
- package/docs/03-PATTERN-GUIDES/file-operations/file-operations-quick-reference.md +462 -462
- package/docs/03-PATTERN-GUIDES/file-operations/file-operations-readme.md +379 -379
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-01-foundations.md +430 -430
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-02-quick-start.md +484 -484
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-03-s3-operations.md +507 -507
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-04-sftp-operations.md +963 -963
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-05-streaming-performance.md +503 -503
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-06-archive-patterns.md +386 -386
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-06-error-handling.md +117 -117
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-07-api-reference.md +78 -78
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-07-testing-troubleshooting.md +567 -567
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-08-api-reference.md +1055 -1055
- package/docs/03-PATTERN-GUIDES/file-operations/readme.md +32 -32
- package/docs/03-PATTERN-GUIDES/ingestion/ingestion-readme.md +15 -15
- package/docs/03-PATTERN-GUIDES/ingestion/readme.md +25 -25
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/batch-processing.ts +130 -130
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/common-patterns.ts +360 -360
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/delta-sync.ts +130 -130
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/integration-patterns-readme.md +100 -100
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/real-time-webhook.ts +398 -398
- package/docs/03-PATTERN-GUIDES/integration-patterns/integration-patterns-quick-reference.md +962 -962
- package/docs/03-PATTERN-GUIDES/integration-patterns/integration-patterns-readme.md +134 -134
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-01-real-time-processing.md +991 -991
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-02-batch-processing.md +1547 -1547
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-03-delta-sync.md +1108 -1108
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-04-webhook-patterns.md +1181 -1181
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-05-error-handling.md +1061 -1061
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-06-advanced-integration-services.md +1547 -1547
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-06-performance.md +109 -109
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-07-api-reference.md +34 -34
- package/docs/03-PATTERN-GUIDES/integration-patterns/readme.md +30 -30
- package/docs/03-PATTERN-GUIDES/logging-minimal-mode.md +128 -128
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/common-patterns.ts +380 -380
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/multiple-connections-readme.md +139 -139
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/parallel-root-connections.ts +149 -149
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/real-world-scenarios.ts +405 -405
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-01-foundations.md +378 -378
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-02-quick-start.md +566 -566
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-03-targeting-connections.md +659 -659
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-04-parallel-queries.md +656 -656
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-05-best-practices.md +624 -624
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-06-api-reference.md +824 -824
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-06-versori.md +119 -119
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-07-api-reference.md +87 -87
- package/docs/03-PATTERN-GUIDES/multiple-connections/multiple-connections-quick-reference.md +353 -353
- package/docs/03-PATTERN-GUIDES/multiple-connections/multiple-connections-readme.md +270 -270
- package/docs/03-PATTERN-GUIDES/multiple-connections/readme.md +30 -30
- package/docs/03-PATTERN-GUIDES/pagination/pagination-readme.md +14 -14
- package/docs/03-PATTERN-GUIDES/pagination/readme.md +24 -24
- package/docs/03-PATTERN-GUIDES/parquet/examples/common-patterns.ts +180 -180
- package/docs/03-PATTERN-GUIDES/parquet/examples/read-parquet.ts +48 -48
- package/docs/03-PATTERN-GUIDES/parquet/examples/write-parquet.ts +65 -65
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-01-introduction.md +393 -393
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-02-quick-start.md +572 -572
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-03-reading-parquet.md +525 -525
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-04-writing-parquet.md +554 -554
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-05-graphql-extraction.md +405 -405
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-06-performance.md +104 -104
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-06-s3-integration.md +511 -511
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-07-api-reference.md +90 -90
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-07-performance-optimization.md +525 -525
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-08-best-practices.md +712 -712
- package/docs/03-PATTERN-GUIDES/parquet/parquet-quick-reference.md +683 -683
- package/docs/03-PATTERN-GUIDES/parquet/parquet-readme.md +248 -248
- package/docs/03-PATTERN-GUIDES/parquet/readme.md +32 -32
- package/docs/03-PATTERN-GUIDES/parsers/parsers-readme.md +12 -12
- package/docs/03-PATTERN-GUIDES/parsers/readme.md +24 -24
- package/docs/03-PATTERN-GUIDES/readme.md +159 -159
- package/docs/03-PATTERN-GUIDES/webhooks/readme.md +24 -24
- package/docs/03-PATTERN-GUIDES/webhooks/webhooks-readme.md +8 -8
- package/docs/04-REFERENCE/architecture/architecture-01-overview.md +427 -427
- package/docs/04-REFERENCE/architecture/architecture-02-client-architecture.md +424 -424
- package/docs/04-REFERENCE/architecture/architecture-03-data-flow.md +690 -690
- package/docs/04-REFERENCE/architecture/architecture-04-service-layer.md +834 -834
- package/docs/04-REFERENCE/architecture/architecture-05-integration-architecture.md +655 -655
- package/docs/04-REFERENCE/architecture/architecture-06-state-management.md +653 -653
- package/docs/04-REFERENCE/architecture/architecture-adding-new-data-sources.md +686 -686
- package/docs/04-REFERENCE/architecture/readme.md +279 -279
- package/docs/04-REFERENCE/platforms/deno/readme.md +117 -117
- package/docs/04-REFERENCE/platforms/nodejs/readme.md +146 -146
- package/docs/04-REFERENCE/platforms/readme.md +135 -135
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-01-introduction.md +398 -398
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-02-quick-start.md +560 -560
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-03-authentication.md +757 -757
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-04-workflows.md +2476 -2476
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-05-connections.md +1167 -1167
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-06-kv-storage.md +990 -990
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-06-state-management.md +121 -121
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-07-api-reference.md +68 -68
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-07-deployment.md +731 -731
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-08-best-practices.md +1111 -1111
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-09-signature-reference.md +766 -766
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-readme.md +299 -299
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-s3-sftp-configuration-guide.md +1425 -1425
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-webhook-api-key-security.md +816 -816
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-webhook-connection-security.md +681 -681
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-workflow-task-types.md +708 -708
- package/docs/04-REFERENCE/platforms/versori/readme.md +108 -108
- package/docs/04-REFERENCE/readme.md +148 -148
- package/docs/04-REFERENCE/resolver-signature/examples/advanced-resolvers.ts +482 -482
- package/docs/04-REFERENCE/resolver-signature/examples/async-resolvers.ts +496 -496
- package/docs/04-REFERENCE/resolver-signature/examples/basic-resolvers.ts +343 -343
- package/docs/04-REFERENCE/resolver-signature/examples/resolver-signature-readme.md +188 -188
- package/docs/04-REFERENCE/resolver-signature/examples/testing-resolvers.ts +463 -463
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-01-foundations.md +286 -286
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-02-parameter-reference.md +643 -643
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-03-basic-examples.md +521 -521
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-04-advanced-patterns.md +739 -739
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-05-sdk-resolvers.md +531 -531
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-06-migration-guide.md +650 -650
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-06-testing.md +125 -125
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-07-api-reference.md +794 -794
- package/docs/04-REFERENCE/resolver-signature/readme.md +64 -64
- package/docs/04-REFERENCE/resolver-signature/resolver-signature-quick-reference.md +270 -270
- package/docs/04-REFERENCE/resolver-signature/resolver-signature-readme.md +351 -351
- package/docs/04-REFERENCE/schema/fluent-commerce-schema.json +764 -764
- package/docs/04-REFERENCE/schema/readme.md +141 -141
- package/docs/04-REFERENCE/testing/examples/04-reference-testing-readme.md +158 -158
- package/docs/04-REFERENCE/testing/examples/fluent-testing.ts +62 -62
- package/docs/04-REFERENCE/testing/examples/health-check.ts +155 -155
- package/docs/04-REFERENCE/testing/examples/integration-test.ts +119 -119
- package/docs/04-REFERENCE/testing/examples/performance-test.ts +183 -183
- package/docs/04-REFERENCE/testing/examples/s3-testing.ts +127 -127
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-01-foundations.md +267 -267
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-02-s3-testing.md +599 -599
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-03-fluent-testing.md +589 -589
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-04-integration-testing.md +699 -699
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-05-debugging.md +478 -478
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-06-cicd-integration.md +463 -463
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-06-preflight-validation.md +131 -131
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-07-best-practices.md +499 -499
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-07-coverage-ci.md +165 -165
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-08-api-reference.md +634 -634
- package/docs/04-REFERENCE/testing/readme.md +86 -86
- package/docs/04-REFERENCE/testing/testing-quick-reference.md +667 -667
- package/docs/04-REFERENCE/testing/testing-readme.md +286 -286
- package/docs/04-REFERENCE/troubleshooting/readme.md +144 -144
- package/docs/04-REFERENCE/troubleshooting/troubleshooting-deno-sftp-compatibility.md +392 -392
- package/docs/template-loading-matrix.md +242 -242
- package/package.json +5 -3
package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-01-foundations.md
CHANGED
|
@@ -1,452 +1,452 @@
|
|
|
1
|
-
# Module 1: Connector Foundations
|
|
2
|
-
|
|
3
|
-
**Level:** Beginner
|
|
4
|
-
**Estimated Time:** 15-20 minutes
|
|
5
|
-
|
|
6
|
-
## Overview
|
|
7
|
-
|
|
8
|
-
This module introduces the fundamental concepts and architecture patterns for building connectors with the Fluent Connect SDK. You'll learn what makes a complete connector, how components work together, and the common data flow patterns.
|
|
9
|
-
|
|
10
|
-
## Learning Objectives
|
|
11
|
-
|
|
12
|
-
By the end of this module, you will:
|
|
13
|
-
|
|
14
|
-
- ✅ Understand the complete connector architecture
|
|
15
|
-
- ✅ Identify the key SDK components used in connectors
|
|
16
|
-
- ✅ Understand data flow patterns from source to Fluent Commerce
|
|
17
|
-
- ✅ Recognize when to use different connector patterns
|
|
18
|
-
- ✅ Understand state management and error handling concepts
|
|
19
|
-
|
|
20
|
-
## What is a Connector?
|
|
21
|
-
|
|
22
|
-
A **connector** is a complete data integration workflow that:
|
|
23
|
-
|
|
24
|
-
1. **Reads** data from a source (SFTP, S3, API, etc.)
|
|
25
|
-
2. **Parses** the data format (CSV, JSON, Parquet, XML)
|
|
26
|
-
3. **Validates** data quality and completeness
|
|
27
|
-
4. **Transforms** fields to match Fluent Commerce schema
|
|
28
|
-
5. **Sends** data to Fluent Commerce via Batch API or GraphQL
|
|
29
|
-
6. **Tracks** processing state to prevent duplicates
|
|
30
|
-
7. **Handles** errors and provides monitoring
|
|
31
|
-
|
|
32
|
-
### Example: Inventory Sync Connector
|
|
33
|
-
|
|
34
|
-
```typescript
|
|
35
|
-
// A connector orchestrates multiple SDK components:
|
|
36
|
-
|
|
37
|
-
┌─────────────────────────────────────────────────────────────────┐
|
|
38
|
-
│ INVENTORY SYNC CONNECTOR │
|
|
39
|
-
├─────────────────────────────────────────────────────────────────┤
|
|
40
|
-
│ │
|
|
41
|
-
│ 1. SftpDataSource ──> Downloads CSV files from remote server │
|
|
42
|
-
│ 2. CSVParserService ──> Parses CSV into JavaScript objects │
|
|
43
|
-
│ 3. Validator ──> Checks required fields and data types │
|
|
44
|
-
│ 4. UniversalMapper──> Transforms fields to Fluent schema │
|
|
45
|
-
│ 5. FluentClient ──> Sends batch updates to Fluent API │
|
|
46
|
-
│ 6. StateService ──> Tracks processed files (no duplicates) │
|
|
47
|
-
│ 7. Logging Utilities ──> Records progress, errors, metrics │
|
|
48
|
-
│ │
|
|
49
|
-
└─────────────────────────────────────────────────────────────────┘
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
## Core SDK Components
|
|
53
|
-
|
|
54
|
-
### 1. Data Sources
|
|
55
|
-
|
|
56
|
-
Data sources handle reading from and writing to external systems:
|
|
57
|
-
|
|
58
|
-
| Component | Purpose | Example Use |
|
|
59
|
-
| --------------------- | -------------------- | ----------------------------------------------- |
|
|
60
|
-
| `SftpDataSource` | SFTP file operations | Read inventory CSVs from supplier SFTP |
|
|
61
|
-
| `S3DataSource` | AWS S3 operations | Read product Parquet files from data lake |
|
|
62
|
-
| `InventoryDataSource` | Abstract base | Build custom sources (HTTP API, database, etc.) |
|
|
63
|
-
|
|
64
|
-
**Key capabilities:**
|
|
65
|
-
|
|
66
|
-
- List files with pattern matching
|
|
67
|
-
- Download file contents (streaming or buffered)
|
|
68
|
-
- Upload/archive files
|
|
69
|
-
- Move files between folders
|
|
70
|
-
|
|
71
|
-
### 2. Parsers
|
|
72
|
-
|
|
73
|
-
Parsers convert file formats into JavaScript objects:
|
|
74
|
-
|
|
75
|
-
| Component | Format | Use Case |
|
|
76
|
-
| ---------------------- | ------- | --------------------------------------- |
|
|
77
|
-
| `CSVParserService` | CSV | Inventory feeds, simple data exports |
|
|
78
|
-
| `ParquetParserService` | Parquet | Large datasets, data warehouse exports |
|
|
79
|
-
| `XMLParserService` | XML | SFCC orders, EDI/B2B system integrations |
|
|
80
|
-
| `JSONParserService` | JSON | Modern APIs, webhook payloads |
|
|
81
|
-
|
|
82
|
-
**Key capabilities:**
|
|
83
|
-
|
|
84
|
-
- Stream large files (memory efficient)
|
|
85
|
-
- Validate structure and types
|
|
86
|
-
- Handle encoding and special characters
|
|
87
|
-
- Skip malformed records with errors
|
|
88
|
-
|
|
89
|
-
### 3. Field Mapper
|
|
90
|
-
|
|
91
|
-
`UniversalMapper` transforms source data to Fluent Commerce schema:
|
|
92
|
-
|
|
93
|
-
```typescript
|
|
94
|
-
const mapper = new UniversalMapper({
|
|
95
|
-
fields: {
|
|
96
|
-
// Target field: { source, transformation }
|
|
97
|
-
ref: { source: 'sku', resolver: 'sdk.uppercase' },
|
|
98
|
-
locationRef: { source: 'warehouse_code' },
|
|
99
|
-
qty: { source: 'quantity', resolver: 'sdk.parseInt' },
|
|
100
|
-
status: { source: 'status', resolver: v => (v === '1' ? 'ACTIVE' : 'INACTIVE') },
|
|
101
|
-
},
|
|
102
|
-
});
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
**Key capabilities:**
|
|
106
|
-
|
|
107
|
-
- Built-in resolvers (parse numbers, format dates, etc.)
|
|
108
|
-
- Custom transformation functions
|
|
109
|
-
- Nested field mapping
|
|
110
|
-
- Conditional logic
|
|
111
|
-
- Error collection (doesn't fail on single record)
|
|
112
|
-
|
|
113
|
-
### 4. Fluent Client
|
|
114
|
-
|
|
115
|
-
`FluentClient` communicates with Fluent Commerce APIs:
|
|
116
|
-
|
|
117
|
-
```typescript
|
|
118
|
-
const client = await createClient({
|
|
119
|
-
config: {
|
|
120
|
-
baseUrl: process.env.FLUENT_BASE_URL,
|
|
121
|
-
clientId: process.env.FLUENT_CLIENT_ID,
|
|
122
|
-
clientSecret: process.env.FLUENT_CLIENT_SECRET,
|
|
123
|
-
retailerId: process.env.FLUENT_RETAILER_ID,
|
|
124
|
-
},
|
|
125
|
-
});
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
**Key capabilities:**
|
|
129
|
-
|
|
130
|
-
- OAuth2 authentication (automatic token refresh)
|
|
131
|
-
- Batch API operations (inventory, positions)
|
|
132
|
-
- GraphQL mutations (orders, products, etc.)
|
|
133
|
-
- GraphQL queries with auto-pagination
|
|
134
|
-
- Error handling and retries
|
|
135
|
-
|
|
136
|
-
### 5. State Management
|
|
137
|
-
|
|
138
|
-
`StateService` prevents duplicate processing:
|
|
139
|
-
|
|
140
|
-
```typescript
|
|
141
|
-
const stateService = new StateService(logger);
|
|
142
|
-
const kv = openKv(); // Or VersoriKVAdapter for Versori platform
|
|
143
|
-
|
|
144
|
-
// Check if already processed
|
|
145
|
-
if (await stateService.isFileProcessed(kv, file.name, 'workflow-id')) {
|
|
146
|
-
logger.info('Already processed, skipping');
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
// Process file...
|
|
151
|
-
|
|
152
|
-
// Mark as complete (updateSyncState tracks file automatically)
|
|
153
|
-
await stateService.updateSyncState(kv, [{
|
|
154
|
-
fileName: file.name,
|
|
155
|
-
lastModified: new Date().toISOString(),
|
|
156
|
-
recordCount: 1000
|
|
157
|
-
}], 'workflow-id');
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
**Key capabilities:**
|
|
161
|
-
|
|
162
|
-
- File-level tracking
|
|
163
|
-
- Record-level checkpoints
|
|
164
|
-
- Metadata storage
|
|
165
|
-
- Timestamp tracking
|
|
166
|
-
- Multiple storage backends (memory, S3, Versori KV)
|
|
167
|
-
|
|
168
|
-
### 6. Logging & Monitoring
|
|
169
|
-
|
|
170
|
-
The SDK provides functional logging utilities:
|
|
171
|
-
|
|
172
|
-
**Versori Platform:** Use native `log` from context
|
|
173
|
-
```typescript
|
|
174
|
-
const { log } = ctx;
|
|
175
|
-
log.info('Processing started');
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
**Standalone:** Use function-based utilities
|
|
179
|
-
```typescript
|
|
180
|
-
import { createConsoleLogger, toStructuredLogger } from '@fluentcommerce/fc-connect-sdk';
|
|
181
|
-
const logger = toStructuredLogger(createConsoleLogger(), { service: 'MyService' });
|
|
182
|
-
|
|
183
|
-
logger.info('Starting sync', { source: 'SFTP', files: 5 });
|
|
184
|
-
logger.warn('Validation errors', { count: 3 });
|
|
185
|
-
logger.error('Upload failed', error);
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
## Data Flow Patterns
|
|
189
|
-
|
|
190
|
-
### Pattern 1: Simple Ingestion (One-Way)
|
|
191
|
-
|
|
192
|
-
```
|
|
193
|
-
External System → Fluent Commerce
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
**Steps:**
|
|
197
|
-
|
|
198
|
-
1. List files from source
|
|
199
|
-
2. Download and parse
|
|
200
|
-
3. Validate and transform
|
|
201
|
-
4. Send to Fluent
|
|
202
|
-
5. Archive processed files
|
|
203
|
-
|
|
204
|
-
**Example use cases:**
|
|
205
|
-
|
|
206
|
-
- SFTP CSV inventory updates
|
|
207
|
-
- S3 Parquet product catalog sync
|
|
208
|
-
- JSON order imports
|
|
209
|
-
|
|
210
|
-
### Pattern 2: Bidirectional Sync
|
|
211
|
-
|
|
212
|
-
```
|
|
213
|
-
External System ←→ Fluent Commerce
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
**Steps:**
|
|
217
|
-
|
|
218
|
-
1. **Inbound:** External → Fluent (ingestion)
|
|
219
|
-
2. **Outbound:** Fluent → External (extraction)
|
|
220
|
-
|
|
221
|
-
**Example use cases:**
|
|
222
|
-
|
|
223
|
-
- Inventory sync (external updates Fluent, Fluent exports for reporting)
|
|
224
|
-
- Order fulfillment (orders in, status updates out)
|
|
225
|
-
- Product catalog (master data in, availability out)
|
|
226
|
-
|
|
227
|
-
### Pattern 3: Multi-Source Aggregation
|
|
228
|
-
|
|
229
|
-
```
|
|
230
|
-
Source A ─┐
|
|
231
|
-
Source B ─┼─→ Aggregation → Fluent Commerce
|
|
232
|
-
Source C ─┘
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
**Steps:**
|
|
236
|
-
|
|
237
|
-
1. Fetch data from multiple sources
|
|
238
|
-
2. Merge and reconcile differences
|
|
239
|
-
3. Apply business rules
|
|
240
|
-
4. Send consolidated data to Fluent
|
|
241
|
-
|
|
242
|
-
**Example use cases:**
|
|
243
|
-
|
|
244
|
-
- Multi-warehouse inventory (aggregate quantities)
|
|
245
|
-
- Multi-channel orders (combine platforms)
|
|
246
|
-
- Distributed product data (merge attributes)
|
|
247
|
-
|
|
248
|
-
### Pattern 4: Event-Driven Processing
|
|
249
|
-
|
|
250
|
-
```
|
|
251
|
-
Webhook/Event → Connector → Fluent Commerce
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
**Steps:**
|
|
255
|
-
|
|
256
|
-
1. Receive webhook payload
|
|
257
|
-
2. Validate and parse
|
|
258
|
-
3. Transform to Fluent schema
|
|
259
|
-
4. Send mutation or event
|
|
260
|
-
|
|
261
|
-
**Example use cases:**
|
|
262
|
-
|
|
263
|
-
- Real-time order creation
|
|
264
|
-
- Inventory adjustments on sales
|
|
265
|
-
- Product updates on changes
|
|
266
|
-
|
|
267
|
-
## When to Use Each Pattern
|
|
268
|
-
|
|
269
|
-
| Pattern | Best For | Complexity | State Needed |
|
|
270
|
-
| ---------------------- | --------------------- | ---------- | ----------------------------- |
|
|
271
|
-
| **Simple Ingestion** | Regular batch updates | Low | File-level |
|
|
272
|
-
| **Bidirectional Sync** | Two-way data exchange | Medium | File + record-level |
|
|
273
|
-
| **Multi-Source** | Data consolidation | High | Record-level + reconciliation |
|
|
274
|
-
| **Event-Driven** | Real-time updates | Medium | Deduplication only |
|
|
275
|
-
|
|
276
|
-
## Connector Lifecycle
|
|
277
|
-
|
|
278
|
-
### Phase 1: Initialization
|
|
279
|
-
|
|
280
|
-
```typescript
|
|
281
|
-
// Setup services
|
|
282
|
-
const logger = toStructuredLogger(createConsoleLogger(), {
|
|
283
|
-
logLevel: 'info'
|
|
284
|
-
});
|
|
285
|
-
const sftpSource = new SftpDataSource({...}, logger);
|
|
286
|
-
const mapper = new UniversalMapper({...});
|
|
287
|
-
const client = await createClient({...});
|
|
288
|
-
const stateService = new StateService(logger);
|
|
289
|
-
```
|
|
290
|
-
|
|
291
|
-
### Phase 2: Discovery
|
|
292
|
-
|
|
293
|
-
```typescript
|
|
294
|
-
// Find new files to process
|
|
295
|
-
const files = await sftpSource.listFiles({ filePattern: '*.csv' });
|
|
296
|
-
logger.info(`Found ${files.length} files`);
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
### Phase 3: Processing
|
|
300
|
-
|
|
301
|
-
```typescript
|
|
302
|
-
for (const file of files) {
|
|
303
|
-
// Download → Parse → Transform → Send
|
|
304
|
-
const content = await sftpSource.downloadFile(file.name);
|
|
305
|
-
const records = await parser.parse(content);
|
|
306
|
-
const transformed = await mapper.mapBatch(records);
|
|
307
|
-
await client.sendBatch(jobId, { entities: transformed });
|
|
308
|
-
}
|
|
309
|
-
```
|
|
310
|
-
|
|
311
|
-
### Phase 4: Finalization
|
|
312
|
-
|
|
313
|
-
```typescript
|
|
314
|
-
// Archive, track state, log metrics
|
|
315
|
-
await sftpSource.moveFile(file.name, 'archive/');
|
|
316
|
-
await stateService.updateSyncState(kv, [{
|
|
317
|
-
fileName: file.name,
|
|
318
|
-
lastModified: new Date().toISOString(),
|
|
319
|
-
recordCount: 1000
|
|
320
|
-
}], 'workflow-id');
|
|
321
|
-
logger.info('Sync complete', { filesProcessed: files.length });
|
|
322
|
-
```
|
|
323
|
-
|
|
324
|
-
## Error Handling Strategy
|
|
325
|
-
|
|
326
|
-
### Levels of Error Handling
|
|
327
|
-
|
|
328
|
-
**1. Record-Level Errors (Continue Processing)**
|
|
329
|
-
|
|
330
|
-
```typescript
|
|
331
|
-
const transformed = [];
|
|
332
|
-
const errors = [];
|
|
333
|
-
|
|
334
|
-
for (const record of records) {
|
|
335
|
-
const result = await mapper.map(record);
|
|
336
|
-
if (result.success) {
|
|
337
|
-
transformed.push(result.data);
|
|
338
|
-
} else {
|
|
339
|
-
errors.push({ record, errors: result.errors });
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
logger.warn(`Skipped ${errors.length} invalid records`);
|
|
344
|
-
```
|
|
345
|
-
|
|
346
|
-
**2. File-Level Errors (Skip File, Continue Batch)**
|
|
347
|
-
|
|
348
|
-
```typescript
|
|
349
|
-
try {
|
|
350
|
-
await processFile(file);
|
|
351
|
-
} catch (error) {
|
|
352
|
-
logger.error(`File failed: ${file.name}`, error);
|
|
353
|
-
await moveToErrorFolder(file);
|
|
354
|
-
// Continue with next file
|
|
355
|
-
}
|
|
356
|
-
```
|
|
357
|
-
|
|
358
|
-
**3. Job-Level Errors (Fail Fast)**
|
|
359
|
-
|
|
360
|
-
```typescript
|
|
361
|
-
try {
|
|
362
|
-
await syncInventory();
|
|
363
|
-
} catch (error) {
|
|
364
|
-
logger.error('Critical failure', error);
|
|
365
|
-
await notifyAdministrators(error);
|
|
366
|
-
throw error; // Stop execution
|
|
367
|
-
}
|
|
368
|
-
```
|
|
369
|
-
|
|
370
|
-
## State Management Strategies
|
|
371
|
-
|
|
372
|
-
### Strategy 1: File-Level Tracking (Simple)
|
|
373
|
-
|
|
374
|
-
**When to use:** Small files, infrequent processing
|
|
375
|
-
**Storage:** Lightweight (just file names + timestamps)
|
|
376
|
-
|
|
377
|
-
```typescript
|
|
378
|
-
// Check before processing
|
|
379
|
-
if (await stateService.isFileProcessed(kv, 'inventory_2025-01-15.csv', 'workflow-id')) {
|
|
380
|
-
return; // Skip
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
// Mark after success
|
|
384
|
-
await stateService.updateSyncState(kv, [{
|
|
385
|
-
fileName: 'inventory_2025-01-15.csv',
|
|
386
|
-
lastModified: new Date().toISOString(),
|
|
387
|
-
recordCount: 1000
|
|
388
|
-
}], 'workflow-id');
|
|
389
|
-
```
|
|
390
|
-
|
|
391
|
-
### Strategy 2: Record-Level Checkpoints (Advanced)
|
|
392
|
-
|
|
393
|
-
**When to use:** Large files, streaming, can resume mid-file
|
|
394
|
-
**Storage:** More complex (record IDs, batch numbers)
|
|
395
|
-
|
|
396
|
-
```typescript
|
|
397
|
-
// Save checkpoint every 1000 records using KV directly
|
|
398
|
-
const kv = openKv();
|
|
399
|
-
if (processedCount % 1000 === 0) {
|
|
400
|
-
await kv.set(['checkpoint', 'job-123'], {
|
|
401
|
-
file: currentFile,
|
|
402
|
-
lastRecordId: record.id,
|
|
403
|
-
recordsProcessed: processedCount,
|
|
404
|
-
timestamp: new Date().toISOString(),
|
|
405
|
-
});
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
// Resume from checkpoint on failure
|
|
409
|
-
const checkpointData = await kv.get(['checkpoint', 'job-123']);
|
|
410
|
-
const checkpoint = checkpointData?.value;
|
|
411
|
-
if (checkpoint) {
|
|
412
|
-
startFrom = checkpoint.lastRecordId;
|
|
413
|
-
}
|
|
414
|
-
```
|
|
415
|
-
|
|
416
|
-
### Strategy 3: Hybrid (File + Record Metadata)
|
|
417
|
-
|
|
418
|
-
**When to use:** Production systems needing audit trails
|
|
419
|
-
**Storage:** File status + processing metadata
|
|
420
|
-
|
|
421
|
-
```typescript
|
|
422
|
-
// Use updateSyncState with full metadata
|
|
423
|
-
const kv = openKv();
|
|
424
|
-
await stateService.updateSyncState(kv, [{
|
|
425
|
-
fileName: file.name,
|
|
426
|
-
lastModified: new Date().toISOString(),
|
|
427
|
-
recordCount: 5000
|
|
428
|
-
}], 'workflow-id');
|
|
429
|
-
|
|
430
|
-
// Store additional custom metadata via KV directly (optional)
|
|
431
|
-
await kv.set(['custom-state', file.name], {
|
|
432
|
-
status: 'completed',
|
|
433
|
-
recordsProcessed: 5000,
|
|
434
|
-
recordsFailed: 12,
|
|
435
|
-
startTime: startTime.toISOString(),
|
|
436
|
-
endTime: new Date().toISOString(),
|
|
437
|
-
processingDuration: Date.now() - startTime,
|
|
438
|
-
});
|
|
439
|
-
```
|
|
440
|
-
|
|
441
|
-
## Key Takeaways
|
|
442
|
-
|
|
443
|
-
- 🎯 Connectors orchestrate multiple SDK components into complete workflows
|
|
444
|
-
- 🎯 Data flows through: Source → Parser → Validator → Mapper → Fluent API
|
|
445
|
-
- 🎯 State management prevents duplicate processing (critical for production)
|
|
446
|
-
- 🎯 Error handling should be layered: record-level, file-level, job-level
|
|
447
|
-
- 🎯 Choose the right pattern based on use case (simple, bidirectional, multi-source, event)
|
|
448
|
-
- 🎯 Always include logging and monitoring for production visibility
|
|
449
|
-
|
|
450
|
-
## Next Steps
|
|
451
|
-
|
|
452
|
-
Continue to [Module 2: Simple Scenarios](./connector-scenarios-02-simple-scenarios.md) to build your first connector with SFTP CSV ingestion.
|
|
1
|
+
# Module 1: Connector Foundations
|
|
2
|
+
|
|
3
|
+
**Level:** Beginner
|
|
4
|
+
**Estimated Time:** 15-20 minutes
|
|
5
|
+
|
|
6
|
+
## Overview
|
|
7
|
+
|
|
8
|
+
This module introduces the fundamental concepts and architecture patterns for building connectors with the Fluent Connect SDK. You'll learn what makes a complete connector, how components work together, and the common data flow patterns.
|
|
9
|
+
|
|
10
|
+
## Learning Objectives
|
|
11
|
+
|
|
12
|
+
By the end of this module, you will:
|
|
13
|
+
|
|
14
|
+
- ✅ Understand the complete connector architecture
|
|
15
|
+
- ✅ Identify the key SDK components used in connectors
|
|
16
|
+
- ✅ Understand data flow patterns from source to Fluent Commerce
|
|
17
|
+
- ✅ Recognize when to use different connector patterns
|
|
18
|
+
- ✅ Understand state management and error handling concepts
|
|
19
|
+
|
|
20
|
+
## What is a Connector?
|
|
21
|
+
|
|
22
|
+
A **connector** is a complete data integration workflow that:
|
|
23
|
+
|
|
24
|
+
1. **Reads** data from a source (SFTP, S3, API, etc.)
|
|
25
|
+
2. **Parses** the data format (CSV, JSON, Parquet, XML)
|
|
26
|
+
3. **Validates** data quality and completeness
|
|
27
|
+
4. **Transforms** fields to match Fluent Commerce schema
|
|
28
|
+
5. **Sends** data to Fluent Commerce via Batch API or GraphQL
|
|
29
|
+
6. **Tracks** processing state to prevent duplicates
|
|
30
|
+
7. **Handles** errors and provides monitoring
|
|
31
|
+
|
|
32
|
+
### Example: Inventory Sync Connector
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
// A connector orchestrates multiple SDK components:
|
|
36
|
+
|
|
37
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
38
|
+
│ INVENTORY SYNC CONNECTOR │
|
|
39
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
40
|
+
│ │
|
|
41
|
+
│ 1. SftpDataSource ──> Downloads CSV files from remote server │
|
|
42
|
+
│ 2. CSVParserService ──> Parses CSV into JavaScript objects │
|
|
43
|
+
│ 3. Validator ──> Checks required fields and data types │
|
|
44
|
+
│ 4. UniversalMapper──> Transforms fields to Fluent schema │
|
|
45
|
+
│ 5. FluentClient ──> Sends batch updates to Fluent API │
|
|
46
|
+
│ 6. StateService ──> Tracks processed files (no duplicates) │
|
|
47
|
+
│ 7. Logging Utilities ──> Records progress, errors, metrics │
|
|
48
|
+
│ │
|
|
49
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Core SDK Components
|
|
53
|
+
|
|
54
|
+
### 1. Data Sources
|
|
55
|
+
|
|
56
|
+
Data sources handle reading from and writing to external systems:
|
|
57
|
+
|
|
58
|
+
| Component | Purpose | Example Use |
|
|
59
|
+
| --------------------- | -------------------- | ----------------------------------------------- |
|
|
60
|
+
| `SftpDataSource` | SFTP file operations | Read inventory CSVs from supplier SFTP |
|
|
61
|
+
| `S3DataSource` | AWS S3 operations | Read product Parquet files from data lake |
|
|
62
|
+
| `InventoryDataSource` | Abstract base | Build custom sources (HTTP API, database, etc.) |
|
|
63
|
+
|
|
64
|
+
**Key capabilities:**
|
|
65
|
+
|
|
66
|
+
- List files with pattern matching
|
|
67
|
+
- Download file contents (streaming or buffered)
|
|
68
|
+
- Upload/archive files
|
|
69
|
+
- Move files between folders
|
|
70
|
+
|
|
71
|
+
### 2. Parsers
|
|
72
|
+
|
|
73
|
+
Parsers convert file formats into JavaScript objects:
|
|
74
|
+
|
|
75
|
+
| Component | Format | Use Case |
|
|
76
|
+
| ---------------------- | ------- | --------------------------------------- |
|
|
77
|
+
| `CSVParserService` | CSV | Inventory feeds, simple data exports |
|
|
78
|
+
| `ParquetParserService` | Parquet | Large datasets, data warehouse exports |
|
|
79
|
+
| `XMLParserService` | XML | SFCC orders, EDI/B2B system integrations |
|
|
80
|
+
| `JSONParserService` | JSON | Modern APIs, webhook payloads |
|
|
81
|
+
|
|
82
|
+
**Key capabilities:**
|
|
83
|
+
|
|
84
|
+
- Stream large files (memory efficient)
|
|
85
|
+
- Validate structure and types
|
|
86
|
+
- Handle encoding and special characters
|
|
87
|
+
- Skip malformed records with errors
|
|
88
|
+
|
|
89
|
+
### 3. Field Mapper
|
|
90
|
+
|
|
91
|
+
`UniversalMapper` transforms source data to Fluent Commerce schema:
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
const mapper = new UniversalMapper({
|
|
95
|
+
fields: {
|
|
96
|
+
// Target field: { source, transformation }
|
|
97
|
+
ref: { source: 'sku', resolver: 'sdk.uppercase' },
|
|
98
|
+
locationRef: { source: 'warehouse_code' },
|
|
99
|
+
qty: { source: 'quantity', resolver: 'sdk.parseInt' },
|
|
100
|
+
status: { source: 'status', resolver: v => (v === '1' ? 'ACTIVE' : 'INACTIVE') },
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**Key capabilities:**
|
|
106
|
+
|
|
107
|
+
- Built-in resolvers (parse numbers, format dates, etc.)
|
|
108
|
+
- Custom transformation functions
|
|
109
|
+
- Nested field mapping
|
|
110
|
+
- Conditional logic
|
|
111
|
+
- Error collection (doesn't fail on single record)
|
|
112
|
+
|
|
113
|
+
### 4. Fluent Client
|
|
114
|
+
|
|
115
|
+
`FluentClient` communicates with Fluent Commerce APIs:
|
|
116
|
+
|
|
117
|
+
```typescript
|
|
118
|
+
const client = await createClient({
|
|
119
|
+
config: {
|
|
120
|
+
baseUrl: process.env.FLUENT_BASE_URL,
|
|
121
|
+
clientId: process.env.FLUENT_CLIENT_ID,
|
|
122
|
+
clientSecret: process.env.FLUENT_CLIENT_SECRET,
|
|
123
|
+
retailerId: process.env.FLUENT_RETAILER_ID,
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
**Key capabilities:**
|
|
129
|
+
|
|
130
|
+
- OAuth2 authentication (automatic token refresh)
|
|
131
|
+
- Batch API operations (inventory, positions)
|
|
132
|
+
- GraphQL mutations (orders, products, etc.)
|
|
133
|
+
- GraphQL queries with auto-pagination
|
|
134
|
+
- Error handling and retries
|
|
135
|
+
|
|
136
|
+
### 5. State Management
|
|
137
|
+
|
|
138
|
+
`StateService` prevents duplicate processing:
|
|
139
|
+
|
|
140
|
+
```typescript
|
|
141
|
+
const stateService = new StateService(logger);
|
|
142
|
+
const kv = openKv(); // Or VersoriKVAdapter for Versori platform
|
|
143
|
+
|
|
144
|
+
// Check if already processed
|
|
145
|
+
if (await stateService.isFileProcessed(kv, file.name, 'workflow-id')) {
|
|
146
|
+
logger.info('Already processed, skipping');
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Process file...
|
|
151
|
+
|
|
152
|
+
// Mark as complete (updateSyncState tracks file automatically)
|
|
153
|
+
await stateService.updateSyncState(kv, [{
|
|
154
|
+
fileName: file.name,
|
|
155
|
+
lastModified: new Date().toISOString(),
|
|
156
|
+
recordCount: 1000
|
|
157
|
+
}], 'workflow-id');
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**Key capabilities:**
|
|
161
|
+
|
|
162
|
+
- File-level tracking
|
|
163
|
+
- Record-level checkpoints
|
|
164
|
+
- Metadata storage
|
|
165
|
+
- Timestamp tracking
|
|
166
|
+
- Multiple storage backends (memory, S3, Versori KV)
|
|
167
|
+
|
|
168
|
+
### 6. Logging & Monitoring
|
|
169
|
+
|
|
170
|
+
The SDK provides functional logging utilities:
|
|
171
|
+
|
|
172
|
+
**Versori Platform:** Use native `log` from context
|
|
173
|
+
```typescript
|
|
174
|
+
const { log } = ctx;
|
|
175
|
+
log.info('Processing started');
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
**Standalone:** Use function-based utilities
|
|
179
|
+
```typescript
|
|
180
|
+
import { createConsoleLogger, toStructuredLogger } from '@fluentcommerce/fc-connect-sdk';
|
|
181
|
+
const logger = toStructuredLogger(createConsoleLogger(), { service: 'MyService' });
|
|
182
|
+
|
|
183
|
+
logger.info('Starting sync', { source: 'SFTP', files: 5 });
|
|
184
|
+
logger.warn('Validation errors', { count: 3 });
|
|
185
|
+
logger.error('Upload failed', error);
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## Data Flow Patterns
|
|
189
|
+
|
|
190
|
+
### Pattern 1: Simple Ingestion (One-Way)
|
|
191
|
+
|
|
192
|
+
```
|
|
193
|
+
External System → Fluent Commerce
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
**Steps:**
|
|
197
|
+
|
|
198
|
+
1. List files from source
|
|
199
|
+
2. Download and parse
|
|
200
|
+
3. Validate and transform
|
|
201
|
+
4. Send to Fluent
|
|
202
|
+
5. Archive processed files
|
|
203
|
+
|
|
204
|
+
**Example use cases:**
|
|
205
|
+
|
|
206
|
+
- SFTP CSV inventory updates
|
|
207
|
+
- S3 Parquet product catalog sync
|
|
208
|
+
- JSON order imports
|
|
209
|
+
|
|
210
|
+
### Pattern 2: Bidirectional Sync
|
|
211
|
+
|
|
212
|
+
```
|
|
213
|
+
External System ←→ Fluent Commerce
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
**Steps:**
|
|
217
|
+
|
|
218
|
+
1. **Inbound:** External → Fluent (ingestion)
|
|
219
|
+
2. **Outbound:** Fluent → External (extraction)
|
|
220
|
+
|
|
221
|
+
**Example use cases:**
|
|
222
|
+
|
|
223
|
+
- Inventory sync (external updates Fluent, Fluent exports for reporting)
|
|
224
|
+
- Order fulfillment (orders in, status updates out)
|
|
225
|
+
- Product catalog (master data in, availability out)
|
|
226
|
+
|
|
227
|
+
### Pattern 3: Multi-Source Aggregation
|
|
228
|
+
|
|
229
|
+
```
|
|
230
|
+
Source A ─┐
|
|
231
|
+
Source B ─┼─→ Aggregation → Fluent Commerce
|
|
232
|
+
Source C ─┘
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
**Steps:**
|
|
236
|
+
|
|
237
|
+
1. Fetch data from multiple sources
|
|
238
|
+
2. Merge and reconcile differences
|
|
239
|
+
3. Apply business rules
|
|
240
|
+
4. Send consolidated data to Fluent
|
|
241
|
+
|
|
242
|
+
**Example use cases:**
|
|
243
|
+
|
|
244
|
+
- Multi-warehouse inventory (aggregate quantities)
|
|
245
|
+
- Multi-channel orders (combine platforms)
|
|
246
|
+
- Distributed product data (merge attributes)
|
|
247
|
+
|
|
248
|
+
### Pattern 4: Event-Driven Processing
|
|
249
|
+
|
|
250
|
+
```
|
|
251
|
+
Webhook/Event → Connector → Fluent Commerce
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
**Steps:**
|
|
255
|
+
|
|
256
|
+
1. Receive webhook payload
|
|
257
|
+
2. Validate and parse
|
|
258
|
+
3. Transform to Fluent schema
|
|
259
|
+
4. Send mutation or event
|
|
260
|
+
|
|
261
|
+
**Example use cases:**
|
|
262
|
+
|
|
263
|
+
- Real-time order creation
|
|
264
|
+
- Inventory adjustments on sales
|
|
265
|
+
- Product updates on changes
|
|
266
|
+
|
|
267
|
+
## When to Use Each Pattern
|
|
268
|
+
|
|
269
|
+
| Pattern | Best For | Complexity | State Needed |
|
|
270
|
+
| ---------------------- | --------------------- | ---------- | ----------------------------- |
|
|
271
|
+
| **Simple Ingestion** | Regular batch updates | Low | File-level |
|
|
272
|
+
| **Bidirectional Sync** | Two-way data exchange | Medium | File + record-level |
|
|
273
|
+
| **Multi-Source** | Data consolidation | High | Record-level + reconciliation |
|
|
274
|
+
| **Event-Driven** | Real-time updates | Medium | Deduplication only |
|
|
275
|
+
|
|
276
|
+
## Connector Lifecycle
|
|
277
|
+
|
|
278
|
+
### Phase 1: Initialization
|
|
279
|
+
|
|
280
|
+
```typescript
|
|
281
|
+
// Setup services
|
|
282
|
+
const logger = toStructuredLogger(createConsoleLogger(), {
|
|
283
|
+
logLevel: 'info'
|
|
284
|
+
});
|
|
285
|
+
const sftpSource = new SftpDataSource({...}, logger);
|
|
286
|
+
const mapper = new UniversalMapper({...});
|
|
287
|
+
const client = await createClient({...});
|
|
288
|
+
const stateService = new StateService(logger);
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
### Phase 2: Discovery
|
|
292
|
+
|
|
293
|
+
```typescript
|
|
294
|
+
// Find new files to process
|
|
295
|
+
const files = await sftpSource.listFiles({ filePattern: '*.csv' });
|
|
296
|
+
logger.info(`Found ${files.length} files`);
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
### Phase 3: Processing
|
|
300
|
+
|
|
301
|
+
```typescript
|
|
302
|
+
for (const file of files) {
|
|
303
|
+
// Download → Parse → Transform → Send
|
|
304
|
+
const content = await sftpSource.downloadFile(file.name);
|
|
305
|
+
const records = await parser.parse(content);
|
|
306
|
+
const transformed = await mapper.mapBatch(records);
|
|
307
|
+
await client.sendBatch(jobId, { entities: transformed });
|
|
308
|
+
}
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
### Phase 4: Finalization
|
|
312
|
+
|
|
313
|
+
```typescript
|
|
314
|
+
// Archive, track state, log metrics
|
|
315
|
+
await sftpSource.moveFile(file.name, 'archive/');
|
|
316
|
+
await stateService.updateSyncState(kv, [{
|
|
317
|
+
fileName: file.name,
|
|
318
|
+
lastModified: new Date().toISOString(),
|
|
319
|
+
recordCount: 1000
|
|
320
|
+
}], 'workflow-id');
|
|
321
|
+
logger.info('Sync complete', { filesProcessed: files.length });
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
## Error Handling Strategy
|
|
325
|
+
|
|
326
|
+
### Levels of Error Handling
|
|
327
|
+
|
|
328
|
+
**1. Record-Level Errors (Continue Processing)**
|
|
329
|
+
|
|
330
|
+
```typescript
|
|
331
|
+
const transformed = [];
|
|
332
|
+
const errors = [];
|
|
333
|
+
|
|
334
|
+
for (const record of records) {
|
|
335
|
+
const result = await mapper.map(record);
|
|
336
|
+
if (result.success) {
|
|
337
|
+
transformed.push(result.data);
|
|
338
|
+
} else {
|
|
339
|
+
errors.push({ record, errors: result.errors });
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
logger.warn(`Skipped ${errors.length} invalid records`);
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
**2. File-Level Errors (Skip File, Continue Batch)**
|
|
347
|
+
|
|
348
|
+
```typescript
|
|
349
|
+
try {
|
|
350
|
+
await processFile(file);
|
|
351
|
+
} catch (error) {
|
|
352
|
+
logger.error(`File failed: ${file.name}`, error);
|
|
353
|
+
await moveToErrorFolder(file);
|
|
354
|
+
// Continue with next file
|
|
355
|
+
}
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
**3. Job-Level Errors (Fail Fast)**
|
|
359
|
+
|
|
360
|
+
```typescript
|
|
361
|
+
try {
|
|
362
|
+
await syncInventory();
|
|
363
|
+
} catch (error) {
|
|
364
|
+
logger.error('Critical failure', error);
|
|
365
|
+
await notifyAdministrators(error);
|
|
366
|
+
throw error; // Stop execution
|
|
367
|
+
}
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
## State Management Strategies
|
|
371
|
+
|
|
372
|
+
### Strategy 1: File-Level Tracking (Simple)
|
|
373
|
+
|
|
374
|
+
**When to use:** Small files, infrequent processing
|
|
375
|
+
**Storage:** Lightweight (just file names + timestamps)
|
|
376
|
+
|
|
377
|
+
```typescript
|
|
378
|
+
// Check before processing
|
|
379
|
+
if (await stateService.isFileProcessed(kv, 'inventory_2025-01-15.csv', 'workflow-id')) {
|
|
380
|
+
return; // Skip
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
// Mark after success
|
|
384
|
+
await stateService.updateSyncState(kv, [{
|
|
385
|
+
fileName: 'inventory_2025-01-15.csv',
|
|
386
|
+
lastModified: new Date().toISOString(),
|
|
387
|
+
recordCount: 1000
|
|
388
|
+
}], 'workflow-id');
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
### Strategy 2: Record-Level Checkpoints (Advanced)
|
|
392
|
+
|
|
393
|
+
**When to use:** Large files, streaming, can resume mid-file
|
|
394
|
+
**Storage:** More complex (record IDs, batch numbers)
|
|
395
|
+
|
|
396
|
+
```typescript
|
|
397
|
+
// Save checkpoint every 1000 records using KV directly
|
|
398
|
+
const kv = openKv();
|
|
399
|
+
if (processedCount % 1000 === 0) {
|
|
400
|
+
await kv.set(['checkpoint', 'job-123'], {
|
|
401
|
+
file: currentFile,
|
|
402
|
+
lastRecordId: record.id,
|
|
403
|
+
recordsProcessed: processedCount,
|
|
404
|
+
timestamp: new Date().toISOString(),
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
// Resume from checkpoint on failure
|
|
409
|
+
const checkpointData = await kv.get(['checkpoint', 'job-123']);
|
|
410
|
+
const checkpoint = checkpointData?.value;
|
|
411
|
+
if (checkpoint) {
|
|
412
|
+
startFrom = checkpoint.lastRecordId;
|
|
413
|
+
}
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
### Strategy 3: Hybrid (File + Record Metadata)
|
|
417
|
+
|
|
418
|
+
**When to use:** Production systems needing audit trails
|
|
419
|
+
**Storage:** File status + processing metadata
|
|
420
|
+
|
|
421
|
+
```typescript
|
|
422
|
+
// Use updateSyncState with full metadata
|
|
423
|
+
const kv = openKv();
|
|
424
|
+
await stateService.updateSyncState(kv, [{
|
|
425
|
+
fileName: file.name,
|
|
426
|
+
lastModified: new Date().toISOString(),
|
|
427
|
+
recordCount: 5000
|
|
428
|
+
}], 'workflow-id');
|
|
429
|
+
|
|
430
|
+
// Store additional custom metadata via KV directly (optional)
|
|
431
|
+
await kv.set(['custom-state', file.name], {
|
|
432
|
+
status: 'completed',
|
|
433
|
+
recordsProcessed: 5000,
|
|
434
|
+
recordsFailed: 12,
|
|
435
|
+
startTime: startTime.toISOString(),
|
|
436
|
+
endTime: new Date().toISOString(),
|
|
437
|
+
processingDuration: Date.now() - startTime,
|
|
438
|
+
});
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
## Key Takeaways
|
|
442
|
+
|
|
443
|
+
- 🎯 Connectors orchestrate multiple SDK components into complete workflows
|
|
444
|
+
- 🎯 Data flows through: Source → Parser → Validator → Mapper → Fluent API
|
|
445
|
+
- 🎯 State management prevents duplicate processing (critical for production)
|
|
446
|
+
- 🎯 Error handling should be layered: record-level, file-level, job-level
|
|
447
|
+
- 🎯 Choose the right pattern based on use case (simple, bidirectional, multi-source, event)
|
|
448
|
+
- 🎯 Always include logging and monitoring for production visibility
|
|
449
|
+
|
|
450
|
+
## Next Steps
|
|
451
|
+
|
|
452
|
+
Continue to [Module 2: Simple Scenarios](./connector-scenarios-02-simple-scenarios.md) to build your first connector with SFTP CSV ingestion.
|