@fluentcommerce/fc-connect-sdk 0.1.54 → 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 +12 -0
- package/dist/cjs/clients/fluent-client.js +13 -6
- package/dist/cjs/utils/pagination-helpers.js +38 -2
- package/dist/cjs/versori/fluent-versori-client.js +11 -5
- package/dist/esm/clients/fluent-client.js +13 -6
- 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/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 -520
- 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/02-CORE-GUIDES/api-reference/cli-profile-integration.md +0 -377
|
@@ -1,371 +1,371 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SFTP Data Source Operations
|
|
3
|
-
*
|
|
4
|
-
* Complete examples for SftpDataSource operations including connect, download,
|
|
5
|
-
* upload, list, and directory management.
|
|
6
|
-
*
|
|
7
|
-
* @package @fluentcommerce/fc-connect-sdk
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { SftpDataSource } from '@fluentcommerce/fc-connect-sdk';
|
|
11
|
-
import { writeFileSync, readFileSync } from 'fs';
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Initialize SFTP Data Source with password auth
|
|
15
|
-
*/
|
|
16
|
-
function createSftpDataSourceWithPassword() {
|
|
17
|
-
return new SftpDataSource({
|
|
18
|
-
host: process.env.SFTP_HOST!,
|
|
19
|
-
port: parseInt(process.env.SFTP_PORT || '22'),
|
|
20
|
-
username: process.env.SFTP_USERNAME!,
|
|
21
|
-
password: process.env.SFTP_PASSWORD!,
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Initialize SFTP Data Source with private key auth
|
|
27
|
-
*/
|
|
28
|
-
function createSftpDataSourceWithKey() {
|
|
29
|
-
const privateKey = readFileSync(process.env.SFTP_KEY_PATH!, 'utf-8');
|
|
30
|
-
|
|
31
|
-
return new SftpDataSource({
|
|
32
|
-
host: process.env.SFTP_HOST!,
|
|
33
|
-
port: parseInt(process.env.SFTP_PORT || '22'),
|
|
34
|
-
username: process.env.SFTP_USERNAME!,
|
|
35
|
-
privateKey,
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Example 1: Connect and list files in directory
|
|
41
|
-
*/
|
|
42
|
-
export async function listRemoteFiles() {
|
|
43
|
-
const sftp = createSftpDataSourceWithPassword();
|
|
44
|
-
|
|
45
|
-
try {
|
|
46
|
-
const files = await sftp.listFiles({ remotePath: '/inventory/incoming', filePattern: '*' });
|
|
47
|
-
|
|
48
|
-
console.log(`Found ${files.length} files:`);
|
|
49
|
-
files.forEach(file => {
|
|
50
|
-
const type = file.type === 'd' ? 'DIR' : 'FILE';
|
|
51
|
-
console.log(` ${type} ${file.name} (${file.size} bytes, ${file.modifyTime})`);
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
return files;
|
|
55
|
-
} catch (error) {
|
|
56
|
-
console.error('Failed to list files:', error);
|
|
57
|
-
throw error;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Example 2: Download CSV file from SFTP
|
|
63
|
-
*/
|
|
64
|
-
export async function downloadCSVFile(remotePath: string) {
|
|
65
|
-
const sftp = createSftpDataSourceWithPassword();
|
|
66
|
-
|
|
67
|
-
try {
|
|
68
|
-
const content = await sftp.downloadFile(remotePath, { encoding: 'utf-8' });
|
|
69
|
-
|
|
70
|
-
console.log(`✓ Downloaded ${remotePath} (${content.length} bytes)`);
|
|
71
|
-
|
|
72
|
-
return content;
|
|
73
|
-
} catch (error) {
|
|
74
|
-
console.error('Failed to download file:', error);
|
|
75
|
-
throw error;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Example 3: Upload file to SFTP
|
|
81
|
-
*/
|
|
82
|
-
export async function uploadFile(localContent: string, remotePath: string) {
|
|
83
|
-
const sftp = createSftpDataSourceWithPassword();
|
|
84
|
-
|
|
85
|
-
try {
|
|
86
|
-
await sftp.uploadContent(localContent, remotePath);
|
|
87
|
-
|
|
88
|
-
console.log(`✓ Uploaded file to ${remotePath}`);
|
|
89
|
-
} catch (error) {
|
|
90
|
-
console.error('Failed to upload file:', error);
|
|
91
|
-
throw error;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Example 4: Download file to local filesystem
|
|
97
|
-
*/
|
|
98
|
-
export async function downloadToLocal(remotePath: string, localPath: string) {
|
|
99
|
-
const sftp = createSftpDataSourceWithPassword();
|
|
100
|
-
|
|
101
|
-
try {
|
|
102
|
-
const content = await sftp.downloadFile(remotePath);
|
|
103
|
-
|
|
104
|
-
writeFileSync(localPath, content);
|
|
105
|
-
|
|
106
|
-
console.log(`✓ Downloaded ${remotePath} → ${localPath}`);
|
|
107
|
-
} catch (error) {
|
|
108
|
-
console.error('Failed to download to local:', error);
|
|
109
|
-
throw error;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Example 5: Upload file from local filesystem
|
|
115
|
-
*/
|
|
116
|
-
export async function uploadFromLocal(localPath: string, remotePath: string) {
|
|
117
|
-
const sftp = createSftpDataSourceWithPassword();
|
|
118
|
-
|
|
119
|
-
try {
|
|
120
|
-
const content = readFileSync(localPath, 'utf-8');
|
|
121
|
-
await sftp.uploadContent(content, remotePath);
|
|
122
|
-
|
|
123
|
-
console.log(`✓ Uploaded ${localPath} → ${remotePath}`);
|
|
124
|
-
} catch (error) {
|
|
125
|
-
console.error('Failed to upload from local:', error);
|
|
126
|
-
throw error;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* Example 6: Create directory on SFTP server
|
|
132
|
-
*/
|
|
133
|
-
export async function createDirectory(dirPath: string) {
|
|
134
|
-
const sftp = createSftpDataSourceWithPassword();
|
|
135
|
-
|
|
136
|
-
try {
|
|
137
|
-
await sftp.createDirectory(dirPath, true);
|
|
138
|
-
|
|
139
|
-
console.log(`✓ Created directory: ${dirPath}`);
|
|
140
|
-
} catch (error) {
|
|
141
|
-
console.error('Failed to create directory:', error);
|
|
142
|
-
throw error;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
/**
|
|
147
|
-
* Example 7: Delete file from SFTP server
|
|
148
|
-
*/
|
|
149
|
-
export async function deleteFile(remotePath: string) {
|
|
150
|
-
const sftp = createSftpDataSourceWithPassword();
|
|
151
|
-
|
|
152
|
-
try {
|
|
153
|
-
await sftp.deleteFile(remotePath);
|
|
154
|
-
|
|
155
|
-
console.log(`✓ Deleted: ${remotePath}`);
|
|
156
|
-
} catch (error) {
|
|
157
|
-
console.error('Failed to delete file:', error);
|
|
158
|
-
throw error;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
/**
|
|
163
|
-
* Example 8: Check if file exists on SFTP
|
|
164
|
-
*/
|
|
165
|
-
export async function fileExists(remotePath: string): Promise<boolean> {
|
|
166
|
-
const sftp = createSftpDataSourceWithPassword();
|
|
167
|
-
|
|
168
|
-
try {
|
|
169
|
-
const exists = await sftp.fileExists(remotePath);
|
|
170
|
-
|
|
171
|
-
console.log(`File ${remotePath} ${exists ? 'exists' : 'does not exist'}`);
|
|
172
|
-
|
|
173
|
-
return exists;
|
|
174
|
-
} catch (error) {
|
|
175
|
-
console.error('Failed to check file existence:', error);
|
|
176
|
-
throw error;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* Example 9: Process all CSV files in directory
|
|
182
|
-
*
|
|
183
|
-
* NOTE: This example shows manual filtering for demonstration.
|
|
184
|
-
* In production, use filePattern in listFiles() to avoid redundant filtering.
|
|
185
|
-
*/
|
|
186
|
-
export async function processIncomingFiles() {
|
|
187
|
-
const sftp = createSftpDataSourceWithPassword();
|
|
188
|
-
|
|
189
|
-
try {
|
|
190
|
-
// OPTION 1: Let SDK filter (RECOMMENDED)
|
|
191
|
-
// const files = await sftp.listFiles({
|
|
192
|
-
// remotePath: '/inventory/incoming',
|
|
193
|
-
// filePattern: '*.csv' // SDK handles glob pattern matching
|
|
194
|
-
// });
|
|
195
|
-
// const csvFiles = files; // Already filtered by SDK!
|
|
196
|
-
|
|
197
|
-
// OPTION 2: Manual filtering (shown here for learning)
|
|
198
|
-
const files = await sftp.listFiles({ remotePath: '/inventory/incoming', filePattern: '*' });
|
|
199
|
-
|
|
200
|
-
// Filter for CSV files only
|
|
201
|
-
// IMPORTANT: Use .endsWith('.csv') NOT .endsWith('*.csv')
|
|
202
|
-
// The asterisk (*) is a glob pattern, not part of the extension
|
|
203
|
-
const csvFiles = files.filter(f => f.type === '-' && f.name.endsWith('.csv'));
|
|
204
|
-
|
|
205
|
-
console.log(`Found ${csvFiles.length} CSV files to process`);
|
|
206
|
-
|
|
207
|
-
for (const file of csvFiles) {
|
|
208
|
-
// file.path = full path (e.g., "/inventory/incoming/file.csv")
|
|
209
|
-
// file.name = filename only (e.g., "file.csv")
|
|
210
|
-
const remotePath = file.path;
|
|
211
|
-
const content = await sftp.downloadFile(remotePath, { encoding: 'utf-8' });
|
|
212
|
-
|
|
213
|
-
console.log(`Processing ${file.name} (${content.length} bytes)`);
|
|
214
|
-
|
|
215
|
-
// Process file content here
|
|
216
|
-
// ... your processing logic ...
|
|
217
|
-
|
|
218
|
-
// Move processed file to archive
|
|
219
|
-
// Use file.name (just filename) to construct destination path
|
|
220
|
-
const archivePath = `/inventory/archive/${file.name}`;
|
|
221
|
-
await sftp.uploadContent(content, archivePath);
|
|
222
|
-
await sftp.deleteFile(remotePath);
|
|
223
|
-
|
|
224
|
-
console.log(` ✓ Processed and archived ${file.name}`);
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
return csvFiles.length;
|
|
228
|
-
} catch (error) {
|
|
229
|
-
console.error('Failed to process incoming files:', error);
|
|
230
|
-
throw error;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
/**
|
|
235
|
-
* Example 10: Sync files from SFTP to S3
|
|
236
|
-
*/
|
|
237
|
-
export async function syncSftpToS3() {
|
|
238
|
-
const sftp = createSftpDataSourceWithPassword();
|
|
239
|
-
// Import S3DataSource for sync operation
|
|
240
|
-
const { S3DataSource } = require('@fluentcommerce/fc-connect-sdk');
|
|
241
|
-
|
|
242
|
-
const s3 = new S3DataSource({
|
|
243
|
-
accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
|
|
244
|
-
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
|
|
245
|
-
region: process.env.AWS_REGION!,
|
|
246
|
-
});
|
|
247
|
-
|
|
248
|
-
try {
|
|
249
|
-
const files = await sftp.listFiles({ remotePath: '/inventory/export', filePattern: '*' });
|
|
250
|
-
|
|
251
|
-
console.log(`Syncing ${files.length} files from SFTP to S3`);
|
|
252
|
-
|
|
253
|
-
for (const file of files) {
|
|
254
|
-
if (file.type === 'd') continue; // Skip directories
|
|
255
|
-
|
|
256
|
-
const remotePath = file.path;
|
|
257
|
-
const content = await sftp.downloadFile(remotePath);
|
|
258
|
-
|
|
259
|
-
// Upload to S3
|
|
260
|
-
await s3.uploadFile(`sftp-sync/${file.name}`, content, {
|
|
261
|
-
bucket: process.env.S3_BUCKET!,
|
|
262
|
-
});
|
|
263
|
-
|
|
264
|
-
console.log(` ✓ Synced ${file.name} to S3`);
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
console.log('✓ Sync complete');
|
|
268
|
-
} catch (error) {
|
|
269
|
-
console.error('Failed to sync SFTP to S3:', error);
|
|
270
|
-
throw error;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
/**
|
|
275
|
-
* Example 11: Rename/Move file on SFTP
|
|
276
|
-
*/
|
|
277
|
-
export async function moveFile(oldPath: string, newPath: string) {
|
|
278
|
-
const sftp = createSftpDataSourceWithPassword();
|
|
279
|
-
|
|
280
|
-
try {
|
|
281
|
-
await sftp.moveFile(oldPath, newPath, false);
|
|
282
|
-
|
|
283
|
-
console.log(`✓ Moved ${oldPath} → ${newPath}`);
|
|
284
|
-
} catch (error) {
|
|
285
|
-
console.error('Failed to move file:', error);
|
|
286
|
-
throw error;
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
/**
|
|
291
|
-
* Example 12: Download only new files (based on timestamp)
|
|
292
|
-
*/
|
|
293
|
-
export async function downloadNewFiles(lastSync: Date) {
|
|
294
|
-
const sftp = createSftpDataSourceWithPassword();
|
|
295
|
-
|
|
296
|
-
try {
|
|
297
|
-
const files = await sftp.listFiles({ remotePath: '/inventory/incoming', filePattern: '*' });
|
|
298
|
-
|
|
299
|
-
const newFiles = files.filter(f => {
|
|
300
|
-
const modTime = new Date(f.modifyTime);
|
|
301
|
-
return modTime > lastSync;
|
|
302
|
-
});
|
|
303
|
-
|
|
304
|
-
console.log(`Found ${newFiles.length} new files since ${lastSync.toISOString()}`);
|
|
305
|
-
|
|
306
|
-
const downloaded = [];
|
|
307
|
-
for (const file of newFiles) {
|
|
308
|
-
const remotePath = file.path;
|
|
309
|
-
const content = await sftp.downloadFile(remotePath);
|
|
310
|
-
|
|
311
|
-
downloaded.push({
|
|
312
|
-
name: file.name,
|
|
313
|
-
content,
|
|
314
|
-
modifyTime: file.modifyTime,
|
|
315
|
-
});
|
|
316
|
-
|
|
317
|
-
console.log(` ✓ Downloaded ${file.name}`);
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
return downloaded;
|
|
321
|
-
} catch (error) {
|
|
322
|
-
console.error('Failed to download new files:', error);
|
|
323
|
-
throw error;
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
/**
|
|
328
|
-
* Usage Example
|
|
329
|
-
*/
|
|
330
|
-
async function main() {
|
|
331
|
-
console.log('Example 1: List remote files');
|
|
332
|
-
await listRemoteFiles();
|
|
333
|
-
|
|
334
|
-
console.log('\nExample 2: Download CSV file');
|
|
335
|
-
await downloadCSVFile('/inventory/incoming/inventory.csv');
|
|
336
|
-
|
|
337
|
-
console.log('\nExample 3: Upload file');
|
|
338
|
-
await uploadFile('test content', '/inventory/outgoing/test.txt');
|
|
339
|
-
|
|
340
|
-
console.log('\nExample 4: Download to local filesystem');
|
|
341
|
-
await downloadToLocal('/inventory/data.csv', '/tmp/data.csv');
|
|
342
|
-
|
|
343
|
-
console.log('\nExample 5: Upload from local filesystem');
|
|
344
|
-
await uploadFromLocal('/tmp/upload.csv', '/inventory/incoming/upload.csv');
|
|
345
|
-
|
|
346
|
-
console.log('\nExample 6: Create directory');
|
|
347
|
-
await createDirectory('/inventory/test-dir');
|
|
348
|
-
|
|
349
|
-
console.log('\nExample 7: Delete file');
|
|
350
|
-
await deleteFile('/inventory/test-dir/temp.txt');
|
|
351
|
-
|
|
352
|
-
console.log('\nExample 8: Check file existence');
|
|
353
|
-
await fileExists('/inventory/incoming/inventory.csv');
|
|
354
|
-
|
|
355
|
-
console.log('\nExample 9: Process all incoming CSV files');
|
|
356
|
-
await processIncomingFiles();
|
|
357
|
-
|
|
358
|
-
console.log('\nExample 10: Sync SFTP to S3');
|
|
359
|
-
await syncSftpToS3();
|
|
360
|
-
|
|
361
|
-
console.log('\nExample 11: Move/rename file');
|
|
362
|
-
await moveFile('/inventory/old.csv', '/inventory/archive/old.csv');
|
|
363
|
-
|
|
364
|
-
console.log('\nExample 12: Download only new files');
|
|
365
|
-
const lastSync = new Date('2024-01-01T00:00:00Z');
|
|
366
|
-
await downloadNewFiles(lastSync);
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
if (require.main === module) {
|
|
370
|
-
main().catch(console.error);
|
|
371
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* SFTP Data Source Operations
|
|
3
|
+
*
|
|
4
|
+
* Complete examples for SftpDataSource operations including connect, download,
|
|
5
|
+
* upload, list, and directory management.
|
|
6
|
+
*
|
|
7
|
+
* @package @fluentcommerce/fc-connect-sdk
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { SftpDataSource } from '@fluentcommerce/fc-connect-sdk';
|
|
11
|
+
import { writeFileSync, readFileSync } from 'fs';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Initialize SFTP Data Source with password auth
|
|
15
|
+
*/
|
|
16
|
+
function createSftpDataSourceWithPassword() {
|
|
17
|
+
return new SftpDataSource({
|
|
18
|
+
host: process.env.SFTP_HOST!,
|
|
19
|
+
port: parseInt(process.env.SFTP_PORT || '22'),
|
|
20
|
+
username: process.env.SFTP_USERNAME!,
|
|
21
|
+
password: process.env.SFTP_PASSWORD!,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Initialize SFTP Data Source with private key auth
|
|
27
|
+
*/
|
|
28
|
+
function createSftpDataSourceWithKey() {
|
|
29
|
+
const privateKey = readFileSync(process.env.SFTP_KEY_PATH!, 'utf-8');
|
|
30
|
+
|
|
31
|
+
return new SftpDataSource({
|
|
32
|
+
host: process.env.SFTP_HOST!,
|
|
33
|
+
port: parseInt(process.env.SFTP_PORT || '22'),
|
|
34
|
+
username: process.env.SFTP_USERNAME!,
|
|
35
|
+
privateKey,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Example 1: Connect and list files in directory
|
|
41
|
+
*/
|
|
42
|
+
export async function listRemoteFiles() {
|
|
43
|
+
const sftp = createSftpDataSourceWithPassword();
|
|
44
|
+
|
|
45
|
+
try {
|
|
46
|
+
const files = await sftp.listFiles({ remotePath: '/inventory/incoming', filePattern: '*' });
|
|
47
|
+
|
|
48
|
+
console.log(`Found ${files.length} files:`);
|
|
49
|
+
files.forEach(file => {
|
|
50
|
+
const type = file.type === 'd' ? 'DIR' : 'FILE';
|
|
51
|
+
console.log(` ${type} ${file.name} (${file.size} bytes, ${file.modifyTime})`);
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
return files;
|
|
55
|
+
} catch (error) {
|
|
56
|
+
console.error('Failed to list files:', error);
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Example 2: Download CSV file from SFTP
|
|
63
|
+
*/
|
|
64
|
+
export async function downloadCSVFile(remotePath: string) {
|
|
65
|
+
const sftp = createSftpDataSourceWithPassword();
|
|
66
|
+
|
|
67
|
+
try {
|
|
68
|
+
const content = await sftp.downloadFile(remotePath, { encoding: 'utf-8' });
|
|
69
|
+
|
|
70
|
+
console.log(`✓ Downloaded ${remotePath} (${content.length} bytes)`);
|
|
71
|
+
|
|
72
|
+
return content;
|
|
73
|
+
} catch (error) {
|
|
74
|
+
console.error('Failed to download file:', error);
|
|
75
|
+
throw error;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Example 3: Upload file to SFTP
|
|
81
|
+
*/
|
|
82
|
+
export async function uploadFile(localContent: string, remotePath: string) {
|
|
83
|
+
const sftp = createSftpDataSourceWithPassword();
|
|
84
|
+
|
|
85
|
+
try {
|
|
86
|
+
await sftp.uploadContent(localContent, remotePath);
|
|
87
|
+
|
|
88
|
+
console.log(`✓ Uploaded file to ${remotePath}`);
|
|
89
|
+
} catch (error) {
|
|
90
|
+
console.error('Failed to upload file:', error);
|
|
91
|
+
throw error;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Example 4: Download file to local filesystem
|
|
97
|
+
*/
|
|
98
|
+
export async function downloadToLocal(remotePath: string, localPath: string) {
|
|
99
|
+
const sftp = createSftpDataSourceWithPassword();
|
|
100
|
+
|
|
101
|
+
try {
|
|
102
|
+
const content = await sftp.downloadFile(remotePath);
|
|
103
|
+
|
|
104
|
+
writeFileSync(localPath, content);
|
|
105
|
+
|
|
106
|
+
console.log(`✓ Downloaded ${remotePath} → ${localPath}`);
|
|
107
|
+
} catch (error) {
|
|
108
|
+
console.error('Failed to download to local:', error);
|
|
109
|
+
throw error;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Example 5: Upload file from local filesystem
|
|
115
|
+
*/
|
|
116
|
+
export async function uploadFromLocal(localPath: string, remotePath: string) {
|
|
117
|
+
const sftp = createSftpDataSourceWithPassword();
|
|
118
|
+
|
|
119
|
+
try {
|
|
120
|
+
const content = readFileSync(localPath, 'utf-8');
|
|
121
|
+
await sftp.uploadContent(content, remotePath);
|
|
122
|
+
|
|
123
|
+
console.log(`✓ Uploaded ${localPath} → ${remotePath}`);
|
|
124
|
+
} catch (error) {
|
|
125
|
+
console.error('Failed to upload from local:', error);
|
|
126
|
+
throw error;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Example 6: Create directory on SFTP server
|
|
132
|
+
*/
|
|
133
|
+
export async function createDirectory(dirPath: string) {
|
|
134
|
+
const sftp = createSftpDataSourceWithPassword();
|
|
135
|
+
|
|
136
|
+
try {
|
|
137
|
+
await sftp.createDirectory(dirPath, true);
|
|
138
|
+
|
|
139
|
+
console.log(`✓ Created directory: ${dirPath}`);
|
|
140
|
+
} catch (error) {
|
|
141
|
+
console.error('Failed to create directory:', error);
|
|
142
|
+
throw error;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Example 7: Delete file from SFTP server
|
|
148
|
+
*/
|
|
149
|
+
export async function deleteFile(remotePath: string) {
|
|
150
|
+
const sftp = createSftpDataSourceWithPassword();
|
|
151
|
+
|
|
152
|
+
try {
|
|
153
|
+
await sftp.deleteFile(remotePath);
|
|
154
|
+
|
|
155
|
+
console.log(`✓ Deleted: ${remotePath}`);
|
|
156
|
+
} catch (error) {
|
|
157
|
+
console.error('Failed to delete file:', error);
|
|
158
|
+
throw error;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Example 8: Check if file exists on SFTP
|
|
164
|
+
*/
|
|
165
|
+
export async function fileExists(remotePath: string): Promise<boolean> {
|
|
166
|
+
const sftp = createSftpDataSourceWithPassword();
|
|
167
|
+
|
|
168
|
+
try {
|
|
169
|
+
const exists = await sftp.fileExists(remotePath);
|
|
170
|
+
|
|
171
|
+
console.log(`File ${remotePath} ${exists ? 'exists' : 'does not exist'}`);
|
|
172
|
+
|
|
173
|
+
return exists;
|
|
174
|
+
} catch (error) {
|
|
175
|
+
console.error('Failed to check file existence:', error);
|
|
176
|
+
throw error;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Example 9: Process all CSV files in directory
|
|
182
|
+
*
|
|
183
|
+
* NOTE: This example shows manual filtering for demonstration.
|
|
184
|
+
* In production, use filePattern in listFiles() to avoid redundant filtering.
|
|
185
|
+
*/
|
|
186
|
+
export async function processIncomingFiles() {
|
|
187
|
+
const sftp = createSftpDataSourceWithPassword();
|
|
188
|
+
|
|
189
|
+
try {
|
|
190
|
+
// OPTION 1: Let SDK filter (RECOMMENDED)
|
|
191
|
+
// const files = await sftp.listFiles({
|
|
192
|
+
// remotePath: '/inventory/incoming',
|
|
193
|
+
// filePattern: '*.csv' // SDK handles glob pattern matching
|
|
194
|
+
// });
|
|
195
|
+
// const csvFiles = files; // Already filtered by SDK!
|
|
196
|
+
|
|
197
|
+
// OPTION 2: Manual filtering (shown here for learning)
|
|
198
|
+
const files = await sftp.listFiles({ remotePath: '/inventory/incoming', filePattern: '*' });
|
|
199
|
+
|
|
200
|
+
// Filter for CSV files only
|
|
201
|
+
// IMPORTANT: Use .endsWith('.csv') NOT .endsWith('*.csv')
|
|
202
|
+
// The asterisk (*) is a glob pattern, not part of the extension
|
|
203
|
+
const csvFiles = files.filter(f => f.type === '-' && f.name.endsWith('.csv'));
|
|
204
|
+
|
|
205
|
+
console.log(`Found ${csvFiles.length} CSV files to process`);
|
|
206
|
+
|
|
207
|
+
for (const file of csvFiles) {
|
|
208
|
+
// file.path = full path (e.g., "/inventory/incoming/file.csv")
|
|
209
|
+
// file.name = filename only (e.g., "file.csv")
|
|
210
|
+
const remotePath = file.path;
|
|
211
|
+
const content = await sftp.downloadFile(remotePath, { encoding: 'utf-8' });
|
|
212
|
+
|
|
213
|
+
console.log(`Processing ${file.name} (${content.length} bytes)`);
|
|
214
|
+
|
|
215
|
+
// Process file content here
|
|
216
|
+
// ... your processing logic ...
|
|
217
|
+
|
|
218
|
+
// Move processed file to archive
|
|
219
|
+
// Use file.name (just filename) to construct destination path
|
|
220
|
+
const archivePath = `/inventory/archive/${file.name}`;
|
|
221
|
+
await sftp.uploadContent(content, archivePath);
|
|
222
|
+
await sftp.deleteFile(remotePath);
|
|
223
|
+
|
|
224
|
+
console.log(` ✓ Processed and archived ${file.name}`);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
return csvFiles.length;
|
|
228
|
+
} catch (error) {
|
|
229
|
+
console.error('Failed to process incoming files:', error);
|
|
230
|
+
throw error;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Example 10: Sync files from SFTP to S3
|
|
236
|
+
*/
|
|
237
|
+
export async function syncSftpToS3() {
|
|
238
|
+
const sftp = createSftpDataSourceWithPassword();
|
|
239
|
+
// Import S3DataSource for sync operation
|
|
240
|
+
const { S3DataSource } = require('@fluentcommerce/fc-connect-sdk');
|
|
241
|
+
|
|
242
|
+
const s3 = new S3DataSource({
|
|
243
|
+
accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
|
|
244
|
+
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
|
|
245
|
+
region: process.env.AWS_REGION!,
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
try {
|
|
249
|
+
const files = await sftp.listFiles({ remotePath: '/inventory/export', filePattern: '*' });
|
|
250
|
+
|
|
251
|
+
console.log(`Syncing ${files.length} files from SFTP to S3`);
|
|
252
|
+
|
|
253
|
+
for (const file of files) {
|
|
254
|
+
if (file.type === 'd') continue; // Skip directories
|
|
255
|
+
|
|
256
|
+
const remotePath = file.path;
|
|
257
|
+
const content = await sftp.downloadFile(remotePath);
|
|
258
|
+
|
|
259
|
+
// Upload to S3
|
|
260
|
+
await s3.uploadFile(`sftp-sync/${file.name}`, content, {
|
|
261
|
+
bucket: process.env.S3_BUCKET!,
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
console.log(` ✓ Synced ${file.name} to S3`);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
console.log('✓ Sync complete');
|
|
268
|
+
} catch (error) {
|
|
269
|
+
console.error('Failed to sync SFTP to S3:', error);
|
|
270
|
+
throw error;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* Example 11: Rename/Move file on SFTP
|
|
276
|
+
*/
|
|
277
|
+
export async function moveFile(oldPath: string, newPath: string) {
|
|
278
|
+
const sftp = createSftpDataSourceWithPassword();
|
|
279
|
+
|
|
280
|
+
try {
|
|
281
|
+
await sftp.moveFile(oldPath, newPath, false);
|
|
282
|
+
|
|
283
|
+
console.log(`✓ Moved ${oldPath} → ${newPath}`);
|
|
284
|
+
} catch (error) {
|
|
285
|
+
console.error('Failed to move file:', error);
|
|
286
|
+
throw error;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* Example 12: Download only new files (based on timestamp)
|
|
292
|
+
*/
|
|
293
|
+
export async function downloadNewFiles(lastSync: Date) {
|
|
294
|
+
const sftp = createSftpDataSourceWithPassword();
|
|
295
|
+
|
|
296
|
+
try {
|
|
297
|
+
const files = await sftp.listFiles({ remotePath: '/inventory/incoming', filePattern: '*' });
|
|
298
|
+
|
|
299
|
+
const newFiles = files.filter(f => {
|
|
300
|
+
const modTime = new Date(f.modifyTime);
|
|
301
|
+
return modTime > lastSync;
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
console.log(`Found ${newFiles.length} new files since ${lastSync.toISOString()}`);
|
|
305
|
+
|
|
306
|
+
const downloaded = [];
|
|
307
|
+
for (const file of newFiles) {
|
|
308
|
+
const remotePath = file.path;
|
|
309
|
+
const content = await sftp.downloadFile(remotePath);
|
|
310
|
+
|
|
311
|
+
downloaded.push({
|
|
312
|
+
name: file.name,
|
|
313
|
+
content,
|
|
314
|
+
modifyTime: file.modifyTime,
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
console.log(` ✓ Downloaded ${file.name}`);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
return downloaded;
|
|
321
|
+
} catch (error) {
|
|
322
|
+
console.error('Failed to download new files:', error);
|
|
323
|
+
throw error;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* Usage Example
|
|
329
|
+
*/
|
|
330
|
+
async function main() {
|
|
331
|
+
console.log('Example 1: List remote files');
|
|
332
|
+
await listRemoteFiles();
|
|
333
|
+
|
|
334
|
+
console.log('\nExample 2: Download CSV file');
|
|
335
|
+
await downloadCSVFile('/inventory/incoming/inventory.csv');
|
|
336
|
+
|
|
337
|
+
console.log('\nExample 3: Upload file');
|
|
338
|
+
await uploadFile('test content', '/inventory/outgoing/test.txt');
|
|
339
|
+
|
|
340
|
+
console.log('\nExample 4: Download to local filesystem');
|
|
341
|
+
await downloadToLocal('/inventory/data.csv', '/tmp/data.csv');
|
|
342
|
+
|
|
343
|
+
console.log('\nExample 5: Upload from local filesystem');
|
|
344
|
+
await uploadFromLocal('/tmp/upload.csv', '/inventory/incoming/upload.csv');
|
|
345
|
+
|
|
346
|
+
console.log('\nExample 6: Create directory');
|
|
347
|
+
await createDirectory('/inventory/test-dir');
|
|
348
|
+
|
|
349
|
+
console.log('\nExample 7: Delete file');
|
|
350
|
+
await deleteFile('/inventory/test-dir/temp.txt');
|
|
351
|
+
|
|
352
|
+
console.log('\nExample 8: Check file existence');
|
|
353
|
+
await fileExists('/inventory/incoming/inventory.csv');
|
|
354
|
+
|
|
355
|
+
console.log('\nExample 9: Process all incoming CSV files');
|
|
356
|
+
await processIncomingFiles();
|
|
357
|
+
|
|
358
|
+
console.log('\nExample 10: Sync SFTP to S3');
|
|
359
|
+
await syncSftpToS3();
|
|
360
|
+
|
|
361
|
+
console.log('\nExample 11: Move/rename file');
|
|
362
|
+
await moveFile('/inventory/old.csv', '/inventory/archive/old.csv');
|
|
363
|
+
|
|
364
|
+
console.log('\nExample 12: Download only new files');
|
|
365
|
+
const lastSync = new Date('2024-01-01T00:00:00Z');
|
|
366
|
+
await downloadNewFiles(lastSync);
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
if (require.main === module) {
|
|
370
|
+
main().catch(console.error);
|
|
371
|
+
}
|