@fluentcommerce/fc-connect-sdk 0.1.53 → 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 +30 -2
- package/README.md +39 -0
- package/dist/cjs/auth/index.d.ts +3 -0
- package/dist/cjs/auth/index.js +13 -0
- package/dist/cjs/auth/profile-loader.d.ts +18 -0
- package/dist/cjs/auth/profile-loader.js +208 -0
- package/dist/cjs/client-factory.d.ts +4 -0
- package/dist/cjs/client-factory.js +10 -0
- package/dist/cjs/clients/fluent-client.js +13 -6
- package/dist/cjs/index.d.ts +3 -1
- package/dist/cjs/index.js +8 -2
- package/dist/cjs/utils/pagination-helpers.js +38 -2
- package/dist/cjs/versori/fluent-versori-client.js +11 -5
- package/dist/esm/auth/index.d.ts +3 -0
- package/dist/esm/auth/index.js +2 -0
- package/dist/esm/auth/profile-loader.d.ts +18 -0
- package/dist/esm/auth/profile-loader.js +169 -0
- package/dist/esm/client-factory.d.ts +4 -0
- package/dist/esm/client-factory.js +9 -0
- package/dist/esm/clients/fluent-client.js +13 -6
- package/dist/esm/index.d.ts +3 -1
- package/dist/esm/index.js +2 -1
- 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/dist/types/auth/index.d.ts +3 -0
- package/dist/types/auth/profile-loader.d.ts +18 -0
- package/dist/types/client-factory.d.ts +4 -0
- package/dist/types/index.d.ts +3 -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 -482
- 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
|
@@ -1,478 +1,478 @@
|
|
|
1
|
-
# Module 5: Debugging
|
|
2
|
-
|
|
3
|
-
**Level:** Intermediate
|
|
4
|
-
**Estimated Time:** 20 minutes
|
|
5
|
-
|
|
6
|
-
## Overview
|
|
7
|
-
|
|
8
|
-
This module covers debugging techniques for test failures, error analysis patterns, and troubleshooting common issues.
|
|
9
|
-
|
|
10
|
-
## Learning Objectives
|
|
11
|
-
|
|
12
|
-
By the end of this module, you will:
|
|
13
|
-
- ✅ Know how to enable verbose logging for detailed debugging
|
|
14
|
-
- ✅ Understand how to analyze test errors systematically
|
|
15
|
-
- ✅ Be able to categorize and diagnose common failure patterns
|
|
16
|
-
- ✅ Know troubleshooting techniques for specific error types
|
|
17
|
-
|
|
18
|
-
## Verbose Logging
|
|
19
|
-
|
|
20
|
-
Enable detailed logging to understand what's happening during tests:
|
|
21
|
-
|
|
22
|
-
```typescript
|
|
23
|
-
import { S3SDKTester, createConsoleLogger } from '@fluentcommerce/fc-connect-sdk';
|
|
24
|
-
|
|
25
|
-
// Create S3 tester with credentials
|
|
26
|
-
const tester = new S3SDKTester({
|
|
27
|
-
accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
|
|
28
|
-
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
|
|
29
|
-
region: 'us-east-1'
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
// Run all S3 tests with verbose output
|
|
33
|
-
const results = await tester.testAll('test-bucket');
|
|
34
|
-
|
|
35
|
-
// Display verbose results
|
|
36
|
-
console.log('Test Results:');
|
|
37
|
-
console.log(` Total: ${results.summary.total}`);
|
|
38
|
-
console.log(` Passed: ${results.summary.passed}`);
|
|
39
|
-
console.log(` Failed: ${results.summary.failed}`);
|
|
40
|
-
console.log(` Success Rate: ${results.summary.successRate.toFixed(2)}%`);
|
|
41
|
-
|
|
42
|
-
// Show each test result
|
|
43
|
-
Object.entries(results.tests).forEach(([testName, result]) => {
|
|
44
|
-
console.log(`\n${testName}:`, result.success ? '✅' : ');
|
|
45
|
-
if (result.message) console.log(` Message: ${result.message}`);
|
|
46
|
-
if (result.duration) console.log(` Duration: ${result.duration}ms`);
|
|
47
|
-
if (result.error) console.log(` Error: ${result.error}`);
|
|
48
|
-
});
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
### Analyzing Test Results with Categories
|
|
52
|
-
|
|
53
|
-
```typescript
|
|
54
|
-
import { S3SDKTester } from '@fluentcommerce/fc-connect-sdk';
|
|
55
|
-
|
|
56
|
-
async function analyzeTestResults() {
|
|
57
|
-
const tester = new S3SDKTester({
|
|
58
|
-
accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
|
|
59
|
-
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
|
|
60
|
-
region: 'us-east-1'
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
const results = await tester.testAll('test-bucket');
|
|
64
|
-
|
|
65
|
-
// Categorize results
|
|
66
|
-
const passed = Object.entries(results.tests).filter(([_, r]) => r.success);
|
|
67
|
-
const failed = Object.entries(results.tests).filter(([_, r]) => !r.success);
|
|
68
|
-
|
|
69
|
-
console.log('TEST SUMMARY');
|
|
70
|
-
console.log('============');
|
|
71
|
-
console.log(`Total: ${results.summary.total}`);
|
|
72
|
-
console.log(`Passed: ${passed.length} (${results.summary.successRate.toFixed(1)}%)`);
|
|
73
|
-
console.log(`Failed: ${failed.length}`);
|
|
74
|
-
console.log(`Duration: ${results.summary.totalDuration}ms`);
|
|
75
|
-
|
|
76
|
-
if (failed.length > 0) {
|
|
77
|
-
console.log('\nFAILED TESTS');
|
|
78
|
-
console.log('============');
|
|
79
|
-
failed.forEach(([name, result]) => {
|
|
80
|
-
console.log(`${name}:`);
|
|
81
|
-
console.log(` Message: ${result.message}`);
|
|
82
|
-
if (result.error) console.log(` Error: ${result.error}`);
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// Performance analysis
|
|
87
|
-
console.log('\nPERFORMANCE');
|
|
88
|
-
console.log('===========');
|
|
89
|
-
const avgDuration = results.summary.averageDuration;
|
|
90
|
-
console.log(`Average test duration: ${avgDuration.toFixed(0)}ms`);
|
|
91
|
-
|
|
92
|
-
const slowTests = Object.entries(results.tests)
|
|
93
|
-
.filter(([_, r]) => r.duration && r.duration > avgDuration * 2)
|
|
94
|
-
.sort((a, b) => (b[1].duration || 0) - (a[1].duration || 0));
|
|
95
|
-
|
|
96
|
-
if (slowTests.length > 0) {
|
|
97
|
-
console.log('Slow tests:');
|
|
98
|
-
slowTests.forEach(([name, result]) => {
|
|
99
|
-
console.log(` ${name}: ${result.duration}ms`);
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
analyzeTestResults().catch(console.error);
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
## Categorizing Errors
|
|
108
|
-
|
|
109
|
-
Systematically categorize and diagnose test failures:
|
|
110
|
-
|
|
111
|
-
```typescript
|
|
112
|
-
import { S3SDKTester } from '@fluentcommerce/fc-connect-sdk';
|
|
113
|
-
|
|
114
|
-
async function categorizeErrors() {
|
|
115
|
-
const tester = new S3SDKTester({
|
|
116
|
-
accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
|
|
117
|
-
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
|
|
118
|
-
region: 'us-east-1'
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
const results = await tester.testAll('test-bucket');
|
|
122
|
-
|
|
123
|
-
if (results.summary.successRate === 100) {
|
|
124
|
-
console.log('✅ All tests passed, no errors to analyze');
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
console.log('ERROR ANALYSIS');
|
|
129
|
-
console.log('==============\n');
|
|
130
|
-
|
|
131
|
-
// Collect all errors
|
|
132
|
-
const errors = Object.entries(results.tests)
|
|
133
|
-
.filter(([_, result]) => !result.success)
|
|
134
|
-
.map(([name, result]) => ({
|
|
135
|
-
test: name,
|
|
136
|
-
message: result.message,
|
|
137
|
-
error: result.error
|
|
138
|
-
}));
|
|
139
|
-
|
|
140
|
-
// Categorize errors
|
|
141
|
-
const authErrors = errors.filter(e =>
|
|
142
|
-
e.error?.includes('401') || e.error?.includes('403') ||
|
|
143
|
-
e.error?.includes('Unauthorized') || e.error?.includes('Forbidden')
|
|
144
|
-
);
|
|
145
|
-
|
|
146
|
-
const permissionErrors = errors.filter(e =>
|
|
147
|
-
e.error?.includes('Access Denied') || e.error?.includes('NoSuchBucket')
|
|
148
|
-
);
|
|
149
|
-
|
|
150
|
-
const networkErrors = errors.filter(e =>
|
|
151
|
-
e.error?.includes('ENOTFOUND') || e.error?.includes('ETIMEDOUT') ||
|
|
152
|
-
e.error?.includes('ECONNREFUSED') || e.error?.includes('Network')
|
|
153
|
-
);
|
|
154
|
-
|
|
155
|
-
// Report by category
|
|
156
|
-
if (authErrors.length > 0) {
|
|
157
|
-
console.log('AUTHENTICATION ISSUES:');
|
|
158
|
-
authErrors.forEach(e => {
|
|
159
|
-
console.log(` ${e.test}: ${e.error}`);
|
|
160
|
-
});
|
|
161
|
-
console.log(' Action: Verify AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY\n');
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
if (permissionErrors.length > 0) {
|
|
165
|
-
console.log('PERMISSION ISSUES:');
|
|
166
|
-
permissionErrors.forEach(e => {
|
|
167
|
-
console.log(` ${e.test}: ${e.error}`);
|
|
168
|
-
});
|
|
169
|
-
console.log(' Action: Check IAM policy and bucket permissions\n');
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
if (networkErrors.length > 0) {
|
|
173
|
-
console.log('NETWORK ISSUES:');
|
|
174
|
-
networkErrors.forEach(e => {
|
|
175
|
-
console.log(` ${e.test}: ${e.error}`);
|
|
176
|
-
});
|
|
177
|
-
console.log(' Action: Check network connectivity and firewall rules\n');
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
// Other errors
|
|
181
|
-
const otherErrors = errors.filter(e =>
|
|
182
|
-
!authErrors.includes(e) &&
|
|
183
|
-
!permissionErrors.includes(e) &&
|
|
184
|
-
!networkErrors.includes(e)
|
|
185
|
-
);
|
|
186
|
-
|
|
187
|
-
if (otherErrors.length > 0) {
|
|
188
|
-
console.log('OTHER ERRORS:');
|
|
189
|
-
otherErrors.forEach(e => {
|
|
190
|
-
console.log(` ${e.test}: ${e.error}`);
|
|
191
|
-
});
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
categorizeErrors().catch(console.error);
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
## Common Error Patterns
|
|
199
|
-
|
|
200
|
-
### S3 Access Denied
|
|
201
|
-
|
|
202
|
-
```typescript
|
|
203
|
-
// Error: AccessDenied
|
|
204
|
-
// Cause: Insufficient IAM permissions
|
|
205
|
-
// Solution:
|
|
206
|
-
|
|
207
|
-
async function diagnoseS3AccessDenied() {
|
|
208
|
-
console.log('Diagnosing S3 Access Denied error...');
|
|
209
|
-
|
|
210
|
-
// Check if credentials are set
|
|
211
|
-
if (!process.env.AWS_ACCESS_KEY_ID) {
|
|
212
|
-
console.error('❌ AWS_ACCESS_KEY_ID not set');
|
|
213
|
-
return;
|
|
214
|
-
}
|
|
215
|
-
if (!process.env.AWS_SECRET_ACCESS_KEY) {
|
|
216
|
-
console.error('❌ AWS_SECRET_ACCESS_KEY not set');
|
|
217
|
-
return;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
console.log('✅ Credentials are set');
|
|
221
|
-
|
|
222
|
-
// Check bucket access
|
|
223
|
-
console.log('Testing bucket access...');
|
|
224
|
-
const tester = new S3SDKTester({
|
|
225
|
-
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
|
|
226
|
-
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
|
|
227
|
-
region: 'us-east-1'
|
|
228
|
-
});
|
|
229
|
-
|
|
230
|
-
const results = await tester.testAll('test-bucket');
|
|
231
|
-
|
|
232
|
-
// Check which operations failed
|
|
233
|
-
const failedOps = Object.entries(results.tests)
|
|
234
|
-
.filter(([_, result]) => !result.success);
|
|
235
|
-
|
|
236
|
-
if (failedOps.length > 0) {
|
|
237
|
-
console.error('❌ Some operations failed:');
|
|
238
|
-
failedOps.forEach(([op, result]) => {
|
|
239
|
-
console.log(` ${op}: ${result.error}`);
|
|
240
|
-
});
|
|
241
|
-
|
|
242
|
-
console.log('\nRequired IAM permissions:');
|
|
243
|
-
console.log(' - s3:ListBucket');
|
|
244
|
-
console.log(' - s3:GetObject');
|
|
245
|
-
console.log(' - s3:PutObject');
|
|
246
|
-
console.log(' - s3:DeleteObject');
|
|
247
|
-
console.log(' - s3:GetBucketLocation');
|
|
248
|
-
} else {
|
|
249
|
-
console.log('✅ All S3 operations successful');
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
### Fluent Authentication Failed
|
|
255
|
-
|
|
256
|
-
```typescript
|
|
257
|
-
// Error: 401 Unauthorized
|
|
258
|
-
// Cause: Invalid OAuth2 credentials
|
|
259
|
-
// Solution:
|
|
260
|
-
|
|
261
|
-
async function diagnoseFluentAuth() {
|
|
262
|
-
console.log('Diagnosing Fluent Authentication...');
|
|
263
|
-
|
|
264
|
-
// Verify credentials are set
|
|
265
|
-
const required = [
|
|
266
|
-
'FLUENT_BASE_URL',
|
|
267
|
-
'FLUENT_CLIENT_ID',
|
|
268
|
-
'FLUENT_CLIENT_SECRET',
|
|
269
|
-
'FLUENT_USERNAME',
|
|
270
|
-
'FLUENT_PASSWORD',
|
|
271
|
-
'FLUENT_RETAILER_ID'
|
|
272
|
-
];
|
|
273
|
-
|
|
274
|
-
const missing = required.filter(key => !process.env[key]);
|
|
275
|
-
|
|
276
|
-
if (missing.length > 0) {
|
|
277
|
-
console.error('❌ Missing required environment variables:');
|
|
278
|
-
missing.forEach(key => console.error(` - ${key}`));
|
|
279
|
-
return;
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
console.log('✅ All environment variables set');
|
|
283
|
-
|
|
284
|
-
// Test connection
|
|
285
|
-
try {
|
|
286
|
-
const client = await createClient({
|
|
287
|
-
config: {
|
|
288
|
-
baseUrl: process.env.FLUENT_BASE_URL!,
|
|
289
|
-
clientId: process.env.FLUENT_CLIENT_ID!,
|
|
290
|
-
clientSecret: process.env.FLUENT_CLIENT_SECRET!,
|
|
291
|
-
username: process.env.FLUENT_USERNAME!,
|
|
292
|
-
password: process.env.FLUENT_PASSWORD!,
|
|
293
|
-
retailerId: process.env.FLUENT_RETAILER_ID!
|
|
294
|
-
}
|
|
295
|
-
});
|
|
296
|
-
|
|
297
|
-
const tester = new FluentConnectionTester(client, {
|
|
298
|
-
retailerId: process.env.FLUENT_RETAILER_ID!
|
|
299
|
-
});
|
|
300
|
-
|
|
301
|
-
const result = await tester.testConnection();
|
|
302
|
-
|
|
303
|
-
if (result.success) {
|
|
304
|
-
console.log('✅ Connection test successful');
|
|
305
|
-
console.log(` User: ${result.details?.username}`);
|
|
306
|
-
console.log(` Retailer: ${result.details?.retailerName}`);
|
|
307
|
-
} else {
|
|
308
|
-
console.error('❌ Connection test failed');
|
|
309
|
-
console.log(`Error: ${result.error}`);
|
|
310
|
-
console.log('Check:');
|
|
311
|
-
console.log(' 1. Client ID and secret are correct');
|
|
312
|
-
console.log(' 2. Username and password are valid');
|
|
313
|
-
console.log(' 3. User has appropriate permissions');
|
|
314
|
-
console.log(' 4. Retailer ID matches your account');
|
|
315
|
-
}
|
|
316
|
-
} catch (error) {
|
|
317
|
-
console.error('❌ Error during connection test:', error instanceof Error ? error.message : String(error));
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
```
|
|
321
|
-
|
|
322
|
-
### Network Timeout Errors
|
|
323
|
-
|
|
324
|
-
```typescript
|
|
325
|
-
// Error: ETIMEDOUT
|
|
326
|
-
// Cause: Network latency or service unavailability
|
|
327
|
-
// Solution:
|
|
328
|
-
|
|
329
|
-
async function diagnoseTimeout() {
|
|
330
|
-
console.log('Diagnosing timeout issues...');
|
|
331
|
-
|
|
332
|
-
const tester = new S3SDKTester({
|
|
333
|
-
accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
|
|
334
|
-
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
|
|
335
|
-
region: 'us-east-1'
|
|
336
|
-
});
|
|
337
|
-
|
|
338
|
-
console.log('Testing S3 connectivity...');
|
|
339
|
-
const results = await tester.testAll('test-bucket');
|
|
340
|
-
|
|
341
|
-
// Check if timeouts occurred
|
|
342
|
-
const timedOut = Object.entries(results.tests)
|
|
343
|
-
.filter(([_, r]) => r.error?.includes('timeout') || r.error?.includes('ETIMEDOUT'));
|
|
344
|
-
|
|
345
|
-
if (timedOut.length > 0) {
|
|
346
|
-
console.log('❌ Timeout errors detected:');
|
|
347
|
-
timedOut.forEach(([op, result]) => {
|
|
348
|
-
console.log(` ${op}: ${result.error}`);
|
|
349
|
-
console.log(` Duration: ${result.duration}ms`);
|
|
350
|
-
});
|
|
351
|
-
console.log('\nRecommendation: Network may be slow or service is unresponsive');
|
|
352
|
-
} else if (results.summary.totalDuration > 30000) {
|
|
353
|
-
console.log('⚠️ Tests completed but response is slow:');
|
|
354
|
-
console.log(` Total duration: ${results.summary.totalDuration}ms`);
|
|
355
|
-
console.log(` Average per test: ${results.summary.averageDuration.toFixed(0)}ms`);
|
|
356
|
-
} else {
|
|
357
|
-
console.log('✅ No timeout issues detected');
|
|
358
|
-
console.log(` Total duration: ${results.summary.totalDuration}ms`);
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
```
|
|
362
|
-
|
|
363
|
-
## Debugging Checklist
|
|
364
|
-
|
|
365
|
-
Use this checklist when tests fail:
|
|
366
|
-
|
|
367
|
-
```typescript
|
|
368
|
-
async function runDiagnostics() {
|
|
369
|
-
console.log('=== Test Diagnostics Checklist ===\n');
|
|
370
|
-
|
|
371
|
-
// 1. Environment variables
|
|
372
|
-
console.log('1. Environment Variables:');
|
|
373
|
-
const requiredVars = [
|
|
374
|
-
'AWS_ACCESS_KEY_ID',
|
|
375
|
-
'AWS_SECRET_ACCESS_KEY',
|
|
376
|
-
'AWS_REGION',
|
|
377
|
-
'FLUENT_CLIENT_ID',
|
|
378
|
-
'FLUENT_CLIENT_SECRET'
|
|
379
|
-
];
|
|
380
|
-
|
|
381
|
-
requiredVars.forEach(varName => {
|
|
382
|
-
const status = process.env[varName] ? '✅' : ';
|
|
383
|
-
console.log(` ${status} ${varName}`);
|
|
384
|
-
});
|
|
385
|
-
|
|
386
|
-
// 2. Network connectivity
|
|
387
|
-
console.log('\n2. Network Connectivity:');
|
|
388
|
-
try {
|
|
389
|
-
const https = require('https');
|
|
390
|
-
await new Promise((resolve, reject) => {
|
|
391
|
-
https.get('https://api.fluentcommerce.com', (res) => {
|
|
392
|
-
console.log(` ✅ Can reach Fluent API (status: ${res.statusCode})`);
|
|
393
|
-
resolve();
|
|
394
|
-
}).on('error', reject);
|
|
395
|
-
});
|
|
396
|
-
} catch (error) {
|
|
397
|
-
console.log(` ❌ Cannot reach Fluent API: ${error.message}`);
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
// 3. S3 connectivity
|
|
401
|
-
console.log('\n3. S3 Connectivity:');
|
|
402
|
-
try {
|
|
403
|
-
const s3Tester = new S3SDKTester({
|
|
404
|
-
accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
|
|
405
|
-
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
|
|
406
|
-
region: process.env.AWS_REGION || 'us-east-1'
|
|
407
|
-
});
|
|
408
|
-
|
|
409
|
-
const results = await s3Tester.testAll(process.env.S3_BUCKET!);
|
|
410
|
-
const success = results.summary.successRate === 100;
|
|
411
|
-
console.log(` ${success ? '✅' : '} S3 access (${results.summary.passed}/${results.summary.total} tests)`);
|
|
412
|
-
} catch (error) {
|
|
413
|
-
console.log(` ❌ S3 error: ${error instanceof Error ? error.message : String(error)}`);
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
// 4. Fluent API connectivity
|
|
417
|
-
console.log('\n4. Fluent API Connectivity:');
|
|
418
|
-
try {
|
|
419
|
-
const client = await createClient({
|
|
420
|
-
config: {
|
|
421
|
-
baseUrl: process.env.FLUENT_BASE_URL!,
|
|
422
|
-
clientId: process.env.FLUENT_CLIENT_ID!,
|
|
423
|
-
clientSecret: process.env.FLUENT_CLIENT_SECRET!,
|
|
424
|
-
username: process.env.FLUENT_USERNAME!,
|
|
425
|
-
password: process.env.FLUENT_PASSWORD!,
|
|
426
|
-
retailerId: process.env.FLUENT_RETAILER_ID!
|
|
427
|
-
}
|
|
428
|
-
});
|
|
429
|
-
|
|
430
|
-
const tester = new FluentConnectionTester(client, {
|
|
431
|
-
retailerId: process.env.FLUENT_RETAILER_ID!
|
|
432
|
-
});
|
|
433
|
-
|
|
434
|
-
const result = await tester.testConnection();
|
|
435
|
-
console.log(` ${result.success ? '✅' : '} Fluent API access`);
|
|
436
|
-
if (result.success) {
|
|
437
|
-
console.log(` User: ${result.details?.username}`);
|
|
438
|
-
}
|
|
439
|
-
} catch (error) {
|
|
440
|
-
console.log(` ❌ Fluent API error: ${error instanceof Error ? error.message : String(error)}`);
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
console.log('\n=== Diagnostics Complete ===');
|
|
444
|
-
}
|
|
445
|
-
```
|
|
446
|
-
|
|
447
|
-
## Key Takeaways
|
|
448
|
-
|
|
449
|
-
- 🎯 Enable verbose logging to see detailed test execution
|
|
450
|
-
- 🎯 Use error analysis functions to categorize failures
|
|
451
|
-
- 🎯 Check authentication and permissions first
|
|
452
|
-
- 🎯 Verify network connectivity and timeouts
|
|
453
|
-
- 🎯 Use diagnostics checklist for systematic troubleshooting
|
|
454
|
-
|
|
455
|
-
## Practice Exercise
|
|
456
|
-
|
|
457
|
-
Create a diagnostic script for your environment:
|
|
458
|
-
|
|
459
|
-
```typescript
|
|
460
|
-
async function diagnoseMyEnvironment() {
|
|
461
|
-
// TODO: Check environment variables
|
|
462
|
-
// TODO: Test S3 connectivity
|
|
463
|
-
// TODO: Test Fluent API connectivity
|
|
464
|
-
// TODO: Analyze any errors
|
|
465
|
-
}
|
|
466
|
-
```
|
|
467
|
-
|
|
468
|
-
## Next Steps
|
|
469
|
-
|
|
470
|
-
Continue to [Module 6: CI/CD Integration →](./04-reference-testing-06-cicd-integration.md) to learn about automation.
|
|
471
|
-
|
|
472
|
-
---
|
|
473
|
-
|
|
474
|
-
**Module Navigation:**
|
|
475
|
-
- **Previous:** [Module 4 - Integration Testing](./04-reference-testing-04-integration-testing.md)
|
|
476
|
-
- **Current:** Module 5 - Debugging
|
|
477
|
-
- **Next:** [Module 6 - CI/CD Integration](./04-reference-testing-06-cicd-integration.md)
|
|
478
|
-
- **Back to:** [Testing Guide Index](../testing-readme.md)
|
|
1
|
+
# Module 5: Debugging
|
|
2
|
+
|
|
3
|
+
**Level:** Intermediate
|
|
4
|
+
**Estimated Time:** 20 minutes
|
|
5
|
+
|
|
6
|
+
## Overview
|
|
7
|
+
|
|
8
|
+
This module covers debugging techniques for test failures, error analysis patterns, and troubleshooting common issues.
|
|
9
|
+
|
|
10
|
+
## Learning Objectives
|
|
11
|
+
|
|
12
|
+
By the end of this module, you will:
|
|
13
|
+
- ✅ Know how to enable verbose logging for detailed debugging
|
|
14
|
+
- ✅ Understand how to analyze test errors systematically
|
|
15
|
+
- ✅ Be able to categorize and diagnose common failure patterns
|
|
16
|
+
- ✅ Know troubleshooting techniques for specific error types
|
|
17
|
+
|
|
18
|
+
## Verbose Logging
|
|
19
|
+
|
|
20
|
+
Enable detailed logging to understand what's happening during tests:
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import { S3SDKTester, createConsoleLogger } from '@fluentcommerce/fc-connect-sdk';
|
|
24
|
+
|
|
25
|
+
// Create S3 tester with credentials
|
|
26
|
+
const tester = new S3SDKTester({
|
|
27
|
+
accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
|
|
28
|
+
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
|
|
29
|
+
region: 'us-east-1'
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
// Run all S3 tests with verbose output
|
|
33
|
+
const results = await tester.testAll('test-bucket');
|
|
34
|
+
|
|
35
|
+
// Display verbose results
|
|
36
|
+
console.log('Test Results:');
|
|
37
|
+
console.log(` Total: ${results.summary.total}`);
|
|
38
|
+
console.log(` Passed: ${results.summary.passed}`);
|
|
39
|
+
console.log(` Failed: ${results.summary.failed}`);
|
|
40
|
+
console.log(` Success Rate: ${results.summary.successRate.toFixed(2)}%`);
|
|
41
|
+
|
|
42
|
+
// Show each test result
|
|
43
|
+
Object.entries(results.tests).forEach(([testName, result]) => {
|
|
44
|
+
console.log(`\n${testName}:`, result.success ? '✅' : ');
|
|
45
|
+
if (result.message) console.log(` Message: ${result.message}`);
|
|
46
|
+
if (result.duration) console.log(` Duration: ${result.duration}ms`);
|
|
47
|
+
if (result.error) console.log(` Error: ${result.error}`);
|
|
48
|
+
});
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Analyzing Test Results with Categories
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
import { S3SDKTester } from '@fluentcommerce/fc-connect-sdk';
|
|
55
|
+
|
|
56
|
+
async function analyzeTestResults() {
|
|
57
|
+
const tester = new S3SDKTester({
|
|
58
|
+
accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
|
|
59
|
+
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
|
|
60
|
+
region: 'us-east-1'
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
const results = await tester.testAll('test-bucket');
|
|
64
|
+
|
|
65
|
+
// Categorize results
|
|
66
|
+
const passed = Object.entries(results.tests).filter(([_, r]) => r.success);
|
|
67
|
+
const failed = Object.entries(results.tests).filter(([_, r]) => !r.success);
|
|
68
|
+
|
|
69
|
+
console.log('TEST SUMMARY');
|
|
70
|
+
console.log('============');
|
|
71
|
+
console.log(`Total: ${results.summary.total}`);
|
|
72
|
+
console.log(`Passed: ${passed.length} (${results.summary.successRate.toFixed(1)}%)`);
|
|
73
|
+
console.log(`Failed: ${failed.length}`);
|
|
74
|
+
console.log(`Duration: ${results.summary.totalDuration}ms`);
|
|
75
|
+
|
|
76
|
+
if (failed.length > 0) {
|
|
77
|
+
console.log('\nFAILED TESTS');
|
|
78
|
+
console.log('============');
|
|
79
|
+
failed.forEach(([name, result]) => {
|
|
80
|
+
console.log(`${name}:`);
|
|
81
|
+
console.log(` Message: ${result.message}`);
|
|
82
|
+
if (result.error) console.log(` Error: ${result.error}`);
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Performance analysis
|
|
87
|
+
console.log('\nPERFORMANCE');
|
|
88
|
+
console.log('===========');
|
|
89
|
+
const avgDuration = results.summary.averageDuration;
|
|
90
|
+
console.log(`Average test duration: ${avgDuration.toFixed(0)}ms`);
|
|
91
|
+
|
|
92
|
+
const slowTests = Object.entries(results.tests)
|
|
93
|
+
.filter(([_, r]) => r.duration && r.duration > avgDuration * 2)
|
|
94
|
+
.sort((a, b) => (b[1].duration || 0) - (a[1].duration || 0));
|
|
95
|
+
|
|
96
|
+
if (slowTests.length > 0) {
|
|
97
|
+
console.log('Slow tests:');
|
|
98
|
+
slowTests.forEach(([name, result]) => {
|
|
99
|
+
console.log(` ${name}: ${result.duration}ms`);
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
analyzeTestResults().catch(console.error);
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Categorizing Errors
|
|
108
|
+
|
|
109
|
+
Systematically categorize and diagnose test failures:
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
import { S3SDKTester } from '@fluentcommerce/fc-connect-sdk';
|
|
113
|
+
|
|
114
|
+
async function categorizeErrors() {
|
|
115
|
+
const tester = new S3SDKTester({
|
|
116
|
+
accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
|
|
117
|
+
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
|
|
118
|
+
region: 'us-east-1'
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
const results = await tester.testAll('test-bucket');
|
|
122
|
+
|
|
123
|
+
if (results.summary.successRate === 100) {
|
|
124
|
+
console.log('✅ All tests passed, no errors to analyze');
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
console.log('ERROR ANALYSIS');
|
|
129
|
+
console.log('==============\n');
|
|
130
|
+
|
|
131
|
+
// Collect all errors
|
|
132
|
+
const errors = Object.entries(results.tests)
|
|
133
|
+
.filter(([_, result]) => !result.success)
|
|
134
|
+
.map(([name, result]) => ({
|
|
135
|
+
test: name,
|
|
136
|
+
message: result.message,
|
|
137
|
+
error: result.error
|
|
138
|
+
}));
|
|
139
|
+
|
|
140
|
+
// Categorize errors
|
|
141
|
+
const authErrors = errors.filter(e =>
|
|
142
|
+
e.error?.includes('401') || e.error?.includes('403') ||
|
|
143
|
+
e.error?.includes('Unauthorized') || e.error?.includes('Forbidden')
|
|
144
|
+
);
|
|
145
|
+
|
|
146
|
+
const permissionErrors = errors.filter(e =>
|
|
147
|
+
e.error?.includes('Access Denied') || e.error?.includes('NoSuchBucket')
|
|
148
|
+
);
|
|
149
|
+
|
|
150
|
+
const networkErrors = errors.filter(e =>
|
|
151
|
+
e.error?.includes('ENOTFOUND') || e.error?.includes('ETIMEDOUT') ||
|
|
152
|
+
e.error?.includes('ECONNREFUSED') || e.error?.includes('Network')
|
|
153
|
+
);
|
|
154
|
+
|
|
155
|
+
// Report by category
|
|
156
|
+
if (authErrors.length > 0) {
|
|
157
|
+
console.log('AUTHENTICATION ISSUES:');
|
|
158
|
+
authErrors.forEach(e => {
|
|
159
|
+
console.log(` ${e.test}: ${e.error}`);
|
|
160
|
+
});
|
|
161
|
+
console.log(' Action: Verify AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY\n');
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
if (permissionErrors.length > 0) {
|
|
165
|
+
console.log('PERMISSION ISSUES:');
|
|
166
|
+
permissionErrors.forEach(e => {
|
|
167
|
+
console.log(` ${e.test}: ${e.error}`);
|
|
168
|
+
});
|
|
169
|
+
console.log(' Action: Check IAM policy and bucket permissions\n');
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
if (networkErrors.length > 0) {
|
|
173
|
+
console.log('NETWORK ISSUES:');
|
|
174
|
+
networkErrors.forEach(e => {
|
|
175
|
+
console.log(` ${e.test}: ${e.error}`);
|
|
176
|
+
});
|
|
177
|
+
console.log(' Action: Check network connectivity and firewall rules\n');
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// Other errors
|
|
181
|
+
const otherErrors = errors.filter(e =>
|
|
182
|
+
!authErrors.includes(e) &&
|
|
183
|
+
!permissionErrors.includes(e) &&
|
|
184
|
+
!networkErrors.includes(e)
|
|
185
|
+
);
|
|
186
|
+
|
|
187
|
+
if (otherErrors.length > 0) {
|
|
188
|
+
console.log('OTHER ERRORS:');
|
|
189
|
+
otherErrors.forEach(e => {
|
|
190
|
+
console.log(` ${e.test}: ${e.error}`);
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
categorizeErrors().catch(console.error);
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## Common Error Patterns
|
|
199
|
+
|
|
200
|
+
### S3 Access Denied
|
|
201
|
+
|
|
202
|
+
```typescript
|
|
203
|
+
// Error: AccessDenied
|
|
204
|
+
// Cause: Insufficient IAM permissions
|
|
205
|
+
// Solution:
|
|
206
|
+
|
|
207
|
+
async function diagnoseS3AccessDenied() {
|
|
208
|
+
console.log('Diagnosing S3 Access Denied error...');
|
|
209
|
+
|
|
210
|
+
// Check if credentials are set
|
|
211
|
+
if (!process.env.AWS_ACCESS_KEY_ID) {
|
|
212
|
+
console.error('❌ AWS_ACCESS_KEY_ID not set');
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
if (!process.env.AWS_SECRET_ACCESS_KEY) {
|
|
216
|
+
console.error('❌ AWS_SECRET_ACCESS_KEY not set');
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
console.log('✅ Credentials are set');
|
|
221
|
+
|
|
222
|
+
// Check bucket access
|
|
223
|
+
console.log('Testing bucket access...');
|
|
224
|
+
const tester = new S3SDKTester({
|
|
225
|
+
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
|
|
226
|
+
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
|
|
227
|
+
region: 'us-east-1'
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
const results = await tester.testAll('test-bucket');
|
|
231
|
+
|
|
232
|
+
// Check which operations failed
|
|
233
|
+
const failedOps = Object.entries(results.tests)
|
|
234
|
+
.filter(([_, result]) => !result.success);
|
|
235
|
+
|
|
236
|
+
if (failedOps.length > 0) {
|
|
237
|
+
console.error('❌ Some operations failed:');
|
|
238
|
+
failedOps.forEach(([op, result]) => {
|
|
239
|
+
console.log(` ${op}: ${result.error}`);
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
console.log('\nRequired IAM permissions:');
|
|
243
|
+
console.log(' - s3:ListBucket');
|
|
244
|
+
console.log(' - s3:GetObject');
|
|
245
|
+
console.log(' - s3:PutObject');
|
|
246
|
+
console.log(' - s3:DeleteObject');
|
|
247
|
+
console.log(' - s3:GetBucketLocation');
|
|
248
|
+
} else {
|
|
249
|
+
console.log('✅ All S3 operations successful');
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### Fluent Authentication Failed
|
|
255
|
+
|
|
256
|
+
```typescript
|
|
257
|
+
// Error: 401 Unauthorized
|
|
258
|
+
// Cause: Invalid OAuth2 credentials
|
|
259
|
+
// Solution:
|
|
260
|
+
|
|
261
|
+
async function diagnoseFluentAuth() {
|
|
262
|
+
console.log('Diagnosing Fluent Authentication...');
|
|
263
|
+
|
|
264
|
+
// Verify credentials are set
|
|
265
|
+
const required = [
|
|
266
|
+
'FLUENT_BASE_URL',
|
|
267
|
+
'FLUENT_CLIENT_ID',
|
|
268
|
+
'FLUENT_CLIENT_SECRET',
|
|
269
|
+
'FLUENT_USERNAME',
|
|
270
|
+
'FLUENT_PASSWORD',
|
|
271
|
+
'FLUENT_RETAILER_ID'
|
|
272
|
+
];
|
|
273
|
+
|
|
274
|
+
const missing = required.filter(key => !process.env[key]);
|
|
275
|
+
|
|
276
|
+
if (missing.length > 0) {
|
|
277
|
+
console.error('❌ Missing required environment variables:');
|
|
278
|
+
missing.forEach(key => console.error(` - ${key}`));
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
console.log('✅ All environment variables set');
|
|
283
|
+
|
|
284
|
+
// Test connection
|
|
285
|
+
try {
|
|
286
|
+
const client = await createClient({
|
|
287
|
+
config: {
|
|
288
|
+
baseUrl: process.env.FLUENT_BASE_URL!,
|
|
289
|
+
clientId: process.env.FLUENT_CLIENT_ID!,
|
|
290
|
+
clientSecret: process.env.FLUENT_CLIENT_SECRET!,
|
|
291
|
+
username: process.env.FLUENT_USERNAME!,
|
|
292
|
+
password: process.env.FLUENT_PASSWORD!,
|
|
293
|
+
retailerId: process.env.FLUENT_RETAILER_ID!
|
|
294
|
+
}
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
const tester = new FluentConnectionTester(client, {
|
|
298
|
+
retailerId: process.env.FLUENT_RETAILER_ID!
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
const result = await tester.testConnection();
|
|
302
|
+
|
|
303
|
+
if (result.success) {
|
|
304
|
+
console.log('✅ Connection test successful');
|
|
305
|
+
console.log(` User: ${result.details?.username}`);
|
|
306
|
+
console.log(` Retailer: ${result.details?.retailerName}`);
|
|
307
|
+
} else {
|
|
308
|
+
console.error('❌ Connection test failed');
|
|
309
|
+
console.log(`Error: ${result.error}`);
|
|
310
|
+
console.log('Check:');
|
|
311
|
+
console.log(' 1. Client ID and secret are correct');
|
|
312
|
+
console.log(' 2. Username and password are valid');
|
|
313
|
+
console.log(' 3. User has appropriate permissions');
|
|
314
|
+
console.log(' 4. Retailer ID matches your account');
|
|
315
|
+
}
|
|
316
|
+
} catch (error) {
|
|
317
|
+
console.error('❌ Error during connection test:', error instanceof Error ? error.message : String(error));
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### Network Timeout Errors
|
|
323
|
+
|
|
324
|
+
```typescript
|
|
325
|
+
// Error: ETIMEDOUT
|
|
326
|
+
// Cause: Network latency or service unavailability
|
|
327
|
+
// Solution:
|
|
328
|
+
|
|
329
|
+
async function diagnoseTimeout() {
|
|
330
|
+
console.log('Diagnosing timeout issues...');
|
|
331
|
+
|
|
332
|
+
const tester = new S3SDKTester({
|
|
333
|
+
accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
|
|
334
|
+
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
|
|
335
|
+
region: 'us-east-1'
|
|
336
|
+
});
|
|
337
|
+
|
|
338
|
+
console.log('Testing S3 connectivity...');
|
|
339
|
+
const results = await tester.testAll('test-bucket');
|
|
340
|
+
|
|
341
|
+
// Check if timeouts occurred
|
|
342
|
+
const timedOut = Object.entries(results.tests)
|
|
343
|
+
.filter(([_, r]) => r.error?.includes('timeout') || r.error?.includes('ETIMEDOUT'));
|
|
344
|
+
|
|
345
|
+
if (timedOut.length > 0) {
|
|
346
|
+
console.log('❌ Timeout errors detected:');
|
|
347
|
+
timedOut.forEach(([op, result]) => {
|
|
348
|
+
console.log(` ${op}: ${result.error}`);
|
|
349
|
+
console.log(` Duration: ${result.duration}ms`);
|
|
350
|
+
});
|
|
351
|
+
console.log('\nRecommendation: Network may be slow or service is unresponsive');
|
|
352
|
+
} else if (results.summary.totalDuration > 30000) {
|
|
353
|
+
console.log('⚠️ Tests completed but response is slow:');
|
|
354
|
+
console.log(` Total duration: ${results.summary.totalDuration}ms`);
|
|
355
|
+
console.log(` Average per test: ${results.summary.averageDuration.toFixed(0)}ms`);
|
|
356
|
+
} else {
|
|
357
|
+
console.log('✅ No timeout issues detected');
|
|
358
|
+
console.log(` Total duration: ${results.summary.totalDuration}ms`);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
## Debugging Checklist
|
|
364
|
+
|
|
365
|
+
Use this checklist when tests fail:
|
|
366
|
+
|
|
367
|
+
```typescript
|
|
368
|
+
async function runDiagnostics() {
|
|
369
|
+
console.log('=== Test Diagnostics Checklist ===\n');
|
|
370
|
+
|
|
371
|
+
// 1. Environment variables
|
|
372
|
+
console.log('1. Environment Variables:');
|
|
373
|
+
const requiredVars = [
|
|
374
|
+
'AWS_ACCESS_KEY_ID',
|
|
375
|
+
'AWS_SECRET_ACCESS_KEY',
|
|
376
|
+
'AWS_REGION',
|
|
377
|
+
'FLUENT_CLIENT_ID',
|
|
378
|
+
'FLUENT_CLIENT_SECRET'
|
|
379
|
+
];
|
|
380
|
+
|
|
381
|
+
requiredVars.forEach(varName => {
|
|
382
|
+
const status = process.env[varName] ? '✅' : ';
|
|
383
|
+
console.log(` ${status} ${varName}`);
|
|
384
|
+
});
|
|
385
|
+
|
|
386
|
+
// 2. Network connectivity
|
|
387
|
+
console.log('\n2. Network Connectivity:');
|
|
388
|
+
try {
|
|
389
|
+
const https = require('https');
|
|
390
|
+
await new Promise((resolve, reject) => {
|
|
391
|
+
https.get('https://api.fluentcommerce.com', (res) => {
|
|
392
|
+
console.log(` ✅ Can reach Fluent API (status: ${res.statusCode})`);
|
|
393
|
+
resolve();
|
|
394
|
+
}).on('error', reject);
|
|
395
|
+
});
|
|
396
|
+
} catch (error) {
|
|
397
|
+
console.log(` ❌ Cannot reach Fluent API: ${error.message}`);
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
// 3. S3 connectivity
|
|
401
|
+
console.log('\n3. S3 Connectivity:');
|
|
402
|
+
try {
|
|
403
|
+
const s3Tester = new S3SDKTester({
|
|
404
|
+
accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
|
|
405
|
+
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
|
|
406
|
+
region: process.env.AWS_REGION || 'us-east-1'
|
|
407
|
+
});
|
|
408
|
+
|
|
409
|
+
const results = await s3Tester.testAll(process.env.S3_BUCKET!);
|
|
410
|
+
const success = results.summary.successRate === 100;
|
|
411
|
+
console.log(` ${success ? '✅' : '} S3 access (${results.summary.passed}/${results.summary.total} tests)`);
|
|
412
|
+
} catch (error) {
|
|
413
|
+
console.log(` ❌ S3 error: ${error instanceof Error ? error.message : String(error)}`);
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
// 4. Fluent API connectivity
|
|
417
|
+
console.log('\n4. Fluent API Connectivity:');
|
|
418
|
+
try {
|
|
419
|
+
const client = await createClient({
|
|
420
|
+
config: {
|
|
421
|
+
baseUrl: process.env.FLUENT_BASE_URL!,
|
|
422
|
+
clientId: process.env.FLUENT_CLIENT_ID!,
|
|
423
|
+
clientSecret: process.env.FLUENT_CLIENT_SECRET!,
|
|
424
|
+
username: process.env.FLUENT_USERNAME!,
|
|
425
|
+
password: process.env.FLUENT_PASSWORD!,
|
|
426
|
+
retailerId: process.env.FLUENT_RETAILER_ID!
|
|
427
|
+
}
|
|
428
|
+
});
|
|
429
|
+
|
|
430
|
+
const tester = new FluentConnectionTester(client, {
|
|
431
|
+
retailerId: process.env.FLUENT_RETAILER_ID!
|
|
432
|
+
});
|
|
433
|
+
|
|
434
|
+
const result = await tester.testConnection();
|
|
435
|
+
console.log(` ${result.success ? '✅' : '} Fluent API access`);
|
|
436
|
+
if (result.success) {
|
|
437
|
+
console.log(` User: ${result.details?.username}`);
|
|
438
|
+
}
|
|
439
|
+
} catch (error) {
|
|
440
|
+
console.log(` ❌ Fluent API error: ${error instanceof Error ? error.message : String(error)}`);
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
console.log('\n=== Diagnostics Complete ===');
|
|
444
|
+
}
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
## Key Takeaways
|
|
448
|
+
|
|
449
|
+
- 🎯 Enable verbose logging to see detailed test execution
|
|
450
|
+
- 🎯 Use error analysis functions to categorize failures
|
|
451
|
+
- 🎯 Check authentication and permissions first
|
|
452
|
+
- 🎯 Verify network connectivity and timeouts
|
|
453
|
+
- 🎯 Use diagnostics checklist for systematic troubleshooting
|
|
454
|
+
|
|
455
|
+
## Practice Exercise
|
|
456
|
+
|
|
457
|
+
Create a diagnostic script for your environment:
|
|
458
|
+
|
|
459
|
+
```typescript
|
|
460
|
+
async function diagnoseMyEnvironment() {
|
|
461
|
+
// TODO: Check environment variables
|
|
462
|
+
// TODO: Test S3 connectivity
|
|
463
|
+
// TODO: Test Fluent API connectivity
|
|
464
|
+
// TODO: Analyze any errors
|
|
465
|
+
}
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
## Next Steps
|
|
469
|
+
|
|
470
|
+
Continue to [Module 6: CI/CD Integration →](./04-reference-testing-06-cicd-integration.md) to learn about automation.
|
|
471
|
+
|
|
472
|
+
---
|
|
473
|
+
|
|
474
|
+
**Module Navigation:**
|
|
475
|
+
- **Previous:** [Module 4 - Integration Testing](./04-reference-testing-04-integration-testing.md)
|
|
476
|
+
- **Current:** Module 5 - Debugging
|
|
477
|
+
- **Next:** [Module 6 - CI/CD Integration](./04-reference-testing-06-cicd-integration.md)
|
|
478
|
+
- **Back to:** [Testing Guide Index](../testing-readme.md)
|