@fluentcommerce/fc-connect-sdk 0.1.54 → 0.1.56
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/README.md +11 -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
package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-05-configuration.md
CHANGED
|
@@ -1,535 +1,535 @@
|
|
|
1
|
-
# Module 5: Configuration
|
|
2
|
-
|
|
3
|
-
**Level:** Intermediate
|
|
4
|
-
**Estimated Time:** 20 minutes
|
|
5
|
-
|
|
6
|
-
## Overview
|
|
7
|
-
|
|
8
|
-
This module covers all configuration options for WebhookValidationService, including factory methods for common scenarios, strict vs lenient validation, and custom configurations.
|
|
9
|
-
|
|
10
|
-
## Learning Objectives
|
|
11
|
-
|
|
12
|
-
By the end of this module, you will:
|
|
13
|
-
- Understand all configuration options
|
|
14
|
-
- Use factory methods for common scenarios
|
|
15
|
-
- Configure strict vs lenient validation
|
|
16
|
-
- Set default algorithms
|
|
17
|
-
- Create custom validator configurations
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## Configuration Options
|
|
22
|
-
|
|
23
|
-
### WebhookValidationConfig Interface
|
|
24
|
-
|
|
25
|
-
```typescript
|
|
26
|
-
interface WebhookValidationConfig {
|
|
27
|
-
/**
|
|
28
|
-
* Throw errors on validation failure instead of returning result
|
|
29
|
-
* Default: false
|
|
30
|
-
*/
|
|
31
|
-
strictValidation?: boolean;
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Default algorithm to use if not auto-detected
|
|
35
|
-
* Default: SignatureAlgorithm.SHA512_WITH_RSA
|
|
36
|
-
*/
|
|
37
|
-
algorithm?: SignatureAlgorithm;
|
|
38
|
-
}
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
### Basic Configuration
|
|
42
|
-
|
|
43
|
-
```typescript
|
|
44
|
-
import {
|
|
45
|
-
WebhookValidationService,
|
|
46
|
-
SignatureAlgorithm,
|
|
47
|
-
createConsoleLogger,
|
|
48
|
-
toStructuredLogger
|
|
49
|
-
} from '@fluentcommerce/fc-connect-sdk';
|
|
50
|
-
|
|
51
|
-
const logger = toStructuredLogger(createConsoleLogger(), { service: 'webhook' });
|
|
52
|
-
|
|
53
|
-
// Minimal configuration (uses defaults)
|
|
54
|
-
const validator1 = new WebhookValidationService({}, logger);
|
|
55
|
-
|
|
56
|
-
// With strict validation
|
|
57
|
-
const validator2 = new WebhookValidationService({
|
|
58
|
-
strictValidation: true
|
|
59
|
-
}, logger);
|
|
60
|
-
|
|
61
|
-
// With default algorithm
|
|
62
|
-
const validator3 = new WebhookValidationService({
|
|
63
|
-
algorithm: SignatureAlgorithm.MD5_WITH_RSA
|
|
64
|
-
}, logger);
|
|
65
|
-
|
|
66
|
-
// Complete configuration
|
|
67
|
-
const validator4 = new WebhookValidationService({
|
|
68
|
-
strictValidation: true,
|
|
69
|
-
algorithm: SignatureAlgorithm.SHA512_WITH_RSA
|
|
70
|
-
}, logger);
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
---
|
|
74
|
-
|
|
75
|
-
## Strict vs Lenient Validation
|
|
76
|
-
|
|
77
|
-
### Lenient Validation (Default)
|
|
78
|
-
|
|
79
|
-
**Returns validation result** - doesn't throw errors:
|
|
80
|
-
|
|
81
|
-
```typescript
|
|
82
|
-
const validator = new WebhookValidationService({
|
|
83
|
-
strictValidation: false // or omit (default)
|
|
84
|
-
}, logger);
|
|
85
|
-
|
|
86
|
-
const result = await validator.validateWebhook(rawBody, headers, publicKey);
|
|
87
|
-
|
|
88
|
-
if (!result.isValid) {
|
|
89
|
-
// Handle validation failure gracefully
|
|
90
|
-
console.error('Validation failed:', result.error);
|
|
91
|
-
return { statusCode: 401, body: 'Invalid signature' };
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
// Continue with valid webhook
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
**Use when**:
|
|
98
|
-
- You want to handle validation failures gracefully
|
|
99
|
-
- You need custom error handling logic
|
|
100
|
-
- You want to log additional context before failing
|
|
101
|
-
- You're building a public API with detailed error responses
|
|
102
|
-
|
|
103
|
-
### Strict Validation
|
|
104
|
-
|
|
105
|
-
**Throws errors** on validation failure:
|
|
106
|
-
|
|
107
|
-
```typescript
|
|
108
|
-
const validator = new WebhookValidationService({
|
|
109
|
-
strictValidation: true
|
|
110
|
-
}, logger);
|
|
111
|
-
|
|
112
|
-
try {
|
|
113
|
-
const result = await validator.validateWebhook(rawBody, headers, publicKey);
|
|
114
|
-
// If we reach here, validation succeeded
|
|
115
|
-
console.log('Valid webhook using:', result.algorithm);
|
|
116
|
-
|
|
117
|
-
} catch (error) {
|
|
118
|
-
// Validation failed - error thrown
|
|
119
|
-
console.error('Validation error:', error.message);
|
|
120
|
-
return { statusCode: 401, body: 'Invalid signature' };
|
|
121
|
-
}
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
**Use when**:
|
|
125
|
-
- You want fail-fast behavior
|
|
126
|
-
- Validation failures should be treated as exceptions
|
|
127
|
-
- You're using try/catch for error handling
|
|
128
|
-
- You want cleaner code flow (no if/else checks)
|
|
129
|
-
|
|
130
|
-
### Comparison
|
|
131
|
-
|
|
132
|
-
```typescript
|
|
133
|
-
// LENIENT - Check result
|
|
134
|
-
const result = await validator.validateWebhook(...);
|
|
135
|
-
if (!result.isValid) {
|
|
136
|
-
// Handle error
|
|
137
|
-
}
|
|
138
|
-
// Continue
|
|
139
|
-
|
|
140
|
-
// STRICT - Try/catch
|
|
141
|
-
try {
|
|
142
|
-
await validator.validateWebhook(...);
|
|
143
|
-
// Continue
|
|
144
|
-
} catch (error) {
|
|
145
|
-
// Handle error
|
|
146
|
-
}
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
---
|
|
150
|
-
|
|
151
|
-
## Factory Methods
|
|
152
|
-
|
|
153
|
-
### WebhookValidationFactory
|
|
154
|
-
|
|
155
|
-
The SDK provides factory methods for common scenarios:
|
|
156
|
-
|
|
157
|
-
```typescript
|
|
158
|
-
import {
|
|
159
|
-
WebhookValidationFactory,
|
|
160
|
-
createConsoleLogger,
|
|
161
|
-
toStructuredLogger
|
|
162
|
-
} from '@fluentcommerce/fc-connect-sdk';
|
|
163
|
-
|
|
164
|
-
const logger = toStructuredLogger(createConsoleLogger(), { service: 'webhook' });
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
### createProduction()
|
|
168
|
-
|
|
169
|
-
Production-ready validator with strict validation and SHA512:
|
|
170
|
-
|
|
171
|
-
```typescript
|
|
172
|
-
const validator = WebhookValidationFactory.createProduction(logger);
|
|
173
|
-
|
|
174
|
-
// Equivalent to:
|
|
175
|
-
new WebhookValidationService({
|
|
176
|
-
strictValidation: true,
|
|
177
|
-
algorithm: SignatureAlgorithm.SHA512_WITH_RSA
|
|
178
|
-
}, logger);
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
**Use for**: Production environments
|
|
182
|
-
|
|
183
|
-
### createDevelopment()
|
|
184
|
-
|
|
185
|
-
Development validator with lenient validation and SHA512:
|
|
186
|
-
|
|
187
|
-
```typescript
|
|
188
|
-
const validator = WebhookValidationFactory.createDevelopment(logger);
|
|
189
|
-
|
|
190
|
-
// Equivalent to:
|
|
191
|
-
new WebhookValidationService({
|
|
192
|
-
strictValidation: false,
|
|
193
|
-
algorithm: SignatureAlgorithm.SHA512_WITH_RSA
|
|
194
|
-
}, logger);
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
**Use for**: Development and testing
|
|
198
|
-
|
|
199
|
-
### createWithFallback()
|
|
200
|
-
|
|
201
|
-
Validator that supports both SHA512 and MD5 with auto-detection:
|
|
202
|
-
|
|
203
|
-
```typescript
|
|
204
|
-
const validator = WebhookValidationFactory.createWithFallback(logger);
|
|
205
|
-
|
|
206
|
-
// Equivalent to:
|
|
207
|
-
new WebhookValidationService({
|
|
208
|
-
strictValidation: true,
|
|
209
|
-
algorithm: SignatureAlgorithm.SHA512_WITH_RSA // Default, but auto-detects
|
|
210
|
-
}, logger);
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
**Use for**: Environments with mixed webhook sources (modern and older systems)
|
|
214
|
-
|
|
215
|
-
---
|
|
216
|
-
|
|
217
|
-
## Environment-Based Configuration
|
|
218
|
-
|
|
219
|
-
### Pattern: Configuration from Environment
|
|
220
|
-
|
|
221
|
-
```typescript
|
|
222
|
-
import {
|
|
223
|
-
WebhookValidationService,
|
|
224
|
-
WebhookValidationFactory,
|
|
225
|
-
createConsoleLogger,
|
|
226
|
-
toStructuredLogger
|
|
227
|
-
} from '@fluentcommerce/fc-connect-sdk';
|
|
228
|
-
|
|
229
|
-
function createValidator() {
|
|
230
|
-
const logger = toStructuredLogger(createConsoleLogger(), { service: 'webhook' });
|
|
231
|
-
|
|
232
|
-
const env = process.env.NODE_ENV || 'development';
|
|
233
|
-
|
|
234
|
-
switch (env) {
|
|
235
|
-
case 'production':
|
|
236
|
-
return WebhookValidationFactory.createProduction(logger);
|
|
237
|
-
|
|
238
|
-
case 'development':
|
|
239
|
-
case 'test':
|
|
240
|
-
return WebhookValidationFactory.createDevelopment(logger);
|
|
241
|
-
|
|
242
|
-
default:
|
|
243
|
-
return WebhookValidationFactory.createWithFallback(logger);
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
// Usage
|
|
248
|
-
const validator = createValidator();
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
### Pattern: Configuration Object
|
|
252
|
-
|
|
253
|
-
```typescript
|
|
254
|
-
interface AppConfig {
|
|
255
|
-
webhook: {
|
|
256
|
-
strictValidation: boolean;
|
|
257
|
-
algorithm: string;
|
|
258
|
-
};
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
function createValidatorFromConfig(config: AppConfig) {
|
|
262
|
-
const logger = toStructuredLogger(createConsoleLogger(), { service: 'webhook' });
|
|
263
|
-
|
|
264
|
-
return new WebhookValidationService({
|
|
265
|
-
strictValidation: config.webhook.strictValidation,
|
|
266
|
-
algorithm: config.webhook.algorithm === 'MD5'
|
|
267
|
-
? SignatureAlgorithm.MD5_WITH_RSA
|
|
268
|
-
: SignatureAlgorithm.SHA512_WITH_RSA
|
|
269
|
-
}, logger);
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
// Usage
|
|
273
|
-
const appConfig: AppConfig = {
|
|
274
|
-
webhook: {
|
|
275
|
-
strictValidation: true,
|
|
276
|
-
algorithm: 'SHA512'
|
|
277
|
-
}
|
|
278
|
-
};
|
|
279
|
-
|
|
280
|
-
const validator = createValidatorFromConfig(appConfig);
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
---
|
|
284
|
-
|
|
285
|
-
## Default Algorithm Selection
|
|
286
|
-
|
|
287
|
-
The `algorithm` configuration option sets the **default** algorithm when auto-detection doesn't find a signature header:
|
|
288
|
-
|
|
289
|
-
```typescript
|
|
290
|
-
const validator = new WebhookValidationService({
|
|
291
|
-
algorithm: SignatureAlgorithm.MD5_WITH_RSA // Default to MD5
|
|
292
|
-
}, logger);
|
|
293
|
-
|
|
294
|
-
// If headers have 'fluent-signature', uses SHA512 (auto-detected)
|
|
295
|
-
// If headers have 'flex.signature', uses MD5 (auto-detected)
|
|
296
|
-
// If no signature header found, uses MD5 (configured default)
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
**Best Practice**: Always use `SHA512_WITH_RSA` as default (it's the SDK default):
|
|
300
|
-
|
|
301
|
-
```typescript
|
|
302
|
-
// ✅ RECOMMENDED
|
|
303
|
-
const validator = new WebhookValidationService({
|
|
304
|
-
algorithm: SignatureAlgorithm.SHA512_WITH_RSA // Modern standard
|
|
305
|
-
}, logger);
|
|
306
|
-
|
|
307
|
-
// ⚠️ USE ONLY FOR OLDER SYSTEMS
|
|
308
|
-
const validator = new WebhookValidationService({
|
|
309
|
-
algorithm: SignatureAlgorithm.MD5_WITH_RSA // Support for older systems
|
|
310
|
-
}, logger);
|
|
311
|
-
```
|
|
312
|
-
|
|
313
|
-
---
|
|
314
|
-
|
|
315
|
-
## Custom Validator Patterns
|
|
316
|
-
|
|
317
|
-
### Pattern: Singleton Validator
|
|
318
|
-
|
|
319
|
-
```typescript
|
|
320
|
-
// validator.ts
|
|
321
|
-
import {
|
|
322
|
-
WebhookValidationService,
|
|
323
|
-
createConsoleLogger,
|
|
324
|
-
toStructuredLogger
|
|
325
|
-
} from '@fluentcommerce/fc-connect-sdk';
|
|
326
|
-
|
|
327
|
-
let validatorInstance: WebhookValidationService | null = null;
|
|
328
|
-
|
|
329
|
-
export function getValidator(): WebhookValidationService {
|
|
330
|
-
if (!validatorInstance) {
|
|
331
|
-
const logger = toStructuredLogger(createConsoleLogger(), { service: 'webhook' });
|
|
332
|
-
|
|
333
|
-
validatorInstance = new WebhookValidationService({
|
|
334
|
-
strictValidation: true
|
|
335
|
-
}, logger);
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
return validatorInstance;
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
// Usage
|
|
342
|
-
import { getValidator } from './validator';
|
|
343
|
-
|
|
344
|
-
const validator = getValidator();
|
|
345
|
-
const result = await validator.validateWebhook(...);
|
|
346
|
-
```
|
|
347
|
-
|
|
348
|
-
### Pattern: Validator per Environment
|
|
349
|
-
|
|
350
|
-
```typescript
|
|
351
|
-
// validators.ts
|
|
352
|
-
import {
|
|
353
|
-
WebhookValidationService,
|
|
354
|
-
WebhookValidationFactory,
|
|
355
|
-
createConsoleLogger,
|
|
356
|
-
toStructuredLogger
|
|
357
|
-
} from '@fluentcommerce/fc-connect-sdk';
|
|
358
|
-
|
|
359
|
-
const baseLogger = createConsoleLogger();
|
|
360
|
-
|
|
361
|
-
export const validators = {
|
|
362
|
-
production: WebhookValidationFactory.createProduction(
|
|
363
|
-
toStructuredLogger(baseLogger, { service: 'webhook-prod' })
|
|
364
|
-
),
|
|
365
|
-
|
|
366
|
-
sandbox: WebhookValidationFactory.createDevelopment(
|
|
367
|
-
toStructuredLogger(baseLogger, { service: 'webhook-sandbox' })
|
|
368
|
-
),
|
|
369
|
-
|
|
370
|
-
development: WebhookValidationFactory.createDevelopment(
|
|
371
|
-
toStructuredLogger(baseLogger, { service: 'webhook-dev' })
|
|
372
|
-
)
|
|
373
|
-
};
|
|
374
|
-
|
|
375
|
-
// Usage
|
|
376
|
-
import { validators } from './validators';
|
|
377
|
-
|
|
378
|
-
const env = process.env.FLUENT_ENV || 'development';
|
|
379
|
-
const validator = validators[env];
|
|
380
|
-
```
|
|
381
|
-
|
|
382
|
-
### Pattern: Validator with Custom Logger
|
|
383
|
-
|
|
384
|
-
```typescript
|
|
385
|
-
import {
|
|
386
|
-
WebhookValidationService,
|
|
387
|
-
createConsoleLogger,
|
|
388
|
-
toStructuredLogger
|
|
389
|
-
} from '@fluentcommerce/fc-connect-sdk';
|
|
390
|
-
|
|
391
|
-
function createValidatorWithCustomLogging(logLevel: 'debug' | 'info' | 'warn' | 'error') {
|
|
392
|
-
const logger = toStructuredLogger(createConsoleLogger(), {
|
|
393
|
-
service: 'webhook',
|
|
394
|
-
logLevel
|
|
395
|
-
});
|
|
396
|
-
|
|
397
|
-
return new WebhookValidationService({
|
|
398
|
-
strictValidation: true
|
|
399
|
-
}, logger);
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
// Usage
|
|
403
|
-
const validator = createValidatorWithCustomLogging('debug');
|
|
404
|
-
```
|
|
405
|
-
|
|
406
|
-
---
|
|
407
|
-
|
|
408
|
-
## Configuration Best Practices
|
|
409
|
-
|
|
410
|
-
### 1. Use Factory Methods
|
|
411
|
-
|
|
412
|
-
```typescript
|
|
413
|
-
// ✅ GOOD - Use factory for common cases
|
|
414
|
-
const validator = WebhookValidationFactory.createProduction(logger);
|
|
415
|
-
|
|
416
|
-
// ❌ AVOID - Manual configuration for standard cases
|
|
417
|
-
const validator = new WebhookValidationService({
|
|
418
|
-
strictValidation: true,
|
|
419
|
-
algorithm: SignatureAlgorithm.SHA512_WITH_RSA
|
|
420
|
-
}, logger);
|
|
421
|
-
```
|
|
422
|
-
|
|
423
|
-
### 2. Environment-Specific Configuration
|
|
424
|
-
|
|
425
|
-
```typescript
|
|
426
|
-
// ✅ GOOD - Different configs per environment
|
|
427
|
-
const validator = env === 'production'
|
|
428
|
-
? WebhookValidationFactory.createProduction(logger)
|
|
429
|
-
: WebhookValidationFactory.createDevelopment(logger);
|
|
430
|
-
|
|
431
|
-
// ❌ AVOID - Same config everywhere
|
|
432
|
-
const validator = new WebhookValidationService({}, logger);
|
|
433
|
-
```
|
|
434
|
-
|
|
435
|
-
### 3. Strict Validation in Production
|
|
436
|
-
|
|
437
|
-
```typescript
|
|
438
|
-
// ✅ GOOD - Strict in production
|
|
439
|
-
const validator = WebhookValidationFactory.createProduction(logger);
|
|
440
|
-
|
|
441
|
-
// ⚠️ CAUTION - Lenient in production (less secure)
|
|
442
|
-
const validator = WebhookValidationFactory.createDevelopment(logger);
|
|
443
|
-
```
|
|
444
|
-
|
|
445
|
-
### 4. Consistent Logging
|
|
446
|
-
|
|
447
|
-
```typescript
|
|
448
|
-
// ✅ GOOD - Consistent structured logger
|
|
449
|
-
const logger = toStructuredLogger(createConsoleLogger(), { service: 'app' });
|
|
450
|
-
const validator = new WebhookValidationService({ strictValidation: true }, logger);
|
|
451
|
-
|
|
452
|
-
// ❌ AVOID - Using console directly
|
|
453
|
-
const validator = new WebhookValidationService({}, console); // Not recommended
|
|
454
|
-
```
|
|
455
|
-
|
|
456
|
-
---
|
|
457
|
-
|
|
458
|
-
## Configuration Examples
|
|
459
|
-
|
|
460
|
-
### Minimal Production Setup
|
|
461
|
-
|
|
462
|
-
```typescript
|
|
463
|
-
import {
|
|
464
|
-
WebhookValidationFactory,
|
|
465
|
-
createConsoleLogger,
|
|
466
|
-
toStructuredLogger
|
|
467
|
-
} from '@fluentcommerce/fc-connect-sdk';
|
|
468
|
-
|
|
469
|
-
const logger = toStructuredLogger(createConsoleLogger(), { service: 'webhook' });
|
|
470
|
-
const validator = WebhookValidationFactory.createProduction(logger);
|
|
471
|
-
```
|
|
472
|
-
|
|
473
|
-
### Development Setup with Debugging
|
|
474
|
-
|
|
475
|
-
```typescript
|
|
476
|
-
import {
|
|
477
|
-
WebhookValidationFactory,
|
|
478
|
-
createConsoleLogger,
|
|
479
|
-
toStructuredLogger
|
|
480
|
-
} from '@fluentcommerce/fc-connect-sdk';
|
|
481
|
-
|
|
482
|
-
const logger = toStructuredLogger(createConsoleLogger(), {
|
|
483
|
-
service: 'webhook-dev',
|
|
484
|
-
logLevel: 'debug'
|
|
485
|
-
});
|
|
486
|
-
|
|
487
|
-
const validator = WebhookValidationFactory.createDevelopment(logger);
|
|
488
|
-
```
|
|
489
|
-
|
|
490
|
-
### Multi-Environment Setup
|
|
491
|
-
|
|
492
|
-
```typescript
|
|
493
|
-
import {
|
|
494
|
-
WebhookValidationService,
|
|
495
|
-
SignatureAlgorithm,
|
|
496
|
-
createConsoleLogger,
|
|
497
|
-
toStructuredLogger
|
|
498
|
-
} from '@fluentcommerce/fc-connect-sdk';
|
|
499
|
-
|
|
500
|
-
const configs = {
|
|
501
|
-
production: { strictValidation: true, algorithm: SignatureAlgorithm.SHA512_WITH_RSA },
|
|
502
|
-
sandbox: { strictValidation: false, algorithm: SignatureAlgorithm.SHA512_WITH_RSA },
|
|
503
|
-
compatible: { strictValidation: false, algorithm: SignatureAlgorithm.MD5_WITH_RSA }
|
|
504
|
-
};
|
|
505
|
-
|
|
506
|
-
const env = process.env.FLUENT_ENV as keyof typeof configs;
|
|
507
|
-
const config = configs[env] || configs.production;
|
|
508
|
-
|
|
509
|
-
const logger = toStructuredLogger(createConsoleLogger(), { service: `webhook-${env}` });
|
|
510
|
-
const validator = new WebhookValidationService(config, logger);
|
|
511
|
-
```
|
|
512
|
-
|
|
513
|
-
---
|
|
514
|
-
|
|
515
|
-
## Key Takeaways
|
|
516
|
-
|
|
517
|
-
- **Use factory methods** for common scenarios (production, development, fallback)
|
|
518
|
-
- **Strict validation in production** - fail fast on invalid signatures
|
|
519
|
-
- **Lenient validation in development** - better debugging experience
|
|
520
|
-
- **Configure per environment** - different settings for prod/sandbox/dev
|
|
521
|
-
- **SHA512 as default** - modern standard, more secure
|
|
522
|
-
- **Consistent logging** - use same logger throughout application
|
|
523
|
-
|
|
524
|
-
---
|
|
525
|
-
|
|
526
|
-
## Next Steps
|
|
527
|
-
|
|
528
|
-
Continue to [Module 6: Error Handling](./webhook-validation-06-error-handling.md) to learn comprehensive error handling patterns.
|
|
529
|
-
|
|
530
|
-
---
|
|
531
|
-
|
|
532
|
-
## Further Reading
|
|
533
|
-
|
|
534
|
-
- [Module 7: API Reference](../../auto-pagination/modules/auto-pagination-07-api-reference.md) - Complete API documentation
|
|
535
|
-
- [Module 2: Quick Start](../../auto-pagination/modules/auto-pagination-02-quick-start.md) - Basic usage patterns
|
|
1
|
+
# Module 5: Configuration
|
|
2
|
+
|
|
3
|
+
**Level:** Intermediate
|
|
4
|
+
**Estimated Time:** 20 minutes
|
|
5
|
+
|
|
6
|
+
## Overview
|
|
7
|
+
|
|
8
|
+
This module covers all configuration options for WebhookValidationService, including factory methods for common scenarios, strict vs lenient validation, and custom configurations.
|
|
9
|
+
|
|
10
|
+
## Learning Objectives
|
|
11
|
+
|
|
12
|
+
By the end of this module, you will:
|
|
13
|
+
- Understand all configuration options
|
|
14
|
+
- Use factory methods for common scenarios
|
|
15
|
+
- Configure strict vs lenient validation
|
|
16
|
+
- Set default algorithms
|
|
17
|
+
- Create custom validator configurations
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Configuration Options
|
|
22
|
+
|
|
23
|
+
### WebhookValidationConfig Interface
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
interface WebhookValidationConfig {
|
|
27
|
+
/**
|
|
28
|
+
* Throw errors on validation failure instead of returning result
|
|
29
|
+
* Default: false
|
|
30
|
+
*/
|
|
31
|
+
strictValidation?: boolean;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Default algorithm to use if not auto-detected
|
|
35
|
+
* Default: SignatureAlgorithm.SHA512_WITH_RSA
|
|
36
|
+
*/
|
|
37
|
+
algorithm?: SignatureAlgorithm;
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Basic Configuration
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
import {
|
|
45
|
+
WebhookValidationService,
|
|
46
|
+
SignatureAlgorithm,
|
|
47
|
+
createConsoleLogger,
|
|
48
|
+
toStructuredLogger
|
|
49
|
+
} from '@fluentcommerce/fc-connect-sdk';
|
|
50
|
+
|
|
51
|
+
const logger = toStructuredLogger(createConsoleLogger(), { service: 'webhook' });
|
|
52
|
+
|
|
53
|
+
// Minimal configuration (uses defaults)
|
|
54
|
+
const validator1 = new WebhookValidationService({}, logger);
|
|
55
|
+
|
|
56
|
+
// With strict validation
|
|
57
|
+
const validator2 = new WebhookValidationService({
|
|
58
|
+
strictValidation: true
|
|
59
|
+
}, logger);
|
|
60
|
+
|
|
61
|
+
// With default algorithm
|
|
62
|
+
const validator3 = new WebhookValidationService({
|
|
63
|
+
algorithm: SignatureAlgorithm.MD5_WITH_RSA
|
|
64
|
+
}, logger);
|
|
65
|
+
|
|
66
|
+
// Complete configuration
|
|
67
|
+
const validator4 = new WebhookValidationService({
|
|
68
|
+
strictValidation: true,
|
|
69
|
+
algorithm: SignatureAlgorithm.SHA512_WITH_RSA
|
|
70
|
+
}, logger);
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Strict vs Lenient Validation
|
|
76
|
+
|
|
77
|
+
### Lenient Validation (Default)
|
|
78
|
+
|
|
79
|
+
**Returns validation result** - doesn't throw errors:
|
|
80
|
+
|
|
81
|
+
```typescript
|
|
82
|
+
const validator = new WebhookValidationService({
|
|
83
|
+
strictValidation: false // or omit (default)
|
|
84
|
+
}, logger);
|
|
85
|
+
|
|
86
|
+
const result = await validator.validateWebhook(rawBody, headers, publicKey);
|
|
87
|
+
|
|
88
|
+
if (!result.isValid) {
|
|
89
|
+
// Handle validation failure gracefully
|
|
90
|
+
console.error('Validation failed:', result.error);
|
|
91
|
+
return { statusCode: 401, body: 'Invalid signature' };
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Continue with valid webhook
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**Use when**:
|
|
98
|
+
- You want to handle validation failures gracefully
|
|
99
|
+
- You need custom error handling logic
|
|
100
|
+
- You want to log additional context before failing
|
|
101
|
+
- You're building a public API with detailed error responses
|
|
102
|
+
|
|
103
|
+
### Strict Validation
|
|
104
|
+
|
|
105
|
+
**Throws errors** on validation failure:
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
const validator = new WebhookValidationService({
|
|
109
|
+
strictValidation: true
|
|
110
|
+
}, logger);
|
|
111
|
+
|
|
112
|
+
try {
|
|
113
|
+
const result = await validator.validateWebhook(rawBody, headers, publicKey);
|
|
114
|
+
// If we reach here, validation succeeded
|
|
115
|
+
console.log('Valid webhook using:', result.algorithm);
|
|
116
|
+
|
|
117
|
+
} catch (error) {
|
|
118
|
+
// Validation failed - error thrown
|
|
119
|
+
console.error('Validation error:', error.message);
|
|
120
|
+
return { statusCode: 401, body: 'Invalid signature' };
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**Use when**:
|
|
125
|
+
- You want fail-fast behavior
|
|
126
|
+
- Validation failures should be treated as exceptions
|
|
127
|
+
- You're using try/catch for error handling
|
|
128
|
+
- You want cleaner code flow (no if/else checks)
|
|
129
|
+
|
|
130
|
+
### Comparison
|
|
131
|
+
|
|
132
|
+
```typescript
|
|
133
|
+
// LENIENT - Check result
|
|
134
|
+
const result = await validator.validateWebhook(...);
|
|
135
|
+
if (!result.isValid) {
|
|
136
|
+
// Handle error
|
|
137
|
+
}
|
|
138
|
+
// Continue
|
|
139
|
+
|
|
140
|
+
// STRICT - Try/catch
|
|
141
|
+
try {
|
|
142
|
+
await validator.validateWebhook(...);
|
|
143
|
+
// Continue
|
|
144
|
+
} catch (error) {
|
|
145
|
+
// Handle error
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Factory Methods
|
|
152
|
+
|
|
153
|
+
### WebhookValidationFactory
|
|
154
|
+
|
|
155
|
+
The SDK provides factory methods for common scenarios:
|
|
156
|
+
|
|
157
|
+
```typescript
|
|
158
|
+
import {
|
|
159
|
+
WebhookValidationFactory,
|
|
160
|
+
createConsoleLogger,
|
|
161
|
+
toStructuredLogger
|
|
162
|
+
} from '@fluentcommerce/fc-connect-sdk';
|
|
163
|
+
|
|
164
|
+
const logger = toStructuredLogger(createConsoleLogger(), { service: 'webhook' });
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### createProduction()
|
|
168
|
+
|
|
169
|
+
Production-ready validator with strict validation and SHA512:
|
|
170
|
+
|
|
171
|
+
```typescript
|
|
172
|
+
const validator = WebhookValidationFactory.createProduction(logger);
|
|
173
|
+
|
|
174
|
+
// Equivalent to:
|
|
175
|
+
new WebhookValidationService({
|
|
176
|
+
strictValidation: true,
|
|
177
|
+
algorithm: SignatureAlgorithm.SHA512_WITH_RSA
|
|
178
|
+
}, logger);
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**Use for**: Production environments
|
|
182
|
+
|
|
183
|
+
### createDevelopment()
|
|
184
|
+
|
|
185
|
+
Development validator with lenient validation and SHA512:
|
|
186
|
+
|
|
187
|
+
```typescript
|
|
188
|
+
const validator = WebhookValidationFactory.createDevelopment(logger);
|
|
189
|
+
|
|
190
|
+
// Equivalent to:
|
|
191
|
+
new WebhookValidationService({
|
|
192
|
+
strictValidation: false,
|
|
193
|
+
algorithm: SignatureAlgorithm.SHA512_WITH_RSA
|
|
194
|
+
}, logger);
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**Use for**: Development and testing
|
|
198
|
+
|
|
199
|
+
### createWithFallback()
|
|
200
|
+
|
|
201
|
+
Validator that supports both SHA512 and MD5 with auto-detection:
|
|
202
|
+
|
|
203
|
+
```typescript
|
|
204
|
+
const validator = WebhookValidationFactory.createWithFallback(logger);
|
|
205
|
+
|
|
206
|
+
// Equivalent to:
|
|
207
|
+
new WebhookValidationService({
|
|
208
|
+
strictValidation: true,
|
|
209
|
+
algorithm: SignatureAlgorithm.SHA512_WITH_RSA // Default, but auto-detects
|
|
210
|
+
}, logger);
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
**Use for**: Environments with mixed webhook sources (modern and older systems)
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Environment-Based Configuration
|
|
218
|
+
|
|
219
|
+
### Pattern: Configuration from Environment
|
|
220
|
+
|
|
221
|
+
```typescript
|
|
222
|
+
import {
|
|
223
|
+
WebhookValidationService,
|
|
224
|
+
WebhookValidationFactory,
|
|
225
|
+
createConsoleLogger,
|
|
226
|
+
toStructuredLogger
|
|
227
|
+
} from '@fluentcommerce/fc-connect-sdk';
|
|
228
|
+
|
|
229
|
+
function createValidator() {
|
|
230
|
+
const logger = toStructuredLogger(createConsoleLogger(), { service: 'webhook' });
|
|
231
|
+
|
|
232
|
+
const env = process.env.NODE_ENV || 'development';
|
|
233
|
+
|
|
234
|
+
switch (env) {
|
|
235
|
+
case 'production':
|
|
236
|
+
return WebhookValidationFactory.createProduction(logger);
|
|
237
|
+
|
|
238
|
+
case 'development':
|
|
239
|
+
case 'test':
|
|
240
|
+
return WebhookValidationFactory.createDevelopment(logger);
|
|
241
|
+
|
|
242
|
+
default:
|
|
243
|
+
return WebhookValidationFactory.createWithFallback(logger);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// Usage
|
|
248
|
+
const validator = createValidator();
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Pattern: Configuration Object
|
|
252
|
+
|
|
253
|
+
```typescript
|
|
254
|
+
interface AppConfig {
|
|
255
|
+
webhook: {
|
|
256
|
+
strictValidation: boolean;
|
|
257
|
+
algorithm: string;
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
function createValidatorFromConfig(config: AppConfig) {
|
|
262
|
+
const logger = toStructuredLogger(createConsoleLogger(), { service: 'webhook' });
|
|
263
|
+
|
|
264
|
+
return new WebhookValidationService({
|
|
265
|
+
strictValidation: config.webhook.strictValidation,
|
|
266
|
+
algorithm: config.webhook.algorithm === 'MD5'
|
|
267
|
+
? SignatureAlgorithm.MD5_WITH_RSA
|
|
268
|
+
: SignatureAlgorithm.SHA512_WITH_RSA
|
|
269
|
+
}, logger);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// Usage
|
|
273
|
+
const appConfig: AppConfig = {
|
|
274
|
+
webhook: {
|
|
275
|
+
strictValidation: true,
|
|
276
|
+
algorithm: 'SHA512'
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
const validator = createValidatorFromConfig(appConfig);
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
## Default Algorithm Selection
|
|
286
|
+
|
|
287
|
+
The `algorithm` configuration option sets the **default** algorithm when auto-detection doesn't find a signature header:
|
|
288
|
+
|
|
289
|
+
```typescript
|
|
290
|
+
const validator = new WebhookValidationService({
|
|
291
|
+
algorithm: SignatureAlgorithm.MD5_WITH_RSA // Default to MD5
|
|
292
|
+
}, logger);
|
|
293
|
+
|
|
294
|
+
// If headers have 'fluent-signature', uses SHA512 (auto-detected)
|
|
295
|
+
// If headers have 'flex.signature', uses MD5 (auto-detected)
|
|
296
|
+
// If no signature header found, uses MD5 (configured default)
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
**Best Practice**: Always use `SHA512_WITH_RSA` as default (it's the SDK default):
|
|
300
|
+
|
|
301
|
+
```typescript
|
|
302
|
+
// ✅ RECOMMENDED
|
|
303
|
+
const validator = new WebhookValidationService({
|
|
304
|
+
algorithm: SignatureAlgorithm.SHA512_WITH_RSA // Modern standard
|
|
305
|
+
}, logger);
|
|
306
|
+
|
|
307
|
+
// ⚠️ USE ONLY FOR OLDER SYSTEMS
|
|
308
|
+
const validator = new WebhookValidationService({
|
|
309
|
+
algorithm: SignatureAlgorithm.MD5_WITH_RSA // Support for older systems
|
|
310
|
+
}, logger);
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
|
|
315
|
+
## Custom Validator Patterns
|
|
316
|
+
|
|
317
|
+
### Pattern: Singleton Validator
|
|
318
|
+
|
|
319
|
+
```typescript
|
|
320
|
+
// validator.ts
|
|
321
|
+
import {
|
|
322
|
+
WebhookValidationService,
|
|
323
|
+
createConsoleLogger,
|
|
324
|
+
toStructuredLogger
|
|
325
|
+
} from '@fluentcommerce/fc-connect-sdk';
|
|
326
|
+
|
|
327
|
+
let validatorInstance: WebhookValidationService | null = null;
|
|
328
|
+
|
|
329
|
+
export function getValidator(): WebhookValidationService {
|
|
330
|
+
if (!validatorInstance) {
|
|
331
|
+
const logger = toStructuredLogger(createConsoleLogger(), { service: 'webhook' });
|
|
332
|
+
|
|
333
|
+
validatorInstance = new WebhookValidationService({
|
|
334
|
+
strictValidation: true
|
|
335
|
+
}, logger);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
return validatorInstance;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
// Usage
|
|
342
|
+
import { getValidator } from './validator';
|
|
343
|
+
|
|
344
|
+
const validator = getValidator();
|
|
345
|
+
const result = await validator.validateWebhook(...);
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
### Pattern: Validator per Environment
|
|
349
|
+
|
|
350
|
+
```typescript
|
|
351
|
+
// validators.ts
|
|
352
|
+
import {
|
|
353
|
+
WebhookValidationService,
|
|
354
|
+
WebhookValidationFactory,
|
|
355
|
+
createConsoleLogger,
|
|
356
|
+
toStructuredLogger
|
|
357
|
+
} from '@fluentcommerce/fc-connect-sdk';
|
|
358
|
+
|
|
359
|
+
const baseLogger = createConsoleLogger();
|
|
360
|
+
|
|
361
|
+
export const validators = {
|
|
362
|
+
production: WebhookValidationFactory.createProduction(
|
|
363
|
+
toStructuredLogger(baseLogger, { service: 'webhook-prod' })
|
|
364
|
+
),
|
|
365
|
+
|
|
366
|
+
sandbox: WebhookValidationFactory.createDevelopment(
|
|
367
|
+
toStructuredLogger(baseLogger, { service: 'webhook-sandbox' })
|
|
368
|
+
),
|
|
369
|
+
|
|
370
|
+
development: WebhookValidationFactory.createDevelopment(
|
|
371
|
+
toStructuredLogger(baseLogger, { service: 'webhook-dev' })
|
|
372
|
+
)
|
|
373
|
+
};
|
|
374
|
+
|
|
375
|
+
// Usage
|
|
376
|
+
import { validators } from './validators';
|
|
377
|
+
|
|
378
|
+
const env = process.env.FLUENT_ENV || 'development';
|
|
379
|
+
const validator = validators[env];
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
### Pattern: Validator with Custom Logger
|
|
383
|
+
|
|
384
|
+
```typescript
|
|
385
|
+
import {
|
|
386
|
+
WebhookValidationService,
|
|
387
|
+
createConsoleLogger,
|
|
388
|
+
toStructuredLogger
|
|
389
|
+
} from '@fluentcommerce/fc-connect-sdk';
|
|
390
|
+
|
|
391
|
+
function createValidatorWithCustomLogging(logLevel: 'debug' | 'info' | 'warn' | 'error') {
|
|
392
|
+
const logger = toStructuredLogger(createConsoleLogger(), {
|
|
393
|
+
service: 'webhook',
|
|
394
|
+
logLevel
|
|
395
|
+
});
|
|
396
|
+
|
|
397
|
+
return new WebhookValidationService({
|
|
398
|
+
strictValidation: true
|
|
399
|
+
}, logger);
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
// Usage
|
|
403
|
+
const validator = createValidatorWithCustomLogging('debug');
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
---
|
|
407
|
+
|
|
408
|
+
## Configuration Best Practices
|
|
409
|
+
|
|
410
|
+
### 1. Use Factory Methods
|
|
411
|
+
|
|
412
|
+
```typescript
|
|
413
|
+
// ✅ GOOD - Use factory for common cases
|
|
414
|
+
const validator = WebhookValidationFactory.createProduction(logger);
|
|
415
|
+
|
|
416
|
+
// ❌ AVOID - Manual configuration for standard cases
|
|
417
|
+
const validator = new WebhookValidationService({
|
|
418
|
+
strictValidation: true,
|
|
419
|
+
algorithm: SignatureAlgorithm.SHA512_WITH_RSA
|
|
420
|
+
}, logger);
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
### 2. Environment-Specific Configuration
|
|
424
|
+
|
|
425
|
+
```typescript
|
|
426
|
+
// ✅ GOOD - Different configs per environment
|
|
427
|
+
const validator = env === 'production'
|
|
428
|
+
? WebhookValidationFactory.createProduction(logger)
|
|
429
|
+
: WebhookValidationFactory.createDevelopment(logger);
|
|
430
|
+
|
|
431
|
+
// ❌ AVOID - Same config everywhere
|
|
432
|
+
const validator = new WebhookValidationService({}, logger);
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
### 3. Strict Validation in Production
|
|
436
|
+
|
|
437
|
+
```typescript
|
|
438
|
+
// ✅ GOOD - Strict in production
|
|
439
|
+
const validator = WebhookValidationFactory.createProduction(logger);
|
|
440
|
+
|
|
441
|
+
// ⚠️ CAUTION - Lenient in production (less secure)
|
|
442
|
+
const validator = WebhookValidationFactory.createDevelopment(logger);
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
### 4. Consistent Logging
|
|
446
|
+
|
|
447
|
+
```typescript
|
|
448
|
+
// ✅ GOOD - Consistent structured logger
|
|
449
|
+
const logger = toStructuredLogger(createConsoleLogger(), { service: 'app' });
|
|
450
|
+
const validator = new WebhookValidationService({ strictValidation: true }, logger);
|
|
451
|
+
|
|
452
|
+
// ❌ AVOID - Using console directly
|
|
453
|
+
const validator = new WebhookValidationService({}, console); // Not recommended
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
---
|
|
457
|
+
|
|
458
|
+
## Configuration Examples
|
|
459
|
+
|
|
460
|
+
### Minimal Production Setup
|
|
461
|
+
|
|
462
|
+
```typescript
|
|
463
|
+
import {
|
|
464
|
+
WebhookValidationFactory,
|
|
465
|
+
createConsoleLogger,
|
|
466
|
+
toStructuredLogger
|
|
467
|
+
} from '@fluentcommerce/fc-connect-sdk';
|
|
468
|
+
|
|
469
|
+
const logger = toStructuredLogger(createConsoleLogger(), { service: 'webhook' });
|
|
470
|
+
const validator = WebhookValidationFactory.createProduction(logger);
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
### Development Setup with Debugging
|
|
474
|
+
|
|
475
|
+
```typescript
|
|
476
|
+
import {
|
|
477
|
+
WebhookValidationFactory,
|
|
478
|
+
createConsoleLogger,
|
|
479
|
+
toStructuredLogger
|
|
480
|
+
} from '@fluentcommerce/fc-connect-sdk';
|
|
481
|
+
|
|
482
|
+
const logger = toStructuredLogger(createConsoleLogger(), {
|
|
483
|
+
service: 'webhook-dev',
|
|
484
|
+
logLevel: 'debug'
|
|
485
|
+
});
|
|
486
|
+
|
|
487
|
+
const validator = WebhookValidationFactory.createDevelopment(logger);
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
### Multi-Environment Setup
|
|
491
|
+
|
|
492
|
+
```typescript
|
|
493
|
+
import {
|
|
494
|
+
WebhookValidationService,
|
|
495
|
+
SignatureAlgorithm,
|
|
496
|
+
createConsoleLogger,
|
|
497
|
+
toStructuredLogger
|
|
498
|
+
} from '@fluentcommerce/fc-connect-sdk';
|
|
499
|
+
|
|
500
|
+
const configs = {
|
|
501
|
+
production: { strictValidation: true, algorithm: SignatureAlgorithm.SHA512_WITH_RSA },
|
|
502
|
+
sandbox: { strictValidation: false, algorithm: SignatureAlgorithm.SHA512_WITH_RSA },
|
|
503
|
+
compatible: { strictValidation: false, algorithm: SignatureAlgorithm.MD5_WITH_RSA }
|
|
504
|
+
};
|
|
505
|
+
|
|
506
|
+
const env = process.env.FLUENT_ENV as keyof typeof configs;
|
|
507
|
+
const config = configs[env] || configs.production;
|
|
508
|
+
|
|
509
|
+
const logger = toStructuredLogger(createConsoleLogger(), { service: `webhook-${env}` });
|
|
510
|
+
const validator = new WebhookValidationService(config, logger);
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
---
|
|
514
|
+
|
|
515
|
+
## Key Takeaways
|
|
516
|
+
|
|
517
|
+
- **Use factory methods** for common scenarios (production, development, fallback)
|
|
518
|
+
- **Strict validation in production** - fail fast on invalid signatures
|
|
519
|
+
- **Lenient validation in development** - better debugging experience
|
|
520
|
+
- **Configure per environment** - different settings for prod/sandbox/dev
|
|
521
|
+
- **SHA512 as default** - modern standard, more secure
|
|
522
|
+
- **Consistent logging** - use same logger throughout application
|
|
523
|
+
|
|
524
|
+
---
|
|
525
|
+
|
|
526
|
+
## Next Steps
|
|
527
|
+
|
|
528
|
+
Continue to [Module 6: Error Handling](./webhook-validation-06-error-handling.md) to learn comprehensive error handling patterns.
|
|
529
|
+
|
|
530
|
+
---
|
|
531
|
+
|
|
532
|
+
## Further Reading
|
|
533
|
+
|
|
534
|
+
- [Module 7: API Reference](../../auto-pagination/modules/auto-pagination-07-api-reference.md) - Complete API documentation
|
|
535
|
+
- [Module 2: Quick Start](../../auto-pagination/modules/auto-pagination-02-quick-start.md) - Basic usage patterns
|