@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,401 +1,401 @@
|
|
|
1
|
-
# Error Handling Patterns
|
|
2
|
-
|
|
3
|
-
**⏱️ Read Time:** 5 minutes | **When:** Implementing error handling in your integration
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Overview
|
|
8
|
-
|
|
9
|
-
The SDK provides two error handling patterns for mappers:
|
|
10
|
-
|
|
11
|
-
1. **`map()` - Throws errors** (use with try/catch)
|
|
12
|
-
2. **`mapSafe()` - Returns result objects** (recommended for production)
|
|
13
|
-
|
|
14
|
-
Both `GraphQLMutationMapper` and `UniversalMapper` support these patterns, but with slight differences.
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
## GraphQLMutationMapper Error Handling
|
|
19
|
-
|
|
20
|
-
### Pattern 1: `map()` - Throws Errors
|
|
21
|
-
|
|
22
|
-
```typescript
|
|
23
|
-
import { GraphQLMutationMapper } from '@fluentcommerce/fc-connect-sdk';
|
|
24
|
-
|
|
25
|
-
const mapper = new GraphQLMutationMapper(config, logger);
|
|
26
|
-
|
|
27
|
-
try {
|
|
28
|
-
const payload = await mapper.map(sourceData);
|
|
29
|
-
await client.graphql(payload);
|
|
30
|
-
console.log('✅ Success');
|
|
31
|
-
} catch (error) {
|
|
32
|
-
console.error('❌ Mapping failed:', error);
|
|
33
|
-
// Handle error (log, retry, skip, etc.)
|
|
34
|
-
}
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
**When to use:**
|
|
38
|
-
- Simple error handling (fail fast)
|
|
39
|
-
- You want exceptions to propagate up
|
|
40
|
-
- Error handling is centralized (e.g., in a wrapper function)
|
|
41
|
-
|
|
42
|
-
**Limitations:**
|
|
43
|
-
- Requires try/catch blocks
|
|
44
|
-
- Can't easily check for partial failures
|
|
45
|
-
- Less flexible for batch processing
|
|
46
|
-
|
|
47
|
-
---
|
|
48
|
-
|
|
49
|
-
### Pattern 2: `mapSafe()` - Returns Result Objects (Recommended)
|
|
50
|
-
|
|
51
|
-
```typescript
|
|
52
|
-
import { GraphQLMutationMapper } from '@fluentcommerce/fc-connect-sdk';
|
|
53
|
-
|
|
54
|
-
const mapper = new GraphQLMutationMapper(config, logger);
|
|
55
|
-
|
|
56
|
-
const result = await mapper.mapSafe(sourceData);
|
|
57
|
-
|
|
58
|
-
if (!result.success) {
|
|
59
|
-
console.error('❌ Mapping failed:', result.errors);
|
|
60
|
-
// Handle error (log, retry, skip, etc.)
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// Success - execute GraphQL mutation
|
|
65
|
-
await client.graphql({
|
|
66
|
-
query: result.query,
|
|
67
|
-
variables: result.variables,
|
|
68
|
-
});
|
|
69
|
-
console.log('✅ Success');
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
**Result Object Structure:**
|
|
73
|
-
```typescript
|
|
74
|
-
interface MapResult {
|
|
75
|
-
success: boolean;
|
|
76
|
-
query: string; // GraphQL mutation query (empty string on error)
|
|
77
|
-
variables: Record<string, any>; // Variables for GraphQL (empty object on error)
|
|
78
|
-
errors?: string[]; // Array of error messages (only present on failure)
|
|
79
|
-
}
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
**When to use:**
|
|
83
|
-
- ✅ **Production code** (recommended)
|
|
84
|
-
- Batch processing (check each item individually)
|
|
85
|
-
- Need to handle errors gracefully without stopping the entire process
|
|
86
|
-
- Want to log errors but continue processing
|
|
87
|
-
- Need to distinguish between different error types
|
|
88
|
-
|
|
89
|
-
**Benefits:**
|
|
90
|
-
- No try/catch required
|
|
91
|
-
- Can check `result.success` before proceeding
|
|
92
|
-
- Errors are structured (array of messages)
|
|
93
|
-
- Consistent with `UniversalMapper.map()` pattern
|
|
94
|
-
|
|
95
|
-
---
|
|
96
|
-
|
|
97
|
-
## UniversalMapper Error Handling
|
|
98
|
-
|
|
99
|
-
`UniversalMapper` **always** returns result objects (never throws):
|
|
100
|
-
|
|
101
|
-
```typescript
|
|
102
|
-
import { UniversalMapper } from '@fluentcommerce/fc-connect-sdk';
|
|
103
|
-
|
|
104
|
-
const mapper = new UniversalMapper(config);
|
|
105
|
-
|
|
106
|
-
const result = await mapper.map(sourceData);
|
|
107
|
-
|
|
108
|
-
if (!result.success) {
|
|
109
|
-
console.error('❌ Mapping failed:', result.errors);
|
|
110
|
-
// Handle error
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
// Success - use result.data
|
|
115
|
-
console.log('✅ Mapped data:', result.data);
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
**Result Object Structure:**
|
|
119
|
-
```typescript
|
|
120
|
-
interface MappingResult {
|
|
121
|
-
success: boolean;
|
|
122
|
-
data: any | null; // Mapped data (null on error)
|
|
123
|
-
errors?: string[]; // Array of error messages
|
|
124
|
-
skippedFields?: string[]; // Fields that were skipped (optional)
|
|
125
|
-
}
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
---
|
|
129
|
-
|
|
130
|
-
## Comparison Table
|
|
131
|
-
|
|
132
|
-
| Feature | `map()` (throws) | `mapSafe()` (result object) | `UniversalMapper.map()` |
|
|
133
|
-
|---------|------------------|------------------------------|-------------------------|
|
|
134
|
-
| **Error Handling** | Try/catch required | Check `result.success` | Check `result.success` |
|
|
135
|
-
| **Error Information** | Exception object | `result.errors` array | `result.errors` array |
|
|
136
|
-
| **Partial Failures** | ❌ No (throws immediately) | ✅ Yes (can continue) | ✅ Yes (can continue) |
|
|
137
|
-
| **Batch Processing** | ❌ Difficult | ✅ Easy | ✅ Easy |
|
|
138
|
-
| **Production Ready** | ⚠️ Requires careful error handling | ✅ Recommended | ✅ Recommended |
|
|
139
|
-
| **Available In** | GraphQLMutationMapper only | GraphQLMutationMapper only | UniversalMapper only |
|
|
140
|
-
|
|
141
|
-
---
|
|
142
|
-
|
|
143
|
-
## Real-World Examples
|
|
144
|
-
|
|
145
|
-
### Example 1: Batch Processing with Error Handling
|
|
146
|
-
|
|
147
|
-
```typescript
|
|
148
|
-
// Process 100 locations from CSV
|
|
149
|
-
const locations = await parser.parse(csvContent);
|
|
150
|
-
|
|
151
|
-
const mapper = new GraphQLMutationMapper(config, logger);
|
|
152
|
-
let successCount = 0;
|
|
153
|
-
let errorCount = 0;
|
|
154
|
-
|
|
155
|
-
for (const location of locations) {
|
|
156
|
-
const result = await mapper.mapSafe(location);
|
|
157
|
-
|
|
158
|
-
if (!result.success) {
|
|
159
|
-
errorCount++;
|
|
160
|
-
logger.error(`Failed to map location ${location.ref}:`, result.errors);
|
|
161
|
-
continue; // Skip to next location
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
try {
|
|
165
|
-
await client.graphql({
|
|
166
|
-
query: result.query,
|
|
167
|
-
variables: result.variables,
|
|
168
|
-
});
|
|
169
|
-
successCount++;
|
|
170
|
-
} catch (apiError) {
|
|
171
|
-
errorCount++;
|
|
172
|
-
logger.error(`API error for location ${location.ref}:`, apiError);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
console.log(`✅ Processed: ${successCount} successful, ${errorCount} errors`);
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
### Example 2: Webhook Handler with Error Handling
|
|
180
|
-
|
|
181
|
-
```typescript
|
|
182
|
-
export async function handleWebhook(event: WebhookEvent) {
|
|
183
|
-
const mapper = new GraphQLMutationMapper(config, logger);
|
|
184
|
-
|
|
185
|
-
const result = await mapper.mapSafe(event.payload);
|
|
186
|
-
|
|
187
|
-
if (!result.success) {
|
|
188
|
-
// Log error but don't crash the webhook handler
|
|
189
|
-
logger.error('Webhook mapping failed:', {
|
|
190
|
-
eventId: event.id,
|
|
191
|
-
errors: result.errors,
|
|
192
|
-
});
|
|
193
|
-
|
|
194
|
-
// Return error response to webhook caller
|
|
195
|
-
return {
|
|
196
|
-
statusCode: 400,
|
|
197
|
-
body: JSON.stringify({ errors: result.errors }),
|
|
198
|
-
};
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
// Execute mutation
|
|
202
|
-
const apiResult = await client.graphql({
|
|
203
|
-
query: result.query,
|
|
204
|
-
variables: result.variables,
|
|
205
|
-
});
|
|
206
|
-
|
|
207
|
-
return {
|
|
208
|
-
statusCode: 200,
|
|
209
|
-
body: JSON.stringify(apiResult),
|
|
210
|
-
};
|
|
211
|
-
}
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
### Example 3: Retry Logic with Error Handling
|
|
215
|
-
|
|
216
|
-
```typescript
|
|
217
|
-
async function mapWithRetry(
|
|
218
|
-
mapper: GraphQLMutationMapper,
|
|
219
|
-
sourceData: any,
|
|
220
|
-
maxRetries = 3
|
|
221
|
-
): Promise<MapResult> {
|
|
222
|
-
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
223
|
-
const result = await mapper.mapSafe(sourceData);
|
|
224
|
-
|
|
225
|
-
if (result.success) {
|
|
226
|
-
return result;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
// Log error
|
|
230
|
-
logger.warn(`Mapping attempt ${attempt} failed:`, result.errors);
|
|
231
|
-
|
|
232
|
-
// Wait before retry (exponential backoff)
|
|
233
|
-
if (attempt < maxRetries) {
|
|
234
|
-
await new Promise(resolve => setTimeout(resolve, 1000 * attempt));
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
// All retries failed
|
|
239
|
-
return {
|
|
240
|
-
success: false,
|
|
241
|
-
query: '',
|
|
242
|
-
variables: {},
|
|
243
|
-
errors: ['All retry attempts failed'],
|
|
244
|
-
};
|
|
245
|
-
}
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
---
|
|
249
|
-
|
|
250
|
-
## Best Practices
|
|
251
|
-
|
|
252
|
-
### ✅ DO
|
|
253
|
-
|
|
254
|
-
1. **Use `mapSafe()` in production code**
|
|
255
|
-
- More robust error handling
|
|
256
|
-
- Better for batch processing
|
|
257
|
-
- Consistent with `UniversalMapper` pattern
|
|
258
|
-
|
|
259
|
-
2. **Check `result.success` before proceeding**
|
|
260
|
-
```typescript
|
|
261
|
-
const result = await mapper.mapSafe(data);
|
|
262
|
-
if (!result.success) {
|
|
263
|
-
// Handle error
|
|
264
|
-
return;
|
|
265
|
-
}
|
|
266
|
-
// Proceed with success case
|
|
267
|
-
```
|
|
268
|
-
|
|
269
|
-
3. **Log errors with context**
|
|
270
|
-
```typescript
|
|
271
|
-
if (!result.success) {
|
|
272
|
-
logger.error('Mapping failed', {
|
|
273
|
-
sourceData: data,
|
|
274
|
-
errors: result.errors,
|
|
275
|
-
timestamp: new Date().toISOString(),
|
|
276
|
-
});
|
|
277
|
-
}
|
|
278
|
-
```
|
|
279
|
-
|
|
280
|
-
4. **Handle errors gracefully in batch processing**
|
|
281
|
-
- Don't stop entire batch on single error
|
|
282
|
-
- Log errors but continue processing
|
|
283
|
-
- Track success/error counts
|
|
284
|
-
|
|
285
|
-
### ❌ DON'T
|
|
286
|
-
|
|
287
|
-
1. **Don't ignore errors**
|
|
288
|
-
```typescript
|
|
289
|
-
// ❌ BAD - ignores errors
|
|
290
|
-
const result = await mapper.mapSafe(data);
|
|
291
|
-
await client.graphql({ query: result.query, variables: result.variables });
|
|
292
|
-
```
|
|
293
|
-
|
|
294
|
-
2. **Don't use `map()` without try/catch**
|
|
295
|
-
```typescript
|
|
296
|
-
// ❌ BAD - unhandled exception
|
|
297
|
-
const payload = await mapper.map(data);
|
|
298
|
-
await client.graphql(payload);
|
|
299
|
-
```
|
|
300
|
-
|
|
301
|
-
3. **Don't assume success**
|
|
302
|
-
```typescript
|
|
303
|
-
// ❌ BAD - doesn't check success
|
|
304
|
-
const result = await mapper.mapSafe(data);
|
|
305
|
-
await client.graphql({ query: result.query, variables: result.variables });
|
|
306
|
-
```
|
|
307
|
-
|
|
308
|
-
---
|
|
309
|
-
|
|
310
|
-
## Migration Guide
|
|
311
|
-
|
|
312
|
-
### Migrating from `map()` to `mapSafe()`
|
|
313
|
-
|
|
314
|
-
**Before:**
|
|
315
|
-
```typescript
|
|
316
|
-
try {
|
|
317
|
-
const payload = await mapper.map(sourceData);
|
|
318
|
-
await client.graphql(payload);
|
|
319
|
-
} catch (error) {
|
|
320
|
-
console.error('Error:', error);
|
|
321
|
-
}
|
|
322
|
-
```
|
|
323
|
-
|
|
324
|
-
**After:**
|
|
325
|
-
```typescript
|
|
326
|
-
const result = await mapper.mapSafe(sourceData);
|
|
327
|
-
if (!result.success) {
|
|
328
|
-
console.error('Error:', result.errors);
|
|
329
|
-
return;
|
|
330
|
-
}
|
|
331
|
-
await client.graphql({ query: result.query, variables: result.variables });
|
|
332
|
-
```
|
|
333
|
-
|
|
334
|
-
**Benefits:**
|
|
335
|
-
- No try/catch needed
|
|
336
|
-
- Structured error information (`result.errors` array)
|
|
337
|
-
- Easier to handle in batch processing
|
|
338
|
-
- Consistent with `UniversalMapper` pattern
|
|
339
|
-
|
|
340
|
-
---
|
|
341
|
-
|
|
342
|
-
## GraphQL Error Classification
|
|
343
|
-
|
|
344
|
-
After executing a GraphQL mutation, you may receive errors from the Fluent Commerce API. The SDK provides error classification to help determine if errors are retryable:
|
|
345
|
-
|
|
346
|
-
```typescript
|
|
347
|
-
import { classifyErrors, type GraphQLError } from '@fluentcommerce/fc-connect-sdk';
|
|
348
|
-
|
|
349
|
-
const result = await client.graphql({
|
|
350
|
-
query: result.query,
|
|
351
|
-
variables: result.variables,
|
|
352
|
-
});
|
|
353
|
-
|
|
354
|
-
if (result.errors) {
|
|
355
|
-
const classification = classifyErrors(result.errors);
|
|
356
|
-
|
|
357
|
-
if (classification.retryable) {
|
|
358
|
-
// Wait and retry
|
|
359
|
-
await delay(classification.retryDelaySeconds * 1000);
|
|
360
|
-
// retry logic...
|
|
361
|
-
} else {
|
|
362
|
-
// Don't retry - show error to user
|
|
363
|
-
logger.error('Non-retryable error:', {
|
|
364
|
-
errorCode: classification.errorCode,
|
|
365
|
-
message: classification.userMessage,
|
|
366
|
-
action: classification.action,
|
|
367
|
-
});
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
```
|
|
371
|
-
|
|
372
|
-
**Error Classification Result:**
|
|
373
|
-
```typescript
|
|
374
|
-
interface ErrorClassification {
|
|
375
|
-
retryable: boolean; // Whether to retry
|
|
376
|
-
category: 'CLIENT_ERROR' | 'SERVER_ERROR' | 'THIRD_PARTY_ERROR' | 'UNKNOWN';
|
|
377
|
-
userMessage: string; // User-friendly message
|
|
378
|
-
action: 'FIX_AND_RETRY' | 'RETRY_LATER' | 'CONTACT_SUPPORT' | 'VERIFY_PAYLOAD';
|
|
379
|
-
retryDelaySeconds?: number; // Recommended delay (if retryable)
|
|
380
|
-
errorCode?: string; // Error code (e.g., 'C0121E')
|
|
381
|
-
}
|
|
382
|
-
```
|
|
383
|
-
|
|
384
|
-
**Common Error Codes:**
|
|
385
|
-
- **C0121E** - Order already exists (non-retryable, verify payload)
|
|
386
|
-
- **C0140E** - Missing required variables (non-retryable, fix and retry)
|
|
387
|
-
- **S0002E** - Server error (retryable, retry later)
|
|
388
|
-
- **C0011E** - Rate limit exceeded (retryable, retry later)
|
|
389
|
-
|
|
390
|
-
See [GraphQL Error Classification Guide](../api-reference/graphql-error-classification.md) for complete error code reference.
|
|
391
|
-
|
|
392
|
-
---
|
|
393
|
-
|
|
394
|
-
## Related Documentation
|
|
395
|
-
|
|
396
|
-
- [Mapper Comparison Guide](./mapping-mapper-comparison-guide.md) - Complete mapper comparison
|
|
397
|
-
- [Resolver Registration Guide](./resolver-registration.md) - How to register custom resolvers
|
|
398
|
-
- [GraphQL Mutation Mapping](../graphql-mutation-mapping/) - GraphQLMutationMapper details
|
|
399
|
-
- [Universal Mapping](./) - UniversalMapper details
|
|
400
|
-
- [GraphQL Error Classification](../api-reference/graphql-error-classification.md) - Error code reference
|
|
401
|
-
|
|
1
|
+
# Error Handling Patterns
|
|
2
|
+
|
|
3
|
+
**⏱️ Read Time:** 5 minutes | **When:** Implementing error handling in your integration
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
The SDK provides two error handling patterns for mappers:
|
|
10
|
+
|
|
11
|
+
1. **`map()` - Throws errors** (use with try/catch)
|
|
12
|
+
2. **`mapSafe()` - Returns result objects** (recommended for production)
|
|
13
|
+
|
|
14
|
+
Both `GraphQLMutationMapper` and `UniversalMapper` support these patterns, but with slight differences.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## GraphQLMutationMapper Error Handling
|
|
19
|
+
|
|
20
|
+
### Pattern 1: `map()` - Throws Errors
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import { GraphQLMutationMapper } from '@fluentcommerce/fc-connect-sdk';
|
|
24
|
+
|
|
25
|
+
const mapper = new GraphQLMutationMapper(config, logger);
|
|
26
|
+
|
|
27
|
+
try {
|
|
28
|
+
const payload = await mapper.map(sourceData);
|
|
29
|
+
await client.graphql(payload);
|
|
30
|
+
console.log('✅ Success');
|
|
31
|
+
} catch (error) {
|
|
32
|
+
console.error('❌ Mapping failed:', error);
|
|
33
|
+
// Handle error (log, retry, skip, etc.)
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**When to use:**
|
|
38
|
+
- Simple error handling (fail fast)
|
|
39
|
+
- You want exceptions to propagate up
|
|
40
|
+
- Error handling is centralized (e.g., in a wrapper function)
|
|
41
|
+
|
|
42
|
+
**Limitations:**
|
|
43
|
+
- Requires try/catch blocks
|
|
44
|
+
- Can't easily check for partial failures
|
|
45
|
+
- Less flexible for batch processing
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
### Pattern 2: `mapSafe()` - Returns Result Objects (Recommended)
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
import { GraphQLMutationMapper } from '@fluentcommerce/fc-connect-sdk';
|
|
53
|
+
|
|
54
|
+
const mapper = new GraphQLMutationMapper(config, logger);
|
|
55
|
+
|
|
56
|
+
const result = await mapper.mapSafe(sourceData);
|
|
57
|
+
|
|
58
|
+
if (!result.success) {
|
|
59
|
+
console.error('❌ Mapping failed:', result.errors);
|
|
60
|
+
// Handle error (log, retry, skip, etc.)
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Success - execute GraphQL mutation
|
|
65
|
+
await client.graphql({
|
|
66
|
+
query: result.query,
|
|
67
|
+
variables: result.variables,
|
|
68
|
+
});
|
|
69
|
+
console.log('✅ Success');
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**Result Object Structure:**
|
|
73
|
+
```typescript
|
|
74
|
+
interface MapResult {
|
|
75
|
+
success: boolean;
|
|
76
|
+
query: string; // GraphQL mutation query (empty string on error)
|
|
77
|
+
variables: Record<string, any>; // Variables for GraphQL (empty object on error)
|
|
78
|
+
errors?: string[]; // Array of error messages (only present on failure)
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**When to use:**
|
|
83
|
+
- ✅ **Production code** (recommended)
|
|
84
|
+
- Batch processing (check each item individually)
|
|
85
|
+
- Need to handle errors gracefully without stopping the entire process
|
|
86
|
+
- Want to log errors but continue processing
|
|
87
|
+
- Need to distinguish between different error types
|
|
88
|
+
|
|
89
|
+
**Benefits:**
|
|
90
|
+
- No try/catch required
|
|
91
|
+
- Can check `result.success` before proceeding
|
|
92
|
+
- Errors are structured (array of messages)
|
|
93
|
+
- Consistent with `UniversalMapper.map()` pattern
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## UniversalMapper Error Handling
|
|
98
|
+
|
|
99
|
+
`UniversalMapper` **always** returns result objects (never throws):
|
|
100
|
+
|
|
101
|
+
```typescript
|
|
102
|
+
import { UniversalMapper } from '@fluentcommerce/fc-connect-sdk';
|
|
103
|
+
|
|
104
|
+
const mapper = new UniversalMapper(config);
|
|
105
|
+
|
|
106
|
+
const result = await mapper.map(sourceData);
|
|
107
|
+
|
|
108
|
+
if (!result.success) {
|
|
109
|
+
console.error('❌ Mapping failed:', result.errors);
|
|
110
|
+
// Handle error
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Success - use result.data
|
|
115
|
+
console.log('✅ Mapped data:', result.data);
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**Result Object Structure:**
|
|
119
|
+
```typescript
|
|
120
|
+
interface MappingResult {
|
|
121
|
+
success: boolean;
|
|
122
|
+
data: any | null; // Mapped data (null on error)
|
|
123
|
+
errors?: string[]; // Array of error messages
|
|
124
|
+
skippedFields?: string[]; // Fields that were skipped (optional)
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Comparison Table
|
|
131
|
+
|
|
132
|
+
| Feature | `map()` (throws) | `mapSafe()` (result object) | `UniversalMapper.map()` |
|
|
133
|
+
|---------|------------------|------------------------------|-------------------------|
|
|
134
|
+
| **Error Handling** | Try/catch required | Check `result.success` | Check `result.success` |
|
|
135
|
+
| **Error Information** | Exception object | `result.errors` array | `result.errors` array |
|
|
136
|
+
| **Partial Failures** | ❌ No (throws immediately) | ✅ Yes (can continue) | ✅ Yes (can continue) |
|
|
137
|
+
| **Batch Processing** | ❌ Difficult | ✅ Easy | ✅ Easy |
|
|
138
|
+
| **Production Ready** | ⚠️ Requires careful error handling | ✅ Recommended | ✅ Recommended |
|
|
139
|
+
| **Available In** | GraphQLMutationMapper only | GraphQLMutationMapper only | UniversalMapper only |
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Real-World Examples
|
|
144
|
+
|
|
145
|
+
### Example 1: Batch Processing with Error Handling
|
|
146
|
+
|
|
147
|
+
```typescript
|
|
148
|
+
// Process 100 locations from CSV
|
|
149
|
+
const locations = await parser.parse(csvContent);
|
|
150
|
+
|
|
151
|
+
const mapper = new GraphQLMutationMapper(config, logger);
|
|
152
|
+
let successCount = 0;
|
|
153
|
+
let errorCount = 0;
|
|
154
|
+
|
|
155
|
+
for (const location of locations) {
|
|
156
|
+
const result = await mapper.mapSafe(location);
|
|
157
|
+
|
|
158
|
+
if (!result.success) {
|
|
159
|
+
errorCount++;
|
|
160
|
+
logger.error(`Failed to map location ${location.ref}:`, result.errors);
|
|
161
|
+
continue; // Skip to next location
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
try {
|
|
165
|
+
await client.graphql({
|
|
166
|
+
query: result.query,
|
|
167
|
+
variables: result.variables,
|
|
168
|
+
});
|
|
169
|
+
successCount++;
|
|
170
|
+
} catch (apiError) {
|
|
171
|
+
errorCount++;
|
|
172
|
+
logger.error(`API error for location ${location.ref}:`, apiError);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
console.log(`✅ Processed: ${successCount} successful, ${errorCount} errors`);
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Example 2: Webhook Handler with Error Handling
|
|
180
|
+
|
|
181
|
+
```typescript
|
|
182
|
+
export async function handleWebhook(event: WebhookEvent) {
|
|
183
|
+
const mapper = new GraphQLMutationMapper(config, logger);
|
|
184
|
+
|
|
185
|
+
const result = await mapper.mapSafe(event.payload);
|
|
186
|
+
|
|
187
|
+
if (!result.success) {
|
|
188
|
+
// Log error but don't crash the webhook handler
|
|
189
|
+
logger.error('Webhook mapping failed:', {
|
|
190
|
+
eventId: event.id,
|
|
191
|
+
errors: result.errors,
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
// Return error response to webhook caller
|
|
195
|
+
return {
|
|
196
|
+
statusCode: 400,
|
|
197
|
+
body: JSON.stringify({ errors: result.errors }),
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// Execute mutation
|
|
202
|
+
const apiResult = await client.graphql({
|
|
203
|
+
query: result.query,
|
|
204
|
+
variables: result.variables,
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
return {
|
|
208
|
+
statusCode: 200,
|
|
209
|
+
body: JSON.stringify(apiResult),
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Example 3: Retry Logic with Error Handling
|
|
215
|
+
|
|
216
|
+
```typescript
|
|
217
|
+
async function mapWithRetry(
|
|
218
|
+
mapper: GraphQLMutationMapper,
|
|
219
|
+
sourceData: any,
|
|
220
|
+
maxRetries = 3
|
|
221
|
+
): Promise<MapResult> {
|
|
222
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
223
|
+
const result = await mapper.mapSafe(sourceData);
|
|
224
|
+
|
|
225
|
+
if (result.success) {
|
|
226
|
+
return result;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// Log error
|
|
230
|
+
logger.warn(`Mapping attempt ${attempt} failed:`, result.errors);
|
|
231
|
+
|
|
232
|
+
// Wait before retry (exponential backoff)
|
|
233
|
+
if (attempt < maxRetries) {
|
|
234
|
+
await new Promise(resolve => setTimeout(resolve, 1000 * attempt));
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// All retries failed
|
|
239
|
+
return {
|
|
240
|
+
success: false,
|
|
241
|
+
query: '',
|
|
242
|
+
variables: {},
|
|
243
|
+
errors: ['All retry attempts failed'],
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## Best Practices
|
|
251
|
+
|
|
252
|
+
### ✅ DO
|
|
253
|
+
|
|
254
|
+
1. **Use `mapSafe()` in production code**
|
|
255
|
+
- More robust error handling
|
|
256
|
+
- Better for batch processing
|
|
257
|
+
- Consistent with `UniversalMapper` pattern
|
|
258
|
+
|
|
259
|
+
2. **Check `result.success` before proceeding**
|
|
260
|
+
```typescript
|
|
261
|
+
const result = await mapper.mapSafe(data);
|
|
262
|
+
if (!result.success) {
|
|
263
|
+
// Handle error
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
// Proceed with success case
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
3. **Log errors with context**
|
|
270
|
+
```typescript
|
|
271
|
+
if (!result.success) {
|
|
272
|
+
logger.error('Mapping failed', {
|
|
273
|
+
sourceData: data,
|
|
274
|
+
errors: result.errors,
|
|
275
|
+
timestamp: new Date().toISOString(),
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
4. **Handle errors gracefully in batch processing**
|
|
281
|
+
- Don't stop entire batch on single error
|
|
282
|
+
- Log errors but continue processing
|
|
283
|
+
- Track success/error counts
|
|
284
|
+
|
|
285
|
+
### ❌ DON'T
|
|
286
|
+
|
|
287
|
+
1. **Don't ignore errors**
|
|
288
|
+
```typescript
|
|
289
|
+
// ❌ BAD - ignores errors
|
|
290
|
+
const result = await mapper.mapSafe(data);
|
|
291
|
+
await client.graphql({ query: result.query, variables: result.variables });
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
2. **Don't use `map()` without try/catch**
|
|
295
|
+
```typescript
|
|
296
|
+
// ❌ BAD - unhandled exception
|
|
297
|
+
const payload = await mapper.map(data);
|
|
298
|
+
await client.graphql(payload);
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
3. **Don't assume success**
|
|
302
|
+
```typescript
|
|
303
|
+
// ❌ BAD - doesn't check success
|
|
304
|
+
const result = await mapper.mapSafe(data);
|
|
305
|
+
await client.graphql({ query: result.query, variables: result.variables });
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
## Migration Guide
|
|
311
|
+
|
|
312
|
+
### Migrating from `map()` to `mapSafe()`
|
|
313
|
+
|
|
314
|
+
**Before:**
|
|
315
|
+
```typescript
|
|
316
|
+
try {
|
|
317
|
+
const payload = await mapper.map(sourceData);
|
|
318
|
+
await client.graphql(payload);
|
|
319
|
+
} catch (error) {
|
|
320
|
+
console.error('Error:', error);
|
|
321
|
+
}
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
**After:**
|
|
325
|
+
```typescript
|
|
326
|
+
const result = await mapper.mapSafe(sourceData);
|
|
327
|
+
if (!result.success) {
|
|
328
|
+
console.error('Error:', result.errors);
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
await client.graphql({ query: result.query, variables: result.variables });
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
**Benefits:**
|
|
335
|
+
- No try/catch needed
|
|
336
|
+
- Structured error information (`result.errors` array)
|
|
337
|
+
- Easier to handle in batch processing
|
|
338
|
+
- Consistent with `UniversalMapper` pattern
|
|
339
|
+
|
|
340
|
+
---
|
|
341
|
+
|
|
342
|
+
## GraphQL Error Classification
|
|
343
|
+
|
|
344
|
+
After executing a GraphQL mutation, you may receive errors from the Fluent Commerce API. The SDK provides error classification to help determine if errors are retryable:
|
|
345
|
+
|
|
346
|
+
```typescript
|
|
347
|
+
import { classifyErrors, type GraphQLError } from '@fluentcommerce/fc-connect-sdk';
|
|
348
|
+
|
|
349
|
+
const result = await client.graphql({
|
|
350
|
+
query: result.query,
|
|
351
|
+
variables: result.variables,
|
|
352
|
+
});
|
|
353
|
+
|
|
354
|
+
if (result.errors) {
|
|
355
|
+
const classification = classifyErrors(result.errors);
|
|
356
|
+
|
|
357
|
+
if (classification.retryable) {
|
|
358
|
+
// Wait and retry
|
|
359
|
+
await delay(classification.retryDelaySeconds * 1000);
|
|
360
|
+
// retry logic...
|
|
361
|
+
} else {
|
|
362
|
+
// Don't retry - show error to user
|
|
363
|
+
logger.error('Non-retryable error:', {
|
|
364
|
+
errorCode: classification.errorCode,
|
|
365
|
+
message: classification.userMessage,
|
|
366
|
+
action: classification.action,
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
**Error Classification Result:**
|
|
373
|
+
```typescript
|
|
374
|
+
interface ErrorClassification {
|
|
375
|
+
retryable: boolean; // Whether to retry
|
|
376
|
+
category: 'CLIENT_ERROR' | 'SERVER_ERROR' | 'THIRD_PARTY_ERROR' | 'UNKNOWN';
|
|
377
|
+
userMessage: string; // User-friendly message
|
|
378
|
+
action: 'FIX_AND_RETRY' | 'RETRY_LATER' | 'CONTACT_SUPPORT' | 'VERIFY_PAYLOAD';
|
|
379
|
+
retryDelaySeconds?: number; // Recommended delay (if retryable)
|
|
380
|
+
errorCode?: string; // Error code (e.g., 'C0121E')
|
|
381
|
+
}
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
**Common Error Codes:**
|
|
385
|
+
- **C0121E** - Order already exists (non-retryable, verify payload)
|
|
386
|
+
- **C0140E** - Missing required variables (non-retryable, fix and retry)
|
|
387
|
+
- **S0002E** - Server error (retryable, retry later)
|
|
388
|
+
- **C0011E** - Rate limit exceeded (retryable, retry later)
|
|
389
|
+
|
|
390
|
+
See [GraphQL Error Classification Guide](../api-reference/graphql-error-classification.md) for complete error code reference.
|
|
391
|
+
|
|
392
|
+
---
|
|
393
|
+
|
|
394
|
+
## Related Documentation
|
|
395
|
+
|
|
396
|
+
- [Mapper Comparison Guide](./mapping-mapper-comparison-guide.md) - Complete mapper comparison
|
|
397
|
+
- [Resolver Registration Guide](./resolver-registration.md) - How to register custom resolvers
|
|
398
|
+
- [GraphQL Mutation Mapping](../graphql-mutation-mapping/) - GraphQLMutationMapper details
|
|
399
|
+
- [Universal Mapping](./) - UniversalMapper details
|
|
400
|
+
- [GraphQL Error Classification](../api-reference/graphql-error-classification.md) - Error code reference
|
|
401
|
+
|