@fluentcommerce/fc-connect-sdk 0.1.54 → 0.1.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/cjs/clients/fluent-client.js +13 -6
- package/dist/cjs/utils/pagination-helpers.js +38 -2
- package/dist/cjs/versori/fluent-versori-client.js +11 -5
- package/dist/esm/clients/fluent-client.js +13 -6
- package/dist/esm/utils/pagination-helpers.js +38 -2
- package/dist/esm/versori/fluent-versori-client.js +11 -5
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/tsconfig.types.tsbuildinfo +1 -1
- package/docs/00-START-HERE/EXPORT-VALIDATION.md +158 -158
- package/docs/00-START-HERE/cli-analyze-source-structure-guide.md +655 -655
- package/docs/00-START-HERE/cli-documentation-index.md +202 -202
- package/docs/00-START-HERE/cli-quick-reference.md +252 -252
- package/docs/00-START-HERE/decision-tree.md +552 -552
- package/docs/00-START-HERE/getting-started.md +1070 -1070
- package/docs/00-START-HERE/mapper-quick-decision-guide.md +235 -235
- package/docs/00-START-HERE/readme.md +237 -237
- package/docs/00-START-HERE/retailerid-configuration.md +404 -404
- package/docs/00-START-HERE/sdk-philosophy.md +794 -794
- package/docs/00-START-HERE/troubleshooting-quick-reference.md +1086 -1086
- package/docs/01-TEMPLATES/faq.md +686 -686
- package/docs/01-TEMPLATES/patterns/pattern-templates-guide.md +68 -68
- package/docs/01-TEMPLATES/patterns/patterns-csv-schema-validation-and-rejection-report.md +233 -233
- package/docs/01-TEMPLATES/patterns/patterns-custom-resolvers.md +407 -407
- package/docs/01-TEMPLATES/patterns/patterns-error-handling-retry.md +511 -511
- package/docs/01-TEMPLATES/patterns/patterns-field-mapping-universal.md +701 -701
- package/docs/01-TEMPLATES/patterns/patterns-large-file-splitting.md +1430 -1430
- package/docs/01-TEMPLATES/patterns/patterns-master-data-etl.md +2399 -2399
- package/docs/01-TEMPLATES/patterns/patterns-pagination-streaming.md +447 -447
- package/docs/01-TEMPLATES/patterns/patterns-state-duplicate-prevention.md +385 -385
- package/docs/01-TEMPLATES/readme.md +957 -957
- package/docs/01-TEMPLATES/standalone/standalone-asn-inbound-processing.md +1209 -1209
- package/docs/01-TEMPLATES/standalone/standalone-graphql-query-export.md +1140 -1140
- package/docs/01-TEMPLATES/standalone/standalone-graphql-to-parquet-partitioned-s3.md +432 -432
- package/docs/01-TEMPLATES/standalone/standalone-multi-channel-inventory-sync.md +1185 -1185
- package/docs/01-TEMPLATES/standalone/standalone-multi-source-aggregation.md +1462 -1462
- package/docs/01-TEMPLATES/standalone/standalone-s3-csv-batch-api.md +1390 -1390
- package/docs/01-TEMPLATES/standalone/standalone-s3-csv-inventory-to-batch.md +330 -330
- package/docs/01-TEMPLATES/standalone/standalone-scripts-guide.md +87 -87
- package/docs/01-TEMPLATES/standalone/standalone-sftp-xml-graphql.md +1444 -1444
- package/docs/01-TEMPLATES/standalone/standalone-webhook-payload-processing.md +688 -688
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-dropship-order-routing.md +193 -193
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-graphql-parquet-extraction.md +518 -518
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-inter-location-transfers.md +2162 -2162
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-pre-order-allocation.md +2226 -2226
- package/docs/01-TEMPLATES/versori/business-examples/business-scenarios-guide.md +87 -87
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-connection-validation-pattern.md +656 -656
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-dual-workflow-connector.md +835 -835
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-guide.md +108 -108
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-kv-state-management.md +1533 -1533
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-xml-response-patterns.md +1160 -1160
- package/docs/01-TEMPLATES/versori/versori-platform-guide.md +201 -201
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-asn-purchase-order.md +1906 -1906
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-dropship-routing.md +1074 -1074
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-flash-sale-reserve.md +1395 -1395
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-generic-xml-order.md +888 -888
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-payment-gateway-integration.md +2478 -2478
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-rma-returns-comprehensive.md +2240 -2240
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-xml-order-ingestion.md +2029 -2029
- package/docs/01-TEMPLATES/versori/webhooks/webhook-templates-guide.md +140 -140
- package/docs/01-TEMPLATES/versori/workflows/_examples/sample-data/inventory-mapping.json +20 -20
- package/docs/01-TEMPLATES/versori/workflows/_examples/sample-data/products_2025-01-22.csv +11 -11
- package/docs/01-TEMPLATES/versori/workflows/_examples/sample-data/sample-data-guide.md +34 -34
- package/docs/01-TEMPLATES/versori/workflows/_examples/workflow-examples-guide.md +36 -36
- package/docs/01-TEMPLATES/versori/workflows/extraction/extraction-modes-guide.md +1038 -1038
- package/docs/01-TEMPLATES/versori/workflows/extraction/extraction-workflows-guide.md +138 -138
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/graphql-extraction-guide.md +63 -63
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-fulfillments-to-sftp-csv.md +2062 -2062
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-fulfillments-to-sftp-xml.md +2294 -2294
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-positions-to-s3-csv.md +2461 -2461
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-positions-to-sftp-xml.md +2529 -2529
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-quantities-to-s3-csv.md +2464 -2464
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-quantities-to-s3-json.md +1959 -1959
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-orders-to-s3-csv.md +1953 -1953
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-orders-to-sftp-xml.md +2541 -2541
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-products-to-s3-json.md +2384 -2384
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-products-to-sftp-xml.md +2445 -2445
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-virtual-positions-to-s3-csv.md +2355 -2355
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-virtual-positions-to-s3-json.md +2042 -2042
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-virtual-positions-to-sftp-xml.md +2726 -2726
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/batch-api-guide.md +206 -206
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-cycle-count-reconciliation.md +2030 -2030
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-multi-channel-inventory-sync.md +1882 -1882
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-s3-csv-inventory-batch.md +2827 -2827
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-s3-json-inventory-batch.md +1952 -1952
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-s3-xml-inventory-batch.md +3289 -3289
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-sftp-csv-inventory-batch.md +3064 -3064
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-sftp-json-inventory-batch.md +3238 -3238
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-sftp-xml-inventory-batch.md +2977 -2977
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/event-api-guide.md +321 -321
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-payload-json-order-cancel-event.md +959 -959
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-payload-xml-order-cancel-event.md +1170 -1170
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-csv-product-event.md +2312 -2312
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-json-product-event.md +2999 -2999
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-parquet-product-event.md +2836 -2836
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-xml-product-event.md +2395 -2395
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-csv-product-event.md +2295 -2295
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-json-product-event.md +2602 -2602
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-parquet-product-event.md +2589 -2589
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-xml-product-event.md +3578 -3578
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/graphql-mutations-guide.md +93 -93
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-payload-json-order-update-graphql.md +1260 -1260
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-payload-xml-order-update-graphql.md +1472 -1472
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-control-graphql.md +2417 -2417
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-location-graphql.md +2811 -2811
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-price-graphql.md +2619 -2619
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-json-location-graphql.md +2807 -2807
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-xml-location-graphql.md +2373 -2373
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-sftp-csv-control-graphql.md +2740 -2740
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-sftp-csv-location-graphql.md +2760 -2760
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-sftp-json-location-graphql.md +1710 -1710
- package/docs/01-TEMPLATES/versori/workflows/ingestion/ingestion-workflows-guide.md +136 -136
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/rubix-webhooks-guide.md +520 -520
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/template-webhook-rubix-fulfilment-to-sftp-xml-inline.md +1418 -1418
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/template-webhook-rubix-fulfilment-to-sftp-xml-universal-mapper.md +1785 -1785
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/template-webhook-rubix-order-attribute-update.md +824 -824
- package/docs/01-TEMPLATES/versori/workflows/workflows-overview-guide.md +646 -646
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-batch-archival.md +724 -724
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-job-tracker.md +627 -627
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-partial-batch-recovery.md +561 -561
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-quick-reference.md +367 -367
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-readme.md +407 -407
- package/docs/02-CORE-GUIDES/advanced-services/readme.md +49 -49
- package/docs/02-CORE-GUIDES/api-reference/api-reference-quick-reference.md +548 -548
- package/docs/02-CORE-GUIDES/api-reference/event-api-input-output-reference.md +702 -1171
- package/docs/02-CORE-GUIDES/api-reference/examples/client-initialization.ts +286 -286
- package/docs/02-CORE-GUIDES/api-reference/graphql-error-classification.md +337 -337
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-01-client-api.md +399 -520
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-03-authentication.md +199 -199
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-04-graphql-mapping.md +925 -925
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-05-services.md +1198 -1198
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-06-data-sources.md +1083 -1083
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-07-parsers.md +1097 -1097
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-08-pagination.md +513 -513
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-08-types.md +545 -597
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-09-error-handling.md +527 -527
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-09-webhook-validation.md +514 -514
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-10-extraction.md +557 -557
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-10-utilities.md +412 -412
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-11-cli-tools.md +423 -423
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-11-error-handling.md +716 -716
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-12-analyze-source-structure.md +518 -518
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-12-partial-responses.md +212 -212
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-12-testing.md +300 -300
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-13-resolver-builder.md +322 -322
- package/docs/02-CORE-GUIDES/api-reference/readme.md +279 -279
- package/docs/02-CORE-GUIDES/auto-pagination/auto-pagination-quick-reference.md +351 -351
- package/docs/02-CORE-GUIDES/auto-pagination/auto-pagination-readme.md +277 -277
- package/docs/02-CORE-GUIDES/auto-pagination/examples/auto-pagination-readme.md +178 -178
- package/docs/02-CORE-GUIDES/auto-pagination/examples/common-patterns.ts +351 -351
- package/docs/02-CORE-GUIDES/auto-pagination/examples/paginate-products.ts +384 -384
- package/docs/02-CORE-GUIDES/auto-pagination/examples/paginate-virtual-positions.ts +308 -308
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-01-foundations.md +470 -470
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-02-quick-start.md +713 -713
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-03-configuration.md +754 -754
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-04-advanced-patterns.md +732 -732
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-05-sdk-integration.md +847 -847
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-06-troubleshooting.md +359 -359
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-07-api-reference.md +462 -462
- package/docs/02-CORE-GUIDES/auto-pagination/readme.md +54 -54
- package/docs/02-CORE-GUIDES/data-sources/data-sources-file-operations-error-handling.md +1487 -1487
- package/docs/02-CORE-GUIDES/data-sources/data-sources-quick-reference.md +836 -836
- package/docs/02-CORE-GUIDES/data-sources/data-sources-readme.md +276 -276
- package/docs/02-CORE-GUIDES/data-sources/data-sources-sftp-credential-access-security.md +553 -553
- package/docs/02-CORE-GUIDES/data-sources/examples/common-patterns.ts +409 -409
- package/docs/02-CORE-GUIDES/data-sources/examples/data-sources-readme.md +178 -178
- package/docs/02-CORE-GUIDES/data-sources/examples/s3-operations.ts +308 -308
- package/docs/02-CORE-GUIDES/data-sources/examples/sftp-operations.ts +371 -371
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-01-foundations.md +735 -735
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-02-s3-operations.md +1302 -1302
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-03-sftp-operations.md +1379 -1379
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-04-file-patterns.md +941 -941
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-05-advanced-topics.md +813 -813
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-06-integration-patterns.md +486 -486
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-07-troubleshooting.md +387 -387
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-08-api-reference.md +417 -417
- package/docs/02-CORE-GUIDES/data-sources/readme.md +77 -77
- package/docs/02-CORE-GUIDES/error-handling-guide.md +936 -936
- package/docs/02-CORE-GUIDES/extraction/examples/02-core-guides-extraction-readme.md +116 -116
- package/docs/02-CORE-GUIDES/extraction/examples/common-patterns.ts +428 -428
- package/docs/02-CORE-GUIDES/extraction/examples/extract-inventory-basic.ts +187 -187
- package/docs/02-CORE-GUIDES/extraction/extraction-quick-reference.md +596 -596
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-01-foundations.md +514 -514
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-02-basic-extraction.md +823 -823
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-03-parquet-processing.md +507 -507
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-04-data-enrichment.md +546 -546
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-05-transformation.md +494 -494
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-06-export-formats.md +458 -458
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-06-performance.md +138 -138
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-07-api-reference.md +148 -148
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-07-optimization.md +692 -692
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-08-extraction-orchestrator.md +1008 -1008
- package/docs/02-CORE-GUIDES/extraction/readme.md +151 -151
- package/docs/02-CORE-GUIDES/ingestion/examples/_simple-kv-store.ts +40 -40
- package/docs/02-CORE-GUIDES/ingestion/examples/error-recovery.ts +728 -728
- package/docs/02-CORE-GUIDES/ingestion/examples/event-driven.ts +501 -501
- package/docs/02-CORE-GUIDES/ingestion/examples/local-file-ingestion.ts +88 -88
- package/docs/02-CORE-GUIDES/ingestion/examples/parquet-ingestion.ts +117 -117
- package/docs/02-CORE-GUIDES/ingestion/examples/performance-optimized.ts +647 -647
- package/docs/02-CORE-GUIDES/ingestion/examples/s3-csv-ingestion.ts +169 -169
- package/docs/02-CORE-GUIDES/ingestion/examples/sftp-csv-ingestion.ts +134 -134
- package/docs/02-CORE-GUIDES/ingestion/ingestion-quick-reference.md +546 -546
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-01-introduction.md +626 -626
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-02-quick-start.md +658 -658
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-03-data-sources.md +1052 -1052
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-04-field-mapping.md +763 -763
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-05-advanced-parsers.md +676 -676
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-06-batch-api.md +1295 -1295
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-07-api-reference.md +138 -138
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-07-state-management.md +1037 -1037
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-08-performance-optimization.md +1349 -1349
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-09-best-practices.md +1893 -1893
- package/docs/02-CORE-GUIDES/ingestion/readme.md +160 -160
- package/docs/02-CORE-GUIDES/logging-guide.md +585 -585
- package/docs/02-CORE-GUIDES/mapping/error-handling-patterns.md +401 -401
- package/docs/02-CORE-GUIDES/mapping/examples/02-core-guides-mapping-readme.md +128 -128
- package/docs/02-CORE-GUIDES/mapping/examples/common-patterns.ts +273 -273
- package/docs/02-CORE-GUIDES/mapping/examples/csv-location-ingestion.json +36 -36
- package/docs/02-CORE-GUIDES/mapping/examples/csv-mapping.ts +242 -242
- package/docs/02-CORE-GUIDES/mapping/examples/graphql-to-parquet-extraction.json +36 -36
- package/docs/02-CORE-GUIDES/mapping/examples/json-mapping.ts +213 -213
- package/docs/02-CORE-GUIDES/mapping/examples/json-product-to-mutation.json +48 -48
- package/docs/02-CORE-GUIDES/mapping/examples/xml-mapping.ts +291 -291
- package/docs/02-CORE-GUIDES/mapping/examples/xml-order-to-mutation.json +45 -45
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/graphql-mutation-mapping-quick-reference.md +463 -463
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/graphql-mutation-mapping-readme.md +227 -227
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-01-introduction.md +222 -222
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-02-quick-start.md +351 -351
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-03-schema-validation.md +569 -569
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-04-mapping-patterns.md +471 -471
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-05-configuration-reference.md +611 -611
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-06-advanced-xpath.md +148 -148
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-06-path-syntax.md +464 -464
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-07-api-reference.md +94 -94
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-07-array-handling.md +307 -307
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-08-custom-resolvers.md +544 -544
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-09-advanced-patterns.md +427 -427
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-10-hooks-and-variables.md +336 -336
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-11-error-handling.md +488 -488
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-12-arguments-vs-nodes.md +383 -383
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-13-best-practices.md +477 -477
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/readme.md +62 -62
- package/docs/02-CORE-GUIDES/mapping/mapping-format-decision-tree.md +480 -480
- package/docs/02-CORE-GUIDES/mapping/mapping-graphql-alias-batching-guide.md +820 -820
- package/docs/02-CORE-GUIDES/mapping/mapping-javascript-objects.md +2369 -2369
- package/docs/02-CORE-GUIDES/mapping/mapping-mapper-comparison-guide.md +682 -682
- package/docs/02-CORE-GUIDES/mapping/modules/02-core-guides-mapping-07-api-reference.md +1327 -1327
- package/docs/02-CORE-GUIDES/mapping/modules/02-core-guides-mapping-08-error-handling.md +1142 -1142
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-04-use-cases.md +891 -891
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-06-helpers-resolvers.md +1126 -1126
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-06-sdk-resolvers.md +199 -199
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-07-api-reference.md +1319 -1319
- package/docs/02-CORE-GUIDES/mapping/readme.md +178 -178
- package/docs/02-CORE-GUIDES/mapping/resolver-registration.md +410 -410
- package/docs/02-CORE-GUIDES/mapping/resolvers/examples/common-patterns.ts +226 -226
- package/docs/02-CORE-GUIDES/mapping/resolvers/examples/custom-resolvers.ts +227 -227
- package/docs/02-CORE-GUIDES/mapping/resolvers/examples/sdk-resolvers-usage.ts +203 -203
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-readme.md +274 -274
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-api-reference.md +679 -679
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-cookbook.md +826 -826
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-guide.md +1330 -1330
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-helpers-reference.md +1437 -1437
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-parameters-reference.md +553 -553
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-troubleshooting.md +854 -854
- package/docs/02-CORE-GUIDES/mapping/resolvers/readme.md +75 -75
- package/docs/02-CORE-GUIDES/parsers/examples/02-core-guides-parsers-readme.md +161 -161
- package/docs/02-CORE-GUIDES/parsers/examples/csv-parser-examples.ts +110 -110
- package/docs/02-CORE-GUIDES/parsers/examples/json-parser-examples.ts +33 -33
- package/docs/02-CORE-GUIDES/parsers/examples/parquet-parser-examples.ts +47 -47
- package/docs/02-CORE-GUIDES/parsers/examples/xml-parser-examples.ts +38 -38
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-01-foundations.md +355 -355
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-02-csv-parser.md +772 -772
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-03-json-parser.md +789 -789
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-04-xml-parser.md +857 -857
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-05-parquet-parser.md +603 -603
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-06-integration-patterns.md +702 -702
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-06-streaming.md +121 -121
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-07-api-reference.md +89 -89
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-07-troubleshooting.md +727 -727
- package/docs/02-CORE-GUIDES/parsers/parsers-quick-reference.md +482 -482
- package/docs/02-CORE-GUIDES/parsers/parsers-readme.md +258 -258
- package/docs/02-CORE-GUIDES/parsers/readme.md +65 -65
- package/docs/02-CORE-GUIDES/readme.md +194 -194
- package/docs/02-CORE-GUIDES/webhook-validation/examples/basic-validation.ts +108 -108
- package/docs/02-CORE-GUIDES/webhook-validation/examples/common-patterns.ts +316 -316
- package/docs/02-CORE-GUIDES/webhook-validation/examples/webhook-validation-readme.md +61 -61
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-01-foundations.md +440 -440
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-02-quick-start.md +525 -525
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-03-versori-integration.md +741 -741
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-04-platform-integration.md +629 -629
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-05-configuration.md +535 -535
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-06-error-handling.md +611 -611
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-06-troubleshooting.md +124 -124
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-07-api-reference.md +511 -511
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-08-rubix-webhooks.md +590 -590
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-09-rubix-event-vs-http-call.md +432 -432
- package/docs/02-CORE-GUIDES/webhook-validation/readme.md +239 -239
- package/docs/02-CORE-GUIDES/webhook-validation/webhook-validation-quick-reference.md +392 -392
- package/docs/03-PATTERN-GUIDES/connector-scenarios/connector-scenarios-quick-reference.md +498 -498
- package/docs/03-PATTERN-GUIDES/connector-scenarios/connector-scenarios-readme.md +313 -313
- package/docs/03-PATTERN-GUIDES/connector-scenarios/examples/common-patterns.ts +612 -612
- package/docs/03-PATTERN-GUIDES/connector-scenarios/examples/connector-scenarios-readme.md +253 -253
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-01-foundations.md +452 -452
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-02-simple-scenarios.md +681 -681
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-03-intermediate-scenarios.md +637 -637
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-04-advanced-scenarios.md +650 -650
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-05-bidirectional-sync.md +233 -233
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-06-production-patterns.md +442 -442
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-07-reference.md +445 -445
- package/docs/03-PATTERN-GUIDES/connector-scenarios/readme.md +31 -31
- package/docs/03-PATTERN-GUIDES/enterprise-integration-patterns.md +1528 -1528
- package/docs/03-PATTERN-GUIDES/error-handling/comprehensive-error-handling-guide.md +1437 -1437
- package/docs/03-PATTERN-GUIDES/error-handling/error-handling-quick-reference.md +390 -390
- package/docs/03-PATTERN-GUIDES/error-handling/examples/common-patterns.ts +438 -438
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-01-foundations.md +362 -362
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-02-error-types.md +850 -850
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-03-utf8-handling.md +456 -456
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-04-error-scenarios.md +658 -658
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-05-calling-patterns.md +671 -671
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-06-retry-strategies.md +1034 -1034
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-07-monitoring.md +653 -653
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-08-api-reference.md +847 -847
- package/docs/03-PATTERN-GUIDES/error-handling/readme.md +36 -36
- package/docs/03-PATTERN-GUIDES/examples/__tests__/readme.md +40 -40
- package/docs/03-PATTERN-GUIDES/examples/__tests__/resolver-examples.test.js +282 -282
- package/docs/03-PATTERN-GUIDES/examples/test-data/03-pattern-guides-readme.md +110 -110
- package/docs/03-PATTERN-GUIDES/examples/test-data/canonical-inventory.json +123 -123
- package/docs/03-PATTERN-GUIDES/examples/test-data/canonical-order.json +171 -171
- package/docs/03-PATTERN-GUIDES/examples/test-data/readme.md +28 -28
- package/docs/03-PATTERN-GUIDES/extraction/extraction-readme.md +15 -15
- package/docs/03-PATTERN-GUIDES/extraction/readme.md +25 -25
- package/docs/03-PATTERN-GUIDES/file-operations/examples/common-patterns.ts +407 -407
- package/docs/03-PATTERN-GUIDES/file-operations/examples/file-operations-readme.md +142 -142
- package/docs/03-PATTERN-GUIDES/file-operations/file-operations-quick-reference.md +462 -462
- package/docs/03-PATTERN-GUIDES/file-operations/file-operations-readme.md +379 -379
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-01-foundations.md +430 -430
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-02-quick-start.md +484 -484
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-03-s3-operations.md +507 -507
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-04-sftp-operations.md +963 -963
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-05-streaming-performance.md +503 -503
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-06-archive-patterns.md +386 -386
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-06-error-handling.md +117 -117
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-07-api-reference.md +78 -78
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-07-testing-troubleshooting.md +567 -567
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-08-api-reference.md +1055 -1055
- package/docs/03-PATTERN-GUIDES/file-operations/readme.md +32 -32
- package/docs/03-PATTERN-GUIDES/ingestion/ingestion-readme.md +15 -15
- package/docs/03-PATTERN-GUIDES/ingestion/readme.md +25 -25
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/batch-processing.ts +130 -130
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/common-patterns.ts +360 -360
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/delta-sync.ts +130 -130
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/integration-patterns-readme.md +100 -100
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/real-time-webhook.ts +398 -398
- package/docs/03-PATTERN-GUIDES/integration-patterns/integration-patterns-quick-reference.md +962 -962
- package/docs/03-PATTERN-GUIDES/integration-patterns/integration-patterns-readme.md +134 -134
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-01-real-time-processing.md +991 -991
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-02-batch-processing.md +1547 -1547
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-03-delta-sync.md +1108 -1108
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-04-webhook-patterns.md +1181 -1181
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-05-error-handling.md +1061 -1061
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-06-advanced-integration-services.md +1547 -1547
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-06-performance.md +109 -109
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-07-api-reference.md +34 -34
- package/docs/03-PATTERN-GUIDES/integration-patterns/readme.md +30 -30
- package/docs/03-PATTERN-GUIDES/logging-minimal-mode.md +128 -128
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/common-patterns.ts +380 -380
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/multiple-connections-readme.md +139 -139
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/parallel-root-connections.ts +149 -149
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/real-world-scenarios.ts +405 -405
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-01-foundations.md +378 -378
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-02-quick-start.md +566 -566
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-03-targeting-connections.md +659 -659
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-04-parallel-queries.md +656 -656
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-05-best-practices.md +624 -624
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-06-api-reference.md +824 -824
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-06-versori.md +119 -119
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-07-api-reference.md +87 -87
- package/docs/03-PATTERN-GUIDES/multiple-connections/multiple-connections-quick-reference.md +353 -353
- package/docs/03-PATTERN-GUIDES/multiple-connections/multiple-connections-readme.md +270 -270
- package/docs/03-PATTERN-GUIDES/multiple-connections/readme.md +30 -30
- package/docs/03-PATTERN-GUIDES/pagination/pagination-readme.md +14 -14
- package/docs/03-PATTERN-GUIDES/pagination/readme.md +24 -24
- package/docs/03-PATTERN-GUIDES/parquet/examples/common-patterns.ts +180 -180
- package/docs/03-PATTERN-GUIDES/parquet/examples/read-parquet.ts +48 -48
- package/docs/03-PATTERN-GUIDES/parquet/examples/write-parquet.ts +65 -65
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-01-introduction.md +393 -393
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-02-quick-start.md +572 -572
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-03-reading-parquet.md +525 -525
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-04-writing-parquet.md +554 -554
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-05-graphql-extraction.md +405 -405
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-06-performance.md +104 -104
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-06-s3-integration.md +511 -511
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-07-api-reference.md +90 -90
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-07-performance-optimization.md +525 -525
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-08-best-practices.md +712 -712
- package/docs/03-PATTERN-GUIDES/parquet/parquet-quick-reference.md +683 -683
- package/docs/03-PATTERN-GUIDES/parquet/parquet-readme.md +248 -248
- package/docs/03-PATTERN-GUIDES/parquet/readme.md +32 -32
- package/docs/03-PATTERN-GUIDES/parsers/parsers-readme.md +12 -12
- package/docs/03-PATTERN-GUIDES/parsers/readme.md +24 -24
- package/docs/03-PATTERN-GUIDES/readme.md +159 -159
- package/docs/03-PATTERN-GUIDES/webhooks/readme.md +24 -24
- package/docs/03-PATTERN-GUIDES/webhooks/webhooks-readme.md +8 -8
- package/docs/04-REFERENCE/architecture/architecture-01-overview.md +427 -427
- package/docs/04-REFERENCE/architecture/architecture-02-client-architecture.md +424 -424
- package/docs/04-REFERENCE/architecture/architecture-03-data-flow.md +690 -690
- package/docs/04-REFERENCE/architecture/architecture-04-service-layer.md +834 -834
- package/docs/04-REFERENCE/architecture/architecture-05-integration-architecture.md +655 -655
- package/docs/04-REFERENCE/architecture/architecture-06-state-management.md +653 -653
- package/docs/04-REFERENCE/architecture/architecture-adding-new-data-sources.md +686 -686
- package/docs/04-REFERENCE/architecture/readme.md +279 -279
- package/docs/04-REFERENCE/platforms/deno/readme.md +117 -117
- package/docs/04-REFERENCE/platforms/nodejs/readme.md +146 -146
- package/docs/04-REFERENCE/platforms/readme.md +135 -135
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-01-introduction.md +398 -398
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-02-quick-start.md +560 -560
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-03-authentication.md +757 -757
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-04-workflows.md +2476 -2476
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-05-connections.md +1167 -1167
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-06-kv-storage.md +990 -990
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-06-state-management.md +121 -121
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-07-api-reference.md +68 -68
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-07-deployment.md +731 -731
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-08-best-practices.md +1111 -1111
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-09-signature-reference.md +766 -766
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-readme.md +299 -299
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-s3-sftp-configuration-guide.md +1425 -1425
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-webhook-api-key-security.md +816 -816
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-webhook-connection-security.md +681 -681
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-workflow-task-types.md +708 -708
- package/docs/04-REFERENCE/platforms/versori/readme.md +108 -108
- package/docs/04-REFERENCE/readme.md +148 -148
- package/docs/04-REFERENCE/resolver-signature/examples/advanced-resolvers.ts +482 -482
- package/docs/04-REFERENCE/resolver-signature/examples/async-resolvers.ts +496 -496
- package/docs/04-REFERENCE/resolver-signature/examples/basic-resolvers.ts +343 -343
- package/docs/04-REFERENCE/resolver-signature/examples/resolver-signature-readme.md +188 -188
- package/docs/04-REFERENCE/resolver-signature/examples/testing-resolvers.ts +463 -463
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-01-foundations.md +286 -286
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-02-parameter-reference.md +643 -643
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-03-basic-examples.md +521 -521
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-04-advanced-patterns.md +739 -739
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-05-sdk-resolvers.md +531 -531
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-06-migration-guide.md +650 -650
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-06-testing.md +125 -125
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-07-api-reference.md +794 -794
- package/docs/04-REFERENCE/resolver-signature/readme.md +64 -64
- package/docs/04-REFERENCE/resolver-signature/resolver-signature-quick-reference.md +270 -270
- package/docs/04-REFERENCE/resolver-signature/resolver-signature-readme.md +351 -351
- package/docs/04-REFERENCE/schema/fluent-commerce-schema.json +764 -764
- package/docs/04-REFERENCE/schema/readme.md +141 -141
- package/docs/04-REFERENCE/testing/examples/04-reference-testing-readme.md +158 -158
- package/docs/04-REFERENCE/testing/examples/fluent-testing.ts +62 -62
- package/docs/04-REFERENCE/testing/examples/health-check.ts +155 -155
- package/docs/04-REFERENCE/testing/examples/integration-test.ts +119 -119
- package/docs/04-REFERENCE/testing/examples/performance-test.ts +183 -183
- package/docs/04-REFERENCE/testing/examples/s3-testing.ts +127 -127
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-01-foundations.md +267 -267
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-02-s3-testing.md +599 -599
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-03-fluent-testing.md +589 -589
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-04-integration-testing.md +699 -699
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-05-debugging.md +478 -478
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-06-cicd-integration.md +463 -463
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-06-preflight-validation.md +131 -131
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-07-best-practices.md +499 -499
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-07-coverage-ci.md +165 -165
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-08-api-reference.md +634 -634
- package/docs/04-REFERENCE/testing/readme.md +86 -86
- package/docs/04-REFERENCE/testing/testing-quick-reference.md +667 -667
- package/docs/04-REFERENCE/testing/testing-readme.md +286 -286
- package/docs/04-REFERENCE/troubleshooting/readme.md +144 -144
- package/docs/04-REFERENCE/troubleshooting/troubleshooting-deno-sftp-compatibility.md +392 -392
- package/docs/template-loading-matrix.md +242 -242
- package/package.json +5 -3
- package/docs/02-CORE-GUIDES/api-reference/cli-profile-integration.md +0 -377
|
@@ -1,1171 +1,702 @@
|
|
|
1
|
-
# Event API - Input/Output Reference Guide
|
|
2
|
-
|
|
3
|
-
> **Complete reference** for Event API request/response structures with live examples from
|
|
4
|
-
|
|
5
|
-
## Table of Contents
|
|
6
|
-
|
|
7
|
-
1. [Success Response Structure](#success-response-structure)
|
|
8
|
-
2. [
|
|
9
|
-
3. [
|
|
10
|
-
4. [
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
"
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
[FluentClient:event]
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
|
|
79
|
-
"
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
"
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
{
|
|
280
|
-
"
|
|
281
|
-
"name": "
|
|
282
|
-
"
|
|
283
|
-
"
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
```
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
```
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
```
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
```
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
**SDK
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
{
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
}
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
}
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
- ✅
|
|
668
|
-
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
- ✅
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
**Response Structure (Workflow Failure):**
|
|
704
|
-
```typescript
|
|
705
|
-
// THROWS FluentAPIError
|
|
706
|
-
{
|
|
707
|
-
name: "FluentAPIError",
|
|
708
|
-
message: "Request failed: 404",
|
|
709
|
-
statusCode: 404,
|
|
710
|
-
details: "No workflow rule matched"
|
|
711
|
-
}
|
|
712
|
-
```
|
|
713
|
-
|
|
714
|
-
**Use Case:**
|
|
715
|
-
- Critical events requiring immediate confirmation
|
|
716
|
-
- Low-volume event processing
|
|
717
|
-
- Testing/debugging workflows
|
|
718
|
-
|
|
719
|
-
---
|
|
720
|
-
|
|
721
|
-
## SDK Automatic Behaviors (v0.1.40+)
|
|
722
|
-
|
|
723
|
-
### 1. retailerId Validation
|
|
724
|
-
|
|
725
|
-
**Timing:** BEFORE API call
|
|
726
|
-
**Behavior:** SDK checks if `event.retailerId` or `client.retailerId` is set
|
|
727
|
-
**If Missing:** Throws `FluentValidationError` immediately
|
|
728
|
-
**Benefit:** Fail-fast, no wasted API calls
|
|
729
|
-
|
|
730
|
-
```typescript
|
|
731
|
-
// ✅ GOOD: retailerId provided
|
|
732
|
-
await client.sendEvent({ retailerId: '2', ... });
|
|
733
|
-
|
|
734
|
-
// ✅ GOOD: retailerId configured in client
|
|
735
|
-
const client = new FluentClient({ retailerId: '2', ... });
|
|
736
|
-
await client.sendEvent({ ... }); // Uses client.retailerId
|
|
737
|
-
|
|
738
|
-
// ❌ BAD: No retailerId anywhere
|
|
739
|
-
await client.sendEvent({ ... }); // Throws BEFORE API call
|
|
740
|
-
```
|
|
741
|
-
|
|
742
|
-
---
|
|
743
|
-
|
|
744
|
-
### 2. 401 Authentication Retry
|
|
745
|
-
|
|
746
|
-
**Timing:** On 401 response
|
|
747
|
-
**Behavior:** SDK retries with exponential backoff (3 attempts)
|
|
748
|
-
**Delay:** 1s → 2s → 4s
|
|
749
|
-
**Use Case:** OAuth2 token refresh, platform token rotation
|
|
750
|
-
|
|
751
|
-
```typescript
|
|
752
|
-
// Scenario: OAuth2 token expired
|
|
753
|
-
await client.sendEvent(event);
|
|
754
|
-
// [WARN] Platform auth failure (401), retrying after 1000ms
|
|
755
|
-
// [INFO] Event sent successfully after retry
|
|
756
|
-
```
|
|
757
|
-
|
|
758
|
-
---
|
|
759
|
-
|
|
760
|
-
### 3. 5xx Server Error Retry
|
|
761
|
-
|
|
762
|
-
**Timing:** On 500, 502, 503, 504 responses
|
|
763
|
-
**Behavior:** SDK retries with exponential backoff (3 attempts)
|
|
764
|
-
**Delay:** 1s → 2s → 4s (capped at 10s)
|
|
765
|
-
**Use Case:** Transient API failures, network hiccups
|
|
766
|
-
|
|
767
|
-
```typescript
|
|
768
|
-
// Scenario: Fluent API temporarily down (503)
|
|
769
|
-
await client.sendEvent(event);
|
|
770
|
-
// [WARN] Request failed, retrying (attempt 1/3)
|
|
771
|
-
// [WARN] Request failed, retrying (attempt 2/3)
|
|
772
|
-
// [INFO] Event sent successfully after retry
|
|
773
|
-
```
|
|
774
|
-
|
|
775
|
-
---
|
|
776
|
-
|
|
777
|
-
### 4. 4xx Client Error Behavior
|
|
778
|
-
|
|
779
|
-
**Timing:** On 400, 403, 404, 422 responses (except 401)
|
|
780
|
-
**Behavior:** SDK throws `FluentAPIError` immediately (NO retry)
|
|
781
|
-
**Reason:** Client errors require code/data fixes, not retry
|
|
782
|
-
|
|
783
|
-
```typescript
|
|
784
|
-
// Scenario: Invalid event name (400)
|
|
785
|
-
try {
|
|
786
|
-
await client.sendEvent({ name: 'InvalidEvent', ... });
|
|
787
|
-
} catch (error) {
|
|
788
|
-
// Throws immediately, NO retries
|
|
789
|
-
console.error(error.statusCode); // 400
|
|
790
|
-
}
|
|
791
|
-
```
|
|
792
|
-
|
|
793
|
-
---
|
|
794
|
-
|
|
795
|
-
## Error Handling Best Practices
|
|
796
|
-
|
|
797
|
-
### Pattern 1: Per-Event Error Handling
|
|
798
|
-
|
|
799
|
-
```typescript
|
|
800
|
-
const results = { success: 0, failed: 0, errors: [] };
|
|
801
|
-
|
|
802
|
-
for (const record of records) {
|
|
803
|
-
try {
|
|
804
|
-
const result = await client.sendEvent({
|
|
805
|
-
name: 'PRODUCT.UPDATE',
|
|
806
|
-
entityType: 'PRODUCT',
|
|
807
|
-
entityRef: record.sku,
|
|
808
|
-
retailerId: '2',
|
|
809
|
-
attributes: record
|
|
810
|
-
});
|
|
811
|
-
|
|
812
|
-
results.success++;
|
|
813
|
-
console.log(`✅ ${record.sku} - statusCode: ${result.statusCode}`);
|
|
814
|
-
} catch (error) {
|
|
815
|
-
results.failed++;
|
|
816
|
-
|
|
817
|
-
if (error instanceof FluentAPIError) {
|
|
818
|
-
// SDK already retried 401/5xx - this is non-retryable
|
|
819
|
-
console.error(`❌ ${record.sku} - HTTP ${error.statusCode}: ${error.message}`);
|
|
820
|
-
results.errors.push({ sku: record.sku, statusCode: error.statusCode, error: error.message });
|
|
821
|
-
} else if (error instanceof AuthenticationError) {
|
|
822
|
-
// Auth failed after 3 retries - credentials issue
|
|
823
|
-
console.error(`❌ Auth failure: ${error.message}`);
|
|
824
|
-
break; // Stop processing
|
|
825
|
-
}
|
|
826
|
-
}
|
|
827
|
-
}
|
|
828
|
-
|
|
829
|
-
console.log(`Results: ${results.success} success, ${results.failed} failed`);
|
|
830
|
-
```
|
|
831
|
-
|
|
832
|
-
---
|
|
833
|
-
|
|
834
|
-
### Pattern 2: Batch Processing with Error Aggregation
|
|
835
|
-
|
|
836
|
-
```typescript
|
|
837
|
-
interface EventResult {
|
|
838
|
-
sku: string;
|
|
839
|
-
success: boolean;
|
|
840
|
-
statusCode?: number;
|
|
841
|
-
error?: string;
|
|
842
|
-
}
|
|
843
|
-
|
|
844
|
-
async function processBatch(products: Product[]): Promise<EventResult[]> {
|
|
845
|
-
const results: EventResult[] = [];
|
|
846
|
-
|
|
847
|
-
for (const product of products) {
|
|
848
|
-
try {
|
|
849
|
-
const response = await client.sendEvent({
|
|
850
|
-
name: 'PRODUCT.UPSERT',
|
|
851
|
-
entityType: 'PRODUCT',
|
|
852
|
-
entityRef: product.sku,
|
|
853
|
-
retailerId: '2',
|
|
854
|
-
attributes: product
|
|
855
|
-
});
|
|
856
|
-
|
|
857
|
-
results.push({
|
|
858
|
-
sku: product.sku,
|
|
859
|
-
success: true,
|
|
860
|
-
statusCode: response.statusCode
|
|
861
|
-
});
|
|
862
|
-
} catch (error) {
|
|
863
|
-
if (error instanceof FluentAPIError) {
|
|
864
|
-
results.push({
|
|
865
|
-
sku: product.sku,
|
|
866
|
-
success: false,
|
|
867
|
-
error: `HTTP ${error.statusCode}: ${error.message}`
|
|
868
|
-
});
|
|
869
|
-
} else {
|
|
870
|
-
results.push({
|
|
871
|
-
sku: product.sku,
|
|
872
|
-
success: false,
|
|
873
|
-
error: error.message
|
|
874
|
-
});
|
|
875
|
-
}
|
|
876
|
-
}
|
|
877
|
-
}
|
|
878
|
-
|
|
879
|
-
return results;
|
|
880
|
-
}
|
|
881
|
-
```
|
|
882
|
-
|
|
883
|
-
---
|
|
884
|
-
|
|
885
|
-
## Summary
|
|
886
|
-
|
|
887
|
-
### Key Takeaways
|
|
888
|
-
|
|
889
|
-
1. **statusCode field** (HTTP status code - consistent with error.statusCode)
|
|
890
|
-
- ✅ Available in all success responses
|
|
891
|
-
- ✅ Provides HTTP status code (200, 201, 202)
|
|
892
|
-
- ✅ Available in both FluentClient and FluentVersoriClient
|
|
893
|
-
|
|
894
|
-
2. **retailerId Validation**
|
|
895
|
-
- ✅ Validated BEFORE API call (fail-fast)
|
|
896
|
-
- ✅ Accepts from event payload OR client config
|
|
897
|
-
- ✅ Clear error message with configuration hints
|
|
898
|
-
|
|
899
|
-
3. **Automatic Retry**
|
|
900
|
-
- ✅ 401 errors: 3 retries (OAuth2 token refresh)
|
|
901
|
-
- ✅ 5xx errors: 3 retries (transient failures)
|
|
902
|
-
- ❌ 4xx errors: NO retry (client errors)
|
|
903
|
-
|
|
904
|
-
4. **Structured Errors**
|
|
905
|
-
- ✅ FluentAPIError with HTTP status
|
|
906
|
-
- ✅ AuthenticationError for auth failures
|
|
907
|
-
- ✅ GraphQLExecutionError for GraphQL errors
|
|
908
|
-
|
|
909
|
-
5. **Async vs Sync**
|
|
910
|
-
- ✅ Async: Fast, fire-and-forget (default)
|
|
911
|
-
- ✅ Sync: Waits for workflow, immediate error detection
|
|
912
|
-
|
|
913
|
-
---
|
|
914
|
-
|
|
915
|
-
## Event Log Query by ID (GET /api/v4.1/event/{eventId})
|
|
916
|
-
|
|
917
|
-
Use `client.getEventById(eventId)` to retrieve a single event by its unique identifier.
|
|
918
|
-
|
|
919
|
-
### Input
|
|
920
|
-
|
|
921
|
-
```typescript
|
|
922
|
-
const event = await client.getEventById('05838ba2-7025-11eb-b493-0f90922e985a');
|
|
923
|
-
```
|
|
924
|
-
|
|
925
|
-
### Output: FluentEventLogItem
|
|
926
|
-
|
|
927
|
-
```typescript
|
|
928
|
-
interface FluentEventLogItem {
|
|
929
|
-
id: string;
|
|
930
|
-
name: string; // Event name (e.g., "BATCH_COMPLETE") — can be null
|
|
931
|
-
type?: string; // ORCHESTRATION_AUDIT, ORCHESTRATION, API, etc.
|
|
932
|
-
accountId?: string;
|
|
933
|
-
retailerId?: string; // String in API response
|
|
934
|
-
category?: string;
|
|
935
|
-
context?: FluentEventLogContext;
|
|
936
|
-
eventStatus?: string; // PENDING, SUCCESS, FAILED, COMPLETE, etc.
|
|
937
|
-
attributes?: FluentEventLogAttribute[] | null; // Can be null
|
|
938
|
-
source?: string | null;
|
|
939
|
-
generatedBy?: string;
|
|
940
|
-
generatedOn?: string; // ISO timestamp
|
|
941
|
-
}
|
|
942
|
-
```
|
|
943
|
-
|
|
944
|
-
### Live Example: Get Event by ID
|
|
945
|
-
|
|
946
|
-
**SDK Code:**
|
|
947
|
-
```typescript
|
|
948
|
-
const event = await client.getEventById('e2cc5040-360b-43e9-b3c0-07bbc1934f82');
|
|
949
|
-
console.log(`Event: ${event.name} - Status: ${event.eventStatus}`);
|
|
950
|
-
|
|
951
|
-
// Trace parent events
|
|
952
|
-
if (event.context?.sourceEvents?.length) {
|
|
953
|
-
for (const parentId of event.context.sourceEvents) {
|
|
954
|
-
const parent = await client.getEventById(parentId);
|
|
955
|
-
console.log(`Parent: ${parent.name} (${parent.eventStatus})`);
|
|
956
|
-
}
|
|
957
|
-
}
|
|
958
|
-
|
|
959
|
-
// Extract timing from attributes
|
|
960
|
-
if (Array.isArray(event.attributes)) {
|
|
961
|
-
const startTimer = event.attributes.find(a => a.name === 'startTimer')?.value;
|
|
962
|
-
const stopTimer = event.attributes.find(a => a.name === 'stopTimer')?.value;
|
|
963
|
-
if (startTimer && stopTimer) {
|
|
964
|
-
console.log(`Duration: ${Number(stopTimer) - Number(startTimer)}ms`);
|
|
965
|
-
}
|
|
966
|
-
}
|
|
967
|
-
```
|
|
968
|
-
|
|
969
|
-
### Error Handling
|
|
970
|
-
|
|
971
|
-
```typescript
|
|
972
|
-
try {
|
|
973
|
-
const event = await client.getEventById('nonexistent-id');
|
|
974
|
-
} catch (error) {
|
|
975
|
-
if (error instanceof FluentAPIError && error.statusCode === 404) {
|
|
976
|
-
console.log('Event not found');
|
|
977
|
-
}
|
|
978
|
-
}
|
|
979
|
-
```
|
|
980
|
-
|
|
981
|
-
---
|
|
982
|
-
|
|
983
|
-
## Event Type / Status / Category Reference
|
|
984
|
-
|
|
985
|
-
### Event Types (`eventType` parameter)
|
|
986
|
-
|
|
987
|
-
| Value | Description |
|
|
988
|
-
|-------|-------------|
|
|
989
|
-
| `ORCHESTRATION` | Trigger part or whole of a workflow |
|
|
990
|
-
| `ORCHESTRATION_AUDIT` | Audit of what happened during workflow execution |
|
|
991
|
-
| `API` | API interactions and system events |
|
|
992
|
-
| `INTEGRATION` | Integration-related events |
|
|
993
|
-
| `SECURITY` | Security events |
|
|
994
|
-
| `GENERAL` | General system events and notifications |
|
|
995
|
-
|
|
996
|
-
### Event Statuses (`eventStatus` parameter)
|
|
997
|
-
|
|
998
|
-
| Value | Description |
|
|
999
|
-
|-------|-------------|
|
|
1000
|
-
| `PENDING` | Event is pending processing |
|
|
1001
|
-
| `SCHEDULED` | Event is scheduled for processing |
|
|
1002
|
-
| `NO_MATCH` | No matching ruleset found for this event |
|
|
1003
|
-
| `SUCCESS` | Event processed successfully |
|
|
1004
|
-
| `FAILED` | Event processing failed |
|
|
1005
|
-
| `COMPLETE` | Event completed |
|
|
1006
|
-
|
|
1007
|
-
### Event Categories (`category` parameter)
|
|
1008
|
-
|
|
1009
|
-
| Value | Description |
|
|
1010
|
-
|-------|-------------|
|
|
1011
|
-
| `snapshot` | State snapshots |
|
|
1012
|
-
| `ruleSet` | Ruleset execution events |
|
|
1013
|
-
| `rule` | Individual rule execution events |
|
|
1014
|
-
| `ACTION` | User/system actions |
|
|
1015
|
-
| `CUSTOM` | Custom log actions |
|
|
1016
|
-
| `exception` | Error/exception events |
|
|
1017
|
-
| `ORDER_WORKFLOW` | Order-specific workflow events |
|
|
1018
|
-
| `BATCH` | Batch processing events |
|
|
1019
|
-
|
|
1020
|
-
### Root Entity Types (`context.rootEntityType` parameter)
|
|
1021
|
-
|
|
1022
|
-
| Value | Description |
|
|
1023
|
-
|-------|-------------|
|
|
1024
|
-
| `ORDER` | Customer orders |
|
|
1025
|
-
| `LOCATION` | Physical locations and warehouses |
|
|
1026
|
-
| `FULFILMENT_OPTIONS` | Fulfillment configuration |
|
|
1027
|
-
| `PRODUCT_CATALOGUE` | Product definitions and catalogs |
|
|
1028
|
-
| `INVENTORY_CATALOGUE` | Inventory management |
|
|
1029
|
-
| `VIRTUAL_CATALOGUE` | Virtual inventory positions |
|
|
1030
|
-
| `CONTROL_GROUP` | Control and governance |
|
|
1031
|
-
| `RETURN_ORDER` | Return processing |
|
|
1032
|
-
| `BILLING_ACCOUNT` | Billing and payments |
|
|
1033
|
-
| `JOB` | Background jobs and batch processes |
|
|
1034
|
-
|
|
1035
|
-
### Entity Types (`context.entityType` parameter)
|
|
1036
|
-
|
|
1037
|
-
| Value | Description |
|
|
1038
|
-
|-------|-------------|
|
|
1039
|
-
| `ORDER` | Customer orders |
|
|
1040
|
-
| `FULFILMENT` | Fulfillment operations |
|
|
1041
|
-
| `ARTICLE` | Articles within fulfillments |
|
|
1042
|
-
| `CONSIGNMENT` | Shipping consignments |
|
|
1043
|
-
| `WAVE` | Wave picking operations |
|
|
1044
|
-
| `BATCH` | Batch processing |
|
|
1045
|
-
| `LOCATION` | Location operations |
|
|
1046
|
-
| `PRODUCT` | Product records |
|
|
1047
|
-
| `CATEGORY` | Product categories |
|
|
1048
|
-
| `INVENTORY_POSITION` | Inventory positions |
|
|
1049
|
-
| `INVENTORY_QUANTITY` | Inventory quantities |
|
|
1050
|
-
| `VIRTUAL_POSITION` | Virtual inventory positions |
|
|
1051
|
-
| `CONTROL` | Individual controls |
|
|
1052
|
-
| `RETURN_FULFILMENT` | Return processing |
|
|
1053
|
-
| `CREDIT_MEMO` | Financial adjustments |
|
|
1054
|
-
|
|
1055
|
-
---
|
|
1056
|
-
|
|
1057
|
-
## Common Use Cases
|
|
1058
|
-
|
|
1059
|
-
### 1. Track Batch Ingestion Results
|
|
1060
|
-
|
|
1061
|
-
```typescript
|
|
1062
|
-
// Find all events for a specific job
|
|
1063
|
-
const events = await client.getEvents({
|
|
1064
|
-
'context.rootEntityType': 'JOB',
|
|
1065
|
-
'context.rootEntityId': '13',
|
|
1066
|
-
eventType: 'ORCHESTRATION_AUDIT',
|
|
1067
|
-
count: 1000,
|
|
1068
|
-
});
|
|
1069
|
-
|
|
1070
|
-
console.log(`Found ${events.results.length} events`);
|
|
1071
|
-
for (const event of events.results) {
|
|
1072
|
-
console.log(` ${event.name} (${event.context?.entityType}) - ${event.eventStatus}`);
|
|
1073
|
-
}
|
|
1074
|
-
```
|
|
1075
|
-
|
|
1076
|
-
### 2. Find Failed Workflow Events
|
|
1077
|
-
|
|
1078
|
-
```typescript
|
|
1079
|
-
const failed = await client.getEvents({
|
|
1080
|
-
eventStatus: 'FAILED',
|
|
1081
|
-
eventType: 'ORCHESTRATION_AUDIT',
|
|
1082
|
-
from: new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString(),
|
|
1083
|
-
to: new Date().toISOString(),
|
|
1084
|
-
count: 1000,
|
|
1085
|
-
});
|
|
1086
|
-
|
|
1087
|
-
for (const event of failed.results) {
|
|
1088
|
-
console.log(`FAILED: ${event.name} on ${event.context?.entityType}:${event.context?.entityRef}`);
|
|
1089
|
-
}
|
|
1090
|
-
```
|
|
1091
|
-
|
|
1092
|
-
### 3. Paginate Through Large Result Sets
|
|
1093
|
-
|
|
1094
|
-
```typescript
|
|
1095
|
-
let start = 0;
|
|
1096
|
-
const pageSize = 1000;
|
|
1097
|
-
let allEvents: FluentEventLogItem[] = [];
|
|
1098
|
-
|
|
1099
|
-
let hasMore = true;
|
|
1100
|
-
while (hasMore) {
|
|
1101
|
-
const page = await client.getEvents({
|
|
1102
|
-
'context.rootEntityType': 'ORDER',
|
|
1103
|
-
eventType: 'ORCHESTRATION_AUDIT',
|
|
1104
|
-
start,
|
|
1105
|
-
count: pageSize,
|
|
1106
|
-
});
|
|
1107
|
-
|
|
1108
|
-
allEvents.push(...page.results);
|
|
1109
|
-
hasMore = page.hasMore;
|
|
1110
|
-
start += page.count;
|
|
1111
|
-
}
|
|
1112
|
-
|
|
1113
|
-
console.log(`Total events: ${allEvents.length}`);
|
|
1114
|
-
```
|
|
1115
|
-
|
|
1116
|
-
### 4. Extract Performance Timing
|
|
1117
|
-
|
|
1118
|
-
```typescript
|
|
1119
|
-
const events = await client.getEvents({
|
|
1120
|
-
category: 'ruleSet',
|
|
1121
|
-
eventType: 'ORCHESTRATION_AUDIT',
|
|
1122
|
-
from: '2026-02-01T00:00:00.000Z',
|
|
1123
|
-
to: '2026-02-15T00:00:00.000Z',
|
|
1124
|
-
count: 5000,
|
|
1125
|
-
});
|
|
1126
|
-
|
|
1127
|
-
for (const event of events.results) {
|
|
1128
|
-
if (Array.isArray(event.attributes)) {
|
|
1129
|
-
const startTimer = event.attributes.find(a => a.name === 'startTimer')?.value;
|
|
1130
|
-
const stopTimer = event.attributes.find(a => a.name === 'stopTimer')?.value;
|
|
1131
|
-
if (startTimer && stopTimer) {
|
|
1132
|
-
const duration = Number(stopTimer) - Number(startTimer);
|
|
1133
|
-
console.log(`${event.name}: ${duration}ms (${event.eventStatus})`);
|
|
1134
|
-
}
|
|
1135
|
-
}
|
|
1136
|
-
}
|
|
1137
|
-
```
|
|
1138
|
-
|
|
1139
|
-
### 5. API Time Range Limits
|
|
1140
|
-
|
|
1141
|
-
The Event API enforces time range constraints:
|
|
1142
|
-
- **`from`**: Must be within **4 months back** from current date
|
|
1143
|
-
- **`to`**: Must be within **1 month forward** from current date
|
|
1144
|
-
- **Default**: If `from` is not specified, searches the **past 30 days**
|
|
1145
|
-
- **Max `count`**: 5000 events per request (recommended to avoid timeouts)
|
|
1146
|
-
- **Date format**: `YYYY-MM-DDTHH:mm:ss.SSSZ` (UTC ISO string)
|
|
1147
|
-
|
|
1148
|
-
```typescript
|
|
1149
|
-
// This will fail - too far in the past
|
|
1150
|
-
try {
|
|
1151
|
-
const tooOld = await client.getEvents({
|
|
1152
|
-
from: '2020-01-01T00:00:00.000Z', // More than 4 months ago
|
|
1153
|
-
});
|
|
1154
|
-
} catch (error) {
|
|
1155
|
-
// API Error: "'from' and 'to' must be within 4 months back and 1 months forward"
|
|
1156
|
-
}
|
|
1157
|
-
```
|
|
1158
|
-
|
|
1159
|
-
---
|
|
1160
|
-
|
|
1161
|
-
## Related Documentation
|
|
1162
|
-
|
|
1163
|
-
- **Event API Guide**: [fc-connect-sdk/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/event-api-guide.md](../docs/01-TEMPLATES/versori/workflows/ingestion/event-api/event-api-guide.md)
|
|
1164
|
-
- **Batch API Guide**: [fc-connect-sdk/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/batch-api-guide.md](../docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/batch-api-guide.md)
|
|
1165
|
-
- **Connection Validation**: [fc-connect-sdk/docs/01-TEMPLATES/versori/patterns/versori-patterns-connection-validation-pattern.md](../docs/01-TEMPLATES/versori/patterns/versori-patterns-connection-validation-pattern.md)
|
|
1166
|
-
|
|
1167
|
-
---
|
|
1168
|
-
|
|
1169
|
-
**Generated from live test environments**: profile-alpha.test.api.fluentretail.com, profile-beta.sandbox.api.fluentretail.com
|
|
1170
|
-
**SDK Version**: 0.1.51
|
|
1171
|
-
**Last Updated**: 2026-02-15
|
|
1
|
+
# Event API - Input/Output Reference Guide
|
|
2
|
+
|
|
3
|
+
> **Complete reference** for Event API request/response structures with live examples from sagirish test environment
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
1. [Success Response Structure](#success-response-structure)
|
|
8
|
+
2. [Error Response Structure](#error-response-structure)
|
|
9
|
+
3. [Live Examples](#live-examples)
|
|
10
|
+
4. [HTTP Status Codes](#http-status-codes)
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Success Response Structure
|
|
15
|
+
|
|
16
|
+
### Input: FluentEvent
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
interface FluentEvent {
|
|
20
|
+
retailerId: string; // REQUIRED: Retailer ID (e.g., "2")
|
|
21
|
+
name: string; // REQUIRED: Event name (e.g., "OrderCancel1")
|
|
22
|
+
entityRef: string; // REQUIRED: Entity reference (e.g., "G_TEST_FC_POSTMAN_34")
|
|
23
|
+
entityType: string; // REQUIRED: Entity type (ORDER, PRODUCT, LOCATION, etc.)
|
|
24
|
+
attributes?: Record<string, any>; // OPTIONAL: Custom event attributes
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Output: EventResponse (SUCCESS)
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
interface EventResponse {
|
|
32
|
+
id?: string; // Event ID (if returned by API)
|
|
33
|
+
success: boolean; // Always true for successful responses
|
|
34
|
+
status?: number; // Event status from Fluent API (CREATED, COMPLETED, etc.)
|
|
35
|
+
statusCode?: number; // HTTP status code (200, 201, 202) - Consistent with error.statusCode
|
|
36
|
+
message?: string; // Optional message from API
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Live Example: Async Mode Success
|
|
41
|
+
|
|
42
|
+
**Input:**
|
|
43
|
+
```json
|
|
44
|
+
{
|
|
45
|
+
"retailerId": "2",
|
|
46
|
+
"name": "OrderCancel1",
|
|
47
|
+
"entityRef": "G_TEST_FC_POSTMAN_34",
|
|
48
|
+
"entityType": "ORDER"
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**Output:**
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"success": true,
|
|
56
|
+
"statusCode": 200
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Log Output:**
|
|
61
|
+
```
|
|
62
|
+
[FluentClient:event] Sending event "OrderCancel1" (ORDER:G_TEST_FC_POSTMAN_34, mode: async)
|
|
63
|
+
[FluentClient:event] Event "OrderCancel1" sent successfully (id: undefined, statusCode: 200)
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
### Live Example: Product Event Success
|
|
69
|
+
|
|
70
|
+
**Input:**
|
|
71
|
+
```json
|
|
72
|
+
{
|
|
73
|
+
"retailerId": "2",
|
|
74
|
+
"name": "PRODUCT.UPDATE",
|
|
75
|
+
"entityRef": "SKU-1763567425",
|
|
76
|
+
"entityType": "PRODUCT",
|
|
77
|
+
"attributes": {
|
|
78
|
+
"test": true,
|
|
79
|
+
"timestamp": "2025-01-19T05:30:25.500Z"
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Output:**
|
|
85
|
+
```json
|
|
86
|
+
{
|
|
87
|
+
"success": true,
|
|
88
|
+
"statusCode": 200
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Error Response Structure
|
|
95
|
+
|
|
96
|
+
### Output: FluentAPIError (THROWN)
|
|
97
|
+
|
|
98
|
+
When events fail, the SDK throws structured error objects:
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
class FluentAPIError extends Error {
|
|
102
|
+
name: 'FluentAPIError';
|
|
103
|
+
message: string; // Error description (e.g., "Request failed: 400")
|
|
104
|
+
status: number; // HTTP status code (400, 404, 500, etc.)
|
|
105
|
+
details?: any; // Additional error context
|
|
106
|
+
errors?: Array<any>; // Validation errors (if applicable)
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Live Example: No Workflow Match (Sync Mode)
|
|
111
|
+
|
|
112
|
+
**Input:**
|
|
113
|
+
```json
|
|
114
|
+
{
|
|
115
|
+
"retailerId": "2",
|
|
116
|
+
"name": "OrderCancel1",
|
|
117
|
+
"entityRef": "SYNC-1763567424997",
|
|
118
|
+
"entityType": "ORDER"
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**Error Thrown:**
|
|
123
|
+
```typescript
|
|
124
|
+
FluentAPIError {
|
|
125
|
+
name: "FluentAPIError",
|
|
126
|
+
message: "Request failed: 404",
|
|
127
|
+
status: 404,
|
|
128
|
+
details: "No workflow rule matched this event"
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
**Error Detection Timing:**
|
|
133
|
+
- **Async Mode**: Returns `200` immediately, workflow failures NOT detected
|
|
134
|
+
- **Sync Mode**: Waits for workflow, throws error if workflow fails
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
### Live Example: Invalid Event Name
|
|
139
|
+
|
|
140
|
+
**Input:**
|
|
141
|
+
```json
|
|
142
|
+
{
|
|
143
|
+
"retailerId": "2",
|
|
144
|
+
"name": "OrderCancel", // ← Event name has no matching workflow
|
|
145
|
+
"entityRef": "TEST-1763567425-1",
|
|
146
|
+
"entityType": "ORDER"
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**Error Thrown:**
|
|
151
|
+
```typescript
|
|
152
|
+
FluentAPIError {
|
|
153
|
+
name: "FluentAPIError",
|
|
154
|
+
message: "Request failed: 400",
|
|
155
|
+
status: 400,
|
|
156
|
+
details: "Bad Request - Invalid event configuration"
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
### Live Example: Missing retailerId (SDK Validation)
|
|
163
|
+
|
|
164
|
+
**Input:**
|
|
165
|
+
```json
|
|
166
|
+
{
|
|
167
|
+
"name": "TEST.NO_RETAILER",
|
|
168
|
+
"entityType": "PRODUCT",
|
|
169
|
+
"entityRef": "NO-RETAILER-TEST"
|
|
170
|
+
// ❌ Missing retailerId
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
**Error Thrown:**
|
|
175
|
+
```typescript
|
|
176
|
+
FluentValidationError {
|
|
177
|
+
name: "FluentValidationError",
|
|
178
|
+
message: "retailerId is required for Event API. Provide it in the event payload or client config.",
|
|
179
|
+
code: "VALIDATION_ERROR",
|
|
180
|
+
statusCode: 400
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**Key Difference:**
|
|
185
|
+
- ✅ **SDK catches this BEFORE API call** (no network request made)
|
|
186
|
+
- ✅ **Fail-fast validation** (saves time and reduces API load)
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## HTTP Status Codes
|
|
191
|
+
|
|
192
|
+
### Success Codes (2xx)
|
|
193
|
+
|
|
194
|
+
| Code | Meaning | When | Example Response |
|
|
195
|
+
|------|---------|------|------------------|
|
|
196
|
+
| **200** | OK | Event accepted (async mode) | `{ success: true, statusCode: 200 }` |
|
|
197
|
+
| **201** | Created | Event created (sync mode, workflow completed) | `{ success: true, id: "evt-123", status: "CREATED", statusCode: 201 }` |
|
|
198
|
+
| **202** | Accepted | Event queued for processing | `{ success: true, statusCode: 202 }` |
|
|
199
|
+
|
|
200
|
+
### Client Error Codes (4xx)
|
|
201
|
+
|
|
202
|
+
| Code | Meaning | When | SDK Retry | Example |
|
|
203
|
+
|------|---------|------|-----------|---------|
|
|
204
|
+
| **400** | Bad Request | Invalid event payload, no workflow match | ❌ No | Invalid event name |
|
|
205
|
+
| **401** | Unauthorized | Auth token invalid/expired | ✅ Yes (3x) | OAuth2 token refresh |
|
|
206
|
+
| **403** | Forbidden | Permission denied | ❌ No | Insufficient permissions |
|
|
207
|
+
| **404** | Not Found | Sync mode: No workflow matched | ❌ No | No Rubix workflow rule |
|
|
208
|
+
| **422** | Unprocessable | Event validation failed | ❌ No | Invalid entity reference |
|
|
209
|
+
|
|
210
|
+
### Server Error Codes (5xx)
|
|
211
|
+
|
|
212
|
+
| Code | Meaning | When | SDK Retry | Example |
|
|
213
|
+
|------|---------|------|-----------|---------|
|
|
214
|
+
| **500** | Internal Server Error | Fluent API error | ✅ Yes (3x) | Workflow execution failure |
|
|
215
|
+
| **502** | Bad Gateway | Gateway timeout | ✅ Yes (3x) | Network issue |
|
|
216
|
+
| **503** | Service Unavailable | API temporarily down | ✅ Yes (3x) | Maintenance window |
|
|
217
|
+
| **504** | Gateway Timeout | Request timeout | ✅ Yes (3x) | Long-running workflow |
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## Live Examples from Test Environment
|
|
222
|
+
|
|
223
|
+
### Test Environment Details
|
|
224
|
+
|
|
225
|
+
```yaml
|
|
226
|
+
Base URL: https://sagirish.test.api.fluentretail.com
|
|
227
|
+
Retailer ID: 2
|
|
228
|
+
Account ID: SAGIRISH
|
|
229
|
+
Client ID: SAGIRISH
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### Example 1: Successful Async Event
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
# Input
|
|
236
|
+
POST /api/v4.1/event/async
|
|
237
|
+
{
|
|
238
|
+
"retailerId": "2",
|
|
239
|
+
"name": "OrderCancel1",
|
|
240
|
+
"entityRef": "G_TEST_FC_POSTMAN_34",
|
|
241
|
+
"entityType": "ORDER"
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
# Output (HTTP 200)
|
|
245
|
+
{
|
|
246
|
+
"success": true,
|
|
247
|
+
"statusCode": 200
|
|
248
|
+
}
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
**SDK Code:**
|
|
252
|
+
```typescript
|
|
253
|
+
const client = new FluentClient({
|
|
254
|
+
baseUrl: 'https://sagirish.test.api.fluentretail.com',
|
|
255
|
+
clientId: 'SAGIRISH',
|
|
256
|
+
clientSecret: '534901d2-626d-4997-aabd-7600838d83c2',
|
|
257
|
+
username: 'module_test_admin',
|
|
258
|
+
password: '89YZBN',
|
|
259
|
+
retailerId: '2'
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
const result = await client.sendEvent({
|
|
263
|
+
name: 'OrderCancel1',
|
|
264
|
+
entityRef: 'G_TEST_FC_POSTMAN_34',
|
|
265
|
+
entityType: 'ORDER',
|
|
266
|
+
retailerId: '2'
|
|
267
|
+
}, 'async');
|
|
268
|
+
|
|
269
|
+
// result = { success: true, statusCode: 200 }
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
### Example 2: Sync Mode - Workflow Failure
|
|
275
|
+
|
|
276
|
+
```bash
|
|
277
|
+
# Input
|
|
278
|
+
POST /api/v4.1/event/sync
|
|
279
|
+
{
|
|
280
|
+
"retailerId": "2",
|
|
281
|
+
"name": "OrderCancel1",
|
|
282
|
+
"entityRef": "SYNC-1763567424997",
|
|
283
|
+
"entityType": "ORDER"
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
# Output (HTTP 404) - THROWS FluentAPIError
|
|
287
|
+
FluentAPIError: Request failed: 404
|
|
288
|
+
status: 404
|
|
289
|
+
message: "No workflow rule matched this event"
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
**SDK Code:**
|
|
293
|
+
```typescript
|
|
294
|
+
try {
|
|
295
|
+
const result = await client.sendEvent({
|
|
296
|
+
name: 'OrderCancel1',
|
|
297
|
+
entityRef: 'SYNC-1763567424997',
|
|
298
|
+
entityType: 'ORDER',
|
|
299
|
+
retailerId: '2'
|
|
300
|
+
}, 'sync'); // ← Sync mode waits for workflow
|
|
301
|
+
} catch (error) {
|
|
302
|
+
if (error instanceof FluentAPIError) {
|
|
303
|
+
console.error(`❌ HTTP ${error.status}: ${error.message}`);
|
|
304
|
+
// Output: ❌ HTTP 404: Request failed: 404
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
311
|
+
### Example 3: Product Event with Attributes
|
|
312
|
+
|
|
313
|
+
```bash
|
|
314
|
+
# Input
|
|
315
|
+
POST /api/v4.1/event/async
|
|
316
|
+
{
|
|
317
|
+
"retailerId": "2",
|
|
318
|
+
"name": "PRODUCT.UPDATE",
|
|
319
|
+
"entityRef": "SKU-1763567425",
|
|
320
|
+
"entityType": "PRODUCT",
|
|
321
|
+
"attributes": {
|
|
322
|
+
"test": true,
|
|
323
|
+
"timestamp": "2025-01-19T05:30:25.500Z"
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
# Output (HTTP 200)
|
|
328
|
+
{
|
|
329
|
+
"success": true,
|
|
330
|
+
"statusCode": 200
|
|
331
|
+
}
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
**SDK Code:**
|
|
335
|
+
```typescript
|
|
336
|
+
const result = await client.sendEvent({
|
|
337
|
+
name: 'PRODUCT.UPDATE',
|
|
338
|
+
entityRef: 'SKU-1763567425',
|
|
339
|
+
entityType: 'PRODUCT',
|
|
340
|
+
retailerId: '2',
|
|
341
|
+
attributes: {
|
|
342
|
+
test: true,
|
|
343
|
+
timestamp: new Date().toISOString()
|
|
344
|
+
}
|
|
345
|
+
}, 'async');
|
|
346
|
+
|
|
347
|
+
// result = { success: true, statusCode: 200 }
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
---
|
|
351
|
+
|
|
352
|
+
### Example 4: Invalid Event Name (400 Error)
|
|
353
|
+
|
|
354
|
+
```bash
|
|
355
|
+
# Input
|
|
356
|
+
POST /api/v4.1/event/async
|
|
357
|
+
{
|
|
358
|
+
"retailerId": "2",
|
|
359
|
+
"name": "OrderCancel", # ← No workflow configured for this event
|
|
360
|
+
"entityRef": "TEST-1763567425-1",
|
|
361
|
+
"entityType": "ORDER"
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
# Output (HTTP 400) - THROWS FluentAPIError
|
|
365
|
+
FluentAPIError: Request failed: 400
|
|
366
|
+
status: 400
|
|
367
|
+
message: "Bad Request"
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
**SDK Code:**
|
|
371
|
+
```typescript
|
|
372
|
+
try {
|
|
373
|
+
const result = await client.sendEvent({
|
|
374
|
+
name: 'OrderCancel', // ← Invalid/unconfigured event name
|
|
375
|
+
entityRef: 'TEST-1763567425-1',
|
|
376
|
+
entityType: 'ORDER',
|
|
377
|
+
retailerId: '2'
|
|
378
|
+
}, 'async');
|
|
379
|
+
} catch (error) {
|
|
380
|
+
if (error instanceof FluentAPIError) {
|
|
381
|
+
console.error(`❌ HTTP ${error.status}: ${error.message}`);
|
|
382
|
+
// Output: ❌ HTTP 400: Request failed: 400
|
|
383
|
+
// SDK does NOT retry 4xx errors (client error, not transient)
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
---
|
|
389
|
+
|
|
390
|
+
### Example 5: Missing retailerId (SDK Validation)
|
|
391
|
+
|
|
392
|
+
```bash
|
|
393
|
+
# No API call made! SDK validates BEFORE calling API
|
|
394
|
+
|
|
395
|
+
# Input
|
|
396
|
+
{
|
|
397
|
+
"name": "TEST.NO_RETAILER",
|
|
398
|
+
"entityType": "PRODUCT",
|
|
399
|
+
"entityRef": "NO-RETAILER-TEST"
|
|
400
|
+
# ❌ Missing retailerId
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
# Output - THROWS FluentValidationError (BEFORE API call)
|
|
404
|
+
FluentValidationError: retailerId is required for Event API
|
|
405
|
+
code: "VALIDATION_ERROR"
|
|
406
|
+
statusCode: 400
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
**SDK Code:**
|
|
410
|
+
```typescript
|
|
411
|
+
// Client WITHOUT retailerId configured
|
|
412
|
+
const client = new FluentClient({
|
|
413
|
+
baseUrl: 'https://sagirish.test.api.fluentretail.com',
|
|
414
|
+
clientId: 'SAGIRISH',
|
|
415
|
+
clientSecret: '...',
|
|
416
|
+
username: 'module_test_admin',
|
|
417
|
+
password: '...'
|
|
418
|
+
// retailerId: undefined ← Not set
|
|
419
|
+
});
|
|
420
|
+
|
|
421
|
+
try {
|
|
422
|
+
const result = await client.sendEvent({
|
|
423
|
+
name: 'TEST.NO_RETAILER',
|
|
424
|
+
entityType: 'PRODUCT',
|
|
425
|
+
entityRef: 'NO-RETAILER-TEST'
|
|
426
|
+
// retailerId: undefined ← Not provided in event
|
|
427
|
+
}, 'async');
|
|
428
|
+
} catch (error) {
|
|
429
|
+
// ✅ SDK catches this BEFORE making API call
|
|
430
|
+
console.error(error.message);
|
|
431
|
+
// Output: retailerId is required for Event API. Provide it in the event payload or client config.
|
|
432
|
+
}
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
---
|
|
436
|
+
|
|
437
|
+
## Async vs Sync Mode Comparison
|
|
438
|
+
|
|
439
|
+
### Async Mode (Default, Recommended)
|
|
440
|
+
|
|
441
|
+
**Characteristics:**
|
|
442
|
+
- ✅ **Fast response** (event queued, returns immediately)
|
|
443
|
+
- ✅ **Non-blocking** (doesn't wait for Rubix workflow)
|
|
444
|
+
- ✅ **Fire-and-forget** (workflow processes asynchronously)
|
|
445
|
+
- ❌ **No workflow error detection** (returns 200 even if workflow fails later)
|
|
446
|
+
|
|
447
|
+
**Response Structure:**
|
|
448
|
+
```json
|
|
449
|
+
{
|
|
450
|
+
"success": true,
|
|
451
|
+
"statusCode": 200
|
|
452
|
+
}
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
**Use Case:**
|
|
456
|
+
- High-throughput ingestion (1000s of events)
|
|
457
|
+
- Batch processing workflows
|
|
458
|
+
- Event queueing for later processing
|
|
459
|
+
|
|
460
|
+
---
|
|
461
|
+
|
|
462
|
+
### Sync Mode (Wait for Workflow)
|
|
463
|
+
|
|
464
|
+
**Characteristics:**
|
|
465
|
+
- ✅ **Waits for Rubix workflow** (blocks until workflow completes)
|
|
466
|
+
- ✅ **Immediate error detection** (throws if workflow fails)
|
|
467
|
+
- ✅ **Returns workflow result** (status, message)
|
|
468
|
+
- ❌ **Slower response** (waits for workflow execution)
|
|
469
|
+
|
|
470
|
+
**Response Structure (Success):**
|
|
471
|
+
```json
|
|
472
|
+
{
|
|
473
|
+
"success": true,
|
|
474
|
+
"status": "COMPLETED",
|
|
475
|
+
"statusCode": 201,
|
|
476
|
+
"message": "Workflow completed successfully"
|
|
477
|
+
}
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
**Response Structure (Workflow Failure):**
|
|
481
|
+
```typescript
|
|
482
|
+
// THROWS FluentAPIError
|
|
483
|
+
{
|
|
484
|
+
name: "FluentAPIError",
|
|
485
|
+
message: "Request failed: 404",
|
|
486
|
+
status: 404,
|
|
487
|
+
details: "No workflow rule matched"
|
|
488
|
+
}
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
**Use Case:**
|
|
492
|
+
- Critical events requiring immediate confirmation
|
|
493
|
+
- Low-volume event processing
|
|
494
|
+
- Testing/debugging workflows
|
|
495
|
+
|
|
496
|
+
---
|
|
497
|
+
|
|
498
|
+
## SDK Automatic Behaviors (v0.1.40+)
|
|
499
|
+
|
|
500
|
+
### 1. retailerId Validation
|
|
501
|
+
|
|
502
|
+
**Timing:** BEFORE API call
|
|
503
|
+
**Behavior:** SDK checks if `event.retailerId` or `client.retailerId` is set
|
|
504
|
+
**If Missing:** Throws `FluentValidationError` immediately
|
|
505
|
+
**Benefit:** Fail-fast, no wasted API calls
|
|
506
|
+
|
|
507
|
+
```typescript
|
|
508
|
+
// ✅ GOOD: retailerId provided
|
|
509
|
+
await client.sendEvent({ retailerId: '2', ... });
|
|
510
|
+
|
|
511
|
+
// ✅ GOOD: retailerId configured in client
|
|
512
|
+
const client = new FluentClient({ retailerId: '2', ... });
|
|
513
|
+
await client.sendEvent({ ... }); // Uses client.retailerId
|
|
514
|
+
|
|
515
|
+
// ❌ BAD: No retailerId anywhere
|
|
516
|
+
await client.sendEvent({ ... }); // Throws BEFORE API call
|
|
517
|
+
```
|
|
518
|
+
|
|
519
|
+
---
|
|
520
|
+
|
|
521
|
+
### 2. 401 Authentication Retry
|
|
522
|
+
|
|
523
|
+
**Timing:** On 401 response
|
|
524
|
+
**Behavior:** SDK retries with exponential backoff (3 attempts)
|
|
525
|
+
**Delay:** 1s → 2s → 4s
|
|
526
|
+
**Use Case:** OAuth2 token refresh, platform token rotation
|
|
527
|
+
|
|
528
|
+
```typescript
|
|
529
|
+
// Scenario: OAuth2 token expired
|
|
530
|
+
await client.sendEvent(event);
|
|
531
|
+
// [WARN] Platform auth failure (401), retrying after 1000ms
|
|
532
|
+
// [INFO] Event sent successfully after retry
|
|
533
|
+
```
|
|
534
|
+
|
|
535
|
+
---
|
|
536
|
+
|
|
537
|
+
### 3. 5xx Server Error Retry
|
|
538
|
+
|
|
539
|
+
**Timing:** On 500, 502, 503, 504 responses
|
|
540
|
+
**Behavior:** SDK retries with exponential backoff (3 attempts)
|
|
541
|
+
**Delay:** 1s → 2s → 4s (capped at 10s)
|
|
542
|
+
**Use Case:** Transient API failures, network hiccups
|
|
543
|
+
|
|
544
|
+
```typescript
|
|
545
|
+
// Scenario: Fluent API temporarily down (503)
|
|
546
|
+
await client.sendEvent(event);
|
|
547
|
+
// [WARN] Request failed, retrying (attempt 1/3)
|
|
548
|
+
// [WARN] Request failed, retrying (attempt 2/3)
|
|
549
|
+
// [INFO] Event sent successfully after retry
|
|
550
|
+
```
|
|
551
|
+
|
|
552
|
+
---
|
|
553
|
+
|
|
554
|
+
### 4. 4xx Client Error Behavior
|
|
555
|
+
|
|
556
|
+
**Timing:** On 400, 403, 404, 422 responses (except 401)
|
|
557
|
+
**Behavior:** SDK throws `FluentAPIError` immediately (NO retry)
|
|
558
|
+
**Reason:** Client errors require code/data fixes, not retry
|
|
559
|
+
|
|
560
|
+
```typescript
|
|
561
|
+
// Scenario: Invalid event name (400)
|
|
562
|
+
try {
|
|
563
|
+
await client.sendEvent({ name: 'InvalidEvent', ... });
|
|
564
|
+
} catch (error) {
|
|
565
|
+
// Throws immediately, NO retries
|
|
566
|
+
console.error(error.status); // 400
|
|
567
|
+
}
|
|
568
|
+
```
|
|
569
|
+
|
|
570
|
+
---
|
|
571
|
+
|
|
572
|
+
## Error Handling Best Practices
|
|
573
|
+
|
|
574
|
+
### Pattern 1: Per-Event Error Handling
|
|
575
|
+
|
|
576
|
+
```typescript
|
|
577
|
+
const results = { success: 0, failed: 0, errors: [] };
|
|
578
|
+
|
|
579
|
+
for (const record of records) {
|
|
580
|
+
try {
|
|
581
|
+
const result = await client.sendEvent({
|
|
582
|
+
name: 'PRODUCT.UPDATE',
|
|
583
|
+
entityType: 'PRODUCT',
|
|
584
|
+
entityRef: record.sku,
|
|
585
|
+
retailerId: '2',
|
|
586
|
+
attributes: record
|
|
587
|
+
});
|
|
588
|
+
|
|
589
|
+
results.success++;
|
|
590
|
+
console.log(`✅ ${record.sku} - statusCode: ${result.statusCode}`);
|
|
591
|
+
} catch (error) {
|
|
592
|
+
results.failed++;
|
|
593
|
+
|
|
594
|
+
if (error instanceof FluentAPIError) {
|
|
595
|
+
// SDK already retried 401/5xx - this is non-retryable
|
|
596
|
+
console.error(`❌ ${record.sku} - HTTP ${error.status}: ${error.message}`);
|
|
597
|
+
results.errors.push({ sku: record.sku, status: error.status, error: error.message });
|
|
598
|
+
} else if (error instanceof AuthenticationError) {
|
|
599
|
+
// Auth failed after 3 retries - credentials issue
|
|
600
|
+
console.error(`❌ Auth failure: ${error.message}`);
|
|
601
|
+
break; // Stop processing
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
console.log(`Results: ${results.success} success, ${results.failed} failed`);
|
|
607
|
+
```
|
|
608
|
+
|
|
609
|
+
---
|
|
610
|
+
|
|
611
|
+
### Pattern 2: Batch Processing with Error Aggregation
|
|
612
|
+
|
|
613
|
+
```typescript
|
|
614
|
+
interface EventResult {
|
|
615
|
+
sku: string;
|
|
616
|
+
success: boolean;
|
|
617
|
+
statusCode?: number;
|
|
618
|
+
error?: string;
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
async function processBatch(products: Product[]): Promise<EventResult[]> {
|
|
622
|
+
const results: EventResult[] = [];
|
|
623
|
+
|
|
624
|
+
for (const product of products) {
|
|
625
|
+
try {
|
|
626
|
+
const response = await client.sendEvent({
|
|
627
|
+
name: 'PRODUCT.UPSERT',
|
|
628
|
+
entityType: 'PRODUCT',
|
|
629
|
+
entityRef: product.sku,
|
|
630
|
+
retailerId: '2',
|
|
631
|
+
attributes: product
|
|
632
|
+
});
|
|
633
|
+
|
|
634
|
+
results.push({
|
|
635
|
+
sku: product.sku,
|
|
636
|
+
success: true,
|
|
637
|
+
statusCode: response.statusCode
|
|
638
|
+
});
|
|
639
|
+
} catch (error) {
|
|
640
|
+
if (error instanceof FluentAPIError) {
|
|
641
|
+
results.push({
|
|
642
|
+
sku: product.sku,
|
|
643
|
+
success: false,
|
|
644
|
+
error: `HTTP ${error.status}: ${error.message}`
|
|
645
|
+
});
|
|
646
|
+
} else {
|
|
647
|
+
results.push({
|
|
648
|
+
sku: product.sku,
|
|
649
|
+
success: false,
|
|
650
|
+
error: error.message
|
|
651
|
+
});
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
return results;
|
|
657
|
+
}
|
|
658
|
+
```
|
|
659
|
+
|
|
660
|
+
---
|
|
661
|
+
|
|
662
|
+
## Summary
|
|
663
|
+
|
|
664
|
+
### Key Takeaways
|
|
665
|
+
|
|
666
|
+
1. **statusCode field** (HTTP status code - consistent with error.statusCode)
|
|
667
|
+
- ✅ Available in all success responses
|
|
668
|
+
- ✅ Provides HTTP status code (200, 201, 202)
|
|
669
|
+
- ✅ Available in both FluentClient and FluentVersoriClient
|
|
670
|
+
|
|
671
|
+
2. **retailerId Validation**
|
|
672
|
+
- ✅ Validated BEFORE API call (fail-fast)
|
|
673
|
+
- ✅ Accepts from event payload OR client config
|
|
674
|
+
- ✅ Clear error message with configuration hints
|
|
675
|
+
|
|
676
|
+
3. **Automatic Retry**
|
|
677
|
+
- ✅ 401 errors: 3 retries (OAuth2 token refresh)
|
|
678
|
+
- ✅ 5xx errors: 3 retries (transient failures)
|
|
679
|
+
- ❌ 4xx errors: NO retry (client errors)
|
|
680
|
+
|
|
681
|
+
4. **Structured Errors**
|
|
682
|
+
- ✅ FluentAPIError with HTTP status
|
|
683
|
+
- ✅ AuthenticationError for auth failures
|
|
684
|
+
- ✅ GraphQLExecutionError for GraphQL errors
|
|
685
|
+
|
|
686
|
+
5. **Async vs Sync**
|
|
687
|
+
- ✅ Async: Fast, fire-and-forget (default)
|
|
688
|
+
- ✅ Sync: Waits for workflow, immediate error detection
|
|
689
|
+
|
|
690
|
+
---
|
|
691
|
+
|
|
692
|
+
## Related Documentation
|
|
693
|
+
|
|
694
|
+
- **Event API Guide**: [fc-connect-sdk/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/event-api-guide.md](../docs/01-TEMPLATES/versori/workflows/ingestion/event-api/event-api-guide.md)
|
|
695
|
+
- **Batch API Guide**: [fc-connect-sdk/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/batch-api-guide.md](../docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/batch-api-guide.md)
|
|
696
|
+
- **Connection Validation**: [fc-connect-sdk/docs/01-TEMPLATES/versori/patterns/versori-patterns-connection-validation-pattern.md](../docs/01-TEMPLATES/versori/patterns/versori-patterns-connection-validation-pattern.md)
|
|
697
|
+
|
|
698
|
+
---
|
|
699
|
+
|
|
700
|
+
**Generated from live test environment**: sagirish.test.api.fluentretail.com
|
|
701
|
+
**SDK Version**: 0.1.46
|
|
702
|
+
**Test Date**: 2025-01-19
|