@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,713 +1,713 @@
|
|
|
1
|
-
# Module 2: Quick Start
|
|
2
|
-
|
|
3
|
-
> **Learning Objective:** Write and run your first auto-paginated query using real Fluent schema fields.
|
|
4
|
-
>
|
|
5
|
-
> **Level:** Beginner
|
|
6
|
-
|
|
7
|
-
## Table of Contents
|
|
8
|
-
|
|
9
|
-
1. [Prerequisites](#prerequisites)
|
|
10
|
-
2. [Step 1: Discover Schema Fields](#step-1-discover-schema-fields)
|
|
11
|
-
3. [Step 2: Your First Auto-Paginated Query](#step-2-your-first-auto-paginated-query)
|
|
12
|
-
4. [Step 3: Understanding the Response](#step-3-understanding-the-response)
|
|
13
|
-
5. [Step 4: Add Safety Limits](#step-4-add-safety-limits)
|
|
14
|
-
6. [Common Mistakes to Avoid](#common-mistakes-to-avoid)
|
|
15
|
-
7. [Next Steps](#next-steps)
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
## Prerequisites
|
|
20
|
-
|
|
21
|
-
Before starting, ensure you have:
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
# 1. SDK installed
|
|
25
|
-
npm install @fluentcommerce/fc-connect-sdk
|
|
26
|
-
|
|
27
|
-
# 2. Environment variables set (.env file)
|
|
28
|
-
FLUENT_BASE_URL=https://your-account.api.fluentretail.com
|
|
29
|
-
FLUENT_CLIENT_ID=your-client-id
|
|
30
|
-
FLUENT_CLIENT_SECRET=your-client-secret
|
|
31
|
-
FLUENT_RETAILER_ID=your-retailer-id
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
---
|
|
35
|
-
|
|
36
|
-
## Step 1: Discover Schema Fields
|
|
37
|
-
|
|
38
|
-
**ā ļø CRITICAL:** Never guess field names! Always introspect the schema first to discover available fields.
|
|
39
|
-
|
|
40
|
-
### Option A: Use SDK CLI Tool (Recommended)
|
|
41
|
-
|
|
42
|
-
```bash
|
|
43
|
-
npx fc-connect introspect-schema \
|
|
44
|
-
--endpoint https://your-account.api.fluentretail.com/graphql \
|
|
45
|
-
--client-id your-client-id \
|
|
46
|
-
--client-secret your-client-secret \
|
|
47
|
-
--output schema.json
|
|
48
|
-
|
|
49
|
-
# Output: schema.json with all types, fields, and descriptions
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### Option B: Use GraphQL Playground
|
|
53
|
-
|
|
54
|
-
1. Navigate to your Fluent GraphQL endpoint in browser
|
|
55
|
-
2. Open "Docs" sidebar
|
|
56
|
-
3. Search for entity (e.g., `VirtualPosition`)
|
|
57
|
-
4. View available fields and their types
|
|
58
|
-
|
|
59
|
-
### Real Schema Example: VirtualPosition
|
|
60
|
-
|
|
61
|
-
Based on actual Fluent Commerce schema introspection:
|
|
62
|
-
|
|
63
|
-
```typescript
|
|
64
|
-
// ā
REAL FIELDS (from schema.json)
|
|
65
|
-
type VirtualPosition {
|
|
66
|
-
id: ID!
|
|
67
|
-
ref: String!
|
|
68
|
-
productRef: String
|
|
69
|
-
quantity: Int
|
|
70
|
-
groupRef: String
|
|
71
|
-
status: String
|
|
72
|
-
type: String
|
|
73
|
-
createdOn: DateTime
|
|
74
|
-
updatedOn: DateTime
|
|
75
|
-
catalogue: VirtualCatalogue
|
|
76
|
-
attributes: [Attribute]
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// ā DON'T GUESS FIELDS LIKE:
|
|
80
|
-
// name, title, description - these DON'T exist on VirtualPosition!
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
---
|
|
84
|
-
|
|
85
|
-
## Step 2: Your First Auto-Paginated Query
|
|
86
|
-
|
|
87
|
-
Create a file `paginate-inventory.ts`:
|
|
88
|
-
|
|
89
|
-
```typescript
|
|
90
|
-
/**
|
|
91
|
-
* Example: Fetch all virtual positions (inventory) with auto-pagination
|
|
92
|
-
* Uses REAL schema fields verified via introspection
|
|
93
|
-
*/
|
|
94
|
-
|
|
95
|
-
import { createClient } from '@fluentcommerce/fc-connect-sdk';
|
|
96
|
-
import * as dotenv from 'dotenv';
|
|
97
|
-
|
|
98
|
-
// Load environment variables
|
|
99
|
-
dotenv.config();
|
|
100
|
-
|
|
101
|
-
async function paginateInventory() {
|
|
102
|
-
// Create client (auto-detects Node.js/Deno/Versori context)
|
|
103
|
-
const client = await createClient({
|
|
104
|
-
config: {
|
|
105
|
-
baseUrl: process.env.FLUENT_BASE_URL!,
|
|
106
|
-
clientId: process.env.FLUENT_CLIENT_ID!,
|
|
107
|
-
clientSecret: process.env.FLUENT_CLIENT_SECRET!,
|
|
108
|
-
retailerId: process.env.FLUENT_RETAILER_ID!,
|
|
109
|
-
},
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
console.log('Starting inventory pagination...\n');
|
|
113
|
-
|
|
114
|
-
// ā
Query using REAL schema fields
|
|
115
|
-
const result = await client.graphql({
|
|
116
|
-
query: `
|
|
117
|
-
query GetVirtualPositions($first: Int!, $after: String) {
|
|
118
|
-
virtualPositions(first: $first, after: $after) {
|
|
119
|
-
edges {
|
|
120
|
-
node {
|
|
121
|
-
id
|
|
122
|
-
ref # Real field ā - Business reference (required)
|
|
123
|
-
productRef # Real field ā
|
|
124
|
-
quantity # Real field ā
|
|
125
|
-
groupRef # Real field ā
|
|
126
|
-
status # Real field ā
|
|
127
|
-
}
|
|
128
|
-
cursor
|
|
129
|
-
}
|
|
130
|
-
pageInfo {
|
|
131
|
-
hasNextPage
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
`,
|
|
136
|
-
variables: {
|
|
137
|
-
first: 100, // Page size: 100 records per page
|
|
138
|
-
},
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
// Auto-pagination automatically fetches ALL pages and merges them!
|
|
142
|
-
const positions = result.data.virtualPositions.edges;
|
|
143
|
-
const metadata = result.extensions.autoPagination;
|
|
144
|
-
|
|
145
|
-
// Display results
|
|
146
|
-
console.log('ā
Pagination Complete!\n');
|
|
147
|
-
console.log(`Total Records: ${metadata.totalRecords}`);
|
|
148
|
-
console.log(`Total Pages: ${metadata.totalPages}`);
|
|
149
|
-
console.log(`Truncated: ${metadata.truncated}`);
|
|
150
|
-
if (metadata.truncated) {
|
|
151
|
-
console.log(`Truncation Reason: ${metadata.truncationReason}\n`);
|
|
152
|
-
} else {
|
|
153
|
-
console.log('');
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
// Process first 5 records
|
|
157
|
-
console.log('Sample Records:');
|
|
158
|
-
positions.slice(0, 5).forEach((edge, index) => {
|
|
159
|
-
const { id, productRef, quantity, groupRef, status } = edge.node;
|
|
160
|
-
console.log(
|
|
161
|
-
`${index + 1}. Product ${productRef}: ${quantity} units at ${groupRef} (${status})`
|
|
162
|
-
);
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
// Run the pagination
|
|
167
|
-
paginateInventory()
|
|
168
|
-
.then(() => console.log('\nā
Done!'))
|
|
169
|
-
.catch(error => {
|
|
170
|
-
console.error('ā Error:', error.message);
|
|
171
|
-
process.exit(1);
|
|
172
|
-
});
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
### Run It
|
|
176
|
-
|
|
177
|
-
```bash
|
|
178
|
-
# Using ts-node
|
|
179
|
-
npx ts-node paginate-inventory.ts
|
|
180
|
-
|
|
181
|
-
# Or compile and run
|
|
182
|
-
npx tsc paginate-inventory.ts
|
|
183
|
-
node paginate-inventory.js
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
### Expected Output
|
|
187
|
-
|
|
188
|
-
```
|
|
189
|
-
Starting inventory pagination...
|
|
190
|
-
|
|
191
|
-
ā
Pagination Complete!
|
|
192
|
-
|
|
193
|
-
Total Records: 1487
|
|
194
|
-
Total Pages: 15
|
|
195
|
-
Truncated: false
|
|
196
|
-
|
|
197
|
-
Sample Records:
|
|
198
|
-
1. Product SKU-001: 150 units at WH-EAST (ACTIVE)
|
|
199
|
-
2. Product SKU-002: 75 units at WH-WEST (ACTIVE)
|
|
200
|
-
3. Product SKU-003: 200 units at WH-CENTRAL (ACTIVE)
|
|
201
|
-
4. Product SKU-004: 0 units at WH-EAST (DEPLETED)
|
|
202
|
-
5. Product SKU-005: 450 units at WH-WEST (ACTIVE)
|
|
203
|
-
|
|
204
|
-
ā
Done!
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
---
|
|
208
|
-
|
|
209
|
-
## Step 3: Understanding the Response
|
|
210
|
-
|
|
211
|
-
### Response Structure
|
|
212
|
-
|
|
213
|
-
```typescript
|
|
214
|
-
{
|
|
215
|
-
data: {
|
|
216
|
-
virtualPositions: {
|
|
217
|
-
edges: [
|
|
218
|
-
{
|
|
219
|
-
node: {
|
|
220
|
-
id: "1234",
|
|
221
|
-
productRef: "SKU-001",
|
|
222
|
-
quantity: 150,
|
|
223
|
-
groupRef: "WH-EAST",
|
|
224
|
-
status: "ACTIVE"
|
|
225
|
-
},
|
|
226
|
-
cursor: "Y3Vyc29yOjE=" // Opaque cursor
|
|
227
|
-
},
|
|
228
|
-
// ... all pages merged here automatically!
|
|
229
|
-
],
|
|
230
|
-
pageInfo: {
|
|
231
|
-
hasNextPage: false // For forward pagination, false at end
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
},
|
|
235
|
-
extensions: {
|
|
236
|
-
autoPagination: {
|
|
237
|
-
totalPages: 15, // SDK made 15 requests
|
|
238
|
-
totalRecords: 1487, // Total items across all pages
|
|
239
|
-
truncated: false, // false = fetched everything
|
|
240
|
-
truncationReason: undefined, // "maxPages" | "maxRecords" | "timeout" if truncated
|
|
241
|
-
direction: "forward" // Pagination direction used
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
// Note: duration/timeElapsed NOT included - calculate using Date.now() if needed
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
### Key Points
|
|
250
|
-
|
|
251
|
-
1. **All Pages Merged**: `edges` array contains items from ALL pages
|
|
252
|
-
2. **Deduplication**: SDK automatically removes duplicates by node.id
|
|
253
|
-
3. **Metadata**: `extensions.autoPagination` provides pagination stats
|
|
254
|
-
4. **hasNextPage**: Always `false` at the end (SDK fetched everything)
|
|
255
|
-
|
|
256
|
-
---
|
|
257
|
-
|
|
258
|
-
## Step 4: Add Safety Limits
|
|
259
|
-
|
|
260
|
-
**ā ļø IMPORTANT:** Always set safety limits to prevent runaway queries!
|
|
261
|
-
|
|
262
|
-
```typescript
|
|
263
|
-
const result = await client.graphql({
|
|
264
|
-
query: virtualPositionsQuery,
|
|
265
|
-
variables: { first: 100 },
|
|
266
|
-
|
|
267
|
-
// Safety limits (OR-logic: first limit reached stops pagination)
|
|
268
|
-
pagination: {
|
|
269
|
-
maxPages: 50, // Stop after 50 pages
|
|
270
|
-
maxRecords: 5000, // OR stop after 5000 records
|
|
271
|
-
timeoutMs: 60000, // OR stop after 60 seconds
|
|
272
|
-
},
|
|
273
|
-
});
|
|
274
|
-
|
|
275
|
-
// Check if truncated
|
|
276
|
-
if (result.extensions.autoPagination.truncated) {
|
|
277
|
-
console.warn('ā ļø Results truncated!');
|
|
278
|
-
console.warn(`Reason: ${result.extensions.autoPagination.truncationReason}`);
|
|
279
|
-
// Possible reasons: "maxPages" | "maxRecords" | "timeout"
|
|
280
|
-
}
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
### Recommended Safety Limits by Use Case
|
|
284
|
-
|
|
285
|
-
| Use Case | maxPages | maxRecords | timeoutMs | Rationale |
|
|
286
|
-
| ----------------------- | -------- | ---------- | --------- | ---------------------------------- |
|
|
287
|
-
| **Testing/Development** | 5 | 500 | 10000 | Fast feedback, avoid large pulls |
|
|
288
|
-
| **Production Export** | 100 | 10000 | 300000 | Conservative limits for safety |
|
|
289
|
-
| **Background Job** | 500 | 50000 | 600000 | Higher limits for batch processing |
|
|
290
|
-
| **Real-Time API** | 10 | 1000 | 5000 | Fast response for user-facing APIs |
|
|
291
|
-
|
|
292
|
-
---
|
|
293
|
-
|
|
294
|
-
## Common Mistakes to Avoid
|
|
295
|
-
|
|
296
|
-
### ā Mistake 1: Guessing Field Names
|
|
297
|
-
|
|
298
|
-
```typescript
|
|
299
|
-
// ā WRONG: Guessing fields that don't exist
|
|
300
|
-
query GetOrders($first: Int!, $after: String) {
|
|
301
|
-
orders(first: $first, after: $after) {
|
|
302
|
-
edges {
|
|
303
|
-
node {
|
|
304
|
-
id
|
|
305
|
-
name # ā Orders don't have "name"
|
|
306
|
-
description # ā Orders don't have "description"
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
// ā
CORRECT: Use real schema fields
|
|
313
|
-
query GetOrders($first: Int!, $after: String) {
|
|
314
|
-
orders(first: $first, after: $after) {
|
|
315
|
-
edges {
|
|
316
|
-
node {
|
|
317
|
-
id
|
|
318
|
-
ref # ā Real field
|
|
319
|
-
status # ā Real field
|
|
320
|
-
totalPrice # ā Real field
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
```
|
|
326
|
-
|
|
327
|
-
### ā Mistake 2: Forgetting Pagination Variables
|
|
328
|
-
|
|
329
|
-
```typescript
|
|
330
|
-
// ā WRONG: No pagination variables = no auto-pagination!
|
|
331
|
-
query GetVirtualPositions {
|
|
332
|
-
virtualPositions(first: 100) { # Hardcoded, won't paginate
|
|
333
|
-
edges { node { id ref productRef quantity } }
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
// ā
CORRECT: Include $first and $after variables
|
|
338
|
-
query GetVirtualPositions($first: Int!, $after: String) {
|
|
339
|
-
virtualPositions(first: $first, after: $after) {
|
|
340
|
-
edges { node { id ref productRef quantity } }
|
|
341
|
-
pageInfo { hasNextPage }
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
```
|
|
345
|
-
|
|
346
|
-
### ā Mistake 3: Missing pageInfo
|
|
347
|
-
|
|
348
|
-
```typescript
|
|
349
|
-
// ā WRONG: Missing pageInfo.hasNextPage
|
|
350
|
-
query GetVirtualPositions($first: Int!, $after: String) {
|
|
351
|
-
virtualPositions(first: $first, after: $after) {
|
|
352
|
-
edges {
|
|
353
|
-
node { id ref productRef quantity }
|
|
354
|
-
cursor
|
|
355
|
-
}
|
|
356
|
-
# Missing pageInfo!
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
// ā
CORRECT: Include pageInfo with hasNextPage
|
|
361
|
-
query GetVirtualPositions($first: Int!, $after: String) {
|
|
362
|
-
virtualPositions(first: $first, after: $after) {
|
|
363
|
-
edges {
|
|
364
|
-
node { id ref productRef quantity }
|
|
365
|
-
cursor
|
|
366
|
-
}
|
|
367
|
-
pageInfo {
|
|
368
|
-
hasNextPage # Required for pagination detection!
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
```
|
|
373
|
-
|
|
374
|
-
### ā Mistake 4: No Safety Limits
|
|
375
|
-
|
|
376
|
-
### ā Mistake 5: Missing Backward Pagination Requirements
|
|
377
|
-
|
|
378
|
-
```graphql
|
|
379
|
-
// ā WRONG: Using backward direction without required variables
|
|
380
|
-
query GetItems($last: Int!, $before: String) {
|
|
381
|
-
items(last: $last, before: $before) {
|
|
382
|
-
edges { node { id } cursor }
|
|
383
|
-
# Missing pageInfo.hasPreviousPage
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
// ā
CORRECT: Include hasPreviousPage for backward pagination
|
|
388
|
-
query GetItems($last: Int!, $before: String) {
|
|
389
|
-
items(last: $last, before: $before) {
|
|
390
|
-
edges { node { id } cursor }
|
|
391
|
-
pageInfo { hasPreviousPage }
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
|
-
```
|
|
395
|
-
|
|
396
|
-
```typescript
|
|
397
|
-
// ā RISKY: No limits, could fetch 100,000+ records
|
|
398
|
-
const result = await client.graphql({
|
|
399
|
-
query,
|
|
400
|
-
variables: { first: 100 },
|
|
401
|
-
// No pagination limits!
|
|
402
|
-
});
|
|
403
|
-
|
|
404
|
-
// ā
SAFE: Always set safety limits
|
|
405
|
-
const result = await client.graphql({
|
|
406
|
-
query,
|
|
407
|
-
variables: { first: 100 },
|
|
408
|
-
pagination: {
|
|
409
|
-
maxPages: 100,
|
|
410
|
-
maxRecords: 10000,
|
|
411
|
-
timeoutMs: 60000,
|
|
412
|
-
},
|
|
413
|
-
});
|
|
414
|
-
```
|
|
415
|
-
|
|
416
|
-
---
|
|
417
|
-
|
|
418
|
-
## Quick Reference: Verified Entity Queries
|
|
419
|
-
|
|
420
|
-
Here are copy-paste ready queries for common Fluent entities (all fields verified via schema introspection):
|
|
421
|
-
|
|
422
|
-
### Virtual Positions (Inventory)
|
|
423
|
-
|
|
424
|
-
```graphql
|
|
425
|
-
query GetVirtualPositions($first: Int!, $after: String) {
|
|
426
|
-
virtualPositions(first: $first, after: $after) {
|
|
427
|
-
edges {
|
|
428
|
-
node {
|
|
429
|
-
id
|
|
430
|
-
ref
|
|
431
|
-
productRef
|
|
432
|
-
quantity
|
|
433
|
-
groupRef
|
|
434
|
-
status
|
|
435
|
-
type
|
|
436
|
-
createdOn
|
|
437
|
-
updatedOn
|
|
438
|
-
}
|
|
439
|
-
cursor
|
|
440
|
-
}
|
|
441
|
-
pageInfo {
|
|
442
|
-
hasNextPage
|
|
443
|
-
}
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
```
|
|
447
|
-
|
|
448
|
-
### Locations
|
|
449
|
-
|
|
450
|
-
```graphql
|
|
451
|
-
query GetLocations($first: Int!, $after: String) {
|
|
452
|
-
locations(first: $first, after: $after) {
|
|
453
|
-
edges {
|
|
454
|
-
node {
|
|
455
|
-
id
|
|
456
|
-
ref
|
|
457
|
-
name
|
|
458
|
-
type
|
|
459
|
-
status
|
|
460
|
-
defaultCarrier
|
|
461
|
-
}
|
|
462
|
-
cursor
|
|
463
|
-
}
|
|
464
|
-
pageInfo {
|
|
465
|
-
hasNextPage
|
|
466
|
-
}
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
```
|
|
470
|
-
|
|
471
|
-
### Products
|
|
472
|
-
|
|
473
|
-
```graphql
|
|
474
|
-
query GetProducts($first: Int!, $after: String) {
|
|
475
|
-
products(first: $first, after: $after) {
|
|
476
|
-
edges {
|
|
477
|
-
node {
|
|
478
|
-
id
|
|
479
|
-
ref
|
|
480
|
-
type
|
|
481
|
-
status
|
|
482
|
-
gtin
|
|
483
|
-
}
|
|
484
|
-
cursor
|
|
485
|
-
}
|
|
486
|
-
pageInfo {
|
|
487
|
-
hasNextPage
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
```
|
|
492
|
-
|
|
493
|
-
### Orders
|
|
494
|
-
|
|
495
|
-
```graphql
|
|
496
|
-
query GetOrders($first: Int!, $after: String) {
|
|
497
|
-
orders(first: $first, after: $after) {
|
|
498
|
-
edges {
|
|
499
|
-
node {
|
|
500
|
-
id
|
|
501
|
-
ref
|
|
502
|
-
status
|
|
503
|
-
type
|
|
504
|
-
totalPrice
|
|
505
|
-
totalTax
|
|
506
|
-
createdOn
|
|
507
|
-
retailer {
|
|
508
|
-
id
|
|
509
|
-
}
|
|
510
|
-
}
|
|
511
|
-
cursor
|
|
512
|
-
}
|
|
513
|
-
pageInfo {
|
|
514
|
-
hasNextPage
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
```
|
|
519
|
-
|
|
520
|
-
---
|
|
521
|
-
|
|
522
|
-
## Complete Working Example
|
|
523
|
-
|
|
524
|
-
Save this as `examples/quick-start-complete.ts`:
|
|
525
|
-
|
|
526
|
-
```typescript
|
|
527
|
-
/**
|
|
528
|
-
* Complete Quick Start Example
|
|
529
|
-
* Demonstrates auto-pagination with real schema fields and safety limits
|
|
530
|
-
*/
|
|
531
|
-
|
|
532
|
-
import { createClient } from '@fluentcommerce/fc-connect-sdk';
|
|
533
|
-
import * as dotenv from 'dotenv';
|
|
534
|
-
|
|
535
|
-
dotenv.config();
|
|
536
|
-
|
|
537
|
-
async function main() {
|
|
538
|
-
// 1. Create client
|
|
539
|
-
const client = await createClient({
|
|
540
|
-
config: {
|
|
541
|
-
baseUrl: process.env.FLUENT_BASE_URL!,
|
|
542
|
-
clientId: process.env.FLUENT_CLIENT_ID!,
|
|
543
|
-
clientSecret: process.env.FLUENT_CLIENT_SECRET!,
|
|
544
|
-
retailerId: process.env.FLUENT_RETAILER_ID!,
|
|
545
|
-
},
|
|
546
|
-
});
|
|
547
|
-
|
|
548
|
-
// 2. Define query with REAL schema fields
|
|
549
|
-
const query = `
|
|
550
|
-
query GetVirtualPositions($first: Int!, $after: String) {
|
|
551
|
-
virtualPositions(first: $first, after: $after) {
|
|
552
|
-
edges {
|
|
553
|
-
node {
|
|
554
|
-
id
|
|
555
|
-
productRef
|
|
556
|
-
quantity
|
|
557
|
-
groupRef
|
|
558
|
-
status
|
|
559
|
-
}
|
|
560
|
-
cursor
|
|
561
|
-
}
|
|
562
|
-
pageInfo {
|
|
563
|
-
hasNextPage
|
|
564
|
-
}
|
|
565
|
-
}
|
|
566
|
-
}
|
|
567
|
-
`;
|
|
568
|
-
|
|
569
|
-
// 3. Execute with auto-pagination and safety limits
|
|
570
|
-
console.log('š Starting pagination...\n');
|
|
571
|
-
|
|
572
|
-
const result = await client.graphql({
|
|
573
|
-
query,
|
|
574
|
-
variables: { first: 100 },
|
|
575
|
-
pagination: {
|
|
576
|
-
maxPages: 50,
|
|
577
|
-
maxRecords: 5000,
|
|
578
|
-
timeoutMs: 60000,
|
|
579
|
-
onProgress: (page, totalRecords) => {
|
|
580
|
-
process.stdout.write(`\rš Page ${page}: ${totalRecords} records...`);
|
|
581
|
-
},
|
|
582
|
-
},
|
|
583
|
-
});
|
|
584
|
-
|
|
585
|
-
// 4. Process results
|
|
586
|
-
console.log('\n\nā
Pagination Complete!\n');
|
|
587
|
-
|
|
588
|
-
const { totalRecords, totalPages, truncated, truncationReason } =
|
|
589
|
-
result.extensions.autoPagination;
|
|
590
|
-
|
|
591
|
-
console.log('š Statistics:');
|
|
592
|
-
console.log(` Total Records: ${totalRecords}`);
|
|
593
|
-
console.log(` Total Pages: ${totalPages}`);
|
|
594
|
-
console.log(` Truncated: ${truncated}${truncated ? ` (${truncationReason})` : ''}\n`);
|
|
595
|
-
|
|
596
|
-
// 5. Analyze data
|
|
597
|
-
const positions = result.data.virtualPositions.edges;
|
|
598
|
-
|
|
599
|
-
const activeCount = positions.filter(e => e.node.status === 'ACTIVE').length;
|
|
600
|
-
const totalQty = positions.reduce((sum, e) => sum + (e.node.quantity || 0), 0);
|
|
601
|
-
|
|
602
|
-
console.log('š¦ Inventory Summary:');
|
|
603
|
-
console.log(` Active Positions: ${activeCount}`);
|
|
604
|
-
console.log(` Total Quantity: ${totalQty} units\n`);
|
|
605
|
-
|
|
606
|
-
// 6. Display sample
|
|
607
|
-
console.log('š Sample Records:');
|
|
608
|
-
positions.slice(0, 3).forEach((edge, i) => {
|
|
609
|
-
const { productRef, quantity, groupRef, status } = edge.node;
|
|
610
|
-
console.log(` ${i + 1}. ${productRef}: ${quantity} units @ ${groupRef} [${status}]`);
|
|
611
|
-
});
|
|
612
|
-
}
|
|
613
|
-
|
|
614
|
-
main().catch(console.error);
|
|
615
|
-
```
|
|
616
|
-
|
|
617
|
-
---
|
|
618
|
-
|
|
619
|
-
## Testing Your Setup
|
|
620
|
-
|
|
621
|
-
Run this test to verify everything works:
|
|
622
|
-
|
|
623
|
-
```bash
|
|
624
|
-
# Test connectivity and pagination
|
|
625
|
-
node quick-start-complete.js
|
|
626
|
-
```
|
|
627
|
-
|
|
628
|
-
Expected output:
|
|
629
|
-
|
|
630
|
-
```
|
|
631
|
-
š Starting pagination...
|
|
632
|
-
|
|
633
|
-
š Page 15: 1487 records...
|
|
634
|
-
|
|
635
|
-
ā
Pagination Complete!
|
|
636
|
-
|
|
637
|
-
š Statistics:
|
|
638
|
-
Total Records: 1487
|
|
639
|
-
Total Pages: 15
|
|
640
|
-
Truncated: false
|
|
641
|
-
|
|
642
|
-
š¦ Inventory Summary:
|
|
643
|
-
Active Positions: 1342
|
|
644
|
-
Total Quantity: 245670 units
|
|
645
|
-
|
|
646
|
-
š Sample Records:
|
|
647
|
-
1. SKU-001: 150 units @ WH-EAST [ACTIVE]
|
|
648
|
-
2. SKU-002: 75 units @ WH-WEST [ACTIVE]
|
|
649
|
-
3. SKU-003: 200 units @ WH-CENTRAL [ACTIVE]
|
|
650
|
-
```
|
|
651
|
-
|
|
652
|
-
---
|
|
653
|
-
|
|
654
|
-
## Troubleshooting
|
|
655
|
-
|
|
656
|
-
### Problem: "Field 'X' doesn't exist on type 'Y'"
|
|
657
|
-
|
|
658
|
-
**Solution:** Field name is wrong. Introspect schema first:
|
|
659
|
-
|
|
660
|
-
```bash
|
|
661
|
-
npx fc-connect introspect-schema --endpoint YOUR_URL --output schema.json
|
|
662
|
-
# Then search schema.json for correct field names
|
|
663
|
-
```
|
|
664
|
-
|
|
665
|
-
### Problem: "Variable '$first' is never used"
|
|
666
|
-
|
|
667
|
-
**Solution:** Include variable in query arguments:
|
|
668
|
-
|
|
669
|
-
```graphql
|
|
670
|
-
# ā WRONG
|
|
671
|
-
query GetItems($first: Int!) {
|
|
672
|
-
items { ... } # Not using $first
|
|
673
|
-
}
|
|
674
|
-
|
|
675
|
-
# ā
CORRECT
|
|
676
|
-
query GetItems($first: Int!) {
|
|
677
|
-
items(first: $first) { ... } # Using $first
|
|
678
|
-
}
|
|
679
|
-
```
|
|
680
|
-
|
|
681
|
-
### Problem: Auto-pagination not activating
|
|
682
|
-
|
|
683
|
-
**Solution:** Ensure query has pagination variables:
|
|
684
|
-
|
|
685
|
-
```typescript
|
|
686
|
-
// Check this returns true
|
|
687
|
-
const hasVariables = query.includes('$first') || query.includes('$after');
|
|
688
|
-
```
|
|
689
|
-
|
|
690
|
-
---
|
|
691
|
-
|
|
692
|
-
## Next Steps
|
|
693
|
-
|
|
694
|
-
Congratulations! You've successfully implemented auto-pagination. Next:
|
|
695
|
-
|
|
696
|
-
- **Learn Configuration Options:** [Module 3: Configuration ā](./auto-pagination-03-configuration.md)
|
|
697
|
-
- **Try Advanced Patterns:** [Module 4: Advanced Patterns ā](./auto-pagination-04-advanced-patterns.md)
|
|
698
|
-
- **Explore More Examples:** [Examples Directory ā](../examples/)
|
|
699
|
-
|
|
700
|
-
---
|
|
701
|
-
|
|
702
|
-
## Key Takeaways
|
|
703
|
-
|
|
704
|
-
ā
**Always introspect schema** - Never guess field names
|
|
705
|
-
ā
**Include pagination variables** - `$first`, `$after` in query
|
|
706
|
-
ā
**Include pageInfo** - Required for pagination detection
|
|
707
|
-
ā
**Set safety limits** - maxPages, maxRecords, timeoutMs
|
|
708
|
-
ā
**Monitor progress** - Use onProgress callbacks
|
|
709
|
-
ā
**Check truncation** - Verify `extensions.autoPagination.truncated`
|
|
710
|
-
|
|
711
|
-
---
|
|
712
|
-
|
|
713
|
-
[ā Back to Index](../../advanced-services/advanced-services-readme.md) | [ā Previous: Foundations](./auto-pagination-01-foundations.md) | [Next: Configuration ā](./auto-pagination-03-configuration.md)
|
|
1
|
+
# Module 2: Quick Start
|
|
2
|
+
|
|
3
|
+
> **Learning Objective:** Write and run your first auto-paginated query using real Fluent schema fields.
|
|
4
|
+
>
|
|
5
|
+
> **Level:** Beginner
|
|
6
|
+
|
|
7
|
+
## Table of Contents
|
|
8
|
+
|
|
9
|
+
1. [Prerequisites](#prerequisites)
|
|
10
|
+
2. [Step 1: Discover Schema Fields](#step-1-discover-schema-fields)
|
|
11
|
+
3. [Step 2: Your First Auto-Paginated Query](#step-2-your-first-auto-paginated-query)
|
|
12
|
+
4. [Step 3: Understanding the Response](#step-3-understanding-the-response)
|
|
13
|
+
5. [Step 4: Add Safety Limits](#step-4-add-safety-limits)
|
|
14
|
+
6. [Common Mistakes to Avoid](#common-mistakes-to-avoid)
|
|
15
|
+
7. [Next Steps](#next-steps)
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Prerequisites
|
|
20
|
+
|
|
21
|
+
Before starting, ensure you have:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# 1. SDK installed
|
|
25
|
+
npm install @fluentcommerce/fc-connect-sdk
|
|
26
|
+
|
|
27
|
+
# 2. Environment variables set (.env file)
|
|
28
|
+
FLUENT_BASE_URL=https://your-account.api.fluentretail.com
|
|
29
|
+
FLUENT_CLIENT_ID=your-client-id
|
|
30
|
+
FLUENT_CLIENT_SECRET=your-client-secret
|
|
31
|
+
FLUENT_RETAILER_ID=your-retailer-id
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Step 1: Discover Schema Fields
|
|
37
|
+
|
|
38
|
+
**ā ļø CRITICAL:** Never guess field names! Always introspect the schema first to discover available fields.
|
|
39
|
+
|
|
40
|
+
### Option A: Use SDK CLI Tool (Recommended)
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
npx fc-connect introspect-schema \
|
|
44
|
+
--endpoint https://your-account.api.fluentretail.com/graphql \
|
|
45
|
+
--client-id your-client-id \
|
|
46
|
+
--client-secret your-client-secret \
|
|
47
|
+
--output schema.json
|
|
48
|
+
|
|
49
|
+
# Output: schema.json with all types, fields, and descriptions
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Option B: Use GraphQL Playground
|
|
53
|
+
|
|
54
|
+
1. Navigate to your Fluent GraphQL endpoint in browser
|
|
55
|
+
2. Open "Docs" sidebar
|
|
56
|
+
3. Search for entity (e.g., `VirtualPosition`)
|
|
57
|
+
4. View available fields and their types
|
|
58
|
+
|
|
59
|
+
### Real Schema Example: VirtualPosition
|
|
60
|
+
|
|
61
|
+
Based on actual Fluent Commerce schema introspection:
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
// ā
REAL FIELDS (from schema.json)
|
|
65
|
+
type VirtualPosition {
|
|
66
|
+
id: ID!
|
|
67
|
+
ref: String!
|
|
68
|
+
productRef: String
|
|
69
|
+
quantity: Int
|
|
70
|
+
groupRef: String
|
|
71
|
+
status: String
|
|
72
|
+
type: String
|
|
73
|
+
createdOn: DateTime
|
|
74
|
+
updatedOn: DateTime
|
|
75
|
+
catalogue: VirtualCatalogue
|
|
76
|
+
attributes: [Attribute]
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// ā DON'T GUESS FIELDS LIKE:
|
|
80
|
+
// name, title, description - these DON'T exist on VirtualPosition!
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Step 2: Your First Auto-Paginated Query
|
|
86
|
+
|
|
87
|
+
Create a file `paginate-inventory.ts`:
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
/**
|
|
91
|
+
* Example: Fetch all virtual positions (inventory) with auto-pagination
|
|
92
|
+
* Uses REAL schema fields verified via introspection
|
|
93
|
+
*/
|
|
94
|
+
|
|
95
|
+
import { createClient } from '@fluentcommerce/fc-connect-sdk';
|
|
96
|
+
import * as dotenv from 'dotenv';
|
|
97
|
+
|
|
98
|
+
// Load environment variables
|
|
99
|
+
dotenv.config();
|
|
100
|
+
|
|
101
|
+
async function paginateInventory() {
|
|
102
|
+
// Create client (auto-detects Node.js/Deno/Versori context)
|
|
103
|
+
const client = await createClient({
|
|
104
|
+
config: {
|
|
105
|
+
baseUrl: process.env.FLUENT_BASE_URL!,
|
|
106
|
+
clientId: process.env.FLUENT_CLIENT_ID!,
|
|
107
|
+
clientSecret: process.env.FLUENT_CLIENT_SECRET!,
|
|
108
|
+
retailerId: process.env.FLUENT_RETAILER_ID!,
|
|
109
|
+
},
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
console.log('Starting inventory pagination...\n');
|
|
113
|
+
|
|
114
|
+
// ā
Query using REAL schema fields
|
|
115
|
+
const result = await client.graphql({
|
|
116
|
+
query: `
|
|
117
|
+
query GetVirtualPositions($first: Int!, $after: String) {
|
|
118
|
+
virtualPositions(first: $first, after: $after) {
|
|
119
|
+
edges {
|
|
120
|
+
node {
|
|
121
|
+
id
|
|
122
|
+
ref # Real field ā - Business reference (required)
|
|
123
|
+
productRef # Real field ā
|
|
124
|
+
quantity # Real field ā
|
|
125
|
+
groupRef # Real field ā
|
|
126
|
+
status # Real field ā
|
|
127
|
+
}
|
|
128
|
+
cursor
|
|
129
|
+
}
|
|
130
|
+
pageInfo {
|
|
131
|
+
hasNextPage
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
`,
|
|
136
|
+
variables: {
|
|
137
|
+
first: 100, // Page size: 100 records per page
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
// Auto-pagination automatically fetches ALL pages and merges them!
|
|
142
|
+
const positions = result.data.virtualPositions.edges;
|
|
143
|
+
const metadata = result.extensions.autoPagination;
|
|
144
|
+
|
|
145
|
+
// Display results
|
|
146
|
+
console.log('ā
Pagination Complete!\n');
|
|
147
|
+
console.log(`Total Records: ${metadata.totalRecords}`);
|
|
148
|
+
console.log(`Total Pages: ${metadata.totalPages}`);
|
|
149
|
+
console.log(`Truncated: ${metadata.truncated}`);
|
|
150
|
+
if (metadata.truncated) {
|
|
151
|
+
console.log(`Truncation Reason: ${metadata.truncationReason}\n`);
|
|
152
|
+
} else {
|
|
153
|
+
console.log('');
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// Process first 5 records
|
|
157
|
+
console.log('Sample Records:');
|
|
158
|
+
positions.slice(0, 5).forEach((edge, index) => {
|
|
159
|
+
const { id, productRef, quantity, groupRef, status } = edge.node;
|
|
160
|
+
console.log(
|
|
161
|
+
`${index + 1}. Product ${productRef}: ${quantity} units at ${groupRef} (${status})`
|
|
162
|
+
);
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Run the pagination
|
|
167
|
+
paginateInventory()
|
|
168
|
+
.then(() => console.log('\nā
Done!'))
|
|
169
|
+
.catch(error => {
|
|
170
|
+
console.error('ā Error:', error.message);
|
|
171
|
+
process.exit(1);
|
|
172
|
+
});
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### Run It
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
# Using ts-node
|
|
179
|
+
npx ts-node paginate-inventory.ts
|
|
180
|
+
|
|
181
|
+
# Or compile and run
|
|
182
|
+
npx tsc paginate-inventory.ts
|
|
183
|
+
node paginate-inventory.js
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Expected Output
|
|
187
|
+
|
|
188
|
+
```
|
|
189
|
+
Starting inventory pagination...
|
|
190
|
+
|
|
191
|
+
ā
Pagination Complete!
|
|
192
|
+
|
|
193
|
+
Total Records: 1487
|
|
194
|
+
Total Pages: 15
|
|
195
|
+
Truncated: false
|
|
196
|
+
|
|
197
|
+
Sample Records:
|
|
198
|
+
1. Product SKU-001: 150 units at WH-EAST (ACTIVE)
|
|
199
|
+
2. Product SKU-002: 75 units at WH-WEST (ACTIVE)
|
|
200
|
+
3. Product SKU-003: 200 units at WH-CENTRAL (ACTIVE)
|
|
201
|
+
4. Product SKU-004: 0 units at WH-EAST (DEPLETED)
|
|
202
|
+
5. Product SKU-005: 450 units at WH-WEST (ACTIVE)
|
|
203
|
+
|
|
204
|
+
ā
Done!
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Step 3: Understanding the Response
|
|
210
|
+
|
|
211
|
+
### Response Structure
|
|
212
|
+
|
|
213
|
+
```typescript
|
|
214
|
+
{
|
|
215
|
+
data: {
|
|
216
|
+
virtualPositions: {
|
|
217
|
+
edges: [
|
|
218
|
+
{
|
|
219
|
+
node: {
|
|
220
|
+
id: "1234",
|
|
221
|
+
productRef: "SKU-001",
|
|
222
|
+
quantity: 150,
|
|
223
|
+
groupRef: "WH-EAST",
|
|
224
|
+
status: "ACTIVE"
|
|
225
|
+
},
|
|
226
|
+
cursor: "Y3Vyc29yOjE=" // Opaque cursor
|
|
227
|
+
},
|
|
228
|
+
// ... all pages merged here automatically!
|
|
229
|
+
],
|
|
230
|
+
pageInfo: {
|
|
231
|
+
hasNextPage: false // For forward pagination, false at end
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
extensions: {
|
|
236
|
+
autoPagination: {
|
|
237
|
+
totalPages: 15, // SDK made 15 requests
|
|
238
|
+
totalRecords: 1487, // Total items across all pages
|
|
239
|
+
truncated: false, // false = fetched everything
|
|
240
|
+
truncationReason: undefined, // "maxPages" | "maxRecords" | "timeout" if truncated
|
|
241
|
+
direction: "forward" // Pagination direction used
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// Note: duration/timeElapsed NOT included - calculate using Date.now() if needed
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### Key Points
|
|
250
|
+
|
|
251
|
+
1. **All Pages Merged**: `edges` array contains items from ALL pages
|
|
252
|
+
2. **Deduplication**: SDK automatically removes duplicates by node.id
|
|
253
|
+
3. **Metadata**: `extensions.autoPagination` provides pagination stats
|
|
254
|
+
4. **hasNextPage**: Always `false` at the end (SDK fetched everything)
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## Step 4: Add Safety Limits
|
|
259
|
+
|
|
260
|
+
**ā ļø IMPORTANT:** Always set safety limits to prevent runaway queries!
|
|
261
|
+
|
|
262
|
+
```typescript
|
|
263
|
+
const result = await client.graphql({
|
|
264
|
+
query: virtualPositionsQuery,
|
|
265
|
+
variables: { first: 100 },
|
|
266
|
+
|
|
267
|
+
// Safety limits (OR-logic: first limit reached stops pagination)
|
|
268
|
+
pagination: {
|
|
269
|
+
maxPages: 50, // Stop after 50 pages
|
|
270
|
+
maxRecords: 5000, // OR stop after 5000 records
|
|
271
|
+
timeoutMs: 60000, // OR stop after 60 seconds
|
|
272
|
+
},
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
// Check if truncated
|
|
276
|
+
if (result.extensions.autoPagination.truncated) {
|
|
277
|
+
console.warn('ā ļø Results truncated!');
|
|
278
|
+
console.warn(`Reason: ${result.extensions.autoPagination.truncationReason}`);
|
|
279
|
+
// Possible reasons: "maxPages" | "maxRecords" | "timeout"
|
|
280
|
+
}
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
### Recommended Safety Limits by Use Case
|
|
284
|
+
|
|
285
|
+
| Use Case | maxPages | maxRecords | timeoutMs | Rationale |
|
|
286
|
+
| ----------------------- | -------- | ---------- | --------- | ---------------------------------- |
|
|
287
|
+
| **Testing/Development** | 5 | 500 | 10000 | Fast feedback, avoid large pulls |
|
|
288
|
+
| **Production Export** | 100 | 10000 | 300000 | Conservative limits for safety |
|
|
289
|
+
| **Background Job** | 500 | 50000 | 600000 | Higher limits for batch processing |
|
|
290
|
+
| **Real-Time API** | 10 | 1000 | 5000 | Fast response for user-facing APIs |
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## Common Mistakes to Avoid
|
|
295
|
+
|
|
296
|
+
### ā Mistake 1: Guessing Field Names
|
|
297
|
+
|
|
298
|
+
```typescript
|
|
299
|
+
// ā WRONG: Guessing fields that don't exist
|
|
300
|
+
query GetOrders($first: Int!, $after: String) {
|
|
301
|
+
orders(first: $first, after: $after) {
|
|
302
|
+
edges {
|
|
303
|
+
node {
|
|
304
|
+
id
|
|
305
|
+
name # ā Orders don't have "name"
|
|
306
|
+
description # ā Orders don't have "description"
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
// ā
CORRECT: Use real schema fields
|
|
313
|
+
query GetOrders($first: Int!, $after: String) {
|
|
314
|
+
orders(first: $first, after: $after) {
|
|
315
|
+
edges {
|
|
316
|
+
node {
|
|
317
|
+
id
|
|
318
|
+
ref # ā Real field
|
|
319
|
+
status # ā Real field
|
|
320
|
+
totalPrice # ā Real field
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
### ā Mistake 2: Forgetting Pagination Variables
|
|
328
|
+
|
|
329
|
+
```typescript
|
|
330
|
+
// ā WRONG: No pagination variables = no auto-pagination!
|
|
331
|
+
query GetVirtualPositions {
|
|
332
|
+
virtualPositions(first: 100) { # Hardcoded, won't paginate
|
|
333
|
+
edges { node { id ref productRef quantity } }
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// ā
CORRECT: Include $first and $after variables
|
|
338
|
+
query GetVirtualPositions($first: Int!, $after: String) {
|
|
339
|
+
virtualPositions(first: $first, after: $after) {
|
|
340
|
+
edges { node { id ref productRef quantity } }
|
|
341
|
+
pageInfo { hasNextPage }
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
### ā Mistake 3: Missing pageInfo
|
|
347
|
+
|
|
348
|
+
```typescript
|
|
349
|
+
// ā WRONG: Missing pageInfo.hasNextPage
|
|
350
|
+
query GetVirtualPositions($first: Int!, $after: String) {
|
|
351
|
+
virtualPositions(first: $first, after: $after) {
|
|
352
|
+
edges {
|
|
353
|
+
node { id ref productRef quantity }
|
|
354
|
+
cursor
|
|
355
|
+
}
|
|
356
|
+
# Missing pageInfo!
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
// ā
CORRECT: Include pageInfo with hasNextPage
|
|
361
|
+
query GetVirtualPositions($first: Int!, $after: String) {
|
|
362
|
+
virtualPositions(first: $first, after: $after) {
|
|
363
|
+
edges {
|
|
364
|
+
node { id ref productRef quantity }
|
|
365
|
+
cursor
|
|
366
|
+
}
|
|
367
|
+
pageInfo {
|
|
368
|
+
hasNextPage # Required for pagination detection!
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
### ā Mistake 4: No Safety Limits
|
|
375
|
+
|
|
376
|
+
### ā Mistake 5: Missing Backward Pagination Requirements
|
|
377
|
+
|
|
378
|
+
```graphql
|
|
379
|
+
// ā WRONG: Using backward direction without required variables
|
|
380
|
+
query GetItems($last: Int!, $before: String) {
|
|
381
|
+
items(last: $last, before: $before) {
|
|
382
|
+
edges { node { id } cursor }
|
|
383
|
+
# Missing pageInfo.hasPreviousPage
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
// ā
CORRECT: Include hasPreviousPage for backward pagination
|
|
388
|
+
query GetItems($last: Int!, $before: String) {
|
|
389
|
+
items(last: $last, before: $before) {
|
|
390
|
+
edges { node { id } cursor }
|
|
391
|
+
pageInfo { hasPreviousPage }
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
```typescript
|
|
397
|
+
// ā RISKY: No limits, could fetch 100,000+ records
|
|
398
|
+
const result = await client.graphql({
|
|
399
|
+
query,
|
|
400
|
+
variables: { first: 100 },
|
|
401
|
+
// No pagination limits!
|
|
402
|
+
});
|
|
403
|
+
|
|
404
|
+
// ā
SAFE: Always set safety limits
|
|
405
|
+
const result = await client.graphql({
|
|
406
|
+
query,
|
|
407
|
+
variables: { first: 100 },
|
|
408
|
+
pagination: {
|
|
409
|
+
maxPages: 100,
|
|
410
|
+
maxRecords: 10000,
|
|
411
|
+
timeoutMs: 60000,
|
|
412
|
+
},
|
|
413
|
+
});
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
---
|
|
417
|
+
|
|
418
|
+
## Quick Reference: Verified Entity Queries
|
|
419
|
+
|
|
420
|
+
Here are copy-paste ready queries for common Fluent entities (all fields verified via schema introspection):
|
|
421
|
+
|
|
422
|
+
### Virtual Positions (Inventory)
|
|
423
|
+
|
|
424
|
+
```graphql
|
|
425
|
+
query GetVirtualPositions($first: Int!, $after: String) {
|
|
426
|
+
virtualPositions(first: $first, after: $after) {
|
|
427
|
+
edges {
|
|
428
|
+
node {
|
|
429
|
+
id
|
|
430
|
+
ref
|
|
431
|
+
productRef
|
|
432
|
+
quantity
|
|
433
|
+
groupRef
|
|
434
|
+
status
|
|
435
|
+
type
|
|
436
|
+
createdOn
|
|
437
|
+
updatedOn
|
|
438
|
+
}
|
|
439
|
+
cursor
|
|
440
|
+
}
|
|
441
|
+
pageInfo {
|
|
442
|
+
hasNextPage
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
### Locations
|
|
449
|
+
|
|
450
|
+
```graphql
|
|
451
|
+
query GetLocations($first: Int!, $after: String) {
|
|
452
|
+
locations(first: $first, after: $after) {
|
|
453
|
+
edges {
|
|
454
|
+
node {
|
|
455
|
+
id
|
|
456
|
+
ref
|
|
457
|
+
name
|
|
458
|
+
type
|
|
459
|
+
status
|
|
460
|
+
defaultCarrier
|
|
461
|
+
}
|
|
462
|
+
cursor
|
|
463
|
+
}
|
|
464
|
+
pageInfo {
|
|
465
|
+
hasNextPage
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
### Products
|
|
472
|
+
|
|
473
|
+
```graphql
|
|
474
|
+
query GetProducts($first: Int!, $after: String) {
|
|
475
|
+
products(first: $first, after: $after) {
|
|
476
|
+
edges {
|
|
477
|
+
node {
|
|
478
|
+
id
|
|
479
|
+
ref
|
|
480
|
+
type
|
|
481
|
+
status
|
|
482
|
+
gtin
|
|
483
|
+
}
|
|
484
|
+
cursor
|
|
485
|
+
}
|
|
486
|
+
pageInfo {
|
|
487
|
+
hasNextPage
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
```
|
|
492
|
+
|
|
493
|
+
### Orders
|
|
494
|
+
|
|
495
|
+
```graphql
|
|
496
|
+
query GetOrders($first: Int!, $after: String) {
|
|
497
|
+
orders(first: $first, after: $after) {
|
|
498
|
+
edges {
|
|
499
|
+
node {
|
|
500
|
+
id
|
|
501
|
+
ref
|
|
502
|
+
status
|
|
503
|
+
type
|
|
504
|
+
totalPrice
|
|
505
|
+
totalTax
|
|
506
|
+
createdOn
|
|
507
|
+
retailer {
|
|
508
|
+
id
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
cursor
|
|
512
|
+
}
|
|
513
|
+
pageInfo {
|
|
514
|
+
hasNextPage
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
```
|
|
519
|
+
|
|
520
|
+
---
|
|
521
|
+
|
|
522
|
+
## Complete Working Example
|
|
523
|
+
|
|
524
|
+
Save this as `examples/quick-start-complete.ts`:
|
|
525
|
+
|
|
526
|
+
```typescript
|
|
527
|
+
/**
|
|
528
|
+
* Complete Quick Start Example
|
|
529
|
+
* Demonstrates auto-pagination with real schema fields and safety limits
|
|
530
|
+
*/
|
|
531
|
+
|
|
532
|
+
import { createClient } from '@fluentcommerce/fc-connect-sdk';
|
|
533
|
+
import * as dotenv from 'dotenv';
|
|
534
|
+
|
|
535
|
+
dotenv.config();
|
|
536
|
+
|
|
537
|
+
async function main() {
|
|
538
|
+
// 1. Create client
|
|
539
|
+
const client = await createClient({
|
|
540
|
+
config: {
|
|
541
|
+
baseUrl: process.env.FLUENT_BASE_URL!,
|
|
542
|
+
clientId: process.env.FLUENT_CLIENT_ID!,
|
|
543
|
+
clientSecret: process.env.FLUENT_CLIENT_SECRET!,
|
|
544
|
+
retailerId: process.env.FLUENT_RETAILER_ID!,
|
|
545
|
+
},
|
|
546
|
+
});
|
|
547
|
+
|
|
548
|
+
// 2. Define query with REAL schema fields
|
|
549
|
+
const query = `
|
|
550
|
+
query GetVirtualPositions($first: Int!, $after: String) {
|
|
551
|
+
virtualPositions(first: $first, after: $after) {
|
|
552
|
+
edges {
|
|
553
|
+
node {
|
|
554
|
+
id
|
|
555
|
+
productRef
|
|
556
|
+
quantity
|
|
557
|
+
groupRef
|
|
558
|
+
status
|
|
559
|
+
}
|
|
560
|
+
cursor
|
|
561
|
+
}
|
|
562
|
+
pageInfo {
|
|
563
|
+
hasNextPage
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
`;
|
|
568
|
+
|
|
569
|
+
// 3. Execute with auto-pagination and safety limits
|
|
570
|
+
console.log('š Starting pagination...\n');
|
|
571
|
+
|
|
572
|
+
const result = await client.graphql({
|
|
573
|
+
query,
|
|
574
|
+
variables: { first: 100 },
|
|
575
|
+
pagination: {
|
|
576
|
+
maxPages: 50,
|
|
577
|
+
maxRecords: 5000,
|
|
578
|
+
timeoutMs: 60000,
|
|
579
|
+
onProgress: (page, totalRecords) => {
|
|
580
|
+
process.stdout.write(`\rš Page ${page}: ${totalRecords} records...`);
|
|
581
|
+
},
|
|
582
|
+
},
|
|
583
|
+
});
|
|
584
|
+
|
|
585
|
+
// 4. Process results
|
|
586
|
+
console.log('\n\nā
Pagination Complete!\n');
|
|
587
|
+
|
|
588
|
+
const { totalRecords, totalPages, truncated, truncationReason } =
|
|
589
|
+
result.extensions.autoPagination;
|
|
590
|
+
|
|
591
|
+
console.log('š Statistics:');
|
|
592
|
+
console.log(` Total Records: ${totalRecords}`);
|
|
593
|
+
console.log(` Total Pages: ${totalPages}`);
|
|
594
|
+
console.log(` Truncated: ${truncated}${truncated ? ` (${truncationReason})` : ''}\n`);
|
|
595
|
+
|
|
596
|
+
// 5. Analyze data
|
|
597
|
+
const positions = result.data.virtualPositions.edges;
|
|
598
|
+
|
|
599
|
+
const activeCount = positions.filter(e => e.node.status === 'ACTIVE').length;
|
|
600
|
+
const totalQty = positions.reduce((sum, e) => sum + (e.node.quantity || 0), 0);
|
|
601
|
+
|
|
602
|
+
console.log('š¦ Inventory Summary:');
|
|
603
|
+
console.log(` Active Positions: ${activeCount}`);
|
|
604
|
+
console.log(` Total Quantity: ${totalQty} units\n`);
|
|
605
|
+
|
|
606
|
+
// 6. Display sample
|
|
607
|
+
console.log('š Sample Records:');
|
|
608
|
+
positions.slice(0, 3).forEach((edge, i) => {
|
|
609
|
+
const { productRef, quantity, groupRef, status } = edge.node;
|
|
610
|
+
console.log(` ${i + 1}. ${productRef}: ${quantity} units @ ${groupRef} [${status}]`);
|
|
611
|
+
});
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
main().catch(console.error);
|
|
615
|
+
```
|
|
616
|
+
|
|
617
|
+
---
|
|
618
|
+
|
|
619
|
+
## Testing Your Setup
|
|
620
|
+
|
|
621
|
+
Run this test to verify everything works:
|
|
622
|
+
|
|
623
|
+
```bash
|
|
624
|
+
# Test connectivity and pagination
|
|
625
|
+
node quick-start-complete.js
|
|
626
|
+
```
|
|
627
|
+
|
|
628
|
+
Expected output:
|
|
629
|
+
|
|
630
|
+
```
|
|
631
|
+
š Starting pagination...
|
|
632
|
+
|
|
633
|
+
š Page 15: 1487 records...
|
|
634
|
+
|
|
635
|
+
ā
Pagination Complete!
|
|
636
|
+
|
|
637
|
+
š Statistics:
|
|
638
|
+
Total Records: 1487
|
|
639
|
+
Total Pages: 15
|
|
640
|
+
Truncated: false
|
|
641
|
+
|
|
642
|
+
š¦ Inventory Summary:
|
|
643
|
+
Active Positions: 1342
|
|
644
|
+
Total Quantity: 245670 units
|
|
645
|
+
|
|
646
|
+
š Sample Records:
|
|
647
|
+
1. SKU-001: 150 units @ WH-EAST [ACTIVE]
|
|
648
|
+
2. SKU-002: 75 units @ WH-WEST [ACTIVE]
|
|
649
|
+
3. SKU-003: 200 units @ WH-CENTRAL [ACTIVE]
|
|
650
|
+
```
|
|
651
|
+
|
|
652
|
+
---
|
|
653
|
+
|
|
654
|
+
## Troubleshooting
|
|
655
|
+
|
|
656
|
+
### Problem: "Field 'X' doesn't exist on type 'Y'"
|
|
657
|
+
|
|
658
|
+
**Solution:** Field name is wrong. Introspect schema first:
|
|
659
|
+
|
|
660
|
+
```bash
|
|
661
|
+
npx fc-connect introspect-schema --endpoint YOUR_URL --output schema.json
|
|
662
|
+
# Then search schema.json for correct field names
|
|
663
|
+
```
|
|
664
|
+
|
|
665
|
+
### Problem: "Variable '$first' is never used"
|
|
666
|
+
|
|
667
|
+
**Solution:** Include variable in query arguments:
|
|
668
|
+
|
|
669
|
+
```graphql
|
|
670
|
+
# ā WRONG
|
|
671
|
+
query GetItems($first: Int!) {
|
|
672
|
+
items { ... } # Not using $first
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
# ā
CORRECT
|
|
676
|
+
query GetItems($first: Int!) {
|
|
677
|
+
items(first: $first) { ... } # Using $first
|
|
678
|
+
}
|
|
679
|
+
```
|
|
680
|
+
|
|
681
|
+
### Problem: Auto-pagination not activating
|
|
682
|
+
|
|
683
|
+
**Solution:** Ensure query has pagination variables:
|
|
684
|
+
|
|
685
|
+
```typescript
|
|
686
|
+
// Check this returns true
|
|
687
|
+
const hasVariables = query.includes('$first') || query.includes('$after');
|
|
688
|
+
```
|
|
689
|
+
|
|
690
|
+
---
|
|
691
|
+
|
|
692
|
+
## Next Steps
|
|
693
|
+
|
|
694
|
+
Congratulations! You've successfully implemented auto-pagination. Next:
|
|
695
|
+
|
|
696
|
+
- **Learn Configuration Options:** [Module 3: Configuration ā](./auto-pagination-03-configuration.md)
|
|
697
|
+
- **Try Advanced Patterns:** [Module 4: Advanced Patterns ā](./auto-pagination-04-advanced-patterns.md)
|
|
698
|
+
- **Explore More Examples:** [Examples Directory ā](../examples/)
|
|
699
|
+
|
|
700
|
+
---
|
|
701
|
+
|
|
702
|
+
## Key Takeaways
|
|
703
|
+
|
|
704
|
+
ā
**Always introspect schema** - Never guess field names
|
|
705
|
+
ā
**Include pagination variables** - `$first`, `$after` in query
|
|
706
|
+
ā
**Include pageInfo** - Required for pagination detection
|
|
707
|
+
ā
**Set safety limits** - maxPages, maxRecords, timeoutMs
|
|
708
|
+
ā
**Monitor progress** - Use onProgress callbacks
|
|
709
|
+
ā
**Check truncation** - Verify `extensions.autoPagination.truncated`
|
|
710
|
+
|
|
711
|
+
---
|
|
712
|
+
|
|
713
|
+
[ā Back to Index](../../advanced-services/advanced-services-readme.md) | [ā Previous: Foundations](./auto-pagination-01-foundations.md) | [Next: Configuration ā](./auto-pagination-03-configuration.md)
|