@fluentcommerce/fc-connect-sdk 0.1.54 → 0.1.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/cjs/clients/fluent-client.js +13 -6
- package/dist/cjs/utils/pagination-helpers.js +38 -2
- package/dist/cjs/versori/fluent-versori-client.js +11 -5
- package/dist/esm/clients/fluent-client.js +13 -6
- package/dist/esm/utils/pagination-helpers.js +38 -2
- package/dist/esm/versori/fluent-versori-client.js +11 -5
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/tsconfig.types.tsbuildinfo +1 -1
- package/docs/00-START-HERE/EXPORT-VALIDATION.md +158 -158
- package/docs/00-START-HERE/cli-analyze-source-structure-guide.md +655 -655
- package/docs/00-START-HERE/cli-documentation-index.md +202 -202
- package/docs/00-START-HERE/cli-quick-reference.md +252 -252
- package/docs/00-START-HERE/decision-tree.md +552 -552
- package/docs/00-START-HERE/getting-started.md +1070 -1070
- package/docs/00-START-HERE/mapper-quick-decision-guide.md +235 -235
- package/docs/00-START-HERE/readme.md +237 -237
- package/docs/00-START-HERE/retailerid-configuration.md +404 -404
- package/docs/00-START-HERE/sdk-philosophy.md +794 -794
- package/docs/00-START-HERE/troubleshooting-quick-reference.md +1086 -1086
- package/docs/01-TEMPLATES/faq.md +686 -686
- package/docs/01-TEMPLATES/patterns/pattern-templates-guide.md +68 -68
- package/docs/01-TEMPLATES/patterns/patterns-csv-schema-validation-and-rejection-report.md +233 -233
- package/docs/01-TEMPLATES/patterns/patterns-custom-resolvers.md +407 -407
- package/docs/01-TEMPLATES/patterns/patterns-error-handling-retry.md +511 -511
- package/docs/01-TEMPLATES/patterns/patterns-field-mapping-universal.md +701 -701
- package/docs/01-TEMPLATES/patterns/patterns-large-file-splitting.md +1430 -1430
- package/docs/01-TEMPLATES/patterns/patterns-master-data-etl.md +2399 -2399
- package/docs/01-TEMPLATES/patterns/patterns-pagination-streaming.md +447 -447
- package/docs/01-TEMPLATES/patterns/patterns-state-duplicate-prevention.md +385 -385
- package/docs/01-TEMPLATES/readme.md +957 -957
- package/docs/01-TEMPLATES/standalone/standalone-asn-inbound-processing.md +1209 -1209
- package/docs/01-TEMPLATES/standalone/standalone-graphql-query-export.md +1140 -1140
- package/docs/01-TEMPLATES/standalone/standalone-graphql-to-parquet-partitioned-s3.md +432 -432
- package/docs/01-TEMPLATES/standalone/standalone-multi-channel-inventory-sync.md +1185 -1185
- package/docs/01-TEMPLATES/standalone/standalone-multi-source-aggregation.md +1462 -1462
- package/docs/01-TEMPLATES/standalone/standalone-s3-csv-batch-api.md +1390 -1390
- package/docs/01-TEMPLATES/standalone/standalone-s3-csv-inventory-to-batch.md +330 -330
- package/docs/01-TEMPLATES/standalone/standalone-scripts-guide.md +87 -87
- package/docs/01-TEMPLATES/standalone/standalone-sftp-xml-graphql.md +1444 -1444
- package/docs/01-TEMPLATES/standalone/standalone-webhook-payload-processing.md +688 -688
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-dropship-order-routing.md +193 -193
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-graphql-parquet-extraction.md +518 -518
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-inter-location-transfers.md +2162 -2162
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-pre-order-allocation.md +2226 -2226
- package/docs/01-TEMPLATES/versori/business-examples/business-scenarios-guide.md +87 -87
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-connection-validation-pattern.md +656 -656
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-dual-workflow-connector.md +835 -835
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-guide.md +108 -108
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-kv-state-management.md +1533 -1533
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-xml-response-patterns.md +1160 -1160
- package/docs/01-TEMPLATES/versori/versori-platform-guide.md +201 -201
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-asn-purchase-order.md +1906 -1906
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-dropship-routing.md +1074 -1074
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-flash-sale-reserve.md +1395 -1395
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-generic-xml-order.md +888 -888
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-payment-gateway-integration.md +2478 -2478
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-rma-returns-comprehensive.md +2240 -2240
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-xml-order-ingestion.md +2029 -2029
- package/docs/01-TEMPLATES/versori/webhooks/webhook-templates-guide.md +140 -140
- package/docs/01-TEMPLATES/versori/workflows/_examples/sample-data/inventory-mapping.json +20 -20
- package/docs/01-TEMPLATES/versori/workflows/_examples/sample-data/products_2025-01-22.csv +11 -11
- package/docs/01-TEMPLATES/versori/workflows/_examples/sample-data/sample-data-guide.md +34 -34
- package/docs/01-TEMPLATES/versori/workflows/_examples/workflow-examples-guide.md +36 -36
- package/docs/01-TEMPLATES/versori/workflows/extraction/extraction-modes-guide.md +1038 -1038
- package/docs/01-TEMPLATES/versori/workflows/extraction/extraction-workflows-guide.md +138 -138
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/graphql-extraction-guide.md +63 -63
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-fulfillments-to-sftp-csv.md +2062 -2062
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-fulfillments-to-sftp-xml.md +2294 -2294
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-positions-to-s3-csv.md +2461 -2461
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-positions-to-sftp-xml.md +2529 -2529
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-quantities-to-s3-csv.md +2464 -2464
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-quantities-to-s3-json.md +1959 -1959
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-orders-to-s3-csv.md +1953 -1953
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-orders-to-sftp-xml.md +2541 -2541
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-products-to-s3-json.md +2384 -2384
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-products-to-sftp-xml.md +2445 -2445
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-virtual-positions-to-s3-csv.md +2355 -2355
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-virtual-positions-to-s3-json.md +2042 -2042
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-virtual-positions-to-sftp-xml.md +2726 -2726
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/batch-api-guide.md +206 -206
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-cycle-count-reconciliation.md +2030 -2030
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-multi-channel-inventory-sync.md +1882 -1882
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-s3-csv-inventory-batch.md +2827 -2827
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-s3-json-inventory-batch.md +1952 -1952
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-s3-xml-inventory-batch.md +3289 -3289
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-sftp-csv-inventory-batch.md +3064 -3064
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-sftp-json-inventory-batch.md +3238 -3238
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-sftp-xml-inventory-batch.md +2977 -2977
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/event-api-guide.md +321 -321
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-payload-json-order-cancel-event.md +959 -959
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-payload-xml-order-cancel-event.md +1170 -1170
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-csv-product-event.md +2312 -2312
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-json-product-event.md +2999 -2999
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-parquet-product-event.md +2836 -2836
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-xml-product-event.md +2395 -2395
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-csv-product-event.md +2295 -2295
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-json-product-event.md +2602 -2602
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-parquet-product-event.md +2589 -2589
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-xml-product-event.md +3578 -3578
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/graphql-mutations-guide.md +93 -93
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-payload-json-order-update-graphql.md +1260 -1260
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-payload-xml-order-update-graphql.md +1472 -1472
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-control-graphql.md +2417 -2417
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-location-graphql.md +2811 -2811
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-price-graphql.md +2619 -2619
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-json-location-graphql.md +2807 -2807
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-xml-location-graphql.md +2373 -2373
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-sftp-csv-control-graphql.md +2740 -2740
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-sftp-csv-location-graphql.md +2760 -2760
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-sftp-json-location-graphql.md +1710 -1710
- package/docs/01-TEMPLATES/versori/workflows/ingestion/ingestion-workflows-guide.md +136 -136
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/rubix-webhooks-guide.md +520 -520
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/template-webhook-rubix-fulfilment-to-sftp-xml-inline.md +1418 -1418
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/template-webhook-rubix-fulfilment-to-sftp-xml-universal-mapper.md +1785 -1785
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/template-webhook-rubix-order-attribute-update.md +824 -824
- package/docs/01-TEMPLATES/versori/workflows/workflows-overview-guide.md +646 -646
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-batch-archival.md +724 -724
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-job-tracker.md +627 -627
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-partial-batch-recovery.md +561 -561
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-quick-reference.md +367 -367
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-readme.md +407 -407
- package/docs/02-CORE-GUIDES/advanced-services/readme.md +49 -49
- package/docs/02-CORE-GUIDES/api-reference/api-reference-quick-reference.md +548 -548
- package/docs/02-CORE-GUIDES/api-reference/event-api-input-output-reference.md +702 -1171
- package/docs/02-CORE-GUIDES/api-reference/examples/client-initialization.ts +286 -286
- package/docs/02-CORE-GUIDES/api-reference/graphql-error-classification.md +337 -337
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-01-client-api.md +399 -520
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-03-authentication.md +199 -199
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-04-graphql-mapping.md +925 -925
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-05-services.md +1198 -1198
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-06-data-sources.md +1083 -1083
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-07-parsers.md +1097 -1097
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-08-pagination.md +513 -513
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-08-types.md +545 -597
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-09-error-handling.md +527 -527
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-09-webhook-validation.md +514 -514
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-10-extraction.md +557 -557
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-10-utilities.md +412 -412
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-11-cli-tools.md +423 -423
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-11-error-handling.md +716 -716
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-12-analyze-source-structure.md +518 -518
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-12-partial-responses.md +212 -212
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-12-testing.md +300 -300
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-13-resolver-builder.md +322 -322
- package/docs/02-CORE-GUIDES/api-reference/readme.md +279 -279
- package/docs/02-CORE-GUIDES/auto-pagination/auto-pagination-quick-reference.md +351 -351
- package/docs/02-CORE-GUIDES/auto-pagination/auto-pagination-readme.md +277 -277
- package/docs/02-CORE-GUIDES/auto-pagination/examples/auto-pagination-readme.md +178 -178
- package/docs/02-CORE-GUIDES/auto-pagination/examples/common-patterns.ts +351 -351
- package/docs/02-CORE-GUIDES/auto-pagination/examples/paginate-products.ts +384 -384
- package/docs/02-CORE-GUIDES/auto-pagination/examples/paginate-virtual-positions.ts +308 -308
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-01-foundations.md +470 -470
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-02-quick-start.md +713 -713
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-03-configuration.md +754 -754
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-04-advanced-patterns.md +732 -732
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-05-sdk-integration.md +847 -847
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-06-troubleshooting.md +359 -359
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-07-api-reference.md +462 -462
- package/docs/02-CORE-GUIDES/auto-pagination/readme.md +54 -54
- package/docs/02-CORE-GUIDES/data-sources/data-sources-file-operations-error-handling.md +1487 -1487
- package/docs/02-CORE-GUIDES/data-sources/data-sources-quick-reference.md +836 -836
- package/docs/02-CORE-GUIDES/data-sources/data-sources-readme.md +276 -276
- package/docs/02-CORE-GUIDES/data-sources/data-sources-sftp-credential-access-security.md +553 -553
- package/docs/02-CORE-GUIDES/data-sources/examples/common-patterns.ts +409 -409
- package/docs/02-CORE-GUIDES/data-sources/examples/data-sources-readme.md +178 -178
- package/docs/02-CORE-GUIDES/data-sources/examples/s3-operations.ts +308 -308
- package/docs/02-CORE-GUIDES/data-sources/examples/sftp-operations.ts +371 -371
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-01-foundations.md +735 -735
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-02-s3-operations.md +1302 -1302
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-03-sftp-operations.md +1379 -1379
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-04-file-patterns.md +941 -941
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-05-advanced-topics.md +813 -813
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-06-integration-patterns.md +486 -486
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-07-troubleshooting.md +387 -387
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-08-api-reference.md +417 -417
- package/docs/02-CORE-GUIDES/data-sources/readme.md +77 -77
- package/docs/02-CORE-GUIDES/error-handling-guide.md +936 -936
- package/docs/02-CORE-GUIDES/extraction/examples/02-core-guides-extraction-readme.md +116 -116
- package/docs/02-CORE-GUIDES/extraction/examples/common-patterns.ts +428 -428
- package/docs/02-CORE-GUIDES/extraction/examples/extract-inventory-basic.ts +187 -187
- package/docs/02-CORE-GUIDES/extraction/extraction-quick-reference.md +596 -596
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-01-foundations.md +514 -514
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-02-basic-extraction.md +823 -823
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-03-parquet-processing.md +507 -507
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-04-data-enrichment.md +546 -546
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-05-transformation.md +494 -494
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-06-export-formats.md +458 -458
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-06-performance.md +138 -138
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-07-api-reference.md +148 -148
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-07-optimization.md +692 -692
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-08-extraction-orchestrator.md +1008 -1008
- package/docs/02-CORE-GUIDES/extraction/readme.md +151 -151
- package/docs/02-CORE-GUIDES/ingestion/examples/_simple-kv-store.ts +40 -40
- package/docs/02-CORE-GUIDES/ingestion/examples/error-recovery.ts +728 -728
- package/docs/02-CORE-GUIDES/ingestion/examples/event-driven.ts +501 -501
- package/docs/02-CORE-GUIDES/ingestion/examples/local-file-ingestion.ts +88 -88
- package/docs/02-CORE-GUIDES/ingestion/examples/parquet-ingestion.ts +117 -117
- package/docs/02-CORE-GUIDES/ingestion/examples/performance-optimized.ts +647 -647
- package/docs/02-CORE-GUIDES/ingestion/examples/s3-csv-ingestion.ts +169 -169
- package/docs/02-CORE-GUIDES/ingestion/examples/sftp-csv-ingestion.ts +134 -134
- package/docs/02-CORE-GUIDES/ingestion/ingestion-quick-reference.md +546 -546
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-01-introduction.md +626 -626
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-02-quick-start.md +658 -658
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-03-data-sources.md +1052 -1052
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-04-field-mapping.md +763 -763
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-05-advanced-parsers.md +676 -676
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-06-batch-api.md +1295 -1295
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-07-api-reference.md +138 -138
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-07-state-management.md +1037 -1037
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-08-performance-optimization.md +1349 -1349
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-09-best-practices.md +1893 -1893
- package/docs/02-CORE-GUIDES/ingestion/readme.md +160 -160
- package/docs/02-CORE-GUIDES/logging-guide.md +585 -585
- package/docs/02-CORE-GUIDES/mapping/error-handling-patterns.md +401 -401
- package/docs/02-CORE-GUIDES/mapping/examples/02-core-guides-mapping-readme.md +128 -128
- package/docs/02-CORE-GUIDES/mapping/examples/common-patterns.ts +273 -273
- package/docs/02-CORE-GUIDES/mapping/examples/csv-location-ingestion.json +36 -36
- package/docs/02-CORE-GUIDES/mapping/examples/csv-mapping.ts +242 -242
- package/docs/02-CORE-GUIDES/mapping/examples/graphql-to-parquet-extraction.json +36 -36
- package/docs/02-CORE-GUIDES/mapping/examples/json-mapping.ts +213 -213
- package/docs/02-CORE-GUIDES/mapping/examples/json-product-to-mutation.json +48 -48
- package/docs/02-CORE-GUIDES/mapping/examples/xml-mapping.ts +291 -291
- package/docs/02-CORE-GUIDES/mapping/examples/xml-order-to-mutation.json +45 -45
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/graphql-mutation-mapping-quick-reference.md +463 -463
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/graphql-mutation-mapping-readme.md +227 -227
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-01-introduction.md +222 -222
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-02-quick-start.md +351 -351
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-03-schema-validation.md +569 -569
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-04-mapping-patterns.md +471 -471
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-05-configuration-reference.md +611 -611
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-06-advanced-xpath.md +148 -148
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-06-path-syntax.md +464 -464
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-07-api-reference.md +94 -94
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-07-array-handling.md +307 -307
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-08-custom-resolvers.md +544 -544
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-09-advanced-patterns.md +427 -427
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-10-hooks-and-variables.md +336 -336
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-11-error-handling.md +488 -488
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-12-arguments-vs-nodes.md +383 -383
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-13-best-practices.md +477 -477
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/readme.md +62 -62
- package/docs/02-CORE-GUIDES/mapping/mapping-format-decision-tree.md +480 -480
- package/docs/02-CORE-GUIDES/mapping/mapping-graphql-alias-batching-guide.md +820 -820
- package/docs/02-CORE-GUIDES/mapping/mapping-javascript-objects.md +2369 -2369
- package/docs/02-CORE-GUIDES/mapping/mapping-mapper-comparison-guide.md +682 -682
- package/docs/02-CORE-GUIDES/mapping/modules/02-core-guides-mapping-07-api-reference.md +1327 -1327
- package/docs/02-CORE-GUIDES/mapping/modules/02-core-guides-mapping-08-error-handling.md +1142 -1142
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-04-use-cases.md +891 -891
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-06-helpers-resolvers.md +1126 -1126
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-06-sdk-resolvers.md +199 -199
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-07-api-reference.md +1319 -1319
- package/docs/02-CORE-GUIDES/mapping/readme.md +178 -178
- package/docs/02-CORE-GUIDES/mapping/resolver-registration.md +410 -410
- package/docs/02-CORE-GUIDES/mapping/resolvers/examples/common-patterns.ts +226 -226
- package/docs/02-CORE-GUIDES/mapping/resolvers/examples/custom-resolvers.ts +227 -227
- package/docs/02-CORE-GUIDES/mapping/resolvers/examples/sdk-resolvers-usage.ts +203 -203
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-readme.md +274 -274
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-api-reference.md +679 -679
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-cookbook.md +826 -826
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-guide.md +1330 -1330
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-helpers-reference.md +1437 -1437
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-parameters-reference.md +553 -553
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-troubleshooting.md +854 -854
- package/docs/02-CORE-GUIDES/mapping/resolvers/readme.md +75 -75
- package/docs/02-CORE-GUIDES/parsers/examples/02-core-guides-parsers-readme.md +161 -161
- package/docs/02-CORE-GUIDES/parsers/examples/csv-parser-examples.ts +110 -110
- package/docs/02-CORE-GUIDES/parsers/examples/json-parser-examples.ts +33 -33
- package/docs/02-CORE-GUIDES/parsers/examples/parquet-parser-examples.ts +47 -47
- package/docs/02-CORE-GUIDES/parsers/examples/xml-parser-examples.ts +38 -38
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-01-foundations.md +355 -355
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-02-csv-parser.md +772 -772
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-03-json-parser.md +789 -789
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-04-xml-parser.md +857 -857
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-05-parquet-parser.md +603 -603
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-06-integration-patterns.md +702 -702
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-06-streaming.md +121 -121
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-07-api-reference.md +89 -89
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-07-troubleshooting.md +727 -727
- package/docs/02-CORE-GUIDES/parsers/parsers-quick-reference.md +482 -482
- package/docs/02-CORE-GUIDES/parsers/parsers-readme.md +258 -258
- package/docs/02-CORE-GUIDES/parsers/readme.md +65 -65
- package/docs/02-CORE-GUIDES/readme.md +194 -194
- package/docs/02-CORE-GUIDES/webhook-validation/examples/basic-validation.ts +108 -108
- package/docs/02-CORE-GUIDES/webhook-validation/examples/common-patterns.ts +316 -316
- package/docs/02-CORE-GUIDES/webhook-validation/examples/webhook-validation-readme.md +61 -61
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-01-foundations.md +440 -440
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-02-quick-start.md +525 -525
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-03-versori-integration.md +741 -741
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-04-platform-integration.md +629 -629
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-05-configuration.md +535 -535
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-06-error-handling.md +611 -611
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-06-troubleshooting.md +124 -124
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-07-api-reference.md +511 -511
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-08-rubix-webhooks.md +590 -590
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-09-rubix-event-vs-http-call.md +432 -432
- package/docs/02-CORE-GUIDES/webhook-validation/readme.md +239 -239
- package/docs/02-CORE-GUIDES/webhook-validation/webhook-validation-quick-reference.md +392 -392
- package/docs/03-PATTERN-GUIDES/connector-scenarios/connector-scenarios-quick-reference.md +498 -498
- package/docs/03-PATTERN-GUIDES/connector-scenarios/connector-scenarios-readme.md +313 -313
- package/docs/03-PATTERN-GUIDES/connector-scenarios/examples/common-patterns.ts +612 -612
- package/docs/03-PATTERN-GUIDES/connector-scenarios/examples/connector-scenarios-readme.md +253 -253
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-01-foundations.md +452 -452
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-02-simple-scenarios.md +681 -681
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-03-intermediate-scenarios.md +637 -637
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-04-advanced-scenarios.md +650 -650
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-05-bidirectional-sync.md +233 -233
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-06-production-patterns.md +442 -442
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-07-reference.md +445 -445
- package/docs/03-PATTERN-GUIDES/connector-scenarios/readme.md +31 -31
- package/docs/03-PATTERN-GUIDES/enterprise-integration-patterns.md +1528 -1528
- package/docs/03-PATTERN-GUIDES/error-handling/comprehensive-error-handling-guide.md +1437 -1437
- package/docs/03-PATTERN-GUIDES/error-handling/error-handling-quick-reference.md +390 -390
- package/docs/03-PATTERN-GUIDES/error-handling/examples/common-patterns.ts +438 -438
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-01-foundations.md +362 -362
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-02-error-types.md +850 -850
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-03-utf8-handling.md +456 -456
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-04-error-scenarios.md +658 -658
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-05-calling-patterns.md +671 -671
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-06-retry-strategies.md +1034 -1034
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-07-monitoring.md +653 -653
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-08-api-reference.md +847 -847
- package/docs/03-PATTERN-GUIDES/error-handling/readme.md +36 -36
- package/docs/03-PATTERN-GUIDES/examples/__tests__/readme.md +40 -40
- package/docs/03-PATTERN-GUIDES/examples/__tests__/resolver-examples.test.js +282 -282
- package/docs/03-PATTERN-GUIDES/examples/test-data/03-pattern-guides-readme.md +110 -110
- package/docs/03-PATTERN-GUIDES/examples/test-data/canonical-inventory.json +123 -123
- package/docs/03-PATTERN-GUIDES/examples/test-data/canonical-order.json +171 -171
- package/docs/03-PATTERN-GUIDES/examples/test-data/readme.md +28 -28
- package/docs/03-PATTERN-GUIDES/extraction/extraction-readme.md +15 -15
- package/docs/03-PATTERN-GUIDES/extraction/readme.md +25 -25
- package/docs/03-PATTERN-GUIDES/file-operations/examples/common-patterns.ts +407 -407
- package/docs/03-PATTERN-GUIDES/file-operations/examples/file-operations-readme.md +142 -142
- package/docs/03-PATTERN-GUIDES/file-operations/file-operations-quick-reference.md +462 -462
- package/docs/03-PATTERN-GUIDES/file-operations/file-operations-readme.md +379 -379
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-01-foundations.md +430 -430
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-02-quick-start.md +484 -484
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-03-s3-operations.md +507 -507
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-04-sftp-operations.md +963 -963
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-05-streaming-performance.md +503 -503
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-06-archive-patterns.md +386 -386
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-06-error-handling.md +117 -117
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-07-api-reference.md +78 -78
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-07-testing-troubleshooting.md +567 -567
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-08-api-reference.md +1055 -1055
- package/docs/03-PATTERN-GUIDES/file-operations/readme.md +32 -32
- package/docs/03-PATTERN-GUIDES/ingestion/ingestion-readme.md +15 -15
- package/docs/03-PATTERN-GUIDES/ingestion/readme.md +25 -25
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/batch-processing.ts +130 -130
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/common-patterns.ts +360 -360
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/delta-sync.ts +130 -130
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/integration-patterns-readme.md +100 -100
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/real-time-webhook.ts +398 -398
- package/docs/03-PATTERN-GUIDES/integration-patterns/integration-patterns-quick-reference.md +962 -962
- package/docs/03-PATTERN-GUIDES/integration-patterns/integration-patterns-readme.md +134 -134
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-01-real-time-processing.md +991 -991
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-02-batch-processing.md +1547 -1547
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-03-delta-sync.md +1108 -1108
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-04-webhook-patterns.md +1181 -1181
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-05-error-handling.md +1061 -1061
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-06-advanced-integration-services.md +1547 -1547
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-06-performance.md +109 -109
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-07-api-reference.md +34 -34
- package/docs/03-PATTERN-GUIDES/integration-patterns/readme.md +30 -30
- package/docs/03-PATTERN-GUIDES/logging-minimal-mode.md +128 -128
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/common-patterns.ts +380 -380
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/multiple-connections-readme.md +139 -139
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/parallel-root-connections.ts +149 -149
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/real-world-scenarios.ts +405 -405
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-01-foundations.md +378 -378
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-02-quick-start.md +566 -566
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-03-targeting-connections.md +659 -659
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-04-parallel-queries.md +656 -656
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-05-best-practices.md +624 -624
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-06-api-reference.md +824 -824
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-06-versori.md +119 -119
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-07-api-reference.md +87 -87
- package/docs/03-PATTERN-GUIDES/multiple-connections/multiple-connections-quick-reference.md +353 -353
- package/docs/03-PATTERN-GUIDES/multiple-connections/multiple-connections-readme.md +270 -270
- package/docs/03-PATTERN-GUIDES/multiple-connections/readme.md +30 -30
- package/docs/03-PATTERN-GUIDES/pagination/pagination-readme.md +14 -14
- package/docs/03-PATTERN-GUIDES/pagination/readme.md +24 -24
- package/docs/03-PATTERN-GUIDES/parquet/examples/common-patterns.ts +180 -180
- package/docs/03-PATTERN-GUIDES/parquet/examples/read-parquet.ts +48 -48
- package/docs/03-PATTERN-GUIDES/parquet/examples/write-parquet.ts +65 -65
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-01-introduction.md +393 -393
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-02-quick-start.md +572 -572
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-03-reading-parquet.md +525 -525
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-04-writing-parquet.md +554 -554
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-05-graphql-extraction.md +405 -405
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-06-performance.md +104 -104
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-06-s3-integration.md +511 -511
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-07-api-reference.md +90 -90
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-07-performance-optimization.md +525 -525
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-08-best-practices.md +712 -712
- package/docs/03-PATTERN-GUIDES/parquet/parquet-quick-reference.md +683 -683
- package/docs/03-PATTERN-GUIDES/parquet/parquet-readme.md +248 -248
- package/docs/03-PATTERN-GUIDES/parquet/readme.md +32 -32
- package/docs/03-PATTERN-GUIDES/parsers/parsers-readme.md +12 -12
- package/docs/03-PATTERN-GUIDES/parsers/readme.md +24 -24
- package/docs/03-PATTERN-GUIDES/readme.md +159 -159
- package/docs/03-PATTERN-GUIDES/webhooks/readme.md +24 -24
- package/docs/03-PATTERN-GUIDES/webhooks/webhooks-readme.md +8 -8
- package/docs/04-REFERENCE/architecture/architecture-01-overview.md +427 -427
- package/docs/04-REFERENCE/architecture/architecture-02-client-architecture.md +424 -424
- package/docs/04-REFERENCE/architecture/architecture-03-data-flow.md +690 -690
- package/docs/04-REFERENCE/architecture/architecture-04-service-layer.md +834 -834
- package/docs/04-REFERENCE/architecture/architecture-05-integration-architecture.md +655 -655
- package/docs/04-REFERENCE/architecture/architecture-06-state-management.md +653 -653
- package/docs/04-REFERENCE/architecture/architecture-adding-new-data-sources.md +686 -686
- package/docs/04-REFERENCE/architecture/readme.md +279 -279
- package/docs/04-REFERENCE/platforms/deno/readme.md +117 -117
- package/docs/04-REFERENCE/platforms/nodejs/readme.md +146 -146
- package/docs/04-REFERENCE/platforms/readme.md +135 -135
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-01-introduction.md +398 -398
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-02-quick-start.md +560 -560
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-03-authentication.md +757 -757
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-04-workflows.md +2476 -2476
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-05-connections.md +1167 -1167
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-06-kv-storage.md +990 -990
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-06-state-management.md +121 -121
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-07-api-reference.md +68 -68
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-07-deployment.md +731 -731
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-08-best-practices.md +1111 -1111
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-09-signature-reference.md +766 -766
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-readme.md +299 -299
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-s3-sftp-configuration-guide.md +1425 -1425
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-webhook-api-key-security.md +816 -816
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-webhook-connection-security.md +681 -681
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-workflow-task-types.md +708 -708
- package/docs/04-REFERENCE/platforms/versori/readme.md +108 -108
- package/docs/04-REFERENCE/readme.md +148 -148
- package/docs/04-REFERENCE/resolver-signature/examples/advanced-resolvers.ts +482 -482
- package/docs/04-REFERENCE/resolver-signature/examples/async-resolvers.ts +496 -496
- package/docs/04-REFERENCE/resolver-signature/examples/basic-resolvers.ts +343 -343
- package/docs/04-REFERENCE/resolver-signature/examples/resolver-signature-readme.md +188 -188
- package/docs/04-REFERENCE/resolver-signature/examples/testing-resolvers.ts +463 -463
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-01-foundations.md +286 -286
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-02-parameter-reference.md +643 -643
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-03-basic-examples.md +521 -521
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-04-advanced-patterns.md +739 -739
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-05-sdk-resolvers.md +531 -531
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-06-migration-guide.md +650 -650
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-06-testing.md +125 -125
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-07-api-reference.md +794 -794
- package/docs/04-REFERENCE/resolver-signature/readme.md +64 -64
- package/docs/04-REFERENCE/resolver-signature/resolver-signature-quick-reference.md +270 -270
- package/docs/04-REFERENCE/resolver-signature/resolver-signature-readme.md +351 -351
- package/docs/04-REFERENCE/schema/fluent-commerce-schema.json +764 -764
- package/docs/04-REFERENCE/schema/readme.md +141 -141
- package/docs/04-REFERENCE/testing/examples/04-reference-testing-readme.md +158 -158
- package/docs/04-REFERENCE/testing/examples/fluent-testing.ts +62 -62
- package/docs/04-REFERENCE/testing/examples/health-check.ts +155 -155
- package/docs/04-REFERENCE/testing/examples/integration-test.ts +119 -119
- package/docs/04-REFERENCE/testing/examples/performance-test.ts +183 -183
- package/docs/04-REFERENCE/testing/examples/s3-testing.ts +127 -127
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-01-foundations.md +267 -267
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-02-s3-testing.md +599 -599
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-03-fluent-testing.md +589 -589
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-04-integration-testing.md +699 -699
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-05-debugging.md +478 -478
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-06-cicd-integration.md +463 -463
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-06-preflight-validation.md +131 -131
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-07-best-practices.md +499 -499
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-07-coverage-ci.md +165 -165
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-08-api-reference.md +634 -634
- package/docs/04-REFERENCE/testing/readme.md +86 -86
- package/docs/04-REFERENCE/testing/testing-quick-reference.md +667 -667
- package/docs/04-REFERENCE/testing/testing-readme.md +286 -286
- package/docs/04-REFERENCE/troubleshooting/readme.md +144 -144
- package/docs/04-REFERENCE/troubleshooting/troubleshooting-deno-sftp-compatibility.md +392 -392
- package/docs/template-loading-matrix.md +242 -242
- package/package.json +5 -3
- package/docs/02-CORE-GUIDES/api-reference/cli-profile-integration.md +0 -377
|
@@ -1,514 +1,514 @@
|
|
|
1
|
-
# Module 1: Foundations
|
|
2
|
-
|
|
3
|
-
**Level:** Beginner
|
|
4
|
-
**Estimated Time:** 15 minutes
|
|
5
|
-
|
|
6
|
-
## Overview
|
|
7
|
-
|
|
8
|
-
This module covers the fundamental concepts of data extraction from Fluent Commerce, including workflow patterns, schema validation, and key architectural decisions.
|
|
9
|
-
|
|
10
|
-
## Learning Objectives
|
|
11
|
-
|
|
12
|
-
By the end of this module, you will:
|
|
13
|
-
|
|
14
|
-
- ✅ Understand the data extraction workflow and its components
|
|
15
|
-
- ✅ Know how to validate GraphQL queries against the Fluent schema
|
|
16
|
-
- ✅ Recognize when to use extraction vs ingestion
|
|
17
|
-
- ✅ Understand the role of pagination, enrichment, and transformation
|
|
18
|
-
|
|
19
|
-
## What is Data Extraction?
|
|
20
|
-
|
|
21
|
-
Data extraction is the process of retrieving data from Fluent Commerce and transforming it for use in external systems. This is the opposite of ingestion (writing data to Fluent).
|
|
22
|
-
|
|
23
|
-
**Common use cases:**
|
|
24
|
-
|
|
25
|
-
- **Analytics & Reporting**: Export orders, inventory to data warehouses
|
|
26
|
-
- **Synchronization**: Keep external systems in sync with Fluent data
|
|
27
|
-
- **Backups**: Archive historical data for compliance
|
|
28
|
-
- **Integrations**: Feed data to ERPs, WMS, analytics tools
|
|
29
|
-
- **Data Migration**: Move data between environments or systems
|
|
30
|
-
|
|
31
|
-
## Extraction Workflow
|
|
32
|
-
|
|
33
|
-
### High-Level Flow
|
|
34
|
-
|
|
35
|
-
```mermaid
|
|
36
|
-
graph LR
|
|
37
|
-
A[Source] --> B[Extract]
|
|
38
|
-
B --> C[Enrich]
|
|
39
|
-
C --> D[Transform]
|
|
40
|
-
D --> E[Export]
|
|
41
|
-
|
|
42
|
-
A --> A1[GraphQL API]
|
|
43
|
-
A --> A2[Parquet Files]
|
|
44
|
-
|
|
45
|
-
B --> B1[GraphQL Queries]
|
|
46
|
-
B --> B2[Auto-Pagination]
|
|
47
|
-
|
|
48
|
-
C --> C1[Batch Queries]
|
|
49
|
-
C --> C2[Related Data]
|
|
50
|
-
|
|
51
|
-
D --> D1[Field Mapping]
|
|
52
|
-
D --> D2[Custom Logic]
|
|
53
|
-
|
|
54
|
-
E --> E1[S3/SFTP]
|
|
55
|
-
E --> E2[JSON/XML/Parquet]
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
### Workflow Components
|
|
59
|
-
|
|
60
|
-
#### 1. Source
|
|
61
|
-
|
|
62
|
-
Where data originates:
|
|
63
|
-
|
|
64
|
-
- **Fluent GraphQL API**: Direct queries to Fluent Commerce
|
|
65
|
-
- **Parquet Files**: Pre-exported data from S3/SFTP
|
|
66
|
-
- **Hybrid**: Parquet base data enriched with GraphQL
|
|
67
|
-
|
|
68
|
-
#### 2. Extract
|
|
69
|
-
|
|
70
|
-
Retrieve data from source:
|
|
71
|
-
|
|
72
|
-
- **GraphQL Queries**: Fetch entities using validated queries
|
|
73
|
-
- **Auto-Pagination**: Automatically handle large datasets
|
|
74
|
-
- **Filtering**: Use GraphQL filters to narrow results
|
|
75
|
-
|
|
76
|
-
#### 3. Enrich
|
|
77
|
-
|
|
78
|
-
Add related data:
|
|
79
|
-
|
|
80
|
-
- **Batch Queries**: Fetch related entities efficiently
|
|
81
|
-
- **Nested Relations**: Use GraphQL to expand relations
|
|
82
|
-
- **Computed Fields**: Calculate derived values
|
|
83
|
-
|
|
84
|
-
#### 4. Transform
|
|
85
|
-
|
|
86
|
-
Convert to target format:
|
|
87
|
-
|
|
88
|
-
- **Field Mapping**: Rename/restructure fields
|
|
89
|
-
- **Data Conversion**: Change types, formats, units
|
|
90
|
-
- **Business Logic**: Apply custom transformations
|
|
91
|
-
|
|
92
|
-
#### 5. Export
|
|
93
|
-
|
|
94
|
-
Output to destination:
|
|
95
|
-
|
|
96
|
-
- **File Formats**: JSON, JSONL, CSV, XML, Parquet
|
|
97
|
-
- **Destinations**: S3, SFTP, HTTP endpoints
|
|
98
|
-
- **Compression**: Gzip, zip for large files
|
|
99
|
-
|
|
100
|
-
## Schema Validation - Critical First Step
|
|
101
|
-
|
|
102
|
-
⚠️ **IMPORTANT**: Before writing any extraction query, you MUST validate it against your Fluent Commerce schema. Using incorrect field names will cause runtime errors.
|
|
103
|
-
|
|
104
|
-
### Why Schema Validation Matters
|
|
105
|
-
|
|
106
|
-
**Problem**: GraphQL queries with invalid fields fail at runtime:
|
|
107
|
-
|
|
108
|
-
```typescript
|
|
109
|
-
// ❌ This query will FAIL if 'quantity' doesn't exist
|
|
110
|
-
query GetInventory {
|
|
111
|
-
inventoryPositions(first: 100) {
|
|
112
|
-
edges {
|
|
113
|
-
node {
|
|
114
|
-
quantity // ❌ Field might not exist!
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
**Solution**: Introspect schema first to discover real field names:
|
|
122
|
-
|
|
123
|
-
```bash
|
|
124
|
-
# Step 1: Introspect your Fluent schema
|
|
125
|
-
npx fc-connect introspect-schema \
|
|
126
|
-
--url https://YOUR_ACCOUNT.api.fluentcommerce.com/graphql \
|
|
127
|
-
--client-id YOUR_CLIENT_ID \
|
|
128
|
-
--client-secret YOUR_CLIENT_SECRET \
|
|
129
|
-
--output schema.json
|
|
130
|
-
|
|
131
|
-
# Step 2: Open schema.json and search for entity types
|
|
132
|
-
# Example: Search for "type InventoryPosition" to see real fields
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
### Validated Query Example
|
|
136
|
-
|
|
137
|
-
✅ **All queries in this guide are validated against** [`docs/schema/fluent-commerce-schema.json`](../../../04-REFERENCE/schema/fluent-commerce-schema.json)
|
|
138
|
-
|
|
139
|
-
```graphql
|
|
140
|
-
# ✅ VALIDATED: These fields exist in Fluent schema
|
|
141
|
-
query GetInventory($first: Int!, $after: String) {
|
|
142
|
-
inventoryPositions(first: $first, after: $after) {
|
|
143
|
-
edges {
|
|
144
|
-
node {
|
|
145
|
-
id # ✅ InventoryPosition.id (ID!)
|
|
146
|
-
ref # ✅ InventoryPosition.ref (String!)
|
|
147
|
-
productRef # ✅ InventoryPosition.productRef (String!)
|
|
148
|
-
locationRef # ✅ InventoryPosition.locationRef (String!)
|
|
149
|
-
qty # ✅ InventoryPosition.qty (Int!) - NOT 'quantity'!
|
|
150
|
-
status # ✅ InventoryPosition.status (String)
|
|
151
|
-
createdOn # ✅ InventoryPosition.createdOn (DateTime)
|
|
152
|
-
updatedOn # ✅ InventoryPosition.updatedOn (DateTime)
|
|
153
|
-
}
|
|
154
|
-
cursor
|
|
155
|
-
}
|
|
156
|
-
pageInfo {
|
|
157
|
-
hasNextPage # ✅ PageInfo.hasNextPage (Boolean!)
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
### Schema Field Verification Process
|
|
164
|
-
|
|
165
|
-
1. **Introspect schema** (see command above)
|
|
166
|
-
2. **Find entity type** in schema.json:
|
|
167
|
-
```json
|
|
168
|
-
{
|
|
169
|
-
"name": "InventoryPosition",
|
|
170
|
-
"fields": [
|
|
171
|
-
{ "name": "id", "type": { "name": "ID" } },
|
|
172
|
-
{ "name": "ref", "type": { "name": "String" } },
|
|
173
|
-
{ "name": "qty", "type": { "name": "Int" } }
|
|
174
|
-
]
|
|
175
|
-
}
|
|
176
|
-
```
|
|
177
|
-
3. **Use exact field names** in your queries
|
|
178
|
-
4. **Check field types** to ensure correct usage
|
|
179
|
-
|
|
180
|
-
## Extraction vs Ingestion
|
|
181
|
-
|
|
182
|
-
| Aspect | Extraction | Ingestion |
|
|
183
|
-
| ---------------- | ------------------------------------------ | --------------------------------------- |
|
|
184
|
-
| **Direction** | Fluent → External | External → Fluent |
|
|
185
|
-
| **Operations** | GraphQL Queries | GraphQL Mutations |
|
|
186
|
-
| **Pagination** | Auto-pagination | Batch API |
|
|
187
|
-
| **Use Case** | Analytics, sync, backup | Create/update entities |
|
|
188
|
-
| **SDK Services** | `client.graphql()`, `ExtractionOrchestrator`, `ParquetParserService` | `FluentBatchManager`, `UniversalMapper` |
|
|
189
|
-
|
|
190
|
-
## Key Concepts
|
|
191
|
-
|
|
192
|
-
### 1. Cursor-Based Pagination
|
|
193
|
-
|
|
194
|
-
Fluent Commerce uses Relay-style cursor pagination with support for both forward and backward pagination:
|
|
195
|
-
|
|
196
|
-
**Forward Pagination (most common):**
|
|
197
|
-
```typescript
|
|
198
|
-
// First page
|
|
199
|
-
{
|
|
200
|
-
first: 100,
|
|
201
|
-
after: null
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
// Subsequent pages
|
|
205
|
-
{
|
|
206
|
-
first: 100,
|
|
207
|
-
after: "cursor_from_last_edge"
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
// Response structure
|
|
211
|
-
{
|
|
212
|
-
edges: [
|
|
213
|
-
{ node: { ...data }, cursor: "abc123" }
|
|
214
|
-
],
|
|
215
|
-
pageInfo: {
|
|
216
|
-
hasNextPage: true // More pages available
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
**Backward Pagination (for reverse order):**
|
|
222
|
-
```typescript
|
|
223
|
-
// Last page
|
|
224
|
-
{
|
|
225
|
-
last: 100,
|
|
226
|
-
before: null
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
// Previous pages
|
|
230
|
-
{
|
|
231
|
-
last: 100,
|
|
232
|
-
before: "cursor_from_first_edge"
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
// Response structure
|
|
236
|
-
{
|
|
237
|
-
edges: [
|
|
238
|
-
{ node: { ...data }, cursor: "abc123" }
|
|
239
|
-
],
|
|
240
|
-
pageInfo: {
|
|
241
|
-
hasPreviousPage: true // More pages available (backwards)
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
**Important**: Fluent does NOT return `pageInfo.endCursor` or `pageInfo.startCursor` (deviation from Relay spec). Use edge cursors instead:
|
|
247
|
-
|
|
248
|
-
```typescript
|
|
249
|
-
// Forward pagination - use last cursor
|
|
250
|
-
const lastEdge = result.data.inventoryPositions.edges[edges.length - 1];
|
|
251
|
-
const cursor = lastEdge?.cursor;
|
|
252
|
-
|
|
253
|
-
// Backward pagination - use first cursor
|
|
254
|
-
const firstEdge = result.data.inventoryPositions.edges[0];
|
|
255
|
-
const cursor = firstEdge?.cursor;
|
|
256
|
-
```
|
|
257
|
-
|
|
258
|
-
See [Auto-Pagination Guide](../../auto-pagination/) and [Module 8: ExtractionOrchestrator](./02-core-guides-extraction-08-extraction-orchestrator.md) for automatic handling of both directions.
|
|
259
|
-
|
|
260
|
-
### 2. Data Enrichment
|
|
261
|
-
|
|
262
|
-
**Flat extraction** (basic fields only):
|
|
263
|
-
|
|
264
|
-
```typescript
|
|
265
|
-
query GetInventory {
|
|
266
|
-
inventoryPositions(first: 100) {
|
|
267
|
-
edges {
|
|
268
|
-
node {
|
|
269
|
-
ref
|
|
270
|
-
productRef
|
|
271
|
-
qty
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
**Enriched extraction** (with related data):
|
|
279
|
-
|
|
280
|
-
```typescript
|
|
281
|
-
query GetInventoryEnriched {
|
|
282
|
-
inventoryPositions(first: 100) {
|
|
283
|
-
edges {
|
|
284
|
-
node {
|
|
285
|
-
ref
|
|
286
|
-
productRef
|
|
287
|
-
qty
|
|
288
|
-
product {
|
|
289
|
-
ref
|
|
290
|
-
name
|
|
291
|
-
gtin
|
|
292
|
-
catalogue { ref name }
|
|
293
|
-
}
|
|
294
|
-
location {
|
|
295
|
-
ref
|
|
296
|
-
name
|
|
297
|
-
type
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
```
|
|
304
|
-
|
|
305
|
-
**Benefits of enrichment**:
|
|
306
|
-
|
|
307
|
-
- Fewer total API calls (1 query vs N+1 queries)
|
|
308
|
-
- Consistent data snapshot
|
|
309
|
-
- Simplified downstream processing
|
|
310
|
-
|
|
311
|
-
### 3. Field Mapping
|
|
312
|
-
|
|
313
|
-
Transform Fluent data to external format:
|
|
314
|
-
|
|
315
|
-
```typescript
|
|
316
|
-
// Source (Fluent)
|
|
317
|
-
{
|
|
318
|
-
"productRef": "SKU-001",
|
|
319
|
-
"locationRef": "WH-001",
|
|
320
|
-
"qty": 100,
|
|
321
|
-
"status": "AVAILABLE"
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
// Target (External System)
|
|
325
|
-
{
|
|
326
|
-
"sku": "SKU-001",
|
|
327
|
-
"warehouse": "WH-001",
|
|
328
|
-
"quantity": 100,
|
|
329
|
-
"status": "in_stock"
|
|
330
|
-
}
|
|
331
|
-
```
|
|
332
|
-
|
|
333
|
-
**Use `UniversalMapper` for automated transformation**:
|
|
334
|
-
|
|
335
|
-
```typescript
|
|
336
|
-
import { UniversalMapper } from '@fluentcommerce/fc-connect-sdk';
|
|
337
|
-
|
|
338
|
-
const mapper = new UniversalMapper({
|
|
339
|
-
fields: {
|
|
340
|
-
sku: { source: 'productRef' },
|
|
341
|
-
warehouse: { source: 'locationRef' },
|
|
342
|
-
quantity: { source: 'qty', resolver: 'sdk.parseInt' },
|
|
343
|
-
status: { source: 'status', resolver: 'sdk.lowercase' },
|
|
344
|
-
},
|
|
345
|
-
});
|
|
346
|
-
|
|
347
|
-
const result = await mapper.map(sourceData);
|
|
348
|
-
```
|
|
349
|
-
|
|
350
|
-
### 4. Export Formats
|
|
351
|
-
|
|
352
|
-
| Format | Use Case | SDK Support |
|
|
353
|
-
| ----------- | ---------------------- | -------------------------- |
|
|
354
|
-
| **JSON** | REST APIs, web apps | Native |
|
|
355
|
-
| **JSONL** | Streaming, big data | Native |
|
|
356
|
-
| **CSV** | Spreadsheets, BI tools | Via `csv-stringify` |
|
|
357
|
-
| **XML** | Enterprise integrations | Via `xml2js` |
|
|
358
|
-
| **Parquet** | Data lakes, analytics | Via `ParquetParserService` |
|
|
359
|
-
|
|
360
|
-
## Extraction Strategies
|
|
361
|
-
|
|
362
|
-
### 1. Full Extraction
|
|
363
|
-
|
|
364
|
-
Extract entire dataset periodically:
|
|
365
|
-
|
|
366
|
-
**Pros:**
|
|
367
|
-
|
|
368
|
-
- Simple to implement
|
|
369
|
-
- Complete data snapshot
|
|
370
|
-
- No state tracking needed
|
|
371
|
-
|
|
372
|
-
**Cons:**
|
|
373
|
-
|
|
374
|
-
- Large data transfer
|
|
375
|
-
- Slower for large datasets
|
|
376
|
-
- May hit rate limits
|
|
377
|
-
|
|
378
|
-
**When to use:** Small datasets, infrequent syncs, backups
|
|
379
|
-
|
|
380
|
-
### 2. Delta (Incremental) Extraction
|
|
381
|
-
|
|
382
|
-
Extract only changed records since last run:
|
|
383
|
-
|
|
384
|
-
**Pros:**
|
|
385
|
-
|
|
386
|
-
- Minimal data transfer
|
|
387
|
-
- Fast execution
|
|
388
|
-
- Efficient for large datasets
|
|
389
|
-
|
|
390
|
-
**Cons:**
|
|
391
|
-
|
|
392
|
-
- Requires state management
|
|
393
|
-
- More complex logic
|
|
394
|
-
- Risk of missing updates if state is lost
|
|
395
|
-
|
|
396
|
-
**When to use:** Large datasets, frequent syncs, real-time needs
|
|
397
|
-
|
|
398
|
-
### 3. Streaming Extraction
|
|
399
|
-
|
|
400
|
-
Process data in batches as it's fetched:
|
|
401
|
-
|
|
402
|
-
**Pros:**
|
|
403
|
-
|
|
404
|
-
- Memory efficient
|
|
405
|
-
- Can handle unlimited dataset size
|
|
406
|
-
- Start processing immediately
|
|
407
|
-
|
|
408
|
-
**Cons:**
|
|
409
|
-
|
|
410
|
-
- More complex implementation
|
|
411
|
-
- Cannot compute totals upfront
|
|
412
|
-
- Requires streaming destination
|
|
413
|
-
|
|
414
|
-
**When to use:** Very large datasets, memory constraints, real-time processing
|
|
415
|
-
|
|
416
|
-
## Performance Considerations
|
|
417
|
-
|
|
418
|
-
### Query Optimization
|
|
419
|
-
|
|
420
|
-
**❌ BAD: Fetch all fields**
|
|
421
|
-
|
|
422
|
-
```graphql
|
|
423
|
-
query GetProducts {
|
|
424
|
-
products(first: 100) {
|
|
425
|
-
edges {
|
|
426
|
-
node {
|
|
427
|
-
id ref name description gtin price
|
|
428
|
-
catalogue { ... }
|
|
429
|
-
attributes { ... }
|
|
430
|
-
categories { ... }
|
|
431
|
-
inventoryPositions { ... }
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
}
|
|
435
|
-
}
|
|
436
|
-
```
|
|
437
|
-
|
|
438
|
-
**✅ GOOD: Fetch only needed fields**
|
|
439
|
-
|
|
440
|
-
```graphql
|
|
441
|
-
query GetProducts {
|
|
442
|
-
products(first: 100) {
|
|
443
|
-
edges {
|
|
444
|
-
node {
|
|
445
|
-
ref
|
|
446
|
-
name
|
|
447
|
-
gtin
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
}
|
|
451
|
-
}
|
|
452
|
-
```
|
|
453
|
-
|
|
454
|
-
### Pagination Tuning
|
|
455
|
-
|
|
456
|
-
| Entity Complexity | Page Size | Rationale |
|
|
457
|
-
| -------------------------- | --------- | ----------------------------- |
|
|
458
|
-
| Simple (5-10 fields) | 100-200 | Small payload per record |
|
|
459
|
-
| Medium (10-20 fields) | 50-100 | Moderate payload |
|
|
460
|
-
| Complex (nested relations) | 20-50 | Large payload, avoid timeouts |
|
|
461
|
-
|
|
462
|
-
### Batch Enrichment
|
|
463
|
-
|
|
464
|
-
**❌ BAD: N+1 queries**
|
|
465
|
-
|
|
466
|
-
```typescript
|
|
467
|
-
for (const record of records) {
|
|
468
|
-
const product = await client.graphql({
|
|
469
|
-
query: `query { product(ref: "${record.productRef}") { ... } }`,
|
|
470
|
-
});
|
|
471
|
-
}
|
|
472
|
-
// 1000 records = 1000 API calls!
|
|
473
|
-
```
|
|
474
|
-
|
|
475
|
-
**✅ GOOD: Batch query**
|
|
476
|
-
|
|
477
|
-
```typescript
|
|
478
|
-
const refs = records.map(r => r.productRef);
|
|
479
|
-
const products = await client.graphql({
|
|
480
|
-
query: `
|
|
481
|
-
query GetProducts($refs: [String!]!) {
|
|
482
|
-
products(filter: { ref: { in: $refs } }, first: 100) {
|
|
483
|
-
edges { node { ref name } }
|
|
484
|
-
}
|
|
485
|
-
}
|
|
486
|
-
`,
|
|
487
|
-
variables: { refs },
|
|
488
|
-
});
|
|
489
|
-
// 1000 records = 10 API calls (batches of 100)
|
|
490
|
-
```
|
|
491
|
-
|
|
492
|
-
## Practice Exercise
|
|
493
|
-
|
|
494
|
-
**Goal**: Extract all virtual positions with product details
|
|
495
|
-
|
|
496
|
-
1. Create a GraphQL query for `virtualPositions`
|
|
497
|
-
2. Include product relation fields
|
|
498
|
-
3. Validate query against schema
|
|
499
|
-
4. Implement with auto-pagination
|
|
500
|
-
|
|
501
|
-
**Solution**: See [Module 2: Basic Extraction](./02-core-guides-extraction-02-basic-extraction.md#complete-example)
|
|
502
|
-
|
|
503
|
-
## Key Takeaways
|
|
504
|
-
|
|
505
|
-
- 🎯 Always validate GraphQL queries against schema before use
|
|
506
|
-
- 🎯 Understand the extraction workflow: Extract → Enrich → Transform → Export
|
|
507
|
-
- 🎯 Choose the right strategy: Full, Delta, or Streaming extraction
|
|
508
|
-
- 🎯 Optimize queries: Select only needed fields, batch enrichment
|
|
509
|
-
- 🎯 Use auto-pagination for large datasets
|
|
510
|
-
- 🎯 Plan for error handling and retry logic
|
|
511
|
-
|
|
512
|
-
## Next Steps
|
|
513
|
-
|
|
514
|
-
Continue to [Module 2: Basic Extraction](./02-core-guides-extraction-02-basic-extraction.md) to learn how to write your first extraction query with auto-pagination.
|
|
1
|
+
# Module 1: Foundations
|
|
2
|
+
|
|
3
|
+
**Level:** Beginner
|
|
4
|
+
**Estimated Time:** 15 minutes
|
|
5
|
+
|
|
6
|
+
## Overview
|
|
7
|
+
|
|
8
|
+
This module covers the fundamental concepts of data extraction from Fluent Commerce, including workflow patterns, schema validation, and key architectural decisions.
|
|
9
|
+
|
|
10
|
+
## Learning Objectives
|
|
11
|
+
|
|
12
|
+
By the end of this module, you will:
|
|
13
|
+
|
|
14
|
+
- ✅ Understand the data extraction workflow and its components
|
|
15
|
+
- ✅ Know how to validate GraphQL queries against the Fluent schema
|
|
16
|
+
- ✅ Recognize when to use extraction vs ingestion
|
|
17
|
+
- ✅ Understand the role of pagination, enrichment, and transformation
|
|
18
|
+
|
|
19
|
+
## What is Data Extraction?
|
|
20
|
+
|
|
21
|
+
Data extraction is the process of retrieving data from Fluent Commerce and transforming it for use in external systems. This is the opposite of ingestion (writing data to Fluent).
|
|
22
|
+
|
|
23
|
+
**Common use cases:**
|
|
24
|
+
|
|
25
|
+
- **Analytics & Reporting**: Export orders, inventory to data warehouses
|
|
26
|
+
- **Synchronization**: Keep external systems in sync with Fluent data
|
|
27
|
+
- **Backups**: Archive historical data for compliance
|
|
28
|
+
- **Integrations**: Feed data to ERPs, WMS, analytics tools
|
|
29
|
+
- **Data Migration**: Move data between environments or systems
|
|
30
|
+
|
|
31
|
+
## Extraction Workflow
|
|
32
|
+
|
|
33
|
+
### High-Level Flow
|
|
34
|
+
|
|
35
|
+
```mermaid
|
|
36
|
+
graph LR
|
|
37
|
+
A[Source] --> B[Extract]
|
|
38
|
+
B --> C[Enrich]
|
|
39
|
+
C --> D[Transform]
|
|
40
|
+
D --> E[Export]
|
|
41
|
+
|
|
42
|
+
A --> A1[GraphQL API]
|
|
43
|
+
A --> A2[Parquet Files]
|
|
44
|
+
|
|
45
|
+
B --> B1[GraphQL Queries]
|
|
46
|
+
B --> B2[Auto-Pagination]
|
|
47
|
+
|
|
48
|
+
C --> C1[Batch Queries]
|
|
49
|
+
C --> C2[Related Data]
|
|
50
|
+
|
|
51
|
+
D --> D1[Field Mapping]
|
|
52
|
+
D --> D2[Custom Logic]
|
|
53
|
+
|
|
54
|
+
E --> E1[S3/SFTP]
|
|
55
|
+
E --> E2[JSON/XML/Parquet]
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Workflow Components
|
|
59
|
+
|
|
60
|
+
#### 1. Source
|
|
61
|
+
|
|
62
|
+
Where data originates:
|
|
63
|
+
|
|
64
|
+
- **Fluent GraphQL API**: Direct queries to Fluent Commerce
|
|
65
|
+
- **Parquet Files**: Pre-exported data from S3/SFTP
|
|
66
|
+
- **Hybrid**: Parquet base data enriched with GraphQL
|
|
67
|
+
|
|
68
|
+
#### 2. Extract
|
|
69
|
+
|
|
70
|
+
Retrieve data from source:
|
|
71
|
+
|
|
72
|
+
- **GraphQL Queries**: Fetch entities using validated queries
|
|
73
|
+
- **Auto-Pagination**: Automatically handle large datasets
|
|
74
|
+
- **Filtering**: Use GraphQL filters to narrow results
|
|
75
|
+
|
|
76
|
+
#### 3. Enrich
|
|
77
|
+
|
|
78
|
+
Add related data:
|
|
79
|
+
|
|
80
|
+
- **Batch Queries**: Fetch related entities efficiently
|
|
81
|
+
- **Nested Relations**: Use GraphQL to expand relations
|
|
82
|
+
- **Computed Fields**: Calculate derived values
|
|
83
|
+
|
|
84
|
+
#### 4. Transform
|
|
85
|
+
|
|
86
|
+
Convert to target format:
|
|
87
|
+
|
|
88
|
+
- **Field Mapping**: Rename/restructure fields
|
|
89
|
+
- **Data Conversion**: Change types, formats, units
|
|
90
|
+
- **Business Logic**: Apply custom transformations
|
|
91
|
+
|
|
92
|
+
#### 5. Export
|
|
93
|
+
|
|
94
|
+
Output to destination:
|
|
95
|
+
|
|
96
|
+
- **File Formats**: JSON, JSONL, CSV, XML, Parquet
|
|
97
|
+
- **Destinations**: S3, SFTP, HTTP endpoints
|
|
98
|
+
- **Compression**: Gzip, zip for large files
|
|
99
|
+
|
|
100
|
+
## Schema Validation - Critical First Step
|
|
101
|
+
|
|
102
|
+
⚠️ **IMPORTANT**: Before writing any extraction query, you MUST validate it against your Fluent Commerce schema. Using incorrect field names will cause runtime errors.
|
|
103
|
+
|
|
104
|
+
### Why Schema Validation Matters
|
|
105
|
+
|
|
106
|
+
**Problem**: GraphQL queries with invalid fields fail at runtime:
|
|
107
|
+
|
|
108
|
+
```typescript
|
|
109
|
+
// ❌ This query will FAIL if 'quantity' doesn't exist
|
|
110
|
+
query GetInventory {
|
|
111
|
+
inventoryPositions(first: 100) {
|
|
112
|
+
edges {
|
|
113
|
+
node {
|
|
114
|
+
quantity // ❌ Field might not exist!
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**Solution**: Introspect schema first to discover real field names:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
# Step 1: Introspect your Fluent schema
|
|
125
|
+
npx fc-connect introspect-schema \
|
|
126
|
+
--url https://YOUR_ACCOUNT.api.fluentcommerce.com/graphql \
|
|
127
|
+
--client-id YOUR_CLIENT_ID \
|
|
128
|
+
--client-secret YOUR_CLIENT_SECRET \
|
|
129
|
+
--output schema.json
|
|
130
|
+
|
|
131
|
+
# Step 2: Open schema.json and search for entity types
|
|
132
|
+
# Example: Search for "type InventoryPosition" to see real fields
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Validated Query Example
|
|
136
|
+
|
|
137
|
+
✅ **All queries in this guide are validated against** [`docs/schema/fluent-commerce-schema.json`](../../../04-REFERENCE/schema/fluent-commerce-schema.json)
|
|
138
|
+
|
|
139
|
+
```graphql
|
|
140
|
+
# ✅ VALIDATED: These fields exist in Fluent schema
|
|
141
|
+
query GetInventory($first: Int!, $after: String) {
|
|
142
|
+
inventoryPositions(first: $first, after: $after) {
|
|
143
|
+
edges {
|
|
144
|
+
node {
|
|
145
|
+
id # ✅ InventoryPosition.id (ID!)
|
|
146
|
+
ref # ✅ InventoryPosition.ref (String!)
|
|
147
|
+
productRef # ✅ InventoryPosition.productRef (String!)
|
|
148
|
+
locationRef # ✅ InventoryPosition.locationRef (String!)
|
|
149
|
+
qty # ✅ InventoryPosition.qty (Int!) - NOT 'quantity'!
|
|
150
|
+
status # ✅ InventoryPosition.status (String)
|
|
151
|
+
createdOn # ✅ InventoryPosition.createdOn (DateTime)
|
|
152
|
+
updatedOn # ✅ InventoryPosition.updatedOn (DateTime)
|
|
153
|
+
}
|
|
154
|
+
cursor
|
|
155
|
+
}
|
|
156
|
+
pageInfo {
|
|
157
|
+
hasNextPage # ✅ PageInfo.hasNextPage (Boolean!)
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Schema Field Verification Process
|
|
164
|
+
|
|
165
|
+
1. **Introspect schema** (see command above)
|
|
166
|
+
2. **Find entity type** in schema.json:
|
|
167
|
+
```json
|
|
168
|
+
{
|
|
169
|
+
"name": "InventoryPosition",
|
|
170
|
+
"fields": [
|
|
171
|
+
{ "name": "id", "type": { "name": "ID" } },
|
|
172
|
+
{ "name": "ref", "type": { "name": "String" } },
|
|
173
|
+
{ "name": "qty", "type": { "name": "Int" } }
|
|
174
|
+
]
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
3. **Use exact field names** in your queries
|
|
178
|
+
4. **Check field types** to ensure correct usage
|
|
179
|
+
|
|
180
|
+
## Extraction vs Ingestion
|
|
181
|
+
|
|
182
|
+
| Aspect | Extraction | Ingestion |
|
|
183
|
+
| ---------------- | ------------------------------------------ | --------------------------------------- |
|
|
184
|
+
| **Direction** | Fluent → External | External → Fluent |
|
|
185
|
+
| **Operations** | GraphQL Queries | GraphQL Mutations |
|
|
186
|
+
| **Pagination** | Auto-pagination | Batch API |
|
|
187
|
+
| **Use Case** | Analytics, sync, backup | Create/update entities |
|
|
188
|
+
| **SDK Services** | `client.graphql()`, `ExtractionOrchestrator`, `ParquetParserService` | `FluentBatchManager`, `UniversalMapper` |
|
|
189
|
+
|
|
190
|
+
## Key Concepts
|
|
191
|
+
|
|
192
|
+
### 1. Cursor-Based Pagination
|
|
193
|
+
|
|
194
|
+
Fluent Commerce uses Relay-style cursor pagination with support for both forward and backward pagination:
|
|
195
|
+
|
|
196
|
+
**Forward Pagination (most common):**
|
|
197
|
+
```typescript
|
|
198
|
+
// First page
|
|
199
|
+
{
|
|
200
|
+
first: 100,
|
|
201
|
+
after: null
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Subsequent pages
|
|
205
|
+
{
|
|
206
|
+
first: 100,
|
|
207
|
+
after: "cursor_from_last_edge"
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// Response structure
|
|
211
|
+
{
|
|
212
|
+
edges: [
|
|
213
|
+
{ node: { ...data }, cursor: "abc123" }
|
|
214
|
+
],
|
|
215
|
+
pageInfo: {
|
|
216
|
+
hasNextPage: true // More pages available
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
**Backward Pagination (for reverse order):**
|
|
222
|
+
```typescript
|
|
223
|
+
// Last page
|
|
224
|
+
{
|
|
225
|
+
last: 100,
|
|
226
|
+
before: null
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// Previous pages
|
|
230
|
+
{
|
|
231
|
+
last: 100,
|
|
232
|
+
before: "cursor_from_first_edge"
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// Response structure
|
|
236
|
+
{
|
|
237
|
+
edges: [
|
|
238
|
+
{ node: { ...data }, cursor: "abc123" }
|
|
239
|
+
],
|
|
240
|
+
pageInfo: {
|
|
241
|
+
hasPreviousPage: true // More pages available (backwards)
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**Important**: Fluent does NOT return `pageInfo.endCursor` or `pageInfo.startCursor` (deviation from Relay spec). Use edge cursors instead:
|
|
247
|
+
|
|
248
|
+
```typescript
|
|
249
|
+
// Forward pagination - use last cursor
|
|
250
|
+
const lastEdge = result.data.inventoryPositions.edges[edges.length - 1];
|
|
251
|
+
const cursor = lastEdge?.cursor;
|
|
252
|
+
|
|
253
|
+
// Backward pagination - use first cursor
|
|
254
|
+
const firstEdge = result.data.inventoryPositions.edges[0];
|
|
255
|
+
const cursor = firstEdge?.cursor;
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
See [Auto-Pagination Guide](../../auto-pagination/) and [Module 8: ExtractionOrchestrator](./02-core-guides-extraction-08-extraction-orchestrator.md) for automatic handling of both directions.
|
|
259
|
+
|
|
260
|
+
### 2. Data Enrichment
|
|
261
|
+
|
|
262
|
+
**Flat extraction** (basic fields only):
|
|
263
|
+
|
|
264
|
+
```typescript
|
|
265
|
+
query GetInventory {
|
|
266
|
+
inventoryPositions(first: 100) {
|
|
267
|
+
edges {
|
|
268
|
+
node {
|
|
269
|
+
ref
|
|
270
|
+
productRef
|
|
271
|
+
qty
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
**Enriched extraction** (with related data):
|
|
279
|
+
|
|
280
|
+
```typescript
|
|
281
|
+
query GetInventoryEnriched {
|
|
282
|
+
inventoryPositions(first: 100) {
|
|
283
|
+
edges {
|
|
284
|
+
node {
|
|
285
|
+
ref
|
|
286
|
+
productRef
|
|
287
|
+
qty
|
|
288
|
+
product {
|
|
289
|
+
ref
|
|
290
|
+
name
|
|
291
|
+
gtin
|
|
292
|
+
catalogue { ref name }
|
|
293
|
+
}
|
|
294
|
+
location {
|
|
295
|
+
ref
|
|
296
|
+
name
|
|
297
|
+
type
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
**Benefits of enrichment**:
|
|
306
|
+
|
|
307
|
+
- Fewer total API calls (1 query vs N+1 queries)
|
|
308
|
+
- Consistent data snapshot
|
|
309
|
+
- Simplified downstream processing
|
|
310
|
+
|
|
311
|
+
### 3. Field Mapping
|
|
312
|
+
|
|
313
|
+
Transform Fluent data to external format:
|
|
314
|
+
|
|
315
|
+
```typescript
|
|
316
|
+
// Source (Fluent)
|
|
317
|
+
{
|
|
318
|
+
"productRef": "SKU-001",
|
|
319
|
+
"locationRef": "WH-001",
|
|
320
|
+
"qty": 100,
|
|
321
|
+
"status": "AVAILABLE"
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
// Target (External System)
|
|
325
|
+
{
|
|
326
|
+
"sku": "SKU-001",
|
|
327
|
+
"warehouse": "WH-001",
|
|
328
|
+
"quantity": 100,
|
|
329
|
+
"status": "in_stock"
|
|
330
|
+
}
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
**Use `UniversalMapper` for automated transformation**:
|
|
334
|
+
|
|
335
|
+
```typescript
|
|
336
|
+
import { UniversalMapper } from '@fluentcommerce/fc-connect-sdk';
|
|
337
|
+
|
|
338
|
+
const mapper = new UniversalMapper({
|
|
339
|
+
fields: {
|
|
340
|
+
sku: { source: 'productRef' },
|
|
341
|
+
warehouse: { source: 'locationRef' },
|
|
342
|
+
quantity: { source: 'qty', resolver: 'sdk.parseInt' },
|
|
343
|
+
status: { source: 'status', resolver: 'sdk.lowercase' },
|
|
344
|
+
},
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
const result = await mapper.map(sourceData);
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
### 4. Export Formats
|
|
351
|
+
|
|
352
|
+
| Format | Use Case | SDK Support |
|
|
353
|
+
| ----------- | ---------------------- | -------------------------- |
|
|
354
|
+
| **JSON** | REST APIs, web apps | Native |
|
|
355
|
+
| **JSONL** | Streaming, big data | Native |
|
|
356
|
+
| **CSV** | Spreadsheets, BI tools | Via `csv-stringify` |
|
|
357
|
+
| **XML** | Enterprise integrations | Via `xml2js` |
|
|
358
|
+
| **Parquet** | Data lakes, analytics | Via `ParquetParserService` |
|
|
359
|
+
|
|
360
|
+
## Extraction Strategies
|
|
361
|
+
|
|
362
|
+
### 1. Full Extraction
|
|
363
|
+
|
|
364
|
+
Extract entire dataset periodically:
|
|
365
|
+
|
|
366
|
+
**Pros:**
|
|
367
|
+
|
|
368
|
+
- Simple to implement
|
|
369
|
+
- Complete data snapshot
|
|
370
|
+
- No state tracking needed
|
|
371
|
+
|
|
372
|
+
**Cons:**
|
|
373
|
+
|
|
374
|
+
- Large data transfer
|
|
375
|
+
- Slower for large datasets
|
|
376
|
+
- May hit rate limits
|
|
377
|
+
|
|
378
|
+
**When to use:** Small datasets, infrequent syncs, backups
|
|
379
|
+
|
|
380
|
+
### 2. Delta (Incremental) Extraction
|
|
381
|
+
|
|
382
|
+
Extract only changed records since last run:
|
|
383
|
+
|
|
384
|
+
**Pros:**
|
|
385
|
+
|
|
386
|
+
- Minimal data transfer
|
|
387
|
+
- Fast execution
|
|
388
|
+
- Efficient for large datasets
|
|
389
|
+
|
|
390
|
+
**Cons:**
|
|
391
|
+
|
|
392
|
+
- Requires state management
|
|
393
|
+
- More complex logic
|
|
394
|
+
- Risk of missing updates if state is lost
|
|
395
|
+
|
|
396
|
+
**When to use:** Large datasets, frequent syncs, real-time needs
|
|
397
|
+
|
|
398
|
+
### 3. Streaming Extraction
|
|
399
|
+
|
|
400
|
+
Process data in batches as it's fetched:
|
|
401
|
+
|
|
402
|
+
**Pros:**
|
|
403
|
+
|
|
404
|
+
- Memory efficient
|
|
405
|
+
- Can handle unlimited dataset size
|
|
406
|
+
- Start processing immediately
|
|
407
|
+
|
|
408
|
+
**Cons:**
|
|
409
|
+
|
|
410
|
+
- More complex implementation
|
|
411
|
+
- Cannot compute totals upfront
|
|
412
|
+
- Requires streaming destination
|
|
413
|
+
|
|
414
|
+
**When to use:** Very large datasets, memory constraints, real-time processing
|
|
415
|
+
|
|
416
|
+
## Performance Considerations
|
|
417
|
+
|
|
418
|
+
### Query Optimization
|
|
419
|
+
|
|
420
|
+
**❌ BAD: Fetch all fields**
|
|
421
|
+
|
|
422
|
+
```graphql
|
|
423
|
+
query GetProducts {
|
|
424
|
+
products(first: 100) {
|
|
425
|
+
edges {
|
|
426
|
+
node {
|
|
427
|
+
id ref name description gtin price
|
|
428
|
+
catalogue { ... }
|
|
429
|
+
attributes { ... }
|
|
430
|
+
categories { ... }
|
|
431
|
+
inventoryPositions { ... }
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
**✅ GOOD: Fetch only needed fields**
|
|
439
|
+
|
|
440
|
+
```graphql
|
|
441
|
+
query GetProducts {
|
|
442
|
+
products(first: 100) {
|
|
443
|
+
edges {
|
|
444
|
+
node {
|
|
445
|
+
ref
|
|
446
|
+
name
|
|
447
|
+
gtin
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
### Pagination Tuning
|
|
455
|
+
|
|
456
|
+
| Entity Complexity | Page Size | Rationale |
|
|
457
|
+
| -------------------------- | --------- | ----------------------------- |
|
|
458
|
+
| Simple (5-10 fields) | 100-200 | Small payload per record |
|
|
459
|
+
| Medium (10-20 fields) | 50-100 | Moderate payload |
|
|
460
|
+
| Complex (nested relations) | 20-50 | Large payload, avoid timeouts |
|
|
461
|
+
|
|
462
|
+
### Batch Enrichment
|
|
463
|
+
|
|
464
|
+
**❌ BAD: N+1 queries**
|
|
465
|
+
|
|
466
|
+
```typescript
|
|
467
|
+
for (const record of records) {
|
|
468
|
+
const product = await client.graphql({
|
|
469
|
+
query: `query { product(ref: "${record.productRef}") { ... } }`,
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
// 1000 records = 1000 API calls!
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
**✅ GOOD: Batch query**
|
|
476
|
+
|
|
477
|
+
```typescript
|
|
478
|
+
const refs = records.map(r => r.productRef);
|
|
479
|
+
const products = await client.graphql({
|
|
480
|
+
query: `
|
|
481
|
+
query GetProducts($refs: [String!]!) {
|
|
482
|
+
products(filter: { ref: { in: $refs } }, first: 100) {
|
|
483
|
+
edges { node { ref name } }
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
`,
|
|
487
|
+
variables: { refs },
|
|
488
|
+
});
|
|
489
|
+
// 1000 records = 10 API calls (batches of 100)
|
|
490
|
+
```
|
|
491
|
+
|
|
492
|
+
## Practice Exercise
|
|
493
|
+
|
|
494
|
+
**Goal**: Extract all virtual positions with product details
|
|
495
|
+
|
|
496
|
+
1. Create a GraphQL query for `virtualPositions`
|
|
497
|
+
2. Include product relation fields
|
|
498
|
+
3. Validate query against schema
|
|
499
|
+
4. Implement with auto-pagination
|
|
500
|
+
|
|
501
|
+
**Solution**: See [Module 2: Basic Extraction](./02-core-guides-extraction-02-basic-extraction.md#complete-example)
|
|
502
|
+
|
|
503
|
+
## Key Takeaways
|
|
504
|
+
|
|
505
|
+
- 🎯 Always validate GraphQL queries against schema before use
|
|
506
|
+
- 🎯 Understand the extraction workflow: Extract → Enrich → Transform → Export
|
|
507
|
+
- 🎯 Choose the right strategy: Full, Delta, or Streaming extraction
|
|
508
|
+
- 🎯 Optimize queries: Select only needed fields, batch enrichment
|
|
509
|
+
- 🎯 Use auto-pagination for large datasets
|
|
510
|
+
- 🎯 Plan for error handling and retry logic
|
|
511
|
+
|
|
512
|
+
## Next Steps
|
|
513
|
+
|
|
514
|
+
Continue to [Module 2: Basic Extraction](./02-core-guides-extraction-02-basic-extraction.md) to learn how to write your first extraction query with auto-pagination.
|