@fluentcommerce/fc-connect-sdk 0.1.53 → 0.1.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -2
- package/README.md +39 -0
- package/dist/cjs/auth/index.d.ts +3 -0
- package/dist/cjs/auth/index.js +13 -0
- package/dist/cjs/auth/profile-loader.d.ts +18 -0
- package/dist/cjs/auth/profile-loader.js +208 -0
- package/dist/cjs/client-factory.d.ts +4 -0
- package/dist/cjs/client-factory.js +10 -0
- package/dist/cjs/clients/fluent-client.js +13 -6
- package/dist/cjs/index.d.ts +3 -1
- package/dist/cjs/index.js +8 -2
- package/dist/cjs/utils/pagination-helpers.js +38 -2
- package/dist/cjs/versori/fluent-versori-client.js +11 -5
- package/dist/esm/auth/index.d.ts +3 -0
- package/dist/esm/auth/index.js +2 -0
- package/dist/esm/auth/profile-loader.d.ts +18 -0
- package/dist/esm/auth/profile-loader.js +169 -0
- package/dist/esm/client-factory.d.ts +4 -0
- package/dist/esm/client-factory.js +9 -0
- package/dist/esm/clients/fluent-client.js +13 -6
- package/dist/esm/index.d.ts +3 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/utils/pagination-helpers.js +38 -2
- package/dist/esm/versori/fluent-versori-client.js +11 -5
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/tsconfig.types.tsbuildinfo +1 -1
- package/dist/types/auth/index.d.ts +3 -0
- package/dist/types/auth/profile-loader.d.ts +18 -0
- package/dist/types/client-factory.d.ts +4 -0
- package/dist/types/index.d.ts +3 -1
- package/docs/00-START-HERE/EXPORT-VALIDATION.md +158 -158
- package/docs/00-START-HERE/cli-analyze-source-structure-guide.md +655 -655
- package/docs/00-START-HERE/cli-documentation-index.md +202 -202
- package/docs/00-START-HERE/cli-quick-reference.md +252 -252
- package/docs/00-START-HERE/decision-tree.md +552 -552
- package/docs/00-START-HERE/getting-started.md +1070 -1070
- package/docs/00-START-HERE/mapper-quick-decision-guide.md +235 -235
- package/docs/00-START-HERE/readme.md +237 -237
- package/docs/00-START-HERE/retailerid-configuration.md +404 -404
- package/docs/00-START-HERE/sdk-philosophy.md +794 -794
- package/docs/00-START-HERE/troubleshooting-quick-reference.md +1086 -1086
- package/docs/01-TEMPLATES/faq.md +686 -686
- package/docs/01-TEMPLATES/patterns/pattern-templates-guide.md +68 -68
- package/docs/01-TEMPLATES/patterns/patterns-csv-schema-validation-and-rejection-report.md +233 -233
- package/docs/01-TEMPLATES/patterns/patterns-custom-resolvers.md +407 -407
- package/docs/01-TEMPLATES/patterns/patterns-error-handling-retry.md +511 -511
- package/docs/01-TEMPLATES/patterns/patterns-field-mapping-universal.md +701 -701
- package/docs/01-TEMPLATES/patterns/patterns-large-file-splitting.md +1430 -1430
- package/docs/01-TEMPLATES/patterns/patterns-master-data-etl.md +2399 -2399
- package/docs/01-TEMPLATES/patterns/patterns-pagination-streaming.md +447 -447
- package/docs/01-TEMPLATES/patterns/patterns-state-duplicate-prevention.md +385 -385
- package/docs/01-TEMPLATES/readme.md +957 -957
- package/docs/01-TEMPLATES/standalone/standalone-asn-inbound-processing.md +1209 -1209
- package/docs/01-TEMPLATES/standalone/standalone-graphql-query-export.md +1140 -1140
- package/docs/01-TEMPLATES/standalone/standalone-graphql-to-parquet-partitioned-s3.md +432 -432
- package/docs/01-TEMPLATES/standalone/standalone-multi-channel-inventory-sync.md +1185 -1185
- package/docs/01-TEMPLATES/standalone/standalone-multi-source-aggregation.md +1462 -1462
- package/docs/01-TEMPLATES/standalone/standalone-s3-csv-batch-api.md +1390 -1390
- package/docs/01-TEMPLATES/standalone/standalone-s3-csv-inventory-to-batch.md +330 -330
- package/docs/01-TEMPLATES/standalone/standalone-scripts-guide.md +87 -87
- package/docs/01-TEMPLATES/standalone/standalone-sftp-xml-graphql.md +1444 -1444
- package/docs/01-TEMPLATES/standalone/standalone-webhook-payload-processing.md +688 -688
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-dropship-order-routing.md +193 -193
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-graphql-parquet-extraction.md +518 -518
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-inter-location-transfers.md +2162 -2162
- package/docs/01-TEMPLATES/versori/business-examples/business-examples-pre-order-allocation.md +2226 -2226
- package/docs/01-TEMPLATES/versori/business-examples/business-scenarios-guide.md +87 -87
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-connection-validation-pattern.md +656 -656
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-dual-workflow-connector.md +835 -835
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-guide.md +108 -108
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-kv-state-management.md +1533 -1533
- package/docs/01-TEMPLATES/versori/patterns/versori-patterns-xml-response-patterns.md +1160 -1160
- package/docs/01-TEMPLATES/versori/versori-platform-guide.md +201 -201
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-asn-purchase-order.md +1906 -1906
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-dropship-routing.md +1074 -1074
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-flash-sale-reserve.md +1395 -1395
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-generic-xml-order.md +888 -888
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-payment-gateway-integration.md +2478 -2478
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-rma-returns-comprehensive.md +2240 -2240
- package/docs/01-TEMPLATES/versori/webhooks/template-webhook-xml-order-ingestion.md +2029 -2029
- package/docs/01-TEMPLATES/versori/webhooks/webhook-templates-guide.md +140 -140
- package/docs/01-TEMPLATES/versori/workflows/_examples/sample-data/inventory-mapping.json +20 -20
- package/docs/01-TEMPLATES/versori/workflows/_examples/sample-data/products_2025-01-22.csv +11 -11
- package/docs/01-TEMPLATES/versori/workflows/_examples/sample-data/sample-data-guide.md +34 -34
- package/docs/01-TEMPLATES/versori/workflows/_examples/workflow-examples-guide.md +36 -36
- package/docs/01-TEMPLATES/versori/workflows/extraction/extraction-modes-guide.md +1038 -1038
- package/docs/01-TEMPLATES/versori/workflows/extraction/extraction-workflows-guide.md +138 -138
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/graphql-extraction-guide.md +63 -63
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-fulfillments-to-sftp-csv.md +2062 -2062
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-fulfillments-to-sftp-xml.md +2294 -2294
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-positions-to-s3-csv.md +2461 -2461
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-positions-to-sftp-xml.md +2529 -2529
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-quantities-to-s3-csv.md +2464 -2464
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-inventory-quantities-to-s3-json.md +1959 -1959
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-orders-to-s3-csv.md +1953 -1953
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-orders-to-sftp-xml.md +2541 -2541
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-products-to-s3-json.md +2384 -2384
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-products-to-sftp-xml.md +2445 -2445
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-virtual-positions-to-s3-csv.md +2355 -2355
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-virtual-positions-to-s3-json.md +2042 -2042
- package/docs/01-TEMPLATES/versori/workflows/extraction/graphql-queries/template-extraction-virtual-positions-to-sftp-xml.md +2726 -2726
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/batch-api-guide.md +206 -206
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-cycle-count-reconciliation.md +2030 -2030
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-multi-channel-inventory-sync.md +1882 -1882
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-s3-csv-inventory-batch.md +2827 -2827
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-s3-json-inventory-batch.md +1952 -1952
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-s3-xml-inventory-batch.md +3289 -3289
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-sftp-csv-inventory-batch.md +3064 -3064
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-sftp-json-inventory-batch.md +3238 -3238
- package/docs/01-TEMPLATES/versori/workflows/ingestion/batch-api/template-ingestion-sftp-xml-inventory-batch.md +2977 -2977
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/event-api-guide.md +321 -321
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-payload-json-order-cancel-event.md +959 -959
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-payload-xml-order-cancel-event.md +1170 -1170
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-csv-product-event.md +2312 -2312
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-json-product-event.md +2999 -2999
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-parquet-product-event.md +2836 -2836
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-xml-product-event.md +2395 -2395
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-csv-product-event.md +2295 -2295
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-json-product-event.md +2602 -2602
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-parquet-product-event.md +2589 -2589
- package/docs/01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-xml-product-event.md +3578 -3578
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/graphql-mutations-guide.md +93 -93
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-payload-json-order-update-graphql.md +1260 -1260
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-payload-xml-order-update-graphql.md +1472 -1472
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-control-graphql.md +2417 -2417
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-location-graphql.md +2811 -2811
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-csv-price-graphql.md +2619 -2619
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-json-location-graphql.md +2807 -2807
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-s3-xml-location-graphql.md +2373 -2373
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-sftp-csv-control-graphql.md +2740 -2740
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-sftp-csv-location-graphql.md +2760 -2760
- package/docs/01-TEMPLATES/versori/workflows/ingestion/graphql-mutations/template-ingestion-sftp-json-location-graphql.md +1710 -1710
- package/docs/01-TEMPLATES/versori/workflows/ingestion/ingestion-workflows-guide.md +136 -136
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/rubix-webhooks-guide.md +520 -520
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/template-webhook-rubix-fulfilment-to-sftp-xml-inline.md +1418 -1418
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/template-webhook-rubix-fulfilment-to-sftp-xml-universal-mapper.md +1785 -1785
- package/docs/01-TEMPLATES/versori/workflows/rubix-webhooks/template-webhook-rubix-order-attribute-update.md +824 -824
- package/docs/01-TEMPLATES/versori/workflows/workflows-overview-guide.md +646 -646
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-batch-archival.md +724 -724
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-job-tracker.md +627 -627
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-partial-batch-recovery.md +561 -561
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-quick-reference.md +367 -367
- package/docs/02-CORE-GUIDES/advanced-services/advanced-services-readme.md +407 -407
- package/docs/02-CORE-GUIDES/advanced-services/readme.md +49 -49
- package/docs/02-CORE-GUIDES/api-reference/api-reference-quick-reference.md +548 -548
- package/docs/02-CORE-GUIDES/api-reference/event-api-input-output-reference.md +702 -1171
- package/docs/02-CORE-GUIDES/api-reference/examples/client-initialization.ts +286 -286
- package/docs/02-CORE-GUIDES/api-reference/graphql-error-classification.md +337 -337
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-01-client-api.md +399 -482
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-03-authentication.md +199 -199
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-04-graphql-mapping.md +925 -925
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-05-services.md +1198 -1198
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-06-data-sources.md +1083 -1083
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-07-parsers.md +1097 -1097
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-08-pagination.md +513 -513
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-08-types.md +545 -597
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-09-error-handling.md +527 -527
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-09-webhook-validation.md +514 -514
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-10-extraction.md +557 -557
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-10-utilities.md +412 -412
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-11-cli-tools.md +423 -423
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-11-error-handling.md +716 -716
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-12-analyze-source-structure.md +518 -518
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-12-partial-responses.md +212 -212
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-12-testing.md +300 -300
- package/docs/02-CORE-GUIDES/api-reference/modules/api-reference-13-resolver-builder.md +322 -322
- package/docs/02-CORE-GUIDES/api-reference/readme.md +279 -279
- package/docs/02-CORE-GUIDES/auto-pagination/auto-pagination-quick-reference.md +351 -351
- package/docs/02-CORE-GUIDES/auto-pagination/auto-pagination-readme.md +277 -277
- package/docs/02-CORE-GUIDES/auto-pagination/examples/auto-pagination-readme.md +178 -178
- package/docs/02-CORE-GUIDES/auto-pagination/examples/common-patterns.ts +351 -351
- package/docs/02-CORE-GUIDES/auto-pagination/examples/paginate-products.ts +384 -384
- package/docs/02-CORE-GUIDES/auto-pagination/examples/paginate-virtual-positions.ts +308 -308
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-01-foundations.md +470 -470
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-02-quick-start.md +713 -713
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-03-configuration.md +754 -754
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-04-advanced-patterns.md +732 -732
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-05-sdk-integration.md +847 -847
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-06-troubleshooting.md +359 -359
- package/docs/02-CORE-GUIDES/auto-pagination/modules/auto-pagination-07-api-reference.md +462 -462
- package/docs/02-CORE-GUIDES/auto-pagination/readme.md +54 -54
- package/docs/02-CORE-GUIDES/data-sources/data-sources-file-operations-error-handling.md +1487 -1487
- package/docs/02-CORE-GUIDES/data-sources/data-sources-quick-reference.md +836 -836
- package/docs/02-CORE-GUIDES/data-sources/data-sources-readme.md +276 -276
- package/docs/02-CORE-GUIDES/data-sources/data-sources-sftp-credential-access-security.md +553 -553
- package/docs/02-CORE-GUIDES/data-sources/examples/common-patterns.ts +409 -409
- package/docs/02-CORE-GUIDES/data-sources/examples/data-sources-readme.md +178 -178
- package/docs/02-CORE-GUIDES/data-sources/examples/s3-operations.ts +308 -308
- package/docs/02-CORE-GUIDES/data-sources/examples/sftp-operations.ts +371 -371
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-01-foundations.md +735 -735
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-02-s3-operations.md +1302 -1302
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-03-sftp-operations.md +1379 -1379
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-04-file-patterns.md +941 -941
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-05-advanced-topics.md +813 -813
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-06-integration-patterns.md +486 -486
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-07-troubleshooting.md +387 -387
- package/docs/02-CORE-GUIDES/data-sources/modules/data-sources-08-api-reference.md +417 -417
- package/docs/02-CORE-GUIDES/data-sources/readme.md +77 -77
- package/docs/02-CORE-GUIDES/error-handling-guide.md +936 -936
- package/docs/02-CORE-GUIDES/extraction/examples/02-core-guides-extraction-readme.md +116 -116
- package/docs/02-CORE-GUIDES/extraction/examples/common-patterns.ts +428 -428
- package/docs/02-CORE-GUIDES/extraction/examples/extract-inventory-basic.ts +187 -187
- package/docs/02-CORE-GUIDES/extraction/extraction-quick-reference.md +596 -596
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-01-foundations.md +514 -514
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-02-basic-extraction.md +823 -823
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-03-parquet-processing.md +507 -507
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-04-data-enrichment.md +546 -546
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-05-transformation.md +494 -494
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-06-export-formats.md +458 -458
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-06-performance.md +138 -138
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-07-api-reference.md +148 -148
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-07-optimization.md +692 -692
- package/docs/02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-08-extraction-orchestrator.md +1008 -1008
- package/docs/02-CORE-GUIDES/extraction/readme.md +151 -151
- package/docs/02-CORE-GUIDES/ingestion/examples/_simple-kv-store.ts +40 -40
- package/docs/02-CORE-GUIDES/ingestion/examples/error-recovery.ts +728 -728
- package/docs/02-CORE-GUIDES/ingestion/examples/event-driven.ts +501 -501
- package/docs/02-CORE-GUIDES/ingestion/examples/local-file-ingestion.ts +88 -88
- package/docs/02-CORE-GUIDES/ingestion/examples/parquet-ingestion.ts +117 -117
- package/docs/02-CORE-GUIDES/ingestion/examples/performance-optimized.ts +647 -647
- package/docs/02-CORE-GUIDES/ingestion/examples/s3-csv-ingestion.ts +169 -169
- package/docs/02-CORE-GUIDES/ingestion/examples/sftp-csv-ingestion.ts +134 -134
- package/docs/02-CORE-GUIDES/ingestion/ingestion-quick-reference.md +546 -546
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-01-introduction.md +626 -626
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-02-quick-start.md +658 -658
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-03-data-sources.md +1052 -1052
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-04-field-mapping.md +763 -763
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-05-advanced-parsers.md +676 -676
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-06-batch-api.md +1295 -1295
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-07-api-reference.md +138 -138
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-07-state-management.md +1037 -1037
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-08-performance-optimization.md +1349 -1349
- package/docs/02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-09-best-practices.md +1893 -1893
- package/docs/02-CORE-GUIDES/ingestion/readme.md +160 -160
- package/docs/02-CORE-GUIDES/logging-guide.md +585 -585
- package/docs/02-CORE-GUIDES/mapping/error-handling-patterns.md +401 -401
- package/docs/02-CORE-GUIDES/mapping/examples/02-core-guides-mapping-readme.md +128 -128
- package/docs/02-CORE-GUIDES/mapping/examples/common-patterns.ts +273 -273
- package/docs/02-CORE-GUIDES/mapping/examples/csv-location-ingestion.json +36 -36
- package/docs/02-CORE-GUIDES/mapping/examples/csv-mapping.ts +242 -242
- package/docs/02-CORE-GUIDES/mapping/examples/graphql-to-parquet-extraction.json +36 -36
- package/docs/02-CORE-GUIDES/mapping/examples/json-mapping.ts +213 -213
- package/docs/02-CORE-GUIDES/mapping/examples/json-product-to-mutation.json +48 -48
- package/docs/02-CORE-GUIDES/mapping/examples/xml-mapping.ts +291 -291
- package/docs/02-CORE-GUIDES/mapping/examples/xml-order-to-mutation.json +45 -45
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/graphql-mutation-mapping-quick-reference.md +463 -463
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/graphql-mutation-mapping-readme.md +227 -227
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-01-introduction.md +222 -222
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-02-quick-start.md +351 -351
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-03-schema-validation.md +569 -569
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-04-mapping-patterns.md +471 -471
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-05-configuration-reference.md +611 -611
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-06-advanced-xpath.md +148 -148
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-06-path-syntax.md +464 -464
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-07-api-reference.md +94 -94
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-07-array-handling.md +307 -307
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-08-custom-resolvers.md +544 -544
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-09-advanced-patterns.md +427 -427
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-10-hooks-and-variables.md +336 -336
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-11-error-handling.md +488 -488
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-12-arguments-vs-nodes.md +383 -383
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/modules/graphql-mutation-mapping-13-best-practices.md +477 -477
- package/docs/02-CORE-GUIDES/mapping/graphql-mutation-mapping/readme.md +62 -62
- package/docs/02-CORE-GUIDES/mapping/mapping-format-decision-tree.md +480 -480
- package/docs/02-CORE-GUIDES/mapping/mapping-graphql-alias-batching-guide.md +820 -820
- package/docs/02-CORE-GUIDES/mapping/mapping-javascript-objects.md +2369 -2369
- package/docs/02-CORE-GUIDES/mapping/mapping-mapper-comparison-guide.md +682 -682
- package/docs/02-CORE-GUIDES/mapping/modules/02-core-guides-mapping-07-api-reference.md +1327 -1327
- package/docs/02-CORE-GUIDES/mapping/modules/02-core-guides-mapping-08-error-handling.md +1142 -1142
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-04-use-cases.md +891 -891
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-06-helpers-resolvers.md +1126 -1126
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-06-sdk-resolvers.md +199 -199
- package/docs/02-CORE-GUIDES/mapping/modules/mapping-07-api-reference.md +1319 -1319
- package/docs/02-CORE-GUIDES/mapping/readme.md +178 -178
- package/docs/02-CORE-GUIDES/mapping/resolver-registration.md +410 -410
- package/docs/02-CORE-GUIDES/mapping/resolvers/examples/common-patterns.ts +226 -226
- package/docs/02-CORE-GUIDES/mapping/resolvers/examples/custom-resolvers.ts +227 -227
- package/docs/02-CORE-GUIDES/mapping/resolvers/examples/sdk-resolvers-usage.ts +203 -203
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-readme.md +274 -274
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-api-reference.md +679 -679
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-cookbook.md +826 -826
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-guide.md +1330 -1330
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-helpers-reference.md +1437 -1437
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-parameters-reference.md +553 -553
- package/docs/02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-troubleshooting.md +854 -854
- package/docs/02-CORE-GUIDES/mapping/resolvers/readme.md +75 -75
- package/docs/02-CORE-GUIDES/parsers/examples/02-core-guides-parsers-readme.md +161 -161
- package/docs/02-CORE-GUIDES/parsers/examples/csv-parser-examples.ts +110 -110
- package/docs/02-CORE-GUIDES/parsers/examples/json-parser-examples.ts +33 -33
- package/docs/02-CORE-GUIDES/parsers/examples/parquet-parser-examples.ts +47 -47
- package/docs/02-CORE-GUIDES/parsers/examples/xml-parser-examples.ts +38 -38
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-01-foundations.md +355 -355
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-02-csv-parser.md +772 -772
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-03-json-parser.md +789 -789
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-04-xml-parser.md +857 -857
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-05-parquet-parser.md +603 -603
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-06-integration-patterns.md +702 -702
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-06-streaming.md +121 -121
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-07-api-reference.md +89 -89
- package/docs/02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-07-troubleshooting.md +727 -727
- package/docs/02-CORE-GUIDES/parsers/parsers-quick-reference.md +482 -482
- package/docs/02-CORE-GUIDES/parsers/parsers-readme.md +258 -258
- package/docs/02-CORE-GUIDES/parsers/readme.md +65 -65
- package/docs/02-CORE-GUIDES/readme.md +194 -194
- package/docs/02-CORE-GUIDES/webhook-validation/examples/basic-validation.ts +108 -108
- package/docs/02-CORE-GUIDES/webhook-validation/examples/common-patterns.ts +316 -316
- package/docs/02-CORE-GUIDES/webhook-validation/examples/webhook-validation-readme.md +61 -61
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-01-foundations.md +440 -440
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-02-quick-start.md +525 -525
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-03-versori-integration.md +741 -741
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-04-platform-integration.md +629 -629
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-05-configuration.md +535 -535
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-06-error-handling.md +611 -611
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-06-troubleshooting.md +124 -124
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-07-api-reference.md +511 -511
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-08-rubix-webhooks.md +590 -590
- package/docs/02-CORE-GUIDES/webhook-validation/modules/webhook-validation-09-rubix-event-vs-http-call.md +432 -432
- package/docs/02-CORE-GUIDES/webhook-validation/readme.md +239 -239
- package/docs/02-CORE-GUIDES/webhook-validation/webhook-validation-quick-reference.md +392 -392
- package/docs/03-PATTERN-GUIDES/connector-scenarios/connector-scenarios-quick-reference.md +498 -498
- package/docs/03-PATTERN-GUIDES/connector-scenarios/connector-scenarios-readme.md +313 -313
- package/docs/03-PATTERN-GUIDES/connector-scenarios/examples/common-patterns.ts +612 -612
- package/docs/03-PATTERN-GUIDES/connector-scenarios/examples/connector-scenarios-readme.md +253 -253
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-01-foundations.md +452 -452
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-02-simple-scenarios.md +681 -681
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-03-intermediate-scenarios.md +637 -637
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-04-advanced-scenarios.md +650 -650
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-05-bidirectional-sync.md +233 -233
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-06-production-patterns.md +442 -442
- package/docs/03-PATTERN-GUIDES/connector-scenarios/modules/connector-scenarios-07-reference.md +445 -445
- package/docs/03-PATTERN-GUIDES/connector-scenarios/readme.md +31 -31
- package/docs/03-PATTERN-GUIDES/enterprise-integration-patterns.md +1528 -1528
- package/docs/03-PATTERN-GUIDES/error-handling/comprehensive-error-handling-guide.md +1437 -1437
- package/docs/03-PATTERN-GUIDES/error-handling/error-handling-quick-reference.md +390 -390
- package/docs/03-PATTERN-GUIDES/error-handling/examples/common-patterns.ts +438 -438
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-01-foundations.md +362 -362
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-02-error-types.md +850 -850
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-03-utf8-handling.md +456 -456
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-04-error-scenarios.md +658 -658
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-05-calling-patterns.md +671 -671
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-06-retry-strategies.md +1034 -1034
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-07-monitoring.md +653 -653
- package/docs/03-PATTERN-GUIDES/error-handling/modules/error-handling-08-api-reference.md +847 -847
- package/docs/03-PATTERN-GUIDES/error-handling/readme.md +36 -36
- package/docs/03-PATTERN-GUIDES/examples/__tests__/readme.md +40 -40
- package/docs/03-PATTERN-GUIDES/examples/__tests__/resolver-examples.test.js +282 -282
- package/docs/03-PATTERN-GUIDES/examples/test-data/03-pattern-guides-readme.md +110 -110
- package/docs/03-PATTERN-GUIDES/examples/test-data/canonical-inventory.json +123 -123
- package/docs/03-PATTERN-GUIDES/examples/test-data/canonical-order.json +171 -171
- package/docs/03-PATTERN-GUIDES/examples/test-data/readme.md +28 -28
- package/docs/03-PATTERN-GUIDES/extraction/extraction-readme.md +15 -15
- package/docs/03-PATTERN-GUIDES/extraction/readme.md +25 -25
- package/docs/03-PATTERN-GUIDES/file-operations/examples/common-patterns.ts +407 -407
- package/docs/03-PATTERN-GUIDES/file-operations/examples/file-operations-readme.md +142 -142
- package/docs/03-PATTERN-GUIDES/file-operations/file-operations-quick-reference.md +462 -462
- package/docs/03-PATTERN-GUIDES/file-operations/file-operations-readme.md +379 -379
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-01-foundations.md +430 -430
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-02-quick-start.md +484 -484
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-03-s3-operations.md +507 -507
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-04-sftp-operations.md +963 -963
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-05-streaming-performance.md +503 -503
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-06-archive-patterns.md +386 -386
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-06-error-handling.md +117 -117
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-07-api-reference.md +78 -78
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-07-testing-troubleshooting.md +567 -567
- package/docs/03-PATTERN-GUIDES/file-operations/modules/file-operations-08-api-reference.md +1055 -1055
- package/docs/03-PATTERN-GUIDES/file-operations/readme.md +32 -32
- package/docs/03-PATTERN-GUIDES/ingestion/ingestion-readme.md +15 -15
- package/docs/03-PATTERN-GUIDES/ingestion/readme.md +25 -25
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/batch-processing.ts +130 -130
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/common-patterns.ts +360 -360
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/delta-sync.ts +130 -130
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/integration-patterns-readme.md +100 -100
- package/docs/03-PATTERN-GUIDES/integration-patterns/examples/real-time-webhook.ts +398 -398
- package/docs/03-PATTERN-GUIDES/integration-patterns/integration-patterns-quick-reference.md +962 -962
- package/docs/03-PATTERN-GUIDES/integration-patterns/integration-patterns-readme.md +134 -134
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-01-real-time-processing.md +991 -991
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-02-batch-processing.md +1547 -1547
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-03-delta-sync.md +1108 -1108
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-04-webhook-patterns.md +1181 -1181
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-05-error-handling.md +1061 -1061
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-06-advanced-integration-services.md +1547 -1547
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-06-performance.md +109 -109
- package/docs/03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-07-api-reference.md +34 -34
- package/docs/03-PATTERN-GUIDES/integration-patterns/readme.md +30 -30
- package/docs/03-PATTERN-GUIDES/logging-minimal-mode.md +128 -128
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/common-patterns.ts +380 -380
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/multiple-connections-readme.md +139 -139
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/parallel-root-connections.ts +149 -149
- package/docs/03-PATTERN-GUIDES/multiple-connections/examples/real-world-scenarios.ts +405 -405
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-01-foundations.md +378 -378
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-02-quick-start.md +566 -566
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-03-targeting-connections.md +659 -659
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-04-parallel-queries.md +656 -656
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-05-best-practices.md +624 -624
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-06-api-reference.md +824 -824
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-06-versori.md +119 -119
- package/docs/03-PATTERN-GUIDES/multiple-connections/modules/multiple-connections-07-api-reference.md +87 -87
- package/docs/03-PATTERN-GUIDES/multiple-connections/multiple-connections-quick-reference.md +353 -353
- package/docs/03-PATTERN-GUIDES/multiple-connections/multiple-connections-readme.md +270 -270
- package/docs/03-PATTERN-GUIDES/multiple-connections/readme.md +30 -30
- package/docs/03-PATTERN-GUIDES/pagination/pagination-readme.md +14 -14
- package/docs/03-PATTERN-GUIDES/pagination/readme.md +24 -24
- package/docs/03-PATTERN-GUIDES/parquet/examples/common-patterns.ts +180 -180
- package/docs/03-PATTERN-GUIDES/parquet/examples/read-parquet.ts +48 -48
- package/docs/03-PATTERN-GUIDES/parquet/examples/write-parquet.ts +65 -65
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-01-introduction.md +393 -393
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-02-quick-start.md +572 -572
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-03-reading-parquet.md +525 -525
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-04-writing-parquet.md +554 -554
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-05-graphql-extraction.md +405 -405
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-06-performance.md +104 -104
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-06-s3-integration.md +511 -511
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-07-api-reference.md +90 -90
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-07-performance-optimization.md +525 -525
- package/docs/03-PATTERN-GUIDES/parquet/modules/03-pattern-guides-parquet-08-best-practices.md +712 -712
- package/docs/03-PATTERN-GUIDES/parquet/parquet-quick-reference.md +683 -683
- package/docs/03-PATTERN-GUIDES/parquet/parquet-readme.md +248 -248
- package/docs/03-PATTERN-GUIDES/parquet/readme.md +32 -32
- package/docs/03-PATTERN-GUIDES/parsers/parsers-readme.md +12 -12
- package/docs/03-PATTERN-GUIDES/parsers/readme.md +24 -24
- package/docs/03-PATTERN-GUIDES/readme.md +159 -159
- package/docs/03-PATTERN-GUIDES/webhooks/readme.md +24 -24
- package/docs/03-PATTERN-GUIDES/webhooks/webhooks-readme.md +8 -8
- package/docs/04-REFERENCE/architecture/architecture-01-overview.md +427 -427
- package/docs/04-REFERENCE/architecture/architecture-02-client-architecture.md +424 -424
- package/docs/04-REFERENCE/architecture/architecture-03-data-flow.md +690 -690
- package/docs/04-REFERENCE/architecture/architecture-04-service-layer.md +834 -834
- package/docs/04-REFERENCE/architecture/architecture-05-integration-architecture.md +655 -655
- package/docs/04-REFERENCE/architecture/architecture-06-state-management.md +653 -653
- package/docs/04-REFERENCE/architecture/architecture-adding-new-data-sources.md +686 -686
- package/docs/04-REFERENCE/architecture/readme.md +279 -279
- package/docs/04-REFERENCE/platforms/deno/readme.md +117 -117
- package/docs/04-REFERENCE/platforms/nodejs/readme.md +146 -146
- package/docs/04-REFERENCE/platforms/readme.md +135 -135
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-01-introduction.md +398 -398
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-02-quick-start.md +560 -560
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-03-authentication.md +757 -757
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-04-workflows.md +2476 -2476
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-05-connections.md +1167 -1167
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-06-kv-storage.md +990 -990
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-06-state-management.md +121 -121
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-07-api-reference.md +68 -68
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-07-deployment.md +731 -731
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-08-best-practices.md +1111 -1111
- package/docs/04-REFERENCE/platforms/versori/modules/platforms-versori-09-signature-reference.md +766 -766
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-readme.md +299 -299
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-s3-sftp-configuration-guide.md +1425 -1425
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-webhook-api-key-security.md +816 -816
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-webhook-connection-security.md +681 -681
- package/docs/04-REFERENCE/platforms/versori/platforms-versori-workflow-task-types.md +708 -708
- package/docs/04-REFERENCE/platforms/versori/readme.md +108 -108
- package/docs/04-REFERENCE/readme.md +148 -148
- package/docs/04-REFERENCE/resolver-signature/examples/advanced-resolvers.ts +482 -482
- package/docs/04-REFERENCE/resolver-signature/examples/async-resolvers.ts +496 -496
- package/docs/04-REFERENCE/resolver-signature/examples/basic-resolvers.ts +343 -343
- package/docs/04-REFERENCE/resolver-signature/examples/resolver-signature-readme.md +188 -188
- package/docs/04-REFERENCE/resolver-signature/examples/testing-resolvers.ts +463 -463
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-01-foundations.md +286 -286
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-02-parameter-reference.md +643 -643
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-03-basic-examples.md +521 -521
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-04-advanced-patterns.md +739 -739
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-05-sdk-resolvers.md +531 -531
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-06-migration-guide.md +650 -650
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-06-testing.md +125 -125
- package/docs/04-REFERENCE/resolver-signature/modules/resolver-signature-07-api-reference.md +794 -794
- package/docs/04-REFERENCE/resolver-signature/readme.md +64 -64
- package/docs/04-REFERENCE/resolver-signature/resolver-signature-quick-reference.md +270 -270
- package/docs/04-REFERENCE/resolver-signature/resolver-signature-readme.md +351 -351
- package/docs/04-REFERENCE/schema/fluent-commerce-schema.json +764 -764
- package/docs/04-REFERENCE/schema/readme.md +141 -141
- package/docs/04-REFERENCE/testing/examples/04-reference-testing-readme.md +158 -158
- package/docs/04-REFERENCE/testing/examples/fluent-testing.ts +62 -62
- package/docs/04-REFERENCE/testing/examples/health-check.ts +155 -155
- package/docs/04-REFERENCE/testing/examples/integration-test.ts +119 -119
- package/docs/04-REFERENCE/testing/examples/performance-test.ts +183 -183
- package/docs/04-REFERENCE/testing/examples/s3-testing.ts +127 -127
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-01-foundations.md +267 -267
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-02-s3-testing.md +599 -599
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-03-fluent-testing.md +589 -589
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-04-integration-testing.md +699 -699
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-05-debugging.md +478 -478
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-06-cicd-integration.md +463 -463
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-06-preflight-validation.md +131 -131
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-07-best-practices.md +499 -499
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-07-coverage-ci.md +165 -165
- package/docs/04-REFERENCE/testing/modules/04-reference-testing-08-api-reference.md +634 -634
- package/docs/04-REFERENCE/testing/readme.md +86 -86
- package/docs/04-REFERENCE/testing/testing-quick-reference.md +667 -667
- package/docs/04-REFERENCE/testing/testing-readme.md +286 -286
- package/docs/04-REFERENCE/troubleshooting/readme.md +144 -144
- package/docs/04-REFERENCE/troubleshooting/troubleshooting-deno-sftp-compatibility.md +392 -392
- package/docs/template-loading-matrix.md +242 -242
- package/package.json +5 -3
|
@@ -1,552 +1,552 @@
|
|
|
1
|
-
# SDK Decision Tree - Which Approach Should I Use?
|
|
2
|
-
|
|
3
|
-
**Quick navigation to help you choose the right SDK approach for your use case.**
|
|
4
|
-
|
|
5
|
-
> Minimal-first policy: Use native/platform primitives by default. Advanced SDK helpers are optional.
|
|
6
|
-
|
|
7
|
-
Minimal logger snippet (copy/paste):
|
|
8
|
-
|
|
9
|
-
```typescript
|
|
10
|
-
const logger: import('@fluentcommerce/fc-connect-sdk').Logger = {
|
|
11
|
-
debug: (m, meta) => log.debug(m, meta),
|
|
12
|
-
info: (m, meta) => log.info(m, meta),
|
|
13
|
-
warn: (m, meta) => log.warn(m, meta),
|
|
14
|
-
error: (m, err, meta) => log.error(m, { ...(meta ?? {}), error: err?.message }),
|
|
15
|
-
};
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
See also: [Logging Guide](../02-CORE-GUIDES/logging-guide.md)
|
|
19
|
-
|
|
20
|
-
## 🎯 Start Here
|
|
21
|
-
|
|
22
|
-
Answer these questions to find your path:
|
|
23
|
-
|
|
24
|
-
```
|
|
25
|
-
1. What are you trying to do?
|
|
26
|
-
├─ Ingest data INTO Fluent Commerce → [Section A: Ingestion](#a-ingestion-use-cases)
|
|
27
|
-
├─ Extract data FROM Fluent Commerce → [Section B: Extraction](#b-extraction-use-cases)
|
|
28
|
-
├─ Execute GraphQL queries/mutations → [Section C: GraphQL Operations](#c-graphql-operations)
|
|
29
|
-
└─ Custom integration workflow → [Section D: Custom Workflows](#d-custom-workflows)
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
---
|
|
33
|
-
|
|
34
|
-
## A: Ingestion Use Cases
|
|
35
|
-
|
|
36
|
-
**Goal:** Get data into Fluent Commerce
|
|
37
|
-
|
|
38
|
-
### A1: Control CSV to Fluent (Control Groups, Rules)
|
|
39
|
-
|
|
40
|
-
**Use:** `UniversalMapper` + Bulk GraphQL queries (optimized pattern)
|
|
41
|
-
|
|
42
|
-
**Complexity:** 🟡 Intermediate
|
|
43
|
-
|
|
44
|
-
```typescript
|
|
45
|
-
import {
|
|
46
|
-
createClient,
|
|
47
|
-
S3DataSource,
|
|
48
|
-
CSVParserService,
|
|
49
|
-
UniversalMapper,
|
|
50
|
-
} from '@fluentcommerce/fc-connect-sdk';
|
|
51
|
-
|
|
52
|
-
const client = await createClient(ctx); // Versori context auto-detected
|
|
53
|
-
const s3 = new S3DataSource(config, logger);
|
|
54
|
-
const csvParser = new CSVParserService();
|
|
55
|
-
const mapper = new UniversalMapper(mappingConfig, {
|
|
56
|
-
customResolvers: {
|
|
57
|
-
'custom.buildControlRef': (value, sourceData) => {
|
|
58
|
-
// Auto-build controlRef from components
|
|
59
|
-
return `${sourceData.catalogRef}:${sourceData.controlType}:${sourceData.productRef || sourceData.categoryRef}`;
|
|
60
|
-
},
|
|
61
|
-
},
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
// Bulk query existing controls (5x faster than individual queries)
|
|
65
|
-
const existingControls = await bulkQueryControls(client, controlRefs);
|
|
66
|
-
|
|
67
|
-
// Smart upsert with duplicate detection
|
|
68
|
-
for (const record of csvRecords) {
|
|
69
|
-
const mapped = await mapper.map(record);
|
|
70
|
-
const mutation = existingControls.has(mapped.data.ref)
|
|
71
|
-
? updateControlMutation
|
|
72
|
-
: createControlMutation;
|
|
73
|
-
await client.graphql({ query: mutation, variables: mapped.data });
|
|
74
|
-
}
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
**Key Features:**
|
|
78
|
-
|
|
79
|
-
- ✅ 3 CSV pattern options (pre-built, component-based, hybrid)
|
|
80
|
-
- ✅ Bulk GraphQL queries with pagination (5x faster)
|
|
81
|
-
- ✅ Schema validation with ControlSchemaValidator
|
|
82
|
-
- ✅ 3-level duplicate detection (file, row, cross-file)
|
|
83
|
-
- ✅ 20+ metrics tracking
|
|
84
|
-
|
|
85
|
-
**Documentation:**
|
|
86
|
-
|
|
87
|
-
- [S3 Control CSV → GraphQL](../01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-csv-product-event.md)
|
|
88
|
-
- [SFTP Control CSV → GraphQL](../01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-csv-product-event.md)
|
|
89
|
-
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
### A2: XML Orders to Fluent (SFCC, EDI, etc.)
|
|
93
|
-
|
|
94
|
-
**Use:** `GraphQLMutationMapper` (transforms XML → GraphQL mutations)
|
|
95
|
-
|
|
96
|
-
**Complexity:** 🟡 Intermediate
|
|
97
|
-
|
|
98
|
-
```typescript
|
|
99
|
-
import { GraphQLMutationMapper, XMLParserService } from '@fluentcommerce/fc-connect-sdk';
|
|
100
|
-
|
|
101
|
-
const parser = new XMLParserService(logger);
|
|
102
|
-
const mapper = new GraphQLMutationMapper(mappingConfig, logger, { fluentClient: client });
|
|
103
|
-
|
|
104
|
-
// Parse XML
|
|
105
|
-
const xmlData = await parser.parse(xmlString);
|
|
106
|
-
|
|
107
|
-
// Transform to GraphQL mutation
|
|
108
|
-
const mutation = await mapper.generateMutation(xmlData);
|
|
109
|
-
|
|
110
|
-
// Execute
|
|
111
|
-
await client.graphql({
|
|
112
|
-
query: mutation.mutation,
|
|
113
|
-
variables: mutation.variables,
|
|
114
|
-
});
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
**Documentation:**
|
|
118
|
-
|
|
119
|
-
- [GraphQL Mutation Mapping Guide](../02-CORE-GUIDES/mapping/graphql-mutation-mapping/graphql-mutation-mapping-readme.md)
|
|
120
|
-
- [XML Parser](../02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-04-xml-parser.md)
|
|
121
|
-
- [Use Case: SFCC Order Ingestion](../01-TEMPLATES/versori/webhooks/template-webhook-xml-order-ingestion.md)
|
|
122
|
-
|
|
123
|
-
---
|
|
124
|
-
|
|
125
|
-
### A3: Custom Data Source (API, Database, etc.)
|
|
126
|
-
|
|
127
|
-
**Use:** Manual composition (low-level)
|
|
128
|
-
|
|
129
|
-
**Complexity:** 🔴 Advanced
|
|
130
|
-
|
|
131
|
-
```typescript
|
|
132
|
-
import { UniversalMapper, CSVParserService } from '@fluentcommerce/fc-connect-sdk';
|
|
133
|
-
|
|
134
|
-
// 1. Fetch data from your source
|
|
135
|
-
const data = await fetchFromCustomAPI();
|
|
136
|
-
|
|
137
|
-
// 2. Parse/transform
|
|
138
|
-
const parser = new CSVParserService();
|
|
139
|
-
const records = await parser.parse(data);
|
|
140
|
-
|
|
141
|
-
// 3. Map fields
|
|
142
|
-
const mapper = new UniversalMapper(mappingConfig);
|
|
143
|
-
const mappedData = await Promise.all(records.map(r => mapper.map(r)));
|
|
144
|
-
|
|
145
|
-
// 4. Create job and send batches
|
|
146
|
-
const job = await client.createJob({
|
|
147
|
-
name: 'custom-ingestion',
|
|
148
|
-
retailerId: '1',
|
|
149
|
-
meta: { source: 'custom-api' },
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
await client.sendBatch(job.id, {
|
|
153
|
-
action: 'UPSERT',
|
|
154
|
-
entityType: 'INVENTORY',
|
|
155
|
-
entities: mappedData.filter(r => r.success).map(r => r.data),
|
|
156
|
-
});
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
**Documentation:**
|
|
160
|
-
|
|
161
|
-
- [SDK Philosophy](./sdk-philosophy.md) - Understanding composition
|
|
162
|
-
- [Universal Mapping](../02-CORE-GUIDES/mapping/mapping-readme.md)
|
|
163
|
-
- [Client API](../02-CORE-GUIDES/api-reference/modules/api-reference-01-client-api.md)
|
|
164
|
-
|
|
165
|
-
---
|
|
166
|
-
|
|
167
|
-
## B: Extraction Use Cases
|
|
168
|
-
|
|
169
|
-
**Goal:** Get data out of Fluent Commerce
|
|
170
|
-
|
|
171
|
-
### B1: Export Inventory to S3 (JSON/Parquet/CSV)
|
|
172
|
-
|
|
173
|
-
**Use:** `ExtractionOrchestrator` (high-level, recommended)
|
|
174
|
-
|
|
175
|
-
**Complexity:** 🟢 Beginner
|
|
176
|
-
|
|
177
|
-
```typescript
|
|
178
|
-
import { ExtractionOrchestrator } from '@fluentcommerce/fc-connect-sdk';
|
|
179
|
-
|
|
180
|
-
const orchestrator = new ExtractionOrchestrator(client, logger);
|
|
181
|
-
|
|
182
|
-
// Extract with auto-pagination and validation
|
|
183
|
-
const result = await orchestrator.extract({
|
|
184
|
-
query: `query GetInventory($first: Int!, $after: String) {
|
|
185
|
-
inventoryPositions(first: $first, after: $after) {
|
|
186
|
-
edges {
|
|
187
|
-
node { ref productRef locationRef onHand status }
|
|
188
|
-
cursor
|
|
189
|
-
}
|
|
190
|
-
pageInfo {
|
|
191
|
-
hasNextPage
|
|
192
|
-
# Note: Fluent doesn't return endCursor/startCursor - cursors are in edges[].cursor
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
}`,
|
|
196
|
-
variables: { first: 100 },
|
|
197
|
-
resultPath: 'inventoryPositions.edges.node', // Path to nodes for extraction
|
|
198
|
-
outputFormat: 'json', // or 'csv', 'parquet'
|
|
199
|
-
s3Config: {
|
|
200
|
-
bucket: 'my-exports',
|
|
201
|
-
key: 'inventory/export.json',
|
|
202
|
-
region: 'us-east-1',
|
|
203
|
-
},
|
|
204
|
-
// Optional: field mapping and transformation
|
|
205
|
-
fieldMappings: {
|
|
206
|
-
sku: { source: 'ref' },
|
|
207
|
-
quantity: { source: 'onHand', resolver: 'sdk.parseInt' },
|
|
208
|
-
},
|
|
209
|
-
// Optional: validation
|
|
210
|
-
validateRecords: true,
|
|
211
|
-
maxRecords: 10000,
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
console.log(`Exported ${result.stats.recordCount} records`);
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
**Key Features:**
|
|
218
|
-
|
|
219
|
-
- ✅ Auto-pagination (handles cursor-based pagination automatically)
|
|
220
|
-
- ✅ Path-based extraction (extracts data from nested GraphQL responses)
|
|
221
|
-
- ✅ Multiple output formats (JSON, CSV, Parquet)
|
|
222
|
-
- ✅ Built-in validation and error handling
|
|
223
|
-
- ✅ Progress tracking and statistics
|
|
224
|
-
|
|
225
|
-
**Documentation:**
|
|
226
|
-
|
|
227
|
-
- [Extraction Guide](../02-CORE-GUIDES/extraction/extraction-readme.md)
|
|
228
|
-
- [ExtractionOrchestrator Summary](../02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-08-extraction-orchestrator.md)
|
|
229
|
-
- [Export Formats](../02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-06-export-formats.md)
|
|
230
|
-
|
|
231
|
-
---
|
|
232
|
-
|
|
233
|
-
### B2: GraphQL Query with Auto-Pagination
|
|
234
|
-
|
|
235
|
-
**Use:** `client.graphql()` with pagination
|
|
236
|
-
|
|
237
|
-
**Complexity:** 🟡 Intermediate
|
|
238
|
-
|
|
239
|
-
```typescript
|
|
240
|
-
const result = await client.graphql({
|
|
241
|
-
query: `query GetOrders($first: Int, $after: String) {
|
|
242
|
-
orders(first: $first, after: $after) {
|
|
243
|
-
edges { node { id ref status } }
|
|
244
|
-
pageInfo {
|
|
245
|
-
hasNextPage
|
|
246
|
-
# Note: Fluent doesn't return endCursor/startCursor - cursors are in edges[].cursor
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
}`,
|
|
250
|
-
variables: { first: 100 },
|
|
251
|
-
pagination: {
|
|
252
|
-
enabled: true,
|
|
253
|
-
maxPages: 50,
|
|
254
|
-
pageSize: 100,
|
|
255
|
-
},
|
|
256
|
-
});
|
|
257
|
-
|
|
258
|
-
// All pages automatically fetched
|
|
259
|
-
console.log(result.data);
|
|
260
|
-
```
|
|
261
|
-
|
|
262
|
-
**Documentation:**
|
|
263
|
-
|
|
264
|
-
- [Auto-Pagination Guide](../02-CORE-GUIDES/auto-pagination/auto-pagination-readme.md)
|
|
265
|
-
- [GraphQL Operations](../02-CORE-GUIDES/api-reference/modules/api-reference-01-client-api.md#graphql-operations)
|
|
266
|
-
|
|
267
|
-
---
|
|
268
|
-
|
|
269
|
-
## C: GraphQL Operations
|
|
270
|
-
|
|
271
|
-
**Goal:** Execute GraphQL queries or mutations directly
|
|
272
|
-
|
|
273
|
-
### C1: Simple Query (Single Page)
|
|
274
|
-
|
|
275
|
-
**Use:** `client.graphql()`
|
|
276
|
-
|
|
277
|
-
**Complexity:** 🟢 Beginner
|
|
278
|
-
|
|
279
|
-
```typescript
|
|
280
|
-
const result = await client.graphql({
|
|
281
|
-
query: `query GetProduct($ref: String!) {
|
|
282
|
-
product(ref: $ref) { id name status }
|
|
283
|
-
}`,
|
|
284
|
-
variables: { ref: 'PRODUCT-123' },
|
|
285
|
-
});
|
|
286
|
-
|
|
287
|
-
console.log(result.data);
|
|
288
|
-
```
|
|
289
|
-
|
|
290
|
-
---
|
|
291
|
-
|
|
292
|
-
### C2: Mutation (Create/Update)
|
|
293
|
-
|
|
294
|
-
**Use:** `client.graphql()`
|
|
295
|
-
|
|
296
|
-
**Complexity:** 🟢 Beginner
|
|
297
|
-
|
|
298
|
-
```typescript
|
|
299
|
-
const result = await client.graphql({
|
|
300
|
-
query: `mutation CreateInventory($input: CreateInventoryInput!) {
|
|
301
|
-
createInventory(input: $input) { id ref }
|
|
302
|
-
}`,
|
|
303
|
-
variables: {
|
|
304
|
-
input: {
|
|
305
|
-
ref: 'INV-001',
|
|
306
|
-
skuRef: 'SKU-123',
|
|
307
|
-
locationRef: 'DC-01',
|
|
308
|
-
qty: 100,
|
|
309
|
-
},
|
|
310
|
-
},
|
|
311
|
-
});
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
---
|
|
315
|
-
|
|
316
|
-
## D: Custom Workflows
|
|
317
|
-
|
|
318
|
-
**Goal:** Build custom integration logic
|
|
319
|
-
|
|
320
|
-
### D1: Multi-Source Data Aggregation
|
|
321
|
-
|
|
322
|
-
**Complexity:** 🔴 Advanced
|
|
323
|
-
|
|
324
|
-
**Approach:** Compose SDK services manually
|
|
325
|
-
|
|
326
|
-
```typescript
|
|
327
|
-
// 1. Fetch from multiple sources in parallel
|
|
328
|
-
const [s3Data, sftpData, apiData] = await Promise.all([
|
|
329
|
-
s3Source.downloadFile('file1.csv'),
|
|
330
|
-
sftpSource.downloadFile('file2.csv'),
|
|
331
|
-
fetchFromAPI(),
|
|
332
|
-
]);
|
|
333
|
-
|
|
334
|
-
// 2. Parse each format
|
|
335
|
-
const logger = createConsoleLogger();
|
|
336
|
-
const csvParser = new CSVParserService();
|
|
337
|
-
const parquetParser = new ParquetParserService(logger);
|
|
338
|
-
const [s3Records, sftpRecords] = await Promise.all([
|
|
339
|
-
csvParser.parse(s3Data),
|
|
340
|
-
csvParser.parse(sftpData),
|
|
341
|
-
]);
|
|
342
|
-
|
|
343
|
-
// 3. Aggregate and deduplicate
|
|
344
|
-
const aggregated = [...s3Records, ...sftpRecords, ...apiData];
|
|
345
|
-
const deduplicated = deduplicateByKey(aggregated, 'sku');
|
|
346
|
-
|
|
347
|
-
// 4. Map and send
|
|
348
|
-
const mapper = new UniversalMapper(mappingConfig);
|
|
349
|
-
const mapped = await Promise.all(deduplicated.map(r => mapper.map(r)));
|
|
350
|
-
|
|
351
|
-
const job = await client.createJob({ name: 'aggregated-ingestion', retailerId: '1' });
|
|
352
|
-
await client.sendBatch(job.id, {
|
|
353
|
-
action: 'UPSERT',
|
|
354
|
-
entityType: 'INVENTORY',
|
|
355
|
-
entities: mapped.filter(r => r.success).map(r => r.data),
|
|
356
|
-
});
|
|
357
|
-
```
|
|
358
|
-
|
|
359
|
-
**Documentation:**
|
|
360
|
-
|
|
361
|
-
- [SDK Philosophy](./sdk-philosophy.md)
|
|
362
|
-
- [Custom Workflows Pattern](../01-TEMPLATES/standalone/multi-source-aggregation.md)
|
|
363
|
-
|
|
364
|
-
---
|
|
365
|
-
|
|
366
|
-
### D2: Real-Time Webhook Processing
|
|
367
|
-
|
|
368
|
-
**Complexity:** 🟡 Intermediate
|
|
369
|
-
|
|
370
|
-
**Approach:** Manual composition with webhook parsing
|
|
371
|
-
|
|
372
|
-
```typescript
|
|
373
|
-
import { UniversalMapper } from '@fluentcommerce/fc-connect-sdk';
|
|
374
|
-
|
|
375
|
-
// Parse incoming webhook (Versori context)
|
|
376
|
-
const payload = typeof request.body === 'string' ? JSON.parse(request.body) : request.body;
|
|
377
|
-
|
|
378
|
-
// Map and process
|
|
379
|
-
const mapper = new UniversalMapper(mappingConfig);
|
|
380
|
-
const mapped = await mapper.map(payload);
|
|
381
|
-
|
|
382
|
-
// Send to Fluent
|
|
383
|
-
await client.graphql({
|
|
384
|
-
query: createOrderMutation,
|
|
385
|
-
variables: { input: mapped.data },
|
|
386
|
-
});
|
|
387
|
-
```
|
|
388
|
-
|
|
389
|
-
**Documentation:**
|
|
390
|
-
|
|
391
|
-
- [Webhook Validation](../02-CORE-GUIDES/webhook-validation/webhook-validation-readme.md)
|
|
392
|
-
- [Real-Time Processing Pattern](../03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-01-real-time-processing.md)
|
|
393
|
-
|
|
394
|
-
---
|
|
395
|
-
|
|
396
|
-
## Quick Reference Table
|
|
397
|
-
|
|
398
|
-
| Use Case | SDK Component | Complexity | Documentation |
|
|
399
|
-
| ---------------------------- | -------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------ |
|
|
400
|
-
| Control CSV → Fluent | `UniversalMapper` + Bulk GraphQL | 🟡 Medium | [S3 Control CSV](../01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-csv-product-event.md) |
|
|
401
|
-
| XML → Fluent (Orders) | `GraphQLMutationMapper` | 🟡 Medium | [GraphQL Mutation Mapping](../02-CORE-GUIDES/mapping/graphql-mutation-mapping/graphql-mutation-mapping-readme.md) |
|
|
402
|
-
| Fluent → S3/JSON/CSV/Parquet | `ExtractionOrchestrator` | 🟢 Easy | [Extraction](../02-CORE-GUIDES/extraction/extraction-readme.md) |
|
|
403
|
-
| GraphQL Query (single) | `client.graphql()` | 🟢 Easy | [Client API](../02-CORE-GUIDES/api-reference/modules/api-reference-01-client-api.md) |
|
|
404
|
-
| GraphQL Query (paginated) | `client.graphql({ pagination })` | 🟡 Medium | [Auto-Pagination](../02-CORE-GUIDES/auto-pagination/auto-pagination-readme.md) |
|
|
405
|
-
| Webhook Processing | `parseWebhookRequest` + manual | 🟡 Medium | [Webhook Validation](../02-CORE-GUIDES/webhook-validation/webhook-validation-readme.md) |
|
|
406
|
-
| Custom Data Source | Manual composition | 🔴 Advanced | [SDK Philosophy](./sdk-philosophy.md) |
|
|
407
|
-
| Multi-Source Aggregation | Manual composition | 🔴 Advanced | [Custom Workflows](../01-TEMPLATES/patterns/) |
|
|
408
|
-
|
|
409
|
-
---
|
|
410
|
-
|
|
411
|
-
## Complexity Legend
|
|
412
|
-
|
|
413
|
-
- 🟢 **Beginner** - Use high-level orchestrators/services, minimal code, opinionated
|
|
414
|
-
- 🟡 **Intermediate** - Compose 2-3 SDK services, some configuration needed
|
|
415
|
-
- 🔴 **Advanced** - Full manual composition, custom parsers/resolvers, deep understanding required
|
|
416
|
-
|
|
417
|
-
---
|
|
418
|
-
|
|
419
|
-
## Common Questions
|
|
420
|
-
|
|
421
|
-
### Q: Should I compose services manually?
|
|
422
|
-
|
|
423
|
-
**Always compose services manually for maximum flexibility:**
|
|
424
|
-
|
|
425
|
-
- ✅ Custom data source (API, database, etc.)
|
|
426
|
-
- ✅ Complex multi-step transformations
|
|
427
|
-
- ✅ Non-standard file formats
|
|
428
|
-
- ✅ Full control over job creation/batching
|
|
429
|
-
- ✅ Standard CSV/Parquet → Fluent ingestion (use building blocks)
|
|
430
|
-
- ✅ Better testability and maintainability
|
|
431
|
-
|
|
432
|
-
### Q: How do I add custom field transformations?
|
|
433
|
-
|
|
434
|
-
**Use Custom Resolvers in UniversalMapper:**
|
|
435
|
-
|
|
436
|
-
```typescript
|
|
437
|
-
const mapper = new UniversalMapper(config, {
|
|
438
|
-
customResolvers: {
|
|
439
|
-
'custom.calculatePrice': (value, sourceData, helpers) => {
|
|
440
|
-
return helpers.parseFloatSafe(value, 0) * 1.1; // Add 10%
|
|
441
|
-
},
|
|
442
|
-
},
|
|
443
|
-
});
|
|
444
|
-
```
|
|
445
|
-
|
|
446
|
-
**Documentation:** [Custom Resolvers](../02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-guide.md)
|
|
447
|
-
|
|
448
|
-
### Q: How do I prevent duplicate file processing?
|
|
449
|
-
|
|
450
|
-
**Use State Management:**
|
|
451
|
-
|
|
452
|
-
```typescript
|
|
453
|
-
import { StateService, VersoriKVAdapter } from '@fluentcommerce/fc-connect-sdk';
|
|
454
|
-
|
|
455
|
-
const stateService = new StateService(new VersoriKVAdapter(kv));
|
|
456
|
-
|
|
457
|
-
const processed = await stateService.isFileProcessed(fileKey);
|
|
458
|
-
if (!processed) {
|
|
459
|
-
await processFile();
|
|
460
|
-
await stateService.markFileProcessed(fileKey, metadata);
|
|
461
|
-
}
|
|
462
|
-
```
|
|
463
|
-
|
|
464
|
-
**Documentation:** [State Management](../02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-07-state-management.md)
|
|
465
|
-
|
|
466
|
-
### Q: Can I use multiple Fluent Commerce accounts/retailers?
|
|
467
|
-
|
|
468
|
-
**Yes, create multiple clients:**
|
|
469
|
-
|
|
470
|
-
```typescript
|
|
471
|
-
const client1 = await createClient({ config: { retailerId: '1', ... } });
|
|
472
|
-
const client2 = await createClient({ config: { retailerId: '2', ... } });
|
|
473
|
-
|
|
474
|
-
// Use in parallel
|
|
475
|
-
await Promise.all([
|
|
476
|
-
client1.createJob({ ... }),
|
|
477
|
-
client2.createJob({ ... })
|
|
478
|
-
]);
|
|
479
|
-
```
|
|
480
|
-
|
|
481
|
-
**Documentation:** [Multiple Connections](../03-PATTERN-GUIDES/multiple-connections/multiple-connections-readme.md)
|
|
482
|
-
|
|
483
|
-
### Q: What if I need to process 100GB+ files?
|
|
484
|
-
|
|
485
|
-
**Use streaming and chunking with building blocks:**
|
|
486
|
-
|
|
487
|
-
```typescript
|
|
488
|
-
import {
|
|
489
|
-
S3DataSource,
|
|
490
|
-
CSVParserService,
|
|
491
|
-
UniversalMapper,
|
|
492
|
-
createClient,
|
|
493
|
-
} from '@fluentcommerce/fc-connect-sdk';
|
|
494
|
-
|
|
495
|
-
const s3 = new S3DataSource(config, logger);
|
|
496
|
-
const parser = new CSVParserService({ streaming: true }); // Enable streaming
|
|
497
|
-
const mapper = new UniversalMapper(mappingConfig);
|
|
498
|
-
const client = await createClient({ config });
|
|
499
|
-
|
|
500
|
-
// Create job
|
|
501
|
-
const job = await client.createJob({
|
|
502
|
-
name: 'Large File Processing',
|
|
503
|
-
retailerId: '1',
|
|
504
|
-
});
|
|
505
|
-
|
|
506
|
-
// Stream and process in chunks
|
|
507
|
-
const stream = await s3.streamFile('large-file.csv');
|
|
508
|
-
const recordStream = await parser.parseStream(stream);
|
|
509
|
-
|
|
510
|
-
let batch = [];
|
|
511
|
-
for await (const record of recordStream) {
|
|
512
|
-
const result = await mapper.map(record);
|
|
513
|
-
if (result.success) {
|
|
514
|
-
batch.push(result.data);
|
|
515
|
-
|
|
516
|
-
// Send when batch reaches 1000
|
|
517
|
-
if (batch.length >= 1000) {
|
|
518
|
-
await client.sendBatch(job.id, {
|
|
519
|
-
action: 'UPSERT',
|
|
520
|
-
entityType: 'INVENTORY',
|
|
521
|
-
entities: batch,
|
|
522
|
-
});
|
|
523
|
-
batch = [];
|
|
524
|
-
}
|
|
525
|
-
}
|
|
526
|
-
}
|
|
527
|
-
|
|
528
|
-
// Send remaining records
|
|
529
|
-
if (batch.length > 0) {
|
|
530
|
-
await client.sendBatch(job.id, {
|
|
531
|
-
action: 'UPSERT',
|
|
532
|
-
entityType: 'INVENTORY',
|
|
533
|
-
entities: batch,
|
|
534
|
-
});
|
|
535
|
-
}
|
|
536
|
-
```
|
|
537
|
-
|
|
538
|
-
**Documentation:** [Performance Optimization](../02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-08-performance-optimization.md)
|
|
539
|
-
|
|
540
|
-
---
|
|
541
|
-
|
|
542
|
-
## Still Stuck?
|
|
543
|
-
|
|
544
|
-
1. **🔧 Debugging:** [`troubleshooting-quick-reference.md`](./troubleshooting-quick-reference.md) - Fix 90% of issues in 5 steps
|
|
545
|
-
2. **Check Examples:** [`docs/01-TEMPLATES/`](../01-TEMPLATES/) - 30+ real-world scenarios
|
|
546
|
-
3. **Read Philosophy:** [`sdk-philosophy.md`](./sdk-philosophy.md) - Understand the "why"
|
|
547
|
-
4. **API Reference:** [`api-reference/`](../02-CORE-GUIDES/api-reference/) - Complete method documentation
|
|
548
|
-
5. **Common Patterns:** [`patterns/`](../01-TEMPLATES/patterns/) - Reusable solutions
|
|
549
|
-
|
|
550
|
-
---
|
|
551
|
-
|
|
552
|
-
**[← Back to Getting Started](./getting-started.md)** | **[Troubleshooting →](./troubleshooting-quick-reference.md)** | **[API Reference →](../02-CORE-GUIDES/api-reference/api-reference-readme.md)**
|
|
1
|
+
# SDK Decision Tree - Which Approach Should I Use?
|
|
2
|
+
|
|
3
|
+
**Quick navigation to help you choose the right SDK approach for your use case.**
|
|
4
|
+
|
|
5
|
+
> Minimal-first policy: Use native/platform primitives by default. Advanced SDK helpers are optional.
|
|
6
|
+
|
|
7
|
+
Minimal logger snippet (copy/paste):
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
const logger: import('@fluentcommerce/fc-connect-sdk').Logger = {
|
|
11
|
+
debug: (m, meta) => log.debug(m, meta),
|
|
12
|
+
info: (m, meta) => log.info(m, meta),
|
|
13
|
+
warn: (m, meta) => log.warn(m, meta),
|
|
14
|
+
error: (m, err, meta) => log.error(m, { ...(meta ?? {}), error: err?.message }),
|
|
15
|
+
};
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
See also: [Logging Guide](../02-CORE-GUIDES/logging-guide.md)
|
|
19
|
+
|
|
20
|
+
## 🎯 Start Here
|
|
21
|
+
|
|
22
|
+
Answer these questions to find your path:
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
1. What are you trying to do?
|
|
26
|
+
├─ Ingest data INTO Fluent Commerce → [Section A: Ingestion](#a-ingestion-use-cases)
|
|
27
|
+
├─ Extract data FROM Fluent Commerce → [Section B: Extraction](#b-extraction-use-cases)
|
|
28
|
+
├─ Execute GraphQL queries/mutations → [Section C: GraphQL Operations](#c-graphql-operations)
|
|
29
|
+
└─ Custom integration workflow → [Section D: Custom Workflows](#d-custom-workflows)
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## A: Ingestion Use Cases
|
|
35
|
+
|
|
36
|
+
**Goal:** Get data into Fluent Commerce
|
|
37
|
+
|
|
38
|
+
### A1: Control CSV to Fluent (Control Groups, Rules)
|
|
39
|
+
|
|
40
|
+
**Use:** `UniversalMapper` + Bulk GraphQL queries (optimized pattern)
|
|
41
|
+
|
|
42
|
+
**Complexity:** 🟡 Intermediate
|
|
43
|
+
|
|
44
|
+
```typescript
|
|
45
|
+
import {
|
|
46
|
+
createClient,
|
|
47
|
+
S3DataSource,
|
|
48
|
+
CSVParserService,
|
|
49
|
+
UniversalMapper,
|
|
50
|
+
} from '@fluentcommerce/fc-connect-sdk';
|
|
51
|
+
|
|
52
|
+
const client = await createClient(ctx); // Versori context auto-detected
|
|
53
|
+
const s3 = new S3DataSource(config, logger);
|
|
54
|
+
const csvParser = new CSVParserService();
|
|
55
|
+
const mapper = new UniversalMapper(mappingConfig, {
|
|
56
|
+
customResolvers: {
|
|
57
|
+
'custom.buildControlRef': (value, sourceData) => {
|
|
58
|
+
// Auto-build controlRef from components
|
|
59
|
+
return `${sourceData.catalogRef}:${sourceData.controlType}:${sourceData.productRef || sourceData.categoryRef}`;
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
// Bulk query existing controls (5x faster than individual queries)
|
|
65
|
+
const existingControls = await bulkQueryControls(client, controlRefs);
|
|
66
|
+
|
|
67
|
+
// Smart upsert with duplicate detection
|
|
68
|
+
for (const record of csvRecords) {
|
|
69
|
+
const mapped = await mapper.map(record);
|
|
70
|
+
const mutation = existingControls.has(mapped.data.ref)
|
|
71
|
+
? updateControlMutation
|
|
72
|
+
: createControlMutation;
|
|
73
|
+
await client.graphql({ query: mutation, variables: mapped.data });
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**Key Features:**
|
|
78
|
+
|
|
79
|
+
- ✅ 3 CSV pattern options (pre-built, component-based, hybrid)
|
|
80
|
+
- ✅ Bulk GraphQL queries with pagination (5x faster)
|
|
81
|
+
- ✅ Schema validation with ControlSchemaValidator
|
|
82
|
+
- ✅ 3-level duplicate detection (file, row, cross-file)
|
|
83
|
+
- ✅ 20+ metrics tracking
|
|
84
|
+
|
|
85
|
+
**Documentation:**
|
|
86
|
+
|
|
87
|
+
- [S3 Control CSV → GraphQL](../01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-csv-product-event.md)
|
|
88
|
+
- [SFTP Control CSV → GraphQL](../01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-sftp-csv-product-event.md)
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
### A2: XML Orders to Fluent (SFCC, EDI, etc.)
|
|
93
|
+
|
|
94
|
+
**Use:** `GraphQLMutationMapper` (transforms XML → GraphQL mutations)
|
|
95
|
+
|
|
96
|
+
**Complexity:** 🟡 Intermediate
|
|
97
|
+
|
|
98
|
+
```typescript
|
|
99
|
+
import { GraphQLMutationMapper, XMLParserService } from '@fluentcommerce/fc-connect-sdk';
|
|
100
|
+
|
|
101
|
+
const parser = new XMLParserService(logger);
|
|
102
|
+
const mapper = new GraphQLMutationMapper(mappingConfig, logger, { fluentClient: client });
|
|
103
|
+
|
|
104
|
+
// Parse XML
|
|
105
|
+
const xmlData = await parser.parse(xmlString);
|
|
106
|
+
|
|
107
|
+
// Transform to GraphQL mutation
|
|
108
|
+
const mutation = await mapper.generateMutation(xmlData);
|
|
109
|
+
|
|
110
|
+
// Execute
|
|
111
|
+
await client.graphql({
|
|
112
|
+
query: mutation.mutation,
|
|
113
|
+
variables: mutation.variables,
|
|
114
|
+
});
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**Documentation:**
|
|
118
|
+
|
|
119
|
+
- [GraphQL Mutation Mapping Guide](../02-CORE-GUIDES/mapping/graphql-mutation-mapping/graphql-mutation-mapping-readme.md)
|
|
120
|
+
- [XML Parser](../02-CORE-GUIDES/parsers/modules/02-core-guides-parsers-04-xml-parser.md)
|
|
121
|
+
- [Use Case: SFCC Order Ingestion](../01-TEMPLATES/versori/webhooks/template-webhook-xml-order-ingestion.md)
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
### A3: Custom Data Source (API, Database, etc.)
|
|
126
|
+
|
|
127
|
+
**Use:** Manual composition (low-level)
|
|
128
|
+
|
|
129
|
+
**Complexity:** 🔴 Advanced
|
|
130
|
+
|
|
131
|
+
```typescript
|
|
132
|
+
import { UniversalMapper, CSVParserService } from '@fluentcommerce/fc-connect-sdk';
|
|
133
|
+
|
|
134
|
+
// 1. Fetch data from your source
|
|
135
|
+
const data = await fetchFromCustomAPI();
|
|
136
|
+
|
|
137
|
+
// 2. Parse/transform
|
|
138
|
+
const parser = new CSVParserService();
|
|
139
|
+
const records = await parser.parse(data);
|
|
140
|
+
|
|
141
|
+
// 3. Map fields
|
|
142
|
+
const mapper = new UniversalMapper(mappingConfig);
|
|
143
|
+
const mappedData = await Promise.all(records.map(r => mapper.map(r)));
|
|
144
|
+
|
|
145
|
+
// 4. Create job and send batches
|
|
146
|
+
const job = await client.createJob({
|
|
147
|
+
name: 'custom-ingestion',
|
|
148
|
+
retailerId: '1',
|
|
149
|
+
meta: { source: 'custom-api' },
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
await client.sendBatch(job.id, {
|
|
153
|
+
action: 'UPSERT',
|
|
154
|
+
entityType: 'INVENTORY',
|
|
155
|
+
entities: mappedData.filter(r => r.success).map(r => r.data),
|
|
156
|
+
});
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
**Documentation:**
|
|
160
|
+
|
|
161
|
+
- [SDK Philosophy](./sdk-philosophy.md) - Understanding composition
|
|
162
|
+
- [Universal Mapping](../02-CORE-GUIDES/mapping/mapping-readme.md)
|
|
163
|
+
- [Client API](../02-CORE-GUIDES/api-reference/modules/api-reference-01-client-api.md)
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## B: Extraction Use Cases
|
|
168
|
+
|
|
169
|
+
**Goal:** Get data out of Fluent Commerce
|
|
170
|
+
|
|
171
|
+
### B1: Export Inventory to S3 (JSON/Parquet/CSV)
|
|
172
|
+
|
|
173
|
+
**Use:** `ExtractionOrchestrator` (high-level, recommended)
|
|
174
|
+
|
|
175
|
+
**Complexity:** 🟢 Beginner
|
|
176
|
+
|
|
177
|
+
```typescript
|
|
178
|
+
import { ExtractionOrchestrator } from '@fluentcommerce/fc-connect-sdk';
|
|
179
|
+
|
|
180
|
+
const orchestrator = new ExtractionOrchestrator(client, logger);
|
|
181
|
+
|
|
182
|
+
// Extract with auto-pagination and validation
|
|
183
|
+
const result = await orchestrator.extract({
|
|
184
|
+
query: `query GetInventory($first: Int!, $after: String) {
|
|
185
|
+
inventoryPositions(first: $first, after: $after) {
|
|
186
|
+
edges {
|
|
187
|
+
node { ref productRef locationRef onHand status }
|
|
188
|
+
cursor
|
|
189
|
+
}
|
|
190
|
+
pageInfo {
|
|
191
|
+
hasNextPage
|
|
192
|
+
# Note: Fluent doesn't return endCursor/startCursor - cursors are in edges[].cursor
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}`,
|
|
196
|
+
variables: { first: 100 },
|
|
197
|
+
resultPath: 'inventoryPositions.edges.node', // Path to nodes for extraction
|
|
198
|
+
outputFormat: 'json', // or 'csv', 'parquet'
|
|
199
|
+
s3Config: {
|
|
200
|
+
bucket: 'my-exports',
|
|
201
|
+
key: 'inventory/export.json',
|
|
202
|
+
region: 'us-east-1',
|
|
203
|
+
},
|
|
204
|
+
// Optional: field mapping and transformation
|
|
205
|
+
fieldMappings: {
|
|
206
|
+
sku: { source: 'ref' },
|
|
207
|
+
quantity: { source: 'onHand', resolver: 'sdk.parseInt' },
|
|
208
|
+
},
|
|
209
|
+
// Optional: validation
|
|
210
|
+
validateRecords: true,
|
|
211
|
+
maxRecords: 10000,
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
console.log(`Exported ${result.stats.recordCount} records`);
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
**Key Features:**
|
|
218
|
+
|
|
219
|
+
- ✅ Auto-pagination (handles cursor-based pagination automatically)
|
|
220
|
+
- ✅ Path-based extraction (extracts data from nested GraphQL responses)
|
|
221
|
+
- ✅ Multiple output formats (JSON, CSV, Parquet)
|
|
222
|
+
- ✅ Built-in validation and error handling
|
|
223
|
+
- ✅ Progress tracking and statistics
|
|
224
|
+
|
|
225
|
+
**Documentation:**
|
|
226
|
+
|
|
227
|
+
- [Extraction Guide](../02-CORE-GUIDES/extraction/extraction-readme.md)
|
|
228
|
+
- [ExtractionOrchestrator Summary](../02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-08-extraction-orchestrator.md)
|
|
229
|
+
- [Export Formats](../02-CORE-GUIDES/extraction/modules/02-core-guides-extraction-06-export-formats.md)
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
### B2: GraphQL Query with Auto-Pagination
|
|
234
|
+
|
|
235
|
+
**Use:** `client.graphql()` with pagination
|
|
236
|
+
|
|
237
|
+
**Complexity:** 🟡 Intermediate
|
|
238
|
+
|
|
239
|
+
```typescript
|
|
240
|
+
const result = await client.graphql({
|
|
241
|
+
query: `query GetOrders($first: Int, $after: String) {
|
|
242
|
+
orders(first: $first, after: $after) {
|
|
243
|
+
edges { node { id ref status } }
|
|
244
|
+
pageInfo {
|
|
245
|
+
hasNextPage
|
|
246
|
+
# Note: Fluent doesn't return endCursor/startCursor - cursors are in edges[].cursor
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}`,
|
|
250
|
+
variables: { first: 100 },
|
|
251
|
+
pagination: {
|
|
252
|
+
enabled: true,
|
|
253
|
+
maxPages: 50,
|
|
254
|
+
pageSize: 100,
|
|
255
|
+
},
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
// All pages automatically fetched
|
|
259
|
+
console.log(result.data);
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
**Documentation:**
|
|
263
|
+
|
|
264
|
+
- [Auto-Pagination Guide](../02-CORE-GUIDES/auto-pagination/auto-pagination-readme.md)
|
|
265
|
+
- [GraphQL Operations](../02-CORE-GUIDES/api-reference/modules/api-reference-01-client-api.md#graphql-operations)
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## C: GraphQL Operations
|
|
270
|
+
|
|
271
|
+
**Goal:** Execute GraphQL queries or mutations directly
|
|
272
|
+
|
|
273
|
+
### C1: Simple Query (Single Page)
|
|
274
|
+
|
|
275
|
+
**Use:** `client.graphql()`
|
|
276
|
+
|
|
277
|
+
**Complexity:** 🟢 Beginner
|
|
278
|
+
|
|
279
|
+
```typescript
|
|
280
|
+
const result = await client.graphql({
|
|
281
|
+
query: `query GetProduct($ref: String!) {
|
|
282
|
+
product(ref: $ref) { id name status }
|
|
283
|
+
}`,
|
|
284
|
+
variables: { ref: 'PRODUCT-123' },
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
console.log(result.data);
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
### C2: Mutation (Create/Update)
|
|
293
|
+
|
|
294
|
+
**Use:** `client.graphql()`
|
|
295
|
+
|
|
296
|
+
**Complexity:** 🟢 Beginner
|
|
297
|
+
|
|
298
|
+
```typescript
|
|
299
|
+
const result = await client.graphql({
|
|
300
|
+
query: `mutation CreateInventory($input: CreateInventoryInput!) {
|
|
301
|
+
createInventory(input: $input) { id ref }
|
|
302
|
+
}`,
|
|
303
|
+
variables: {
|
|
304
|
+
input: {
|
|
305
|
+
ref: 'INV-001',
|
|
306
|
+
skuRef: 'SKU-123',
|
|
307
|
+
locationRef: 'DC-01',
|
|
308
|
+
qty: 100,
|
|
309
|
+
},
|
|
310
|
+
},
|
|
311
|
+
});
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
## D: Custom Workflows
|
|
317
|
+
|
|
318
|
+
**Goal:** Build custom integration logic
|
|
319
|
+
|
|
320
|
+
### D1: Multi-Source Data Aggregation
|
|
321
|
+
|
|
322
|
+
**Complexity:** 🔴 Advanced
|
|
323
|
+
|
|
324
|
+
**Approach:** Compose SDK services manually
|
|
325
|
+
|
|
326
|
+
```typescript
|
|
327
|
+
// 1. Fetch from multiple sources in parallel
|
|
328
|
+
const [s3Data, sftpData, apiData] = await Promise.all([
|
|
329
|
+
s3Source.downloadFile('file1.csv'),
|
|
330
|
+
sftpSource.downloadFile('file2.csv'),
|
|
331
|
+
fetchFromAPI(),
|
|
332
|
+
]);
|
|
333
|
+
|
|
334
|
+
// 2. Parse each format
|
|
335
|
+
const logger = createConsoleLogger();
|
|
336
|
+
const csvParser = new CSVParserService();
|
|
337
|
+
const parquetParser = new ParquetParserService(logger);
|
|
338
|
+
const [s3Records, sftpRecords] = await Promise.all([
|
|
339
|
+
csvParser.parse(s3Data),
|
|
340
|
+
csvParser.parse(sftpData),
|
|
341
|
+
]);
|
|
342
|
+
|
|
343
|
+
// 3. Aggregate and deduplicate
|
|
344
|
+
const aggregated = [...s3Records, ...sftpRecords, ...apiData];
|
|
345
|
+
const deduplicated = deduplicateByKey(aggregated, 'sku');
|
|
346
|
+
|
|
347
|
+
// 4. Map and send
|
|
348
|
+
const mapper = new UniversalMapper(mappingConfig);
|
|
349
|
+
const mapped = await Promise.all(deduplicated.map(r => mapper.map(r)));
|
|
350
|
+
|
|
351
|
+
const job = await client.createJob({ name: 'aggregated-ingestion', retailerId: '1' });
|
|
352
|
+
await client.sendBatch(job.id, {
|
|
353
|
+
action: 'UPSERT',
|
|
354
|
+
entityType: 'INVENTORY',
|
|
355
|
+
entities: mapped.filter(r => r.success).map(r => r.data),
|
|
356
|
+
});
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
**Documentation:**
|
|
360
|
+
|
|
361
|
+
- [SDK Philosophy](./sdk-philosophy.md)
|
|
362
|
+
- [Custom Workflows Pattern](../01-TEMPLATES/standalone/multi-source-aggregation.md)
|
|
363
|
+
|
|
364
|
+
---
|
|
365
|
+
|
|
366
|
+
### D2: Real-Time Webhook Processing
|
|
367
|
+
|
|
368
|
+
**Complexity:** 🟡 Intermediate
|
|
369
|
+
|
|
370
|
+
**Approach:** Manual composition with webhook parsing
|
|
371
|
+
|
|
372
|
+
```typescript
|
|
373
|
+
import { UniversalMapper } from '@fluentcommerce/fc-connect-sdk';
|
|
374
|
+
|
|
375
|
+
// Parse incoming webhook (Versori context)
|
|
376
|
+
const payload = typeof request.body === 'string' ? JSON.parse(request.body) : request.body;
|
|
377
|
+
|
|
378
|
+
// Map and process
|
|
379
|
+
const mapper = new UniversalMapper(mappingConfig);
|
|
380
|
+
const mapped = await mapper.map(payload);
|
|
381
|
+
|
|
382
|
+
// Send to Fluent
|
|
383
|
+
await client.graphql({
|
|
384
|
+
query: createOrderMutation,
|
|
385
|
+
variables: { input: mapped.data },
|
|
386
|
+
});
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
**Documentation:**
|
|
390
|
+
|
|
391
|
+
- [Webhook Validation](../02-CORE-GUIDES/webhook-validation/webhook-validation-readme.md)
|
|
392
|
+
- [Real-Time Processing Pattern](../03-PATTERN-GUIDES/integration-patterns/modules/integration-patterns-01-real-time-processing.md)
|
|
393
|
+
|
|
394
|
+
---
|
|
395
|
+
|
|
396
|
+
## Quick Reference Table
|
|
397
|
+
|
|
398
|
+
| Use Case | SDK Component | Complexity | Documentation |
|
|
399
|
+
| ---------------------------- | -------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------ |
|
|
400
|
+
| Control CSV → Fluent | `UniversalMapper` + Bulk GraphQL | 🟡 Medium | [S3 Control CSV](../01-TEMPLATES/versori/workflows/ingestion/event-api/template-ingestion-s3-csv-product-event.md) |
|
|
401
|
+
| XML → Fluent (Orders) | `GraphQLMutationMapper` | 🟡 Medium | [GraphQL Mutation Mapping](../02-CORE-GUIDES/mapping/graphql-mutation-mapping/graphql-mutation-mapping-readme.md) |
|
|
402
|
+
| Fluent → S3/JSON/CSV/Parquet | `ExtractionOrchestrator` | 🟢 Easy | [Extraction](../02-CORE-GUIDES/extraction/extraction-readme.md) |
|
|
403
|
+
| GraphQL Query (single) | `client.graphql()` | 🟢 Easy | [Client API](../02-CORE-GUIDES/api-reference/modules/api-reference-01-client-api.md) |
|
|
404
|
+
| GraphQL Query (paginated) | `client.graphql({ pagination })` | 🟡 Medium | [Auto-Pagination](../02-CORE-GUIDES/auto-pagination/auto-pagination-readme.md) |
|
|
405
|
+
| Webhook Processing | `parseWebhookRequest` + manual | 🟡 Medium | [Webhook Validation](../02-CORE-GUIDES/webhook-validation/webhook-validation-readme.md) |
|
|
406
|
+
| Custom Data Source | Manual composition | 🔴 Advanced | [SDK Philosophy](./sdk-philosophy.md) |
|
|
407
|
+
| Multi-Source Aggregation | Manual composition | 🔴 Advanced | [Custom Workflows](../01-TEMPLATES/patterns/) |
|
|
408
|
+
|
|
409
|
+
---
|
|
410
|
+
|
|
411
|
+
## Complexity Legend
|
|
412
|
+
|
|
413
|
+
- 🟢 **Beginner** - Use high-level orchestrators/services, minimal code, opinionated
|
|
414
|
+
- 🟡 **Intermediate** - Compose 2-3 SDK services, some configuration needed
|
|
415
|
+
- 🔴 **Advanced** - Full manual composition, custom parsers/resolvers, deep understanding required
|
|
416
|
+
|
|
417
|
+
---
|
|
418
|
+
|
|
419
|
+
## Common Questions
|
|
420
|
+
|
|
421
|
+
### Q: Should I compose services manually?
|
|
422
|
+
|
|
423
|
+
**Always compose services manually for maximum flexibility:**
|
|
424
|
+
|
|
425
|
+
- ✅ Custom data source (API, database, etc.)
|
|
426
|
+
- ✅ Complex multi-step transformations
|
|
427
|
+
- ✅ Non-standard file formats
|
|
428
|
+
- ✅ Full control over job creation/batching
|
|
429
|
+
- ✅ Standard CSV/Parquet → Fluent ingestion (use building blocks)
|
|
430
|
+
- ✅ Better testability and maintainability
|
|
431
|
+
|
|
432
|
+
### Q: How do I add custom field transformations?
|
|
433
|
+
|
|
434
|
+
**Use Custom Resolvers in UniversalMapper:**
|
|
435
|
+
|
|
436
|
+
```typescript
|
|
437
|
+
const mapper = new UniversalMapper(config, {
|
|
438
|
+
customResolvers: {
|
|
439
|
+
'custom.calculatePrice': (value, sourceData, helpers) => {
|
|
440
|
+
return helpers.parseFloatSafe(value, 0) * 1.1; // Add 10%
|
|
441
|
+
},
|
|
442
|
+
},
|
|
443
|
+
});
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
**Documentation:** [Custom Resolvers](../02-CORE-GUIDES/mapping/resolvers/mapping-resolvers-resolver-guide.md)
|
|
447
|
+
|
|
448
|
+
### Q: How do I prevent duplicate file processing?
|
|
449
|
+
|
|
450
|
+
**Use State Management:**
|
|
451
|
+
|
|
452
|
+
```typescript
|
|
453
|
+
import { StateService, VersoriKVAdapter } from '@fluentcommerce/fc-connect-sdk';
|
|
454
|
+
|
|
455
|
+
const stateService = new StateService(new VersoriKVAdapter(kv));
|
|
456
|
+
|
|
457
|
+
const processed = await stateService.isFileProcessed(fileKey);
|
|
458
|
+
if (!processed) {
|
|
459
|
+
await processFile();
|
|
460
|
+
await stateService.markFileProcessed(fileKey, metadata);
|
|
461
|
+
}
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
**Documentation:** [State Management](../02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-07-state-management.md)
|
|
465
|
+
|
|
466
|
+
### Q: Can I use multiple Fluent Commerce accounts/retailers?
|
|
467
|
+
|
|
468
|
+
**Yes, create multiple clients:**
|
|
469
|
+
|
|
470
|
+
```typescript
|
|
471
|
+
const client1 = await createClient({ config: { retailerId: '1', ... } });
|
|
472
|
+
const client2 = await createClient({ config: { retailerId: '2', ... } });
|
|
473
|
+
|
|
474
|
+
// Use in parallel
|
|
475
|
+
await Promise.all([
|
|
476
|
+
client1.createJob({ ... }),
|
|
477
|
+
client2.createJob({ ... })
|
|
478
|
+
]);
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
**Documentation:** [Multiple Connections](../03-PATTERN-GUIDES/multiple-connections/multiple-connections-readme.md)
|
|
482
|
+
|
|
483
|
+
### Q: What if I need to process 100GB+ files?
|
|
484
|
+
|
|
485
|
+
**Use streaming and chunking with building blocks:**
|
|
486
|
+
|
|
487
|
+
```typescript
|
|
488
|
+
import {
|
|
489
|
+
S3DataSource,
|
|
490
|
+
CSVParserService,
|
|
491
|
+
UniversalMapper,
|
|
492
|
+
createClient,
|
|
493
|
+
} from '@fluentcommerce/fc-connect-sdk';
|
|
494
|
+
|
|
495
|
+
const s3 = new S3DataSource(config, logger);
|
|
496
|
+
const parser = new CSVParserService({ streaming: true }); // Enable streaming
|
|
497
|
+
const mapper = new UniversalMapper(mappingConfig);
|
|
498
|
+
const client = await createClient({ config });
|
|
499
|
+
|
|
500
|
+
// Create job
|
|
501
|
+
const job = await client.createJob({
|
|
502
|
+
name: 'Large File Processing',
|
|
503
|
+
retailerId: '1',
|
|
504
|
+
});
|
|
505
|
+
|
|
506
|
+
// Stream and process in chunks
|
|
507
|
+
const stream = await s3.streamFile('large-file.csv');
|
|
508
|
+
const recordStream = await parser.parseStream(stream);
|
|
509
|
+
|
|
510
|
+
let batch = [];
|
|
511
|
+
for await (const record of recordStream) {
|
|
512
|
+
const result = await mapper.map(record);
|
|
513
|
+
if (result.success) {
|
|
514
|
+
batch.push(result.data);
|
|
515
|
+
|
|
516
|
+
// Send when batch reaches 1000
|
|
517
|
+
if (batch.length >= 1000) {
|
|
518
|
+
await client.sendBatch(job.id, {
|
|
519
|
+
action: 'UPSERT',
|
|
520
|
+
entityType: 'INVENTORY',
|
|
521
|
+
entities: batch,
|
|
522
|
+
});
|
|
523
|
+
batch = [];
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
// Send remaining records
|
|
529
|
+
if (batch.length > 0) {
|
|
530
|
+
await client.sendBatch(job.id, {
|
|
531
|
+
action: 'UPSERT',
|
|
532
|
+
entityType: 'INVENTORY',
|
|
533
|
+
entities: batch,
|
|
534
|
+
});
|
|
535
|
+
}
|
|
536
|
+
```
|
|
537
|
+
|
|
538
|
+
**Documentation:** [Performance Optimization](../02-CORE-GUIDES/ingestion/modules/02-core-guides-ingestion-08-performance-optimization.md)
|
|
539
|
+
|
|
540
|
+
---
|
|
541
|
+
|
|
542
|
+
## Still Stuck?
|
|
543
|
+
|
|
544
|
+
1. **🔧 Debugging:** [`troubleshooting-quick-reference.md`](./troubleshooting-quick-reference.md) - Fix 90% of issues in 5 steps
|
|
545
|
+
2. **Check Examples:** [`docs/01-TEMPLATES/`](../01-TEMPLATES/) - 30+ real-world scenarios
|
|
546
|
+
3. **Read Philosophy:** [`sdk-philosophy.md`](./sdk-philosophy.md) - Understand the "why"
|
|
547
|
+
4. **API Reference:** [`api-reference/`](../02-CORE-GUIDES/api-reference/) - Complete method documentation
|
|
548
|
+
5. **Common Patterns:** [`patterns/`](../01-TEMPLATES/patterns/) - Reusable solutions
|
|
549
|
+
|
|
550
|
+
---
|
|
551
|
+
|
|
552
|
+
**[← Back to Getting Started](./getting-started.md)** | **[Troubleshooting →](./troubleshooting-quick-reference.md)** | **[API Reference →](../02-CORE-GUIDES/api-reference/api-reference-readme.md)**
|