@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,438 +1,438 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Common Error Handling Patterns
|
|
3
|
-
*
|
|
4
|
-
* Copy-paste ready error handling snippets for the Fluent Connect SDK
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
createClient,
|
|
9
|
-
XMLParserService,
|
|
10
|
-
GraphQLMutationMapper,
|
|
11
|
-
FileParsingError,
|
|
12
|
-
PathResolutionError,
|
|
13
|
-
MappingError,
|
|
14
|
-
ValidationError,
|
|
15
|
-
IngestionError,
|
|
16
|
-
IngestionErrorCode,
|
|
17
|
-
GraphQLExecutionError,
|
|
18
|
-
FluentAPIError
|
|
19
|
-
} from '@fluentcommerce/fc-connect-sdk';
|
|
20
|
-
|
|
21
|
-
// ============================================================================
|
|
22
|
-
// Pattern 1: Basic Try-Catch
|
|
23
|
-
// ============================================================================
|
|
24
|
-
|
|
25
|
-
async function basicErrorHandling(data: string) {
|
|
26
|
-
try {
|
|
27
|
-
const parser = new XMLParserService();
|
|
28
|
-
const parsed = await parser.parse(data);
|
|
29
|
-
return parsed;
|
|
30
|
-
|
|
31
|
-
} catch (error) {
|
|
32
|
-
// Always log errors
|
|
33
|
-
console.error('Processing failed:', error);
|
|
34
|
-
|
|
35
|
-
// Always re-throw (don't silence errors!)
|
|
36
|
-
throw error;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// ============================================================================
|
|
41
|
-
// Pattern 2: Type-Specific Error Handling
|
|
42
|
-
// ============================================================================
|
|
43
|
-
|
|
44
|
-
async function typeSpecificHandling(xmlContent: string) {
|
|
45
|
-
const logger = console;
|
|
46
|
-
|
|
47
|
-
try {
|
|
48
|
-
const parser = new XMLParserService();
|
|
49
|
-
const parsed = await parser.parse(xmlContent);
|
|
50
|
-
return parsed;
|
|
51
|
-
|
|
52
|
-
} catch (error) {
|
|
53
|
-
if (error instanceof FileParsingError) {
|
|
54
|
-
// Parse error - permanent failure
|
|
55
|
-
logger.error('Parse error (permanent):', {
|
|
56
|
-
fileName: error.fileName,
|
|
57
|
-
lineNumber: error.lineNumber,
|
|
58
|
-
code: error.code
|
|
59
|
-
});
|
|
60
|
-
throw error; // Don't retry
|
|
61
|
-
|
|
62
|
-
} else if (error instanceof PathResolutionError) {
|
|
63
|
-
// Path error - configuration issue
|
|
64
|
-
logger.error('Path error (permanent):', {
|
|
65
|
-
path: error.path
|
|
66
|
-
});
|
|
67
|
-
throw error; // Don't retry
|
|
68
|
-
|
|
69
|
-
} else if (error instanceof MappingError) {
|
|
70
|
-
// Mapping error - data or config issue
|
|
71
|
-
logger.error('Mapping error (permanent):', {
|
|
72
|
-
field: error.field,
|
|
73
|
-
sourcePath: error.sourcePath
|
|
74
|
-
});
|
|
75
|
-
throw error; // Don't retry
|
|
76
|
-
|
|
77
|
-
} else if (error instanceof IngestionError) {
|
|
78
|
-
// Check if retryable
|
|
79
|
-
if (error.isRetryable()) {
|
|
80
|
-
logger.info('Retryable error - will retry');
|
|
81
|
-
// Implement retry logic
|
|
82
|
-
} else {
|
|
83
|
-
logger.error('Non-retryable ingestion error');
|
|
84
|
-
throw error;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// Unknown error
|
|
89
|
-
throw error;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// ============================================================================
|
|
94
|
-
// Pattern 3: Using isRetryable()
|
|
95
|
-
// ============================================================================
|
|
96
|
-
|
|
97
|
-
async function checkRetryable(operation: () => Promise<any>) {
|
|
98
|
-
try {
|
|
99
|
-
return await operation();
|
|
100
|
-
|
|
101
|
-
} catch (error) {
|
|
102
|
-
if (error instanceof IngestionError && error.isRetryable()) {
|
|
103
|
-
console.log('Error is retryable:', error.code);
|
|
104
|
-
// Implement retry with exponential backoff
|
|
105
|
-
return scheduleRetry(operation);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// Not retryable - fail immediately
|
|
109
|
-
throw error;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
function scheduleRetry(operation: () => Promise<any>): Promise<any> {
|
|
114
|
-
// Implement retry logic here
|
|
115
|
-
return new Promise((resolve) => {
|
|
116
|
-
setTimeout(() => resolve(operation()), 1000);
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
// ============================================================================
|
|
121
|
-
// Pattern 4: Structured Logging with toJSON()
|
|
122
|
-
// ============================================================================
|
|
123
|
-
|
|
124
|
-
async function structuredLogging(data: any, metadata: any) {
|
|
125
|
-
const logger = console;
|
|
126
|
-
|
|
127
|
-
try {
|
|
128
|
-
return await processData(data);
|
|
129
|
-
|
|
130
|
-
} catch (error) {
|
|
131
|
-
// Use toJSON() for complete error data
|
|
132
|
-
const errorData = error instanceof IngestionError
|
|
133
|
-
? error.toJSON()
|
|
134
|
-
: { message: error.message, stack: error.stack };
|
|
135
|
-
|
|
136
|
-
// Log with business context
|
|
137
|
-
logger.error('Processing failed:', {
|
|
138
|
-
...errorData,
|
|
139
|
-
orderId: metadata.orderId,
|
|
140
|
-
customerId: metadata.customerId,
|
|
141
|
-
fileName: metadata.fileName,
|
|
142
|
-
environment: process.env.NODE_ENV,
|
|
143
|
-
timestamp: new Date().toISOString()
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
throw error;
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
async function processData(data: any): Promise<any> {
|
|
151
|
-
return data;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
// ============================================================================
|
|
155
|
-
// Pattern 5: Rate Limit Handling
|
|
156
|
-
// ============================================================================
|
|
157
|
-
|
|
158
|
-
async function handleRateLimit(operation: () => Promise<any>, maxRetries = 3) {
|
|
159
|
-
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
160
|
-
try {
|
|
161
|
-
return await operation();
|
|
162
|
-
|
|
163
|
-
} catch (error) {
|
|
164
|
-
if (error instanceof IngestionError &&
|
|
165
|
-
error.code === IngestionErrorCode.RATE_LIMIT_ERROR) {
|
|
166
|
-
|
|
167
|
-
// Get retry-after from error context
|
|
168
|
-
const retryAfter = error.context?.retryAfter || 60;
|
|
169
|
-
|
|
170
|
-
console.log(`Rate limited - waiting ${retryAfter} seconds`);
|
|
171
|
-
|
|
172
|
-
if (attempt < maxRetries - 1) {
|
|
173
|
-
// Wait for rate limit to reset
|
|
174
|
-
await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
|
|
175
|
-
continue;
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
// Not a rate limit error or max retries exceeded
|
|
180
|
-
throw error;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
throw new Error('Max retries exceeded');
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
// ============================================================================
|
|
188
|
-
// Pattern 6: Network Error with Retry
|
|
189
|
-
// ============================================================================
|
|
190
|
-
|
|
191
|
-
async function handleNetworkError(operation: () => Promise<any>, maxRetries = 3) {
|
|
192
|
-
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
193
|
-
try {
|
|
194
|
-
return await operation();
|
|
195
|
-
|
|
196
|
-
} catch (error) {
|
|
197
|
-
if (error instanceof IngestionError &&
|
|
198
|
-
error.code === IngestionErrorCode.NETWORK_ERROR) {
|
|
199
|
-
|
|
200
|
-
if (attempt < maxRetries - 1) {
|
|
201
|
-
// Exponential backoff
|
|
202
|
-
const delay = Math.pow(2, attempt) * 1000;
|
|
203
|
-
console.log(`Network error - retrying in ${delay}ms`);
|
|
204
|
-
|
|
205
|
-
await new Promise(resolve => setTimeout(resolve, delay));
|
|
206
|
-
continue;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
// Not a network error or max retries exceeded
|
|
211
|
-
throw error;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
throw new Error('Max retries exceeded');
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
// ============================================================================
|
|
219
|
-
// Pattern 7: Validation Error Details
|
|
220
|
-
// ============================================================================
|
|
221
|
-
|
|
222
|
-
async function handleValidationErrors(data: any) {
|
|
223
|
-
try {
|
|
224
|
-
return await validateAndProcess(data);
|
|
225
|
-
|
|
226
|
-
} catch (error) {
|
|
227
|
-
if (error instanceof ValidationError) {
|
|
228
|
-
console.error('Validation failed:');
|
|
229
|
-
|
|
230
|
-
// Log each validation error
|
|
231
|
-
error.validationErrors.forEach(validationError => {
|
|
232
|
-
console.error(`- Field '${validationError.field}': ${validationError.message}`);
|
|
233
|
-
console.error(` Value: ${validationError.value}`);
|
|
234
|
-
console.error(` Rule: ${validationError.rule}`);
|
|
235
|
-
});
|
|
236
|
-
|
|
237
|
-
throw error; // Don't retry validation errors
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
throw error;
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
async function validateAndProcess(data: any): Promise<any> {
|
|
245
|
-
return data;
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
// ============================================================================
|
|
249
|
-
// Pattern 8: Adding Correlation IDs
|
|
250
|
-
// ============================================================================
|
|
251
|
-
|
|
252
|
-
import { v4 as uuidv4 } from 'uuid';
|
|
253
|
-
|
|
254
|
-
async function withCorrelationId(
|
|
255
|
-
operation: () => Promise<any>,
|
|
256
|
-
correlationId?: string
|
|
257
|
-
) {
|
|
258
|
-
const id = correlationId || uuidv4();
|
|
259
|
-
|
|
260
|
-
try {
|
|
261
|
-
console.log(`[${id}] Operation started`);
|
|
262
|
-
|
|
263
|
-
const result = await operation();
|
|
264
|
-
|
|
265
|
-
console.log(`[${id}] Operation completed`);
|
|
266
|
-
return result;
|
|
267
|
-
|
|
268
|
-
} catch (error) {
|
|
269
|
-
const errorData = error instanceof IngestionError
|
|
270
|
-
? error.toJSON()
|
|
271
|
-
: { message: error.message };
|
|
272
|
-
|
|
273
|
-
console.error(`[${id}] Operation failed:`, errorData);
|
|
274
|
-
throw error;
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
// ============================================================================
|
|
279
|
-
// Pattern 9: Dead Letter Queue for Parse Errors
|
|
280
|
-
// ============================================================================
|
|
281
|
-
|
|
282
|
-
async function handleWithDeadLetter(xmlContent: string, fileName: string) {
|
|
283
|
-
try {
|
|
284
|
-
const parser = new XMLParserService();
|
|
285
|
-
return await parser.parse(xmlContent);
|
|
286
|
-
|
|
287
|
-
} catch (error) {
|
|
288
|
-
if (error instanceof FileParsingError) {
|
|
289
|
-
// Save to dead letter queue for manual review
|
|
290
|
-
await saveToDeadLetterQueue({
|
|
291
|
-
fileName,
|
|
292
|
-
content: xmlContent,
|
|
293
|
-
error: error.toJSON(),
|
|
294
|
-
timestamp: new Date().toISOString()
|
|
295
|
-
});
|
|
296
|
-
|
|
297
|
-
console.error('Parse error - saved to dead letter queue:', fileName);
|
|
298
|
-
throw error; // Don't retry
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
throw error;
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
async function saveToDeadLetterQueue(item: any): Promise<void> {
|
|
306
|
-
// Implementation: Save to S3, database, or queue system
|
|
307
|
-
console.log('Saving to dead letter queue:', item.fileName);
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
// ============================================================================
|
|
311
|
-
// Pattern 10: Comprehensive Error Handler
|
|
312
|
-
// ============================================================================
|
|
313
|
-
|
|
314
|
-
async function comprehensiveErrorHandler(
|
|
315
|
-
xmlContent: string,
|
|
316
|
-
metadata: any,
|
|
317
|
-
maxRetries = 3
|
|
318
|
-
) {
|
|
319
|
-
const logger = console;
|
|
320
|
-
const correlationId = metadata.correlationId || uuidv4();
|
|
321
|
-
|
|
322
|
-
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
323
|
-
try {
|
|
324
|
-
logger.info(`[${correlationId}] Processing attempt ${attempt + 1}/${maxRetries}`);
|
|
325
|
-
|
|
326
|
-
// Parse
|
|
327
|
-
const parser = new XMLParserService();
|
|
328
|
-
const parsed = await parser.parse(xmlContent);
|
|
329
|
-
|
|
330
|
-
// Map
|
|
331
|
-
const mapper = new GraphQLMutationMapper(
|
|
332
|
-
metadata.mappingConfig,
|
|
333
|
-
metadata.client,
|
|
334
|
-
logger
|
|
335
|
-
);
|
|
336
|
-
const payload = await mapper.map(parsed);
|
|
337
|
-
|
|
338
|
-
// Execute
|
|
339
|
-
const result = await metadata.client.graphql(payload);
|
|
340
|
-
logger.info(`[${correlationId}] Processing succeeded`);
|
|
341
|
-
return result.data;
|
|
342
|
-
|
|
343
|
-
} catch (error) {
|
|
344
|
-
// Log with full context
|
|
345
|
-
const errorContext = {
|
|
346
|
-
correlationId,
|
|
347
|
-
attempt: attempt + 1,
|
|
348
|
-
maxRetries,
|
|
349
|
-
orderId: metadata.orderId,
|
|
350
|
-
fileName: metadata.fileName,
|
|
351
|
-
error: error instanceof IngestionError ? error.toJSON() : error.message
|
|
352
|
-
};
|
|
353
|
-
|
|
354
|
-
// Check error type and decide whether to retry
|
|
355
|
-
if (error instanceof GraphQLExecutionError) {
|
|
356
|
-
// Check if retryable (e.g. timeout)
|
|
357
|
-
const firstError = error.graphqlErrors[0];
|
|
358
|
-
if (firstError?.extensions?.code === 'TIMEOUT' && attempt < maxRetries) {
|
|
359
|
-
const delay = Math.pow(2, attempt) * 1000;
|
|
360
|
-
logger.warn(`GraphQL timeout - retry in ${delay}ms`, errorContext);
|
|
361
|
-
await new Promise(resolve => setTimeout(resolve, delay));
|
|
362
|
-
continue;
|
|
363
|
-
}
|
|
364
|
-
// Permanent GraphQL error
|
|
365
|
-
logger.error('GraphQL error (permanent):', errorContext);
|
|
366
|
-
throw error;
|
|
367
|
-
|
|
368
|
-
} else if (error instanceof FluentAPIError) {
|
|
369
|
-
// Retry 5xx errors
|
|
370
|
-
if (error.statusCode >= 500 && attempt < maxRetries) {
|
|
371
|
-
const delay = Math.pow(2, attempt) * 1000;
|
|
372
|
-
logger.warn(`API error - retry in ${delay}ms`, errorContext);
|
|
373
|
-
await new Promise(resolve => setTimeout(resolve, delay));
|
|
374
|
-
continue;
|
|
375
|
-
}
|
|
376
|
-
throw error;
|
|
377
|
-
|
|
378
|
-
} else if (error instanceof FileParsingError) {
|
|
379
|
-
logger.error('Parse error (permanent):', errorContext);
|
|
380
|
-
await saveToDeadLetterQueue({ ...metadata, error: error.toJSON() });
|
|
381
|
-
throw error; // Don't retry
|
|
382
|
-
|
|
383
|
-
} else if (error instanceof PathResolutionError) {
|
|
384
|
-
logger.error('Path error (permanent):', errorContext);
|
|
385
|
-
throw error; // Don't retry
|
|
386
|
-
|
|
387
|
-
} else if (error instanceof MappingError) {
|
|
388
|
-
logger.error('Mapping error (permanent):', errorContext);
|
|
389
|
-
throw error; // Don't retry
|
|
390
|
-
|
|
391
|
-
} else if (error instanceof IngestionError) {
|
|
392
|
-
if (!error.isRetryable()) {
|
|
393
|
-
logger.error('Non-retryable error:', errorContext);
|
|
394
|
-
throw error;
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
// Handle rate limiting
|
|
398
|
-
if (error.code === IngestionErrorCode.RATE_LIMIT_ERROR) {
|
|
399
|
-
const retryAfter = error.context?.retryAfter || 60;
|
|
400
|
-
logger.warn(`Rate limited - waiting ${retryAfter}s`, errorContext);
|
|
401
|
-
await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
|
|
402
|
-
continue;
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
// Retry with exponential backoff
|
|
406
|
-
if (attempt < maxRetries - 1) {
|
|
407
|
-
const delay = Math.pow(2, attempt) * 1000;
|
|
408
|
-
logger.warn(`Retryable error - retry in ${delay}ms`, errorContext);
|
|
409
|
-
await new Promise(resolve => setTimeout(resolve, delay));
|
|
410
|
-
continue;
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
logger.error('Max retries exceeded:', errorContext);
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
throw error;
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
throw new Error('Max retries exceeded');
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
// ============================================================================
|
|
424
|
-
// Export all patterns
|
|
425
|
-
// ============================================================================
|
|
426
|
-
|
|
427
|
-
export {
|
|
428
|
-
basicErrorHandling,
|
|
429
|
-
typeSpecificHandling,
|
|
430
|
-
checkRetryable,
|
|
431
|
-
structuredLogging,
|
|
432
|
-
handleRateLimit,
|
|
433
|
-
handleNetworkError,
|
|
434
|
-
handleValidationErrors,
|
|
435
|
-
withCorrelationId,
|
|
436
|
-
handleWithDeadLetter,
|
|
437
|
-
comprehensiveErrorHandler
|
|
438
|
-
};
|
|
1
|
+
/**
|
|
2
|
+
* Common Error Handling Patterns
|
|
3
|
+
*
|
|
4
|
+
* Copy-paste ready error handling snippets for the Fluent Connect SDK
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
createClient,
|
|
9
|
+
XMLParserService,
|
|
10
|
+
GraphQLMutationMapper,
|
|
11
|
+
FileParsingError,
|
|
12
|
+
PathResolutionError,
|
|
13
|
+
MappingError,
|
|
14
|
+
ValidationError,
|
|
15
|
+
IngestionError,
|
|
16
|
+
IngestionErrorCode,
|
|
17
|
+
GraphQLExecutionError,
|
|
18
|
+
FluentAPIError
|
|
19
|
+
} from '@fluentcommerce/fc-connect-sdk';
|
|
20
|
+
|
|
21
|
+
// ============================================================================
|
|
22
|
+
// Pattern 1: Basic Try-Catch
|
|
23
|
+
// ============================================================================
|
|
24
|
+
|
|
25
|
+
async function basicErrorHandling(data: string) {
|
|
26
|
+
try {
|
|
27
|
+
const parser = new XMLParserService();
|
|
28
|
+
const parsed = await parser.parse(data);
|
|
29
|
+
return parsed;
|
|
30
|
+
|
|
31
|
+
} catch (error) {
|
|
32
|
+
// Always log errors
|
|
33
|
+
console.error('Processing failed:', error);
|
|
34
|
+
|
|
35
|
+
// Always re-throw (don't silence errors!)
|
|
36
|
+
throw error;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// ============================================================================
|
|
41
|
+
// Pattern 2: Type-Specific Error Handling
|
|
42
|
+
// ============================================================================
|
|
43
|
+
|
|
44
|
+
async function typeSpecificHandling(xmlContent: string) {
|
|
45
|
+
const logger = console;
|
|
46
|
+
|
|
47
|
+
try {
|
|
48
|
+
const parser = new XMLParserService();
|
|
49
|
+
const parsed = await parser.parse(xmlContent);
|
|
50
|
+
return parsed;
|
|
51
|
+
|
|
52
|
+
} catch (error) {
|
|
53
|
+
if (error instanceof FileParsingError) {
|
|
54
|
+
// Parse error - permanent failure
|
|
55
|
+
logger.error('Parse error (permanent):', {
|
|
56
|
+
fileName: error.fileName,
|
|
57
|
+
lineNumber: error.lineNumber,
|
|
58
|
+
code: error.code
|
|
59
|
+
});
|
|
60
|
+
throw error; // Don't retry
|
|
61
|
+
|
|
62
|
+
} else if (error instanceof PathResolutionError) {
|
|
63
|
+
// Path error - configuration issue
|
|
64
|
+
logger.error('Path error (permanent):', {
|
|
65
|
+
path: error.path
|
|
66
|
+
});
|
|
67
|
+
throw error; // Don't retry
|
|
68
|
+
|
|
69
|
+
} else if (error instanceof MappingError) {
|
|
70
|
+
// Mapping error - data or config issue
|
|
71
|
+
logger.error('Mapping error (permanent):', {
|
|
72
|
+
field: error.field,
|
|
73
|
+
sourcePath: error.sourcePath
|
|
74
|
+
});
|
|
75
|
+
throw error; // Don't retry
|
|
76
|
+
|
|
77
|
+
} else if (error instanceof IngestionError) {
|
|
78
|
+
// Check if retryable
|
|
79
|
+
if (error.isRetryable()) {
|
|
80
|
+
logger.info('Retryable error - will retry');
|
|
81
|
+
// Implement retry logic
|
|
82
|
+
} else {
|
|
83
|
+
logger.error('Non-retryable ingestion error');
|
|
84
|
+
throw error;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// Unknown error
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// ============================================================================
|
|
94
|
+
// Pattern 3: Using isRetryable()
|
|
95
|
+
// ============================================================================
|
|
96
|
+
|
|
97
|
+
async function checkRetryable(operation: () => Promise<any>) {
|
|
98
|
+
try {
|
|
99
|
+
return await operation();
|
|
100
|
+
|
|
101
|
+
} catch (error) {
|
|
102
|
+
if (error instanceof IngestionError && error.isRetryable()) {
|
|
103
|
+
console.log('Error is retryable:', error.code);
|
|
104
|
+
// Implement retry with exponential backoff
|
|
105
|
+
return scheduleRetry(operation);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Not retryable - fail immediately
|
|
109
|
+
throw error;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function scheduleRetry(operation: () => Promise<any>): Promise<any> {
|
|
114
|
+
// Implement retry logic here
|
|
115
|
+
return new Promise((resolve) => {
|
|
116
|
+
setTimeout(() => resolve(operation()), 1000);
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// ============================================================================
|
|
121
|
+
// Pattern 4: Structured Logging with toJSON()
|
|
122
|
+
// ============================================================================
|
|
123
|
+
|
|
124
|
+
async function structuredLogging(data: any, metadata: any) {
|
|
125
|
+
const logger = console;
|
|
126
|
+
|
|
127
|
+
try {
|
|
128
|
+
return await processData(data);
|
|
129
|
+
|
|
130
|
+
} catch (error) {
|
|
131
|
+
// Use toJSON() for complete error data
|
|
132
|
+
const errorData = error instanceof IngestionError
|
|
133
|
+
? error.toJSON()
|
|
134
|
+
: { message: error.message, stack: error.stack };
|
|
135
|
+
|
|
136
|
+
// Log with business context
|
|
137
|
+
logger.error('Processing failed:', {
|
|
138
|
+
...errorData,
|
|
139
|
+
orderId: metadata.orderId,
|
|
140
|
+
customerId: metadata.customerId,
|
|
141
|
+
fileName: metadata.fileName,
|
|
142
|
+
environment: process.env.NODE_ENV,
|
|
143
|
+
timestamp: new Date().toISOString()
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
throw error;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
async function processData(data: any): Promise<any> {
|
|
151
|
+
return data;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// ============================================================================
|
|
155
|
+
// Pattern 5: Rate Limit Handling
|
|
156
|
+
// ============================================================================
|
|
157
|
+
|
|
158
|
+
async function handleRateLimit(operation: () => Promise<any>, maxRetries = 3) {
|
|
159
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
160
|
+
try {
|
|
161
|
+
return await operation();
|
|
162
|
+
|
|
163
|
+
} catch (error) {
|
|
164
|
+
if (error instanceof IngestionError &&
|
|
165
|
+
error.code === IngestionErrorCode.RATE_LIMIT_ERROR) {
|
|
166
|
+
|
|
167
|
+
// Get retry-after from error context
|
|
168
|
+
const retryAfter = error.context?.retryAfter || 60;
|
|
169
|
+
|
|
170
|
+
console.log(`Rate limited - waiting ${retryAfter} seconds`);
|
|
171
|
+
|
|
172
|
+
if (attempt < maxRetries - 1) {
|
|
173
|
+
// Wait for rate limit to reset
|
|
174
|
+
await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// Not a rate limit error or max retries exceeded
|
|
180
|
+
throw error;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
throw new Error('Max retries exceeded');
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// ============================================================================
|
|
188
|
+
// Pattern 6: Network Error with Retry
|
|
189
|
+
// ============================================================================
|
|
190
|
+
|
|
191
|
+
async function handleNetworkError(operation: () => Promise<any>, maxRetries = 3) {
|
|
192
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
193
|
+
try {
|
|
194
|
+
return await operation();
|
|
195
|
+
|
|
196
|
+
} catch (error) {
|
|
197
|
+
if (error instanceof IngestionError &&
|
|
198
|
+
error.code === IngestionErrorCode.NETWORK_ERROR) {
|
|
199
|
+
|
|
200
|
+
if (attempt < maxRetries - 1) {
|
|
201
|
+
// Exponential backoff
|
|
202
|
+
const delay = Math.pow(2, attempt) * 1000;
|
|
203
|
+
console.log(`Network error - retrying in ${delay}ms`);
|
|
204
|
+
|
|
205
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// Not a network error or max retries exceeded
|
|
211
|
+
throw error;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
throw new Error('Max retries exceeded');
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// ============================================================================
|
|
219
|
+
// Pattern 7: Validation Error Details
|
|
220
|
+
// ============================================================================
|
|
221
|
+
|
|
222
|
+
async function handleValidationErrors(data: any) {
|
|
223
|
+
try {
|
|
224
|
+
return await validateAndProcess(data);
|
|
225
|
+
|
|
226
|
+
} catch (error) {
|
|
227
|
+
if (error instanceof ValidationError) {
|
|
228
|
+
console.error('Validation failed:');
|
|
229
|
+
|
|
230
|
+
// Log each validation error
|
|
231
|
+
error.validationErrors.forEach(validationError => {
|
|
232
|
+
console.error(`- Field '${validationError.field}': ${validationError.message}`);
|
|
233
|
+
console.error(` Value: ${validationError.value}`);
|
|
234
|
+
console.error(` Rule: ${validationError.rule}`);
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
throw error; // Don't retry validation errors
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
throw error;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
async function validateAndProcess(data: any): Promise<any> {
|
|
245
|
+
return data;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// ============================================================================
|
|
249
|
+
// Pattern 8: Adding Correlation IDs
|
|
250
|
+
// ============================================================================
|
|
251
|
+
|
|
252
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
253
|
+
|
|
254
|
+
async function withCorrelationId(
|
|
255
|
+
operation: () => Promise<any>,
|
|
256
|
+
correlationId?: string
|
|
257
|
+
) {
|
|
258
|
+
const id = correlationId || uuidv4();
|
|
259
|
+
|
|
260
|
+
try {
|
|
261
|
+
console.log(`[${id}] Operation started`);
|
|
262
|
+
|
|
263
|
+
const result = await operation();
|
|
264
|
+
|
|
265
|
+
console.log(`[${id}] Operation completed`);
|
|
266
|
+
return result;
|
|
267
|
+
|
|
268
|
+
} catch (error) {
|
|
269
|
+
const errorData = error instanceof IngestionError
|
|
270
|
+
? error.toJSON()
|
|
271
|
+
: { message: error.message };
|
|
272
|
+
|
|
273
|
+
console.error(`[${id}] Operation failed:`, errorData);
|
|
274
|
+
throw error;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// ============================================================================
|
|
279
|
+
// Pattern 9: Dead Letter Queue for Parse Errors
|
|
280
|
+
// ============================================================================
|
|
281
|
+
|
|
282
|
+
async function handleWithDeadLetter(xmlContent: string, fileName: string) {
|
|
283
|
+
try {
|
|
284
|
+
const parser = new XMLParserService();
|
|
285
|
+
return await parser.parse(xmlContent);
|
|
286
|
+
|
|
287
|
+
} catch (error) {
|
|
288
|
+
if (error instanceof FileParsingError) {
|
|
289
|
+
// Save to dead letter queue for manual review
|
|
290
|
+
await saveToDeadLetterQueue({
|
|
291
|
+
fileName,
|
|
292
|
+
content: xmlContent,
|
|
293
|
+
error: error.toJSON(),
|
|
294
|
+
timestamp: new Date().toISOString()
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
console.error('Parse error - saved to dead letter queue:', fileName);
|
|
298
|
+
throw error; // Don't retry
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
throw error;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
async function saveToDeadLetterQueue(item: any): Promise<void> {
|
|
306
|
+
// Implementation: Save to S3, database, or queue system
|
|
307
|
+
console.log('Saving to dead letter queue:', item.fileName);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
// ============================================================================
|
|
311
|
+
// Pattern 10: Comprehensive Error Handler
|
|
312
|
+
// ============================================================================
|
|
313
|
+
|
|
314
|
+
async function comprehensiveErrorHandler(
|
|
315
|
+
xmlContent: string,
|
|
316
|
+
metadata: any,
|
|
317
|
+
maxRetries = 3
|
|
318
|
+
) {
|
|
319
|
+
const logger = console;
|
|
320
|
+
const correlationId = metadata.correlationId || uuidv4();
|
|
321
|
+
|
|
322
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
323
|
+
try {
|
|
324
|
+
logger.info(`[${correlationId}] Processing attempt ${attempt + 1}/${maxRetries}`);
|
|
325
|
+
|
|
326
|
+
// Parse
|
|
327
|
+
const parser = new XMLParserService();
|
|
328
|
+
const parsed = await parser.parse(xmlContent);
|
|
329
|
+
|
|
330
|
+
// Map
|
|
331
|
+
const mapper = new GraphQLMutationMapper(
|
|
332
|
+
metadata.mappingConfig,
|
|
333
|
+
metadata.client,
|
|
334
|
+
logger
|
|
335
|
+
);
|
|
336
|
+
const payload = await mapper.map(parsed);
|
|
337
|
+
|
|
338
|
+
// Execute
|
|
339
|
+
const result = await metadata.client.graphql(payload);
|
|
340
|
+
logger.info(`[${correlationId}] Processing succeeded`);
|
|
341
|
+
return result.data;
|
|
342
|
+
|
|
343
|
+
} catch (error) {
|
|
344
|
+
// Log with full context
|
|
345
|
+
const errorContext = {
|
|
346
|
+
correlationId,
|
|
347
|
+
attempt: attempt + 1,
|
|
348
|
+
maxRetries,
|
|
349
|
+
orderId: metadata.orderId,
|
|
350
|
+
fileName: metadata.fileName,
|
|
351
|
+
error: error instanceof IngestionError ? error.toJSON() : error.message
|
|
352
|
+
};
|
|
353
|
+
|
|
354
|
+
// Check error type and decide whether to retry
|
|
355
|
+
if (error instanceof GraphQLExecutionError) {
|
|
356
|
+
// Check if retryable (e.g. timeout)
|
|
357
|
+
const firstError = error.graphqlErrors[0];
|
|
358
|
+
if (firstError?.extensions?.code === 'TIMEOUT' && attempt < maxRetries) {
|
|
359
|
+
const delay = Math.pow(2, attempt) * 1000;
|
|
360
|
+
logger.warn(`GraphQL timeout - retry in ${delay}ms`, errorContext);
|
|
361
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
362
|
+
continue;
|
|
363
|
+
}
|
|
364
|
+
// Permanent GraphQL error
|
|
365
|
+
logger.error('GraphQL error (permanent):', errorContext);
|
|
366
|
+
throw error;
|
|
367
|
+
|
|
368
|
+
} else if (error instanceof FluentAPIError) {
|
|
369
|
+
// Retry 5xx errors
|
|
370
|
+
if (error.statusCode >= 500 && attempt < maxRetries) {
|
|
371
|
+
const delay = Math.pow(2, attempt) * 1000;
|
|
372
|
+
logger.warn(`API error - retry in ${delay}ms`, errorContext);
|
|
373
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
374
|
+
continue;
|
|
375
|
+
}
|
|
376
|
+
throw error;
|
|
377
|
+
|
|
378
|
+
} else if (error instanceof FileParsingError) {
|
|
379
|
+
logger.error('Parse error (permanent):', errorContext);
|
|
380
|
+
await saveToDeadLetterQueue({ ...metadata, error: error.toJSON() });
|
|
381
|
+
throw error; // Don't retry
|
|
382
|
+
|
|
383
|
+
} else if (error instanceof PathResolutionError) {
|
|
384
|
+
logger.error('Path error (permanent):', errorContext);
|
|
385
|
+
throw error; // Don't retry
|
|
386
|
+
|
|
387
|
+
} else if (error instanceof MappingError) {
|
|
388
|
+
logger.error('Mapping error (permanent):', errorContext);
|
|
389
|
+
throw error; // Don't retry
|
|
390
|
+
|
|
391
|
+
} else if (error instanceof IngestionError) {
|
|
392
|
+
if (!error.isRetryable()) {
|
|
393
|
+
logger.error('Non-retryable error:', errorContext);
|
|
394
|
+
throw error;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
// Handle rate limiting
|
|
398
|
+
if (error.code === IngestionErrorCode.RATE_LIMIT_ERROR) {
|
|
399
|
+
const retryAfter = error.context?.retryAfter || 60;
|
|
400
|
+
logger.warn(`Rate limited - waiting ${retryAfter}s`, errorContext);
|
|
401
|
+
await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
|
|
402
|
+
continue;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
// Retry with exponential backoff
|
|
406
|
+
if (attempt < maxRetries - 1) {
|
|
407
|
+
const delay = Math.pow(2, attempt) * 1000;
|
|
408
|
+
logger.warn(`Retryable error - retry in ${delay}ms`, errorContext);
|
|
409
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
410
|
+
continue;
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
logger.error('Max retries exceeded:', errorContext);
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
throw error;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
throw new Error('Max retries exceeded');
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
// ============================================================================
|
|
424
|
+
// Export all patterns
|
|
425
|
+
// ============================================================================
|
|
426
|
+
|
|
427
|
+
export {
|
|
428
|
+
basicErrorHandling,
|
|
429
|
+
typeSpecificHandling,
|
|
430
|
+
checkRetryable,
|
|
431
|
+
structuredLogging,
|
|
432
|
+
handleRateLimit,
|
|
433
|
+
handleNetworkError,
|
|
434
|
+
handleValidationErrors,
|
|
435
|
+
withCorrelationId,
|
|
436
|
+
handleWithDeadLetter,
|
|
437
|
+
comprehensiveErrorHandler
|
|
438
|
+
};
|