@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,404 +1,404 @@
|
|
|
1
|
-
# retailerId Configuration Guide
|
|
2
|
-
|
|
3
|
-
**Quick Answer:** `retailerId` is **OPTIONAL** at client creation. Only provide it when using Job API, Batch API, or Event API.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## When is retailerId Required?
|
|
8
|
-
|
|
9
|
-
| API/Method | Needs retailerId? | When to Provide It |
|
|
10
|
-
|------------|-------------------|-------------------|
|
|
11
|
-
| `client.graphql()` | ❌ NO | Never required |
|
|
12
|
-
| `client.createJob()` | ✅ YES | In job payload or client config |
|
|
13
|
-
| `client.sendEvent()` | ✅ YES | In event payload or client config |
|
|
14
|
-
| `client.sendBatch()` | ❌ NO | Uses jobId (already has retailerId from job) |
|
|
15
|
-
| `client.getJobStatus()` | ❌ NO | Uses jobId |
|
|
16
|
-
| `client.getBatchStatus()` | ❌ NO | Uses jobId and batchId |
|
|
17
|
-
|
|
18
|
-
### Why These APIs Need It
|
|
19
|
-
|
|
20
|
-
- **Job API** (`createJob`): Fluent needs to know which retailer owns the job
|
|
21
|
-
- **Event API** (`sendEvent`): Events are scoped to a specific retailer
|
|
22
|
-
- **Batch API**: Batches inherit retailerId from the parent job (no separate retailerId needed)
|
|
23
|
-
|
|
24
|
-
### What About GraphQL Mutations?
|
|
25
|
-
|
|
26
|
-
**Important:** GraphQL mutations **NEVER** use `client.setRetailerId()`. They get retailerId from **mutation input variables** if the mutation schema includes it.
|
|
27
|
-
|
|
28
|
-
**Three Scenarios:**
|
|
29
|
-
|
|
30
|
-
1. **Mutations that REQUIRE retailerId** (mandatory in schema):
|
|
31
|
-
- Examples: Some mutations where `retailerId` or `retailer.id` is required
|
|
32
|
-
- **Must pass** retailerId in mutation input variables
|
|
33
|
-
|
|
34
|
-
2. **Mutations where retailerId is OPTIONAL** (optional in schema):
|
|
35
|
-
- Examples: Some mutations where `retailerId` or `retailer.id` is optional
|
|
36
|
-
- **Can pass** retailerId if needed, or omit it
|
|
37
|
-
|
|
38
|
-
3. **Mutations that DON'T HAVE retailerId** (field doesn't exist in schema):
|
|
39
|
-
- Examples: `createLocation`, `createControl`, `createPrice` (typically)
|
|
40
|
-
- **Don't pass** retailerId - field doesn't exist in the mutation input
|
|
41
|
-
|
|
42
|
-
**Correct Pattern:**
|
|
43
|
-
|
|
44
|
-
```typescript
|
|
45
|
-
// ✅ CORRECT: Pass retailerId in mutation input if schema requires/allows it
|
|
46
|
-
const { query, variables } = await mapper.map(sourceData);
|
|
47
|
-
|
|
48
|
-
// Check GraphQL schema to determine:
|
|
49
|
-
// 1. Is retailerId mandatory? → Must pass it
|
|
50
|
-
// 2. Is retailerId optional? → Can pass it if needed
|
|
51
|
-
// 3. Does retailerId field exist? → If not, don't pass it
|
|
52
|
-
|
|
53
|
-
if (mutationRequiresRetailerId && variables.input) {
|
|
54
|
-
// Mandatory: Must pass
|
|
55
|
-
variables.input.retailer = { id: parseInt(retailerId) };
|
|
56
|
-
// OR depending on schema:
|
|
57
|
-
// variables.input.retailerId = parseInt(retailerId);
|
|
58
|
-
} else if (mutationAllowsRetailerId && retailerId && variables.input) {
|
|
59
|
-
// Optional: Can pass if you have it
|
|
60
|
-
variables.input.retailer = { id: parseInt(retailerId) };
|
|
61
|
-
}
|
|
62
|
-
// If field doesn't exist in schema, don't pass it
|
|
63
|
-
|
|
64
|
-
await client.graphql({ query, variables });
|
|
65
|
-
|
|
66
|
-
// ❌ WRONG: Never use setRetailerId() for GraphQL mutations
|
|
67
|
-
// client.setRetailerId(retailerId); // ← This is ONLY for Job/Event API
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
**How to Check:**
|
|
71
|
-
- Use GraphQL introspection to see if your mutation has `retailerId` or `retailer.id` field
|
|
72
|
-
- Check if it's mandatory (`!`) or optional in the schema
|
|
73
|
-
- If field doesn't exist → don't pass it
|
|
74
|
-
- If mandatory → must pass it
|
|
75
|
-
- If optional → can pass it if needed
|
|
76
|
-
|
|
77
|
-
---
|
|
78
|
-
|
|
79
|
-
## Three Ways to Provide retailerId
|
|
80
|
-
|
|
81
|
-
### Option 1: In Client Configuration (Standalone/Node.js)
|
|
82
|
-
|
|
83
|
-
**Best for:** Node.js scripts, Deno applications
|
|
84
|
-
|
|
85
|
-
```typescript
|
|
86
|
-
import { createClient } from '@fluentcommerce/fc-connect-sdk';
|
|
87
|
-
|
|
88
|
-
const client = await createClient({
|
|
89
|
-
config: {
|
|
90
|
-
baseUrl: 'https://api.fluentcommerce.com',
|
|
91
|
-
clientId: process.env.FLUENT_CLIENT_ID,
|
|
92
|
-
clientSecret: process.env.FLUENT_CLIENT_SECRET,
|
|
93
|
-
retailerId: '1', // ← Optional: only needed for Job/Event APIs
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
// Now you can call methods without passing retailerId each time
|
|
98
|
-
await client.createJob({ name: 'inventory-sync' });
|
|
99
|
-
await client.sendEvent({ name: 'ProductUpdated', entityType: 'PRODUCT' });
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
### Option 2: Set After Client Creation
|
|
103
|
-
|
|
104
|
-
**Best for:** Versori `fn()` workflows, dynamic retailerId
|
|
105
|
-
|
|
106
|
-
```typescript
|
|
107
|
-
import { createClient } from '@fluentcommerce/fc-connect-sdk';
|
|
108
|
-
|
|
109
|
-
// Create client without retailerId
|
|
110
|
-
const client = await createClient({
|
|
111
|
-
data: {}, // ← No retailerId needed if only using GraphQL
|
|
112
|
-
log,
|
|
113
|
-
openKv,
|
|
114
|
-
activation
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
// Only set it if you need Job/Event APIs
|
|
118
|
-
if (needsJobApi) {
|
|
119
|
-
client.setRetailerId('1');
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// Now use it
|
|
123
|
-
await client.createJob({ name: 'inventory-sync' });
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
### Option 3: Pass Directly to Methods
|
|
127
|
-
|
|
128
|
-
**Best for:** Multi-tenant scenarios, different retailers per operation
|
|
129
|
-
|
|
130
|
-
```typescript
|
|
131
|
-
const client = await createClient({
|
|
132
|
-
data: {}, // No retailerId in client config
|
|
133
|
-
log,
|
|
134
|
-
openKv,
|
|
135
|
-
activation
|
|
136
|
-
});
|
|
137
|
-
|
|
138
|
-
// Pass retailerId explicitly
|
|
139
|
-
await client.createJob({
|
|
140
|
-
name: 'inventory-sync',
|
|
141
|
-
retailerId: '1' // ← Explicitly provide it
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
await client.sendEvent({
|
|
145
|
-
name: 'ProductUpdated',
|
|
146
|
-
entityType: 'PRODUCT',
|
|
147
|
-
retailerId: '2' // ← Different retailer
|
|
148
|
-
});
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
---
|
|
152
|
-
|
|
153
|
-
## Versori Platform Patterns
|
|
154
|
-
|
|
155
|
-
### Standard Versori Pattern (Recommended)
|
|
156
|
-
|
|
157
|
-
Use `schedule().then(http())` with a Fluent Commerce connection:
|
|
158
|
-
|
|
159
|
-
```typescript
|
|
160
|
-
import { schedule, http } from '@versori/run';
|
|
161
|
-
import { createClient } from '@fluentcommerce/fc-connect-sdk';
|
|
162
|
-
|
|
163
|
-
// Standard pattern from SDK templates
|
|
164
|
-
export const dailyInventorySync = schedule('daily-sync', '0 2 * * *').then(
|
|
165
|
-
http('run-sync', { connection: 'fluent_commerce' }, async (ctx) => {
|
|
166
|
-
// createClient auto-detects Versori context
|
|
167
|
-
const client = await createClient(ctx);
|
|
168
|
-
|
|
169
|
-
// Set retailerId if needed for Job/Event APIs
|
|
170
|
-
client.setRetailerId('1');
|
|
171
|
-
|
|
172
|
-
await client.createJob({ name: 'inventory-sync' });
|
|
173
|
-
})
|
|
174
|
-
);
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
### Alternative: Pass retailerId Directly
|
|
178
|
-
|
|
179
|
-
```typescript
|
|
180
|
-
export const dailyInventorySync = schedule('daily-sync', '0 2 * * *').then(
|
|
181
|
-
http('run-sync', { connection: 'fluent_commerce' }, async (ctx) => {
|
|
182
|
-
const client = await createClient(ctx);
|
|
183
|
-
|
|
184
|
-
// Pass retailerId explicitly per operation
|
|
185
|
-
await client.createJob({
|
|
186
|
-
name: 'inventory-sync',
|
|
187
|
-
retailerId: '1'
|
|
188
|
-
});
|
|
189
|
-
})
|
|
190
|
-
);
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
### For Webhooks (Without Fluent Client)
|
|
194
|
-
|
|
195
|
-
If you only need KV storage (no Fluent API calls):
|
|
196
|
-
|
|
197
|
-
```typescript
|
|
198
|
-
import { webhook, fn } from '@versori/run';
|
|
199
|
-
import { JobTracker } from '@fluentcommerce/fc-connect-sdk';
|
|
200
|
-
|
|
201
|
-
export const jobStatus = webhook('job-status').then(
|
|
202
|
-
fn('status', async (ctx) => {
|
|
203
|
-
const { data, log, openKv } = ctx;
|
|
204
|
-
|
|
205
|
-
// Use SDK utilities without FluentClient
|
|
206
|
-
const tracker = new JobTracker(openKv(':project:'), log);
|
|
207
|
-
return await tracker.getJob(data.jobId);
|
|
208
|
-
})
|
|
209
|
-
);
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
---
|
|
213
|
-
|
|
214
|
-
## Error Messages
|
|
215
|
-
|
|
216
|
-
### Missing retailerId When Required
|
|
217
|
-
|
|
218
|
-
```
|
|
219
|
-
FluentValidationError: retailerId is required for job creation
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
**Solution:** Provide retailerId using one of the three options above.
|
|
223
|
-
|
|
224
|
-
### Before v0.1.31 (Old SDK Versions)
|
|
225
|
-
|
|
226
|
-
```
|
|
227
|
-
Error: retailerId is required in Versori connection
|
|
228
|
-
```
|
|
229
|
-
|
|
230
|
-
**Solution:** Upgrade to v0.1.31+ where retailerId is optional at client creation.
|
|
231
|
-
|
|
232
|
-
---
|
|
233
|
-
|
|
234
|
-
## Migration from Old SDK Versions
|
|
235
|
-
|
|
236
|
-
**Before (v0.1.30 and earlier):**
|
|
237
|
-
```typescript
|
|
238
|
-
// ❌ Would fail if retailerId missing
|
|
239
|
-
const client = await createClient({ data: {}, log, openKv });
|
|
240
|
-
// Error: "retailerId is required in Versori connection"
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
**After (v0.1.31+):**
|
|
244
|
-
```typescript
|
|
245
|
-
// ✅ Works fine for GraphQL queries
|
|
246
|
-
const client = await createClient({ data: {}, log, openKv });
|
|
247
|
-
await client.graphql({ query: '...' });
|
|
248
|
-
|
|
249
|
-
// ❌ Only fails if you try Job/Event API without retailerId
|
|
250
|
-
await client.createJob({ name: 'test' });
|
|
251
|
-
// Error: "retailerId is required for job creation"
|
|
252
|
-
|
|
253
|
-
// ✅ Provide it when needed
|
|
254
|
-
client.setRetailerId('1');
|
|
255
|
-
await client.createJob({ name: 'test' });
|
|
256
|
-
```
|
|
257
|
-
|
|
258
|
-
---
|
|
259
|
-
|
|
260
|
-
## Best Practices
|
|
261
|
-
|
|
262
|
-
### 1. Only Provide retailerId If You Need It
|
|
263
|
-
|
|
264
|
-
```typescript
|
|
265
|
-
// ✅ Good: Only using GraphQL queries
|
|
266
|
-
const client = await createClient({
|
|
267
|
-
config: { baseUrl, clientId, clientSecret }
|
|
268
|
-
// No retailerId needed
|
|
269
|
-
});
|
|
270
|
-
|
|
271
|
-
await client.graphql({ query: '...' });
|
|
272
|
-
```
|
|
273
|
-
|
|
274
|
-
### 2. Set It Once for Multiple Operations
|
|
275
|
-
|
|
276
|
-
```typescript
|
|
277
|
-
// ✅ Good: Using Job API multiple times
|
|
278
|
-
const client = await createClient({ data: {}, log, openKv });
|
|
279
|
-
client.setRetailerId('1');
|
|
280
|
-
|
|
281
|
-
await client.createJob({ name: 'job1' });
|
|
282
|
-
await client.createJob({ name: 'job2' });
|
|
283
|
-
await client.sendEvent({ name: 'Test', entityType: 'PRODUCT' });
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
### 3. Pass Explicitly for Multi-Tenant
|
|
287
|
-
|
|
288
|
-
```typescript
|
|
289
|
-
// ✅ Good: Different retailers per operation
|
|
290
|
-
const client = await createClient({ data: {}, log, openKv });
|
|
291
|
-
|
|
292
|
-
for (const tenant of tenants) {
|
|
293
|
-
await client.createJob({
|
|
294
|
-
name: `sync-${tenant.name}`,
|
|
295
|
-
retailerId: tenant.fluentRetailerId
|
|
296
|
-
});
|
|
297
|
-
}
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
---
|
|
301
|
-
|
|
302
|
-
## How to Find Your Retailer ID
|
|
303
|
-
|
|
304
|
-
### Method 1: GraphQL Query
|
|
305
|
-
|
|
306
|
-
```graphql
|
|
307
|
-
query {
|
|
308
|
-
retailers {
|
|
309
|
-
edges {
|
|
310
|
-
node {
|
|
311
|
-
id # ← This is your retailerId
|
|
312
|
-
ref
|
|
313
|
-
name
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
```
|
|
319
|
-
|
|
320
|
-
### Method 2: Fluent Console URL
|
|
321
|
-
|
|
322
|
-
Check your Fluent Console URL:
|
|
323
|
-
```
|
|
324
|
-
https://yourinstance.fluentretail.com/console/retailer/123
|
|
325
|
-
^^^
|
|
326
|
-
retailerId
|
|
327
|
-
```
|
|
328
|
-
|
|
329
|
-
### Method 3: Ask Your Fluent Admin
|
|
330
|
-
|
|
331
|
-
They can provide the numeric retailer ID for your instance.
|
|
332
|
-
|
|
333
|
-
---
|
|
334
|
-
|
|
335
|
-
## Summary
|
|
336
|
-
|
|
337
|
-
- ✅ **retailerId is OPTIONAL** at client construction (as of v0.1.31)
|
|
338
|
-
- ✅ **Only required** for Job API, Event API (NOT GraphQL or Batch)
|
|
339
|
-
- ✅ **Three ways to provide it:** client config, `setRetailerId()`, or method parameter
|
|
340
|
-
- ✅ **Best practice:** Only provide it if you're using Job/Event APIs
|
|
341
|
-
|
|
342
|
-
**Related Docs:**
|
|
343
|
-
- [Getting Started Guide](./getting-started.md)
|
|
344
|
-
- [API Reference](../02-CORE-GUIDES/api-reference/api-reference-readme.md)
|
|
345
|
-
- [Versori Authentication](../02-CORE-GUIDES/api-reference/modules/api-reference-03-authentication.md)
|
|
346
|
-
|
|
347
|
-
---
|
|
348
|
-
|
|
349
|
-
## Batch Entity Pattern: Context Injection
|
|
350
|
-
|
|
351
|
-
### Problem: retailerId in Batch Entities
|
|
352
|
-
|
|
353
|
-
Batch API requires `retailerId` in **each entity** (not just in `createJob`):
|
|
354
|
-
|
|
355
|
-
```typescript
|
|
356
|
-
await client.sendBatch(jobId, {
|
|
357
|
-
entities: [
|
|
358
|
-
{
|
|
359
|
-
locationRef: 'LOC-001',
|
|
360
|
-
skuRef: 'SKU-123',
|
|
361
|
-
qty: 100,
|
|
362
|
-
retailerId: 123 // ← Required in EACH entity
|
|
363
|
-
}
|
|
364
|
-
]
|
|
365
|
-
});
|
|
366
|
-
```
|
|
367
|
-
|
|
368
|
-
### Solution: Use Mapping Context (Recommended)
|
|
369
|
-
|
|
370
|
-
**Mapping Config:**
|
|
371
|
-
```json
|
|
372
|
-
{
|
|
373
|
-
"fields": {
|
|
374
|
-
"retailerId": {
|
|
375
|
-
"source": "$context.retailerId",
|
|
376
|
-
"required": true,
|
|
377
|
-
"resolver": "sdk.parseInt"
|
|
378
|
-
},
|
|
379
|
-
"skuRef": { "source": "sku" },
|
|
380
|
-
"qty": { "source": "quantity" }
|
|
381
|
-
}
|
|
382
|
-
}
|
|
383
|
-
```
|
|
384
|
-
|
|
385
|
-
**Workflow Code:**
|
|
386
|
-
```typescript
|
|
387
|
-
const fluentRetailerId = activation.getVariable('fluentRetailerId');
|
|
388
|
-
|
|
389
|
-
for (const record of records) {
|
|
390
|
-
const result = await mapper.map(
|
|
391
|
-
{ inventory: record }, // Source data (XML/CSV)
|
|
392
|
-
{ context: { retailerId: fluentRetailerId } } // Runtime injection
|
|
393
|
-
);
|
|
394
|
-
}
|
|
395
|
-
```
|
|
396
|
-
|
|
397
|
-
### Why Context Injection > Custom Resolver?
|
|
398
|
-
|
|
399
|
-
| Pattern | Pros | Cons |
|
|
400
|
-
|---------|------|------|
|
|
401
|
-
| **Context Injection** | ✅ Explicit<br>✅ Visible in mapping<br>✅ Multi-tenant ready | None |
|
|
402
|
-
| **Custom Resolver** | None | ❌ Hidden<br>❌ Less flexible<br>❌ More complex |
|
|
403
|
-
|
|
404
|
-
**See Template:** `docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-sftp-xml-inventory-batch.md` (lines 1365-1367)
|
|
1
|
+
# retailerId Configuration Guide
|
|
2
|
+
|
|
3
|
+
**Quick Answer:** `retailerId` is **OPTIONAL** at client creation. Only provide it when using Job API, Batch API, or Event API.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## When is retailerId Required?
|
|
8
|
+
|
|
9
|
+
| API/Method | Needs retailerId? | When to Provide It |
|
|
10
|
+
|------------|-------------------|-------------------|
|
|
11
|
+
| `client.graphql()` | ❌ NO | Never required |
|
|
12
|
+
| `client.createJob()` | ✅ YES | In job payload or client config |
|
|
13
|
+
| `client.sendEvent()` | ✅ YES | In event payload or client config |
|
|
14
|
+
| `client.sendBatch()` | ❌ NO | Uses jobId (already has retailerId from job) |
|
|
15
|
+
| `client.getJobStatus()` | ❌ NO | Uses jobId |
|
|
16
|
+
| `client.getBatchStatus()` | ❌ NO | Uses jobId and batchId |
|
|
17
|
+
|
|
18
|
+
### Why These APIs Need It
|
|
19
|
+
|
|
20
|
+
- **Job API** (`createJob`): Fluent needs to know which retailer owns the job
|
|
21
|
+
- **Event API** (`sendEvent`): Events are scoped to a specific retailer
|
|
22
|
+
- **Batch API**: Batches inherit retailerId from the parent job (no separate retailerId needed)
|
|
23
|
+
|
|
24
|
+
### What About GraphQL Mutations?
|
|
25
|
+
|
|
26
|
+
**Important:** GraphQL mutations **NEVER** use `client.setRetailerId()`. They get retailerId from **mutation input variables** if the mutation schema includes it.
|
|
27
|
+
|
|
28
|
+
**Three Scenarios:**
|
|
29
|
+
|
|
30
|
+
1. **Mutations that REQUIRE retailerId** (mandatory in schema):
|
|
31
|
+
- Examples: Some mutations where `retailerId` or `retailer.id` is required
|
|
32
|
+
- **Must pass** retailerId in mutation input variables
|
|
33
|
+
|
|
34
|
+
2. **Mutations where retailerId is OPTIONAL** (optional in schema):
|
|
35
|
+
- Examples: Some mutations where `retailerId` or `retailer.id` is optional
|
|
36
|
+
- **Can pass** retailerId if needed, or omit it
|
|
37
|
+
|
|
38
|
+
3. **Mutations that DON'T HAVE retailerId** (field doesn't exist in schema):
|
|
39
|
+
- Examples: `createLocation`, `createControl`, `createPrice` (typically)
|
|
40
|
+
- **Don't pass** retailerId - field doesn't exist in the mutation input
|
|
41
|
+
|
|
42
|
+
**Correct Pattern:**
|
|
43
|
+
|
|
44
|
+
```typescript
|
|
45
|
+
// ✅ CORRECT: Pass retailerId in mutation input if schema requires/allows it
|
|
46
|
+
const { query, variables } = await mapper.map(sourceData);
|
|
47
|
+
|
|
48
|
+
// Check GraphQL schema to determine:
|
|
49
|
+
// 1. Is retailerId mandatory? → Must pass it
|
|
50
|
+
// 2. Is retailerId optional? → Can pass it if needed
|
|
51
|
+
// 3. Does retailerId field exist? → If not, don't pass it
|
|
52
|
+
|
|
53
|
+
if (mutationRequiresRetailerId && variables.input) {
|
|
54
|
+
// Mandatory: Must pass
|
|
55
|
+
variables.input.retailer = { id: parseInt(retailerId) };
|
|
56
|
+
// OR depending on schema:
|
|
57
|
+
// variables.input.retailerId = parseInt(retailerId);
|
|
58
|
+
} else if (mutationAllowsRetailerId && retailerId && variables.input) {
|
|
59
|
+
// Optional: Can pass if you have it
|
|
60
|
+
variables.input.retailer = { id: parseInt(retailerId) };
|
|
61
|
+
}
|
|
62
|
+
// If field doesn't exist in schema, don't pass it
|
|
63
|
+
|
|
64
|
+
await client.graphql({ query, variables });
|
|
65
|
+
|
|
66
|
+
// ❌ WRONG: Never use setRetailerId() for GraphQL mutations
|
|
67
|
+
// client.setRetailerId(retailerId); // ← This is ONLY for Job/Event API
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**How to Check:**
|
|
71
|
+
- Use GraphQL introspection to see if your mutation has `retailerId` or `retailer.id` field
|
|
72
|
+
- Check if it's mandatory (`!`) or optional in the schema
|
|
73
|
+
- If field doesn't exist → don't pass it
|
|
74
|
+
- If mandatory → must pass it
|
|
75
|
+
- If optional → can pass it if needed
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Three Ways to Provide retailerId
|
|
80
|
+
|
|
81
|
+
### Option 1: In Client Configuration (Standalone/Node.js)
|
|
82
|
+
|
|
83
|
+
**Best for:** Node.js scripts, Deno applications
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
import { createClient } from '@fluentcommerce/fc-connect-sdk';
|
|
87
|
+
|
|
88
|
+
const client = await createClient({
|
|
89
|
+
config: {
|
|
90
|
+
baseUrl: 'https://api.fluentcommerce.com',
|
|
91
|
+
clientId: process.env.FLUENT_CLIENT_ID,
|
|
92
|
+
clientSecret: process.env.FLUENT_CLIENT_SECRET,
|
|
93
|
+
retailerId: '1', // ← Optional: only needed for Job/Event APIs
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
// Now you can call methods without passing retailerId each time
|
|
98
|
+
await client.createJob({ name: 'inventory-sync' });
|
|
99
|
+
await client.sendEvent({ name: 'ProductUpdated', entityType: 'PRODUCT' });
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Option 2: Set After Client Creation
|
|
103
|
+
|
|
104
|
+
**Best for:** Versori `fn()` workflows, dynamic retailerId
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
import { createClient } from '@fluentcommerce/fc-connect-sdk';
|
|
108
|
+
|
|
109
|
+
// Create client without retailerId
|
|
110
|
+
const client = await createClient({
|
|
111
|
+
data: {}, // ← No retailerId needed if only using GraphQL
|
|
112
|
+
log,
|
|
113
|
+
openKv,
|
|
114
|
+
activation
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
// Only set it if you need Job/Event APIs
|
|
118
|
+
if (needsJobApi) {
|
|
119
|
+
client.setRetailerId('1');
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Now use it
|
|
123
|
+
await client.createJob({ name: 'inventory-sync' });
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Option 3: Pass Directly to Methods
|
|
127
|
+
|
|
128
|
+
**Best for:** Multi-tenant scenarios, different retailers per operation
|
|
129
|
+
|
|
130
|
+
```typescript
|
|
131
|
+
const client = await createClient({
|
|
132
|
+
data: {}, // No retailerId in client config
|
|
133
|
+
log,
|
|
134
|
+
openKv,
|
|
135
|
+
activation
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
// Pass retailerId explicitly
|
|
139
|
+
await client.createJob({
|
|
140
|
+
name: 'inventory-sync',
|
|
141
|
+
retailerId: '1' // ← Explicitly provide it
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
await client.sendEvent({
|
|
145
|
+
name: 'ProductUpdated',
|
|
146
|
+
entityType: 'PRODUCT',
|
|
147
|
+
retailerId: '2' // ← Different retailer
|
|
148
|
+
});
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Versori Platform Patterns
|
|
154
|
+
|
|
155
|
+
### Standard Versori Pattern (Recommended)
|
|
156
|
+
|
|
157
|
+
Use `schedule().then(http())` with a Fluent Commerce connection:
|
|
158
|
+
|
|
159
|
+
```typescript
|
|
160
|
+
import { schedule, http } from '@versori/run';
|
|
161
|
+
import { createClient } from '@fluentcommerce/fc-connect-sdk';
|
|
162
|
+
|
|
163
|
+
// Standard pattern from SDK templates
|
|
164
|
+
export const dailyInventorySync = schedule('daily-sync', '0 2 * * *').then(
|
|
165
|
+
http('run-sync', { connection: 'fluent_commerce' }, async (ctx) => {
|
|
166
|
+
// createClient auto-detects Versori context
|
|
167
|
+
const client = await createClient(ctx);
|
|
168
|
+
|
|
169
|
+
// Set retailerId if needed for Job/Event APIs
|
|
170
|
+
client.setRetailerId('1');
|
|
171
|
+
|
|
172
|
+
await client.createJob({ name: 'inventory-sync' });
|
|
173
|
+
})
|
|
174
|
+
);
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Alternative: Pass retailerId Directly
|
|
178
|
+
|
|
179
|
+
```typescript
|
|
180
|
+
export const dailyInventorySync = schedule('daily-sync', '0 2 * * *').then(
|
|
181
|
+
http('run-sync', { connection: 'fluent_commerce' }, async (ctx) => {
|
|
182
|
+
const client = await createClient(ctx);
|
|
183
|
+
|
|
184
|
+
// Pass retailerId explicitly per operation
|
|
185
|
+
await client.createJob({
|
|
186
|
+
name: 'inventory-sync',
|
|
187
|
+
retailerId: '1'
|
|
188
|
+
});
|
|
189
|
+
})
|
|
190
|
+
);
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### For Webhooks (Without Fluent Client)
|
|
194
|
+
|
|
195
|
+
If you only need KV storage (no Fluent API calls):
|
|
196
|
+
|
|
197
|
+
```typescript
|
|
198
|
+
import { webhook, fn } from '@versori/run';
|
|
199
|
+
import { JobTracker } from '@fluentcommerce/fc-connect-sdk';
|
|
200
|
+
|
|
201
|
+
export const jobStatus = webhook('job-status').then(
|
|
202
|
+
fn('status', async (ctx) => {
|
|
203
|
+
const { data, log, openKv } = ctx;
|
|
204
|
+
|
|
205
|
+
// Use SDK utilities without FluentClient
|
|
206
|
+
const tracker = new JobTracker(openKv(':project:'), log);
|
|
207
|
+
return await tracker.getJob(data.jobId);
|
|
208
|
+
})
|
|
209
|
+
);
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## Error Messages
|
|
215
|
+
|
|
216
|
+
### Missing retailerId When Required
|
|
217
|
+
|
|
218
|
+
```
|
|
219
|
+
FluentValidationError: retailerId is required for job creation
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
**Solution:** Provide retailerId using one of the three options above.
|
|
223
|
+
|
|
224
|
+
### Before v0.1.31 (Old SDK Versions)
|
|
225
|
+
|
|
226
|
+
```
|
|
227
|
+
Error: retailerId is required in Versori connection
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
**Solution:** Upgrade to v0.1.31+ where retailerId is optional at client creation.
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Migration from Old SDK Versions
|
|
235
|
+
|
|
236
|
+
**Before (v0.1.30 and earlier):**
|
|
237
|
+
```typescript
|
|
238
|
+
// ❌ Would fail if retailerId missing
|
|
239
|
+
const client = await createClient({ data: {}, log, openKv });
|
|
240
|
+
// Error: "retailerId is required in Versori connection"
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
**After (v0.1.31+):**
|
|
244
|
+
```typescript
|
|
245
|
+
// ✅ Works fine for GraphQL queries
|
|
246
|
+
const client = await createClient({ data: {}, log, openKv });
|
|
247
|
+
await client.graphql({ query: '...' });
|
|
248
|
+
|
|
249
|
+
// ❌ Only fails if you try Job/Event API without retailerId
|
|
250
|
+
await client.createJob({ name: 'test' });
|
|
251
|
+
// Error: "retailerId is required for job creation"
|
|
252
|
+
|
|
253
|
+
// ✅ Provide it when needed
|
|
254
|
+
client.setRetailerId('1');
|
|
255
|
+
await client.createJob({ name: 'test' });
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## Best Practices
|
|
261
|
+
|
|
262
|
+
### 1. Only Provide retailerId If You Need It
|
|
263
|
+
|
|
264
|
+
```typescript
|
|
265
|
+
// ✅ Good: Only using GraphQL queries
|
|
266
|
+
const client = await createClient({
|
|
267
|
+
config: { baseUrl, clientId, clientSecret }
|
|
268
|
+
// No retailerId needed
|
|
269
|
+
});
|
|
270
|
+
|
|
271
|
+
await client.graphql({ query: '...' });
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### 2. Set It Once for Multiple Operations
|
|
275
|
+
|
|
276
|
+
```typescript
|
|
277
|
+
// ✅ Good: Using Job API multiple times
|
|
278
|
+
const client = await createClient({ data: {}, log, openKv });
|
|
279
|
+
client.setRetailerId('1');
|
|
280
|
+
|
|
281
|
+
await client.createJob({ name: 'job1' });
|
|
282
|
+
await client.createJob({ name: 'job2' });
|
|
283
|
+
await client.sendEvent({ name: 'Test', entityType: 'PRODUCT' });
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
### 3. Pass Explicitly for Multi-Tenant
|
|
287
|
+
|
|
288
|
+
```typescript
|
|
289
|
+
// ✅ Good: Different retailers per operation
|
|
290
|
+
const client = await createClient({ data: {}, log, openKv });
|
|
291
|
+
|
|
292
|
+
for (const tenant of tenants) {
|
|
293
|
+
await client.createJob({
|
|
294
|
+
name: `sync-${tenant.name}`,
|
|
295
|
+
retailerId: tenant.fluentRetailerId
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## How to Find Your Retailer ID
|
|
303
|
+
|
|
304
|
+
### Method 1: GraphQL Query
|
|
305
|
+
|
|
306
|
+
```graphql
|
|
307
|
+
query {
|
|
308
|
+
retailers {
|
|
309
|
+
edges {
|
|
310
|
+
node {
|
|
311
|
+
id # ← This is your retailerId
|
|
312
|
+
ref
|
|
313
|
+
name
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
### Method 2: Fluent Console URL
|
|
321
|
+
|
|
322
|
+
Check your Fluent Console URL:
|
|
323
|
+
```
|
|
324
|
+
https://yourinstance.fluentretail.com/console/retailer/123
|
|
325
|
+
^^^
|
|
326
|
+
retailerId
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
### Method 3: Ask Your Fluent Admin
|
|
330
|
+
|
|
331
|
+
They can provide the numeric retailer ID for your instance.
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## Summary
|
|
336
|
+
|
|
337
|
+
- ✅ **retailerId is OPTIONAL** at client construction (as of v0.1.31)
|
|
338
|
+
- ✅ **Only required** for Job API, Event API (NOT GraphQL or Batch)
|
|
339
|
+
- ✅ **Three ways to provide it:** client config, `setRetailerId()`, or method parameter
|
|
340
|
+
- ✅ **Best practice:** Only provide it if you're using Job/Event APIs
|
|
341
|
+
|
|
342
|
+
**Related Docs:**
|
|
343
|
+
- [Getting Started Guide](./getting-started.md)
|
|
344
|
+
- [API Reference](../02-CORE-GUIDES/api-reference/api-reference-readme.md)
|
|
345
|
+
- [Versori Authentication](../02-CORE-GUIDES/api-reference/modules/api-reference-03-authentication.md)
|
|
346
|
+
|
|
347
|
+
---
|
|
348
|
+
|
|
349
|
+
## Batch Entity Pattern: Context Injection
|
|
350
|
+
|
|
351
|
+
### Problem: retailerId in Batch Entities
|
|
352
|
+
|
|
353
|
+
Batch API requires `retailerId` in **each entity** (not just in `createJob`):
|
|
354
|
+
|
|
355
|
+
```typescript
|
|
356
|
+
await client.sendBatch(jobId, {
|
|
357
|
+
entities: [
|
|
358
|
+
{
|
|
359
|
+
locationRef: 'LOC-001',
|
|
360
|
+
skuRef: 'SKU-123',
|
|
361
|
+
qty: 100,
|
|
362
|
+
retailerId: 123 // ← Required in EACH entity
|
|
363
|
+
}
|
|
364
|
+
]
|
|
365
|
+
});
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
### Solution: Use Mapping Context (Recommended)
|
|
369
|
+
|
|
370
|
+
**Mapping Config:**
|
|
371
|
+
```json
|
|
372
|
+
{
|
|
373
|
+
"fields": {
|
|
374
|
+
"retailerId": {
|
|
375
|
+
"source": "$context.retailerId",
|
|
376
|
+
"required": true,
|
|
377
|
+
"resolver": "sdk.parseInt"
|
|
378
|
+
},
|
|
379
|
+
"skuRef": { "source": "sku" },
|
|
380
|
+
"qty": { "source": "quantity" }
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
**Workflow Code:**
|
|
386
|
+
```typescript
|
|
387
|
+
const fluentRetailerId = activation.getVariable('fluentRetailerId');
|
|
388
|
+
|
|
389
|
+
for (const record of records) {
|
|
390
|
+
const result = await mapper.map(
|
|
391
|
+
{ inventory: record }, // Source data (XML/CSV)
|
|
392
|
+
{ context: { retailerId: fluentRetailerId } } // Runtime injection
|
|
393
|
+
);
|
|
394
|
+
}
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
### Why Context Injection > Custom Resolver?
|
|
398
|
+
|
|
399
|
+
| Pattern | Pros | Cons |
|
|
400
|
+
|---------|------|------|
|
|
401
|
+
| **Context Injection** | ✅ Explicit<br>✅ Visible in mapping<br>✅ Multi-tenant ready | None |
|
|
402
|
+
| **Custom Resolver** | None | ❌ Hidden<br>❌ Less flexible<br>❌ More complex |
|
|
403
|
+
|
|
404
|
+
**See Template:** `docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-sftp-xml-inventory-batch.md` (lines 1365-1367)
|