@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
|
@@ -1,379 +1,379 @@
|
|
|
1
|
-
# File Operations Learning Path
|
|
2
|
-
|
|
3
|
-
> **Complete guide to file operations in the Fluent Connect SDK**
|
|
4
|
-
> Progressive learning modules with S3, SFTP, streaming, and archive patterns
|
|
5
|
-
|
|
6
|
-
## 📚 What You'll Learn
|
|
7
|
-
|
|
8
|
-
This guide teaches you how to work with files across different storage systems using the SDK's unified data source abstractions. By the end, you'll understand:
|
|
9
|
-
|
|
10
|
-
- ✅ How to read, write, move, copy, and delete files on S3 and SFTP
|
|
11
|
-
- ✅ How to stream large files efficiently without memory issues
|
|
12
|
-
- ✅ How to implement archive workflows with date-based organization
|
|
13
|
-
- ✅ How to process files from multiple folders and storage systems
|
|
14
|
-
- ✅ How to test file operations with comprehensive test coverage
|
|
15
|
-
|
|
16
|
-
## 🎯 Learning Path Overview
|
|
17
|
-
|
|
18
|
-
This guide is organized into **8 progressive modules**. Follow them in order for the best learning experience:
|
|
19
|
-
|
|
20
|
-
| Module | Topic | Level |
|
|
21
|
-
|--------|-------|-------|
|
|
22
|
-
| [Module 1](./modules/file-operations-01-foundations.md) | **Foundations** - Data sources, abstraction patterns, when to use S3 vs SFTP | Beginner |
|
|
23
|
-
| [Module 2](./modules/file-operations-02-quick-start.md) | **Quick Start** - First working examples for S3 and SFTP | Beginner |
|
|
24
|
-
| [Module 3](./modules/file-operations-03-s3-operations.md) | **S3 Operations** - Complete S3 file operations guide | Intermediate |
|
|
25
|
-
| [Module 4](./modules/file-operations-04-sftp-operations.md) | **SFTP Operations** - Complete SFTP file operations guide | Intermediate |
|
|
26
|
-
| [Module 5](./modules/file-operations-05-streaming-performance.md) | **Performance Optimization** - Handle large files efficiently | Advanced |
|
|
27
|
-
| [Module 6](./modules/file-operations-06-archive-patterns.md) | **Archive Patterns** - Date-based archiving, multi-folder workflows | Intermediate |
|
|
28
|
-
| [Module 7](./modules/file-operations-07-testing-troubleshooting.md) | **Testing & Troubleshooting** - Test coverage, common issues, debugging | Intermediate |
|
|
29
|
-
| [Module 8](./modules/file-operations-08-api-reference.md) | **API Reference** - Complete method signatures and interfaces | Reference |
|
|
30
|
-
|
|
31
|
-
## 🚀 Quick Navigation
|
|
32
|
-
|
|
33
|
-
### By Use Case
|
|
34
|
-
|
|
35
|
-
- **First time with file operations?** → Start with [Module 1: Foundations](./modules/file-operations-01-foundations.md)
|
|
36
|
-
- **Need a working example now?** → Jump to [Module 2: Quick Start](./modules/file-operations-02-quick-start.md)
|
|
37
|
-
- **Working with S3?** → See [Module 3: S3 Operations](./modules/file-operations-03-s3-operations.md)
|
|
38
|
-
- **Working with SFTP?** → See [Module 4: SFTP Operations](./modules/file-operations-04-sftp-operations.md)
|
|
39
|
-
- **Large file issues?** → Check [Module 5: Streaming & Performance](./modules/file-operations-05-streaming-performance.md)
|
|
40
|
-
- **Need archive workflows?** → See [Module 6: Archive Patterns](./modules/file-operations-06-archive-patterns.md)
|
|
41
|
-
- **Experiencing errors?** → Browse [Module 7: Troubleshooting](./modules/file-operations-07-testing-troubleshooting.md)
|
|
42
|
-
- **Want code examples?** → Browse [Examples Directory](./examples/)
|
|
43
|
-
|
|
44
|
-
### By Storage System
|
|
45
|
-
|
|
46
|
-
| Storage | Complexity | Best For | See Module |
|
|
47
|
-
|---------|------------|----------|---------|
|
|
48
|
-
| **S3** | Low | Cloud storage, large datasets, serverless | [Module 3: S3 Operations](./modules/file-operations-03-s3-operations.md) |
|
|
49
|
-
| **SFTP** | Medium | Enterprise systems, B2B integrations, secure transfers | [Module 4: SFTP Operations](./modules/file-operations-04-sftp-operations.md) |
|
|
50
|
-
| **Local Files** | Low | Development, testing, small scripts | [Module 2: Quick Start](./modules/file-operations-02-quick-start.md) |
|
|
51
|
-
|
|
52
|
-
### By Operation Type
|
|
53
|
-
|
|
54
|
-
| Operation | S3 | SFTP | Complexity | See Module |
|
|
55
|
-
|-----------|----|----|------------|---------|
|
|
56
|
-
| **List Files** | ✅ | ✅ | Low | [Module 3](./modules/file-operations-03-s3-operations.md), [Module 4](./modules/file-operations-04-sftp-operations.md) |
|
|
57
|
-
| **Read Files** | ✅ | ✅ | Low | [Module 2](./modules/file-operations-02-quick-start.md) |
|
|
58
|
-
| **Write Files** | ✅ | ✅ | Low | [Module 2](./modules/file-operations-02-quick-start.md) |
|
|
59
|
-
| **Move Files** | ✅ | ✅ | Medium | [Module 6](./modules/file-operations-06-archive-patterns.md) |
|
|
60
|
-
| **Copy Files** | ✅ | ✅ | Medium | [Module 6](./modules/file-operations-06-archive-patterns.md) |
|
|
61
|
-
| **Delete Files** | ✅ | ✅ | Low | [Module 3](./modules/file-operations-03-s3-operations.md), [Module 4](./modules/file-operations-04-sftp-operations.md) |
|
|
62
|
-
| **Process Large Files** | ✅ | ✅ | Advanced | [Module 5](./modules/file-operations-05-streaming-performance.md) |
|
|
63
|
-
| **Archive Files** | ✅ | ✅ | Medium | [Module 6](./modules/file-operations-06-archive-patterns.md) |
|
|
64
|
-
|
|
65
|
-
## 📖 Quick Reference
|
|
66
|
-
|
|
67
|
-
For quick lookups, see:
|
|
68
|
-
- [Quick Reference Cheat Sheet](./file-operations-quick-reference.md) - All operations on one page
|
|
69
|
-
- [Common Patterns](./examples/common-patterns.ts) - Copy-paste ready snippets
|
|
70
|
-
- [Module 6: Archive Patterns](./modules/file-operations-06-archive-patterns.md) - Date-based archiving examples
|
|
71
|
-
- [Troubleshooting Guide](./modules/file-operations-07-testing-troubleshooting.md) - Error messages and fixes
|
|
72
|
-
|
|
73
|
-
## 🎓 Prerequisites
|
|
74
|
-
|
|
75
|
-
Before starting this guide, you should:
|
|
76
|
-
|
|
77
|
-
1. ✅ Have the SDK installed: `npm install @fluentcommerce/fc-connect-sdk`
|
|
78
|
-
2. ✅ Have credentials for your storage system (S3 keys or SFTP credentials)
|
|
79
|
-
3. ✅ Understand basic file system concepts (paths, directories, permissions)
|
|
80
|
-
4. ✅ Be familiar with async/await in TypeScript/JavaScript
|
|
81
|
-
|
|
82
|
-
**New to the SDK?** Start with the [Getting Started Guide](../../00-START-HERE/getting-started.md) first.
|
|
83
|
-
|
|
84
|
-
## 🔍 Key Concepts at a Glance
|
|
85
|
-
|
|
86
|
-
### Unified Data Source Interface
|
|
87
|
-
|
|
88
|
-
```typescript
|
|
89
|
-
// ❌ WITHOUT SDK: Different APIs for each storage system
|
|
90
|
-
import { S3Client, GetObjectCommand } from '@aws-sdk/client-s3';
|
|
91
|
-
import * as SftpClient from 'ssh2-sftp-client';
|
|
92
|
-
|
|
93
|
-
// S3 - complex AWS SDK
|
|
94
|
-
const s3 = new S3Client({});
|
|
95
|
-
const s3Result = await s3.send(new GetObjectCommand({ Bucket: 'x', Key: 'y' }));
|
|
96
|
-
|
|
97
|
-
// SFTP - completely different API
|
|
98
|
-
const sftp = new SftpClient();
|
|
99
|
-
await sftp.connect({ host: 'x', username: 'y', password: 'z' });
|
|
100
|
-
const sftpResult = await sftp.get('/path/to/file');
|
|
101
|
-
|
|
102
|
-
// ✅ WITH SDK: Same interface for all storage systems
|
|
103
|
-
import { S3DataSource, SftpDataSource } from '@fluentcommerce/fc-connect-sdk';
|
|
104
|
-
|
|
105
|
-
const s3Source = new S3DataSource({
|
|
106
|
-
type: 'S3_CSV',
|
|
107
|
-
connectionId: 's3-readme',
|
|
108
|
-
name: 'S3 README Example',
|
|
109
|
-
s3Config: { region: 'us-east-1', bucket: 'my-bucket', accessKeyId: 'x', secretAccessKey: 'y' }
|
|
110
|
-
}, logger);
|
|
111
|
-
|
|
112
|
-
const sftpSource = new SftpDataSource({
|
|
113
|
-
type: 'SFTP_CSV',
|
|
114
|
-
connectionId: 'sftp-readme',
|
|
115
|
-
name: 'SFTP README Example',
|
|
116
|
-
settings: { host: 'x', username: 'y', password: 'z' }
|
|
117
|
-
}, logger);
|
|
118
|
-
|
|
119
|
-
// Same method signature!
|
|
120
|
-
const s3File = await s3Source.downloadFile('path/to/file');
|
|
121
|
-
const sftpFile = await sftpSource.downloadFile('path/to/file');
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
### Archive Workflow Pattern
|
|
125
|
-
|
|
126
|
-
```typescript
|
|
127
|
-
// Read → Process → Archive pattern
|
|
128
|
-
const files = await dataSource.listFiles();
|
|
129
|
-
|
|
130
|
-
for (const file of files) {
|
|
131
|
-
// 1. Read file
|
|
132
|
-
const content = await dataSource.downloadFile(file.path);
|
|
133
|
-
|
|
134
|
-
// 2. Process data
|
|
135
|
-
await processData(content);
|
|
136
|
-
|
|
137
|
-
// 3. Move to archive with date-based path
|
|
138
|
-
const archivePath = `/archive/${new Date().toISOString().split('T')[0]}/${file.name}`;
|
|
139
|
-
await dataSource.moveFile(file.path, archivePath, true);
|
|
140
|
-
}
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
### Handling Large Files
|
|
144
|
-
|
|
145
|
-
```typescript
|
|
146
|
-
import { Buffer } from 'node:buffer';
|
|
147
|
-
|
|
148
|
-
// ❌ WITHOUT chunked processing: Load entire file into memory (OOM risk!)
|
|
149
|
-
const content = await dataSource.downloadFile('large-file.csv'); // 5GB loaded!
|
|
150
|
-
|
|
151
|
-
// ✅ WITH chunked processing: Download as Buffer and process in chunks (constant memory)
|
|
152
|
-
const buffer = await dataSource.downloadFile('large-file.csv', { asBuffer: true });
|
|
153
|
-
|
|
154
|
-
const chunkSize = 1024 * 1024; // 1MB chunks
|
|
155
|
-
for (let offset = 0; offset < buffer.length; offset += chunkSize) {
|
|
156
|
-
const chunk = buffer.slice(offset, offset + chunkSize);
|
|
157
|
-
processChunk(chunk.toString('utf8')); // Process 1MB at a time
|
|
158
|
-
}
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
## 🛠️ Complete Example
|
|
162
|
-
|
|
163
|
-
Here's a real-world multi-folder SFTP workflow with archiving:
|
|
164
|
-
|
|
165
|
-
```typescript
|
|
166
|
-
import { Buffer } from 'node:buffer'; // Required for Deno/Versori runtime!
|
|
167
|
-
import { SftpDataSource } from '@fluentcommerce/fc-connect-sdk';
|
|
168
|
-
|
|
169
|
-
const logger = createConsoleLogger();
|
|
170
|
-
|
|
171
|
-
// Process multiple folders with archive
|
|
172
|
-
const folders = ['orders', 'inventory', 'products'];
|
|
173
|
-
|
|
174
|
-
for (const folder of folders) {
|
|
175
|
-
const sftp = new SftpDataSource({
|
|
176
|
-
type: 'SFTP_CSV',
|
|
177
|
-
connectionId: `sftp-${folder}`,
|
|
178
|
-
name: `SFTP ${folder} Folder`,
|
|
179
|
-
settings: {
|
|
180
|
-
host: process.env.SFTP_HOST!,
|
|
181
|
-
port: 22,
|
|
182
|
-
username: process.env.SFTP_USERNAME!,
|
|
183
|
-
password: process.env.SFTP_PASSWORD!
|
|
184
|
-
}
|
|
185
|
-
}, logger);
|
|
186
|
-
|
|
187
|
-
try {
|
|
188
|
-
// List all CSV files
|
|
189
|
-
const files = await sftp.listFiles();
|
|
190
|
-
logger.info(`Found ${files.length} files in ${folder}`);
|
|
191
|
-
|
|
192
|
-
for (const file of files) {
|
|
193
|
-
try {
|
|
194
|
-
// Download and process
|
|
195
|
-
const content = await sftp.downloadFile(file.path);
|
|
196
|
-
await processData(folder, content);
|
|
197
|
-
|
|
198
|
-
// Archive with date-based organization
|
|
199
|
-
const today = new Date().toISOString().split('T')[0];
|
|
200
|
-
const archivePath = `/archive/${folder}/${today}/${file.name}`;
|
|
201
|
-
|
|
202
|
-
await sftp.moveFile(file.path, archivePath, true);
|
|
203
|
-
logger.info(`Archived ${file.name} to ${archivePath}`);
|
|
204
|
-
|
|
205
|
-
} catch (error) {
|
|
206
|
-
logger.error(`Failed to process ${file.name}:`, error);
|
|
207
|
-
// Continue with next file
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
} finally {
|
|
211
|
-
// Clean up connection
|
|
212
|
-
await sftp.dispose();
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
async function processData(type: string, content: string): Promise<void> {
|
|
217
|
-
// Your business logic here
|
|
218
|
-
console.log(`Processing ${type} data: ${content.length} bytes`);
|
|
219
|
-
}
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
## 📂 Repository Structure
|
|
223
|
-
|
|
224
|
-
```
|
|
225
|
-
docs/guides/file-operations/
|
|
226
|
-
├── readme.md # This file - main index
|
|
227
|
-
├── quick-reference.md # Cheat sheet for quick lookups
|
|
228
|
-
│
|
|
229
|
-
├── modules/ # Learning modules
|
|
230
|
-
│ ├── 01-foundations.md # Data sources and patterns
|
|
231
|
-
│ ├── 02-quick-start.md # First working examples
|
|
232
|
-
│ ├── 03-s3-operations.md # Complete S3 guide
|
|
233
|
-
│ ├── 04-sftp-operations.md # Complete SFTP guide
|
|
234
|
-
│ ├── 05-streaming-performance.md # Large file handling
|
|
235
|
-
│ ├── 06-archive-patterns.md # Archive workflows
|
|
236
|
-
│ ├── 07-testing-troubleshooting.md # Testing and debugging
|
|
237
|
-
│ └── 08-api-reference.md # Complete API docs
|
|
238
|
-
│
|
|
239
|
-
└── examples/ # Verified code examples
|
|
240
|
-
├── readme.md # Examples index
|
|
241
|
-
├── common-patterns.ts # Copy-paste ready patterns
|
|
242
|
-
├── s3-basic-operations.ts # S3 basics
|
|
243
|
-
├── sftp-basic-operations.ts # SFTP basics
|
|
244
|
-
├── list-files.ts # List files
|
|
245
|
-
├── read-files.ts # Read operations
|
|
246
|
-
├── write-files.ts # Write operations
|
|
247
|
-
├── move-files.ts # Move operations
|
|
248
|
-
├── copy-files.ts # Copy operations
|
|
249
|
-
├── delete-files.ts # Delete operations
|
|
250
|
-
├── stream-large-files.ts # Streaming
|
|
251
|
-
├── archive-workflow.ts # Archive pattern
|
|
252
|
-
└── archive-patterns.ts # Advanced archive patterns
|
|
253
|
-
```
|
|
254
|
-
|
|
255
|
-
## 🔗 Related Documentation
|
|
256
|
-
|
|
257
|
-
- [Data Sources Architecture](../../04-REFERENCE/architecture/readme.md) - Understanding data source design
|
|
258
|
-
- [Universal Mapping Guide](../../02-CORE-GUIDES/mapping/) - Transform file data
|
|
259
|
-
- [Auto-Pagination Guide](../../02-CORE-GUIDES/auto-pagination/) - Fetch large datasets
|
|
260
|
-
- [Integration Patterns](../integration-patterns/) - Common integration workflows
|
|
261
|
-
|
|
262
|
-
## 🚀 Advanced Features
|
|
263
|
-
|
|
264
|
-
### SFTP Connection Pooling
|
|
265
|
-
|
|
266
|
-
The SDK automatically manages SFTP connection pooling for better performance:
|
|
267
|
-
|
|
268
|
-
```typescript
|
|
269
|
-
const sftp = new SftpDataSource({
|
|
270
|
-
type: 'SFTP_CSV',
|
|
271
|
-
connectionId: 'sftp-pooled',
|
|
272
|
-
name: 'SFTP with Connection Pool',
|
|
273
|
-
settings: {
|
|
274
|
-
host: 'sftp.example.com',
|
|
275
|
-
username: 'user',
|
|
276
|
-
password: 'pass',
|
|
277
|
-
maxConnections: 5, // Pool size (default: 5)
|
|
278
|
-
connectionWaitTimeout: 30000 // Wait timeout in ms (default: 30000)
|
|
279
|
-
}
|
|
280
|
-
}, logger);
|
|
281
|
-
|
|
282
|
-
// Connections are automatically pooled and reused
|
|
283
|
-
// Wait queue handles concurrent requests exceeding pool size
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
**Connection Pool Features:**
|
|
287
|
-
- Automatic connection reuse for better performance
|
|
288
|
-
- Configurable pool size via `maxConnections` (default: 5)
|
|
289
|
-
- Wait queue for requests when pool is exhausted
|
|
290
|
-
- Health checks before connection reuse
|
|
291
|
-
- Automatic cleanup on `dispose()`
|
|
292
|
-
|
|
293
|
-
### Retry Logic with Exponential Backoff
|
|
294
|
-
|
|
295
|
-
Both S3 and SFTP support automatic retries with exponential backoff:
|
|
296
|
-
|
|
297
|
-
**SFTP Retry Configuration:**
|
|
298
|
-
```typescript
|
|
299
|
-
const sftp = new SftpDataSource({
|
|
300
|
-
type: 'SFTP_CSV',
|
|
301
|
-
connectionId: 'sftp-retry',
|
|
302
|
-
name: 'SFTP with Retry',
|
|
303
|
-
settings: {
|
|
304
|
-
host: 'sftp.example.com',
|
|
305
|
-
username: 'user',
|
|
306
|
-
password: 'pass',
|
|
307
|
-
retry: {
|
|
308
|
-
maxAttempts: 3, // Default: 3
|
|
309
|
-
baseDelayMs: 1000, // Default: 1000ms
|
|
310
|
-
backoffFactor: 2, // Default: 2 (exponential)
|
|
311
|
-
maxDelayMs: 8000, // Default: 8000ms
|
|
312
|
-
jitter: 'full', // Default: 'full' (adds randomness)
|
|
313
|
-
reconnectOnFailure: true // Default: true
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
}, logger);
|
|
317
|
-
```
|
|
318
|
-
|
|
319
|
-
**S3 Retry Configuration:**
|
|
320
|
-
```typescript
|
|
321
|
-
const s3 = new S3DataSource({
|
|
322
|
-
type: 'S3_CSV',
|
|
323
|
-
connectionId: 's3-retry',
|
|
324
|
-
name: 'S3 with Retry',
|
|
325
|
-
s3Config: {
|
|
326
|
-
region: 'us-east-1',
|
|
327
|
-
bucket: 'my-bucket',
|
|
328
|
-
accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
|
|
329
|
-
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
|
|
330
|
-
maxAttempts: 3 // AWS SDK retry config
|
|
331
|
-
}
|
|
332
|
-
}, logger);
|
|
333
|
-
```
|
|
334
|
-
|
|
335
|
-
**Retry Features:**
|
|
336
|
-
- Exponential backoff: delay doubles on each retry (1s → 2s → 4s)
|
|
337
|
-
- Jitter: adds randomness to prevent thundering herd
|
|
338
|
-
- Automatic reconnection on connection failures (SFTP)
|
|
339
|
-
- Retryable error detection (network errors, timeouts)
|
|
340
|
-
- Detailed retry logging for debugging
|
|
341
|
-
|
|
342
|
-
## 💡 Tips for Best Results
|
|
343
|
-
|
|
344
|
-
1. **Always dispose connections** - Call `dispose()` in `finally` blocks for SFTP
|
|
345
|
-
2. **Use chunked processing for large files** - Files >100MB should use `downloadFile()` with `encoding: 'binary'` (S3) or `asBuffer: true` (SFTP) and process in chunks
|
|
346
|
-
3. **Configure retry logic** - Adjust retry settings based on your network reliability
|
|
347
|
-
4. **Tune connection pool** - Increase `maxConnections` for high-concurrency workflows
|
|
348
|
-
5. **Test with small datasets first** - Validate your workflow before processing thousands of files
|
|
349
|
-
6. **Monitor memory usage** - Use streaming or batch processing for large-scale operations
|
|
350
|
-
7. **Archive processed files** - Never delete source files immediately; archive for audit trails
|
|
351
|
-
|
|
352
|
-
## ✅ Feature Support Matrix
|
|
353
|
-
|
|
354
|
-
| Feature | S3 | SFTP | Notes |
|
|
355
|
-
|---------|----|----|-------|
|
|
356
|
-
| **Read Files** | ✅ | ✅ | Both tested |
|
|
357
|
-
| **Write Files** | ✅ | ✅ | Both tested |
|
|
358
|
-
| **Move Files** | ✅ | ✅ | S3 uses copy + delete |
|
|
359
|
-
| **Copy Files** | ✅ | ✅ | Both tested |
|
|
360
|
-
| **Delete Files** | ✅ | ✅ | Both tested |
|
|
361
|
-
| **List Files** | ✅ | ✅ | Both support patterns |
|
|
362
|
-
| **File Exists** | ✅ | ✅ | Both tested |
|
|
363
|
-
| **Streaming** | ✅ | ✅ | For large files |
|
|
364
|
-
| **Connection Pooling** | N/A | ✅ | SFTP only |
|
|
365
|
-
| **Presigned URLs** | ✅ | N/A | S3 only |
|
|
366
|
-
| **Unit Tests** | ✅ | ✅ | Comprehensive |
|
|
367
|
-
| **Integration Tests** | ⚠️ | ✅ | SFTP has integration tests |
|
|
368
|
-
|
|
369
|
-
## 🚦 Getting Started
|
|
370
|
-
|
|
371
|
-
Ready to begin? Start with [Module 1: Foundations →](./modules/file-operations-01-foundations.md)
|
|
372
|
-
|
|
373
|
-
---
|
|
374
|
-
|
|
375
|
-
**Need Help?**
|
|
376
|
-
- 📖 Browse [Examples](./examples/)
|
|
377
|
-
- 🔍 Check [Troubleshooting](./modules/file-operations-07-testing-troubleshooting.md)
|
|
378
|
-
- 📧 Contact support@fluentcommerce.com
|
|
379
|
-
- 🐛 Report issues at [GitHub](https://github.com/fluentcommerce/fc-connect-sdk/issues)
|
|
1
|
+
# File Operations Learning Path
|
|
2
|
+
|
|
3
|
+
> **Complete guide to file operations in the Fluent Connect SDK**
|
|
4
|
+
> Progressive learning modules with S3, SFTP, streaming, and archive patterns
|
|
5
|
+
|
|
6
|
+
## 📚 What You'll Learn
|
|
7
|
+
|
|
8
|
+
This guide teaches you how to work with files across different storage systems using the SDK's unified data source abstractions. By the end, you'll understand:
|
|
9
|
+
|
|
10
|
+
- ✅ How to read, write, move, copy, and delete files on S3 and SFTP
|
|
11
|
+
- ✅ How to stream large files efficiently without memory issues
|
|
12
|
+
- ✅ How to implement archive workflows with date-based organization
|
|
13
|
+
- ✅ How to process files from multiple folders and storage systems
|
|
14
|
+
- ✅ How to test file operations with comprehensive test coverage
|
|
15
|
+
|
|
16
|
+
## 🎯 Learning Path Overview
|
|
17
|
+
|
|
18
|
+
This guide is organized into **8 progressive modules**. Follow them in order for the best learning experience:
|
|
19
|
+
|
|
20
|
+
| Module | Topic | Level |
|
|
21
|
+
|--------|-------|-------|
|
|
22
|
+
| [Module 1](./modules/file-operations-01-foundations.md) | **Foundations** - Data sources, abstraction patterns, when to use S3 vs SFTP | Beginner |
|
|
23
|
+
| [Module 2](./modules/file-operations-02-quick-start.md) | **Quick Start** - First working examples for S3 and SFTP | Beginner |
|
|
24
|
+
| [Module 3](./modules/file-operations-03-s3-operations.md) | **S3 Operations** - Complete S3 file operations guide | Intermediate |
|
|
25
|
+
| [Module 4](./modules/file-operations-04-sftp-operations.md) | **SFTP Operations** - Complete SFTP file operations guide | Intermediate |
|
|
26
|
+
| [Module 5](./modules/file-operations-05-streaming-performance.md) | **Performance Optimization** - Handle large files efficiently | Advanced |
|
|
27
|
+
| [Module 6](./modules/file-operations-06-archive-patterns.md) | **Archive Patterns** - Date-based archiving, multi-folder workflows | Intermediate |
|
|
28
|
+
| [Module 7](./modules/file-operations-07-testing-troubleshooting.md) | **Testing & Troubleshooting** - Test coverage, common issues, debugging | Intermediate |
|
|
29
|
+
| [Module 8](./modules/file-operations-08-api-reference.md) | **API Reference** - Complete method signatures and interfaces | Reference |
|
|
30
|
+
|
|
31
|
+
## 🚀 Quick Navigation
|
|
32
|
+
|
|
33
|
+
### By Use Case
|
|
34
|
+
|
|
35
|
+
- **First time with file operations?** → Start with [Module 1: Foundations](./modules/file-operations-01-foundations.md)
|
|
36
|
+
- **Need a working example now?** → Jump to [Module 2: Quick Start](./modules/file-operations-02-quick-start.md)
|
|
37
|
+
- **Working with S3?** → See [Module 3: S3 Operations](./modules/file-operations-03-s3-operations.md)
|
|
38
|
+
- **Working with SFTP?** → See [Module 4: SFTP Operations](./modules/file-operations-04-sftp-operations.md)
|
|
39
|
+
- **Large file issues?** → Check [Module 5: Streaming & Performance](./modules/file-operations-05-streaming-performance.md)
|
|
40
|
+
- **Need archive workflows?** → See [Module 6: Archive Patterns](./modules/file-operations-06-archive-patterns.md)
|
|
41
|
+
- **Experiencing errors?** → Browse [Module 7: Troubleshooting](./modules/file-operations-07-testing-troubleshooting.md)
|
|
42
|
+
- **Want code examples?** → Browse [Examples Directory](./examples/)
|
|
43
|
+
|
|
44
|
+
### By Storage System
|
|
45
|
+
|
|
46
|
+
| Storage | Complexity | Best For | See Module |
|
|
47
|
+
|---------|------------|----------|---------|
|
|
48
|
+
| **S3** | Low | Cloud storage, large datasets, serverless | [Module 3: S3 Operations](./modules/file-operations-03-s3-operations.md) |
|
|
49
|
+
| **SFTP** | Medium | Enterprise systems, B2B integrations, secure transfers | [Module 4: SFTP Operations](./modules/file-operations-04-sftp-operations.md) |
|
|
50
|
+
| **Local Files** | Low | Development, testing, small scripts | [Module 2: Quick Start](./modules/file-operations-02-quick-start.md) |
|
|
51
|
+
|
|
52
|
+
### By Operation Type
|
|
53
|
+
|
|
54
|
+
| Operation | S3 | SFTP | Complexity | See Module |
|
|
55
|
+
|-----------|----|----|------------|---------|
|
|
56
|
+
| **List Files** | ✅ | ✅ | Low | [Module 3](./modules/file-operations-03-s3-operations.md), [Module 4](./modules/file-operations-04-sftp-operations.md) |
|
|
57
|
+
| **Read Files** | ✅ | ✅ | Low | [Module 2](./modules/file-operations-02-quick-start.md) |
|
|
58
|
+
| **Write Files** | ✅ | ✅ | Low | [Module 2](./modules/file-operations-02-quick-start.md) |
|
|
59
|
+
| **Move Files** | ✅ | ✅ | Medium | [Module 6](./modules/file-operations-06-archive-patterns.md) |
|
|
60
|
+
| **Copy Files** | ✅ | ✅ | Medium | [Module 6](./modules/file-operations-06-archive-patterns.md) |
|
|
61
|
+
| **Delete Files** | ✅ | ✅ | Low | [Module 3](./modules/file-operations-03-s3-operations.md), [Module 4](./modules/file-operations-04-sftp-operations.md) |
|
|
62
|
+
| **Process Large Files** | ✅ | ✅ | Advanced | [Module 5](./modules/file-operations-05-streaming-performance.md) |
|
|
63
|
+
| **Archive Files** | ✅ | ✅ | Medium | [Module 6](./modules/file-operations-06-archive-patterns.md) |
|
|
64
|
+
|
|
65
|
+
## 📖 Quick Reference
|
|
66
|
+
|
|
67
|
+
For quick lookups, see:
|
|
68
|
+
- [Quick Reference Cheat Sheet](./file-operations-quick-reference.md) - All operations on one page
|
|
69
|
+
- [Common Patterns](./examples/common-patterns.ts) - Copy-paste ready snippets
|
|
70
|
+
- [Module 6: Archive Patterns](./modules/file-operations-06-archive-patterns.md) - Date-based archiving examples
|
|
71
|
+
- [Troubleshooting Guide](./modules/file-operations-07-testing-troubleshooting.md) - Error messages and fixes
|
|
72
|
+
|
|
73
|
+
## 🎓 Prerequisites
|
|
74
|
+
|
|
75
|
+
Before starting this guide, you should:
|
|
76
|
+
|
|
77
|
+
1. ✅ Have the SDK installed: `npm install @fluentcommerce/fc-connect-sdk`
|
|
78
|
+
2. ✅ Have credentials for your storage system (S3 keys or SFTP credentials)
|
|
79
|
+
3. ✅ Understand basic file system concepts (paths, directories, permissions)
|
|
80
|
+
4. ✅ Be familiar with async/await in TypeScript/JavaScript
|
|
81
|
+
|
|
82
|
+
**New to the SDK?** Start with the [Getting Started Guide](../../00-START-HERE/getting-started.md) first.
|
|
83
|
+
|
|
84
|
+
## 🔍 Key Concepts at a Glance
|
|
85
|
+
|
|
86
|
+
### Unified Data Source Interface
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
// ❌ WITHOUT SDK: Different APIs for each storage system
|
|
90
|
+
import { S3Client, GetObjectCommand } from '@aws-sdk/client-s3';
|
|
91
|
+
import * as SftpClient from 'ssh2-sftp-client';
|
|
92
|
+
|
|
93
|
+
// S3 - complex AWS SDK
|
|
94
|
+
const s3 = new S3Client({});
|
|
95
|
+
const s3Result = await s3.send(new GetObjectCommand({ Bucket: 'x', Key: 'y' }));
|
|
96
|
+
|
|
97
|
+
// SFTP - completely different API
|
|
98
|
+
const sftp = new SftpClient();
|
|
99
|
+
await sftp.connect({ host: 'x', username: 'y', password: 'z' });
|
|
100
|
+
const sftpResult = await sftp.get('/path/to/file');
|
|
101
|
+
|
|
102
|
+
// ✅ WITH SDK: Same interface for all storage systems
|
|
103
|
+
import { S3DataSource, SftpDataSource } from '@fluentcommerce/fc-connect-sdk';
|
|
104
|
+
|
|
105
|
+
const s3Source = new S3DataSource({
|
|
106
|
+
type: 'S3_CSV',
|
|
107
|
+
connectionId: 's3-readme',
|
|
108
|
+
name: 'S3 README Example',
|
|
109
|
+
s3Config: { region: 'us-east-1', bucket: 'my-bucket', accessKeyId: 'x', secretAccessKey: 'y' }
|
|
110
|
+
}, logger);
|
|
111
|
+
|
|
112
|
+
const sftpSource = new SftpDataSource({
|
|
113
|
+
type: 'SFTP_CSV',
|
|
114
|
+
connectionId: 'sftp-readme',
|
|
115
|
+
name: 'SFTP README Example',
|
|
116
|
+
settings: { host: 'x', username: 'y', password: 'z' }
|
|
117
|
+
}, logger);
|
|
118
|
+
|
|
119
|
+
// Same method signature!
|
|
120
|
+
const s3File = await s3Source.downloadFile('path/to/file');
|
|
121
|
+
const sftpFile = await sftpSource.downloadFile('path/to/file');
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Archive Workflow Pattern
|
|
125
|
+
|
|
126
|
+
```typescript
|
|
127
|
+
// Read → Process → Archive pattern
|
|
128
|
+
const files = await dataSource.listFiles();
|
|
129
|
+
|
|
130
|
+
for (const file of files) {
|
|
131
|
+
// 1. Read file
|
|
132
|
+
const content = await dataSource.downloadFile(file.path);
|
|
133
|
+
|
|
134
|
+
// 2. Process data
|
|
135
|
+
await processData(content);
|
|
136
|
+
|
|
137
|
+
// 3. Move to archive with date-based path
|
|
138
|
+
const archivePath = `/archive/${new Date().toISOString().split('T')[0]}/${file.name}`;
|
|
139
|
+
await dataSource.moveFile(file.path, archivePath, true);
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Handling Large Files
|
|
144
|
+
|
|
145
|
+
```typescript
|
|
146
|
+
import { Buffer } from 'node:buffer';
|
|
147
|
+
|
|
148
|
+
// ❌ WITHOUT chunked processing: Load entire file into memory (OOM risk!)
|
|
149
|
+
const content = await dataSource.downloadFile('large-file.csv'); // 5GB loaded!
|
|
150
|
+
|
|
151
|
+
// ✅ WITH chunked processing: Download as Buffer and process in chunks (constant memory)
|
|
152
|
+
const buffer = await dataSource.downloadFile('large-file.csv', { asBuffer: true });
|
|
153
|
+
|
|
154
|
+
const chunkSize = 1024 * 1024; // 1MB chunks
|
|
155
|
+
for (let offset = 0; offset < buffer.length; offset += chunkSize) {
|
|
156
|
+
const chunk = buffer.slice(offset, offset + chunkSize);
|
|
157
|
+
processChunk(chunk.toString('utf8')); // Process 1MB at a time
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## 🛠️ Complete Example
|
|
162
|
+
|
|
163
|
+
Here's a real-world multi-folder SFTP workflow with archiving:
|
|
164
|
+
|
|
165
|
+
```typescript
|
|
166
|
+
import { Buffer } from 'node:buffer'; // Required for Deno/Versori runtime!
|
|
167
|
+
import { SftpDataSource } from '@fluentcommerce/fc-connect-sdk';
|
|
168
|
+
|
|
169
|
+
const logger = createConsoleLogger();
|
|
170
|
+
|
|
171
|
+
// Process multiple folders with archive
|
|
172
|
+
const folders = ['orders', 'inventory', 'products'];
|
|
173
|
+
|
|
174
|
+
for (const folder of folders) {
|
|
175
|
+
const sftp = new SftpDataSource({
|
|
176
|
+
type: 'SFTP_CSV',
|
|
177
|
+
connectionId: `sftp-${folder}`,
|
|
178
|
+
name: `SFTP ${folder} Folder`,
|
|
179
|
+
settings: {
|
|
180
|
+
host: process.env.SFTP_HOST!,
|
|
181
|
+
port: 22,
|
|
182
|
+
username: process.env.SFTP_USERNAME!,
|
|
183
|
+
password: process.env.SFTP_PASSWORD!
|
|
184
|
+
}
|
|
185
|
+
}, logger);
|
|
186
|
+
|
|
187
|
+
try {
|
|
188
|
+
// List all CSV files
|
|
189
|
+
const files = await sftp.listFiles();
|
|
190
|
+
logger.info(`Found ${files.length} files in ${folder}`);
|
|
191
|
+
|
|
192
|
+
for (const file of files) {
|
|
193
|
+
try {
|
|
194
|
+
// Download and process
|
|
195
|
+
const content = await sftp.downloadFile(file.path);
|
|
196
|
+
await processData(folder, content);
|
|
197
|
+
|
|
198
|
+
// Archive with date-based organization
|
|
199
|
+
const today = new Date().toISOString().split('T')[0];
|
|
200
|
+
const archivePath = `/archive/${folder}/${today}/${file.name}`;
|
|
201
|
+
|
|
202
|
+
await sftp.moveFile(file.path, archivePath, true);
|
|
203
|
+
logger.info(`Archived ${file.name} to ${archivePath}`);
|
|
204
|
+
|
|
205
|
+
} catch (error) {
|
|
206
|
+
logger.error(`Failed to process ${file.name}:`, error);
|
|
207
|
+
// Continue with next file
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
} finally {
|
|
211
|
+
// Clean up connection
|
|
212
|
+
await sftp.dispose();
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
async function processData(type: string, content: string): Promise<void> {
|
|
217
|
+
// Your business logic here
|
|
218
|
+
console.log(`Processing ${type} data: ${content.length} bytes`);
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## 📂 Repository Structure
|
|
223
|
+
|
|
224
|
+
```
|
|
225
|
+
docs/guides/file-operations/
|
|
226
|
+
├── readme.md # This file - main index
|
|
227
|
+
├── quick-reference.md # Cheat sheet for quick lookups
|
|
228
|
+
│
|
|
229
|
+
├── modules/ # Learning modules
|
|
230
|
+
│ ├── 01-foundations.md # Data sources and patterns
|
|
231
|
+
│ ├── 02-quick-start.md # First working examples
|
|
232
|
+
│ ├── 03-s3-operations.md # Complete S3 guide
|
|
233
|
+
│ ├── 04-sftp-operations.md # Complete SFTP guide
|
|
234
|
+
│ ├── 05-streaming-performance.md # Large file handling
|
|
235
|
+
│ ├── 06-archive-patterns.md # Archive workflows
|
|
236
|
+
│ ├── 07-testing-troubleshooting.md # Testing and debugging
|
|
237
|
+
│ └── 08-api-reference.md # Complete API docs
|
|
238
|
+
│
|
|
239
|
+
└── examples/ # Verified code examples
|
|
240
|
+
├── readme.md # Examples index
|
|
241
|
+
├── common-patterns.ts # Copy-paste ready patterns
|
|
242
|
+
├── s3-basic-operations.ts # S3 basics
|
|
243
|
+
├── sftp-basic-operations.ts # SFTP basics
|
|
244
|
+
├── list-files.ts # List files
|
|
245
|
+
├── read-files.ts # Read operations
|
|
246
|
+
├── write-files.ts # Write operations
|
|
247
|
+
├── move-files.ts # Move operations
|
|
248
|
+
├── copy-files.ts # Copy operations
|
|
249
|
+
├── delete-files.ts # Delete operations
|
|
250
|
+
├── stream-large-files.ts # Streaming
|
|
251
|
+
├── archive-workflow.ts # Archive pattern
|
|
252
|
+
└── archive-patterns.ts # Advanced archive patterns
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
## 🔗 Related Documentation
|
|
256
|
+
|
|
257
|
+
- [Data Sources Architecture](../../04-REFERENCE/architecture/readme.md) - Understanding data source design
|
|
258
|
+
- [Universal Mapping Guide](../../02-CORE-GUIDES/mapping/) - Transform file data
|
|
259
|
+
- [Auto-Pagination Guide](../../02-CORE-GUIDES/auto-pagination/) - Fetch large datasets
|
|
260
|
+
- [Integration Patterns](../integration-patterns/) - Common integration workflows
|
|
261
|
+
|
|
262
|
+
## 🚀 Advanced Features
|
|
263
|
+
|
|
264
|
+
### SFTP Connection Pooling
|
|
265
|
+
|
|
266
|
+
The SDK automatically manages SFTP connection pooling for better performance:
|
|
267
|
+
|
|
268
|
+
```typescript
|
|
269
|
+
const sftp = new SftpDataSource({
|
|
270
|
+
type: 'SFTP_CSV',
|
|
271
|
+
connectionId: 'sftp-pooled',
|
|
272
|
+
name: 'SFTP with Connection Pool',
|
|
273
|
+
settings: {
|
|
274
|
+
host: 'sftp.example.com',
|
|
275
|
+
username: 'user',
|
|
276
|
+
password: 'pass',
|
|
277
|
+
maxConnections: 5, // Pool size (default: 5)
|
|
278
|
+
connectionWaitTimeout: 30000 // Wait timeout in ms (default: 30000)
|
|
279
|
+
}
|
|
280
|
+
}, logger);
|
|
281
|
+
|
|
282
|
+
// Connections are automatically pooled and reused
|
|
283
|
+
// Wait queue handles concurrent requests exceeding pool size
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
**Connection Pool Features:**
|
|
287
|
+
- Automatic connection reuse for better performance
|
|
288
|
+
- Configurable pool size via `maxConnections` (default: 5)
|
|
289
|
+
- Wait queue for requests when pool is exhausted
|
|
290
|
+
- Health checks before connection reuse
|
|
291
|
+
- Automatic cleanup on `dispose()`
|
|
292
|
+
|
|
293
|
+
### Retry Logic with Exponential Backoff
|
|
294
|
+
|
|
295
|
+
Both S3 and SFTP support automatic retries with exponential backoff:
|
|
296
|
+
|
|
297
|
+
**SFTP Retry Configuration:**
|
|
298
|
+
```typescript
|
|
299
|
+
const sftp = new SftpDataSource({
|
|
300
|
+
type: 'SFTP_CSV',
|
|
301
|
+
connectionId: 'sftp-retry',
|
|
302
|
+
name: 'SFTP with Retry',
|
|
303
|
+
settings: {
|
|
304
|
+
host: 'sftp.example.com',
|
|
305
|
+
username: 'user',
|
|
306
|
+
password: 'pass',
|
|
307
|
+
retry: {
|
|
308
|
+
maxAttempts: 3, // Default: 3
|
|
309
|
+
baseDelayMs: 1000, // Default: 1000ms
|
|
310
|
+
backoffFactor: 2, // Default: 2 (exponential)
|
|
311
|
+
maxDelayMs: 8000, // Default: 8000ms
|
|
312
|
+
jitter: 'full', // Default: 'full' (adds randomness)
|
|
313
|
+
reconnectOnFailure: true // Default: true
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}, logger);
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
**S3 Retry Configuration:**
|
|
320
|
+
```typescript
|
|
321
|
+
const s3 = new S3DataSource({
|
|
322
|
+
type: 'S3_CSV',
|
|
323
|
+
connectionId: 's3-retry',
|
|
324
|
+
name: 'S3 with Retry',
|
|
325
|
+
s3Config: {
|
|
326
|
+
region: 'us-east-1',
|
|
327
|
+
bucket: 'my-bucket',
|
|
328
|
+
accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
|
|
329
|
+
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
|
|
330
|
+
maxAttempts: 3 // AWS SDK retry config
|
|
331
|
+
}
|
|
332
|
+
}, logger);
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
**Retry Features:**
|
|
336
|
+
- Exponential backoff: delay doubles on each retry (1s → 2s → 4s)
|
|
337
|
+
- Jitter: adds randomness to prevent thundering herd
|
|
338
|
+
- Automatic reconnection on connection failures (SFTP)
|
|
339
|
+
- Retryable error detection (network errors, timeouts)
|
|
340
|
+
- Detailed retry logging for debugging
|
|
341
|
+
|
|
342
|
+
## 💡 Tips for Best Results
|
|
343
|
+
|
|
344
|
+
1. **Always dispose connections** - Call `dispose()` in `finally` blocks for SFTP
|
|
345
|
+
2. **Use chunked processing for large files** - Files >100MB should use `downloadFile()` with `encoding: 'binary'` (S3) or `asBuffer: true` (SFTP) and process in chunks
|
|
346
|
+
3. **Configure retry logic** - Adjust retry settings based on your network reliability
|
|
347
|
+
4. **Tune connection pool** - Increase `maxConnections` for high-concurrency workflows
|
|
348
|
+
5. **Test with small datasets first** - Validate your workflow before processing thousands of files
|
|
349
|
+
6. **Monitor memory usage** - Use streaming or batch processing for large-scale operations
|
|
350
|
+
7. **Archive processed files** - Never delete source files immediately; archive for audit trails
|
|
351
|
+
|
|
352
|
+
## ✅ Feature Support Matrix
|
|
353
|
+
|
|
354
|
+
| Feature | S3 | SFTP | Notes |
|
|
355
|
+
|---------|----|----|-------|
|
|
356
|
+
| **Read Files** | ✅ | ✅ | Both tested |
|
|
357
|
+
| **Write Files** | ✅ | ✅ | Both tested |
|
|
358
|
+
| **Move Files** | ✅ | ✅ | S3 uses copy + delete |
|
|
359
|
+
| **Copy Files** | ✅ | ✅ | Both tested |
|
|
360
|
+
| **Delete Files** | ✅ | ✅ | Both tested |
|
|
361
|
+
| **List Files** | ✅ | ✅ | Both support patterns |
|
|
362
|
+
| **File Exists** | ✅ | ✅ | Both tested |
|
|
363
|
+
| **Streaming** | ✅ | ✅ | For large files |
|
|
364
|
+
| **Connection Pooling** | N/A | ✅ | SFTP only |
|
|
365
|
+
| **Presigned URLs** | ✅ | N/A | S3 only |
|
|
366
|
+
| **Unit Tests** | ✅ | ✅ | Comprehensive |
|
|
367
|
+
| **Integration Tests** | ⚠️ | ✅ | SFTP has integration tests |
|
|
368
|
+
|
|
369
|
+
## 🚦 Getting Started
|
|
370
|
+
|
|
371
|
+
Ready to begin? Start with [Module 1: Foundations →](./modules/file-operations-01-foundations.md)
|
|
372
|
+
|
|
373
|
+
---
|
|
374
|
+
|
|
375
|
+
**Need Help?**
|
|
376
|
+
- 📖 Browse [Examples](./examples/)
|
|
377
|
+
- 🔍 Check [Troubleshooting](./modules/file-operations-07-testing-troubleshooting.md)
|
|
378
|
+
- 📧 Contact support@fluentcommerce.com
|
|
379
|
+
- 🐛 Report issues at [GitHub](https://github.com/fluentcommerce/fc-connect-sdk/issues)
|