@fluentcommerce/fc-connect-sdk 0.1.54 → 0.1.56
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/README.md +11 -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,447 +1,447 @@
|
|
|
1
|
-
# Pattern: Pagination & Streaming
|
|
2
|
-
|
|
3
|
-
**FC Connect SDK Use Case Guide**
|
|
4
|
-
|
|
5
|
-
> **SDK**: [@fluentcommerce/fc-connect-sdk](https://www.npmjs.com/package/@fluentcommerce/fc-connect-sdk)
|
|
6
|
-
> **Version**: Use latest - `npm install @fluentcommerce/fc-connect-sdk@latest`
|
|
7
|
-
|
|
8
|
-
**Context**: Focused guide on handling large datasets with pagination and streaming
|
|
9
|
-
|
|
10
|
-
**Type**: Reusable Pattern
|
|
11
|
-
|
|
12
|
-
**Complexity**: Medium
|
|
13
|
-
|
|
14
|
-
**Lines**: ~180 lines
|
|
15
|
-
|
|
16
|
-
## When to Use This Pattern
|
|
17
|
-
|
|
18
|
-
- GraphQL queries returning large result sets (1000+ records)
|
|
19
|
-
- CSV/Parquet file processing (multi-GB files)
|
|
20
|
-
- S3 multipart downloads
|
|
21
|
-
- Large batch operations
|
|
22
|
-
- Memory-constrained environments (Lambda, containers)
|
|
23
|
-
- Real-time data processing with progress tracking
|
|
24
|
-
|
|
25
|
-
## SDK Methods
|
|
26
|
-
|
|
27
|
-
### Pagination Helpers
|
|
28
|
-
|
|
29
|
-
- `detectPaginationVariables(query)` - Auto-detect pagination variables in query
|
|
30
|
-
- `extractConnection(response)` - Extract Relay connection from response
|
|
31
|
-
- `hasMorePages(pageInfo, direction)` - Check for next/previous page
|
|
32
|
-
- `extractCursor(connection, direction)` - Get pagination cursor
|
|
33
|
-
- `buildPaginationVariables(variables, cursor, direction)` - Build next page variables
|
|
34
|
-
|
|
35
|
-
### Streaming APIs
|
|
36
|
-
|
|
37
|
-
- `CSVParserService.parseStreaming(content, options, batchSize)` - Stream CSV records
|
|
38
|
-
- `CSVParserService.parseStreaming(stream, options, batchSize)` - Stream from Node.js stream or string
|
|
39
|
-
- `ParquetParserService.parseStreaming(buffer, fileName)` - Stream Parquet records
|
|
40
|
-
- `S3DataSource.downloadFile(key, { encoding: 'binary' })` - Download with streaming
|
|
41
|
-
|
|
42
|
-
## Pattern Examples
|
|
43
|
-
|
|
44
|
-
### 1. GraphQL Auto-Pagination Loop
|
|
45
|
-
|
|
46
|
-
Automatic pagination with safety limits and progress tracking
|
|
47
|
-
|
|
48
|
-
```typescript
|
|
49
|
-
// FC Connect SDK (latest)
|
|
50
|
-
// Install: npm install @fluentcommerce/fc-connect-sdk@latest
|
|
51
|
-
// Docs: https://www.npmjs.com/package/@fluentcommerce/fc-connect-sdk
|
|
52
|
-
// GitHub: https://github.com/fluentcommerce/fc-connect-sdk
|
|
53
|
-
import { createClient } from '@fluentcommerce/fc-connect-sdk';
|
|
54
|
-
|
|
55
|
-
const client = await createClient({
|
|
56
|
-
config: {
|
|
57
|
-
baseUrl: process.env.FLUENT_BASE_URL!,
|
|
58
|
-
clientId: process.env.FLUENT_CLIENT_ID!,
|
|
59
|
-
clientSecret: process.env.FLUENT_CLIENT_SECRET!,
|
|
60
|
-
retailerId: process.env.FLUENT_RETAILER_ID!,
|
|
61
|
-
},
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
// Auto-pagination with safety limits
|
|
65
|
-
const result = await client.graphql({
|
|
66
|
-
query: `query GetOrders($first: Int!, $after: String) {
|
|
67
|
-
orders(first: $first, after: $after) {
|
|
68
|
-
edges {
|
|
69
|
-
cursor
|
|
70
|
-
node {
|
|
71
|
-
id
|
|
72
|
-
ref
|
|
73
|
-
status
|
|
74
|
-
totalPrice
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
pageInfo {
|
|
78
|
-
hasNextPage
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}`,
|
|
82
|
-
variables: { first: 100 },
|
|
83
|
-
pagination: {
|
|
84
|
-
maxPages: 50, // Stop after 50 pages
|
|
85
|
-
maxRecords: 5000, // OR stop after 5000 records
|
|
86
|
-
timeoutMs: 60000, // OR stop after 60 seconds
|
|
87
|
-
},
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
// All pages merged into single response
|
|
91
|
-
const allOrders = result.data.orders.edges.map(e => e.node);
|
|
92
|
-
|
|
93
|
-
// Check pagination metadata
|
|
94
|
-
console.log(result.extensions.autoPagination);
|
|
95
|
-
// { totalPages: 23, totalRecords: 2300, truncated: false }
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
### 2. Manual Cursor-Based Pagination
|
|
99
|
-
|
|
100
|
-
Full control over pagination with custom logic
|
|
101
|
-
|
|
102
|
-
```typescript
|
|
103
|
-
import { extractConnection, hasMorePages, extractCursor } from '@fluentcommerce/fc-connect-sdk';
|
|
104
|
-
|
|
105
|
-
async function fetchAllProducts(client: FluentClient): Promise<any[]> {
|
|
106
|
-
const allProducts = [];
|
|
107
|
-
let cursor = null;
|
|
108
|
-
let hasMore = true;
|
|
109
|
-
|
|
110
|
-
const query = `query GetProducts($first: Int!, $after: String) {
|
|
111
|
-
products(first: $first, after: $after) {
|
|
112
|
-
edges {
|
|
113
|
-
cursor
|
|
114
|
-
node { id ref name }
|
|
115
|
-
}
|
|
116
|
-
pageInfo { hasNextPage }
|
|
117
|
-
}
|
|
118
|
-
}`;
|
|
119
|
-
|
|
120
|
-
while (hasMore) {
|
|
121
|
-
const result = await client.graphql({
|
|
122
|
-
query,
|
|
123
|
-
variables: { first: 200, after: cursor },
|
|
124
|
-
pagination: { enabled: false }, // Manual control
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
const connection = extractConnection(result.data);
|
|
128
|
-
if (!connection) break;
|
|
129
|
-
|
|
130
|
-
// Extract nodes
|
|
131
|
-
const products = connection.edges.map(e => e.node);
|
|
132
|
-
allProducts.push(...products);
|
|
133
|
-
|
|
134
|
-
// Check for next page
|
|
135
|
-
hasMore = hasMorePages(connection.pageInfo, 'forward');
|
|
136
|
-
cursor = extractCursor(connection, 'forward');
|
|
137
|
-
|
|
138
|
-
console.log(`Fetched ${products.length}, total: ${allProducts.length}`);
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
return allProducts;
|
|
142
|
-
}
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
### 3. CSV Streaming (Memory-Efficient)
|
|
146
|
-
|
|
147
|
-
Stream CSV records without loading entire file into memory
|
|
148
|
-
|
|
149
|
-
```typescript
|
|
150
|
-
import { CSVParserService } from '@fluentcommerce/fc-connect-sdk';
|
|
151
|
-
import fs from 'fs';
|
|
152
|
-
|
|
153
|
-
const parser = new CSVParserService();
|
|
154
|
-
|
|
155
|
-
// Stream from file, process in batches of 100
|
|
156
|
-
const fileStream = fs.createReadStream('large-inventory.csv');
|
|
157
|
-
let totalProcessed = 0;
|
|
158
|
-
|
|
159
|
-
for await (const batch of parser.parseStreamStreaming(fileStream, {}, 100)) {
|
|
160
|
-
// Process batch (100 records at a time)
|
|
161
|
-
await processBatch(batch);
|
|
162
|
-
totalProcessed += batch.length;
|
|
163
|
-
console.log(`Processed ${totalProcessed} records`);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
async function processBatch(records: any[]) {
|
|
167
|
-
// Send to Fluent Batch API, transform, etc.
|
|
168
|
-
for (const record of records) {
|
|
169
|
-
// Process individual record
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
### 4. Parquet Streaming with Cancellation
|
|
175
|
-
|
|
176
|
-
Stream Parquet files with progress tracking and cancellation support
|
|
177
|
-
|
|
178
|
-
```typescript
|
|
179
|
-
import { ParquetParserService } from '@fluentcommerce/fc-connect-sdk';
|
|
180
|
-
|
|
181
|
-
const parquetParser = new ParquetParserService(logger);
|
|
182
|
-
|
|
183
|
-
// Download Parquet file as buffer
|
|
184
|
-
const buffer = await s3DataSource.downloadFile('inventory.parquet', {
|
|
185
|
-
encoding: 'binary',
|
|
186
|
-
});
|
|
187
|
-
|
|
188
|
-
// Stream with cancellation
|
|
189
|
-
const { records, stats, cancel } = await parquetParser.parseStreaming(buffer, 'inventory.parquet', {
|
|
190
|
-
batchSize: 1000,
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
// Process batches asynchronously
|
|
194
|
-
let batchNumber = 0;
|
|
195
|
-
try {
|
|
196
|
-
for await (const batch of records) {
|
|
197
|
-
batchNumber++;
|
|
198
|
-
console.log(`Processing batch ${batchNumber}: ${batch.length} records`);
|
|
199
|
-
|
|
200
|
-
// Process batch
|
|
201
|
-
await sendToFluentAPI(batch);
|
|
202
|
-
|
|
203
|
-
// Cancel if taking too long
|
|
204
|
-
if (batchNumber > 100) {
|
|
205
|
-
cancel();
|
|
206
|
-
break;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
} catch (error) {
|
|
210
|
-
console.error('Streaming failed:', error);
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
// Get final statistics
|
|
214
|
-
const finalStats = await stats;
|
|
215
|
-
console.log(`Total records: ${finalStats.totalRecords}`);
|
|
216
|
-
console.log(`Processing time: ${finalStats.processingTimeMs}ms`);
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
### 5. S3 Multipart Streaming
|
|
220
|
-
|
|
221
|
-
Download large S3 files with streaming to avoid memory issues
|
|
222
|
-
|
|
223
|
-
```typescript
|
|
224
|
-
import { S3DataSource } from '@fluentcommerce/fc-connect-sdk';
|
|
225
|
-
|
|
226
|
-
const s3 = new S3DataSource(s3Config, logger);
|
|
227
|
-
|
|
228
|
-
// Download as binary buffer for streaming to parser
|
|
229
|
-
const fileBuffer = await s3.downloadFile('large-file.parquet', {
|
|
230
|
-
encoding: 'binary',
|
|
231
|
-
});
|
|
232
|
-
|
|
233
|
-
// Stream to parser (avoids double memory usage)
|
|
234
|
-
const parquetParser = new ParquetParserService(logger);
|
|
235
|
-
const { records } = await parquetParser.parseStreaming(fileBuffer, 'large-file.parquet');
|
|
236
|
-
|
|
237
|
-
// Process records as they stream
|
|
238
|
-
for await (const batch of records) {
|
|
239
|
-
// Process without accumulating in memory
|
|
240
|
-
await processRecords(batch);
|
|
241
|
-
}
|
|
242
|
-
```
|
|
243
|
-
|
|
244
|
-
### 6. Conditional Pagination (Stop Early)
|
|
245
|
-
|
|
246
|
-
Stop pagination when specific condition is met
|
|
247
|
-
|
|
248
|
-
```typescript
|
|
249
|
-
async function fetchUntilCondition(
|
|
250
|
-
client: FluentClient,
|
|
251
|
-
condition: (item: any) => boolean
|
|
252
|
-
): Promise<any[]> {
|
|
253
|
-
const results = [];
|
|
254
|
-
let cursor = null;
|
|
255
|
-
let hasMore = true;
|
|
256
|
-
|
|
257
|
-
const query = `query GetItems($first: Int!, $after: String) {
|
|
258
|
-
items(first: $first, after: $after) {
|
|
259
|
-
edges {
|
|
260
|
-
cursor
|
|
261
|
-
node { id status createdAt }
|
|
262
|
-
}
|
|
263
|
-
pageInfo { hasNextPage }
|
|
264
|
-
}
|
|
265
|
-
}`;
|
|
266
|
-
|
|
267
|
-
while (hasMore) {
|
|
268
|
-
const result = await client.graphql({
|
|
269
|
-
query,
|
|
270
|
-
variables: { first: 100, after: cursor },
|
|
271
|
-
pagination: { enabled: false },
|
|
272
|
-
});
|
|
273
|
-
|
|
274
|
-
const items = result.data?.items;
|
|
275
|
-
if (!items) break;
|
|
276
|
-
|
|
277
|
-
// Check each item
|
|
278
|
-
for (const edge of items.edges) {
|
|
279
|
-
results.push(edge.node);
|
|
280
|
-
|
|
281
|
-
// Stop early if condition met
|
|
282
|
-
if (condition(edge.node)) {
|
|
283
|
-
console.log('Condition met, stopping pagination');
|
|
284
|
-
return results;
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
hasMore = items.pageInfo.hasNextPage;
|
|
289
|
-
const lastEdge = items.edges[items.edges.length - 1];
|
|
290
|
-
cursor = lastEdge?.cursor;
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
return results;
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
// Usage: Find first CRITICAL item
|
|
297
|
-
const items = await fetchUntilCondition(client, item => item.status === 'CRITICAL');
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
### 7. Batch Processing with Progress
|
|
301
|
-
|
|
302
|
-
Process large datasets in batches with progress tracking
|
|
303
|
-
|
|
304
|
-
```typescript
|
|
305
|
-
async function processBatchesWithProgress(client: FluentClient, batchSize: number = 100) {
|
|
306
|
-
let processedCount = 0;
|
|
307
|
-
let pageCount = 0;
|
|
308
|
-
let cursor = null;
|
|
309
|
-
let hasMore = true;
|
|
310
|
-
|
|
311
|
-
const query = `query GetInventory($first: Int!, $after: String) {
|
|
312
|
-
inventoryPositions(first: $first, after: $after) {
|
|
313
|
-
edges {
|
|
314
|
-
cursor
|
|
315
|
-
node {
|
|
316
|
-
ref
|
|
317
|
-
productRef
|
|
318
|
-
qty
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
pageInfo { hasNextPage }
|
|
322
|
-
}
|
|
323
|
-
}`;
|
|
324
|
-
|
|
325
|
-
while (hasMore) {
|
|
326
|
-
const result = await client.graphql({
|
|
327
|
-
query,
|
|
328
|
-
variables: { first: batchSize, after: cursor },
|
|
329
|
-
pagination: { enabled: false },
|
|
330
|
-
});
|
|
331
|
-
|
|
332
|
-
const positions = result.data?.inventoryPositions;
|
|
333
|
-
if (!positions) break;
|
|
334
|
-
|
|
335
|
-
const batch = positions.edges.map(e => e.node);
|
|
336
|
-
pageCount++;
|
|
337
|
-
|
|
338
|
-
// Process batch
|
|
339
|
-
console.log(`Processing batch ${pageCount} (${batch.length} items)`);
|
|
340
|
-
await updateInventory(batch);
|
|
341
|
-
processedCount += batch.length;
|
|
342
|
-
|
|
343
|
-
// Update progress
|
|
344
|
-
console.log(`Progress: ${processedCount} items processed`);
|
|
345
|
-
|
|
346
|
-
hasMore = positions.pageInfo.hasNextPage;
|
|
347
|
-
const lastEdge = positions.edges[positions.edges.length - 1];
|
|
348
|
-
cursor = lastEdge?.cursor;
|
|
349
|
-
|
|
350
|
-
// Add delay to avoid rate limiting
|
|
351
|
-
if (hasMore) {
|
|
352
|
-
await new Promise(resolve => setTimeout(resolve, 100));
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
console.log(`Complete: Processed ${processedCount} items in ${pageCount} batches`);
|
|
357
|
-
}
|
|
358
|
-
```
|
|
359
|
-
|
|
360
|
-
## Common Patterns
|
|
361
|
-
|
|
362
|
-
### Pattern 1: Auto-Pagination with Limits
|
|
363
|
-
|
|
364
|
-
**Use Case**: Fetch all records with safety guardrails
|
|
365
|
-
|
|
366
|
-
**Key**: Use `pagination` config with `maxPages`, `maxRecords`, `timeoutMs`
|
|
367
|
-
|
|
368
|
-
### Pattern 2: Manual Pagination Loop
|
|
369
|
-
|
|
370
|
-
**Use Case**: Full control over pagination logic
|
|
371
|
-
|
|
372
|
-
**Key**: Disable auto-pagination, use helper functions for cursor management
|
|
373
|
-
|
|
374
|
-
### Pattern 3: CSV/Parquet Streaming
|
|
375
|
-
|
|
376
|
-
**Use Case**: Process large files without memory issues
|
|
377
|
-
|
|
378
|
-
**Key**: Use `parseStreaming()` or `parseStreamStreaming()` with batching
|
|
379
|
-
|
|
380
|
-
### Pattern 4: Conditional Pagination
|
|
381
|
-
|
|
382
|
-
**Use Case**: Stop fetching when specific item found
|
|
383
|
-
|
|
384
|
-
**Key**: Manual loop with early break condition
|
|
385
|
-
|
|
386
|
-
### Pattern 5: Batch Processing
|
|
387
|
-
|
|
388
|
-
**Use Case**: Process records in chunks as they arrive
|
|
389
|
-
|
|
390
|
-
**Key**: Combine pagination with batch processing logic
|
|
391
|
-
|
|
392
|
-
### Pattern 6: Progress Tracking
|
|
393
|
-
|
|
394
|
-
**Use Case**: Monitor long-running operations
|
|
395
|
-
|
|
396
|
-
**Key**: Use `onProgress` callback or manual logging
|
|
397
|
-
|
|
398
|
-
### Pattern 7: Rate Limiting
|
|
399
|
-
|
|
400
|
-
**Use Case**: Avoid API rate limits during pagination
|
|
401
|
-
|
|
402
|
-
**Key**: Add `delayMs` between pages or manual `setTimeout()`
|
|
403
|
-
|
|
404
|
-
## Performance Tips
|
|
405
|
-
|
|
406
|
-
### Memory Management
|
|
407
|
-
|
|
408
|
-
- **Stream instead of load**: Use streaming APIs for files >100MB
|
|
409
|
-
- **Batch processing**: Process records in batches (100-1000) to allow GC
|
|
410
|
-
- **Early termination**: Stop pagination early when condition met
|
|
411
|
-
- **Buffer reuse**: Don't accumulate all results in memory if not needed
|
|
412
|
-
|
|
413
|
-
### Pagination Optimization
|
|
414
|
-
|
|
415
|
-
- **Page size tuning**:
|
|
416
|
-
- Small objects (IDs only): 500-1000 per page
|
|
417
|
-
- Medium objects: 100-250 per page
|
|
418
|
-
- Large nested objects: 25-50 per page
|
|
419
|
-
- **Parallel queries**: Paginate multiple queries in parallel with `Promise.all()`
|
|
420
|
-
- **Connection pooling**: Reuse HTTP connections for sequential requests
|
|
421
|
-
|
|
422
|
-
### Error Handling
|
|
423
|
-
|
|
424
|
-
- **Retry on failure**: Implement exponential backoff for transient errors
|
|
425
|
-
- **Checkpoint progress**: Save cursor position for resumable pagination
|
|
426
|
-
- **Validate responses**: Check for errors in each page before continuing
|
|
427
|
-
|
|
428
|
-
### Common Pitfalls
|
|
429
|
-
|
|
430
|
-
1. **Loading entire dataset in memory** - Use streaming APIs
|
|
431
|
-
2. **Too large page sizes** - Causes timeouts and memory issues
|
|
432
|
-
3. **No progress tracking** - Makes debugging difficult
|
|
433
|
-
4. **Ignoring safety limits** - Can cause runaway queries
|
|
434
|
-
5. **Not handling empty pages** - Check for null/undefined connections
|
|
435
|
-
|
|
436
|
-
## Related Patterns
|
|
437
|
-
|
|
438
|
-
- **Batch Processing**: Combine with pagination for large-scale operations
|
|
439
|
-
- **State Management**: Track processed files to prevent duplicates
|
|
440
|
-
- **Error Recovery**: Implement retry logic with pagination checkpoints
|
|
441
|
-
|
|
442
|
-
## See Also
|
|
443
|
-
|
|
444
|
-
- [Auto-Pagination Guide](../../02-CORE-GUIDES/advanced-services/advanced-services-readme.md)
|
|
445
|
-
- [Pagination Guide](../../02-CORE-GUIDES/advanced-services/advanced-services-readme.md)
|
|
446
|
-
- [CSV Parser Documentation](../../02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-02-csv-parser.md)
|
|
447
|
-
- [Parquet Parser Documentation](../../02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-05-parquet-parser.md)
|
|
1
|
+
# Pattern: Pagination & Streaming
|
|
2
|
+
|
|
3
|
+
**FC Connect SDK Use Case Guide**
|
|
4
|
+
|
|
5
|
+
> **SDK**: [@fluentcommerce/fc-connect-sdk](https://www.npmjs.com/package/@fluentcommerce/fc-connect-sdk)
|
|
6
|
+
> **Version**: Use latest - `npm install @fluentcommerce/fc-connect-sdk@latest`
|
|
7
|
+
|
|
8
|
+
**Context**: Focused guide on handling large datasets with pagination and streaming
|
|
9
|
+
|
|
10
|
+
**Type**: Reusable Pattern
|
|
11
|
+
|
|
12
|
+
**Complexity**: Medium
|
|
13
|
+
|
|
14
|
+
**Lines**: ~180 lines
|
|
15
|
+
|
|
16
|
+
## When to Use This Pattern
|
|
17
|
+
|
|
18
|
+
- GraphQL queries returning large result sets (1000+ records)
|
|
19
|
+
- CSV/Parquet file processing (multi-GB files)
|
|
20
|
+
- S3 multipart downloads
|
|
21
|
+
- Large batch operations
|
|
22
|
+
- Memory-constrained environments (Lambda, containers)
|
|
23
|
+
- Real-time data processing with progress tracking
|
|
24
|
+
|
|
25
|
+
## SDK Methods
|
|
26
|
+
|
|
27
|
+
### Pagination Helpers
|
|
28
|
+
|
|
29
|
+
- `detectPaginationVariables(query)` - Auto-detect pagination variables in query
|
|
30
|
+
- `extractConnection(response)` - Extract Relay connection from response
|
|
31
|
+
- `hasMorePages(pageInfo, direction)` - Check for next/previous page
|
|
32
|
+
- `extractCursor(connection, direction)` - Get pagination cursor
|
|
33
|
+
- `buildPaginationVariables(variables, cursor, direction)` - Build next page variables
|
|
34
|
+
|
|
35
|
+
### Streaming APIs
|
|
36
|
+
|
|
37
|
+
- `CSVParserService.parseStreaming(content, options, batchSize)` - Stream CSV records
|
|
38
|
+
- `CSVParserService.parseStreaming(stream, options, batchSize)` - Stream from Node.js stream or string
|
|
39
|
+
- `ParquetParserService.parseStreaming(buffer, fileName)` - Stream Parquet records
|
|
40
|
+
- `S3DataSource.downloadFile(key, { encoding: 'binary' })` - Download with streaming
|
|
41
|
+
|
|
42
|
+
## Pattern Examples
|
|
43
|
+
|
|
44
|
+
### 1. GraphQL Auto-Pagination Loop
|
|
45
|
+
|
|
46
|
+
Automatic pagination with safety limits and progress tracking
|
|
47
|
+
|
|
48
|
+
```typescript
|
|
49
|
+
// FC Connect SDK (latest)
|
|
50
|
+
// Install: npm install @fluentcommerce/fc-connect-sdk@latest
|
|
51
|
+
// Docs: https://www.npmjs.com/package/@fluentcommerce/fc-connect-sdk
|
|
52
|
+
// GitHub: https://github.com/fluentcommerce/fc-connect-sdk
|
|
53
|
+
import { createClient } from '@fluentcommerce/fc-connect-sdk';
|
|
54
|
+
|
|
55
|
+
const client = await createClient({
|
|
56
|
+
config: {
|
|
57
|
+
baseUrl: process.env.FLUENT_BASE_URL!,
|
|
58
|
+
clientId: process.env.FLUENT_CLIENT_ID!,
|
|
59
|
+
clientSecret: process.env.FLUENT_CLIENT_SECRET!,
|
|
60
|
+
retailerId: process.env.FLUENT_RETAILER_ID!,
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
// Auto-pagination with safety limits
|
|
65
|
+
const result = await client.graphql({
|
|
66
|
+
query: `query GetOrders($first: Int!, $after: String) {
|
|
67
|
+
orders(first: $first, after: $after) {
|
|
68
|
+
edges {
|
|
69
|
+
cursor
|
|
70
|
+
node {
|
|
71
|
+
id
|
|
72
|
+
ref
|
|
73
|
+
status
|
|
74
|
+
totalPrice
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
pageInfo {
|
|
78
|
+
hasNextPage
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}`,
|
|
82
|
+
variables: { first: 100 },
|
|
83
|
+
pagination: {
|
|
84
|
+
maxPages: 50, // Stop after 50 pages
|
|
85
|
+
maxRecords: 5000, // OR stop after 5000 records
|
|
86
|
+
timeoutMs: 60000, // OR stop after 60 seconds
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
// All pages merged into single response
|
|
91
|
+
const allOrders = result.data.orders.edges.map(e => e.node);
|
|
92
|
+
|
|
93
|
+
// Check pagination metadata
|
|
94
|
+
console.log(result.extensions.autoPagination);
|
|
95
|
+
// { totalPages: 23, totalRecords: 2300, truncated: false }
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### 2. Manual Cursor-Based Pagination
|
|
99
|
+
|
|
100
|
+
Full control over pagination with custom logic
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
import { extractConnection, hasMorePages, extractCursor } from '@fluentcommerce/fc-connect-sdk';
|
|
104
|
+
|
|
105
|
+
async function fetchAllProducts(client: FluentClient): Promise<any[]> {
|
|
106
|
+
const allProducts = [];
|
|
107
|
+
let cursor = null;
|
|
108
|
+
let hasMore = true;
|
|
109
|
+
|
|
110
|
+
const query = `query GetProducts($first: Int!, $after: String) {
|
|
111
|
+
products(first: $first, after: $after) {
|
|
112
|
+
edges {
|
|
113
|
+
cursor
|
|
114
|
+
node { id ref name }
|
|
115
|
+
}
|
|
116
|
+
pageInfo { hasNextPage }
|
|
117
|
+
}
|
|
118
|
+
}`;
|
|
119
|
+
|
|
120
|
+
while (hasMore) {
|
|
121
|
+
const result = await client.graphql({
|
|
122
|
+
query,
|
|
123
|
+
variables: { first: 200, after: cursor },
|
|
124
|
+
pagination: { enabled: false }, // Manual control
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
const connection = extractConnection(result.data);
|
|
128
|
+
if (!connection) break;
|
|
129
|
+
|
|
130
|
+
// Extract nodes
|
|
131
|
+
const products = connection.edges.map(e => e.node);
|
|
132
|
+
allProducts.push(...products);
|
|
133
|
+
|
|
134
|
+
// Check for next page
|
|
135
|
+
hasMore = hasMorePages(connection.pageInfo, 'forward');
|
|
136
|
+
cursor = extractCursor(connection, 'forward');
|
|
137
|
+
|
|
138
|
+
console.log(`Fetched ${products.length}, total: ${allProducts.length}`);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return allProducts;
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### 3. CSV Streaming (Memory-Efficient)
|
|
146
|
+
|
|
147
|
+
Stream CSV records without loading entire file into memory
|
|
148
|
+
|
|
149
|
+
```typescript
|
|
150
|
+
import { CSVParserService } from '@fluentcommerce/fc-connect-sdk';
|
|
151
|
+
import fs from 'fs';
|
|
152
|
+
|
|
153
|
+
const parser = new CSVParserService();
|
|
154
|
+
|
|
155
|
+
// Stream from file, process in batches of 100
|
|
156
|
+
const fileStream = fs.createReadStream('large-inventory.csv');
|
|
157
|
+
let totalProcessed = 0;
|
|
158
|
+
|
|
159
|
+
for await (const batch of parser.parseStreamStreaming(fileStream, {}, 100)) {
|
|
160
|
+
// Process batch (100 records at a time)
|
|
161
|
+
await processBatch(batch);
|
|
162
|
+
totalProcessed += batch.length;
|
|
163
|
+
console.log(`Processed ${totalProcessed} records`);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
async function processBatch(records: any[]) {
|
|
167
|
+
// Send to Fluent Batch API, transform, etc.
|
|
168
|
+
for (const record of records) {
|
|
169
|
+
// Process individual record
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### 4. Parquet Streaming with Cancellation
|
|
175
|
+
|
|
176
|
+
Stream Parquet files with progress tracking and cancellation support
|
|
177
|
+
|
|
178
|
+
```typescript
|
|
179
|
+
import { ParquetParserService } from '@fluentcommerce/fc-connect-sdk';
|
|
180
|
+
|
|
181
|
+
const parquetParser = new ParquetParserService(logger);
|
|
182
|
+
|
|
183
|
+
// Download Parquet file as buffer
|
|
184
|
+
const buffer = await s3DataSource.downloadFile('inventory.parquet', {
|
|
185
|
+
encoding: 'binary',
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
// Stream with cancellation
|
|
189
|
+
const { records, stats, cancel } = await parquetParser.parseStreaming(buffer, 'inventory.parquet', {
|
|
190
|
+
batchSize: 1000,
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
// Process batches asynchronously
|
|
194
|
+
let batchNumber = 0;
|
|
195
|
+
try {
|
|
196
|
+
for await (const batch of records) {
|
|
197
|
+
batchNumber++;
|
|
198
|
+
console.log(`Processing batch ${batchNumber}: ${batch.length} records`);
|
|
199
|
+
|
|
200
|
+
// Process batch
|
|
201
|
+
await sendToFluentAPI(batch);
|
|
202
|
+
|
|
203
|
+
// Cancel if taking too long
|
|
204
|
+
if (batchNumber > 100) {
|
|
205
|
+
cancel();
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
} catch (error) {
|
|
210
|
+
console.error('Streaming failed:', error);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// Get final statistics
|
|
214
|
+
const finalStats = await stats;
|
|
215
|
+
console.log(`Total records: ${finalStats.totalRecords}`);
|
|
216
|
+
console.log(`Processing time: ${finalStats.processingTimeMs}ms`);
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### 5. S3 Multipart Streaming
|
|
220
|
+
|
|
221
|
+
Download large S3 files with streaming to avoid memory issues
|
|
222
|
+
|
|
223
|
+
```typescript
|
|
224
|
+
import { S3DataSource } from '@fluentcommerce/fc-connect-sdk';
|
|
225
|
+
|
|
226
|
+
const s3 = new S3DataSource(s3Config, logger);
|
|
227
|
+
|
|
228
|
+
// Download as binary buffer for streaming to parser
|
|
229
|
+
const fileBuffer = await s3.downloadFile('large-file.parquet', {
|
|
230
|
+
encoding: 'binary',
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
// Stream to parser (avoids double memory usage)
|
|
234
|
+
const parquetParser = new ParquetParserService(logger);
|
|
235
|
+
const { records } = await parquetParser.parseStreaming(fileBuffer, 'large-file.parquet');
|
|
236
|
+
|
|
237
|
+
// Process records as they stream
|
|
238
|
+
for await (const batch of records) {
|
|
239
|
+
// Process without accumulating in memory
|
|
240
|
+
await processRecords(batch);
|
|
241
|
+
}
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### 6. Conditional Pagination (Stop Early)
|
|
245
|
+
|
|
246
|
+
Stop pagination when specific condition is met
|
|
247
|
+
|
|
248
|
+
```typescript
|
|
249
|
+
async function fetchUntilCondition(
|
|
250
|
+
client: FluentClient,
|
|
251
|
+
condition: (item: any) => boolean
|
|
252
|
+
): Promise<any[]> {
|
|
253
|
+
const results = [];
|
|
254
|
+
let cursor = null;
|
|
255
|
+
let hasMore = true;
|
|
256
|
+
|
|
257
|
+
const query = `query GetItems($first: Int!, $after: String) {
|
|
258
|
+
items(first: $first, after: $after) {
|
|
259
|
+
edges {
|
|
260
|
+
cursor
|
|
261
|
+
node { id status createdAt }
|
|
262
|
+
}
|
|
263
|
+
pageInfo { hasNextPage }
|
|
264
|
+
}
|
|
265
|
+
}`;
|
|
266
|
+
|
|
267
|
+
while (hasMore) {
|
|
268
|
+
const result = await client.graphql({
|
|
269
|
+
query,
|
|
270
|
+
variables: { first: 100, after: cursor },
|
|
271
|
+
pagination: { enabled: false },
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
const items = result.data?.items;
|
|
275
|
+
if (!items) break;
|
|
276
|
+
|
|
277
|
+
// Check each item
|
|
278
|
+
for (const edge of items.edges) {
|
|
279
|
+
results.push(edge.node);
|
|
280
|
+
|
|
281
|
+
// Stop early if condition met
|
|
282
|
+
if (condition(edge.node)) {
|
|
283
|
+
console.log('Condition met, stopping pagination');
|
|
284
|
+
return results;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
hasMore = items.pageInfo.hasNextPage;
|
|
289
|
+
const lastEdge = items.edges[items.edges.length - 1];
|
|
290
|
+
cursor = lastEdge?.cursor;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
return results;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
// Usage: Find first CRITICAL item
|
|
297
|
+
const items = await fetchUntilCondition(client, item => item.status === 'CRITICAL');
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
### 7. Batch Processing with Progress
|
|
301
|
+
|
|
302
|
+
Process large datasets in batches with progress tracking
|
|
303
|
+
|
|
304
|
+
```typescript
|
|
305
|
+
async function processBatchesWithProgress(client: FluentClient, batchSize: number = 100) {
|
|
306
|
+
let processedCount = 0;
|
|
307
|
+
let pageCount = 0;
|
|
308
|
+
let cursor = null;
|
|
309
|
+
let hasMore = true;
|
|
310
|
+
|
|
311
|
+
const query = `query GetInventory($first: Int!, $after: String) {
|
|
312
|
+
inventoryPositions(first: $first, after: $after) {
|
|
313
|
+
edges {
|
|
314
|
+
cursor
|
|
315
|
+
node {
|
|
316
|
+
ref
|
|
317
|
+
productRef
|
|
318
|
+
qty
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
pageInfo { hasNextPage }
|
|
322
|
+
}
|
|
323
|
+
}`;
|
|
324
|
+
|
|
325
|
+
while (hasMore) {
|
|
326
|
+
const result = await client.graphql({
|
|
327
|
+
query,
|
|
328
|
+
variables: { first: batchSize, after: cursor },
|
|
329
|
+
pagination: { enabled: false },
|
|
330
|
+
});
|
|
331
|
+
|
|
332
|
+
const positions = result.data?.inventoryPositions;
|
|
333
|
+
if (!positions) break;
|
|
334
|
+
|
|
335
|
+
const batch = positions.edges.map(e => e.node);
|
|
336
|
+
pageCount++;
|
|
337
|
+
|
|
338
|
+
// Process batch
|
|
339
|
+
console.log(`Processing batch ${pageCount} (${batch.length} items)`);
|
|
340
|
+
await updateInventory(batch);
|
|
341
|
+
processedCount += batch.length;
|
|
342
|
+
|
|
343
|
+
// Update progress
|
|
344
|
+
console.log(`Progress: ${processedCount} items processed`);
|
|
345
|
+
|
|
346
|
+
hasMore = positions.pageInfo.hasNextPage;
|
|
347
|
+
const lastEdge = positions.edges[positions.edges.length - 1];
|
|
348
|
+
cursor = lastEdge?.cursor;
|
|
349
|
+
|
|
350
|
+
// Add delay to avoid rate limiting
|
|
351
|
+
if (hasMore) {
|
|
352
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
console.log(`Complete: Processed ${processedCount} items in ${pageCount} batches`);
|
|
357
|
+
}
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
## Common Patterns
|
|
361
|
+
|
|
362
|
+
### Pattern 1: Auto-Pagination with Limits
|
|
363
|
+
|
|
364
|
+
**Use Case**: Fetch all records with safety guardrails
|
|
365
|
+
|
|
366
|
+
**Key**: Use `pagination` config with `maxPages`, `maxRecords`, `timeoutMs`
|
|
367
|
+
|
|
368
|
+
### Pattern 2: Manual Pagination Loop
|
|
369
|
+
|
|
370
|
+
**Use Case**: Full control over pagination logic
|
|
371
|
+
|
|
372
|
+
**Key**: Disable auto-pagination, use helper functions for cursor management
|
|
373
|
+
|
|
374
|
+
### Pattern 3: CSV/Parquet Streaming
|
|
375
|
+
|
|
376
|
+
**Use Case**: Process large files without memory issues
|
|
377
|
+
|
|
378
|
+
**Key**: Use `parseStreaming()` or `parseStreamStreaming()` with batching
|
|
379
|
+
|
|
380
|
+
### Pattern 4: Conditional Pagination
|
|
381
|
+
|
|
382
|
+
**Use Case**: Stop fetching when specific item found
|
|
383
|
+
|
|
384
|
+
**Key**: Manual loop with early break condition
|
|
385
|
+
|
|
386
|
+
### Pattern 5: Batch Processing
|
|
387
|
+
|
|
388
|
+
**Use Case**: Process records in chunks as they arrive
|
|
389
|
+
|
|
390
|
+
**Key**: Combine pagination with batch processing logic
|
|
391
|
+
|
|
392
|
+
### Pattern 6: Progress Tracking
|
|
393
|
+
|
|
394
|
+
**Use Case**: Monitor long-running operations
|
|
395
|
+
|
|
396
|
+
**Key**: Use `onProgress` callback or manual logging
|
|
397
|
+
|
|
398
|
+
### Pattern 7: Rate Limiting
|
|
399
|
+
|
|
400
|
+
**Use Case**: Avoid API rate limits during pagination
|
|
401
|
+
|
|
402
|
+
**Key**: Add `delayMs` between pages or manual `setTimeout()`
|
|
403
|
+
|
|
404
|
+
## Performance Tips
|
|
405
|
+
|
|
406
|
+
### Memory Management
|
|
407
|
+
|
|
408
|
+
- **Stream instead of load**: Use streaming APIs for files >100MB
|
|
409
|
+
- **Batch processing**: Process records in batches (100-1000) to allow GC
|
|
410
|
+
- **Early termination**: Stop pagination early when condition met
|
|
411
|
+
- **Buffer reuse**: Don't accumulate all results in memory if not needed
|
|
412
|
+
|
|
413
|
+
### Pagination Optimization
|
|
414
|
+
|
|
415
|
+
- **Page size tuning**:
|
|
416
|
+
- Small objects (IDs only): 500-1000 per page
|
|
417
|
+
- Medium objects: 100-250 per page
|
|
418
|
+
- Large nested objects: 25-50 per page
|
|
419
|
+
- **Parallel queries**: Paginate multiple queries in parallel with `Promise.all()`
|
|
420
|
+
- **Connection pooling**: Reuse HTTP connections for sequential requests
|
|
421
|
+
|
|
422
|
+
### Error Handling
|
|
423
|
+
|
|
424
|
+
- **Retry on failure**: Implement exponential backoff for transient errors
|
|
425
|
+
- **Checkpoint progress**: Save cursor position for resumable pagination
|
|
426
|
+
- **Validate responses**: Check for errors in each page before continuing
|
|
427
|
+
|
|
428
|
+
### Common Pitfalls
|
|
429
|
+
|
|
430
|
+
1. **Loading entire dataset in memory** - Use streaming APIs
|
|
431
|
+
2. **Too large page sizes** - Causes timeouts and memory issues
|
|
432
|
+
3. **No progress tracking** - Makes debugging difficult
|
|
433
|
+
4. **Ignoring safety limits** - Can cause runaway queries
|
|
434
|
+
5. **Not handling empty pages** - Check for null/undefined connections
|
|
435
|
+
|
|
436
|
+
## Related Patterns
|
|
437
|
+
|
|
438
|
+
- **Batch Processing**: Combine with pagination for large-scale operations
|
|
439
|
+
- **State Management**: Track processed files to prevent duplicates
|
|
440
|
+
- **Error Recovery**: Implement retry logic with pagination checkpoints
|
|
441
|
+
|
|
442
|
+
## See Also
|
|
443
|
+
|
|
444
|
+
- [Auto-Pagination Guide](../../02-CORE-GUIDES/advanced-services/advanced-services-readme.md)
|
|
445
|
+
- [Pagination Guide](../../02-CORE-GUIDES/advanced-services/advanced-services-readme.md)
|
|
446
|
+
- [CSV Parser Documentation](../../02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-02-csv-parser.md)
|
|
447
|
+
- [Parquet Parser Documentation](../../02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-05-parquet-parser.md)
|