@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,470 +1,470 @@
|
|
|
1
|
-
# Module 1: Foundations
|
|
2
|
-
|
|
3
|
-
> **Learning Objective:** Understand why pagination is essential, how Relay-style pagination works, and how Fluent Commerce implements it.
|
|
4
|
-
>
|
|
5
|
-
> **Level:** Beginner
|
|
6
|
-
|
|
7
|
-
## Table of Contents
|
|
8
|
-
|
|
9
|
-
1. [Why Pagination Matters](#why-pagination-matters)
|
|
10
|
-
2. [The Problem Without Pagination](#the-problem-without-pagination)
|
|
11
|
-
3. [The Relay Connection Specification](#the-relay-connection-specification)
|
|
12
|
-
4. [How Fluent Commerce Implements Relay](#how-fluent-commerce-implements-relay)
|
|
13
|
-
5. [Cursor-Based vs Offset-Based](#cursor-based-vs-offset-based)
|
|
14
|
-
6. [Key Terminology](#key-terminology)
|
|
15
|
-
7. [Next Steps](#next-steps)
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
## Why Pagination Matters
|
|
20
|
-
|
|
21
|
-
Fluent Commerce APIs can return thousands or even millions of records:
|
|
22
|
-
|
|
23
|
-
- **Inventory positions**: 50,000+ SKU locations across warehouses
|
|
24
|
-
- **Orders**: 100,000+ orders per day for large retailers
|
|
25
|
-
- **Products**: 250,000+ product catalog with variants
|
|
26
|
-
- **Fulfillment events**: Millions of historical events
|
|
27
|
-
|
|
28
|
-
Without pagination, fetching large datasets causes:
|
|
29
|
-
|
|
30
|
-
### ❌ Performance Problems
|
|
31
|
-
|
|
32
|
-
| Issue | Impact | Example |
|
|
33
|
-
| --------------------- | --------------------------------- | --------------------------------- |
|
|
34
|
-
| **API Timeouts** | Requests fail after 30-60 seconds | Query for 50K positions times out |
|
|
35
|
-
| **Memory Exhaustion** | Node.js/Deno runs out of memory | 100K orders = OOM crash |
|
|
36
|
-
| **Slow Responses** | Minutes to return data | 5+ minutes for product catalog |
|
|
37
|
-
| **Network Overhead** | Multi-MB responses over the wire | 10MB JSON response blocks network |
|
|
38
|
-
|
|
39
|
-
### ✅ With Pagination
|
|
40
|
-
|
|
41
|
-
| Benefit | Result |
|
|
42
|
-
| ----------------------- | ---------------------------------- |
|
|
43
|
-
| **Fast Response Times** | Each page returns in <1 second |
|
|
44
|
-
| **Memory Efficient** | Process data in manageable chunks |
|
|
45
|
-
| **Fault Tolerant** | Resume from last cursor on failure |
|
|
46
|
-
| **Rate Limit Friendly** | Spread requests over time |
|
|
47
|
-
|
|
48
|
-
---
|
|
49
|
-
|
|
50
|
-
## The Problem Without Pagination
|
|
51
|
-
|
|
52
|
-
### Real-World Scenario
|
|
53
|
-
|
|
54
|
-
Imagine fetching all virtual positions (inventory) for a large retailer:
|
|
55
|
-
|
|
56
|
-
```typescript
|
|
57
|
-
// ❌ WRONG: Attempting to fetch everything at once
|
|
58
|
-
const result = await client.graphql({
|
|
59
|
-
query: `
|
|
60
|
-
query GetAllPositions {
|
|
61
|
-
virtualPositions {
|
|
62
|
-
edges {
|
|
63
|
-
node {
|
|
64
|
-
id
|
|
65
|
-
productRef
|
|
66
|
-
quantity
|
|
67
|
-
groupRef
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
`,
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
// What happens?
|
|
76
|
-
// 1. API attempts to load 50,000+ positions into memory
|
|
77
|
-
// 2. Query takes 3+ minutes to execute
|
|
78
|
-
// 3. Returns 15MB JSON response
|
|
79
|
-
// 4. Likely times out or crashes with OOM error
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### Consequences
|
|
83
|
-
|
|
84
|
-
1. **Database Load**: Single query scans entire table
|
|
85
|
-
2. **API Server Strain**: Serializing huge JSON response
|
|
86
|
-
3. **Network Bandwidth**: Transferring multi-MB payload
|
|
87
|
-
4. **Client Memory**: Deserializing and storing all records
|
|
88
|
-
5. **User Experience**: Long wait times, failed requests
|
|
89
|
-
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
## The Relay Connection Specification
|
|
93
|
-
|
|
94
|
-
Fluent Commerce follows the **[Relay Cursor Connections Specification](https://relay.dev/graphql/connections.htm)**, a GraphQL best practice for pagination.
|
|
95
|
-
|
|
96
|
-
### Core Concepts
|
|
97
|
-
|
|
98
|
-
#### 1. Connection Object
|
|
99
|
-
|
|
100
|
-
A "connection" is a pageable collection with metadata:
|
|
101
|
-
|
|
102
|
-
```graphql
|
|
103
|
-
type VirtualPositionConnection {
|
|
104
|
-
edges: [VirtualPositionEdge!]! # Array of items with cursors
|
|
105
|
-
pageInfo: PageInfo! # Pagination metadata
|
|
106
|
-
}
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
#### 2. Edge Object
|
|
110
|
-
|
|
111
|
-
An "edge" wraps each item with a cursor (position marker):
|
|
112
|
-
|
|
113
|
-
```graphql
|
|
114
|
-
type VirtualPositionEdge {
|
|
115
|
-
node: VirtualPosition! # The actual data
|
|
116
|
-
cursor: String! # Opaque position marker
|
|
117
|
-
}
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
#### 3. PageInfo Object
|
|
121
|
-
|
|
122
|
-
Metadata about pagination state:
|
|
123
|
-
|
|
124
|
-
```graphql
|
|
125
|
-
type PageInfo {
|
|
126
|
-
hasNextPage: Boolean! # More data available forward?
|
|
127
|
-
hasPreviousPage: Boolean! # More data available backward?
|
|
128
|
-
# NOTE: Fluent Commerce does NOT return startCursor/endCursor in pageInfo
|
|
129
|
-
# Cursors are in edges[].cursor instead (edge-based cursors)
|
|
130
|
-
}
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
**Fluent Commerce Implementation Note:**
|
|
134
|
-
Unlike the full Relay spec, Fluent uses **edge-based cursors only**. The SDK extracts cursors from `edges[].cursor`, not from `pageInfo.startCursor`/`endCursor`.
|
|
135
|
-
|
|
136
|
-
#### 4. Pagination Arguments
|
|
137
|
-
|
|
138
|
-
Arguments for requesting pages:
|
|
139
|
-
|
|
140
|
-
```graphql
|
|
141
|
-
virtualPositions(
|
|
142
|
-
first: Int # Forward pagination: fetch N items
|
|
143
|
-
after: String # Start after this cursor
|
|
144
|
-
last: Int # Backward pagination: fetch last N items
|
|
145
|
-
before: String # Start before this cursor
|
|
146
|
-
): VirtualPositionConnection
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
### Visual Representation
|
|
150
|
-
|
|
151
|
-
```
|
|
152
|
-
Full Dataset: [Item1, Item2, Item3, Item4, Item5, Item6, Item7, Item8, Item9, Item10]
|
|
153
|
-
↓
|
|
154
|
-
┌─────────────────────┐
|
|
155
|
-
Page 1 │ first: 3 │
|
|
156
|
-
│ after: null │
|
|
157
|
-
└─────────────────────┘
|
|
158
|
-
Returns: [Item1, Item2, Item3]
|
|
159
|
-
edges[2].cursor: "cursor-3" (last edge)
|
|
160
|
-
hasNextPage: true
|
|
161
|
-
↓
|
|
162
|
-
┌─────────────────────┐
|
|
163
|
-
Page 2 │ first: 3 │
|
|
164
|
-
│ after: "cursor-3" │
|
|
165
|
-
└─────────────────────┘
|
|
166
|
-
Returns: [Item4, Item5, Item6]
|
|
167
|
-
edges[2].cursor: "cursor-6" (last edge)
|
|
168
|
-
hasNextPage: true
|
|
169
|
-
↓
|
|
170
|
-
┌─────────────────────┐
|
|
171
|
-
Page 3 │ first: 3 │
|
|
172
|
-
│ after: "cursor-6" │
|
|
173
|
-
└─────────────────────┘
|
|
174
|
-
Returns: [Item7, Item8, Item9]
|
|
175
|
-
edges[2].cursor: "cursor-9" (last edge)
|
|
176
|
-
hasNextPage: true
|
|
177
|
-
↓
|
|
178
|
-
┌─────────────────────┐
|
|
179
|
-
Page 4 │ first: 3 │
|
|
180
|
-
│ after: "cursor-9" │
|
|
181
|
-
└─────────────────────┘
|
|
182
|
-
Returns: [Item10]
|
|
183
|
-
edges[0].cursor: "cursor-10" (last edge)
|
|
184
|
-
hasNextPage: false ← No more pages!
|
|
185
|
-
|
|
186
|
-
**Note:** Cursors come from edges[].cursor (Fluent uses edge-based cursors)
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
---
|
|
190
|
-
|
|
191
|
-
## How Fluent Commerce Implements Relay
|
|
192
|
-
|
|
193
|
-
### Standard Query Pattern
|
|
194
|
-
|
|
195
|
-
Every pageable query in Fluent follows this pattern:
|
|
196
|
-
|
|
197
|
-
```graphql
|
|
198
|
-
query GetVirtualPositions($first: Int!, $after: String) {
|
|
199
|
-
virtualPositions(first: $first, after: $after) {
|
|
200
|
-
edges {
|
|
201
|
-
node {
|
|
202
|
-
# Actual data fields
|
|
203
|
-
id
|
|
204
|
-
productRef
|
|
205
|
-
quantity
|
|
206
|
-
}
|
|
207
|
-
cursor # Position marker
|
|
208
|
-
}
|
|
209
|
-
pageInfo {
|
|
210
|
-
hasNextPage # More pages available?
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
### Key Fluent Behaviors
|
|
217
|
-
|
|
218
|
-
#### 1. Cursor Format
|
|
219
|
-
|
|
220
|
-
Fluent uses **opaque base64-encoded cursors**:
|
|
221
|
-
|
|
222
|
-
```typescript
|
|
223
|
-
// Example cursor (base64 encoded position)
|
|
224
|
-
'Y3Vyc29yOjE2MzI0NTY3ODk=';
|
|
225
|
-
|
|
226
|
-
// ⚠️ NEVER manually parse or construct cursors!
|
|
227
|
-
// They're opaque strings managed by the API
|
|
228
|
-
```
|
|
229
|
-
|
|
230
|
-
#### 2. Edge-Based Cursors Only
|
|
231
|
-
|
|
232
|
-
Unlike full Relay spec, Fluent **does NOT return `startCursor`/`endCursor` in `pageInfo`**:
|
|
233
|
-
|
|
234
|
-
```typescript
|
|
235
|
-
// ❌ NOT available in Fluent
|
|
236
|
-
pageInfo {
|
|
237
|
-
startCursor // Not returned
|
|
238
|
-
endCursor // Not returned
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
// ✅ Use edge cursors instead
|
|
242
|
-
edges[0].cursor // First cursor
|
|
243
|
-
edges[edges.length-1].cursor // Last cursor
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
#### 3. Default Page Size
|
|
247
|
-
|
|
248
|
-
If `first` is omitted, Fluent defaults to **100 items per page**.
|
|
249
|
-
|
|
250
|
-
#### 4. Maximum Page Size
|
|
251
|
-
|
|
252
|
-
Fluent enforces a maximum of **250 items per page**:
|
|
253
|
-
|
|
254
|
-
```typescript
|
|
255
|
-
// ✅ Valid
|
|
256
|
-
{
|
|
257
|
-
first: 100;
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
// ✅ Valid (max allowed)
|
|
261
|
-
{
|
|
262
|
-
first: 250;
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
// ❌ Error: exceeds max page size
|
|
266
|
-
{
|
|
267
|
-
first: 500;
|
|
268
|
-
}
|
|
269
|
-
```
|
|
270
|
-
|
|
271
|
-
---
|
|
272
|
-
|
|
273
|
-
## Cursor-Based vs Offset-Based
|
|
274
|
-
|
|
275
|
-
### Offset-Based Pagination (Traditional)
|
|
276
|
-
|
|
277
|
-
```sql
|
|
278
|
-
-- Page 1
|
|
279
|
-
SELECT * FROM items LIMIT 100 OFFSET 0;
|
|
280
|
-
|
|
281
|
-
-- Page 2
|
|
282
|
-
SELECT * FROM items LIMIT 100 OFFSET 100;
|
|
283
|
-
|
|
284
|
-
-- Page 3
|
|
285
|
-
SELECT * FROM items LIMIT 100 OFFSET 200;
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
**Problems:**
|
|
289
|
-
|
|
290
|
-
- ❌ Slow for large offsets (must scan all skipped rows)
|
|
291
|
-
- ❌ Inconsistent results if data changes between pages
|
|
292
|
-
- ❌ Duplicate or missing items if items are added/deleted
|
|
293
|
-
|
|
294
|
-
### Cursor-Based Pagination (Relay)
|
|
295
|
-
|
|
296
|
-
```graphql
|
|
297
|
-
# Page 1
|
|
298
|
-
query {
|
|
299
|
-
items(first: 100) {
|
|
300
|
-
edges {
|
|
301
|
-
cursor
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
# Page 2 (using last cursor from page 1)
|
|
307
|
-
query {
|
|
308
|
-
items(first: 100, after: "cursor-100") {
|
|
309
|
-
edges {
|
|
310
|
-
cursor
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
# Page 3 (using last cursor from page 2)
|
|
316
|
-
query {
|
|
317
|
-
items(first: 100, after: "cursor-200") {
|
|
318
|
-
edges {
|
|
319
|
-
cursor
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
```
|
|
324
|
-
|
|
325
|
-
**Advantages:**
|
|
326
|
-
|
|
327
|
-
- ✅ Fast for any page (indexed cursor lookup)
|
|
328
|
-
- ✅ Consistent snapshots (cursor marks exact position)
|
|
329
|
-
- ✅ No duplicates or skipped items
|
|
330
|
-
- ✅ Stable across concurrent data changes
|
|
331
|
-
|
|
332
|
-
---
|
|
333
|
-
|
|
334
|
-
## Key Terminology
|
|
335
|
-
|
|
336
|
-
| Term | Definition | Example |
|
|
337
|
-
| ----------------------- | ---------------------------- | -------------------------------------- |
|
|
338
|
-
| **Connection** | Pageable collection of items | `virtualPositions` |
|
|
339
|
-
| **Edge** | Item wrapper with cursor | `{ node: {...}, cursor: "abc123" }` |
|
|
340
|
-
| **Node** | The actual data object | `{ id: "123", productRef: "SKU-001" }` |
|
|
341
|
-
| **Cursor** | Opaque position marker | `"Y3Vyc29yOjE2MzI0NTY3ODk="` |
|
|
342
|
-
| **PageInfo** | Pagination metadata | `{ hasNextPage: true }` |
|
|
343
|
-
| **Forward Pagination** | Using `first` and `after` | Most common pattern |
|
|
344
|
-
| **Backward Pagination** | Using `last` and `before` | Less common, reverse order |
|
|
345
|
-
| **Page Size** | Number of items per page | `first: 100` |
|
|
346
|
-
|
|
347
|
-
---
|
|
348
|
-
|
|
349
|
-
## How SDK Auto-Pagination Helps
|
|
350
|
-
|
|
351
|
-
Without the SDK, you'd need to write this manually:
|
|
352
|
-
|
|
353
|
-
```typescript
|
|
354
|
-
// Manual pagination (15-20 lines, error-prone)
|
|
355
|
-
let allRecords = [];
|
|
356
|
-
let hasMore = true;
|
|
357
|
-
let cursor = null;
|
|
358
|
-
|
|
359
|
-
while (hasMore) {
|
|
360
|
-
const result = await client.graphql({
|
|
361
|
-
query,
|
|
362
|
-
variables: { first: 100, after: cursor },
|
|
363
|
-
});
|
|
364
|
-
|
|
365
|
-
allRecords.push(...result.data.virtualPositions.edges);
|
|
366
|
-
|
|
367
|
-
const lastEdge =
|
|
368
|
-
result.data.virtualPositions.edges[result.data.virtualPositions.edges.length - 1];
|
|
369
|
-
cursor = lastEdge?.cursor;
|
|
370
|
-
hasMore = result.data.virtualPositions.pageInfo.hasNextPage;
|
|
371
|
-
|
|
372
|
-
// What about errors? Rate limits? Infinite loops? Memory?
|
|
373
|
-
if (allRecords.length > 10000) break; // Manual safety
|
|
374
|
-
}
|
|
375
|
-
```
|
|
376
|
-
|
|
377
|
-
With the SDK, it's just:
|
|
378
|
-
|
|
379
|
-
```typescript
|
|
380
|
-
// Auto-pagination (3 lines, built-in safety)
|
|
381
|
-
const result = await client.graphql({
|
|
382
|
-
query,
|
|
383
|
-
variables: { first: 100 },
|
|
384
|
-
pagination: { maxRecords: 10000 },
|
|
385
|
-
});
|
|
386
|
-
|
|
387
|
-
const allRecords = result.data.virtualPositions.edges;
|
|
388
|
-
```
|
|
389
|
-
|
|
390
|
-
The SDK handles:
|
|
391
|
-
|
|
392
|
-
- ✅ Cursor tracking and management
|
|
393
|
-
- ✅ Injects $first automatically when omitted and manages $after between pages
|
|
394
|
-
- ✅ Loop control and termination
|
|
395
|
-
- ✅ Error handling and retries
|
|
396
|
-
- ✅ Safety limits (pages, records, timeout)
|
|
397
|
-
- ✅ Deduplication (by node ID)
|
|
398
|
-
- ✅ Infinite loop protection
|
|
399
|
-
- ✅ Progress callbacks
|
|
400
|
-
- ✅ Memory-efficient merging
|
|
401
|
-
|
|
402
|
-
---
|
|
403
|
-
|
|
404
|
-
## Understanding the Flow
|
|
405
|
-
|
|
406
|
-
Here's what happens when you use auto-pagination:
|
|
407
|
-
|
|
408
|
-
```
|
|
409
|
-
1. SDK receives your query with pagination variables ($first, $after)
|
|
410
|
-
↓
|
|
411
|
-
2. SDK detects query is pageable (has pagination variables)
|
|
412
|
-
↓
|
|
413
|
-
3. SDK makes first request with your variables
|
|
414
|
-
↓
|
|
415
|
-
4. SDK checks response:
|
|
416
|
-
- Extracts edges and cursor
|
|
417
|
-
- Checks pageInfo.hasNextPage
|
|
418
|
-
- Checks safety limits (maxPages, maxRecords, timeout)
|
|
419
|
-
↓
|
|
420
|
-
5. If hasNextPage == true AND limits not reached:
|
|
421
|
-
- Extract last edge cursor
|
|
422
|
-
- Make next request with after: cursor
|
|
423
|
-
- Repeat step 4
|
|
424
|
-
↓
|
|
425
|
-
6. When done (hasNextPage == false OR limit reached):
|
|
426
|
-
- Merge all pages into single response
|
|
427
|
-
- Deduplicate nodes by ID
|
|
428
|
-
- Add metadata to response.extensions.autoPagination
|
|
429
|
-
- Return complete result
|
|
430
|
-
```
|
|
431
|
-
|
|
432
|
-
---
|
|
433
|
-
|
|
434
|
-
## Quick Comparison
|
|
435
|
-
|
|
436
|
-
| Feature | Manual Pagination | SDK Auto-Pagination |
|
|
437
|
-
| ---------------------------- | ------------------------- | ------------------- |
|
|
438
|
-
| **Code Lines** | 15-20 lines | 3 lines |
|
|
439
|
-
| **Cursor Management** | Manual tracking | Automatic |
|
|
440
|
-
| **Error Handling** | Manual try-catch per page | Built-in fail-fast |
|
|
441
|
-
| **Safety Limits** | Manual break conditions | Built-in OR-logic |
|
|
442
|
-
| **Deduplication** | Manual Set management | Automatic by ID |
|
|
443
|
-
| **Progress Tracking** | Manual logging | Built-in callbacks |
|
|
444
|
-
| **Infinite Loop Protection** | Manual cursor checking | Automatic |
|
|
445
|
-
| **Memory Management** | Manual chunking | Built-in limits |
|
|
446
|
-
|
|
447
|
-
---
|
|
448
|
-
|
|
449
|
-
## Next Steps
|
|
450
|
-
|
|
451
|
-
Now that you understand the foundations, you're ready to write your first auto-paginated query!
|
|
452
|
-
|
|
453
|
-
**Continue to:** [Module 2: Quick Start →](./auto-pagination-02-quick-start.md)
|
|
454
|
-
|
|
455
|
-
Or explore:
|
|
456
|
-
|
|
457
|
-
- [Module 3: Configuration](./auto-pagination-03-configuration.md) - Deep dive into config options
|
|
458
|
-
- [Examples](../examples/) - See working code samples
|
|
459
|
-
|
|
460
|
-
---
|
|
461
|
-
|
|
462
|
-
## Additional Resources
|
|
463
|
-
|
|
464
|
-
- [Relay Cursor Connections Spec](https://relay.dev/graphql/connections.htm) - Official specification
|
|
465
|
-
- [GraphQL Pagination Best Practices](https://graphql.org/learn/pagination/) - GraphQL.org guide
|
|
466
|
-
- [Fluent API Documentation](https://docs.fluentcommerce.com/) - Official Fluent docs
|
|
467
|
-
|
|
468
|
-
---
|
|
469
|
-
|
|
470
|
-
[← Back to Index](../../advanced-services/advanced-services-readme.md) | [Next: Quick Start →](./auto-pagination-02-quick-start.md)
|
|
1
|
+
# Module 1: Foundations
|
|
2
|
+
|
|
3
|
+
> **Learning Objective:** Understand why pagination is essential, how Relay-style pagination works, and how Fluent Commerce implements it.
|
|
4
|
+
>
|
|
5
|
+
> **Level:** Beginner
|
|
6
|
+
|
|
7
|
+
## Table of Contents
|
|
8
|
+
|
|
9
|
+
1. [Why Pagination Matters](#why-pagination-matters)
|
|
10
|
+
2. [The Problem Without Pagination](#the-problem-without-pagination)
|
|
11
|
+
3. [The Relay Connection Specification](#the-relay-connection-specification)
|
|
12
|
+
4. [How Fluent Commerce Implements Relay](#how-fluent-commerce-implements-relay)
|
|
13
|
+
5. [Cursor-Based vs Offset-Based](#cursor-based-vs-offset-based)
|
|
14
|
+
6. [Key Terminology](#key-terminology)
|
|
15
|
+
7. [Next Steps](#next-steps)
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Why Pagination Matters
|
|
20
|
+
|
|
21
|
+
Fluent Commerce APIs can return thousands or even millions of records:
|
|
22
|
+
|
|
23
|
+
- **Inventory positions**: 50,000+ SKU locations across warehouses
|
|
24
|
+
- **Orders**: 100,000+ orders per day for large retailers
|
|
25
|
+
- **Products**: 250,000+ product catalog with variants
|
|
26
|
+
- **Fulfillment events**: Millions of historical events
|
|
27
|
+
|
|
28
|
+
Without pagination, fetching large datasets causes:
|
|
29
|
+
|
|
30
|
+
### ❌ Performance Problems
|
|
31
|
+
|
|
32
|
+
| Issue | Impact | Example |
|
|
33
|
+
| --------------------- | --------------------------------- | --------------------------------- |
|
|
34
|
+
| **API Timeouts** | Requests fail after 30-60 seconds | Query for 50K positions times out |
|
|
35
|
+
| **Memory Exhaustion** | Node.js/Deno runs out of memory | 100K orders = OOM crash |
|
|
36
|
+
| **Slow Responses** | Minutes to return data | 5+ minutes for product catalog |
|
|
37
|
+
| **Network Overhead** | Multi-MB responses over the wire | 10MB JSON response blocks network |
|
|
38
|
+
|
|
39
|
+
### ✅ With Pagination
|
|
40
|
+
|
|
41
|
+
| Benefit | Result |
|
|
42
|
+
| ----------------------- | ---------------------------------- |
|
|
43
|
+
| **Fast Response Times** | Each page returns in <1 second |
|
|
44
|
+
| **Memory Efficient** | Process data in manageable chunks |
|
|
45
|
+
| **Fault Tolerant** | Resume from last cursor on failure |
|
|
46
|
+
| **Rate Limit Friendly** | Spread requests over time |
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## The Problem Without Pagination
|
|
51
|
+
|
|
52
|
+
### Real-World Scenario
|
|
53
|
+
|
|
54
|
+
Imagine fetching all virtual positions (inventory) for a large retailer:
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
// ❌ WRONG: Attempting to fetch everything at once
|
|
58
|
+
const result = await client.graphql({
|
|
59
|
+
query: `
|
|
60
|
+
query GetAllPositions {
|
|
61
|
+
virtualPositions {
|
|
62
|
+
edges {
|
|
63
|
+
node {
|
|
64
|
+
id
|
|
65
|
+
productRef
|
|
66
|
+
quantity
|
|
67
|
+
groupRef
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
`,
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
// What happens?
|
|
76
|
+
// 1. API attempts to load 50,000+ positions into memory
|
|
77
|
+
// 2. Query takes 3+ minutes to execute
|
|
78
|
+
// 3. Returns 15MB JSON response
|
|
79
|
+
// 4. Likely times out or crashes with OOM error
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Consequences
|
|
83
|
+
|
|
84
|
+
1. **Database Load**: Single query scans entire table
|
|
85
|
+
2. **API Server Strain**: Serializing huge JSON response
|
|
86
|
+
3. **Network Bandwidth**: Transferring multi-MB payload
|
|
87
|
+
4. **Client Memory**: Deserializing and storing all records
|
|
88
|
+
5. **User Experience**: Long wait times, failed requests
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## The Relay Connection Specification
|
|
93
|
+
|
|
94
|
+
Fluent Commerce follows the **[Relay Cursor Connections Specification](https://relay.dev/graphql/connections.htm)**, a GraphQL best practice for pagination.
|
|
95
|
+
|
|
96
|
+
### Core Concepts
|
|
97
|
+
|
|
98
|
+
#### 1. Connection Object
|
|
99
|
+
|
|
100
|
+
A "connection" is a pageable collection with metadata:
|
|
101
|
+
|
|
102
|
+
```graphql
|
|
103
|
+
type VirtualPositionConnection {
|
|
104
|
+
edges: [VirtualPositionEdge!]! # Array of items with cursors
|
|
105
|
+
pageInfo: PageInfo! # Pagination metadata
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
#### 2. Edge Object
|
|
110
|
+
|
|
111
|
+
An "edge" wraps each item with a cursor (position marker):
|
|
112
|
+
|
|
113
|
+
```graphql
|
|
114
|
+
type VirtualPositionEdge {
|
|
115
|
+
node: VirtualPosition! # The actual data
|
|
116
|
+
cursor: String! # Opaque position marker
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
#### 3. PageInfo Object
|
|
121
|
+
|
|
122
|
+
Metadata about pagination state:
|
|
123
|
+
|
|
124
|
+
```graphql
|
|
125
|
+
type PageInfo {
|
|
126
|
+
hasNextPage: Boolean! # More data available forward?
|
|
127
|
+
hasPreviousPage: Boolean! # More data available backward?
|
|
128
|
+
# NOTE: Fluent Commerce does NOT return startCursor/endCursor in pageInfo
|
|
129
|
+
# Cursors are in edges[].cursor instead (edge-based cursors)
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**Fluent Commerce Implementation Note:**
|
|
134
|
+
Unlike the full Relay spec, Fluent uses **edge-based cursors only**. The SDK extracts cursors from `edges[].cursor`, not from `pageInfo.startCursor`/`endCursor`.
|
|
135
|
+
|
|
136
|
+
#### 4. Pagination Arguments
|
|
137
|
+
|
|
138
|
+
Arguments for requesting pages:
|
|
139
|
+
|
|
140
|
+
```graphql
|
|
141
|
+
virtualPositions(
|
|
142
|
+
first: Int # Forward pagination: fetch N items
|
|
143
|
+
after: String # Start after this cursor
|
|
144
|
+
last: Int # Backward pagination: fetch last N items
|
|
145
|
+
before: String # Start before this cursor
|
|
146
|
+
): VirtualPositionConnection
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Visual Representation
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
Full Dataset: [Item1, Item2, Item3, Item4, Item5, Item6, Item7, Item8, Item9, Item10]
|
|
153
|
+
↓
|
|
154
|
+
┌─────────────────────┐
|
|
155
|
+
Page 1 │ first: 3 │
|
|
156
|
+
│ after: null │
|
|
157
|
+
└─────────────────────┘
|
|
158
|
+
Returns: [Item1, Item2, Item3]
|
|
159
|
+
edges[2].cursor: "cursor-3" (last edge)
|
|
160
|
+
hasNextPage: true
|
|
161
|
+
↓
|
|
162
|
+
┌─────────────────────┐
|
|
163
|
+
Page 2 │ first: 3 │
|
|
164
|
+
│ after: "cursor-3" │
|
|
165
|
+
└─────────────────────┘
|
|
166
|
+
Returns: [Item4, Item5, Item6]
|
|
167
|
+
edges[2].cursor: "cursor-6" (last edge)
|
|
168
|
+
hasNextPage: true
|
|
169
|
+
↓
|
|
170
|
+
┌─────────────────────┐
|
|
171
|
+
Page 3 │ first: 3 │
|
|
172
|
+
│ after: "cursor-6" │
|
|
173
|
+
└─────────────────────┘
|
|
174
|
+
Returns: [Item7, Item8, Item9]
|
|
175
|
+
edges[2].cursor: "cursor-9" (last edge)
|
|
176
|
+
hasNextPage: true
|
|
177
|
+
↓
|
|
178
|
+
┌─────────────────────┐
|
|
179
|
+
Page 4 │ first: 3 │
|
|
180
|
+
│ after: "cursor-9" │
|
|
181
|
+
└─────────────────────┘
|
|
182
|
+
Returns: [Item10]
|
|
183
|
+
edges[0].cursor: "cursor-10" (last edge)
|
|
184
|
+
hasNextPage: false ← No more pages!
|
|
185
|
+
|
|
186
|
+
**Note:** Cursors come from edges[].cursor (Fluent uses edge-based cursors)
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## How Fluent Commerce Implements Relay
|
|
192
|
+
|
|
193
|
+
### Standard Query Pattern
|
|
194
|
+
|
|
195
|
+
Every pageable query in Fluent follows this pattern:
|
|
196
|
+
|
|
197
|
+
```graphql
|
|
198
|
+
query GetVirtualPositions($first: Int!, $after: String) {
|
|
199
|
+
virtualPositions(first: $first, after: $after) {
|
|
200
|
+
edges {
|
|
201
|
+
node {
|
|
202
|
+
# Actual data fields
|
|
203
|
+
id
|
|
204
|
+
productRef
|
|
205
|
+
quantity
|
|
206
|
+
}
|
|
207
|
+
cursor # Position marker
|
|
208
|
+
}
|
|
209
|
+
pageInfo {
|
|
210
|
+
hasNextPage # More pages available?
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Key Fluent Behaviors
|
|
217
|
+
|
|
218
|
+
#### 1. Cursor Format
|
|
219
|
+
|
|
220
|
+
Fluent uses **opaque base64-encoded cursors**:
|
|
221
|
+
|
|
222
|
+
```typescript
|
|
223
|
+
// Example cursor (base64 encoded position)
|
|
224
|
+
'Y3Vyc29yOjE2MzI0NTY3ODk=';
|
|
225
|
+
|
|
226
|
+
// ⚠️ NEVER manually parse or construct cursors!
|
|
227
|
+
// They're opaque strings managed by the API
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
#### 2. Edge-Based Cursors Only
|
|
231
|
+
|
|
232
|
+
Unlike full Relay spec, Fluent **does NOT return `startCursor`/`endCursor` in `pageInfo`**:
|
|
233
|
+
|
|
234
|
+
```typescript
|
|
235
|
+
// ❌ NOT available in Fluent
|
|
236
|
+
pageInfo {
|
|
237
|
+
startCursor // Not returned
|
|
238
|
+
endCursor // Not returned
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
// ✅ Use edge cursors instead
|
|
242
|
+
edges[0].cursor // First cursor
|
|
243
|
+
edges[edges.length-1].cursor // Last cursor
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
#### 3. Default Page Size
|
|
247
|
+
|
|
248
|
+
If `first` is omitted, Fluent defaults to **100 items per page**.
|
|
249
|
+
|
|
250
|
+
#### 4. Maximum Page Size
|
|
251
|
+
|
|
252
|
+
Fluent enforces a maximum of **250 items per page**:
|
|
253
|
+
|
|
254
|
+
```typescript
|
|
255
|
+
// ✅ Valid
|
|
256
|
+
{
|
|
257
|
+
first: 100;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// ✅ Valid (max allowed)
|
|
261
|
+
{
|
|
262
|
+
first: 250;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// ❌ Error: exceeds max page size
|
|
266
|
+
{
|
|
267
|
+
first: 500;
|
|
268
|
+
}
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## Cursor-Based vs Offset-Based
|
|
274
|
+
|
|
275
|
+
### Offset-Based Pagination (Traditional)
|
|
276
|
+
|
|
277
|
+
```sql
|
|
278
|
+
-- Page 1
|
|
279
|
+
SELECT * FROM items LIMIT 100 OFFSET 0;
|
|
280
|
+
|
|
281
|
+
-- Page 2
|
|
282
|
+
SELECT * FROM items LIMIT 100 OFFSET 100;
|
|
283
|
+
|
|
284
|
+
-- Page 3
|
|
285
|
+
SELECT * FROM items LIMIT 100 OFFSET 200;
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
**Problems:**
|
|
289
|
+
|
|
290
|
+
- ❌ Slow for large offsets (must scan all skipped rows)
|
|
291
|
+
- ❌ Inconsistent results if data changes between pages
|
|
292
|
+
- ❌ Duplicate or missing items if items are added/deleted
|
|
293
|
+
|
|
294
|
+
### Cursor-Based Pagination (Relay)
|
|
295
|
+
|
|
296
|
+
```graphql
|
|
297
|
+
# Page 1
|
|
298
|
+
query {
|
|
299
|
+
items(first: 100) {
|
|
300
|
+
edges {
|
|
301
|
+
cursor
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
# Page 2 (using last cursor from page 1)
|
|
307
|
+
query {
|
|
308
|
+
items(first: 100, after: "cursor-100") {
|
|
309
|
+
edges {
|
|
310
|
+
cursor
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
# Page 3 (using last cursor from page 2)
|
|
316
|
+
query {
|
|
317
|
+
items(first: 100, after: "cursor-200") {
|
|
318
|
+
edges {
|
|
319
|
+
cursor
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
**Advantages:**
|
|
326
|
+
|
|
327
|
+
- ✅ Fast for any page (indexed cursor lookup)
|
|
328
|
+
- ✅ Consistent snapshots (cursor marks exact position)
|
|
329
|
+
- ✅ No duplicates or skipped items
|
|
330
|
+
- ✅ Stable across concurrent data changes
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## Key Terminology
|
|
335
|
+
|
|
336
|
+
| Term | Definition | Example |
|
|
337
|
+
| ----------------------- | ---------------------------- | -------------------------------------- |
|
|
338
|
+
| **Connection** | Pageable collection of items | `virtualPositions` |
|
|
339
|
+
| **Edge** | Item wrapper with cursor | `{ node: {...}, cursor: "abc123" }` |
|
|
340
|
+
| **Node** | The actual data object | `{ id: "123", productRef: "SKU-001" }` |
|
|
341
|
+
| **Cursor** | Opaque position marker | `"Y3Vyc29yOjE2MzI0NTY3ODk="` |
|
|
342
|
+
| **PageInfo** | Pagination metadata | `{ hasNextPage: true }` |
|
|
343
|
+
| **Forward Pagination** | Using `first` and `after` | Most common pattern |
|
|
344
|
+
| **Backward Pagination** | Using `last` and `before` | Less common, reverse order |
|
|
345
|
+
| **Page Size** | Number of items per page | `first: 100` |
|
|
346
|
+
|
|
347
|
+
---
|
|
348
|
+
|
|
349
|
+
## How SDK Auto-Pagination Helps
|
|
350
|
+
|
|
351
|
+
Without the SDK, you'd need to write this manually:
|
|
352
|
+
|
|
353
|
+
```typescript
|
|
354
|
+
// Manual pagination (15-20 lines, error-prone)
|
|
355
|
+
let allRecords = [];
|
|
356
|
+
let hasMore = true;
|
|
357
|
+
let cursor = null;
|
|
358
|
+
|
|
359
|
+
while (hasMore) {
|
|
360
|
+
const result = await client.graphql({
|
|
361
|
+
query,
|
|
362
|
+
variables: { first: 100, after: cursor },
|
|
363
|
+
});
|
|
364
|
+
|
|
365
|
+
allRecords.push(...result.data.virtualPositions.edges);
|
|
366
|
+
|
|
367
|
+
const lastEdge =
|
|
368
|
+
result.data.virtualPositions.edges[result.data.virtualPositions.edges.length - 1];
|
|
369
|
+
cursor = lastEdge?.cursor;
|
|
370
|
+
hasMore = result.data.virtualPositions.pageInfo.hasNextPage;
|
|
371
|
+
|
|
372
|
+
// What about errors? Rate limits? Infinite loops? Memory?
|
|
373
|
+
if (allRecords.length > 10000) break; // Manual safety
|
|
374
|
+
}
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
With the SDK, it's just:
|
|
378
|
+
|
|
379
|
+
```typescript
|
|
380
|
+
// Auto-pagination (3 lines, built-in safety)
|
|
381
|
+
const result = await client.graphql({
|
|
382
|
+
query,
|
|
383
|
+
variables: { first: 100 },
|
|
384
|
+
pagination: { maxRecords: 10000 },
|
|
385
|
+
});
|
|
386
|
+
|
|
387
|
+
const allRecords = result.data.virtualPositions.edges;
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
The SDK handles:
|
|
391
|
+
|
|
392
|
+
- ✅ Cursor tracking and management
|
|
393
|
+
- ✅ Injects $first automatically when omitted and manages $after between pages
|
|
394
|
+
- ✅ Loop control and termination
|
|
395
|
+
- ✅ Error handling and retries
|
|
396
|
+
- ✅ Safety limits (pages, records, timeout)
|
|
397
|
+
- ✅ Deduplication (by node ID)
|
|
398
|
+
- ✅ Infinite loop protection
|
|
399
|
+
- ✅ Progress callbacks
|
|
400
|
+
- ✅ Memory-efficient merging
|
|
401
|
+
|
|
402
|
+
---
|
|
403
|
+
|
|
404
|
+
## Understanding the Flow
|
|
405
|
+
|
|
406
|
+
Here's what happens when you use auto-pagination:
|
|
407
|
+
|
|
408
|
+
```
|
|
409
|
+
1. SDK receives your query with pagination variables ($first, $after)
|
|
410
|
+
↓
|
|
411
|
+
2. SDK detects query is pageable (has pagination variables)
|
|
412
|
+
↓
|
|
413
|
+
3. SDK makes first request with your variables
|
|
414
|
+
↓
|
|
415
|
+
4. SDK checks response:
|
|
416
|
+
- Extracts edges and cursor
|
|
417
|
+
- Checks pageInfo.hasNextPage
|
|
418
|
+
- Checks safety limits (maxPages, maxRecords, timeout)
|
|
419
|
+
↓
|
|
420
|
+
5. If hasNextPage == true AND limits not reached:
|
|
421
|
+
- Extract last edge cursor
|
|
422
|
+
- Make next request with after: cursor
|
|
423
|
+
- Repeat step 4
|
|
424
|
+
↓
|
|
425
|
+
6. When done (hasNextPage == false OR limit reached):
|
|
426
|
+
- Merge all pages into single response
|
|
427
|
+
- Deduplicate nodes by ID
|
|
428
|
+
- Add metadata to response.extensions.autoPagination
|
|
429
|
+
- Return complete result
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
---
|
|
433
|
+
|
|
434
|
+
## Quick Comparison
|
|
435
|
+
|
|
436
|
+
| Feature | Manual Pagination | SDK Auto-Pagination |
|
|
437
|
+
| ---------------------------- | ------------------------- | ------------------- |
|
|
438
|
+
| **Code Lines** | 15-20 lines | 3 lines |
|
|
439
|
+
| **Cursor Management** | Manual tracking | Automatic |
|
|
440
|
+
| **Error Handling** | Manual try-catch per page | Built-in fail-fast |
|
|
441
|
+
| **Safety Limits** | Manual break conditions | Built-in OR-logic |
|
|
442
|
+
| **Deduplication** | Manual Set management | Automatic by ID |
|
|
443
|
+
| **Progress Tracking** | Manual logging | Built-in callbacks |
|
|
444
|
+
| **Infinite Loop Protection** | Manual cursor checking | Automatic |
|
|
445
|
+
| **Memory Management** | Manual chunking | Built-in limits |
|
|
446
|
+
|
|
447
|
+
---
|
|
448
|
+
|
|
449
|
+
## Next Steps
|
|
450
|
+
|
|
451
|
+
Now that you understand the foundations, you're ready to write your first auto-paginated query!
|
|
452
|
+
|
|
453
|
+
**Continue to:** [Module 2: Quick Start →](./auto-pagination-02-quick-start.md)
|
|
454
|
+
|
|
455
|
+
Or explore:
|
|
456
|
+
|
|
457
|
+
- [Module 3: Configuration](./auto-pagination-03-configuration.md) - Deep dive into config options
|
|
458
|
+
- [Examples](../examples/) - See working code samples
|
|
459
|
+
|
|
460
|
+
---
|
|
461
|
+
|
|
462
|
+
## Additional Resources
|
|
463
|
+
|
|
464
|
+
- [Relay Cursor Connections Spec](https://relay.dev/graphql/connections.htm) - Official specification
|
|
465
|
+
- [GraphQL Pagination Best Practices](https://graphql.org/learn/pagination/) - GraphQL.org guide
|
|
466
|
+
- [Fluent API Documentation](https://docs.fluentcommerce.com/) - Official Fluent docs
|
|
467
|
+
|
|
468
|
+
---
|
|
469
|
+
|
|
470
|
+
[← Back to Index](../../advanced-services/advanced-services-readme.md) | [Next: Quick Start →](./auto-pagination-02-quick-start.md)
|