@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,362 +1,362 @@
|
|
|
1
|
-
# Module 1: Foundations
|
|
2
|
-
|
|
3
|
-
**Level:** Beginner
|
|
4
|
-
**Estimated Time:** 15 minutes
|
|
5
|
-
|
|
6
|
-
## Overview
|
|
7
|
-
|
|
8
|
-
This module covers the fundamental principles of error handling in the Fluent Connect SDK, including the fail-fast philosophy that ensures data integrity by preventing partial or corrupt data from being created.
|
|
9
|
-
|
|
10
|
-
## Learning Objectives
|
|
11
|
-
|
|
12
|
-
By the end of this module, you will:
|
|
13
|
-
- ✅ Understand the fail-fast error handling philosophy
|
|
14
|
-
- ✅ Know why preventing partial data is critical
|
|
15
|
-
- ✅ Understand the error propagation chain
|
|
16
|
-
- ✅ Recognize the three core principles of SDK error handling
|
|
17
|
-
|
|
18
|
-
## The Fail-Fast Philosophy
|
|
19
|
-
|
|
20
|
-
### The Problem: Partial Data Corruption
|
|
21
|
-
|
|
22
|
-
In traditional error handling, errors might occur after some data has already been written:
|
|
23
|
-
|
|
24
|
-
```typescript
|
|
25
|
-
// ❌ RISKY: Without fail-fast protection
|
|
26
|
-
async function processOrder(data: any) {
|
|
27
|
-
const order = await createOrder(data.order); // ✅ Created
|
|
28
|
-
const customer = await createCustomer(data.customer); // ✅ Created
|
|
29
|
-
const items = await createItems(data.items); // ❌ FAILS HERE!
|
|
30
|
-
|
|
31
|
-
// Now what? Order and customer exist, but items don't
|
|
32
|
-
// Partial data = corrupt state = data integrity violation
|
|
33
|
-
}
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
**Result**: You have an order and customer in Fluent, but no items. Your data is now in an inconsistent state.
|
|
37
|
-
|
|
38
|
-
### The Solution: Fail-Fast Guarantee
|
|
39
|
-
|
|
40
|
-
The SDK prevents this by **validating everything before executing any mutations**:
|
|
41
|
-
|
|
42
|
-
```typescript
|
|
43
|
-
// ✅ SAFE: With fail-fast protection
|
|
44
|
-
async function processOrder(xmlContent: string) {
|
|
45
|
-
try {
|
|
46
|
-
// Step 1: Parse XML (validate structure)
|
|
47
|
-
const parsed = await parser.parse(xmlContent);
|
|
48
|
-
|
|
49
|
-
// Step 2: Map to mutation variables (validate fields)
|
|
50
|
-
const payload = await mapper.map(parsed);
|
|
51
|
-
|
|
52
|
-
// Step 3: Execute mutation (ONLY if Steps 1 and 2 succeed)
|
|
53
|
-
const result = await client.graphql(payload);
|
|
54
|
-
|
|
55
|
-
return result.data; // ✅ Complete data or nothing
|
|
56
|
-
|
|
57
|
-
} catch (error) {
|
|
58
|
-
// Error at ANY step = NO data sent to Fluent
|
|
59
|
-
// NO partial records, NO corrupt data
|
|
60
|
-
throw error;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
**Result**: Either all data is created successfully, or nothing is created. No partial state possible.
|
|
66
|
-
|
|
67
|
-
## The Fail-Fast Guarantee
|
|
68
|
-
|
|
69
|
-
### What It Means
|
|
70
|
-
|
|
71
|
-
**When any error occurs during parsing, mapping, or validation, the GraphQL mutation is NEVER sent to Fluent Commerce.**
|
|
72
|
-
|
|
73
|
-
This means:
|
|
74
|
-
- ✅ No partial data created
|
|
75
|
-
- ✅ No orphaned records
|
|
76
|
-
- ✅ No data integrity violations
|
|
77
|
-
- ✅ No manual cleanup required
|
|
78
|
-
- ✅ Predictable error states
|
|
79
|
-
|
|
80
|
-
### When Errors Are Caught
|
|
81
|
-
|
|
82
|
-
```
|
|
83
|
-
┌─────────────────────────────────────────────────────┐
|
|
84
|
-
│ VALIDATION PHASE (No data sent to Fluent) │
|
|
85
|
-
├─────────────────────────────────────────────────────┤
|
|
86
|
-
│ │
|
|
87
|
-
│ Parse XML/JSON/CSV │
|
|
88
|
-
│ ↓ (throws FileParsingError if invalid) │
|
|
89
|
-
│ │
|
|
90
|
-
│ Resolve Field Paths │
|
|
91
|
-
│ ↓ (throws PathResolutionError if path missing) │
|
|
92
|
-
│ │
|
|
93
|
-
│ Map Fields to Mutation │
|
|
94
|
-
│ ↓ (throws MappingError if required field empty) │
|
|
95
|
-
│ │
|
|
96
|
-
│ Validate Data Rules │
|
|
97
|
-
│ ↓ (throws ValidationError if rules fail) │
|
|
98
|
-
│ │
|
|
99
|
-
└─────────────────────────────────────────────────────┘
|
|
100
|
-
│
|
|
101
|
-
│ ✅ All validations passed
|
|
102
|
-
↓
|
|
103
|
-
┌─────────────────────────────────────────────────────┐
|
|
104
|
-
│ EXECUTION PHASE (Data sent to Fluent) │
|
|
105
|
-
├─────────────────────────────────────────────────────┤
|
|
106
|
-
│ │
|
|
107
|
-
│ Execute GraphQL Mutation │
|
|
108
|
-
│ ↓ │
|
|
109
|
-
│ │
|
|
110
|
-
│ ✅ ALL DATA COMMITTED or ❌ FLUENT REJECTS ALL │
|
|
111
|
-
│ │
|
|
112
|
-
└─────────────────────────────────────────────────────┘
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
## Core Principles
|
|
116
|
-
|
|
117
|
-
### 1. One Error Stops Everything
|
|
118
|
-
|
|
119
|
-
A single failure at any validation stage prevents the entire mutation from executing:
|
|
120
|
-
|
|
121
|
-
```typescript
|
|
122
|
-
// Even if 99 fields are valid...
|
|
123
|
-
const payload = {
|
|
124
|
-
field1: "valid",
|
|
125
|
-
field2: "valid",
|
|
126
|
-
// ... 97 more valid fields
|
|
127
|
-
field100: undefined // ❌ This ONE missing required field
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
// The ENTIRE mutation is blocked
|
|
131
|
-
// Result: NO data sent to Fluent
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
### 2. No Partial Data
|
|
135
|
-
|
|
136
|
-
The SDK ensures atomic operations - all data succeeds or all data fails:
|
|
137
|
-
|
|
138
|
-
```typescript
|
|
139
|
-
// Creating order with 100 line items
|
|
140
|
-
const mutation = `
|
|
141
|
-
mutation CreateOrder($input: CreateOrderInput!) {
|
|
142
|
-
createOrder(input: $input) {
|
|
143
|
-
id
|
|
144
|
-
items { id } # 100 items
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
`;
|
|
148
|
-
|
|
149
|
-
// If ANY of the 100 items fails validation:
|
|
150
|
-
// - Mutation is NOT sent
|
|
151
|
-
// - Order is NOT created
|
|
152
|
-
// - NO items are created
|
|
153
|
-
// Result: Clean failure, no cleanup needed
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
### 3. Clear Error Context
|
|
157
|
-
|
|
158
|
-
Every error includes detailed information about what went wrong and where:
|
|
159
|
-
|
|
160
|
-
```typescript
|
|
161
|
-
catch (error) {
|
|
162
|
-
if (error instanceof MappingError) {
|
|
163
|
-
console.log(error.field); // "customerEmail"
|
|
164
|
-
console.log(error.sourcePath); // "order.customer.email"
|
|
165
|
-
console.log(error.message); // "Required field 'customerEmail' is missing or empty"
|
|
166
|
-
|
|
167
|
-
// You know EXACTLY what failed and why
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
## Error Propagation Chain
|
|
173
|
-
|
|
174
|
-
### How Errors Flow Through the SDK
|
|
175
|
-
|
|
176
|
-
```typescript
|
|
177
|
-
try {
|
|
178
|
-
// 1️⃣ PARSING
|
|
179
|
-
const parsed = await parser.parse(xmlContent);
|
|
180
|
-
// Throws: FileParsingError if XML/JSON/CSV is malformed
|
|
181
|
-
|
|
182
|
-
} catch (error) {
|
|
183
|
-
// ❌ Stops here - mutation never attempted
|
|
184
|
-
throw error;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
try {
|
|
188
|
-
// 2️⃣ PATH RESOLUTION
|
|
189
|
-
const mapper = new GraphQLMutationMapper(config, logger, { fluentClient: client });
|
|
190
|
-
// Validates all source paths exist in parsed data
|
|
191
|
-
// Throws: PathResolutionError if path doesn't exist
|
|
192
|
-
|
|
193
|
-
} catch (error) {
|
|
194
|
-
// ❌ Stops here - mutation never attempted
|
|
195
|
-
throw error;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
try {
|
|
199
|
-
// 3️⃣ FIELD MAPPING
|
|
200
|
-
const payload = await mapper.map(parsed);
|
|
201
|
-
// Validates required fields, array constraints, etc.
|
|
202
|
-
// Throws: MappingError if validation fails
|
|
203
|
-
|
|
204
|
-
} catch (error) {
|
|
205
|
-
// ❌ Stops here - mutation never attempted
|
|
206
|
-
throw error;
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
try {
|
|
210
|
-
// 4️⃣ EXECUTION (only reached if all above succeed)
|
|
211
|
-
// Throws GraphQLExecutionError if Fluent returns errors
|
|
212
|
-
const result = await client.graphql(payload);
|
|
213
|
-
|
|
214
|
-
// ✅ SUCCESS - All data created
|
|
215
|
-
return result.data;
|
|
216
|
-
|
|
217
|
-
} catch (error) {
|
|
218
|
-
// Either network error, or Fluent rejected the entire mutation
|
|
219
|
-
throw error;
|
|
220
|
-
}
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
### Sequential Validation
|
|
224
|
-
|
|
225
|
-
Each stage must pass before the next begins:
|
|
226
|
-
|
|
227
|
-
| Stage | Validates | Throws On Failure | Mutation Sent? |
|
|
228
|
-
|-------|-----------|------------------|----------------|
|
|
229
|
-
| 1. Parsing | File format, syntax | `FileParsingError` | ❌ No |
|
|
230
|
-
| 2. Path Resolution | Source paths exist | `PathResolutionError` | ❌ No |
|
|
231
|
-
| 3. Field Mapping | Required fields, types | `MappingError` | ❌ No |
|
|
232
|
-
| 4. Data Validation | Business rules | `ValidationError` | ❌ No |
|
|
233
|
-
| 5. Execution | Network, API | `IngestionError` (NETWORK_ERROR), GraphQL errors | ✅ Yes, but Fluent can still reject |
|
|
234
|
-
|
|
235
|
-
## Why This Matters
|
|
236
|
-
|
|
237
|
-
### Data Integrity
|
|
238
|
-
|
|
239
|
-
```typescript
|
|
240
|
-
// ❌ WITHOUT fail-fast
|
|
241
|
-
// Scenario: Processing 1000 orders
|
|
242
|
-
// Order 1-500: ✅ Created
|
|
243
|
-
// Order 501: ❌ Fails (missing required field)
|
|
244
|
-
// Order 502-1000: Never processed
|
|
245
|
-
// Result: Partial import, data reconciliation nightmare
|
|
246
|
-
|
|
247
|
-
// ✅ WITH fail-fast
|
|
248
|
-
// Order 1: Validation fails on required field
|
|
249
|
-
// Orders 1-1000: ❌ None created
|
|
250
|
-
// Result: Clear error, fix issue, retry all - clean process
|
|
251
|
-
```
|
|
252
|
-
|
|
253
|
-
### Predictable Error States
|
|
254
|
-
|
|
255
|
-
With fail-fast, you have only two possible states:
|
|
256
|
-
|
|
257
|
-
1. ✅ **Complete Success** - All data created exactly as specified
|
|
258
|
-
2. ❌ **Complete Failure** - No data created, clear error message
|
|
259
|
-
|
|
260
|
-
**Never** a partial success state that requires manual investigation and cleanup.
|
|
261
|
-
|
|
262
|
-
## Real-World Example
|
|
263
|
-
|
|
264
|
-
### Scenario: SFCC Order Integration
|
|
265
|
-
|
|
266
|
-
```typescript
|
|
267
|
-
import { XMLParserService, GraphQLMutationMapper } from '@fluentcommerce/fc-connect-sdk';
|
|
268
|
-
|
|
269
|
-
async function ingestSFCCOrder(xmlContent: string) {
|
|
270
|
-
const logger = console;
|
|
271
|
-
|
|
272
|
-
try {
|
|
273
|
-
// Parse SFCC XML
|
|
274
|
-
const parser = new XMLParserService();
|
|
275
|
-
const parsed = await parser.parse(xmlContent);
|
|
276
|
-
|
|
277
|
-
logger.info('✅ Parsing successful');
|
|
278
|
-
|
|
279
|
-
// Map to Fluent createOrder mutation
|
|
280
|
-
const mapper = new GraphQLMutationMapper(mappingConfig, logger, { fluentClient: client });
|
|
281
|
-
const payload = await mapper.map(parsed);
|
|
282
|
-
|
|
283
|
-
logger.info('✅ Mapping successful');
|
|
284
|
-
|
|
285
|
-
// Execute mutation
|
|
286
|
-
// Throws GraphQLExecutionError if Fluent returns errors
|
|
287
|
-
const result = await client.graphql(payload);
|
|
288
|
-
|
|
289
|
-
logger.info('✅ Order created successfully', { orderId: result.data.createOrder.id });
|
|
290
|
-
|
|
291
|
-
return result.data.createOrder;
|
|
292
|
-
|
|
293
|
-
} catch (error) {
|
|
294
|
-
logger.error('❌ Order ingestion failed - NO DATA CREATED', { error });
|
|
295
|
-
|
|
296
|
-
// Because of fail-fast:
|
|
297
|
-
// - If parsing failed: No mutation sent
|
|
298
|
-
// - If mapping failed: No mutation sent
|
|
299
|
-
// - If Fluent rejected: Entire order rejected, not partial
|
|
300
|
-
|
|
301
|
-
throw error; // Re-throw for upstream handling
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
```
|
|
305
|
-
|
|
306
|
-
### What Happens on Error
|
|
307
|
-
|
|
308
|
-
**Parsing Error:**
|
|
309
|
-
```typescript
|
|
310
|
-
// Invalid XML: <order><customer>Missing closing tag
|
|
311
|
-
// Result: FileParsingError thrown
|
|
312
|
-
// Mutation sent? NO
|
|
313
|
-
// Data in Fluent? NO
|
|
314
|
-
// State: Clean - fix XML and retry
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
**Mapping Error:**
|
|
318
|
-
```typescript
|
|
319
|
-
// Required field missing: customer.email is undefined
|
|
320
|
-
// Result: MappingError thrown
|
|
321
|
-
// Mutation sent? NO
|
|
322
|
-
// Data in Fluent? NO
|
|
323
|
-
// State: Clean - fix data and retry
|
|
324
|
-
```
|
|
325
|
-
|
|
326
|
-
**GraphQL Error:**
|
|
327
|
-
```typescript
|
|
328
|
-
// Invalid field in mutation: unknownField
|
|
329
|
-
// Result: GraphQL validation error from Fluent
|
|
330
|
-
// Mutation sent? YES
|
|
331
|
-
// Data in Fluent? NO (Fluent rejected entire mutation)
|
|
332
|
-
// State: Clean - fix mapping config and retry
|
|
333
|
-
```
|
|
334
|
-
|
|
335
|
-
## Key Takeaways
|
|
336
|
-
|
|
337
|
-
- 🎯 **Fail-fast prevents partial data** - Either all data succeeds or no data is created
|
|
338
|
-
- 🎯 **Errors caught early** - Validation happens before any API calls
|
|
339
|
-
- 🎯 **Sequential validation** - Each stage must pass before the next begins
|
|
340
|
-
- 🎯 **Clear error states** - Only two outcomes: complete success or complete failure
|
|
341
|
-
- 🎯 **No manual cleanup** - Failed operations leave no trace in Fluent Commerce
|
|
342
|
-
|
|
343
|
-
## Practice Exercise
|
|
344
|
-
|
|
345
|
-
Try to answer these questions:
|
|
346
|
-
|
|
347
|
-
1. At what point in the pipeline is a GraphQL mutation sent to Fluent?
|
|
348
|
-
2. If parsing succeeds but mapping fails, is any data created in Fluent?
|
|
349
|
-
3. What are the two possible outcomes when using fail-fast error handling?
|
|
350
|
-
|
|
351
|
-
<details>
|
|
352
|
-
<summary>Click to see answers</summary>
|
|
353
|
-
|
|
354
|
-
1. **After** parsing, path resolution, field mapping, and validation all succeed
|
|
355
|
-
2. **No** - mapping errors prevent the mutation from being sent
|
|
356
|
-
3. **Complete success** (all data created) or **complete failure** (no data created)
|
|
357
|
-
|
|
358
|
-
</details>
|
|
359
|
-
|
|
360
|
-
## Next Steps
|
|
361
|
-
|
|
362
|
-
Continue to [Module 2: Error Types & Codes →](./error-handling-02-error-types.md) to learn about all the error classes and error codes available in the SDK.
|
|
1
|
+
# Module 1: Foundations
|
|
2
|
+
|
|
3
|
+
**Level:** Beginner
|
|
4
|
+
**Estimated Time:** 15 minutes
|
|
5
|
+
|
|
6
|
+
## Overview
|
|
7
|
+
|
|
8
|
+
This module covers the fundamental principles of error handling in the Fluent Connect SDK, including the fail-fast philosophy that ensures data integrity by preventing partial or corrupt data from being created.
|
|
9
|
+
|
|
10
|
+
## Learning Objectives
|
|
11
|
+
|
|
12
|
+
By the end of this module, you will:
|
|
13
|
+
- ✅ Understand the fail-fast error handling philosophy
|
|
14
|
+
- ✅ Know why preventing partial data is critical
|
|
15
|
+
- ✅ Understand the error propagation chain
|
|
16
|
+
- ✅ Recognize the three core principles of SDK error handling
|
|
17
|
+
|
|
18
|
+
## The Fail-Fast Philosophy
|
|
19
|
+
|
|
20
|
+
### The Problem: Partial Data Corruption
|
|
21
|
+
|
|
22
|
+
In traditional error handling, errors might occur after some data has already been written:
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
// ❌ RISKY: Without fail-fast protection
|
|
26
|
+
async function processOrder(data: any) {
|
|
27
|
+
const order = await createOrder(data.order); // ✅ Created
|
|
28
|
+
const customer = await createCustomer(data.customer); // ✅ Created
|
|
29
|
+
const items = await createItems(data.items); // ❌ FAILS HERE!
|
|
30
|
+
|
|
31
|
+
// Now what? Order and customer exist, but items don't
|
|
32
|
+
// Partial data = corrupt state = data integrity violation
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**Result**: You have an order and customer in Fluent, but no items. Your data is now in an inconsistent state.
|
|
37
|
+
|
|
38
|
+
### The Solution: Fail-Fast Guarantee
|
|
39
|
+
|
|
40
|
+
The SDK prevents this by **validating everything before executing any mutations**:
|
|
41
|
+
|
|
42
|
+
```typescript
|
|
43
|
+
// ✅ SAFE: With fail-fast protection
|
|
44
|
+
async function processOrder(xmlContent: string) {
|
|
45
|
+
try {
|
|
46
|
+
// Step 1: Parse XML (validate structure)
|
|
47
|
+
const parsed = await parser.parse(xmlContent);
|
|
48
|
+
|
|
49
|
+
// Step 2: Map to mutation variables (validate fields)
|
|
50
|
+
const payload = await mapper.map(parsed);
|
|
51
|
+
|
|
52
|
+
// Step 3: Execute mutation (ONLY if Steps 1 and 2 succeed)
|
|
53
|
+
const result = await client.graphql(payload);
|
|
54
|
+
|
|
55
|
+
return result.data; // ✅ Complete data or nothing
|
|
56
|
+
|
|
57
|
+
} catch (error) {
|
|
58
|
+
// Error at ANY step = NO data sent to Fluent
|
|
59
|
+
// NO partial records, NO corrupt data
|
|
60
|
+
throw error;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Result**: Either all data is created successfully, or nothing is created. No partial state possible.
|
|
66
|
+
|
|
67
|
+
## The Fail-Fast Guarantee
|
|
68
|
+
|
|
69
|
+
### What It Means
|
|
70
|
+
|
|
71
|
+
**When any error occurs during parsing, mapping, or validation, the GraphQL mutation is NEVER sent to Fluent Commerce.**
|
|
72
|
+
|
|
73
|
+
This means:
|
|
74
|
+
- ✅ No partial data created
|
|
75
|
+
- ✅ No orphaned records
|
|
76
|
+
- ✅ No data integrity violations
|
|
77
|
+
- ✅ No manual cleanup required
|
|
78
|
+
- ✅ Predictable error states
|
|
79
|
+
|
|
80
|
+
### When Errors Are Caught
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
┌─────────────────────────────────────────────────────┐
|
|
84
|
+
│ VALIDATION PHASE (No data sent to Fluent) │
|
|
85
|
+
├─────────────────────────────────────────────────────┤
|
|
86
|
+
│ │
|
|
87
|
+
│ Parse XML/JSON/CSV │
|
|
88
|
+
│ ↓ (throws FileParsingError if invalid) │
|
|
89
|
+
│ │
|
|
90
|
+
│ Resolve Field Paths │
|
|
91
|
+
│ ↓ (throws PathResolutionError if path missing) │
|
|
92
|
+
│ │
|
|
93
|
+
│ Map Fields to Mutation │
|
|
94
|
+
│ ↓ (throws MappingError if required field empty) │
|
|
95
|
+
│ │
|
|
96
|
+
│ Validate Data Rules │
|
|
97
|
+
│ ↓ (throws ValidationError if rules fail) │
|
|
98
|
+
│ │
|
|
99
|
+
└─────────────────────────────────────────────────────┘
|
|
100
|
+
│
|
|
101
|
+
│ ✅ All validations passed
|
|
102
|
+
↓
|
|
103
|
+
┌─────────────────────────────────────────────────────┐
|
|
104
|
+
│ EXECUTION PHASE (Data sent to Fluent) │
|
|
105
|
+
├─────────────────────────────────────────────────────┤
|
|
106
|
+
│ │
|
|
107
|
+
│ Execute GraphQL Mutation │
|
|
108
|
+
│ ↓ │
|
|
109
|
+
│ │
|
|
110
|
+
│ ✅ ALL DATA COMMITTED or ❌ FLUENT REJECTS ALL │
|
|
111
|
+
│ │
|
|
112
|
+
└─────────────────────────────────────────────────────┘
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Core Principles
|
|
116
|
+
|
|
117
|
+
### 1. One Error Stops Everything
|
|
118
|
+
|
|
119
|
+
A single failure at any validation stage prevents the entire mutation from executing:
|
|
120
|
+
|
|
121
|
+
```typescript
|
|
122
|
+
// Even if 99 fields are valid...
|
|
123
|
+
const payload = {
|
|
124
|
+
field1: "valid",
|
|
125
|
+
field2: "valid",
|
|
126
|
+
// ... 97 more valid fields
|
|
127
|
+
field100: undefined // ❌ This ONE missing required field
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
// The ENTIRE mutation is blocked
|
|
131
|
+
// Result: NO data sent to Fluent
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### 2. No Partial Data
|
|
135
|
+
|
|
136
|
+
The SDK ensures atomic operations - all data succeeds or all data fails:
|
|
137
|
+
|
|
138
|
+
```typescript
|
|
139
|
+
// Creating order with 100 line items
|
|
140
|
+
const mutation = `
|
|
141
|
+
mutation CreateOrder($input: CreateOrderInput!) {
|
|
142
|
+
createOrder(input: $input) {
|
|
143
|
+
id
|
|
144
|
+
items { id } # 100 items
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
`;
|
|
148
|
+
|
|
149
|
+
// If ANY of the 100 items fails validation:
|
|
150
|
+
// - Mutation is NOT sent
|
|
151
|
+
// - Order is NOT created
|
|
152
|
+
// - NO items are created
|
|
153
|
+
// Result: Clean failure, no cleanup needed
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### 3. Clear Error Context
|
|
157
|
+
|
|
158
|
+
Every error includes detailed information about what went wrong and where:
|
|
159
|
+
|
|
160
|
+
```typescript
|
|
161
|
+
catch (error) {
|
|
162
|
+
if (error instanceof MappingError) {
|
|
163
|
+
console.log(error.field); // "customerEmail"
|
|
164
|
+
console.log(error.sourcePath); // "order.customer.email"
|
|
165
|
+
console.log(error.message); // "Required field 'customerEmail' is missing or empty"
|
|
166
|
+
|
|
167
|
+
// You know EXACTLY what failed and why
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Error Propagation Chain
|
|
173
|
+
|
|
174
|
+
### How Errors Flow Through the SDK
|
|
175
|
+
|
|
176
|
+
```typescript
|
|
177
|
+
try {
|
|
178
|
+
// 1️⃣ PARSING
|
|
179
|
+
const parsed = await parser.parse(xmlContent);
|
|
180
|
+
// Throws: FileParsingError if XML/JSON/CSV is malformed
|
|
181
|
+
|
|
182
|
+
} catch (error) {
|
|
183
|
+
// ❌ Stops here - mutation never attempted
|
|
184
|
+
throw error;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
try {
|
|
188
|
+
// 2️⃣ PATH RESOLUTION
|
|
189
|
+
const mapper = new GraphQLMutationMapper(config, logger, { fluentClient: client });
|
|
190
|
+
// Validates all source paths exist in parsed data
|
|
191
|
+
// Throws: PathResolutionError if path doesn't exist
|
|
192
|
+
|
|
193
|
+
} catch (error) {
|
|
194
|
+
// ❌ Stops here - mutation never attempted
|
|
195
|
+
throw error;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
try {
|
|
199
|
+
// 3️⃣ FIELD MAPPING
|
|
200
|
+
const payload = await mapper.map(parsed);
|
|
201
|
+
// Validates required fields, array constraints, etc.
|
|
202
|
+
// Throws: MappingError if validation fails
|
|
203
|
+
|
|
204
|
+
} catch (error) {
|
|
205
|
+
// ❌ Stops here - mutation never attempted
|
|
206
|
+
throw error;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
try {
|
|
210
|
+
// 4️⃣ EXECUTION (only reached if all above succeed)
|
|
211
|
+
// Throws GraphQLExecutionError if Fluent returns errors
|
|
212
|
+
const result = await client.graphql(payload);
|
|
213
|
+
|
|
214
|
+
// ✅ SUCCESS - All data created
|
|
215
|
+
return result.data;
|
|
216
|
+
|
|
217
|
+
} catch (error) {
|
|
218
|
+
// Either network error, or Fluent rejected the entire mutation
|
|
219
|
+
throw error;
|
|
220
|
+
}
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### Sequential Validation
|
|
224
|
+
|
|
225
|
+
Each stage must pass before the next begins:
|
|
226
|
+
|
|
227
|
+
| Stage | Validates | Throws On Failure | Mutation Sent? |
|
|
228
|
+
|-------|-----------|------------------|----------------|
|
|
229
|
+
| 1. Parsing | File format, syntax | `FileParsingError` | ❌ No |
|
|
230
|
+
| 2. Path Resolution | Source paths exist | `PathResolutionError` | ❌ No |
|
|
231
|
+
| 3. Field Mapping | Required fields, types | `MappingError` | ❌ No |
|
|
232
|
+
| 4. Data Validation | Business rules | `ValidationError` | ❌ No |
|
|
233
|
+
| 5. Execution | Network, API | `IngestionError` (NETWORK_ERROR), GraphQL errors | ✅ Yes, but Fluent can still reject |
|
|
234
|
+
|
|
235
|
+
## Why This Matters
|
|
236
|
+
|
|
237
|
+
### Data Integrity
|
|
238
|
+
|
|
239
|
+
```typescript
|
|
240
|
+
// ❌ WITHOUT fail-fast
|
|
241
|
+
// Scenario: Processing 1000 orders
|
|
242
|
+
// Order 1-500: ✅ Created
|
|
243
|
+
// Order 501: ❌ Fails (missing required field)
|
|
244
|
+
// Order 502-1000: Never processed
|
|
245
|
+
// Result: Partial import, data reconciliation nightmare
|
|
246
|
+
|
|
247
|
+
// ✅ WITH fail-fast
|
|
248
|
+
// Order 1: Validation fails on required field
|
|
249
|
+
// Orders 1-1000: ❌ None created
|
|
250
|
+
// Result: Clear error, fix issue, retry all - clean process
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### Predictable Error States
|
|
254
|
+
|
|
255
|
+
With fail-fast, you have only two possible states:
|
|
256
|
+
|
|
257
|
+
1. ✅ **Complete Success** - All data created exactly as specified
|
|
258
|
+
2. ❌ **Complete Failure** - No data created, clear error message
|
|
259
|
+
|
|
260
|
+
**Never** a partial success state that requires manual investigation and cleanup.
|
|
261
|
+
|
|
262
|
+
## Real-World Example
|
|
263
|
+
|
|
264
|
+
### Scenario: SFCC Order Integration
|
|
265
|
+
|
|
266
|
+
```typescript
|
|
267
|
+
import { XMLParserService, GraphQLMutationMapper } from '@fluentcommerce/fc-connect-sdk';
|
|
268
|
+
|
|
269
|
+
async function ingestSFCCOrder(xmlContent: string) {
|
|
270
|
+
const logger = console;
|
|
271
|
+
|
|
272
|
+
try {
|
|
273
|
+
// Parse SFCC XML
|
|
274
|
+
const parser = new XMLParserService();
|
|
275
|
+
const parsed = await parser.parse(xmlContent);
|
|
276
|
+
|
|
277
|
+
logger.info('✅ Parsing successful');
|
|
278
|
+
|
|
279
|
+
// Map to Fluent createOrder mutation
|
|
280
|
+
const mapper = new GraphQLMutationMapper(mappingConfig, logger, { fluentClient: client });
|
|
281
|
+
const payload = await mapper.map(parsed);
|
|
282
|
+
|
|
283
|
+
logger.info('✅ Mapping successful');
|
|
284
|
+
|
|
285
|
+
// Execute mutation
|
|
286
|
+
// Throws GraphQLExecutionError if Fluent returns errors
|
|
287
|
+
const result = await client.graphql(payload);
|
|
288
|
+
|
|
289
|
+
logger.info('✅ Order created successfully', { orderId: result.data.createOrder.id });
|
|
290
|
+
|
|
291
|
+
return result.data.createOrder;
|
|
292
|
+
|
|
293
|
+
} catch (error) {
|
|
294
|
+
logger.error('❌ Order ingestion failed - NO DATA CREATED', { error });
|
|
295
|
+
|
|
296
|
+
// Because of fail-fast:
|
|
297
|
+
// - If parsing failed: No mutation sent
|
|
298
|
+
// - If mapping failed: No mutation sent
|
|
299
|
+
// - If Fluent rejected: Entire order rejected, not partial
|
|
300
|
+
|
|
301
|
+
throw error; // Re-throw for upstream handling
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
### What Happens on Error
|
|
307
|
+
|
|
308
|
+
**Parsing Error:**
|
|
309
|
+
```typescript
|
|
310
|
+
// Invalid XML: <order><customer>Missing closing tag
|
|
311
|
+
// Result: FileParsingError thrown
|
|
312
|
+
// Mutation sent? NO
|
|
313
|
+
// Data in Fluent? NO
|
|
314
|
+
// State: Clean - fix XML and retry
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
**Mapping Error:**
|
|
318
|
+
```typescript
|
|
319
|
+
// Required field missing: customer.email is undefined
|
|
320
|
+
// Result: MappingError thrown
|
|
321
|
+
// Mutation sent? NO
|
|
322
|
+
// Data in Fluent? NO
|
|
323
|
+
// State: Clean - fix data and retry
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
**GraphQL Error:**
|
|
327
|
+
```typescript
|
|
328
|
+
// Invalid field in mutation: unknownField
|
|
329
|
+
// Result: GraphQL validation error from Fluent
|
|
330
|
+
// Mutation sent? YES
|
|
331
|
+
// Data in Fluent? NO (Fluent rejected entire mutation)
|
|
332
|
+
// State: Clean - fix mapping config and retry
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
## Key Takeaways
|
|
336
|
+
|
|
337
|
+
- 🎯 **Fail-fast prevents partial data** - Either all data succeeds or no data is created
|
|
338
|
+
- 🎯 **Errors caught early** - Validation happens before any API calls
|
|
339
|
+
- 🎯 **Sequential validation** - Each stage must pass before the next begins
|
|
340
|
+
- 🎯 **Clear error states** - Only two outcomes: complete success or complete failure
|
|
341
|
+
- 🎯 **No manual cleanup** - Failed operations leave no trace in Fluent Commerce
|
|
342
|
+
|
|
343
|
+
## Practice Exercise
|
|
344
|
+
|
|
345
|
+
Try to answer these questions:
|
|
346
|
+
|
|
347
|
+
1. At what point in the pipeline is a GraphQL mutation sent to Fluent?
|
|
348
|
+
2. If parsing succeeds but mapping fails, is any data created in Fluent?
|
|
349
|
+
3. What are the two possible outcomes when using fail-fast error handling?
|
|
350
|
+
|
|
351
|
+
<details>
|
|
352
|
+
<summary>Click to see answers</summary>
|
|
353
|
+
|
|
354
|
+
1. **After** parsing, path resolution, field mapping, and validation all succeed
|
|
355
|
+
2. **No** - mapping errors prevent the mutation from being sent
|
|
356
|
+
3. **Complete success** (all data created) or **complete failure** (no data created)
|
|
357
|
+
|
|
358
|
+
</details>
|
|
359
|
+
|
|
360
|
+
## Next Steps
|
|
361
|
+
|
|
362
|
+
Continue to [Module 2: Error Types & Codes →](./error-handling-02-error-types.md) to learn about all the error classes and error codes available in the SDK.
|